{"version":3,"sources":["../node_modules/dotenv/lib/main.js","../node_modules/dotenv/lib/env-options.js","../node_modules/dotenv/lib/cli-options.js","../node_modules/qrcode-terminal/vendor/QRCode/QRMode.js","../node_modules/qrcode-terminal/vendor/QRCode/QR8bitByte.js","../node_modules/qrcode-terminal/vendor/QRCode/QRMath.js","../node_modules/qrcode-terminal/vendor/QRCode/QRPolynomial.js","../node_modules/qrcode-terminal/vendor/QRCode/QRMaskPattern.js","../node_modules/qrcode-terminal/vendor/QRCode/QRUtil.js","../node_modules/qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js","../node_modules/qrcode-terminal/vendor/QRCode/QRRSBlock.js","../node_modules/qrcode-terminal/vendor/QRCode/QRBitBuffer.js","../node_modules/qrcode-terminal/vendor/QRCode/index.js","../node_modules/qrcode-terminal/lib/main.js","../src/auth.ts","../node_modules/yaml/dist/nodes/identity.js","../node_modules/yaml/dist/visit.js","../node_modules/yaml/dist/doc/directives.js","../node_modules/yaml/dist/doc/anchors.js","../node_modules/yaml/dist/doc/applyReviver.js","../node_modules/yaml/dist/nodes/toJS.js","../node_modules/yaml/dist/nodes/Node.js","../node_modules/yaml/dist/nodes/Alias.js","../node_modules/yaml/dist/nodes/Scalar.js","../node_modules/yaml/dist/doc/createNode.js","../node_modules/yaml/dist/nodes/Collection.js","../node_modules/yaml/dist/stringify/stringifyComment.js","../node_modules/yaml/dist/stringify/foldFlowLines.js","../node_modules/yaml/dist/stringify/stringifyString.js","../node_modules/yaml/dist/stringify/stringify.js","../node_modules/yaml/dist/stringify/stringifyPair.js","../node_modules/yaml/dist/log.js","../node_modules/yaml/dist/schema/yaml-1.1/merge.js","../node_modules/yaml/dist/nodes/addPairToJSMap.js","../node_modules/yaml/dist/nodes/Pair.js","../node_modules/yaml/dist/stringify/stringifyCollection.js","../node_modules/yaml/dist/nodes/YAMLMap.js","../node_modules/yaml/dist/schema/common/map.js","../node_modules/yaml/dist/nodes/YAMLSeq.js","../node_modules/yaml/dist/schema/common/seq.js","../node_modules/yaml/dist/schema/common/string.js","../node_modules/yaml/dist/schema/common/null.js","../node_modules/yaml/dist/schema/core/bool.js","../node_modules/yaml/dist/stringify/stringifyNumber.js","../node_modules/yaml/dist/schema/core/float.js","../node_modules/yaml/dist/schema/core/int.js","../node_modules/yaml/dist/schema/core/schema.js","../node_modules/yaml/dist/schema/json/schema.js","../node_modules/yaml/dist/schema/yaml-1.1/binary.js","../node_modules/yaml/dist/schema/yaml-1.1/pairs.js","../node_modules/yaml/dist/schema/yaml-1.1/omap.js","../node_modules/yaml/dist/schema/yaml-1.1/bool.js","../node_modules/yaml/dist/schema/yaml-1.1/float.js","../node_modules/yaml/dist/schema/yaml-1.1/int.js","../node_modules/yaml/dist/schema/yaml-1.1/set.js","../node_modules/yaml/dist/schema/yaml-1.1/timestamp.js","../node_modules/yaml/dist/schema/yaml-1.1/schema.js","../node_modules/yaml/dist/schema/tags.js","../node_modules/yaml/dist/schema/Schema.js","../node_modules/yaml/dist/stringify/stringifyDocument.js","../node_modules/yaml/dist/doc/Document.js","../node_modules/yaml/dist/errors.js","../node_modules/yaml/dist/compose/resolve-props.js","../node_modules/yaml/dist/compose/util-contains-newline.js","../node_modules/yaml/dist/compose/util-flow-indent-check.js","../node_modules/yaml/dist/compose/util-map-includes.js","../node_modules/yaml/dist/compose/resolve-block-map.js","../node_modules/yaml/dist/compose/resolve-block-seq.js","../node_modules/yaml/dist/compose/resolve-end.js","../node_modules/yaml/dist/compose/resolve-flow-collection.js","../node_modules/yaml/dist/compose/compose-collection.js","../node_modules/yaml/dist/compose/resolve-block-scalar.js","../node_modules/yaml/dist/compose/resolve-flow-scalar.js","../node_modules/yaml/dist/compose/compose-scalar.js","../node_modules/yaml/dist/compose/util-empty-scalar-position.js","../node_modules/yaml/dist/compose/compose-node.js","../node_modules/yaml/dist/compose/compose-doc.js","../node_modules/yaml/dist/compose/composer.js","../node_modules/yaml/dist/parse/cst-scalar.js","../node_modules/yaml/dist/parse/cst-stringify.js","../node_modules/yaml/dist/parse/cst-visit.js","../node_modules/yaml/dist/parse/cst.js","../node_modules/yaml/dist/parse/lexer.js","../node_modules/yaml/dist/parse/line-counter.js","../node_modules/yaml/dist/parse/parser.js","../node_modules/yaml/dist/public-api.js","../node_modules/yaml/dist/index.js","../node_modules/zod/v4/core/core.js","../node_modules/zod/v4/core/util.js","../node_modules/zod/v4/core/errors.js","../node_modules/zod/v4/core/parse.js","../node_modules/zod/v4/core/regexes.js","../node_modules/zod/v4/core/checks.js","../node_modules/zod/v4/core/doc.js","../node_modules/zod/v4/core/versions.js","../node_modules/zod/v4/core/schemas.js","../node_modules/zod/v4/locales/ar.js","../node_modules/zod/v4/locales/az.js","../node_modules/zod/v4/locales/be.js","../node_modules/zod/v4/locales/bg.js","../node_modules/zod/v4/locales/ca.js","../node_modules/zod/v4/locales/cs.js","../node_modules/zod/v4/locales/da.js","../node_modules/zod/v4/locales/de.js","../node_modules/zod/v4/locales/el.js","../node_modules/zod/v4/locales/en.js","../node_modules/zod/v4/locales/eo.js","../node_modules/zod/v4/locales/es.js","../node_modules/zod/v4/locales/fa.js","../node_modules/zod/v4/locales/fi.js","../node_modules/zod/v4/locales/fr.js","../node_modules/zod/v4/locales/fr-CA.js","../node_modules/zod/v4/locales/he.js","../node_modules/zod/v4/locales/hr.js","../node_modules/zod/v4/locales/hu.js","../node_modules/zod/v4/locales/hy.js","../node_modules/zod/v4/locales/id.js","../node_modules/zod/v4/locales/is.js","../node_modules/zod/v4/locales/it.js","../node_modules/zod/v4/locales/ja.js","../node_modules/zod/v4/locales/ka.js","../node_modules/zod/v4/locales/km.js","../node_modules/zod/v4/locales/kh.js","../node_modules/zod/v4/locales/ko.js","../node_modules/zod/v4/locales/lt.js","../node_modules/zod/v4/locales/mk.js","../node_modules/zod/v4/locales/ms.js","../node_modules/zod/v4/locales/nl.js","../node_modules/zod/v4/locales/no.js","../node_modules/zod/v4/locales/ota.js","../node_modules/zod/v4/locales/ps.js","../node_modules/zod/v4/locales/pl.js","../node_modules/zod/v4/locales/pt.js","../node_modules/zod/v4/locales/ro.js","../node_modules/zod/v4/locales/ru.js","../node_modules/zod/v4/locales/sl.js","../node_modules/zod/v4/locales/sv.js","../node_modules/zod/v4/locales/ta.js","../node_modules/zod/v4/locales/th.js","../node_modules/zod/v4/locales/tr.js","../node_modules/zod/v4/locales/uk.js","../node_modules/zod/v4/locales/ua.js","../node_modules/zod/v4/locales/ur.js","../node_modules/zod/v4/locales/uz.js","../node_modules/zod/v4/locales/vi.js","../node_modules/zod/v4/locales/zh-CN.js","../node_modules/zod/v4/locales/zh-TW.js","../node_modules/zod/v4/locales/yo.js","../node_modules/zod/v4/locales/index.js","../node_modules/zod/v4/core/registries.js","../node_modules/zod/v4/core/api.js","../node_modules/zod/v4/core/to-json-schema.js","../node_modules/zod/v4/core/json-schema-processors.js","../node_modules/zod/v4/core/json-schema-generator.js","../node_modules/zod/v4/core/json-schema.js","../node_modules/zod/v4/core/index.js","../node_modules/zod/v4/classic/checks.js","../node_modules/zod/v4/classic/iso.js","../node_modules/zod/v4/classic/errors.js","../node_modules/zod/v4/classic/parse.js","../node_modules/zod/v4/classic/schemas.js","../node_modules/zod/v4/classic/compat.js","../node_modules/zod/v4/classic/from-json-schema.js","../node_modules/zod/v4/classic/coerce.js","../node_modules/zod/v4/classic/external.js","../node_modules/zod/index.js","../src/lifecycle/constants.ts","../node_modules/pino-std-serializers/lib/err-helpers.js","../node_modules/pino-std-serializers/lib/err-proto.js","../node_modules/pino-std-serializers/lib/err.js","../node_modules/pino-std-serializers/lib/err-with-cause.js","../node_modules/pino-std-serializers/lib/req.js","../node_modules/pino-std-serializers/lib/res.js","../node_modules/pino-std-serializers/index.js","../node_modules/pino/lib/caller.js","../node_modules/@pinojs/redact/index.js","../node_modules/pino/lib/symbols.js","../node_modules/pino/lib/redaction.js","../node_modules/pino/lib/time.js","../node_modules/quick-format-unescaped/index.js","../node_modules/atomic-sleep/index.js","../node_modules/sonic-boom/index.js","../node_modules/on-exit-leak-free/index.js","../node_modules/thread-stream/package.json","../node_modules/thread-stream/lib/wait.js","../node_modules/thread-stream/lib/indexes.js","../node_modules/thread-stream/index.js","../node_modules/pino/lib/transport.js","../node_modules/pino/lib/tools.js","../node_modules/pino/lib/constants.js","../node_modules/pino/lib/levels.js","../node_modules/pino/lib/meta.js","../node_modules/pino/lib/proto.js","../node_modules/safe-stable-stringify/index.js","../node_modules/pino/lib/multistream.js","../node_modules/pino/pino.js","../src/logger.ts","../node_modules/ws/lib/constants.js","../node_modules/ws/lib/buffer-util.js","../node_modules/ws/lib/limiter.js","../node_modules/ws/lib/permessage-deflate.js","../node_modules/ws/lib/validation.js","../node_modules/ws/lib/receiver.js","../node_modules/ws/lib/sender.js","../node_modules/ws/lib/event-target.js","../node_modules/ws/lib/extension.js","../node_modules/ws/lib/websocket.js","../node_modules/ws/lib/stream.js","../node_modules/ws/lib/subprotocol.js","../node_modules/ws/lib/websocket-server.js","../node_modules/@temporalio/common/src/encoding.ts","../node_modules/@temporalio/common/src/type-helpers.ts","../node_modules/@temporalio/common/src/errors.ts","../node_modules/@temporalio/common/src/internal-workflow/enums-helpers.ts","../node_modules/@temporalio/common/src/internal-workflow/objects-helpers.ts","../node_modules/@temporalio/common/src/internal-workflow/index.ts","../node_modules/@temporalio/common/src/activity-options.ts","../node_modules/@temporalio/common/src/activity-cancellation-details.ts","../node_modules/@temporalio/common/src/continue-as-new.ts","../node_modules/nexus-rpc/src/internal/symbol-instanceof.ts","../node_modules/nexus-rpc/src/common/handler-error.ts","../node_modules/nexus-rpc/src/common/operation-error.ts","../node_modules/nexus-rpc/src/common/index.ts","../node_modules/nexus-rpc/src/internal/object-utils.ts","../node_modules/nexus-rpc/src/service/service-definition.ts","../node_modules/nexus-rpc/src/service/helpers.ts","../node_modules/nexus-rpc/src/service/index.ts","../node_modules/nexus-rpc/src/handler/start-operation-result.ts","../node_modules/nexus-rpc/src/handler/operation-handler.ts","../node_modules/nexus-rpc/src/handler/service-handler.ts","../node_modules/nexus-rpc/src/handler/index.ts","../node_modules/nexus-rpc/src/index.ts","../node_modules/long/umd/index.js","../node_modules/@temporalio/common/src/failure.ts","../node_modules/ms/dist/index.cjs","../node_modules/@temporalio/common/src/time.ts","../node_modules/@temporalio/common/src/converter/types.ts","../node_modules/@temporalio/common/src/converter/payload-converter.ts","../node_modules/@temporalio/common/src/converter/failure-converter.ts","../node_modules/@temporalio/common/src/converter/data-converter.ts","../node_modules/@temporalio/common/lib/converter/payload-codec.js","../node_modules/@temporalio/common/src/deprecated-time.ts","../node_modules/@temporalio/common/src/interfaces.ts","../node_modules/@temporalio/common/src/logger.ts","../node_modules/@temporalio/common/src/priority.ts","../node_modules/@temporalio/common/src/metrics.ts","../node_modules/@temporalio/common/src/retry-policy.ts","../node_modules/@temporalio/common/src/worker-deployments.ts","../node_modules/@temporalio/common/lib/workflow-definition-options.js","../node_modules/@temporalio/common/lib/workflow-handle.js","../node_modules/@temporalio/common/src/workflow-options.ts","../node_modules/@temporalio/common/lib/versioning-intent.js","../node_modules/@temporalio/common/src/search-attributes.ts","../node_modules/@temporalio/common/src/index.ts","../node_modules/@grpc/grpc-js/src/constants.ts","../node_modules/@grpc/grpc-js/package.json","../node_modules/@grpc/grpc-js/src/logging.ts","../node_modules/@grpc/grpc-js/src/error.ts","../node_modules/@grpc/grpc-js/src/metadata.ts","../node_modules/@grpc/grpc-js/src/call-credentials.ts","../node_modules/@grpc/grpc-js/src/tls-helpers.ts","../node_modules/@grpc/grpc-js/src/uri-parser.ts","../node_modules/@grpc/grpc-js/src/resolver.ts","../node_modules/@grpc/grpc-js/src/channel-credentials.ts","../node_modules/@grpc/grpc-js/src/load-balancer.ts","../node_modules/@grpc/grpc-js/src/service-config.ts","../node_modules/@grpc/grpc-js/src/connectivity-state.ts","../node_modules/@grpc/grpc-js/src/picker.ts","../node_modules/@grpc/grpc-js/src/backoff-timeout.ts","../node_modules/@grpc/grpc-js/src/load-balancer-child-handler.ts","../node_modules/@grpc/grpc-js/src/resolving-load-balancer.ts","../node_modules/@grpc/grpc-js/src/channel-options.ts","../node_modules/@grpc/grpc-js/src/subchannel-address.ts","../node_modules/tslib/tslib.es6.js","../node_modules/@js-sdsl/ordered-map/dist/esm/index.js","../node_modules/@js-sdsl/.build-data/copied-source/src/container/TreeContainer/Base/TreeNode.ts","../node_modules/@js-sdsl/.build-data/copied-source/src/container/ContainerBase/index.ts","../node_modules/@js-sdsl/.build-data/copied-source/src/utils/throwError.ts","../node_modules/@js-sdsl/.build-data/copied-source/src/container/TreeContainer/Base/index.ts","../node_modules/@js-sdsl/.build-data/copied-source/src/container/TreeContainer/Base/TreeIterator.ts","../node_modules/@js-sdsl/.build-data/copied-source/src/container/TreeContainer/OrderedMap.ts","../node_modules/@grpc/grpc-js/src/admin.ts","../node_modules/@grpc/grpc-js/src/call.ts","../node_modules/@grpc/grpc-js/src/call-interface.ts","../node_modules/@grpc/grpc-js/src/client-interceptors.ts","../node_modules/@grpc/grpc-js/src/client.ts","../node_modules/@grpc/grpc-js/src/make-client.ts","../node_modules/lodash.camelcase/index.js","../node_modules/@protobufjs/aspromise/index.js","../node_modules/@protobufjs/base64/index.js","../node_modules/@protobufjs/eventemitter/index.js","../node_modules/@protobufjs/float/index.js","../node_modules/@protobufjs/utf8/index.js","../node_modules/@protobufjs/pool/index.js","../node_modules/protobufjs/src/util/longbits.js","../node_modules/protobufjs/src/util/minimal.js","../node_modules/protobufjs/src/writer.js","../node_modules/protobufjs/src/writer_buffer.js","../node_modules/protobufjs/src/reader.js","../node_modules/protobufjs/src/reader_buffer.js","../node_modules/protobufjs/src/rpc/service.js","../node_modules/protobufjs/src/rpc.js","../node_modules/protobufjs/src/roots.js","../node_modules/protobufjs/src/index-minimal.js","../node_modules/@protobufjs/codegen/index.js","../node_modules/@protobufjs/fetch/util/fs.js","../node_modules/@protobufjs/fetch/index.js","../node_modules/@protobufjs/path/index.js","../node_modules/protobufjs/src/util/patterns.js","../node_modules/protobufjs/src/util/fs.js","../node_modules/protobufjs/src/namespace.js","../node_modules/protobufjs/src/mapfield.js","../node_modules/protobufjs/src/method.js","../node_modules/protobufjs/src/service.js","../node_modules/protobufjs/src/message.js","../node_modules/protobufjs/src/decoder.js","../node_modules/protobufjs/src/verifier.js","../node_modules/protobufjs/src/converter.js","../node_modules/protobufjs/src/wrappers.js","../node_modules/protobufjs/src/type.js","../node_modules/protobufjs/src/root.js","../node_modules/protobufjs/src/util.js","../node_modules/protobufjs/src/types.js","../node_modules/protobufjs/src/field.js","../node_modules/protobufjs/src/oneof.js","../node_modules/protobufjs/src/object.js","../node_modules/protobufjs/src/enum.js","../node_modules/protobufjs/src/encoder.js","../node_modules/protobufjs/src/index-light.js","../node_modules/protobufjs/src/tokenize.js","../node_modules/protobufjs/src/parse.js","../node_modules/protobufjs/src/common.js","../node_modules/protobufjs/src/index.js","../node_modules/protobufjs/index.js","../node_modules/protobufjs/google/protobuf/descriptor.json","../node_modules/protobufjs/ext/descriptor/index.js","../node_modules/protobufjs/google/protobuf/api.json","../node_modules/protobufjs/google/protobuf/source_context.json","../node_modules/protobufjs/google/protobuf/type.json","../node_modules/@grpc/proto-loader/src/util.ts","../node_modules/@grpc/proto-loader/src/index.ts","../node_modules/@grpc/grpc-js/src/channelz.ts","../node_modules/@grpc/grpc-js/src/call-number.ts","../node_modules/@grpc/grpc-js/src/compression-algorithms.ts","../node_modules/@grpc/grpc-js/src/filter.ts","../node_modules/@grpc/grpc-js/src/compression-filter.ts","../node_modules/@grpc/grpc-js/src/control-plane-status.ts","../node_modules/@grpc/grpc-js/src/deadline.ts","../node_modules/@grpc/grpc-js/src/filter-stack.ts","../node_modules/@grpc/grpc-js/src/single-subchannel-channel.ts","../node_modules/@grpc/grpc-js/src/subchannel.ts","../node_modules/@grpc/grpc-js/src/environment.ts","../node_modules/@grpc/grpc-js/src/resolver-dns.ts","../node_modules/@grpc/grpc-js/src/http_proxy.ts","../node_modules/@grpc/grpc-js/src/stream-decoder.ts","../node_modules/@grpc/grpc-js/src/subchannel-call.ts","../node_modules/@grpc/grpc-js/src/transport.ts","../node_modules/@grpc/grpc-js/src/subchannel-pool.ts","../node_modules/@grpc/grpc-js/src/load-balancing-call.ts","../node_modules/@grpc/grpc-js/src/resolving-call.ts","../node_modules/@grpc/grpc-js/src/retrying-call.ts","../node_modules/@grpc/grpc-js/src/subchannel-interface.ts","../node_modules/@grpc/grpc-js/src/internal-channel.ts","../node_modules/@grpc/grpc-js/src/channel.ts","../node_modules/@grpc/grpc-js/src/server-call.ts","../node_modules/@grpc/grpc-js/src/server-credentials.ts","../node_modules/@grpc/grpc-js/src/duration.ts","../node_modules/@grpc/grpc-js/src/orca.ts","../node_modules/@grpc/grpc-js/src/server-interceptors.ts","../node_modules/@grpc/grpc-js/src/server.ts","../node_modules/@grpc/grpc-js/src/status-builder.ts","../node_modules/@grpc/grpc-js/src/load-balancer-pick-first.ts","../node_modules/@grpc/grpc-js/src/certificate-provider.ts","../node_modules/@grpc/grpc-js/src/experimental.ts","../node_modules/@grpc/grpc-js/src/resolver-uds.ts","../node_modules/@grpc/grpc-js/src/resolver-ip.ts","../node_modules/@grpc/grpc-js/src/load-balancer-round-robin.ts","../node_modules/@grpc/grpc-js/src/load-balancer-outlier-detection.ts","../node_modules/@grpc/grpc-js/src/priority-queue.ts","../node_modules/@grpc/grpc-js/src/load-balancer-weighted-round-robin.ts","../node_modules/@grpc/grpc-js/src/index.ts","../node_modules/@temporalio/common/src/internal-non-workflow/codec-helpers.ts","../node_modules/@temporalio/common/lib/internal-non-workflow/codec-types.js","../node_modules/@temporalio/common/src/internal-non-workflow/data-converter-helpers.ts","../node_modules/@temporalio/common/src/internal-non-workflow/parse-host-uri.ts","../node_modules/@temporalio/common/src/internal-non-workflow/proxy-config.ts","../node_modules/@temporalio/common/src/internal-non-workflow/tls-config.ts","../node_modules/@temporalio/common/src/internal-non-workflow/index.ts","../node_modules/@temporalio/client/src/errors.ts","../node_modules/@temporalio/client/src/grpc-retry.ts","../node_modules/@temporalio/client/package.json","../node_modules/@temporalio/client/src/pkg.ts","../node_modules/@protobufjs/inquire/index.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/util/longbits.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/util/minimal.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/writer.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/writer_buffer.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/reader.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/reader_buffer.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/rpc/service.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/rpc.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/roots.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/index-minimal.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/util/patterns.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/namespace.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/mapfield.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/method.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/service.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/message.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/decoder.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/verifier.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/converter.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/wrappers.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/type.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/root.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/util.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/types.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/field.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/oneof.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/object.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/enum.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/encoder.js","../node_modules/@temporalio/proto/node_modules/protobufjs/src/index-light.js","../node_modules/@temporalio/proto/node_modules/protobufjs/light.js","../node_modules/@temporalio/proto/src/patch-protobuf-root.ts","../node_modules/@temporalio/proto/protos/json-module.js","../node_modules/@temporalio/proto/protos/root.js","../node_modules/@temporalio/proto/protos/index.js","../node_modules/@temporalio/client/src/types.ts","../node_modules/@temporalio/client/src/connection.ts","../node_modules/@temporalio/client/src/base-client.ts","../node_modules/@temporalio/common/src/converter/payload-search-attributes.ts","../node_modules/@temporalio/client/src/helpers.ts","../node_modules/@temporalio/client/src/async-completion-client.ts","../node_modules/@temporalio/common/src/interceptors.ts","../node_modules/@temporalio/client/src/activity-client.ts","../node_modules/uuid/dist/cjs/max.js","../node_modules/uuid/dist/cjs/nil.js","../node_modules/uuid/dist/cjs/regex.js","../node_modules/uuid/dist/cjs/validate.js","../node_modules/uuid/dist/cjs/parse.js","../node_modules/uuid/dist/cjs/stringify.js","../node_modules/uuid/dist/cjs/rng.js","../node_modules/uuid/dist/cjs/v1.js","../node_modules/uuid/dist/cjs/v1ToV6.js","../node_modules/uuid/dist/cjs/md5.js","../node_modules/uuid/dist/cjs/v35.js","../node_modules/uuid/dist/cjs/v3.js","../node_modules/uuid/dist/cjs/native.js","../node_modules/uuid/dist/cjs/v4.js","../node_modules/uuid/dist/cjs/sha1.js","../node_modules/uuid/dist/cjs/v5.js","../node_modules/uuid/dist/cjs/v6.js","../node_modules/uuid/dist/cjs/v6ToV1.js","../node_modules/uuid/dist/cjs/v7.js","../node_modules/uuid/dist/cjs/version.js","../node_modules/uuid/dist/cjs/index.js","../node_modules/@temporalio/client/src/nexus-types.ts","../node_modules/@temporalio/client/src/nexus-client.ts","../node_modules/@temporalio/client/src/schedule-types.ts","../node_modules/@temporalio/client/src/schedule-helpers.ts","../node_modules/@temporalio/client/src/schedule-client.ts","../node_modules/@temporalio/client/src/workflow-options.ts","../node_modules/@temporalio/client/src/iterators-utils.ts","../node_modules/@temporalio/client/src/workflow-update-stage.ts","../node_modules/@temporalio/client/src/internal.ts","../node_modules/@temporalio/client/src/interceptor-adapters.ts","../node_modules/@temporalio/client/src/workflow-client.ts","../node_modules/@temporalio/client/src/build-id-types.ts","../node_modules/@temporalio/client/src/task-queue-client.ts","../node_modules/@temporalio/client/src/client.ts","../node_modules/@temporalio/client/src/index.ts","../node_modules/fast-glob/out/utils/array.js","../node_modules/fast-glob/out/utils/errno.js","../node_modules/fast-glob/out/utils/fs.js","../node_modules/fast-glob/out/utils/path.js","../node_modules/is-extglob/index.js","../node_modules/is-glob/index.js","../node_modules/glob-parent/index.js","../node_modules/braces/lib/utils.js","../node_modules/braces/lib/stringify.js","../node_modules/is-number/index.js","../node_modules/to-regex-range/index.js","../node_modules/fill-range/index.js","../node_modules/braces/lib/compile.js","../node_modules/braces/lib/expand.js","../node_modules/braces/lib/constants.js","../node_modules/braces/lib/parse.js","../node_modules/braces/index.js","../node_modules/picomatch/lib/constants.js","../node_modules/picomatch/lib/utils.js","../node_modules/picomatch/lib/scan.js","../node_modules/picomatch/lib/parse.js","../node_modules/picomatch/lib/picomatch.js","../node_modules/picomatch/index.js","../node_modules/micromatch/index.js","../node_modules/fast-glob/out/utils/pattern.js","../node_modules/merge2/index.js","../node_modules/fast-glob/out/utils/stream.js","../node_modules/fast-glob/out/utils/string.js","../node_modules/fast-glob/out/utils/index.js","../node_modules/fast-glob/out/managers/tasks.js","../node_modules/@nodelib/fs.stat/out/providers/async.js","../node_modules/@nodelib/fs.stat/out/providers/sync.js","../node_modules/@nodelib/fs.stat/out/adapters/fs.js","../node_modules/@nodelib/fs.stat/out/settings.js","../node_modules/@nodelib/fs.stat/out/index.js","../node_modules/queue-microtask/index.js","../node_modules/run-parallel/index.js","../node_modules/@nodelib/fs.scandir/out/constants.js","../node_modules/@nodelib/fs.scandir/out/utils/fs.js","../node_modules/@nodelib/fs.scandir/out/utils/index.js","../node_modules/@nodelib/fs.scandir/out/providers/common.js","../node_modules/@nodelib/fs.scandir/out/providers/async.js","../node_modules/@nodelib/fs.scandir/out/providers/sync.js","../node_modules/@nodelib/fs.scandir/out/adapters/fs.js","../node_modules/@nodelib/fs.scandir/out/settings.js","../node_modules/@nodelib/fs.scandir/out/index.js","../node_modules/reusify/reusify.js","../node_modules/fastq/queue.js","../node_modules/@nodelib/fs.walk/out/readers/common.js","../node_modules/@nodelib/fs.walk/out/readers/reader.js","../node_modules/@nodelib/fs.walk/out/readers/async.js","../node_modules/@nodelib/fs.walk/out/providers/async.js","../node_modules/@nodelib/fs.walk/out/providers/stream.js","../node_modules/@nodelib/fs.walk/out/readers/sync.js","../node_modules/@nodelib/fs.walk/out/providers/sync.js","../node_modules/@nodelib/fs.walk/out/settings.js","../node_modules/@nodelib/fs.walk/out/index.js","../node_modules/fast-glob/out/readers/reader.js","../node_modules/fast-glob/out/readers/stream.js","../node_modules/fast-glob/out/readers/async.js","../node_modules/fast-glob/out/providers/matchers/matcher.js","../node_modules/fast-glob/out/providers/matchers/partial.js","../node_modules/fast-glob/out/providers/filters/deep.js","../node_modules/fast-glob/out/providers/filters/entry.js","../node_modules/fast-glob/out/providers/filters/error.js","../node_modules/fast-glob/out/providers/transformers/entry.js","../node_modules/fast-glob/out/providers/provider.js","../node_modules/fast-glob/out/providers/async.js","../node_modules/fast-glob/out/providers/stream.js","../node_modules/fast-glob/out/readers/sync.js","../node_modules/fast-glob/out/providers/sync.js","../node_modules/fast-glob/out/settings.js","../node_modules/fast-glob/out/index.js","../node_modules/postgres-array/index.js","../node_modules/pg-types/lib/arrayParser.js","../node_modules/postgres-date/index.js","../node_modules/xtend/mutable.js","../node_modules/postgres-interval/index.js","../node_modules/postgres-bytea/index.js","../node_modules/pg-types/lib/textParsers.js","../node_modules/pg-int8/index.js","../node_modules/pg-types/lib/binaryParsers.js","../node_modules/pg-types/lib/builtins.js","../node_modules/pg-types/index.js","../node_modules/pg/lib/defaults.js","../node_modules/pg/lib/utils.js","../node_modules/pg/lib/crypto/utils.js","../node_modules/pg/lib/crypto/cert-signatures.js","../node_modules/pg/lib/crypto/sasl.js","../node_modules/pg/lib/type-overrides.js","../node_modules/pg-connection-string/index.js","../node_modules/pg/lib/connection-parameters.js","../node_modules/pg/lib/result.js","../node_modules/pg/lib/query.js","../node_modules/pg-protocol/src/messages.ts","../node_modules/pg-protocol/src/buffer-writer.ts","../node_modules/pg-protocol/src/serializer.ts","../node_modules/pg-protocol/src/buffer-reader.ts","../node_modules/pg-protocol/src/parser.ts","../node_modules/pg-protocol/src/index.ts","../node_modules/pg-cloudflare/src/empty.ts","../node_modules/pg/lib/stream.js","../node_modules/pg/lib/connection.js","../node_modules/split2/index.js","../node_modules/pgpass/lib/helper.js","../node_modules/pgpass/lib/index.js","../node_modules/pg/lib/client.js","../node_modules/pg-pool/index.js","../node_modules/pg/lib/native/query.js","../node_modules/pg/lib/native/client.js","../node_modules/pg/lib/native/index.js","../node_modules/pg/lib/index.js","../node_modules/pg/esm/index.mjs","webpack://@xterm/xterm/src/common/CircularList.ts","webpack://@xterm/xterm/src/common/Clone.ts","webpack://@xterm/xterm/src/common/CoreTerminal.ts","webpack://@xterm/xterm/src/common/InputHandler.ts","webpack://@xterm/xterm/src/common/Platform.ts","webpack://@xterm/xterm/src/common/TaskQueue.ts","webpack://@xterm/xterm/src/common/WindowsMode.ts","webpack://@xterm/xterm/src/common/buffer/AttributeData.ts","webpack://@xterm/xterm/src/common/buffer/Buffer.ts","webpack://@xterm/xterm/src/common/buffer/BufferLine.ts","webpack://@xterm/xterm/src/common/buffer/BufferReflow.ts","webpack://@xterm/xterm/src/common/buffer/BufferSet.ts","webpack://@xterm/xterm/src/common/buffer/CellData.ts","webpack://@xterm/xterm/src/common/buffer/Constants.ts","webpack://@xterm/xterm/src/common/buffer/Marker.ts","webpack://@xterm/xterm/src/common/data/Charsets.ts","webpack://@xterm/xterm/src/common/data/EscapeSequences.ts","webpack://@xterm/xterm/src/common/input/TextDecoder.ts","webpack://@xterm/xterm/src/common/input/UnicodeV6.ts","webpack://@xterm/xterm/src/common/input/WriteBuffer.ts","webpack://@xterm/xterm/src/common/input/XParseColor.ts","webpack://@xterm/xterm/src/common/parser/Constants.ts","webpack://@xterm/xterm/src/common/parser/DcsParser.ts","webpack://@xterm/xterm/src/common/parser/EscapeSequenceParser.ts","webpack://@xterm/xterm/src/common/parser/OscParser.ts","webpack://@xterm/xterm/src/common/parser/Params.ts","webpack://@xterm/xterm/src/common/public/AddonManager.ts","webpack://@xterm/xterm/src/common/public/BufferApiView.ts","webpack://@xterm/xterm/src/common/public/BufferLineApiView.ts","webpack://@xterm/xterm/src/common/public/BufferNamespaceApi.ts","webpack://@xterm/xterm/src/common/public/ParserApi.ts","webpack://@xterm/xterm/src/common/public/UnicodeApi.ts","webpack://@xterm/xterm/src/common/services/BufferService.ts","webpack://@xterm/xterm/src/common/services/CharsetService.ts","webpack://@xterm/xterm/src/common/services/CoreMouseService.ts","webpack://@xterm/xterm/src/common/services/CoreService.ts","webpack://@xterm/xterm/src/common/services/InstantiationService.ts","webpack://@xterm/xterm/src/common/services/LogService.ts","webpack://@xterm/xterm/src/common/services/OptionsService.ts","webpack://@xterm/xterm/src/common/services/OscLinkService.ts","webpack://@xterm/xterm/src/common/services/ServiceRegistry.ts","webpack://@xterm/xterm/src/common/services/Services.ts","webpack://@xterm/xterm/src/common/services/UnicodeService.ts","webpack://@xterm/xterm/src/headless/Terminal.ts","webpack://@xterm/xterm/out/vs/base/common/arrays.js","webpack://@xterm/xterm/out/vs/base/common/arraysFind.js","webpack://@xterm/xterm/out/vs/base/common/collections.js","webpack://@xterm/xterm/out/vs/base/common/errors.js","webpack://@xterm/xterm/out/vs/base/common/event.js","webpack://@xterm/xterm/out/vs/base/common/functional.js","webpack://@xterm/xterm/out/vs/base/common/iterator.js","webpack://@xterm/xterm/out/vs/base/common/lifecycle.js","webpack://@xterm/xterm/out/vs/base/common/linkedList.js","webpack://@xterm/xterm/out/vs/base/common/map.js","webpack://@xterm/xterm/out/vs/base/common/stopwatch.js","webpack://@xterm/xterm/webpack/bootstrap","webpack://@xterm/xterm/src/headless/public/Terminal.ts","../node_modules/tweetnacl/nacl-fast.js","../node_modules/tweetnacl-util/nacl-util.js","../node_modules/libheif-js/libheif-wasm/libheif-bundle.js","../node_modules/libheif-js/wasm-bundle.js","../node_modules/heic-decode/lib.js","../node_modules/heic-decode/index.js","../node_modules/jpeg-js/lib/encoder.js","../node_modules/jpeg-js/lib/decoder.js","../node_modules/jpeg-js/index.js","../node_modules/pngjs/lib/chunkstream.js","../node_modules/pngjs/lib/interlace.js","../node_modules/pngjs/lib/paeth-predictor.js","../node_modules/pngjs/lib/filter-parse.js","../node_modules/pngjs/lib/filter-parse-async.js","../node_modules/pngjs/lib/constants.js","../node_modules/pngjs/lib/crc.js","../node_modules/pngjs/lib/parser.js","../node_modules/pngjs/lib/bitmapper.js","../node_modules/pngjs/lib/format-normaliser.js","../node_modules/pngjs/lib/parser-async.js","../node_modules/pngjs/lib/bitpacker.js","../node_modules/pngjs/lib/filter-pack.js","../node_modules/pngjs/lib/packer.js","../node_modules/pngjs/lib/packer-async.js","../node_modules/pngjs/lib/sync-inflate.js","../node_modules/pngjs/lib/sync-reader.js","../node_modules/pngjs/lib/filter-parse-sync.js","../node_modules/pngjs/lib/parser-sync.js","../node_modules/pngjs/lib/packer-sync.js","../node_modules/pngjs/lib/png-sync.js","../node_modules/pngjs/lib/png.js","../node_modules/heic-convert/formats-node.js","../node_modules/heic-convert/lib.js","../node_modules/heic-convert/index.js","../node_modules/semver/internal/constants.js","../node_modules/semver/internal/debug.js","../node_modules/semver/internal/re.js","../node_modules/semver/internal/parse-options.js","../node_modules/semver/internal/identifiers.js","../node_modules/semver/classes/semver.js","../node_modules/semver/functions/parse.js","../node_modules/semver/functions/valid.js","../node_modules/semver/functions/clean.js","../node_modules/semver/functions/inc.js","../node_modules/semver/functions/diff.js","../node_modules/semver/functions/major.js","../node_modules/semver/functions/minor.js","../node_modules/semver/functions/patch.js","../node_modules/semver/functions/prerelease.js","../node_modules/semver/functions/compare.js","../node_modules/semver/functions/rcompare.js","../node_modules/semver/functions/compare-loose.js","../node_modules/semver/functions/compare-build.js","../node_modules/semver/functions/sort.js","../node_modules/semver/functions/rsort.js","../node_modules/semver/functions/gt.js","../node_modules/semver/functions/lt.js","../node_modules/semver/functions/eq.js","../node_modules/semver/functions/neq.js","../node_modules/semver/functions/gte.js","../node_modules/semver/functions/lte.js","../node_modules/semver/functions/cmp.js","../node_modules/semver/functions/coerce.js","../node_modules/semver/functions/truncate.js","../node_modules/semver/internal/lrucache.js","../node_modules/semver/classes/range.js","../node_modules/semver/classes/comparator.js","../node_modules/semver/functions/satisfies.js","../node_modules/semver/ranges/to-comparators.js","../node_modules/semver/ranges/max-satisfying.js","../node_modules/semver/ranges/min-satisfying.js","../node_modules/semver/ranges/min-version.js","../node_modules/semver/ranges/valid.js","../node_modules/semver/ranges/outside.js","../node_modules/semver/ranges/gtr.js","../node_modules/semver/ranges/ltr.js","../node_modules/semver/ranges/intersects.js","../node_modules/semver/ranges/simplify.js","../node_modules/semver/ranges/subset.js","../node_modules/semver/index.js","../src/lifecycle/launchd.ts","../src/lifecycle/marker-schema.ts","../src/lifecycle/marker.ts","../src/lifecycle/task-scheduler.ts","../src/lifecycle/platform.ts","../src/lifecycle/prefs.ts","../src/lifecycle/dev-takeover.ts","../src/lifecycle/prompt.ts","../src/lifecycle/repo.ts","../cli/setKey.ts","../node_modules/dotenv/config.js","../node_modules/commander/lib/error.js","../node_modules/commander/lib/argument.js","../node_modules/commander/lib/command.js","../node_modules/commander/lib/help.js","../node_modules/commander/lib/option.js","../node_modules/commander/lib/suggestSimilar.js","../node_modules/commander/index.js","../cli/index.ts","../src/config/update-config.ts","../src/schemas/updateConfig.schema.ts","../src/devLog.ts","../src/lan-url.ts","../node_modules/hono/dist/helper/websocket/index.js","../node_modules/ws/wrapper.mjs","../node_modules/@hono/node-ws/src/events.ts","../node_modules/@hono/node-ws/src/index.ts","../src/server.ts","../node_modules/@threadbase-sh/scanner/src/filters.ts","../node_modules/@threadbase-sh/scanner/src/git.ts","../node_modules/@threadbase-sh/scanner/src/logger.ts","../node_modules/@threadbase-sh/scanner/src/indexer.ts","../node_modules/@threadbase-sh/scanner/src/search-matches.ts","../node_modules/@threadbase-sh/scanner/src/persistent/sidecar.ts","../node_modules/@threadbase-sh/scanner/src/profiles.ts","../node_modules/@threadbase-sh/scanner/src/providers/codex-cli.ts","../node_modules/@threadbase-sh/scanner/src/tags.ts","../node_modules/@threadbase-sh/scanner/src/providers/provider.ts","../node_modules/@threadbase-sh/scanner/src/discovery.ts","../node_modules/@threadbase-sh/scanner/src/persistent/metadata-reducer.ts","../node_modules/@threadbase-sh/scanner/src/parser.ts","../node_modules/@threadbase-sh/scanner/src/persistent/conversation-reducer.ts","../node_modules/@threadbase-sh/scanner/src/providers/threadbase.ts","../node_modules/@threadbase-sh/scanner/src/scanner.ts","../node_modules/@threadbase-sh/scanner/src/cache.ts","../node_modules/@threadbase-sh/scanner/src/persistent/cursor.ts","../node_modules/@threadbase-sh/scanner/src/providers/parse.ts","../node_modules/@threadbase-sh/scanner/src/tiers.ts","../node_modules/@threadbase-sh/scanner/src/persistent/db.ts","../node_modules/@threadbase-sh/scanner/src/persistent/schema.ts","../node_modules/@threadbase-sh/scanner/src/persistent/migrations.ts","../node_modules/@threadbase-sh/scanner/src/persistent/jsonl-tail-reader.ts","../node_modules/@threadbase-sh/scanner/src/persistent/paged-reader.ts","../node_modules/@threadbase-sh/scanner/src/persistent/repositories/checkpoints.repo.ts","../node_modules/@threadbase-sh/scanner/src/persistent/repositories/conversation-files.repo.ts","../node_modules/@threadbase-sh/scanner/src/persistent/repositories/conversations.repo.ts","../node_modules/@threadbase-sh/scanner/src/persistent/repositories/fts.repo.ts","../node_modules/@threadbase-sh/scanner/src/persistent/index-engine.ts","../node_modules/@threadbase-sh/scanner/src/watcher/file-watcher.ts","../node_modules/@threadbase-sh/scanner/src/watcher/index-queue.ts","../node_modules/@threadbase-sh/scanner/src/types.ts","../node_modules/@threadbase-sh/scanner/src/index.ts","../node_modules/flexsearch/dist/flexsearch.bundle.module.min.js","../node_modules/@threadbase-sh/scanner/node_modules/chokidar/esm/index.js","../node_modules/@threadbase-sh/scanner/node_modules/readdirp/esm/index.js","../node_modules/@threadbase-sh/scanner/node_modules/chokidar/esm/handler.js","../src/agent/agent-client.ts","../src/agent/agent-config.ts","../src/agent/conversation-writer.ts","../node_modules/nanoid/index.js","../node_modules/nanoid/url-alphabet/index.js","../src/agent/handle-send-agent-input.ts","../src/agent/errors.ts","../src/agent/history-mapper.ts","../src/agent/payload-guard.ts","../src/agent/handle-start-agent-session.ts","../node_modules/hono/dist/compose.js","../node_modules/hono/dist/request/constants.js","../node_modules/hono/dist/utils/body.js","../node_modules/hono/dist/utils/url.js","../node_modules/hono/dist/request.js","../node_modules/hono/dist/utils/html.js","../node_modules/hono/dist/context.js","../node_modules/hono/dist/router.js","../node_modules/hono/dist/utils/constants.js","../node_modules/hono/dist/hono-base.js","../node_modules/hono/dist/router/reg-exp-router/matcher.js","../node_modules/hono/dist/router/reg-exp-router/node.js","../node_modules/hono/dist/router/reg-exp-router/trie.js","../node_modules/hono/dist/router/reg-exp-router/router.js","../node_modules/hono/dist/router/smart-router/router.js","../node_modules/hono/dist/router/trie-router/node.js","../node_modules/hono/dist/router/trie-router/router.js","../node_modules/hono/dist/hono.js","../src/api/app.ts","../src/api/middleware/auth.middleware.ts","../src/api/middleware/cors.middleware.ts","../src/api/middleware/error.middleware.ts","../src/api/routes/browse.routes.ts","../src/api/routes/conversations.routes.ts","../src/version.ts","../src/api/routes/health.routes.ts","../src/api/routes/misc.routes.ts","../src/api/routes/pair.routes.ts","../src/api/routes/progress.routes.ts","../src/api/routes/projects.routes.ts","../src/api/routes/scanner.routes.ts","../src/api/routes/sessions.routes.ts","../src/api/routes/ws.routes.ts","../src/browse.ts","../src/conversation-cache.ts","../src/db/sqlite-migrate.ts","../src/providers.ts","../src/services/conversations/isAgentConversation.ts","../src/db/config.ts","../src/db/migrations.ts","../src/db/pool.ts","../src/db/repositories/cacheMetadata.repository.ts","../src/db/repositories/conversations.repository.ts","../src/db/repositories/projects.repository.ts","../src/utils/canonicalizeProjectPath.ts","../src/db/repositories/sessions.repository.ts","../src/db/upload-records.ts","../src/handlers/handleListProjects.ts","../src/pair-store.ts","../src/process-discovery.ts","../src/platform.ts","../src/pty-manager.ts","../src/services/questions/detectPermissionGate.ts","../src/services/questions/detectQuestionFromScreen.ts","../src/services/questions/detectShellPrompt.ts","../src/seal.ts","../node_modules/chokidar/index.js","../node_modules/readdirp/index.js","../node_modules/chokidar/handler.js","../src/services/conversations/conversationWatcher.ts","../src/services/conversations/pruneAgentConversations.ts","../src/services/projectChats/deriveProjectChatTitle.ts","../src/services/questions/detectAskUserQuestion.ts","../src/services/questions/questionBroadcast.ts","../src/services/questions/answersToKeystrokes.ts","../src/services/questions/resolveAnswer.ts","../src/agent/dedupe.ts","../src/session-store.ts","../src/uploads.ts","../src/utils/conversationEtag.ts","../src/utils/debounce.ts","../node_modules/date-fns/constants.js","../node_modules/date-fns/constructFrom.js","../node_modules/date-fns/toDate.js","../node_modules/date-fns/isDate.js","../node_modules/date-fns/isValid.js","../node_modules/date-fns/parseISO.js","../src/utils/dates.ts","../src/utils/isScannedSnapshotStale.ts","../src/utils/scanProgressThrottle.ts","../src/ws-hub.ts","../src/updater/check-update.ts","../src/updater/github-releases.ts","../src/updater/install.ts","../src/updater/active-sessions.ts","../src/updater/brew-detect.ts","../src/updater/download.ts","../src/updater/manifest.ts","../src/updater/paths.ts","../src/updater/restart.ts","../src/updater/stamp-version.ts","../src/updater/swap.ts","../src/updater/unpack.ts","../node_modules/tar/node_modules/@isaacs/fs-minipass/src/index.ts","../node_modules/tar/node_modules/minipass/src/index.ts","../node_modules/tar/src/create.ts","../node_modules/tar/src/list.ts","../node_modules/tar/src/options.ts","../node_modules/tar/src/make-command.ts","../node_modules/tar/src/parse.ts","../node_modules/tar/node_modules/minizlib/src/index.ts","../node_modules/tar/node_modules/minizlib/src/constants.ts","../node_modules/tar/src/header.ts","../node_modules/tar/src/large-numbers.ts","../node_modules/tar/src/types.ts","../node_modules/tar/src/pax.ts","../node_modules/tar/src/normalize-windows-path.ts","../node_modules/tar/src/read-entry.ts","../node_modules/tar/src/warn-method.ts","../node_modules/tar/src/strip-trailing-slashes.ts","../node_modules/tar/src/pack.ts","../node_modules/tar/src/write-entry.ts","../node_modules/tar/src/mode-fix.ts","../node_modules/tar/src/strip-absolute-path.ts","../node_modules/tar/src/winchars.ts","../node_modules/tar/node_modules/yallist/src/index.ts","../node_modules/tar/src/extract.ts","../node_modules/tar/src/unpack.ts","../node_modules/tar/src/get-write-flag.ts","../node_modules/tar/node_modules/chownr/src/index.ts","../node_modules/tar/src/mkdir.ts","../node_modules/tar/src/cwd-error.ts","../node_modules/tar/src/symlink-error.ts","../node_modules/tar/src/path-reservations.ts","../node_modules/tar/src/normalize-unicode.ts","../node_modules/tar/src/process-umask.ts","../node_modules/tar/src/replace.ts","../node_modules/tar/src/update.ts","../src/updater/update-log.ts","../cli/prod.ts","../src/lifecycle/process-liveness.ts"],"sourcesContent":["const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\n\n// Array of tips to display randomly\nconst TIPS = [\n  '◈ encrypted .env [www.dotenvx.com]',\n  '◈ secrets for agents [www.dotenvx.com]',\n  '⌁ auth for agents [www.vestauth.com]',\n  '⌘ custom filepath { path: \\'/custom/path/.env\\' }',\n  '⌘ enable debugging { debug: true }',\n  '⌘ override existing { override: true }',\n  '⌘ suppress logs { quiet: true }',\n  '⌘ multiple files { path: [\\'.env.local\\', \\'.env\\'] }'\n]\n\n// Get a random tip from the tips array\nfunction _getRandomTip () {\n  return TIPS[Math.floor(Math.random() * TIPS.length)]\n}\n\nfunction parseBoolean (value) {\n  if (typeof value === 'string') {\n    return !['false', '0', 'no', 'off', ''].includes(value.toLowerCase())\n  }\n  return Boolean(value)\n}\n\nfunction supportsAnsi () {\n  return process.stdout.isTTY // && process.env.TERM !== 'dumb'\n}\n\nfunction dim (text) {\n  return supportsAnsi() ? `\\x1b[2m${text}\\x1b[0m` : text\n}\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n  const obj = {}\n\n  // Convert buffer to string\n  let lines = src.toString()\n\n  // Convert line breaks to same format\n  lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n  let match\n  while ((match = LINE.exec(lines)) != null) {\n    const key = match[1]\n\n    // Default undefined or null to empty string\n    let value = (match[2] || '')\n\n    // Remove whitespace\n    value = value.trim()\n\n    // Check if double quoted\n    const maybeQuote = value[0]\n\n    // Remove surrounding quotes\n    value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n    // Expand newlines if double quoted\n    if (maybeQuote === '\"') {\n      value = value.replace(/\\\\n/g, '\\n')\n      value = value.replace(/\\\\r/g, '\\r')\n    }\n\n    // Add to object\n    obj[key] = value\n  }\n\n  return obj\n}\n\nfunction _parseVault (options) {\n  options = options || {}\n\n  const vaultPath = _vaultPath(options)\n  options.path = vaultPath // parse .env.vault\n  const result = DotenvModule.configDotenv(options)\n  if (!result.parsed) {\n    const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n    err.code = 'MISSING_DATA'\n    throw err\n  }\n\n  // handle scenario for comma separated keys - for use with key rotation\n  // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n  const keys = _dotenvKey(options).split(',')\n  const length = keys.length\n\n  let decrypted\n  for (let i = 0; i < length; i++) {\n    try {\n      // Get full key\n      const key = keys[i].trim()\n\n      // Get instructions for decrypt\n      const attrs = _instructions(result, key)\n\n      // Decrypt\n      decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n      break\n    } catch (error) {\n      // last key\n      if (i + 1 >= length) {\n        throw error\n      }\n      // try next key\n    }\n  }\n\n  // Parse decrypted .env string\n  return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n  console.error(`⚠ ${message}`)\n}\n\nfunction _debug (message) {\n  console.log(`┆ ${message}`)\n}\n\nfunction _log (message) {\n  console.log(`◇ ${message}`)\n}\n\nfunction _dotenvKey (options) {\n  // prioritize developer directly setting options.DOTENV_KEY\n  if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n    return options.DOTENV_KEY\n  }\n\n  // secondary infra already contains a DOTENV_KEY environment variable\n  if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n    return process.env.DOTENV_KEY\n  }\n\n  // fallback to empty string\n  return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n  // Parse DOTENV_KEY. Format is a URI\n  let uri\n  try {\n    uri = new URL(dotenvKey)\n  } catch (error) {\n    if (error.code === 'ERR_INVALID_URL') {\n      const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n      err.code = 'INVALID_DOTENV_KEY'\n      throw err\n    }\n\n    throw error\n  }\n\n  // Get decrypt key\n  const key = uri.password\n  if (!key) {\n    const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n    err.code = 'INVALID_DOTENV_KEY'\n    throw err\n  }\n\n  // Get environment\n  const environment = uri.searchParams.get('environment')\n  if (!environment) {\n    const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n    err.code = 'INVALID_DOTENV_KEY'\n    throw err\n  }\n\n  // Get ciphertext payload\n  const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n  const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n  if (!ciphertext) {\n    const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n    err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n    throw err\n  }\n\n  return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n  let possibleVaultPath = null\n\n  if (options && options.path && options.path.length > 0) {\n    if (Array.isArray(options.path)) {\n      for (const filepath of options.path) {\n        if (fs.existsSync(filepath)) {\n          possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n        }\n      }\n    } else {\n      possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n    }\n  } else {\n    possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n  }\n\n  if (fs.existsSync(possibleVaultPath)) {\n    return possibleVaultPath\n  }\n\n  return null\n}\n\nfunction _resolveHome (envPath) {\n  return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n  const debug = parseBoolean(process.env.DOTENV_CONFIG_DEBUG || (options && options.debug))\n  const quiet = parseBoolean(process.env.DOTENV_CONFIG_QUIET || (options && options.quiet))\n\n  if (debug || !quiet) {\n    _log('loading env from encrypted .env.vault')\n  }\n\n  const parsed = DotenvModule._parseVault(options)\n\n  let processEnv = process.env\n  if (options && options.processEnv != null) {\n    processEnv = options.processEnv\n  }\n\n  DotenvModule.populate(processEnv, parsed, options)\n\n  return { parsed }\n}\n\nfunction configDotenv (options) {\n  const dotenvPath = path.resolve(process.cwd(), '.env')\n  let encoding = 'utf8'\n  let processEnv = process.env\n  if (options && options.processEnv != null) {\n    processEnv = options.processEnv\n  }\n  let debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || (options && options.debug))\n  let quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || (options && options.quiet))\n\n  if (options && options.encoding) {\n    encoding = options.encoding\n  } else {\n    if (debug) {\n      _debug('no encoding is specified (UTF-8 is used by default)')\n    }\n  }\n\n  let optionPaths = [dotenvPath] // default, look for .env\n  if (options && options.path) {\n    if (!Array.isArray(options.path)) {\n      optionPaths = [_resolveHome(options.path)]\n    } else {\n      optionPaths = [] // reset default\n      for (const filepath of options.path) {\n        optionPaths.push(_resolveHome(filepath))\n      }\n    }\n  }\n\n  // Build the parsed data in a temporary object (because we need to return it).  Once we have the final\n  // parsed data, we will combine it with process.env (or options.processEnv if provided).\n  let lastError\n  const parsedAll = {}\n  for (const path of optionPaths) {\n    try {\n      // Specifying an encoding returns a string instead of a buffer\n      const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n      DotenvModule.populate(parsedAll, parsed, options)\n    } catch (e) {\n      if (debug) {\n        _debug(`failed to load ${path} ${e.message}`)\n      }\n      lastError = e\n    }\n  }\n\n  const populated = DotenvModule.populate(processEnv, parsedAll, options)\n\n  // handle user settings DOTENV_CONFIG_ options inside .env file(s)\n  debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || debug)\n  quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || quiet)\n\n  if (debug || !quiet) {\n    const keysCount = Object.keys(populated).length\n    const shortPaths = []\n    for (const filePath of optionPaths) {\n      try {\n        const relative = path.relative(process.cwd(), filePath)\n        shortPaths.push(relative)\n      } catch (e) {\n        if (debug) {\n          _debug(`failed to load ${filePath} ${e.message}`)\n        }\n        lastError = e\n      }\n    }\n\n    _log(`injected env (${keysCount}) from ${shortPaths.join(',')} ${dim(`// tip: ${_getRandomTip()}`)}`)\n  }\n\n  if (lastError) {\n    return { parsed: parsedAll, error: lastError }\n  } else {\n    return { parsed: parsedAll }\n  }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n  // fallback to original dotenv if DOTENV_KEY is not set\n  if (_dotenvKey(options).length === 0) {\n    return DotenvModule.configDotenv(options)\n  }\n\n  const vaultPath = _vaultPath(options)\n\n  // dotenvKey exists but .env.vault file does not exist\n  if (!vaultPath) {\n    _warn(`you set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}`)\n\n    return DotenvModule.configDotenv(options)\n  }\n\n  return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n  const key = Buffer.from(keyStr.slice(-64), 'hex')\n  let ciphertext = Buffer.from(encrypted, 'base64')\n\n  const nonce = ciphertext.subarray(0, 12)\n  const authTag = ciphertext.subarray(-16)\n  ciphertext = ciphertext.subarray(12, -16)\n\n  try {\n    const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n    aesgcm.setAuthTag(authTag)\n    return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n  } catch (error) {\n    const isRange = error instanceof RangeError\n    const invalidKeyLength = error.message === 'Invalid key length'\n    const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n    if (isRange || invalidKeyLength) {\n      const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n      err.code = 'INVALID_DOTENV_KEY'\n      throw err\n    } else if (decryptionFailed) {\n      const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n      err.code = 'DECRYPTION_FAILED'\n      throw err\n    } else {\n      throw error\n    }\n  }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n  const debug = Boolean(options && options.debug)\n  const override = Boolean(options && options.override)\n  const populated = {}\n\n  if (typeof parsed !== 'object') {\n    const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n    err.code = 'OBJECT_REQUIRED'\n    throw err\n  }\n\n  // Set process.env\n  for (const key of Object.keys(parsed)) {\n    if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n      if (override === true) {\n        processEnv[key] = parsed[key]\n        populated[key] = parsed[key]\n      }\n\n      if (debug) {\n        if (override === true) {\n          _debug(`\"${key}\" is already defined and WAS overwritten`)\n        } else {\n          _debug(`\"${key}\" is already defined and was NOT overwritten`)\n        }\n      }\n    } else {\n      processEnv[key] = parsed[key]\n      populated[key] = parsed[key]\n    }\n  }\n\n  return populated\n}\n\nconst DotenvModule = {\n  configDotenv,\n  _configVault,\n  _parseVault,\n  config,\n  decrypt,\n  parse,\n  populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n","// ../config.js accepts options via environment variables\nconst options = {}\n\nif (process.env.DOTENV_CONFIG_ENCODING != null) {\n  options.encoding = process.env.DOTENV_CONFIG_ENCODING\n}\n\nif (process.env.DOTENV_CONFIG_PATH != null) {\n  options.path = process.env.DOTENV_CONFIG_PATH\n}\n\nif (process.env.DOTENV_CONFIG_QUIET != null) {\n  options.quiet = process.env.DOTENV_CONFIG_QUIET\n}\n\nif (process.env.DOTENV_CONFIG_DEBUG != null) {\n  options.debug = process.env.DOTENV_CONFIG_DEBUG\n}\n\nif (process.env.DOTENV_CONFIG_OVERRIDE != null) {\n  options.override = process.env.DOTENV_CONFIG_OVERRIDE\n}\n\nif (process.env.DOTENV_CONFIG_DOTENV_KEY != null) {\n  options.DOTENV_KEY = process.env.DOTENV_CONFIG_DOTENV_KEY\n}\n\nmodule.exports = options\n","const re = /^dotenv_config_(encoding|path|quiet|debug|override|DOTENV_KEY)=(.+)$/\n\nmodule.exports = function optionMatcher (args) {\n  const options = args.reduce(function (acc, cur) {\n    const matches = cur.match(re)\n    if (matches) {\n      acc[matches[1]] = matches[2]\n    }\n    return acc\n  }, {})\n\n  if (!('quiet' in options)) {\n    options.quiet = 'true'\n  }\n\n  return options\n}\n","module.exports = {\n    MODE_NUMBER :       1 << 0,\n    MODE_ALPHA_NUM :    1 << 1,\n    MODE_8BIT_BYTE :    1 << 2,\n    MODE_KANJI :        1 << 3\n};\n","var QRMode = require('./QRMode');\n\nfunction QR8bitByte(data) {\n\tthis.mode = QRMode.MODE_8BIT_BYTE;\n\tthis.data = data;\n}\n\nQR8bitByte.prototype = {\n\n\tgetLength : function() {\n\t\treturn this.data.length;\n\t},\n\t\n\twrite : function(buffer) {\n\t\tfor (var i = 0; i < this.data.length; i++) {\n\t\t\t// not JIS ...\n\t\t\tbuffer.put(this.data.charCodeAt(i), 8);\n\t\t}\n\t}\n};\n\nmodule.exports = QR8bitByte;\n","var QRMath = {\n\n\tglog : function(n) {\n\t\n\t\tif (n < 1) {\n\t\t\tthrow new Error(\"glog(\" + n + \")\");\n\t\t}\n\t\t\n\t\treturn QRMath.LOG_TABLE[n];\n\t},\n\t\n\tgexp : function(n) {\n\t\n\t\twhile (n < 0) {\n\t\t\tn += 255;\n\t\t}\n\t\n\t\twhile (n >= 256) {\n\t\t\tn -= 255;\n\t\t}\n\t\n\t\treturn QRMath.EXP_TABLE[n];\n\t},\n\t\n\tEXP_TABLE : new Array(256),\n\t\n\tLOG_TABLE : new Array(256)\n\n};\n\t\nfor (var i = 0; i < 8; i++) {\n\tQRMath.EXP_TABLE[i] = 1 << i;\n}\nfor (var i = 8; i < 256; i++) {\n\tQRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4]\n\t\t^ QRMath.EXP_TABLE[i - 5]\n\t\t^ QRMath.EXP_TABLE[i - 6]\n\t\t^ QRMath.EXP_TABLE[i - 8];\n}\nfor (var i = 0; i < 255; i++) {\n\tQRMath.LOG_TABLE[QRMath.EXP_TABLE[i] ] = i;\n}\n\nmodule.exports = QRMath;\n","var QRMath = require('./QRMath');\n\nfunction QRPolynomial(num, shift) {\n\tif (num.length === undefined) {\n\t\tthrow new Error(num.length + \"/\" + shift);\n\t}\n\n\tvar offset = 0;\n\n\twhile (offset < num.length && num[offset] === 0) {\n\t\toffset++;\n\t}\n\n\tthis.num = new Array(num.length - offset + shift);\n\tfor (var i = 0; i < num.length - offset; i++) {\n\t\tthis.num[i] = num[i + offset];\n\t}\n}\n\nQRPolynomial.prototype = {\n\n\tget : function(index) {\n\t\treturn this.num[index];\n\t},\n\t\n\tgetLength : function() {\n\t\treturn this.num.length;\n\t},\n\t\n\tmultiply : function(e) {\n\t\n\t\tvar num = new Array(this.getLength() + e.getLength() - 1);\n\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tfor (var j = 0; j < e.getLength(); j++) {\n\t\t\t\tnum[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i) ) + QRMath.glog(e.get(j) ) );\n\t\t\t}\n\t\t}\n\t\n\t\treturn new QRPolynomial(num, 0);\n\t},\n\t\n\tmod : function(e) {\n\t\n\t\tif (this.getLength() - e.getLength() < 0) {\n\t\t\treturn this;\n\t\t}\n\t\n\t\tvar ratio = QRMath.glog(this.get(0) ) - QRMath.glog(e.get(0) );\n\t\n\t\tvar num = new Array(this.getLength() );\n\t\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tnum[i] = this.get(i);\n\t\t}\n\t\t\n\t\tfor (var x = 0; x < e.getLength(); x++) {\n\t\t\tnum[x] ^= QRMath.gexp(QRMath.glog(e.get(x) ) + ratio);\n\t\t}\n\t\n\t\t// recursive call\n\t\treturn new QRPolynomial(num, 0).mod(e);\n\t}\n};\n\nmodule.exports = QRPolynomial;\n","module.exports = {\n\tPATTERN000 : 0,\n\tPATTERN001 : 1,\n\tPATTERN010 : 2,\n\tPATTERN011 : 3,\n\tPATTERN100 : 4,\n\tPATTERN101 : 5,\n\tPATTERN110 : 6,\n\tPATTERN111 : 7\n};\n","var QRMode = require('./QRMode');\nvar QRPolynomial = require('./QRPolynomial');\nvar QRMath = require('./QRMath');\nvar QRMaskPattern = require('./QRMaskPattern');\n\nvar QRUtil = {\n\n    PATTERN_POSITION_TABLE : [\n        [],\n        [6, 18],\n        [6, 22],\n        [6, 26],\n        [6, 30],\n        [6, 34],\n        [6, 22, 38],\n        [6, 24, 42],\n        [6, 26, 46],\n        [6, 28, 50],\n        [6, 30, 54],        \n        [6, 32, 58],\n        [6, 34, 62],\n        [6, 26, 46, 66],\n        [6, 26, 48, 70],\n        [6, 26, 50, 74],\n        [6, 30, 54, 78],\n        [6, 30, 56, 82],\n        [6, 30, 58, 86],\n        [6, 34, 62, 90],\n        [6, 28, 50, 72, 94],\n        [6, 26, 50, 74, 98],\n        [6, 30, 54, 78, 102],\n        [6, 28, 54, 80, 106],\n        [6, 32, 58, 84, 110],\n        [6, 30, 58, 86, 114],\n        [6, 34, 62, 90, 118],\n        [6, 26, 50, 74, 98, 122],\n        [6, 30, 54, 78, 102, 126],\n        [6, 26, 52, 78, 104, 130],\n        [6, 30, 56, 82, 108, 134],\n        [6, 34, 60, 86, 112, 138],\n        [6, 30, 58, 86, 114, 142],\n        [6, 34, 62, 90, 118, 146],\n        [6, 30, 54, 78, 102, 126, 150],\n        [6, 24, 50, 76, 102, 128, 154],\n        [6, 28, 54, 80, 106, 132, 158],\n        [6, 32, 58, 84, 110, 136, 162],\n        [6, 26, 54, 82, 110, 138, 166],\n        [6, 30, 58, 86, 114, 142, 170]\n    ],\n\n    G15 : (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),\n    G18 : (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),\n    G15_MASK : (1 << 14) | (1 << 12) | (1 << 10)    | (1 << 4) | (1 << 1),\n\n    getBCHTypeInfo : function(data) {\n        var d = data << 10;\n        while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n            d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) ) );    \n        }\n        return ( (data << 10) | d) ^ QRUtil.G15_MASK;\n    },\n\n    getBCHTypeNumber : function(data) {\n        var d = data << 12;\n        while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n            d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) ) );    \n        }\n        return (data << 12) | d;\n    },\n\n    getBCHDigit : function(data) {\n\n        var digit = 0;\n\n        while (data !== 0) {\n            digit++;\n            data >>>= 1;\n        }\n\n        return digit;\n    },\n\n    getPatternPosition : function(typeNumber) {\n        return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];\n    },\n\n    getMask : function(maskPattern, i, j) {\n        \n        switch (maskPattern) {\n            \n        case QRMaskPattern.PATTERN000 : return (i + j) % 2 === 0;\n        case QRMaskPattern.PATTERN001 : return i % 2 === 0;\n        case QRMaskPattern.PATTERN010 : return j % 3 === 0;\n        case QRMaskPattern.PATTERN011 : return (i + j) % 3 === 0;\n        case QRMaskPattern.PATTERN100 : return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 === 0;\n        case QRMaskPattern.PATTERN101 : return (i * j) % 2 + (i * j) % 3 === 0;\n        case QRMaskPattern.PATTERN110 : return ( (i * j) % 2 + (i * j) % 3) % 2 === 0;\n        case QRMaskPattern.PATTERN111 : return ( (i * j) % 3 + (i + j) % 2) % 2 === 0;\n\n        default :\n            throw new Error(\"bad maskPattern:\" + maskPattern);\n        }\n    },\n\n    getErrorCorrectPolynomial : function(errorCorrectLength) {\n\n        var a = new QRPolynomial([1], 0);\n\n        for (var i = 0; i < errorCorrectLength; i++) {\n            a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0) );\n        }\n\n        return a;\n    },\n\n    getLengthInBits : function(mode, type) {\n\n        if (1 <= type && type < 10) {\n\n            // 1 - 9\n\n            switch(mode) {\n            case QRMode.MODE_NUMBER     : return 10;\n            case QRMode.MODE_ALPHA_NUM  : return 9;\n            case QRMode.MODE_8BIT_BYTE  : return 8;\n            case QRMode.MODE_KANJI      : return 8;\n            default :\n                throw new Error(\"mode:\" + mode);\n            }\n\n        } else if (type < 27) {\n\n            // 10 - 26\n\n            switch(mode) {\n            case QRMode.MODE_NUMBER     : return 12;\n            case QRMode.MODE_ALPHA_NUM  : return 11;\n            case QRMode.MODE_8BIT_BYTE  : return 16;\n            case QRMode.MODE_KANJI      : return 10;\n            default :\n                throw new Error(\"mode:\" + mode);\n            }\n\n        } else if (type < 41) {\n\n            // 27 - 40\n\n            switch(mode) {\n            case QRMode.MODE_NUMBER     : return 14;\n            case QRMode.MODE_ALPHA_NUM  : return 13;\n            case QRMode.MODE_8BIT_BYTE  : return 16;\n            case QRMode.MODE_KANJI      : return 12;\n            default :\n                throw new Error(\"mode:\" + mode);\n            }\n\n        } else {\n            throw new Error(\"type:\" + type);\n        }\n    },\n\n    getLostPoint : function(qrCode) {\n        \n        var moduleCount = qrCode.getModuleCount();\n        var lostPoint = 0;\n        var row = 0; \n        var col = 0;\n\n        \n        // LEVEL1\n        \n        for (row = 0; row < moduleCount; row++) {\n\n            for (col = 0; col < moduleCount; col++) {\n\n                var sameCount = 0;\n                var dark = qrCode.isDark(row, col);\n\n                for (var r = -1; r <= 1; r++) {\n\n                    if (row + r < 0 || moduleCount <= row + r) {\n                        continue;\n                    }\n\n                    for (var c = -1; c <= 1; c++) {\n\n                        if (col + c < 0 || moduleCount <= col + c) {\n                            continue;\n                        }\n\n                        if (r === 0 && c === 0) {\n                            continue;\n                        }\n\n                        if (dark === qrCode.isDark(row + r, col + c) ) {\n                            sameCount++;\n                        }\n                    }\n                }\n\n                if (sameCount > 5) {\n                    lostPoint += (3 + sameCount - 5);\n                }\n            }\n        }\n\n        // LEVEL2\n\n        for (row = 0; row < moduleCount - 1; row++) {\n            for (col = 0; col < moduleCount - 1; col++) {\n                var count = 0;\n                if (qrCode.isDark(row,     col    ) ) count++;\n                if (qrCode.isDark(row + 1, col    ) ) count++;\n                if (qrCode.isDark(row,     col + 1) ) count++;\n                if (qrCode.isDark(row + 1, col + 1) ) count++;\n                if (count === 0 || count === 4) {\n                    lostPoint += 3;\n                }\n            }\n        }\n\n        // LEVEL3\n\n        for (row = 0; row < moduleCount; row++) {\n            for (col = 0; col < moduleCount - 6; col++) {\n                if (qrCode.isDark(row, col) && \n                        !qrCode.isDark(row, col + 1) && \n                         qrCode.isDark(row, col + 2) && \n                         qrCode.isDark(row, col + 3) && \n                         qrCode.isDark(row, col + 4) && \n                        !qrCode.isDark(row, col + 5) && \n                         qrCode.isDark(row, col + 6) ) {\n                    lostPoint += 40;\n                }\n            }\n        }\n\n        for (col = 0; col < moduleCount; col++) {\n            for (row = 0; row < moduleCount - 6; row++) {\n                if (qrCode.isDark(row, col) &&\n                        !qrCode.isDark(row + 1, col) &&\n                         qrCode.isDark(row + 2, col) &&\n                         qrCode.isDark(row + 3, col) &&\n                         qrCode.isDark(row + 4, col) &&\n                        !qrCode.isDark(row + 5, col) &&\n                         qrCode.isDark(row + 6, col) ) {\n                    lostPoint += 40;\n                }\n            }\n        }\n\n        // LEVEL4\n        \n        var darkCount = 0;\n\n        for (col = 0; col < moduleCount; col++) {\n            for (row = 0; row < moduleCount; row++) {\n                if (qrCode.isDark(row, col) ) {\n                    darkCount++;\n                }\n            }\n        }\n        \n        var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n        lostPoint += ratio * 10;\n\n        return lostPoint;       \n    }\n\n};\n\nmodule.exports = QRUtil;\n","module.exports = {\n\tL : 1,\n\tM : 0,\n\tQ : 3,\n\tH : 2\n};\n\n","var QRErrorCorrectLevel = require('./QRErrorCorrectLevel');\n\nfunction QRRSBlock(totalCount, dataCount) {\n\tthis.totalCount = totalCount;\n\tthis.dataCount  = dataCount;\n}\n\nQRRSBlock.RS_BLOCK_TABLE = [\n\n\t// L\n\t// M\n\t// Q\n\t// H\n\n\t// 1\n\t[1, 26, 19],\n\t[1, 26, 16],\n\t[1, 26, 13],\n\t[1, 26, 9],\n\t\n\t// 2\n\t[1, 44, 34],\n\t[1, 44, 28],\n\t[1, 44, 22],\n\t[1, 44, 16],\n\n\t// 3\n\t[1, 70, 55],\n\t[1, 70, 44],\n\t[2, 35, 17],\n\t[2, 35, 13],\n\n\t// 4\t\t\n\t[1, 100, 80],\n\t[2, 50, 32],\n\t[2, 50, 24],\n\t[4, 25, 9],\n\t\n\t// 5\n\t[1, 134, 108],\n\t[2, 67, 43],\n\t[2, 33, 15, 2, 34, 16],\n\t[2, 33, 11, 2, 34, 12],\n\t\n\t// 6\n\t[2, 86, 68],\n\t[4, 43, 27],\n\t[4, 43, 19],\n\t[4, 43, 15],\n\t\n\t// 7\t\t\n\t[2, 98, 78],\n\t[4, 49, 31],\n\t[2, 32, 14, 4, 33, 15],\n\t[4, 39, 13, 1, 40, 14],\n\t\n\t// 8\n\t[2, 121, 97],\n\t[2, 60, 38, 2, 61, 39],\n\t[4, 40, 18, 2, 41, 19],\n\t[4, 40, 14, 2, 41, 15],\n\t\n\t// 9\n\t[2, 146, 116],\n\t[3, 58, 36, 2, 59, 37],\n\t[4, 36, 16, 4, 37, 17],\n\t[4, 36, 12, 4, 37, 13],\n\t\n\t// 10\t\t\n\t[2, 86, 68, 2, 87, 69],\n\t[4, 69, 43, 1, 70, 44],\n\t[6, 43, 19, 2, 44, 20],\n\t[6, 43, 15, 2, 44, 16],\n\n\t// 11\n\t[4, 101, 81],\n\t[1, 80, 50, 4, 81, 51],\n\t[4, 50, 22, 4, 51, 23],\n\t[3, 36, 12, 8, 37, 13],\n\n\t// 12\n\t[2, 116, 92, 2, 117, 93],\n\t[6, 58, 36, 2, 59, 37],\n\t[4, 46, 20, 6, 47, 21],\n\t[7, 42, 14, 4, 43, 15],\n\n\t// 13\n\t[4, 133, 107],\n\t[8, 59, 37, 1, 60, 38],\n\t[8, 44, 20, 4, 45, 21],\n\t[12, 33, 11, 4, 34, 12],\n\n\t// 14\n\t[3, 145, 115, 1, 146, 116],\n\t[4, 64, 40, 5, 65, 41],\n\t[11, 36, 16, 5, 37, 17],\n\t[11, 36, 12, 5, 37, 13],\n\n\t// 15\n\t[5, 109, 87, 1, 110, 88],\n\t[5, 65, 41, 5, 66, 42],\n\t[5, 54, 24, 7, 55, 25],\n\t[11, 36, 12],\n\n\t// 16\n\t[5, 122, 98, 1, 123, 99],\n\t[7, 73, 45, 3, 74, 46],\n\t[15, 43, 19, 2, 44, 20],\n\t[3, 45, 15, 13, 46, 16],\n\n\t// 17\n\t[1, 135, 107, 5, 136, 108],\n\t[10, 74, 46, 1, 75, 47],\n\t[1, 50, 22, 15, 51, 23],\n\t[2, 42, 14, 17, 43, 15],\n\n\t// 18\n\t[5, 150, 120, 1, 151, 121],\n\t[9, 69, 43, 4, 70, 44],\n\t[17, 50, 22, 1, 51, 23],\n\t[2, 42, 14, 19, 43, 15],\n\n\t// 19\n\t[3, 141, 113, 4, 142, 114],\n\t[3, 70, 44, 11, 71, 45],\n\t[17, 47, 21, 4, 48, 22],\n\t[9, 39, 13, 16, 40, 14],\n\n\t// 20\n\t[3, 135, 107, 5, 136, 108],\n\t[3, 67, 41, 13, 68, 42],\n\t[15, 54, 24, 5, 55, 25],\n\t[15, 43, 15, 10, 44, 16],\n\n\t// 21\n\t[4, 144, 116, 4, 145, 117],\n\t[17, 68, 42],\n\t[17, 50, 22, 6, 51, 23],\n\t[19, 46, 16, 6, 47, 17],\n\n\t// 22\n\t[2, 139, 111, 7, 140, 112],\n\t[17, 74, 46],\n\t[7, 54, 24, 16, 55, 25],\n\t[34, 37, 13],\n\n\t// 23\n\t[4, 151, 121, 5, 152, 122],\n\t[4, 75, 47, 14, 76, 48],\n\t[11, 54, 24, 14, 55, 25],\n\t[16, 45, 15, 14, 46, 16],\n\n\t// 24\n\t[6, 147, 117, 4, 148, 118],\n\t[6, 73, 45, 14, 74, 46],\n\t[11, 54, 24, 16, 55, 25],\n\t[30, 46, 16, 2, 47, 17],\n\n\t// 25\n\t[8, 132, 106, 4, 133, 107],\n\t[8, 75, 47, 13, 76, 48],\n\t[7, 54, 24, 22, 55, 25],\n\t[22, 45, 15, 13, 46, 16],\n\n\t// 26\n\t[10, 142, 114, 2, 143, 115],\n\t[19, 74, 46, 4, 75, 47],\n\t[28, 50, 22, 6, 51, 23],\n\t[33, 46, 16, 4, 47, 17],\n\n\t// 27\n\t[8, 152, 122, 4, 153, 123],\n\t[22, 73, 45, 3, 74, 46],\n\t[8, 53, 23, 26, 54, 24],\n\t[12, 45, 15, 28, 46, 16],\n\n\t// 28\n\t[3, 147, 117, 10, 148, 118],\n\t[3, 73, 45, 23, 74, 46],\n\t[4, 54, 24, 31, 55, 25],\n\t[11, 45, 15, 31, 46, 16],\n\n\t// 29\n\t[7, 146, 116, 7, 147, 117],\n\t[21, 73, 45, 7, 74, 46],\n\t[1, 53, 23, 37, 54, 24],\n\t[19, 45, 15, 26, 46, 16],\n\n\t// 30\n\t[5, 145, 115, 10, 146, 116],\n\t[19, 75, 47, 10, 76, 48],\n\t[15, 54, 24, 25, 55, 25],\n\t[23, 45, 15, 25, 46, 16],\n\n\t// 31\n\t[13, 145, 115, 3, 146, 116],\n\t[2, 74, 46, 29, 75, 47],\n\t[42, 54, 24, 1, 55, 25],\n\t[23, 45, 15, 28, 46, 16],\n\n\t// 32\n\t[17, 145, 115],\n\t[10, 74, 46, 23, 75, 47],\n\t[10, 54, 24, 35, 55, 25],\n\t[19, 45, 15, 35, 46, 16],\n\n\t// 33\n\t[17, 145, 115, 1, 146, 116],\n\t[14, 74, 46, 21, 75, 47],\n\t[29, 54, 24, 19, 55, 25],\n\t[11, 45, 15, 46, 46, 16],\n\n\t// 34\n\t[13, 145, 115, 6, 146, 116],\n\t[14, 74, 46, 23, 75, 47],\n\t[44, 54, 24, 7, 55, 25],\n\t[59, 46, 16, 1, 47, 17],\n\n\t// 35\n\t[12, 151, 121, 7, 152, 122],\n\t[12, 75, 47, 26, 76, 48],\n\t[39, 54, 24, 14, 55, 25],\n\t[22, 45, 15, 41, 46, 16],\n\n\t// 36\n\t[6, 151, 121, 14, 152, 122],\n\t[6, 75, 47, 34, 76, 48],\n\t[46, 54, 24, 10, 55, 25],\n\t[2, 45, 15, 64, 46, 16],\n\n\t// 37\n\t[17, 152, 122, 4, 153, 123],\n\t[29, 74, 46, 14, 75, 47],\n\t[49, 54, 24, 10, 55, 25],\n\t[24, 45, 15, 46, 46, 16],\n\n\t// 38\n\t[4, 152, 122, 18, 153, 123],\n\t[13, 74, 46, 32, 75, 47],\n\t[48, 54, 24, 14, 55, 25],\n\t[42, 45, 15, 32, 46, 16],\n\n\t// 39\n\t[20, 147, 117, 4, 148, 118],\n\t[40, 75, 47, 7, 76, 48],\n\t[43, 54, 24, 22, 55, 25],\n\t[10, 45, 15, 67, 46, 16],\n\n\t// 40\n\t[19, 148, 118, 6, 149, 119],\n\t[18, 75, 47, 31, 76, 48],\n\t[34, 54, 24, 34, 55, 25],\n\t[20, 45, 15, 61, 46, 16]\n];\n\nQRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) {\n\t\n\tvar rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n\t\n\tif (rsBlock === undefined) {\n\t\tthrow new Error(\"bad rs block @ typeNumber:\" + typeNumber + \"/errorCorrectLevel:\" + errorCorrectLevel);\n\t}\n\n\tvar length = rsBlock.length / 3;\n\t\n\tvar list = [];\n\t\n\tfor (var i = 0; i < length; i++) {\n\n\t\tvar count = rsBlock[i * 3 + 0];\n\t\tvar totalCount = rsBlock[i * 3 + 1];\n\t\tvar dataCount  = rsBlock[i * 3 + 2];\n\n\t\tfor (var j = 0; j < count; j++) {\n\t\t\tlist.push(new QRRSBlock(totalCount, dataCount) );\t\n\t\t}\n\t}\n\t\n\treturn list;\n};\n\nQRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) {\n\n\tswitch(errorCorrectLevel) {\n\tcase QRErrorCorrectLevel.L :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n\tcase QRErrorCorrectLevel.M :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n\tcase QRErrorCorrectLevel.Q :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n\tcase QRErrorCorrectLevel.H :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n\tdefault :\n\t\treturn undefined;\n\t}\n};\n\nmodule.exports = QRRSBlock;\n","function QRBitBuffer() {\n\tthis.buffer = [];\n\tthis.length = 0;\n}\n\nQRBitBuffer.prototype = {\n\n\tget : function(index) {\n\t\tvar bufIndex = Math.floor(index / 8);\n\t\treturn ( (this.buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n\t},\n\t\n\tput : function(num, length) {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tthis.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n\t\t}\n\t},\n\t\n\tgetLengthInBits : function() {\n\t\treturn this.length;\n\t},\n\t\n\tputBit : function(bit) {\n\t\n\t\tvar bufIndex = Math.floor(this.length / 8);\n\t\tif (this.buffer.length <= bufIndex) {\n\t\t\tthis.buffer.push(0);\n\t\t}\n\t\n\t\tif (bit) {\n\t\t\tthis.buffer[bufIndex] |= (0x80 >>> (this.length % 8) );\n\t\t}\n\t\n\t\tthis.length++;\n\t}\n};\n\nmodule.exports = QRBitBuffer;\n","//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n//   http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of \n// DENSO WAVE INCORPORATED\n//   http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n// Modified to work in node for this project (and some refactoring)\n//---------------------------------------------------------------------\n\nvar QR8bitByte = require('./QR8bitByte');\nvar QRUtil = require('./QRUtil');\nvar QRPolynomial = require('./QRPolynomial');\nvar QRRSBlock = require('./QRRSBlock');\nvar QRBitBuffer = require('./QRBitBuffer');\n\nfunction QRCode(typeNumber, errorCorrectLevel) {\n\tthis.typeNumber = typeNumber;\n\tthis.errorCorrectLevel = errorCorrectLevel;\n\tthis.modules = null;\n\tthis.moduleCount = 0;\n\tthis.dataCache = null;\n\tthis.dataList = [];\n}\n\nQRCode.prototype = {\n\t\n\taddData : function(data) {\n\t\tvar newData = new QR8bitByte(data);\n\t\tthis.dataList.push(newData);\n\t\tthis.dataCache = null;\n\t},\n\t\n\tisDark : function(row, col) {\n\t\tif (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {\n\t\t\tthrow new Error(row + \",\" + col);\n\t\t}\n\t\treturn this.modules[row][col];\n\t},\n\n\tgetModuleCount : function() {\n\t\treturn this.moduleCount;\n\t},\n\t\n\tmake : function() {\n\t\t// Calculate automatically typeNumber if provided is < 1\n\t\tif (this.typeNumber < 1 ){\n\t\t\tvar typeNumber = 1;\n\t\t\tfor (typeNumber = 1; typeNumber < 40; typeNumber++) {\n\t\t\t\tvar rsBlocks = QRRSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);\n\n\t\t\t\tvar buffer = new QRBitBuffer();\n\t\t\t\tvar totalDataCount = 0;\n\t\t\t\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\t\t\t\ttotalDataCount += rsBlocks[i].dataCount;\n\t\t\t\t}\n\n\t\t\t\tfor (var x = 0; x < this.dataList.length; x++) {\n\t\t\t\t\tvar data = this.dataList[x];\n\t\t\t\t\tbuffer.put(data.mode, 4);\n\t\t\t\t\tbuffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber) );\n\t\t\t\t\tdata.write(buffer);\n\t\t\t\t}\n\t\t\t\tif (buffer.getLengthInBits() <= totalDataCount * 8)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.typeNumber = typeNumber;\n\t\t}\n\t\tthis.makeImpl(false, this.getBestMaskPattern() );\n\t},\n\t\n\tmakeImpl : function(test, maskPattern) {\n\t\t\n\t\tthis.moduleCount = this.typeNumber * 4 + 17;\n\t\tthis.modules = new Array(this.moduleCount);\n\t\t\n\t\tfor (var row = 0; row < this.moduleCount; row++) {\n\t\t\t\n\t\t\tthis.modules[row] = new Array(this.moduleCount);\n\t\t\t\n\t\t\tfor (var col = 0; col < this.moduleCount; col++) {\n\t\t\t\tthis.modules[row][col] = null;//(col + row) % 3;\n\t\t\t}\n\t\t}\n\t\n\t\tthis.setupPositionProbePattern(0, 0);\n\t\tthis.setupPositionProbePattern(this.moduleCount - 7, 0);\n\t\tthis.setupPositionProbePattern(0, this.moduleCount - 7);\n\t\tthis.setupPositionAdjustPattern();\n\t\tthis.setupTimingPattern();\n\t\tthis.setupTypeInfo(test, maskPattern);\n\t\t\n\t\tif (this.typeNumber >= 7) {\n\t\t\tthis.setupTypeNumber(test);\n\t\t}\n\t\n\t\tif (this.dataCache === null) {\n\t\t\tthis.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);\n\t\t}\n\t\n\t\tthis.mapData(this.dataCache, maskPattern);\n\t},\n\n\tsetupPositionProbePattern : function(row, col)  {\n\t\t\n\t\tfor (var r = -1; r <= 7; r++) {\n\t\t\t\n\t\t\tif (row + r <= -1 || this.moduleCount <= row + r) continue;\n\t\t\t\n\t\t\tfor (var c = -1; c <= 7; c++) {\n\t\t\t\t\n\t\t\t\tif (col + c <= -1 || this.moduleCount <= col + c) continue;\n\t\t\t\t\n\t\t\t\tif ( (0 <= r && r <= 6 && (c === 0 || c === 6) ) || \n                     (0 <= c && c <= 6 && (r === 0 || r === 6) ) || \n                     (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n\t\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t\t}\n\t\t\t}\t\t\n\t\t}\t\t\n\t},\n\t\n\tgetBestMaskPattern : function() {\n\t\n\t\tvar minLostPoint = 0;\n\t\tvar pattern = 0;\n\t\n\t\tfor (var i = 0; i < 8; i++) {\n\t\t\t\n\t\t\tthis.makeImpl(true, i);\n\t\n\t\t\tvar lostPoint = QRUtil.getLostPoint(this);\n\t\n\t\t\tif (i === 0 || minLostPoint >  lostPoint) {\n\t\t\t\tminLostPoint = lostPoint;\n\t\t\t\tpattern = i;\n\t\t\t}\n\t\t}\n\t\n\t\treturn pattern;\n\t},\n\t\n\tcreateMovieClip : function(target_mc, instance_name, depth) {\n\t\n\t\tvar qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);\n\t\tvar cs = 1;\n\t\n\t\tthis.make();\n\n\t\tfor (var row = 0; row < this.modules.length; row++) {\n\t\t\t\n\t\t\tvar y = row * cs;\n\t\t\t\n\t\t\tfor (var col = 0; col < this.modules[row].length; col++) {\n\t\n\t\t\t\tvar x = col * cs;\n\t\t\t\tvar dark = this.modules[row][col];\n\t\t\t\n\t\t\t\tif (dark) {\n\t\t\t\t\tqr_mc.beginFill(0, 100);\n\t\t\t\t\tqr_mc.moveTo(x, y);\n\t\t\t\t\tqr_mc.lineTo(x + cs, y);\n\t\t\t\t\tqr_mc.lineTo(x + cs, y + cs);\n\t\t\t\t\tqr_mc.lineTo(x, y + cs);\n\t\t\t\t\tqr_mc.endFill();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn qr_mc;\n\t},\n\n\tsetupTimingPattern : function() {\n\t\t\n\t\tfor (var r = 8; r < this.moduleCount - 8; r++) {\n\t\t\tif (this.modules[r][6] !== null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.modules[r][6] = (r % 2 === 0);\n\t\t}\n\t\n\t\tfor (var c = 8; c < this.moduleCount - 8; c++) {\n\t\t\tif (this.modules[6][c] !== null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.modules[6][c] = (c % 2 === 0);\n\t\t}\n\t},\n\t\n\tsetupPositionAdjustPattern : function() {\n\t\n\t\tvar pos = QRUtil.getPatternPosition(this.typeNumber);\n\t\t\n\t\tfor (var i = 0; i < pos.length; i++) {\n\t\t\n\t\t\tfor (var j = 0; j < pos.length; j++) {\n\t\t\t\n\t\t\t\tvar row = pos[i];\n\t\t\t\tvar col = pos[j];\n\t\t\t\t\n\t\t\t\tif (this.modules[row][col] !== null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor (var r = -2; r <= 2; r++) {\n\t\t\t\t\n\t\t\t\t\tfor (var c = -2; c <= 2; c++) {\n\t\t\t\t\t\n\t\t\t\t\t\tif (Math.abs(r) === 2 || \n                            Math.abs(c) === 2 ||\n                            (r === 0 && c === 0) ) {\n\t\t\t\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t\n\tsetupTypeNumber : function(test) {\n\t\n\t\tvar bits = QRUtil.getBCHTypeNumber(this.typeNumber);\n        var mod;\n\t\n\t\tfor (var i = 0; i < 18; i++) {\n\t\t\tmod = (!test && ( (bits >> i) & 1) === 1);\n\t\t\tthis.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;\n\t\t}\n\t\n\t\tfor (var x = 0; x < 18; x++) {\n\t\t\tmod = (!test && ( (bits >> x) & 1) === 1);\n\t\t\tthis.modules[x % 3 + this.moduleCount - 8 - 3][Math.floor(x / 3)] = mod;\n\t\t}\n\t},\n\t\n\tsetupTypeInfo : function(test, maskPattern) {\n\t\n\t\tvar data = (this.errorCorrectLevel << 3) | maskPattern;\n\t\tvar bits = QRUtil.getBCHTypeInfo(data);\n        var mod;\n\t\n\t\t// vertical\t\t\n\t\tfor (var v = 0; v < 15; v++) {\n\t\n\t\t\tmod = (!test && ( (bits >> v) & 1) === 1);\n\t\n\t\t\tif (v < 6) {\n\t\t\t\tthis.modules[v][8] = mod;\n\t\t\t} else if (v < 8) {\n\t\t\t\tthis.modules[v + 1][8] = mod;\n\t\t\t} else {\n\t\t\t\tthis.modules[this.moduleCount - 15 + v][8] = mod;\n\t\t\t}\n\t\t}\n\t\n\t\t// horizontal\n\t\tfor (var h = 0; h < 15; h++) {\n\t\n\t\t\tmod = (!test && ( (bits >> h) & 1) === 1);\n\t\t\t\n\t\t\tif (h < 8) {\n\t\t\t\tthis.modules[8][this.moduleCount - h - 1] = mod;\n\t\t\t} else if (h < 9) {\n\t\t\t\tthis.modules[8][15 - h - 1 + 1] = mod;\n\t\t\t} else {\n\t\t\t\tthis.modules[8][15 - h - 1] = mod;\n\t\t\t}\n\t\t}\n\t\n\t\t// fixed module\n\t\tthis.modules[this.moduleCount - 8][8] = (!test);\n\t\n\t},\n\t\n\tmapData : function(data, maskPattern) {\n\t\t\n\t\tvar inc = -1;\n\t\tvar row = this.moduleCount - 1;\n\t\tvar bitIndex = 7;\n\t\tvar byteIndex = 0;\n\t\t\n\t\tfor (var col = this.moduleCount - 1; col > 0; col -= 2) {\n\t\n\t\t\tif (col === 6) col--;\n\t\n\t\t\twhile (true) {\n\t\n\t\t\t\tfor (var c = 0; c < 2; c++) {\n\t\t\t\t\t\n\t\t\t\t\tif (this.modules[row][col - c] === null) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar dark = false;\n\t\n\t\t\t\t\t\tif (byteIndex < data.length) {\n\t\t\t\t\t\t\tdark = ( ( (data[byteIndex] >>> bitIndex) & 1) === 1);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tvar mask = QRUtil.getMask(maskPattern, row, col - c);\n\t\n\t\t\t\t\t\tif (mask) {\n\t\t\t\t\t\t\tdark = !dark;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.modules[row][col - c] = dark;\n\t\t\t\t\t\tbitIndex--;\n\t\n\t\t\t\t\t\tif (bitIndex === -1) {\n\t\t\t\t\t\t\tbyteIndex++;\n\t\t\t\t\t\t\tbitIndex = 7;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\trow += inc;\n\t\n\t\t\t\tif (row < 0 || this.moduleCount <= row) {\n\t\t\t\t\trow -= inc;\n\t\t\t\t\tinc = -inc;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\n};\n\nQRCode.PAD0 = 0xEC;\nQRCode.PAD1 = 0x11;\n\nQRCode.createData = function(typeNumber, errorCorrectLevel, dataList) {\n\t\n\tvar rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n\t\n\tvar buffer = new QRBitBuffer();\n\t\n\tfor (var i = 0; i < dataList.length; i++) {\n\t\tvar data = dataList[i];\n\t\tbuffer.put(data.mode, 4);\n\t\tbuffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber) );\n\t\tdata.write(buffer);\n\t}\n\n\t// calc num max data.\n\tvar totalDataCount = 0;\n\tfor (var x = 0; x < rsBlocks.length; x++) {\n\t\ttotalDataCount += rsBlocks[x].dataCount;\n\t}\n\n\tif (buffer.getLengthInBits() > totalDataCount * 8) {\n\t\tthrow new Error(\"code length overflow. (\" + \n            buffer.getLengthInBits() + \n            \">\" +  \n            totalDataCount * 8 + \n            \")\");\n\t}\n\n\t// end code\n\tif (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n\t\tbuffer.put(0, 4);\n\t}\n\n\t// padding\n\twhile (buffer.getLengthInBits() % 8 !== 0) {\n\t\tbuffer.putBit(false);\n\t}\n\n\t// padding\n\twhile (true) {\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode.PAD0, 8);\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode.PAD1, 8);\n\t}\n\n\treturn QRCode.createBytes(buffer, rsBlocks);\n};\n\nQRCode.createBytes = function(buffer, rsBlocks) {\n\n\tvar offset = 0;\n\t\n\tvar maxDcCount = 0;\n\tvar maxEcCount = 0;\n\t\n\tvar dcdata = new Array(rsBlocks.length);\n\tvar ecdata = new Array(rsBlocks.length);\n\t\n\tfor (var r = 0; r < rsBlocks.length; r++) {\n\n\t\tvar dcCount = rsBlocks[r].dataCount;\n\t\tvar ecCount = rsBlocks[r].totalCount - dcCount;\n\n\t\tmaxDcCount = Math.max(maxDcCount, dcCount);\n\t\tmaxEcCount = Math.max(maxEcCount, ecCount);\n\t\t\n\t\tdcdata[r] = new Array(dcCount);\n\t\t\n\t\tfor (var i = 0; i < dcdata[r].length; i++) {\n\t\t\tdcdata[r][i] = 0xff & buffer.buffer[i + offset];\n\t\t}\n\t\toffset += dcCount;\n\t\t\n\t\tvar rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n\t\tvar rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n\t\tvar modPoly = rawPoly.mod(rsPoly);\n\t\tecdata[r] = new Array(rsPoly.getLength() - 1);\n\t\tfor (var x = 0; x < ecdata[r].length; x++) {\n            var modIndex = x + modPoly.getLength() - ecdata[r].length;\n\t\t\tecdata[r][x] = (modIndex >= 0)? modPoly.get(modIndex) : 0;\n\t\t}\n\n\t}\n\t\n\tvar totalCodeCount = 0;\n\tfor (var y = 0; y < rsBlocks.length; y++) {\n\t\ttotalCodeCount += rsBlocks[y].totalCount;\n\t}\n\n\tvar data = new Array(totalCodeCount);\n\tvar index = 0;\n\n\tfor (var z = 0; z < maxDcCount; z++) {\n\t\tfor (var s = 0; s < rsBlocks.length; s++) {\n\t\t\tif (z < dcdata[s].length) {\n\t\t\t\tdata[index++] = dcdata[s][z];\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (var xx = 0; xx < maxEcCount; xx++) {\n\t\tfor (var t = 0; t < rsBlocks.length; t++) {\n\t\t\tif (xx < ecdata[t].length) {\n\t\t\t\tdata[index++] = ecdata[t][xx];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn data;\n\n};\n\nmodule.exports = QRCode;\n","var QRCode = require('./../vendor/QRCode'),\n    QRErrorCorrectLevel = require('./../vendor/QRCode/QRErrorCorrectLevel'),\n    black = \"\\x1b[40m  \\x1b[0m\",\n    white = \"\\x1b[47m  \\x1b[0m\",\n    toCell = function (isBlack) {\n        return isBlack ? black : white;\n    },\n    repeat = function (color) {\n        return {\n            times: function (count) {\n                return new Array(count).join(color);\n            }\n        };\n    },\n    fill = function(length, value) {\n        var arr = new Array(length);\n        for (var i = 0; i < length; i++) {\n            arr[i] = value;\n        }\n        return arr;\n    };\n\nmodule.exports = {\n\n    error: QRErrorCorrectLevel.L,\n\n    generate: function (input, opts, cb) {\n        if (typeof opts === 'function') {\n            cb = opts;\n            opts = {};\n        }\n\n        var qrcode = new QRCode(-1, this.error);\n        qrcode.addData(input);\n        qrcode.make();\n\n        var output = '';\n        if (opts && opts.small) {\n            var BLACK = true, WHITE = false;\n            var moduleCount = qrcode.getModuleCount();\n            var moduleData = qrcode.modules.slice();\n\n            var oddRow = moduleCount % 2 === 1;\n            if (oddRow) {\n                moduleData.push(fill(moduleCount, WHITE));\n            }\n\n            var platte= {\n                WHITE_ALL: '\\u2588',\n                WHITE_BLACK: '\\u2580',\n                BLACK_WHITE: '\\u2584',\n                BLACK_ALL: ' ',\n            };\n\n            var borderTop = repeat(platte.BLACK_WHITE).times(moduleCount + 3);\n            var borderBottom = repeat(platte.WHITE_BLACK).times(moduleCount + 3);\n            output += borderTop + '\\n';\n\n            for (var row = 0; row < moduleCount; row += 2) {\n                output += platte.WHITE_ALL;\n\n                for (var col = 0; col < moduleCount; col++) {\n                    if (moduleData[row][col] === WHITE && moduleData[row + 1][col] === WHITE) {\n                        output += platte.WHITE_ALL;\n                    } else if (moduleData[row][col] === WHITE && moduleData[row + 1][col] === BLACK) {\n                        output += platte.WHITE_BLACK;\n                    } else if (moduleData[row][col] === BLACK && moduleData[row + 1][col] === WHITE) {\n                        output += platte.BLACK_WHITE;\n                    } else {\n                        output += platte.BLACK_ALL;\n                    }\n                }\n\n                output += platte.WHITE_ALL + '\\n';\n            }\n\n            if (!oddRow) {\n                output += borderBottom;\n            }\n        } else {\n            var border = repeat(white).times(qrcode.getModuleCount() + 3);\n\n            output += border + '\\n';\n            qrcode.modules.forEach(function (row) {\n                output += white;\n                output += row.map(toCell).join(''); \n                output += white + '\\n';\n            });\n            output += border;\n        }\n\n        if (cb) cb(output);\n        else console.log(output);\n    },\n\n    setErrorLevel: function (error) {\n        this.error = QRErrorCorrectLevel[error] || this.error;\n    }\n\n};\n","import { randomBytes, timingSafeEqual } from \"crypto\";\nimport { chmodSync, mkdirSync, readFileSync, renameSync, writeFileSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { join } from \"path\";\n\n// Resolved per call (not frozen at module load) so tests can redirect writes\n// away from the real config via THREADBASE_CONFIG_DIR. Without this, importing\n// this module freezes the path to the real home before any test can sandbox it,\n// and a rotate/set-key test would clobber the live ~/.threadbase/server.yaml.\nfunction configDir(): string {\n  return process.env.THREADBASE_CONFIG_DIR ?? join(homedir(), \".threadbase\");\n}\nfunction configFile(): string {\n  return join(configDir(), \"server.yaml\");\n}\n\nexport function generateApiKey(): string {\n  return `tb_${randomBytes(16).toString(\"hex\")}`;\n}\n\nexport function validateApiKey(provided: string, expected: string): boolean {\n  const a = Buffer.from(provided);\n  const b = Buffer.from(expected);\n  if (a.length !== b.length) return false;\n  return timingSafeEqual(a, b);\n}\n\nexport function loadOrCreateApiKey(): string {\n  try {\n    const content = readFileSync(configFile(), \"utf-8\");\n    const match = content.match(/api_key:\\s*(.+)/);\n    if (match?.[1]) return match[1].trim();\n  } catch {\n    // File doesn't exist, create one\n  }\n\n  const key = generateApiKey();\n  mkdirSync(configDir(), { recursive: true });\n  writeFileSync(configFile(), `api_key: ${key}\\n`, \"utf-8\");\n  return key;\n}\n\nexport function loadBrowseRoot(): string | undefined {\n  try {\n    const content = readFileSync(configFile(), \"utf-8\");\n    const match = content.match(/browse_root:\\s*(.+)/);\n    if (match?.[1]) return match[1].trim();\n  } catch {\n    // File doesn't exist or not readable\n  }\n  return undefined;\n}\n\nexport function loadPublicUrl(): string | undefined {\n  try {\n    const content = readFileSync(configFile(), \"utf-8\");\n    const match = content.match(/public_url:\\s*(.+)/);\n    if (match?.[1]) return match[1].trim();\n  } catch {\n    // File doesn't exist or not readable\n  }\n  return undefined;\n}\n\nexport function loadCacheDir(): string | undefined {\n  try {\n    const content = readFileSync(configFile(), \"utf-8\");\n    const match = content.match(/cache_dir:\\s*(.+)/);\n    if (match?.[1]) return match[1].trim();\n  } catch {\n    // File doesn't exist or not readable\n  }\n  return undefined;\n}\n\nexport function loadTailSize(): number | undefined {\n  try {\n    const content = readFileSync(configFile(), \"utf-8\");\n    const match = content.match(/tail_size:\\s*(\\d+)/);\n    if (match?.[1]) return Number.parseInt(match[1], 10);\n  } catch {\n    // File doesn't exist or not readable\n  }\n  return undefined;\n}\n\nexport type PublicUrlValidation = { ok: true; normalized: string } | { ok: false; error: string };\n\nexport function validatePublicUrl(raw: string): PublicUrlValidation {\n  let parsed: URL;\n  try {\n    parsed = new URL(raw);\n  } catch {\n    return { ok: false, error: `Invalid URL: ${raw}` };\n  }\n  const localHosts = new Set([\"localhost\", \"127.0.0.1\", \"::1\"]);\n  if (parsed.protocol === \"https:\") {\n    return { ok: true, normalized: stripTrailingSlash(parsed.toString()) };\n  }\n  if (parsed.protocol === \"http:\" && localHosts.has(parsed.hostname)) {\n    return { ok: true, normalized: stripTrailingSlash(parsed.toString()) };\n  }\n  return {\n    ok: false,\n    error: `publicUrl must be https:// (got ${parsed.protocol}//). Plain http is only allowed for localhost.`,\n  };\n}\n\nfunction stripTrailingSlash(url: string): string {\n  return url.endsWith(\"/\") ? url.slice(0, -1) : url;\n}\n\nexport function setApiKey(key: string): void {\n  const file = configFile();\n  mkdirSync(configDir(), { recursive: true });\n\n  let content = \"\";\n  try {\n    content = readFileSync(file, \"utf-8\");\n  } catch (err) {\n    if ((err as NodeJS.ErrnoException).code !== \"ENOENT\") throw err;\n    // file does not exist; we'll create it\n  }\n\n  const apiKeyLine = `api_key: ${key}`;\n  let updated: string;\n  if (/^api_key:\\s*.+$/m.test(content)) {\n    updated = content.replace(/^api_key:\\s*.+$/m, apiKeyLine);\n  } else if (content.length === 0 || content.endsWith(\"\\n\")) {\n    updated = `${content}${apiKeyLine}\\n`;\n  } else {\n    updated = `${content}\\n${apiKeyLine}\\n`;\n  }\n\n  const tmpFile = `${file}.tmp`;\n  writeFileSync(tmpFile, updated, { encoding: \"utf-8\", mode: 0o600 });\n  chmodSync(tmpFile, 0o600);\n  renameSync(tmpFile, file);\n}\n","'use strict';\n\nconst ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n    if (node && typeof node === 'object')\n        switch (node[NODE_TYPE]) {\n            case MAP:\n            case SEQ:\n                return true;\n        }\n    return false;\n}\nfunction isNode(node) {\n    if (node && typeof node === 'object')\n        switch (node[NODE_TYPE]) {\n            case ALIAS:\n            case MAP:\n            case SCALAR:\n            case SEQ:\n                return true;\n        }\n    return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexports.ALIAS = ALIAS;\nexports.DOC = DOC;\nexports.MAP = MAP;\nexports.NODE_TYPE = NODE_TYPE;\nexports.PAIR = PAIR;\nexports.SCALAR = SCALAR;\nexports.SEQ = SEQ;\nexports.hasAnchor = hasAnchor;\nexports.isAlias = isAlias;\nexports.isCollection = isCollection;\nexports.isDocument = isDocument;\nexports.isMap = isMap;\nexports.isNode = isNode;\nexports.isPair = isPair;\nexports.isScalar = isScalar;\nexports.isSeq = isSeq;\n","'use strict';\n\nvar identity = require('./nodes/identity.js');\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n *   - `key`: For sequence values and map `Pair`, the node's index in the\n *     collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n *     `null` for the root node.\n *   - `node`: The current node.\n *   - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this node, continue with next\n *     sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current node, then continue with the next one\n *   - `Node`: Replace the current node, then continue by visiting it\n *   - `number`: While iterating the items of a sequence or map, set the index\n *     of the next step. This is useful especially if the index of the current\n *     node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n    const visitor_ = initVisitor(visitor);\n    if (identity.isDocument(node)) {\n        const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n        if (cd === REMOVE)\n            node.contents = null;\n    }\n    else\n        visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n    const ctrl = callVisitor(key, node, visitor, path);\n    if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n        replaceNode(key, path, ctrl);\n        return visit_(key, ctrl, visitor, path);\n    }\n    if (typeof ctrl !== 'symbol') {\n        if (identity.isCollection(node)) {\n            path = Object.freeze(path.concat(node));\n            for (let i = 0; i < node.items.length; ++i) {\n                const ci = visit_(i, node.items[i], visitor, path);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    node.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n        }\n        else if (identity.isPair(node)) {\n            path = Object.freeze(path.concat(node));\n            const ck = visit_('key', node.key, visitor, path);\n            if (ck === BREAK)\n                return BREAK;\n            else if (ck === REMOVE)\n                node.key = null;\n            const cv = visit_('value', node.value, visitor, path);\n            if (cv === BREAK)\n                return BREAK;\n            else if (cv === REMOVE)\n                node.value = null;\n        }\n    }\n    return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n *   - `key`: For sequence values and map `Pair`, the node's index in the\n *     collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n *     `null` for the root node.\n *   - `node`: The current node.\n *   - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `Promise`: Must resolve to one of the following values\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this node, continue with next\n *     sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current node, then continue with the next one\n *   - `Node`: Replace the current node, then continue by visiting it\n *   - `number`: While iterating the items of a sequence or map, set the index\n *     of the next step. This is useful especially if the index of the current\n *     node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n    const visitor_ = initVisitor(visitor);\n    if (identity.isDocument(node)) {\n        const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n        if (cd === REMOVE)\n            node.contents = null;\n    }\n    else\n        await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n    const ctrl = await callVisitor(key, node, visitor, path);\n    if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n        replaceNode(key, path, ctrl);\n        return visitAsync_(key, ctrl, visitor, path);\n    }\n    if (typeof ctrl !== 'symbol') {\n        if (identity.isCollection(node)) {\n            path = Object.freeze(path.concat(node));\n            for (let i = 0; i < node.items.length; ++i) {\n                const ci = await visitAsync_(i, node.items[i], visitor, path);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    node.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n        }\n        else if (identity.isPair(node)) {\n            path = Object.freeze(path.concat(node));\n            const ck = await visitAsync_('key', node.key, visitor, path);\n            if (ck === BREAK)\n                return BREAK;\n            else if (ck === REMOVE)\n                node.key = null;\n            const cv = await visitAsync_('value', node.value, visitor, path);\n            if (cv === BREAK)\n                return BREAK;\n            else if (cv === REMOVE)\n                node.value = null;\n        }\n    }\n    return ctrl;\n}\nfunction initVisitor(visitor) {\n    if (typeof visitor === 'object' &&\n        (visitor.Collection || visitor.Node || visitor.Value)) {\n        return Object.assign({\n            Alias: visitor.Node,\n            Map: visitor.Node,\n            Scalar: visitor.Node,\n            Seq: visitor.Node\n        }, visitor.Value && {\n            Map: visitor.Value,\n            Scalar: visitor.Value,\n            Seq: visitor.Value\n        }, visitor.Collection && {\n            Map: visitor.Collection,\n            Seq: visitor.Collection\n        }, visitor);\n    }\n    return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n    if (typeof visitor === 'function')\n        return visitor(key, node, path);\n    if (identity.isMap(node))\n        return visitor.Map?.(key, node, path);\n    if (identity.isSeq(node))\n        return visitor.Seq?.(key, node, path);\n    if (identity.isPair(node))\n        return visitor.Pair?.(key, node, path);\n    if (identity.isScalar(node))\n        return visitor.Scalar?.(key, node, path);\n    if (identity.isAlias(node))\n        return visitor.Alias?.(key, node, path);\n    return undefined;\n}\nfunction replaceNode(key, path, node) {\n    const parent = path[path.length - 1];\n    if (identity.isCollection(parent)) {\n        parent.items[key] = node;\n    }\n    else if (identity.isPair(parent)) {\n        if (key === 'key')\n            parent.key = node;\n        else\n            parent.value = node;\n    }\n    else if (identity.isDocument(parent)) {\n        parent.contents = node;\n    }\n    else {\n        const pt = identity.isAlias(parent) ? 'alias' : 'scalar';\n        throw new Error(`Cannot replace node with ${pt} parent`);\n    }\n}\n\nexports.visit = visit;\nexports.visitAsync = visitAsync;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar visit = require('../visit.js');\n\nconst escapeChars = {\n    '!': '%21',\n    ',': '%2C',\n    '[': '%5B',\n    ']': '%5D',\n    '{': '%7B',\n    '}': '%7D'\n};\nconst escapeTagName = (tn) => tn.replace(/[!,[\\]{}]/g, ch => escapeChars[ch]);\nclass Directives {\n    constructor(yaml, tags) {\n        /**\n         * The directives-end/doc-start marker `---`. If `null`, a marker may still be\n         * included in the document's stringified representation.\n         */\n        this.docStart = null;\n        /** The doc-end marker `...`.  */\n        this.docEnd = false;\n        this.yaml = Object.assign({}, Directives.defaultYaml, yaml);\n        this.tags = Object.assign({}, Directives.defaultTags, tags);\n    }\n    clone() {\n        const copy = new Directives(this.yaml, this.tags);\n        copy.docStart = this.docStart;\n        return copy;\n    }\n    /**\n     * During parsing, get a Directives instance for the current document and\n     * update the stream state according to the current version's spec.\n     */\n    atDocument() {\n        const res = new Directives(this.yaml, this.tags);\n        switch (this.yaml.version) {\n            case '1.1':\n                this.atNextDocument = true;\n                break;\n            case '1.2':\n                this.atNextDocument = false;\n                this.yaml = {\n                    explicit: Directives.defaultYaml.explicit,\n                    version: '1.2'\n                };\n                this.tags = Object.assign({}, Directives.defaultTags);\n                break;\n        }\n        return res;\n    }\n    /**\n     * @param onError - May be called even if the action was successful\n     * @returns `true` on success\n     */\n    add(line, onError) {\n        if (this.atNextDocument) {\n            this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };\n            this.tags = Object.assign({}, Directives.defaultTags);\n            this.atNextDocument = false;\n        }\n        const parts = line.trim().split(/[ \\t]+/);\n        const name = parts.shift();\n        switch (name) {\n            case '%TAG': {\n                if (parts.length !== 2) {\n                    onError(0, '%TAG directive should contain exactly two parts');\n                    if (parts.length < 2)\n                        return false;\n                }\n                const [handle, prefix] = parts;\n                this.tags[handle] = prefix;\n                return true;\n            }\n            case '%YAML': {\n                this.yaml.explicit = true;\n                if (parts.length !== 1) {\n                    onError(0, '%YAML directive should contain exactly one part');\n                    return false;\n                }\n                const [version] = parts;\n                if (version === '1.1' || version === '1.2') {\n                    this.yaml.version = version;\n                    return true;\n                }\n                else {\n                    const isValid = /^\\d+\\.\\d+$/.test(version);\n                    onError(6, `Unsupported YAML version ${version}`, isValid);\n                    return false;\n                }\n            }\n            default:\n                onError(0, `Unknown directive ${name}`, true);\n                return false;\n        }\n    }\n    /**\n     * Resolves a tag, matching handles to those defined in %TAG directives.\n     *\n     * @returns Resolved tag, which may also be the non-specific tag `'!'` or a\n     *   `'!local'` tag, or `null` if unresolvable.\n     */\n    tagName(source, onError) {\n        if (source === '!')\n            return '!'; // non-specific tag\n        if (source[0] !== '!') {\n            onError(`Not a valid tag: ${source}`);\n            return null;\n        }\n        if (source[1] === '<') {\n            const verbatim = source.slice(2, -1);\n            if (verbatim === '!' || verbatim === '!!') {\n                onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);\n                return null;\n            }\n            if (source[source.length - 1] !== '>')\n                onError('Verbatim tags must end with a >');\n            return verbatim;\n        }\n        const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);\n        if (!suffix)\n            onError(`The ${source} tag has no suffix`);\n        const prefix = this.tags[handle];\n        if (prefix) {\n            try {\n                return prefix + decodeURIComponent(suffix);\n            }\n            catch (error) {\n                onError(String(error));\n                return null;\n            }\n        }\n        if (handle === '!')\n            return source; // local tag\n        onError(`Could not resolve tag: ${source}`);\n        return null;\n    }\n    /**\n     * Given a fully resolved tag, returns its printable string form,\n     * taking into account current tag prefixes and defaults.\n     */\n    tagString(tag) {\n        for (const [handle, prefix] of Object.entries(this.tags)) {\n            if (tag.startsWith(prefix))\n                return handle + escapeTagName(tag.substring(prefix.length));\n        }\n        return tag[0] === '!' ? tag : `!<${tag}>`;\n    }\n    toString(doc) {\n        const lines = this.yaml.explicit\n            ? [`%YAML ${this.yaml.version || '1.2'}`]\n            : [];\n        const tagEntries = Object.entries(this.tags);\n        let tagNames;\n        if (doc && tagEntries.length > 0 && identity.isNode(doc.contents)) {\n            const tags = {};\n            visit.visit(doc.contents, (_key, node) => {\n                if (identity.isNode(node) && node.tag)\n                    tags[node.tag] = true;\n            });\n            tagNames = Object.keys(tags);\n        }\n        else\n            tagNames = [];\n        for (const [handle, prefix] of tagEntries) {\n            if (handle === '!!' && prefix === 'tag:yaml.org,2002:')\n                continue;\n            if (!doc || tagNames.some(tn => tn.startsWith(prefix)))\n                lines.push(`%TAG ${handle} ${prefix}`);\n        }\n        return lines.join('\\n');\n    }\n}\nDirectives.defaultYaml = { explicit: false, version: '1.2' };\nDirectives.defaultTags = { '!!': 'tag:yaml.org,2002:' };\n\nexports.Directives = Directives;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar visit = require('../visit.js');\n\n/**\n * Verify that the input string is a valid anchor.\n *\n * Will throw on errors.\n */\nfunction anchorIsValid(anchor) {\n    if (/[\\x00-\\x19\\s,[\\]{}]/.test(anchor)) {\n        const sa = JSON.stringify(anchor);\n        const msg = `Anchor must not contain whitespace or control characters: ${sa}`;\n        throw new Error(msg);\n    }\n    return true;\n}\nfunction anchorNames(root) {\n    const anchors = new Set();\n    visit.visit(root, {\n        Value(_key, node) {\n            if (node.anchor)\n                anchors.add(node.anchor);\n        }\n    });\n    return anchors;\n}\n/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */\nfunction findNewAnchor(prefix, exclude) {\n    for (let i = 1; true; ++i) {\n        const name = `${prefix}${i}`;\n        if (!exclude.has(name))\n            return name;\n    }\n}\nfunction createNodeAnchors(doc, prefix) {\n    const aliasObjects = [];\n    const sourceObjects = new Map();\n    let prevAnchors = null;\n    return {\n        onAnchor: (source) => {\n            aliasObjects.push(source);\n            prevAnchors ?? (prevAnchors = anchorNames(doc));\n            const anchor = findNewAnchor(prefix, prevAnchors);\n            prevAnchors.add(anchor);\n            return anchor;\n        },\n        /**\n         * With circular references, the source node is only resolved after all\n         * of its child nodes are. This is why anchors are set only after all of\n         * the nodes have been created.\n         */\n        setAnchors: () => {\n            for (const source of aliasObjects) {\n                const ref = sourceObjects.get(source);\n                if (typeof ref === 'object' &&\n                    ref.anchor &&\n                    (identity.isScalar(ref.node) || identity.isCollection(ref.node))) {\n                    ref.node.anchor = ref.anchor;\n                }\n                else {\n                    const error = new Error('Failed to resolve repeated object (this should not happen)');\n                    error.source = source;\n                    throw error;\n                }\n            }\n        },\n        sourceObjects\n    };\n}\n\nexports.anchorIsValid = anchorIsValid;\nexports.anchorNames = anchorNames;\nexports.createNodeAnchors = createNodeAnchors;\nexports.findNewAnchor = findNewAnchor;\n","'use strict';\n\n/**\n * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,\n * in section 24.5.1.1 \"Runtime Semantics: InternalizeJSONProperty\" of the\n * 2021 edition: https://tc39.es/ecma262/#sec-json.parse\n *\n * Includes extensions for handling Map and Set objects.\n */\nfunction applyReviver(reviver, obj, key, val) {\n    if (val && typeof val === 'object') {\n        if (Array.isArray(val)) {\n            for (let i = 0, len = val.length; i < len; ++i) {\n                const v0 = val[i];\n                const v1 = applyReviver(reviver, val, String(i), v0);\n                // eslint-disable-next-line @typescript-eslint/no-array-delete\n                if (v1 === undefined)\n                    delete val[i];\n                else if (v1 !== v0)\n                    val[i] = v1;\n            }\n        }\n        else if (val instanceof Map) {\n            for (const k of Array.from(val.keys())) {\n                const v0 = val.get(k);\n                const v1 = applyReviver(reviver, val, k, v0);\n                if (v1 === undefined)\n                    val.delete(k);\n                else if (v1 !== v0)\n                    val.set(k, v1);\n            }\n        }\n        else if (val instanceof Set) {\n            for (const v0 of Array.from(val)) {\n                const v1 = applyReviver(reviver, val, v0, v0);\n                if (v1 === undefined)\n                    val.delete(v0);\n                else if (v1 !== v0) {\n                    val.delete(v0);\n                    val.add(v1);\n                }\n            }\n        }\n        else {\n            for (const [k, v0] of Object.entries(val)) {\n                const v1 = applyReviver(reviver, val, k, v0);\n                if (v1 === undefined)\n                    delete val[k];\n                else if (v1 !== v0)\n                    val[k] = v1;\n            }\n        }\n    }\n    return reviver.call(obj, key, val);\n}\n\nexports.applyReviver = applyReviver;\n","'use strict';\n\nvar identity = require('./identity.js');\n\n/**\n * Recursively convert any node or its contents to native JavaScript\n *\n * @param value - The input value\n * @param arg - If `value` defines a `toJSON()` method, use this\n *   as its first argument\n * @param ctx - Conversion context, originally set in Document#toJS(). If\n *   `{ keep: true }` is not set, output should be suitable for JSON\n *   stringification.\n */\nfunction toJS(value, arg, ctx) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n    if (Array.isArray(value))\n        return value.map((v, i) => toJS(v, String(i), ctx));\n    if (value && typeof value.toJSON === 'function') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n        if (!ctx || !identity.hasAnchor(value))\n            return value.toJSON(arg, ctx);\n        const data = { aliasCount: 0, count: 1, res: undefined };\n        ctx.anchors.set(value, data);\n        ctx.onCreate = res => {\n            data.res = res;\n            delete ctx.onCreate;\n        };\n        const res = value.toJSON(arg, ctx);\n        if (ctx.onCreate)\n            ctx.onCreate(res);\n        return res;\n    }\n    if (typeof value === 'bigint' && !ctx?.keep)\n        return Number(value);\n    return value;\n}\n\nexports.toJS = toJS;\n","'use strict';\n\nvar applyReviver = require('../doc/applyReviver.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nclass NodeBase {\n    constructor(type) {\n        Object.defineProperty(this, identity.NODE_TYPE, { value: type });\n    }\n    /** Create a copy of this node.  */\n    clone() {\n        const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /** A plain JavaScript representation of this node. */\n    toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n        if (!identity.isDocument(doc))\n            throw new TypeError('A document argument is required');\n        const ctx = {\n            anchors: new Map(),\n            doc,\n            keep: true,\n            mapAsMap: mapAsMap === true,\n            mapKeyWarned: false,\n            maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n        };\n        const res = toJS.toJS(this, '', ctx);\n        if (typeof onAnchor === 'function')\n            for (const { count, res } of ctx.anchors.values())\n                onAnchor(res, count);\n        return typeof reviver === 'function'\n            ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n            : res;\n    }\n}\n\nexports.NodeBase = NodeBase;\n","'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar visit = require('../visit.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nclass Alias extends Node.NodeBase {\n    constructor(source) {\n        super(identity.ALIAS);\n        this.source = source;\n        Object.defineProperty(this, 'tag', {\n            set() {\n                throw new Error('Alias nodes cannot have tags');\n            }\n        });\n    }\n    /**\n     * Resolve the value of this alias within `doc`, finding the last\n     * instance of the `source` anchor before this node.\n     */\n    resolve(doc, ctx) {\n        if (ctx?.maxAliasCount === 0)\n            throw new ReferenceError('Alias resolution is disabled');\n        let nodes;\n        if (ctx?.aliasResolveCache) {\n            nodes = ctx.aliasResolveCache;\n        }\n        else {\n            nodes = [];\n            visit.visit(doc, {\n                Node: (_key, node) => {\n                    if (identity.isAlias(node) || identity.hasAnchor(node))\n                        nodes.push(node);\n                }\n            });\n            if (ctx)\n                ctx.aliasResolveCache = nodes;\n        }\n        let found = undefined;\n        for (const node of nodes) {\n            if (node === this)\n                break;\n            if (node.anchor === this.source)\n                found = node;\n        }\n        return found;\n    }\n    toJSON(_arg, ctx) {\n        if (!ctx)\n            return { source: this.source };\n        const { anchors, doc, maxAliasCount } = ctx;\n        const source = this.resolve(doc, ctx);\n        if (!source) {\n            const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n            throw new ReferenceError(msg);\n        }\n        let data = anchors.get(source);\n        if (!data) {\n            // Resolve anchors for Node.prototype.toJS()\n            toJS.toJS(source, null, ctx);\n            data = anchors.get(source);\n        }\n        /* istanbul ignore if */\n        if (data?.res === undefined) {\n            const msg = 'This should not happen: Alias anchor was not resolved?';\n            throw new ReferenceError(msg);\n        }\n        if (maxAliasCount >= 0) {\n            data.count += 1;\n            if (data.aliasCount === 0)\n                data.aliasCount = getAliasCount(doc, source, anchors);\n            if (data.count * data.aliasCount > maxAliasCount) {\n                const msg = 'Excessive alias count indicates a resource exhaustion attack';\n                throw new ReferenceError(msg);\n            }\n        }\n        return data.res;\n    }\n    toString(ctx, _onComment, _onChompKeep) {\n        const src = `*${this.source}`;\n        if (ctx) {\n            anchors.anchorIsValid(this.source);\n            if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n                const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n                throw new Error(msg);\n            }\n            if (ctx.implicitKey)\n                return `${src} `;\n        }\n        return src;\n    }\n}\nfunction getAliasCount(doc, node, anchors) {\n    if (identity.isAlias(node)) {\n        const source = node.resolve(doc);\n        const anchor = anchors && source && anchors.get(source);\n        return anchor ? anchor.count * anchor.aliasCount : 0;\n    }\n    else if (identity.isCollection(node)) {\n        let count = 0;\n        for (const item of node.items) {\n            const c = getAliasCount(doc, item, anchors);\n            if (c > count)\n                count = c;\n        }\n        return count;\n    }\n    else if (identity.isPair(node)) {\n        const kc = getAliasCount(doc, node.key, anchors);\n        const vc = getAliasCount(doc, node.value, anchors);\n        return Math.max(kc, vc);\n    }\n    return 1;\n}\n\nexports.Alias = Alias;\n","'use strict';\n\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nconst isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');\nclass Scalar extends Node.NodeBase {\n    constructor(value) {\n        super(identity.SCALAR);\n        this.value = value;\n    }\n    toJSON(arg, ctx) {\n        return ctx?.keep ? this.value : toJS.toJS(this.value, arg, ctx);\n    }\n    toString() {\n        return String(this.value);\n    }\n}\nScalar.BLOCK_FOLDED = 'BLOCK_FOLDED';\nScalar.BLOCK_LITERAL = 'BLOCK_LITERAL';\nScalar.PLAIN = 'PLAIN';\nScalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';\nScalar.QUOTE_SINGLE = 'QUOTE_SINGLE';\n\nexports.Scalar = Scalar;\nexports.isScalarValue = isScalarValue;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\n\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nfunction findTagObject(value, tagName, tags) {\n    if (tagName) {\n        const match = tags.filter(t => t.tag === tagName);\n        const tagObj = match.find(t => !t.format) ?? match[0];\n        if (!tagObj)\n            throw new Error(`Tag ${tagName} not found`);\n        return tagObj;\n    }\n    return tags.find(t => t.identify?.(value) && !t.format);\n}\nfunction createNode(value, tagName, ctx) {\n    if (identity.isDocument(value))\n        value = value.contents;\n    if (identity.isNode(value))\n        return value;\n    if (identity.isPair(value)) {\n        const map = ctx.schema[identity.MAP].createNode?.(ctx.schema, null, ctx);\n        map.items.push(value);\n        return map;\n    }\n    if (value instanceof String ||\n        value instanceof Number ||\n        value instanceof Boolean ||\n        (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere\n    ) {\n        // https://tc39.es/ecma262/#sec-serializejsonproperty\n        value = value.valueOf();\n    }\n    const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;\n    // Detect duplicate references to the same object & use Alias nodes for all\n    // after first. The `ref` wrapper allows for circular references to resolve.\n    let ref = undefined;\n    if (aliasDuplicateObjects && value && typeof value === 'object') {\n        ref = sourceObjects.get(value);\n        if (ref) {\n            ref.anchor ?? (ref.anchor = onAnchor(value));\n            return new Alias.Alias(ref.anchor);\n        }\n        else {\n            ref = { anchor: null, node: null };\n            sourceObjects.set(value, ref);\n        }\n    }\n    if (tagName?.startsWith('!!'))\n        tagName = defaultTagPrefix + tagName.slice(2);\n    let tagObj = findTagObject(value, tagName, schema.tags);\n    if (!tagObj) {\n        if (value && typeof value.toJSON === 'function') {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n            value = value.toJSON();\n        }\n        if (!value || typeof value !== 'object') {\n            const node = new Scalar.Scalar(value);\n            if (ref)\n                ref.node = node;\n            return node;\n        }\n        tagObj =\n            value instanceof Map\n                ? schema[identity.MAP]\n                : Symbol.iterator in Object(value)\n                    ? schema[identity.SEQ]\n                    : schema[identity.MAP];\n    }\n    if (onTagObj) {\n        onTagObj(tagObj);\n        delete ctx.onTagObj;\n    }\n    const node = tagObj?.createNode\n        ? tagObj.createNode(ctx.schema, value, ctx)\n        : typeof tagObj?.nodeClass?.from === 'function'\n            ? tagObj.nodeClass.from(ctx.schema, value, ctx)\n            : new Scalar.Scalar(value);\n    if (tagName)\n        node.tag = tagName;\n    else if (!tagObj.default)\n        node.tag = tagObj.tag;\n    if (ref)\n        ref.node = node;\n    return node;\n}\n\nexports.createNode = createNode;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\n\nfunction collectionFromPath(schema, path, value) {\n    let v = value;\n    for (let i = path.length - 1; i >= 0; --i) {\n        const k = path[i];\n        if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {\n            const a = [];\n            a[k] = v;\n            v = a;\n        }\n        else {\n            v = new Map([[k, v]]);\n        }\n    }\n    return createNode.createNode(v, undefined, {\n        aliasDuplicateObjects: false,\n        keepUndefined: false,\n        onAnchor: () => {\n            throw new Error('This should not happen, please report a bug.');\n        },\n        schema,\n        sourceObjects: new Map()\n    });\n}\n// Type guard is intentionally a little wrong so as to be more useful,\n// as it does not cover untypable empty non-string iterables (e.g. []).\nconst isEmptyPath = (path) => path == null ||\n    (typeof path === 'object' && !!path[Symbol.iterator]().next().done);\nclass Collection extends Node.NodeBase {\n    constructor(type, schema) {\n        super(type);\n        Object.defineProperty(this, 'schema', {\n            value: schema,\n            configurable: true,\n            enumerable: false,\n            writable: true\n        });\n    }\n    /**\n     * Create a copy of this collection.\n     *\n     * @param schema - If defined, overwrites the original's schema\n     */\n    clone(schema) {\n        const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n        if (schema)\n            copy.schema = schema;\n        copy.items = copy.items.map(it => identity.isNode(it) || identity.isPair(it) ? it.clone(schema) : it);\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /**\n     * Adds a value to the collection. For `!!map` and `!!omap` the value must\n     * be a Pair instance or a `{ key, value }` object, which may not have a key\n     * that already exists in the map.\n     */\n    addIn(path, value) {\n        if (isEmptyPath(path))\n            this.add(value);\n        else {\n            const [key, ...rest] = path;\n            const node = this.get(key, true);\n            if (identity.isCollection(node))\n                node.addIn(rest, value);\n            else if (node === undefined && this.schema)\n                this.set(key, collectionFromPath(this.schema, rest, value));\n            else\n                throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n        }\n    }\n    /**\n     * Removes a value from the collection.\n     * @returns `true` if the item was found and removed.\n     */\n    deleteIn(path) {\n        const [key, ...rest] = path;\n        if (rest.length === 0)\n            return this.delete(key);\n        const node = this.get(key, true);\n        if (identity.isCollection(node))\n            return node.deleteIn(rest);\n        else\n            throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n    }\n    /**\n     * Returns item at `key`, or `undefined` if not found. By default unwraps\n     * scalar values from their surrounding node; to disable set `keepScalar` to\n     * `true` (collections are always returned intact).\n     */\n    getIn(path, keepScalar) {\n        const [key, ...rest] = path;\n        const node = this.get(key, true);\n        if (rest.length === 0)\n            return !keepScalar && identity.isScalar(node) ? node.value : node;\n        else\n            return identity.isCollection(node) ? node.getIn(rest, keepScalar) : undefined;\n    }\n    hasAllNullValues(allowScalar) {\n        return this.items.every(node => {\n            if (!identity.isPair(node))\n                return false;\n            const n = node.value;\n            return (n == null ||\n                (allowScalar &&\n                    identity.isScalar(n) &&\n                    n.value == null &&\n                    !n.commentBefore &&\n                    !n.comment &&\n                    !n.tag));\n        });\n    }\n    /**\n     * Checks if the collection includes a value with the key `key`.\n     */\n    hasIn(path) {\n        const [key, ...rest] = path;\n        if (rest.length === 0)\n            return this.has(key);\n        const node = this.get(key, true);\n        return identity.isCollection(node) ? node.hasIn(rest) : false;\n    }\n    /**\n     * Sets a value in this collection. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     */\n    setIn(path, value) {\n        const [key, ...rest] = path;\n        if (rest.length === 0) {\n            this.set(key, value);\n        }\n        else {\n            const node = this.get(key, true);\n            if (identity.isCollection(node))\n                node.setIn(rest, value);\n            else if (node === undefined && this.schema)\n                this.set(key, collectionFromPath(this.schema, rest, value));\n            else\n                throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n        }\n    }\n}\n\nexports.Collection = Collection;\nexports.collectionFromPath = collectionFromPath;\nexports.isEmptyPath = isEmptyPath;\n","'use strict';\n\n/**\n * Stringifies a comment.\n *\n * Empty comment lines are left empty,\n * lines consisting of a single space are replaced by `#`,\n * and all other lines are prefixed with a `#`.\n */\nconst stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');\nfunction indentComment(comment, indent) {\n    if (/^\\n+$/.test(comment))\n        return comment.substring(1);\n    return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;\n}\nconst lineComment = (str, indent, comment) => str.endsWith('\\n')\n    ? indentComment(comment, indent)\n    : comment.includes('\\n')\n        ? '\\n' + indentComment(comment, indent)\n        : (str.endsWith(' ') ? '' : ' ') + comment;\n\nexports.indentComment = indentComment;\nexports.lineComment = lineComment;\nexports.stringifyComment = stringifyComment;\n","'use strict';\n\nconst FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted';\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n */\nfunction foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {\n    if (!lineWidth || lineWidth < 0)\n        return text;\n    if (lineWidth < minContentWidth)\n        minContentWidth = 0;\n    const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n    if (text.length <= endStep)\n        return text;\n    const folds = [];\n    const escapedFolds = {};\n    let end = lineWidth - indent.length;\n    if (typeof indentAtStart === 'number') {\n        if (indentAtStart > lineWidth - Math.max(2, minContentWidth))\n            folds.push(0);\n        else\n            end = lineWidth - indentAtStart;\n    }\n    let split = undefined;\n    let prev = undefined;\n    let overflow = false;\n    let i = -1;\n    let escStart = -1;\n    let escEnd = -1;\n    if (mode === FOLD_BLOCK) {\n        i = consumeMoreIndentedLines(text, i, indent.length);\n        if (i !== -1)\n            end = i + endStep;\n    }\n    for (let ch; (ch = text[(i += 1)]);) {\n        if (mode === FOLD_QUOTED && ch === '\\\\') {\n            escStart = i;\n            switch (text[i + 1]) {\n                case 'x':\n                    i += 3;\n                    break;\n                case 'u':\n                    i += 5;\n                    break;\n                case 'U':\n                    i += 9;\n                    break;\n                default:\n                    i += 1;\n            }\n            escEnd = i;\n        }\n        if (ch === '\\n') {\n            if (mode === FOLD_BLOCK)\n                i = consumeMoreIndentedLines(text, i, indent.length);\n            end = i + indent.length + endStep;\n            split = undefined;\n        }\n        else {\n            if (ch === ' ' &&\n                prev &&\n                prev !== ' ' &&\n                prev !== '\\n' &&\n                prev !== '\\t') {\n                // space surrounded by non-space can be replaced with newline + indent\n                const next = text[i + 1];\n                if (next && next !== ' ' && next !== '\\n' && next !== '\\t')\n                    split = i;\n            }\n            if (i >= end) {\n                if (split) {\n                    folds.push(split);\n                    end = split + endStep;\n                    split = undefined;\n                }\n                else if (mode === FOLD_QUOTED) {\n                    // white-space collected at end may stretch past lineWidth\n                    while (prev === ' ' || prev === '\\t') {\n                        prev = ch;\n                        ch = text[(i += 1)];\n                        overflow = true;\n                    }\n                    // Account for newline escape, but don't break preceding escape\n                    const j = i > escEnd + 1 ? i - 2 : escStart - 1;\n                    // Bail out if lineWidth & minContentWidth are shorter than an escape string\n                    if (escapedFolds[j])\n                        return text;\n                    folds.push(j);\n                    escapedFolds[j] = true;\n                    end = j + endStep;\n                    split = undefined;\n                }\n                else {\n                    overflow = true;\n                }\n            }\n        }\n        prev = ch;\n    }\n    if (overflow && onOverflow)\n        onOverflow();\n    if (folds.length === 0)\n        return text;\n    if (onFold)\n        onFold();\n    let res = text.slice(0, folds[0]);\n    for (let i = 0; i < folds.length; ++i) {\n        const fold = folds[i];\n        const end = folds[i + 1] || text.length;\n        if (fold === 0)\n            res = `\\n${indent}${text.slice(0, end)}`;\n        else {\n            if (mode === FOLD_QUOTED && escapedFolds[fold])\n                res += `${text[fold]}\\\\`;\n            res += `\\n${indent}${text.slice(fold + 1, end)}`;\n        }\n    }\n    return res;\n}\n/**\n * Presumes `i + 1` is at the start of a line\n * @returns index of last newline in more-indented block\n */\nfunction consumeMoreIndentedLines(text, i, indent) {\n    let end = i;\n    let start = i + 1;\n    let ch = text[start];\n    while (ch === ' ' || ch === '\\t') {\n        if (i < start + indent) {\n            ch = text[++i];\n        }\n        else {\n            do {\n                ch = text[++i];\n            } while (ch && ch !== '\\n');\n            end = i;\n            start = i + 1;\n            ch = text[start];\n        }\n    }\n    return end;\n}\n\nexports.FOLD_BLOCK = FOLD_BLOCK;\nexports.FOLD_FLOW = FOLD_FLOW;\nexports.FOLD_QUOTED = FOLD_QUOTED;\nexports.foldFlowLines = foldFlowLines;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar foldFlowLines = require('./foldFlowLines.js');\n\nconst getFoldOptions = (ctx, isBlock) => ({\n    indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,\n    lineWidth: ctx.options.lineWidth,\n    minContentWidth: ctx.options.minContentWidth\n});\n// Also checks for lines starting with %, as parsing the output as YAML 1.1 will\n// presume that's starting a new document.\nconst containsDocumentMarker = (str) => /^(%|---|\\.\\.\\.)/m.test(str);\nfunction lineLengthOverLimit(str, lineWidth, indentLength) {\n    if (!lineWidth || lineWidth < 0)\n        return false;\n    const limit = lineWidth - indentLength;\n    const strLen = str.length;\n    if (strLen <= limit)\n        return false;\n    for (let i = 0, start = 0; i < strLen; ++i) {\n        if (str[i] === '\\n') {\n            if (i - start > limit)\n                return true;\n            start = i + 1;\n            if (strLen - start <= limit)\n                return false;\n        }\n    }\n    return true;\n}\nfunction doubleQuotedString(value, ctx) {\n    const json = JSON.stringify(value);\n    if (ctx.options.doubleQuotedAsJSON)\n        return json;\n    const { implicitKey } = ctx;\n    const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;\n    const indent = ctx.indent || (containsDocumentMarker(value) ? '  ' : '');\n    let str = '';\n    let start = 0;\n    for (let i = 0, ch = json[i]; ch; ch = json[++i]) {\n        if (ch === ' ' && json[i + 1] === '\\\\' && json[i + 2] === 'n') {\n            // space before newline needs to be escaped to not be folded\n            str += json.slice(start, i) + '\\\\ ';\n            i += 1;\n            start = i;\n            ch = '\\\\';\n        }\n        if (ch === '\\\\')\n            switch (json[i + 1]) {\n                case 'u':\n                    {\n                        str += json.slice(start, i);\n                        const code = json.substr(i + 2, 4);\n                        switch (code) {\n                            case '0000':\n                                str += '\\\\0';\n                                break;\n                            case '0007':\n                                str += '\\\\a';\n                                break;\n                            case '000b':\n                                str += '\\\\v';\n                                break;\n                            case '001b':\n                                str += '\\\\e';\n                                break;\n                            case '0085':\n                                str += '\\\\N';\n                                break;\n                            case '00a0':\n                                str += '\\\\_';\n                                break;\n                            case '2028':\n                                str += '\\\\L';\n                                break;\n                            case '2029':\n                                str += '\\\\P';\n                                break;\n                            default:\n                                if (code.substr(0, 2) === '00')\n                                    str += '\\\\x' + code.substr(2);\n                                else\n                                    str += json.substr(i, 6);\n                        }\n                        i += 5;\n                        start = i + 1;\n                    }\n                    break;\n                case 'n':\n                    if (implicitKey ||\n                        json[i + 2] === '\"' ||\n                        json.length < minMultiLineLength) {\n                        i += 1;\n                    }\n                    else {\n                        // folding will eat first newline\n                        str += json.slice(start, i) + '\\n\\n';\n                        while (json[i + 2] === '\\\\' &&\n                            json[i + 3] === 'n' &&\n                            json[i + 4] !== '\"') {\n                            str += '\\n';\n                            i += 2;\n                        }\n                        str += indent;\n                        // space after newline needs to be escaped to not be folded\n                        if (json[i + 2] === ' ')\n                            str += '\\\\';\n                        i += 1;\n                        start = i + 1;\n                    }\n                    break;\n                default:\n                    i += 1;\n            }\n    }\n    str = start ? str + json.slice(start) : json;\n    return implicitKey\n        ? str\n        : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_QUOTED, getFoldOptions(ctx, false));\n}\nfunction singleQuotedString(value, ctx) {\n    if (ctx.options.singleQuote === false ||\n        (ctx.implicitKey && value.includes('\\n')) ||\n        /[ \\t]\\n|\\n[ \\t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline\n    )\n        return doubleQuotedString(value, ctx);\n    const indent = ctx.indent || (containsDocumentMarker(value) ? '  ' : '');\n    const res = \"'\" + value.replace(/'/g, \"''\").replace(/\\n+/g, `$&\\n${indent}`) + \"'\";\n    return ctx.implicitKey\n        ? res\n        : foldFlowLines.foldFlowLines(res, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction quotedString(value, ctx) {\n    const { singleQuote } = ctx.options;\n    let qs;\n    if (singleQuote === false)\n        qs = doubleQuotedString;\n    else {\n        const hasDouble = value.includes('\"');\n        const hasSingle = value.includes(\"'\");\n        if (hasDouble && !hasSingle)\n            qs = singleQuotedString;\n        else if (hasSingle && !hasDouble)\n            qs = doubleQuotedString;\n        else\n            qs = singleQuote ? singleQuotedString : doubleQuotedString;\n    }\n    return qs(value, ctx);\n}\n// The negative lookbehind avoids a polynomial search,\n// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind\nlet blockEndNewlines;\ntry {\n    blockEndNewlines = new RegExp('(^|(?<!\\n))\\n+(?!\\n|$)', 'g');\n}\ncatch {\n    blockEndNewlines = /\\n+(?!\\n|$)/g;\n}\nfunction blockString({ comment, type, value }, ctx, onComment, onChompKeep) {\n    const { blockQuote, commentString, lineWidth } = ctx.options;\n    // 1. Block can't end in whitespace unless the last line is non-empty.\n    // 2. Strings consisting of only whitespace are best rendered explicitly.\n    if (!blockQuote || /\\n[\\t ]+$/.test(value)) {\n        return quotedString(value, ctx);\n    }\n    const indent = ctx.indent ||\n        (ctx.forceBlockIndent || containsDocumentMarker(value) ? '  ' : '');\n    const literal = blockQuote === 'literal'\n        ? true\n        : blockQuote === 'folded' || type === Scalar.Scalar.BLOCK_FOLDED\n            ? false\n            : type === Scalar.Scalar.BLOCK_LITERAL\n                ? true\n                : !lineLengthOverLimit(value, lineWidth, indent.length);\n    if (!value)\n        return literal ? '|\\n' : '>\\n';\n    // determine chomping from whitespace at value end\n    let chomp;\n    let endStart;\n    for (endStart = value.length; endStart > 0; --endStart) {\n        const ch = value[endStart - 1];\n        if (ch !== '\\n' && ch !== '\\t' && ch !== ' ')\n            break;\n    }\n    let end = value.substring(endStart);\n    const endNlPos = end.indexOf('\\n');\n    if (endNlPos === -1) {\n        chomp = '-'; // strip\n    }\n    else if (value === end || endNlPos !== end.length - 1) {\n        chomp = '+'; // keep\n        if (onChompKeep)\n            onChompKeep();\n    }\n    else {\n        chomp = ''; // clip\n    }\n    if (end) {\n        value = value.slice(0, -end.length);\n        if (end[end.length - 1] === '\\n')\n            end = end.slice(0, -1);\n        end = end.replace(blockEndNewlines, `$&${indent}`);\n    }\n    // determine indent indicator from whitespace at value start\n    let startWithSpace = false;\n    let startEnd;\n    let startNlPos = -1;\n    for (startEnd = 0; startEnd < value.length; ++startEnd) {\n        const ch = value[startEnd];\n        if (ch === ' ')\n            startWithSpace = true;\n        else if (ch === '\\n')\n            startNlPos = startEnd;\n        else\n            break;\n    }\n    let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);\n    if (start) {\n        value = value.substring(start.length);\n        start = start.replace(/\\n+/g, `$&${indent}`);\n    }\n    const indentSize = indent ? '2' : '1'; // root is at -1\n    // Leading | or > is added later\n    let header = (startWithSpace ? indentSize : '') + chomp;\n    if (comment) {\n        header += ' ' + commentString(comment.replace(/ ?[\\r\\n]+/g, ' '));\n        if (onComment)\n            onComment();\n    }\n    if (!literal) {\n        const foldedValue = value\n            .replace(/\\n+/g, '\\n$&')\n            .replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g, '$1$2') // more-indented lines aren't folded\n            //                ^ more-ind. ^ empty     ^ capture next empty lines only at end of indent\n            .replace(/\\n+/g, `$&${indent}`);\n        let literalFallback = false;\n        const foldOptions = getFoldOptions(ctx, true);\n        if (blockQuote !== 'folded' && type !== Scalar.Scalar.BLOCK_FOLDED) {\n            foldOptions.onOverflow = () => {\n                literalFallback = true;\n            };\n        }\n        const body = foldFlowLines.foldFlowLines(`${start}${foldedValue}${end}`, indent, foldFlowLines.FOLD_BLOCK, foldOptions);\n        if (!literalFallback)\n            return `>${header}\\n${indent}${body}`;\n    }\n    value = value.replace(/\\n+/g, `$&${indent}`);\n    return `|${header}\\n${indent}${start}${value}${end}`;\n}\nfunction plainString(item, ctx, onComment, onChompKeep) {\n    const { type, value } = item;\n    const { actualString, implicitKey, indent, indentStep, inFlow } = ctx;\n    if ((implicitKey && value.includes('\\n')) ||\n        (inFlow && /[[\\]{},]/.test(value))) {\n        return quotedString(value, ctx);\n    }\n    if (/^[\\n\\t ,[\\]{}#&*!|>'\"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(value)) {\n        // not allowed:\n        // - '-' or '?'\n        // - start with an indicator character (except [?:-]) or /[?-] /\n        // - '\\n ', ': ' or ' \\n' anywhere\n        // - '#' not preceded by a non-space char\n        // - end with ' ' or ':'\n        return implicitKey || inFlow || !value.includes('\\n')\n            ? quotedString(value, ctx)\n            : blockString(item, ctx, onComment, onChompKeep);\n    }\n    if (!implicitKey &&\n        !inFlow &&\n        type !== Scalar.Scalar.PLAIN &&\n        value.includes('\\n')) {\n        // Where allowed & type not set explicitly, prefer block style for multiline strings\n        return blockString(item, ctx, onComment, onChompKeep);\n    }\n    if (containsDocumentMarker(value)) {\n        if (indent === '') {\n            ctx.forceBlockIndent = true;\n            return blockString(item, ctx, onComment, onChompKeep);\n        }\n        else if (implicitKey && indent === indentStep) {\n            return quotedString(value, ctx);\n        }\n    }\n    const str = value.replace(/\\n+/g, `$&\\n${indent}`);\n    // Verify that output will be parsed as a string, as e.g. plain numbers and\n    // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),\n    // and others in v1.1.\n    if (actualString) {\n        const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str);\n        const { compat, tags } = ctx.doc.schema;\n        if (tags.some(test) || compat?.some(test))\n            return quotedString(value, ctx);\n    }\n    return implicitKey\n        ? str\n        : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction stringifyString(item, ctx, onComment, onChompKeep) {\n    const { implicitKey, inFlow } = ctx;\n    const ss = typeof item.value === 'string'\n        ? item\n        : Object.assign({}, item, { value: String(item.value) });\n    let { type } = item;\n    if (type !== Scalar.Scalar.QUOTE_DOUBLE) {\n        // force double quotes on control characters & unpaired surrogates\n        if (/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(ss.value))\n            type = Scalar.Scalar.QUOTE_DOUBLE;\n    }\n    const _stringify = (_type) => {\n        switch (_type) {\n            case Scalar.Scalar.BLOCK_FOLDED:\n            case Scalar.Scalar.BLOCK_LITERAL:\n                return implicitKey || inFlow\n                    ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers\n                    : blockString(ss, ctx, onComment, onChompKeep);\n            case Scalar.Scalar.QUOTE_DOUBLE:\n                return doubleQuotedString(ss.value, ctx);\n            case Scalar.Scalar.QUOTE_SINGLE:\n                return singleQuotedString(ss.value, ctx);\n            case Scalar.Scalar.PLAIN:\n                return plainString(ss, ctx, onComment, onChompKeep);\n            default:\n                return null;\n        }\n    };\n    let res = _stringify(type);\n    if (res === null) {\n        const { defaultKeyType, defaultStringType } = ctx.options;\n        const t = (implicitKey && defaultKeyType) || defaultStringType;\n        res = _stringify(t);\n        if (res === null)\n            throw new Error(`Unsupported default string type ${t}`);\n    }\n    return res;\n}\n\nexports.stringifyString = stringifyString;\n","'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar identity = require('../nodes/identity.js');\nvar stringifyComment = require('./stringifyComment.js');\nvar stringifyString = require('./stringifyString.js');\n\nfunction createStringifyContext(doc, options) {\n    const opt = Object.assign({\n        blockQuote: true,\n        commentString: stringifyComment.stringifyComment,\n        defaultKeyType: null,\n        defaultStringType: 'PLAIN',\n        directives: null,\n        doubleQuotedAsJSON: false,\n        doubleQuotedMinMultiLineLength: 40,\n        falseStr: 'false',\n        flowCollectionPadding: true,\n        indentSeq: true,\n        lineWidth: 80,\n        minContentWidth: 20,\n        nullStr: 'null',\n        simpleKeys: false,\n        singleQuote: null,\n        trailingComma: false,\n        trueStr: 'true',\n        verifyAliasOrder: true\n    }, doc.schema.toStringOptions, options);\n    let inFlow;\n    switch (opt.collectionStyle) {\n        case 'block':\n            inFlow = false;\n            break;\n        case 'flow':\n            inFlow = true;\n            break;\n        default:\n            inFlow = null;\n    }\n    return {\n        anchors: new Set(),\n        doc,\n        flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',\n        indent: '',\n        indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : '  ',\n        inFlow,\n        options: opt\n    };\n}\nfunction getTagObject(tags, item) {\n    if (item.tag) {\n        const match = tags.filter(t => t.tag === item.tag);\n        if (match.length > 0)\n            return match.find(t => t.format === item.format) ?? match[0];\n    }\n    let tagObj = undefined;\n    let obj;\n    if (identity.isScalar(item)) {\n        obj = item.value;\n        let match = tags.filter(t => t.identify?.(obj));\n        if (match.length > 1) {\n            const testMatch = match.filter(t => t.test);\n            if (testMatch.length > 0)\n                match = testMatch;\n        }\n        tagObj =\n            match.find(t => t.format === item.format) ?? match.find(t => !t.format);\n    }\n    else {\n        obj = item;\n        tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n    }\n    if (!tagObj) {\n        const name = obj?.constructor?.name ?? (obj === null ? 'null' : typeof obj);\n        throw new Error(`Tag not resolved for ${name} value`);\n    }\n    return tagObj;\n}\n// needs to be called before value stringifier to allow for circular anchor refs\nfunction stringifyProps(node, tagObj, { anchors: anchors$1, doc }) {\n    if (!doc.directives)\n        return '';\n    const props = [];\n    const anchor = (identity.isScalar(node) || identity.isCollection(node)) && node.anchor;\n    if (anchor && anchors.anchorIsValid(anchor)) {\n        anchors$1.add(anchor);\n        props.push(`&${anchor}`);\n    }\n    const tag = node.tag ?? (tagObj.default ? null : tagObj.tag);\n    if (tag)\n        props.push(doc.directives.tagString(tag));\n    return props.join(' ');\n}\nfunction stringify(item, ctx, onComment, onChompKeep) {\n    if (identity.isPair(item))\n        return item.toString(ctx, onComment, onChompKeep);\n    if (identity.isAlias(item)) {\n        if (ctx.doc.directives)\n            return item.toString(ctx);\n        if (ctx.resolvedAliases?.has(item)) {\n            throw new TypeError(`Cannot stringify circular structure without alias nodes`);\n        }\n        else {\n            if (ctx.resolvedAliases)\n                ctx.resolvedAliases.add(item);\n            else\n                ctx.resolvedAliases = new Set([item]);\n            item = item.resolve(ctx.doc);\n        }\n    }\n    let tagObj = undefined;\n    const node = identity.isNode(item)\n        ? item\n        : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });\n    tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));\n    const props = stringifyProps(node, tagObj, ctx);\n    if (props.length > 0)\n        ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;\n    const str = typeof tagObj.stringify === 'function'\n        ? tagObj.stringify(node, ctx, onComment, onChompKeep)\n        : identity.isScalar(node)\n            ? stringifyString.stringifyString(node, ctx, onComment, onChompKeep)\n            : node.toString(ctx, onComment, onChompKeep);\n    if (!props)\n        return str;\n    return identity.isScalar(node) || str[0] === '{' || str[0] === '['\n        ? `${props} ${str}`\n        : `${props}\\n${ctx.indent}${str}`;\n}\n\nexports.createStringifyContext = createStringifyContext;\nexports.stringify = stringify;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyPair({ key, value }, ctx, onComment, onChompKeep) {\n    const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;\n    let keyComment = (identity.isNode(key) && key.comment) || null;\n    if (simpleKeys) {\n        if (keyComment) {\n            throw new Error('With simple keys, key nodes cannot have comments');\n        }\n        if (identity.isCollection(key) || (!identity.isNode(key) && typeof key === 'object')) {\n            const msg = 'With simple keys, collection cannot be used as a key value';\n            throw new Error(msg);\n        }\n    }\n    let explicitKey = !simpleKeys &&\n        (!key ||\n            (keyComment && value == null && !ctx.inFlow) ||\n            identity.isCollection(key) ||\n            (identity.isScalar(key)\n                ? key.type === Scalar.Scalar.BLOCK_FOLDED || key.type === Scalar.Scalar.BLOCK_LITERAL\n                : typeof key === 'object'));\n    ctx = Object.assign({}, ctx, {\n        allNullValues: false,\n        implicitKey: !explicitKey && (simpleKeys || !allNullValues),\n        indent: indent + indentStep\n    });\n    let keyCommentDone = false;\n    let chompKeep = false;\n    let str = stringify.stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));\n    if (!explicitKey && !ctx.inFlow && str.length > 1024) {\n        if (simpleKeys)\n            throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n        explicitKey = true;\n    }\n    if (ctx.inFlow) {\n        if (allNullValues || value == null) {\n            if (keyCommentDone && onComment)\n                onComment();\n            return str === '' ? '?' : explicitKey ? `? ${str}` : str;\n        }\n    }\n    else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {\n        str = `? ${str}`;\n        if (keyComment && !keyCommentDone) {\n            str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n        }\n        else if (chompKeep && onChompKeep)\n            onChompKeep();\n        return str;\n    }\n    if (keyCommentDone)\n        keyComment = null;\n    if (explicitKey) {\n        if (keyComment)\n            str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n        str = `? ${str}\\n${indent}:`;\n    }\n    else {\n        str = `${str}:`;\n        if (keyComment)\n            str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n    }\n    let vsb, vcb, valueComment;\n    if (identity.isNode(value)) {\n        vsb = !!value.spaceBefore;\n        vcb = value.commentBefore;\n        valueComment = value.comment;\n    }\n    else {\n        vsb = false;\n        vcb = null;\n        valueComment = null;\n        if (value && typeof value === 'object')\n            value = doc.createNode(value);\n    }\n    ctx.implicitKey = false;\n    if (!explicitKey && !keyComment && identity.isScalar(value))\n        ctx.indentAtStart = str.length + 1;\n    chompKeep = false;\n    if (!indentSeq &&\n        indentStep.length >= 2 &&\n        !ctx.inFlow &&\n        !explicitKey &&\n        identity.isSeq(value) &&\n        !value.flow &&\n        !value.tag &&\n        !value.anchor) {\n        // If indentSeq === false, consider '- ' as part of indentation where possible\n        ctx.indent = ctx.indent.substring(2);\n    }\n    let valueCommentDone = false;\n    const valueStr = stringify.stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));\n    let ws = ' ';\n    if (keyComment || vsb || vcb) {\n        ws = vsb ? '\\n' : '';\n        if (vcb) {\n            const cs = commentString(vcb);\n            ws += `\\n${stringifyComment.indentComment(cs, ctx.indent)}`;\n        }\n        if (valueStr === '' && !ctx.inFlow) {\n            if (ws === '\\n' && valueComment)\n                ws = '\\n\\n';\n        }\n        else {\n            ws += `\\n${ctx.indent}`;\n        }\n    }\n    else if (!explicitKey && identity.isCollection(value)) {\n        const vs0 = valueStr[0];\n        const nl0 = valueStr.indexOf('\\n');\n        const hasNewline = nl0 !== -1;\n        const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;\n        if (hasNewline || !flow) {\n            let hasPropsLine = false;\n            if (hasNewline && (vs0 === '&' || vs0 === '!')) {\n                let sp0 = valueStr.indexOf(' ');\n                if (vs0 === '&' &&\n                    sp0 !== -1 &&\n                    sp0 < nl0 &&\n                    valueStr[sp0 + 1] === '!') {\n                    sp0 = valueStr.indexOf(' ', sp0 + 1);\n                }\n                if (sp0 === -1 || nl0 < sp0)\n                    hasPropsLine = true;\n            }\n            if (!hasPropsLine)\n                ws = `\\n${ctx.indent}`;\n        }\n    }\n    else if (valueStr === '' || valueStr[0] === '\\n') {\n        ws = '';\n    }\n    str += ws + valueStr;\n    if (ctx.inFlow) {\n        if (valueCommentDone && onComment)\n            onComment();\n    }\n    else if (valueComment && !valueCommentDone) {\n        str += stringifyComment.lineComment(str, ctx.indent, commentString(valueComment));\n    }\n    else if (chompKeep && onChompKeep) {\n        onChompKeep();\n    }\n    return str;\n}\n\nexports.stringifyPair = stringifyPair;\n","'use strict';\n\nvar node_process = require('process');\n\nfunction debug(logLevel, ...messages) {\n    if (logLevel === 'debug')\n        console.log(...messages);\n}\nfunction warn(logLevel, warning) {\n    if (logLevel === 'debug' || logLevel === 'warn') {\n        if (typeof node_process.emitWarning === 'function')\n            node_process.emitWarning(warning);\n        else\n            console.warn(warning);\n    }\n}\n\nexports.debug = debug;\nexports.warn = warn;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Scalar = require('../../nodes/Scalar.js');\n\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nconst MERGE_KEY = '<<';\nconst merge = {\n    identify: value => value === MERGE_KEY ||\n        (typeof value === 'symbol' && value.description === MERGE_KEY),\n    default: 'key',\n    tag: 'tag:yaml.org,2002:merge',\n    test: /^<<$/,\n    resolve: () => Object.assign(new Scalar.Scalar(Symbol(MERGE_KEY)), {\n        addToJSMap: addMergeToJSMap\n    }),\n    stringify: () => MERGE_KEY\n};\nconst isMergeKey = (ctx, key) => (merge.identify(key) ||\n    (identity.isScalar(key) &&\n        (!key.type || key.type === Scalar.Scalar.PLAIN) &&\n        merge.identify(key.value))) &&\n    ctx?.doc.schema.tags.some(tag => tag.tag === merge.tag && tag.default);\nfunction addMergeToJSMap(ctx, map, value) {\n    const source = resolveAliasValue(ctx, value);\n    if (identity.isSeq(source))\n        for (const it of source.items)\n            mergeValue(ctx, map, it);\n    else if (Array.isArray(source))\n        for (const it of source)\n            mergeValue(ctx, map, it);\n    else\n        mergeValue(ctx, map, source);\n}\nfunction mergeValue(ctx, map, value) {\n    const source = resolveAliasValue(ctx, value);\n    if (!identity.isMap(source))\n        throw new Error('Merge sources must be maps or map aliases');\n    const srcMap = source.toJSON(null, ctx, Map);\n    for (const [key, value] of srcMap) {\n        if (map instanceof Map) {\n            if (!map.has(key))\n                map.set(key, value);\n        }\n        else if (map instanceof Set) {\n            map.add(key);\n        }\n        else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n            Object.defineProperty(map, key, {\n                value,\n                writable: true,\n                enumerable: true,\n                configurable: true\n            });\n        }\n    }\n    return map;\n}\nfunction resolveAliasValue(ctx, value) {\n    return ctx && identity.isAlias(value) ? value.resolve(ctx.doc, ctx) : value;\n}\n\nexports.addMergeToJSMap = addMergeToJSMap;\nexports.isMergeKey = isMergeKey;\nexports.merge = merge;\n","'use strict';\n\nvar log = require('../log.js');\nvar merge = require('../schema/yaml-1.1/merge.js');\nvar stringify = require('../stringify/stringify.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nfunction addPairToJSMap(ctx, map, { key, value }) {\n    if (identity.isNode(key) && key.addToJSMap)\n        key.addToJSMap(ctx, map, value);\n    // TODO: Should drop this special case for bare << handling\n    else if (merge.isMergeKey(ctx, key))\n        merge.addMergeToJSMap(ctx, map, value);\n    else {\n        const jsKey = toJS.toJS(key, '', ctx);\n        if (map instanceof Map) {\n            map.set(jsKey, toJS.toJS(value, jsKey, ctx));\n        }\n        else if (map instanceof Set) {\n            map.add(jsKey);\n        }\n        else {\n            const stringKey = stringifyKey(key, jsKey, ctx);\n            const jsValue = toJS.toJS(value, stringKey, ctx);\n            if (stringKey in map)\n                Object.defineProperty(map, stringKey, {\n                    value: jsValue,\n                    writable: true,\n                    enumerable: true,\n                    configurable: true\n                });\n            else\n                map[stringKey] = jsValue;\n        }\n    }\n    return map;\n}\nfunction stringifyKey(key, jsKey, ctx) {\n    if (jsKey === null)\n        return '';\n    // eslint-disable-next-line @typescript-eslint/no-base-to-string\n    if (typeof jsKey !== 'object')\n        return String(jsKey);\n    if (identity.isNode(key) && ctx?.doc) {\n        const strCtx = stringify.createStringifyContext(ctx.doc, {});\n        strCtx.anchors = new Set();\n        for (const node of ctx.anchors.keys())\n            strCtx.anchors.add(node.anchor);\n        strCtx.inFlow = true;\n        strCtx.inStringifyKey = true;\n        const strKey = key.toString(strCtx);\n        if (!ctx.mapKeyWarned) {\n            let jsonStr = JSON.stringify(strKey);\n            if (jsonStr.length > 40)\n                jsonStr = jsonStr.substring(0, 36) + '...\"';\n            log.warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);\n            ctx.mapKeyWarned = true;\n        }\n        return strKey;\n    }\n    return JSON.stringify(jsKey);\n}\n\nexports.addPairToJSMap = addPairToJSMap;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar stringifyPair = require('../stringify/stringifyPair.js');\nvar addPairToJSMap = require('./addPairToJSMap.js');\nvar identity = require('./identity.js');\n\nfunction createPair(key, value, ctx) {\n    const k = createNode.createNode(key, undefined, ctx);\n    const v = createNode.createNode(value, undefined, ctx);\n    return new Pair(k, v);\n}\nclass Pair {\n    constructor(key, value = null) {\n        Object.defineProperty(this, identity.NODE_TYPE, { value: identity.PAIR });\n        this.key = key;\n        this.value = value;\n    }\n    clone(schema) {\n        let { key, value } = this;\n        if (identity.isNode(key))\n            key = key.clone(schema);\n        if (identity.isNode(value))\n            value = value.clone(schema);\n        return new Pair(key, value);\n    }\n    toJSON(_, ctx) {\n        const pair = ctx?.mapAsMap ? new Map() : {};\n        return addPairToJSMap.addPairToJSMap(ctx, pair, this);\n    }\n    toString(ctx, onComment, onChompKeep) {\n        return ctx?.doc\n            ? stringifyPair.stringifyPair(this, ctx, onComment, onChompKeep)\n            : JSON.stringify(this);\n    }\n}\n\nexports.Pair = Pair;\nexports.createPair = createPair;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyCollection(collection, ctx, options) {\n    const flow = ctx.inFlow ?? collection.flow;\n    const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;\n    return stringify(collection, ctx, options);\n}\nfunction stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {\n    const { indent, options: { commentString } } = ctx;\n    const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });\n    let chompKeep = false; // flag for the preceding node's status\n    const lines = [];\n    for (let i = 0; i < items.length; ++i) {\n        const item = items[i];\n        let comment = null;\n        if (identity.isNode(item)) {\n            if (!chompKeep && item.spaceBefore)\n                lines.push('');\n            addCommentBefore(ctx, lines, item.commentBefore, chompKeep);\n            if (item.comment)\n                comment = item.comment;\n        }\n        else if (identity.isPair(item)) {\n            const ik = identity.isNode(item.key) ? item.key : null;\n            if (ik) {\n                if (!chompKeep && ik.spaceBefore)\n                    lines.push('');\n                addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);\n            }\n        }\n        chompKeep = false;\n        let str = stringify.stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));\n        if (comment)\n            str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n        if (chompKeep && comment)\n            chompKeep = false;\n        lines.push(blockItemPrefix + str);\n    }\n    let str;\n    if (lines.length === 0) {\n        str = flowChars.start + flowChars.end;\n    }\n    else {\n        str = lines[0];\n        for (let i = 1; i < lines.length; ++i) {\n            const line = lines[i];\n            str += line ? `\\n${indent}${line}` : '\\n';\n        }\n    }\n    if (comment) {\n        str += '\\n' + stringifyComment.indentComment(commentString(comment), indent);\n        if (onComment)\n            onComment();\n    }\n    else if (chompKeep && onChompKeep)\n        onChompKeep();\n    return str;\n}\nfunction stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {\n    const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;\n    itemIndent += indentStep;\n    const itemCtx = Object.assign({}, ctx, {\n        indent: itemIndent,\n        inFlow: true,\n        type: null\n    });\n    let reqNewline = false;\n    let linesAtValue = 0;\n    const lines = [];\n    for (let i = 0; i < items.length; ++i) {\n        const item = items[i];\n        let comment = null;\n        if (identity.isNode(item)) {\n            if (item.spaceBefore)\n                lines.push('');\n            addCommentBefore(ctx, lines, item.commentBefore, false);\n            if (item.comment)\n                comment = item.comment;\n        }\n        else if (identity.isPair(item)) {\n            const ik = identity.isNode(item.key) ? item.key : null;\n            if (ik) {\n                if (ik.spaceBefore)\n                    lines.push('');\n                addCommentBefore(ctx, lines, ik.commentBefore, false);\n                if (ik.comment)\n                    reqNewline = true;\n            }\n            const iv = identity.isNode(item.value) ? item.value : null;\n            if (iv) {\n                if (iv.comment)\n                    comment = iv.comment;\n                if (iv.commentBefore)\n                    reqNewline = true;\n            }\n            else if (item.value == null && ik?.comment) {\n                comment = ik.comment;\n            }\n        }\n        if (comment)\n            reqNewline = true;\n        let str = stringify.stringify(item, itemCtx, () => (comment = null));\n        reqNewline || (reqNewline = lines.length > linesAtValue || str.includes('\\n'));\n        if (i < items.length - 1) {\n            str += ',';\n        }\n        else if (ctx.options.trailingComma) {\n            if (ctx.options.lineWidth > 0) {\n                reqNewline || (reqNewline = lines.reduce((sum, line) => sum + line.length + 2, 2) +\n                    (str.length + 2) >\n                    ctx.options.lineWidth);\n            }\n            if (reqNewline) {\n                str += ',';\n            }\n        }\n        if (comment)\n            str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n        lines.push(str);\n        linesAtValue = lines.length;\n    }\n    const { start, end } = flowChars;\n    if (lines.length === 0) {\n        return start + end;\n    }\n    else {\n        if (!reqNewline) {\n            const len = lines.reduce((sum, line) => sum + line.length + 2, 2);\n            reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;\n        }\n        if (reqNewline) {\n            let str = start;\n            for (const line of lines)\n                str += line ? `\\n${indentStep}${indent}${line}` : '\\n';\n            return `${str}\\n${indent}${end}`;\n        }\n        else {\n            return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;\n        }\n    }\n}\nfunction addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {\n    if (comment && chompKeep)\n        comment = comment.replace(/^\\n+/, '');\n    if (comment) {\n        const ic = stringifyComment.indentComment(commentString(comment), indent);\n        lines.push(ic.trimStart()); // Avoid double indent on first line\n    }\n}\n\nexports.stringifyCollection = stringifyCollection;\n","'use strict';\n\nvar stringifyCollection = require('../stringify/stringifyCollection.js');\nvar addPairToJSMap = require('./addPairToJSMap.js');\nvar Collection = require('./Collection.js');\nvar identity = require('./identity.js');\nvar Pair = require('./Pair.js');\nvar Scalar = require('./Scalar.js');\n\nfunction findPair(items, key) {\n    const k = identity.isScalar(key) ? key.value : key;\n    for (const it of items) {\n        if (identity.isPair(it)) {\n            if (it.key === key || it.key === k)\n                return it;\n            if (identity.isScalar(it.key) && it.key.value === k)\n                return it;\n        }\n    }\n    return undefined;\n}\nclass YAMLMap extends Collection.Collection {\n    static get tagName() {\n        return 'tag:yaml.org,2002:map';\n    }\n    constructor(schema) {\n        super(identity.MAP, schema);\n        this.items = [];\n    }\n    /**\n     * A generic collection parsing method that can be extended\n     * to other node classes that inherit from YAMLMap\n     */\n    static from(schema, obj, ctx) {\n        const { keepUndefined, replacer } = ctx;\n        const map = new this(schema);\n        const add = (key, value) => {\n            if (typeof replacer === 'function')\n                value = replacer.call(obj, key, value);\n            else if (Array.isArray(replacer) && !replacer.includes(key))\n                return;\n            if (value !== undefined || keepUndefined)\n                map.items.push(Pair.createPair(key, value, ctx));\n        };\n        if (obj instanceof Map) {\n            for (const [key, value] of obj)\n                add(key, value);\n        }\n        else if (obj && typeof obj === 'object') {\n            for (const key of Object.keys(obj))\n                add(key, obj[key]);\n        }\n        if (typeof schema.sortMapEntries === 'function') {\n            map.items.sort(schema.sortMapEntries);\n        }\n        return map;\n    }\n    /**\n     * Adds a value to the collection.\n     *\n     * @param overwrite - If not set `true`, using a key that is already in the\n     *   collection will throw. Otherwise, overwrites the previous value.\n     */\n    add(pair, overwrite) {\n        let _pair;\n        if (identity.isPair(pair))\n            _pair = pair;\n        else if (!pair || typeof pair !== 'object' || !('key' in pair)) {\n            // In TypeScript, this never happens.\n            _pair = new Pair.Pair(pair, pair?.value);\n        }\n        else\n            _pair = new Pair.Pair(pair.key, pair.value);\n        const prev = findPair(this.items, _pair.key);\n        const sortEntries = this.schema?.sortMapEntries;\n        if (prev) {\n            if (!overwrite)\n                throw new Error(`Key ${_pair.key} already set`);\n            // For scalars, keep the old node & its comments and anchors\n            if (identity.isScalar(prev.value) && Scalar.isScalarValue(_pair.value))\n                prev.value.value = _pair.value;\n            else\n                prev.value = _pair.value;\n        }\n        else if (sortEntries) {\n            const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);\n            if (i === -1)\n                this.items.push(_pair);\n            else\n                this.items.splice(i, 0, _pair);\n        }\n        else {\n            this.items.push(_pair);\n        }\n    }\n    delete(key) {\n        const it = findPair(this.items, key);\n        if (!it)\n            return false;\n        const del = this.items.splice(this.items.indexOf(it), 1);\n        return del.length > 0;\n    }\n    get(key, keepScalar) {\n        const it = findPair(this.items, key);\n        const node = it?.value;\n        return (!keepScalar && identity.isScalar(node) ? node.value : node) ?? undefined;\n    }\n    has(key) {\n        return !!findPair(this.items, key);\n    }\n    set(key, value) {\n        this.add(new Pair.Pair(key, value), true);\n    }\n    /**\n     * @param ctx - Conversion context, originally set in Document#toJS()\n     * @param {Class} Type - If set, forces the returned collection type\n     * @returns Instance of Type, Map, or Object\n     */\n    toJSON(_, ctx, Type) {\n        const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {};\n        if (ctx?.onCreate)\n            ctx.onCreate(map);\n        for (const item of this.items)\n            addPairToJSMap.addPairToJSMap(ctx, map, item);\n        return map;\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        for (const item of this.items) {\n            if (!identity.isPair(item))\n                throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n        }\n        if (!ctx.allNullValues && this.hasAllNullValues(false))\n            ctx = Object.assign({}, ctx, { allNullValues: true });\n        return stringifyCollection.stringifyCollection(this, ctx, {\n            blockItemPrefix: '',\n            flowChars: { start: '{', end: '}' },\n            itemIndent: ctx.indent || '',\n            onChompKeep,\n            onComment\n        });\n    }\n}\n\nexports.YAMLMap = YAMLMap;\nexports.findPair = findPair;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\n\nconst map = {\n    collection: 'map',\n    default: true,\n    nodeClass: YAMLMap.YAMLMap,\n    tag: 'tag:yaml.org,2002:map',\n    resolve(map, onError) {\n        if (!identity.isMap(map))\n            onError('Expected a mapping for this tag');\n        return map;\n    },\n    createNode: (schema, obj, ctx) => YAMLMap.YAMLMap.from(schema, obj, ctx)\n};\n\nexports.map = map;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar stringifyCollection = require('../stringify/stringifyCollection.js');\nvar Collection = require('./Collection.js');\nvar identity = require('./identity.js');\nvar Scalar = require('./Scalar.js');\nvar toJS = require('./toJS.js');\n\nclass YAMLSeq extends Collection.Collection {\n    static get tagName() {\n        return 'tag:yaml.org,2002:seq';\n    }\n    constructor(schema) {\n        super(identity.SEQ, schema);\n        this.items = [];\n    }\n    add(value) {\n        this.items.push(value);\n    }\n    /**\n     * Removes a value from the collection.\n     *\n     * `key` must contain a representation of an integer for this to succeed.\n     * It may be wrapped in a `Scalar`.\n     *\n     * @returns `true` if the item was found and removed.\n     */\n    delete(key) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            return false;\n        const del = this.items.splice(idx, 1);\n        return del.length > 0;\n    }\n    get(key, keepScalar) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            return undefined;\n        const it = this.items[idx];\n        return !keepScalar && identity.isScalar(it) ? it.value : it;\n    }\n    /**\n     * Checks if the collection includes a value with the key `key`.\n     *\n     * `key` must contain a representation of an integer for this to succeed.\n     * It may be wrapped in a `Scalar`.\n     */\n    has(key) {\n        const idx = asItemIndex(key);\n        return typeof idx === 'number' && idx < this.items.length;\n    }\n    /**\n     * Sets a value in this collection. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     *\n     * If `key` does not contain a representation of an integer, this will throw.\n     * It may be wrapped in a `Scalar`.\n     */\n    set(key, value) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            throw new Error(`Expected a valid index, not ${key}.`);\n        const prev = this.items[idx];\n        if (identity.isScalar(prev) && Scalar.isScalarValue(value))\n            prev.value = value;\n        else\n            this.items[idx] = value;\n    }\n    toJSON(_, ctx) {\n        const seq = [];\n        if (ctx?.onCreate)\n            ctx.onCreate(seq);\n        let i = 0;\n        for (const item of this.items)\n            seq.push(toJS.toJS(item, String(i++), ctx));\n        return seq;\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        return stringifyCollection.stringifyCollection(this, ctx, {\n            blockItemPrefix: '- ',\n            flowChars: { start: '[', end: ']' },\n            itemIndent: (ctx.indent || '') + '  ',\n            onChompKeep,\n            onComment\n        });\n    }\n    static from(schema, obj, ctx) {\n        const { replacer } = ctx;\n        const seq = new this(schema);\n        if (obj && Symbol.iterator in Object(obj)) {\n            let i = 0;\n            for (let it of obj) {\n                if (typeof replacer === 'function') {\n                    const key = obj instanceof Set ? it : String(i++);\n                    it = replacer.call(obj, key, it);\n                }\n                seq.items.push(createNode.createNode(it, undefined, ctx));\n            }\n        }\n        return seq;\n    }\n}\nfunction asItemIndex(key) {\n    let idx = identity.isScalar(key) ? key.value : key;\n    if (idx && typeof idx === 'string')\n        idx = Number(idx);\n    return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0\n        ? idx\n        : null;\n}\n\nexports.YAMLSeq = YAMLSeq;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\n\nconst seq = {\n    collection: 'seq',\n    default: true,\n    nodeClass: YAMLSeq.YAMLSeq,\n    tag: 'tag:yaml.org,2002:seq',\n    resolve(seq, onError) {\n        if (!identity.isSeq(seq))\n            onError('Expected a sequence for this tag');\n        return seq;\n    },\n    createNode: (schema, obj, ctx) => YAMLSeq.YAMLSeq.from(schema, obj, ctx)\n};\n\nexports.seq = seq;\n","'use strict';\n\nvar stringifyString = require('../../stringify/stringifyString.js');\n\nconst string = {\n    identify: value => typeof value === 'string',\n    default: true,\n    tag: 'tag:yaml.org,2002:str',\n    resolve: str => str,\n    stringify(item, ctx, onComment, onChompKeep) {\n        ctx = Object.assign({ actualString: true }, ctx);\n        return stringifyString.stringifyString(item, ctx, onComment, onChompKeep);\n    }\n};\n\nexports.string = string;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst nullTag = {\n    identify: value => value == null,\n    createNode: () => new Scalar.Scalar(null),\n    default: true,\n    tag: 'tag:yaml.org,2002:null',\n    test: /^(?:~|[Nn]ull|NULL)?$/,\n    resolve: () => new Scalar.Scalar(null),\n    stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)\n        ? source\n        : ctx.options.nullStr\n};\n\nexports.nullTag = nullTag;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst boolTag = {\n    identify: value => typeof value === 'boolean',\n    default: true,\n    tag: 'tag:yaml.org,2002:bool',\n    test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n    resolve: str => new Scalar.Scalar(str[0] === 't' || str[0] === 'T'),\n    stringify({ source, value }, ctx) {\n        if (source && boolTag.test.test(source)) {\n            const sv = source[0] === 't' || source[0] === 'T';\n            if (value === sv)\n                return source;\n        }\n        return value ? ctx.options.trueStr : ctx.options.falseStr;\n    }\n};\n\nexports.boolTag = boolTag;\n","'use strict';\n\nfunction stringifyNumber({ format, minFractionDigits, tag, value }) {\n    if (typeof value === 'bigint')\n        return String(value);\n    const num = typeof value === 'number' ? value : Number(value);\n    if (!isFinite(num))\n        return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n    let n = Object.is(value, -0) ? '-0' : JSON.stringify(value);\n    if (!format &&\n        minFractionDigits &&\n        (!tag || tag === 'tag:yaml.org,2002:float') &&\n        /^-?\\d/.test(n) &&\n        !n.includes('e')) {\n        let i = n.indexOf('.');\n        if (i < 0) {\n            i = n.length;\n            n += '.';\n        }\n        let d = minFractionDigits - (n.length - i - 1);\n        while (d-- > 0)\n            n += '0';\n    }\n    return n;\n}\n\nexports.stringifyNumber = stringifyNumber;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst floatNaN = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n    resolve: str => str.slice(-3).toLowerCase() === 'nan'\n        ? NaN\n        : str[0] === '-'\n            ? Number.NEGATIVE_INFINITY\n            : Number.POSITIVE_INFINITY,\n    stringify: stringifyNumber.stringifyNumber\n};\nconst floatExp = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    format: 'EXP',\n    test: /^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,\n    resolve: str => parseFloat(str),\n    stringify(node) {\n        const num = Number(node.value);\n        return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);\n    }\n};\nconst float = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,\n    resolve(str) {\n        const node = new Scalar.Scalar(parseFloat(str));\n        const dot = str.indexOf('.');\n        if (dot !== -1 && str[str.length - 1] === '0')\n            node.minFractionDigits = str.length - dot - 1;\n        return node;\n    },\n    stringify: stringifyNumber.stringifyNumber\n};\n\nexports.float = float;\nexports.floatExp = floatExp;\nexports.floatNaN = floatNaN;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nconst intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));\nfunction intStringify(node, radix, prefix) {\n    const { value } = node;\n    if (intIdentify(value) && value >= 0)\n        return prefix + value.toString(radix);\n    return stringifyNumber.stringifyNumber(node);\n}\nconst intOct = {\n    identify: value => intIdentify(value) && value >= 0,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'OCT',\n    test: /^0o[0-7]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),\n    stringify: node => intStringify(node, 8, '0o')\n};\nconst int = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    test: /^[-+]?[0-9]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n    stringify: stringifyNumber.stringifyNumber\n};\nconst intHex = {\n    identify: value => intIdentify(value) && value >= 0,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'HEX',\n    test: /^0x[0-9a-fA-F]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n    stringify: node => intStringify(node, 16, '0x')\n};\n\nexports.int = int;\nexports.intHex = intHex;\nexports.intOct = intOct;\n","'use strict';\n\nvar map = require('../common/map.js');\nvar _null = require('../common/null.js');\nvar seq = require('../common/seq.js');\nvar string = require('../common/string.js');\nvar bool = require('./bool.js');\nvar float = require('./float.js');\nvar int = require('./int.js');\n\nconst schema = [\n    map.map,\n    seq.seq,\n    string.string,\n    _null.nullTag,\n    bool.boolTag,\n    int.intOct,\n    int.int,\n    int.intHex,\n    float.floatNaN,\n    float.floatExp,\n    float.float\n];\n\nexports.schema = schema;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar map = require('../common/map.js');\nvar seq = require('../common/seq.js');\n\nfunction intIdentify(value) {\n    return typeof value === 'bigint' || Number.isInteger(value);\n}\nconst stringifyJSON = ({ value }) => JSON.stringify(value);\nconst jsonScalars = [\n    {\n        identify: value => typeof value === 'string',\n        default: true,\n        tag: 'tag:yaml.org,2002:str',\n        resolve: str => str,\n        stringify: stringifyJSON\n    },\n    {\n        identify: value => value == null,\n        createNode: () => new Scalar.Scalar(null),\n        default: true,\n        tag: 'tag:yaml.org,2002:null',\n        test: /^null$/,\n        resolve: () => null,\n        stringify: stringifyJSON\n    },\n    {\n        identify: value => typeof value === 'boolean',\n        default: true,\n        tag: 'tag:yaml.org,2002:bool',\n        test: /^true$|^false$/,\n        resolve: str => str === 'true',\n        stringify: stringifyJSON\n    },\n    {\n        identify: intIdentify,\n        default: true,\n        tag: 'tag:yaml.org,2002:int',\n        test: /^-?(?:0|[1-9][0-9]*)$/,\n        resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),\n        stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)\n    },\n    {\n        identify: value => typeof value === 'number',\n        default: true,\n        tag: 'tag:yaml.org,2002:float',\n        test: /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,\n        resolve: str => parseFloat(str),\n        stringify: stringifyJSON\n    }\n];\nconst jsonError = {\n    default: true,\n    tag: '',\n    test: /^/,\n    resolve(str, onError) {\n        onError(`Unresolved plain scalar ${JSON.stringify(str)}`);\n        return str;\n    }\n};\nconst schema = [map.map, seq.seq].concat(jsonScalars, jsonError);\n\nexports.schema = schema;\n","'use strict';\n\nvar node_buffer = require('buffer');\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyString = require('../../stringify/stringifyString.js');\n\nconst binary = {\n    identify: value => value instanceof Uint8Array, // Buffer inherits from Uint8Array\n    default: false,\n    tag: 'tag:yaml.org,2002:binary',\n    /**\n     * Returns a Buffer in node and an Uint8Array in browsers\n     *\n     * To use the resulting buffer as an image, you'll want to do something like:\n     *\n     *   const blob = new Blob([buffer], { type: 'image/jpeg' })\n     *   document.querySelector('#photo').src = URL.createObjectURL(blob)\n     */\n    resolve(src, onError) {\n        if (typeof node_buffer.Buffer === 'function') {\n            return node_buffer.Buffer.from(src, 'base64');\n        }\n        else if (typeof atob === 'function') {\n            // On IE 11, atob() can't handle newlines\n            const str = atob(src.replace(/[\\n\\r]/g, ''));\n            const buffer = new Uint8Array(str.length);\n            for (let i = 0; i < str.length; ++i)\n                buffer[i] = str.charCodeAt(i);\n            return buffer;\n        }\n        else {\n            onError('This environment does not support reading binary tags; either Buffer or atob is required');\n            return src;\n        }\n    },\n    stringify({ comment, type, value }, ctx, onComment, onChompKeep) {\n        if (!value)\n            return '';\n        const buf = value; // checked earlier by binary.identify()\n        let str;\n        if (typeof node_buffer.Buffer === 'function') {\n            str =\n                buf instanceof node_buffer.Buffer\n                    ? buf.toString('base64')\n                    : node_buffer.Buffer.from(buf.buffer).toString('base64');\n        }\n        else if (typeof btoa === 'function') {\n            let s = '';\n            for (let i = 0; i < buf.length; ++i)\n                s += String.fromCharCode(buf[i]);\n            str = btoa(s);\n        }\n        else {\n            throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');\n        }\n        type ?? (type = Scalar.Scalar.BLOCK_LITERAL);\n        if (type !== Scalar.Scalar.QUOTE_DOUBLE) {\n            const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);\n            const n = Math.ceil(str.length / lineWidth);\n            const lines = new Array(n);\n            for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {\n                lines[i] = str.substr(o, lineWidth);\n            }\n            str = lines.join(type === Scalar.Scalar.BLOCK_LITERAL ? '\\n' : ' ');\n        }\n        return stringifyString.stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);\n    }\n};\n\nexports.binary = binary;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Pair = require('../../nodes/Pair.js');\nvar Scalar = require('../../nodes/Scalar.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\n\nfunction resolvePairs(seq, onError) {\n    if (identity.isSeq(seq)) {\n        for (let i = 0; i < seq.items.length; ++i) {\n            let item = seq.items[i];\n            if (identity.isPair(item))\n                continue;\n            else if (identity.isMap(item)) {\n                if (item.items.length > 1)\n                    onError('Each pair must have its own sequence indicator');\n                const pair = item.items[0] || new Pair.Pair(new Scalar.Scalar(null));\n                if (item.commentBefore)\n                    pair.key.commentBefore = pair.key.commentBefore\n                        ? `${item.commentBefore}\\n${pair.key.commentBefore}`\n                        : item.commentBefore;\n                if (item.comment) {\n                    const cn = pair.value ?? pair.key;\n                    cn.comment = cn.comment\n                        ? `${item.comment}\\n${cn.comment}`\n                        : item.comment;\n                }\n                item = pair;\n            }\n            seq.items[i] = identity.isPair(item) ? item : new Pair.Pair(item);\n        }\n    }\n    else\n        onError('Expected a sequence for this tag');\n    return seq;\n}\nfunction createPairs(schema, iterable, ctx) {\n    const { replacer } = ctx;\n    const pairs = new YAMLSeq.YAMLSeq(schema);\n    pairs.tag = 'tag:yaml.org,2002:pairs';\n    let i = 0;\n    if (iterable && Symbol.iterator in Object(iterable))\n        for (let it of iterable) {\n            if (typeof replacer === 'function')\n                it = replacer.call(iterable, String(i++), it);\n            let key, value;\n            if (Array.isArray(it)) {\n                if (it.length === 2) {\n                    key = it[0];\n                    value = it[1];\n                }\n                else\n                    throw new TypeError(`Expected [key, value] tuple: ${it}`);\n            }\n            else if (it && it instanceof Object) {\n                const keys = Object.keys(it);\n                if (keys.length === 1) {\n                    key = keys[0];\n                    value = it[key];\n                }\n                else {\n                    throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);\n                }\n            }\n            else {\n                key = it;\n            }\n            pairs.items.push(Pair.createPair(key, value, ctx));\n        }\n    return pairs;\n}\nconst pairs = {\n    collection: 'seq',\n    default: false,\n    tag: 'tag:yaml.org,2002:pairs',\n    resolve: resolvePairs,\n    createNode: createPairs\n};\n\nexports.createPairs = createPairs;\nexports.pairs = pairs;\nexports.resolvePairs = resolvePairs;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar toJS = require('../../nodes/toJS.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\nvar pairs = require('./pairs.js');\n\nclass YAMLOMap extends YAMLSeq.YAMLSeq {\n    constructor() {\n        super();\n        this.add = YAMLMap.YAMLMap.prototype.add.bind(this);\n        this.delete = YAMLMap.YAMLMap.prototype.delete.bind(this);\n        this.get = YAMLMap.YAMLMap.prototype.get.bind(this);\n        this.has = YAMLMap.YAMLMap.prototype.has.bind(this);\n        this.set = YAMLMap.YAMLMap.prototype.set.bind(this);\n        this.tag = YAMLOMap.tag;\n    }\n    /**\n     * If `ctx` is given, the return type is actually `Map<unknown, unknown>`,\n     * but TypeScript won't allow widening the signature of a child method.\n     */\n    toJSON(_, ctx) {\n        if (!ctx)\n            return super.toJSON(_);\n        const map = new Map();\n        if (ctx?.onCreate)\n            ctx.onCreate(map);\n        for (const pair of this.items) {\n            let key, value;\n            if (identity.isPair(pair)) {\n                key = toJS.toJS(pair.key, '', ctx);\n                value = toJS.toJS(pair.value, key, ctx);\n            }\n            else {\n                key = toJS.toJS(pair, '', ctx);\n            }\n            if (map.has(key))\n                throw new Error('Ordered maps must not include duplicate keys');\n            map.set(key, value);\n        }\n        return map;\n    }\n    static from(schema, iterable, ctx) {\n        const pairs$1 = pairs.createPairs(schema, iterable, ctx);\n        const omap = new this();\n        omap.items = pairs$1.items;\n        return omap;\n    }\n}\nYAMLOMap.tag = 'tag:yaml.org,2002:omap';\nconst omap = {\n    collection: 'seq',\n    identify: value => value instanceof Map,\n    nodeClass: YAMLOMap,\n    default: false,\n    tag: 'tag:yaml.org,2002:omap',\n    resolve(seq, onError) {\n        const pairs$1 = pairs.resolvePairs(seq, onError);\n        const seenKeys = [];\n        for (const { key } of pairs$1.items) {\n            if (identity.isScalar(key)) {\n                if (seenKeys.includes(key.value)) {\n                    onError(`Ordered maps must not include duplicate keys: ${key.value}`);\n                }\n                else {\n                    seenKeys.push(key.value);\n                }\n            }\n        }\n        return Object.assign(new YAMLOMap(), pairs$1);\n    },\n    createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx)\n};\n\nexports.YAMLOMap = YAMLOMap;\nexports.omap = omap;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nfunction boolStringify({ value, source }, ctx) {\n    const boolObj = value ? trueTag : falseTag;\n    if (source && boolObj.test.test(source))\n        return source;\n    return value ? ctx.options.trueStr : ctx.options.falseStr;\n}\nconst trueTag = {\n    identify: value => value === true,\n    default: true,\n    tag: 'tag:yaml.org,2002:bool',\n    test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,\n    resolve: () => new Scalar.Scalar(true),\n    stringify: boolStringify\n};\nconst falseTag = {\n    identify: value => value === false,\n    default: true,\n    tag: 'tag:yaml.org,2002:bool',\n    test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,\n    resolve: () => new Scalar.Scalar(false),\n    stringify: boolStringify\n};\n\nexports.falseTag = falseTag;\nexports.trueTag = trueTag;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst floatNaN = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n    resolve: (str) => str.slice(-3).toLowerCase() === 'nan'\n        ? NaN\n        : str[0] === '-'\n            ? Number.NEGATIVE_INFINITY\n            : Number.POSITIVE_INFINITY,\n    stringify: stringifyNumber.stringifyNumber\n};\nconst floatExp = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    format: 'EXP',\n    test: /^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,\n    resolve: (str) => parseFloat(str.replace(/_/g, '')),\n    stringify(node) {\n        const num = Number(node.value);\n        return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);\n    }\n};\nconst float = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,\n    resolve(str) {\n        const node = new Scalar.Scalar(parseFloat(str.replace(/_/g, '')));\n        const dot = str.indexOf('.');\n        if (dot !== -1) {\n            const f = str.substring(dot + 1).replace(/_/g, '');\n            if (f[f.length - 1] === '0')\n                node.minFractionDigits = f.length;\n        }\n        return node;\n    },\n    stringify: stringifyNumber.stringifyNumber\n};\n\nexports.float = float;\nexports.floatExp = floatExp;\nexports.floatNaN = floatNaN;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nfunction intResolve(str, offset, radix, { intAsBigInt }) {\n    const sign = str[0];\n    if (sign === '-' || sign === '+')\n        offset += 1;\n    str = str.substring(offset).replace(/_/g, '');\n    if (intAsBigInt) {\n        switch (radix) {\n            case 2:\n                str = `0b${str}`;\n                break;\n            case 8:\n                str = `0o${str}`;\n                break;\n            case 16:\n                str = `0x${str}`;\n                break;\n        }\n        const n = BigInt(str);\n        return sign === '-' ? BigInt(-1) * n : n;\n    }\n    const n = parseInt(str, radix);\n    return sign === '-' ? -1 * n : n;\n}\nfunction intStringify(node, radix, prefix) {\n    const { value } = node;\n    if (intIdentify(value)) {\n        const str = value.toString(radix);\n        return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;\n    }\n    return stringifyNumber.stringifyNumber(node);\n}\nconst intBin = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'BIN',\n    test: /^[-+]?0b[0-1_]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),\n    stringify: node => intStringify(node, 2, '0b')\n};\nconst intOct = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'OCT',\n    test: /^[-+]?0[0-7_]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),\n    stringify: node => intStringify(node, 8, '0')\n};\nconst int = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    test: /^[-+]?[0-9][0-9_]*$/,\n    resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n    stringify: stringifyNumber.stringifyNumber\n};\nconst intHex = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'HEX',\n    test: /^[-+]?0x[0-9a-fA-F_]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n    stringify: node => intStringify(node, 16, '0x')\n};\n\nexports.int = int;\nexports.intBin = intBin;\nexports.intHex = intHex;\nexports.intOct = intOct;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Pair = require('../../nodes/Pair.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\n\nclass YAMLSet extends YAMLMap.YAMLMap {\n    constructor(schema) {\n        super(schema);\n        this.tag = YAMLSet.tag;\n    }\n    add(key) {\n        let pair;\n        if (identity.isPair(key))\n            pair = key;\n        else if (key &&\n            typeof key === 'object' &&\n            'key' in key &&\n            'value' in key &&\n            key.value === null)\n            pair = new Pair.Pair(key.key, null);\n        else\n            pair = new Pair.Pair(key, null);\n        const prev = YAMLMap.findPair(this.items, pair.key);\n        if (!prev)\n            this.items.push(pair);\n    }\n    /**\n     * If `keepPair` is `true`, returns the Pair matching `key`.\n     * Otherwise, returns the value of that Pair's key.\n     */\n    get(key, keepPair) {\n        const pair = YAMLMap.findPair(this.items, key);\n        return !keepPair && identity.isPair(pair)\n            ? identity.isScalar(pair.key)\n                ? pair.key.value\n                : pair.key\n            : pair;\n    }\n    set(key, value) {\n        if (typeof value !== 'boolean')\n            throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);\n        const prev = YAMLMap.findPair(this.items, key);\n        if (prev && !value) {\n            this.items.splice(this.items.indexOf(prev), 1);\n        }\n        else if (!prev && value) {\n            this.items.push(new Pair.Pair(key));\n        }\n    }\n    toJSON(_, ctx) {\n        return super.toJSON(_, ctx, Set);\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        if (this.hasAllNullValues(true))\n            return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);\n        else\n            throw new Error('Set items must all have null values');\n    }\n    static from(schema, iterable, ctx) {\n        const { replacer } = ctx;\n        const set = new this(schema);\n        if (iterable && Symbol.iterator in Object(iterable))\n            for (let value of iterable) {\n                if (typeof replacer === 'function')\n                    value = replacer.call(iterable, value, value);\n                set.items.push(Pair.createPair(value, null, ctx));\n            }\n        return set;\n    }\n}\nYAMLSet.tag = 'tag:yaml.org,2002:set';\nconst set = {\n    collection: 'map',\n    identify: value => value instanceof Set,\n    nodeClass: YAMLSet,\n    default: false,\n    tag: 'tag:yaml.org,2002:set',\n    createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),\n    resolve(map, onError) {\n        if (identity.isMap(map)) {\n            if (map.hasAllNullValues(true))\n                return Object.assign(new YAMLSet(), map);\n            else\n                onError('Set items must all have null values');\n        }\n        else\n            onError('Expected a mapping for this tag');\n        return map;\n    }\n};\n\nexports.YAMLSet = YAMLSet;\nexports.set = set;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\n/** Internal types handle bigint as number, because TS can't figure it out. */\nfunction parseSexagesimal(str, asBigInt) {\n    const sign = str[0];\n    const parts = sign === '-' || sign === '+' ? str.substring(1) : str;\n    const num = (n) => asBigInt ? BigInt(n) : Number(n);\n    const res = parts\n        .replace(/_/g, '')\n        .split(':')\n        .reduce((res, p) => res * num(60) + num(p), num(0));\n    return (sign === '-' ? num(-1) * res : res);\n}\n/**\n * hhhh:mm:ss.sss\n *\n * Internal types handle bigint as number, because TS can't figure it out.\n */\nfunction stringifySexagesimal(node) {\n    let { value } = node;\n    let num = (n) => n;\n    if (typeof value === 'bigint')\n        num = n => BigInt(n);\n    else if (isNaN(value) || !isFinite(value))\n        return stringifyNumber.stringifyNumber(node);\n    let sign = '';\n    if (value < 0) {\n        sign = '-';\n        value *= num(-1);\n    }\n    const _60 = num(60);\n    const parts = [value % _60]; // seconds, including ms\n    if (value < 60) {\n        parts.unshift(0); // at least one : is required\n    }\n    else {\n        value = (value - parts[0]) / _60;\n        parts.unshift(value % _60); // minutes\n        if (value >= 60) {\n            value = (value - parts[0]) / _60;\n            parts.unshift(value); // hours\n        }\n    }\n    return (sign +\n        parts\n            .map(n => String(n).padStart(2, '0'))\n            .join(':')\n            .replace(/000000\\d*$/, '') // % 60 may introduce error\n    );\n}\nconst intTime = {\n    identify: value => typeof value === 'bigint' || Number.isInteger(value),\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'TIME',\n    test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,\n    resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),\n    stringify: stringifySexagesimal\n};\nconst floatTime = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    format: 'TIME',\n    test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,\n    resolve: str => parseSexagesimal(str, false),\n    stringify: stringifySexagesimal\n};\nconst timestamp = {\n    identify: value => value instanceof Date,\n    default: true,\n    tag: 'tag:yaml.org,2002:timestamp',\n    // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part\n    // may be omitted altogether, resulting in a date format. In such a case, the time part is\n    // assumed to be 00:00:00Z (start of day, UTC).\n    test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd\n        '(?:' + // time is optional\n        '(?:t|T|[ \\\\t]+)' + // t | T | whitespace\n        '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?\n        '(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30\n        ')?$'),\n    resolve(str) {\n        const match = str.match(timestamp.test);\n        if (!match)\n            throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');\n        const [, year, month, day, hour, minute, second] = match.map(Number);\n        const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;\n        let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);\n        const tz = match[8];\n        if (tz && tz !== 'Z') {\n            let d = parseSexagesimal(tz, false);\n            if (Math.abs(d) < 30)\n                d *= 60;\n            date -= 60000 * d;\n        }\n        return new Date(date);\n    },\n    stringify: ({ value }) => value?.toISOString().replace(/(T00:00:00)?\\.000Z$/, '') ?? ''\n};\n\nexports.floatTime = floatTime;\nexports.intTime = intTime;\nexports.timestamp = timestamp;\n","'use strict';\n\nvar map = require('../common/map.js');\nvar _null = require('../common/null.js');\nvar seq = require('../common/seq.js');\nvar string = require('../common/string.js');\nvar binary = require('./binary.js');\nvar bool = require('./bool.js');\nvar float = require('./float.js');\nvar int = require('./int.js');\nvar merge = require('./merge.js');\nvar omap = require('./omap.js');\nvar pairs = require('./pairs.js');\nvar set = require('./set.js');\nvar timestamp = require('./timestamp.js');\n\nconst schema = [\n    map.map,\n    seq.seq,\n    string.string,\n    _null.nullTag,\n    bool.trueTag,\n    bool.falseTag,\n    int.intBin,\n    int.intOct,\n    int.int,\n    int.intHex,\n    float.floatNaN,\n    float.floatExp,\n    float.float,\n    binary.binary,\n    merge.merge,\n    omap.omap,\n    pairs.pairs,\n    set.set,\n    timestamp.intTime,\n    timestamp.floatTime,\n    timestamp.timestamp\n];\n\nexports.schema = schema;\n","'use strict';\n\nvar map = require('./common/map.js');\nvar _null = require('./common/null.js');\nvar seq = require('./common/seq.js');\nvar string = require('./common/string.js');\nvar bool = require('./core/bool.js');\nvar float = require('./core/float.js');\nvar int = require('./core/int.js');\nvar schema = require('./core/schema.js');\nvar schema$1 = require('./json/schema.js');\nvar binary = require('./yaml-1.1/binary.js');\nvar merge = require('./yaml-1.1/merge.js');\nvar omap = require('./yaml-1.1/omap.js');\nvar pairs = require('./yaml-1.1/pairs.js');\nvar schema$2 = require('./yaml-1.1/schema.js');\nvar set = require('./yaml-1.1/set.js');\nvar timestamp = require('./yaml-1.1/timestamp.js');\n\nconst schemas = new Map([\n    ['core', schema.schema],\n    ['failsafe', [map.map, seq.seq, string.string]],\n    ['json', schema$1.schema],\n    ['yaml11', schema$2.schema],\n    ['yaml-1.1', schema$2.schema]\n]);\nconst tagsByName = {\n    binary: binary.binary,\n    bool: bool.boolTag,\n    float: float.float,\n    floatExp: float.floatExp,\n    floatNaN: float.floatNaN,\n    floatTime: timestamp.floatTime,\n    int: int.int,\n    intHex: int.intHex,\n    intOct: int.intOct,\n    intTime: timestamp.intTime,\n    map: map.map,\n    merge: merge.merge,\n    null: _null.nullTag,\n    omap: omap.omap,\n    pairs: pairs.pairs,\n    seq: seq.seq,\n    set: set.set,\n    timestamp: timestamp.timestamp\n};\nconst coreKnownTags = {\n    'tag:yaml.org,2002:binary': binary.binary,\n    'tag:yaml.org,2002:merge': merge.merge,\n    'tag:yaml.org,2002:omap': omap.omap,\n    'tag:yaml.org,2002:pairs': pairs.pairs,\n    'tag:yaml.org,2002:set': set.set,\n    'tag:yaml.org,2002:timestamp': timestamp.timestamp\n};\nfunction getTags(customTags, schemaName, addMergeTag) {\n    const schemaTags = schemas.get(schemaName);\n    if (schemaTags && !customTags) {\n        return addMergeTag && !schemaTags.includes(merge.merge)\n            ? schemaTags.concat(merge.merge)\n            : schemaTags.slice();\n    }\n    let tags = schemaTags;\n    if (!tags) {\n        if (Array.isArray(customTags))\n            tags = [];\n        else {\n            const keys = Array.from(schemas.keys())\n                .filter(key => key !== 'yaml11')\n                .map(key => JSON.stringify(key))\n                .join(', ');\n            throw new Error(`Unknown schema \"${schemaName}\"; use one of ${keys} or define customTags array`);\n        }\n    }\n    if (Array.isArray(customTags)) {\n        for (const tag of customTags)\n            tags = tags.concat(tag);\n    }\n    else if (typeof customTags === 'function') {\n        tags = customTags(tags.slice());\n    }\n    if (addMergeTag)\n        tags = tags.concat(merge.merge);\n    return tags.reduce((tags, tag) => {\n        const tagObj = typeof tag === 'string' ? tagsByName[tag] : tag;\n        if (!tagObj) {\n            const tagName = JSON.stringify(tag);\n            const keys = Object.keys(tagsByName)\n                .map(key => JSON.stringify(key))\n                .join(', ');\n            throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`);\n        }\n        if (!tags.includes(tagObj))\n            tags.push(tagObj);\n        return tags;\n    }, []);\n}\n\nexports.coreKnownTags = coreKnownTags;\nexports.getTags = getTags;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar map = require('./common/map.js');\nvar seq = require('./common/seq.js');\nvar string = require('./common/string.js');\nvar tags = require('./tags.js');\n\nconst sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;\nclass Schema {\n    constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {\n        this.compat = Array.isArray(compat)\n            ? tags.getTags(compat, 'compat')\n            : compat\n                ? tags.getTags(null, compat)\n                : null;\n        this.name = (typeof schema === 'string' && schema) || 'core';\n        this.knownTags = resolveKnownTags ? tags.coreKnownTags : {};\n        this.tags = tags.getTags(customTags, this.name, merge);\n        this.toStringOptions = toStringDefaults ?? null;\n        Object.defineProperty(this, identity.MAP, { value: map.map });\n        Object.defineProperty(this, identity.SCALAR, { value: string.string });\n        Object.defineProperty(this, identity.SEQ, { value: seq.seq });\n        // Used by createMap()\n        this.sortMapEntries =\n            typeof sortMapEntries === 'function'\n                ? sortMapEntries\n                : sortMapEntries === true\n                    ? sortMapEntriesByKey\n                    : null;\n    }\n    clone() {\n        const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));\n        copy.tags = this.tags.slice();\n        return copy;\n    }\n}\n\nexports.Schema = Schema;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyDocument(doc, options) {\n    const lines = [];\n    let hasDirectives = options.directives === true;\n    if (options.directives !== false && doc.directives) {\n        const dir = doc.directives.toString(doc);\n        if (dir) {\n            lines.push(dir);\n            hasDirectives = true;\n        }\n        else if (doc.directives.docStart)\n            hasDirectives = true;\n    }\n    if (hasDirectives)\n        lines.push('---');\n    const ctx = stringify.createStringifyContext(doc, options);\n    const { commentString } = ctx.options;\n    if (doc.commentBefore) {\n        if (lines.length !== 1)\n            lines.unshift('');\n        const cs = commentString(doc.commentBefore);\n        lines.unshift(stringifyComment.indentComment(cs, ''));\n    }\n    let chompKeep = false;\n    let contentComment = null;\n    if (doc.contents) {\n        if (identity.isNode(doc.contents)) {\n            if (doc.contents.spaceBefore && hasDirectives)\n                lines.push('');\n            if (doc.contents.commentBefore) {\n                const cs = commentString(doc.contents.commentBefore);\n                lines.push(stringifyComment.indentComment(cs, ''));\n            }\n            // top-level block scalars need to be indented if followed by a comment\n            ctx.forceBlockIndent = !!doc.comment;\n            contentComment = doc.contents.comment;\n        }\n        const onChompKeep = contentComment ? undefined : () => (chompKeep = true);\n        let body = stringify.stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);\n        if (contentComment)\n            body += stringifyComment.lineComment(body, '', commentString(contentComment));\n        if ((body[0] === '|' || body[0] === '>') &&\n            lines[lines.length - 1] === '---') {\n            // Top-level block scalars with a preceding doc marker ought to use the\n            // same line for their header.\n            lines[lines.length - 1] = `--- ${body}`;\n        }\n        else\n            lines.push(body);\n    }\n    else {\n        lines.push(stringify.stringify(doc.contents, ctx));\n    }\n    if (doc.directives?.docEnd) {\n        if (doc.comment) {\n            const cs = commentString(doc.comment);\n            if (cs.includes('\\n')) {\n                lines.push('...');\n                lines.push(stringifyComment.indentComment(cs, ''));\n            }\n            else {\n                lines.push(`... ${cs}`);\n            }\n        }\n        else {\n            lines.push('...');\n        }\n    }\n    else {\n        let dc = doc.comment;\n        if (dc && chompKeep)\n            dc = dc.replace(/^\\n+/, '');\n        if (dc) {\n            if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')\n                lines.push('');\n            lines.push(stringifyComment.indentComment(commentString(dc), ''));\n        }\n    }\n    return lines.join('\\n') + '\\n';\n}\n\nexports.stringifyDocument = stringifyDocument;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar Collection = require('../nodes/Collection.js');\nvar identity = require('../nodes/identity.js');\nvar Pair = require('../nodes/Pair.js');\nvar toJS = require('../nodes/toJS.js');\nvar Schema = require('../schema/Schema.js');\nvar stringifyDocument = require('../stringify/stringifyDocument.js');\nvar anchors = require('./anchors.js');\nvar applyReviver = require('./applyReviver.js');\nvar createNode = require('./createNode.js');\nvar directives = require('./directives.js');\n\nclass Document {\n    constructor(value, replacer, options) {\n        /** A comment before this Document */\n        this.commentBefore = null;\n        /** A comment immediately after this Document */\n        this.comment = null;\n        /** Errors encountered during parsing. */\n        this.errors = [];\n        /** Warnings encountered during parsing. */\n        this.warnings = [];\n        Object.defineProperty(this, identity.NODE_TYPE, { value: identity.DOC });\n        let _replacer = null;\n        if (typeof replacer === 'function' || Array.isArray(replacer)) {\n            _replacer = replacer;\n        }\n        else if (options === undefined && replacer) {\n            options = replacer;\n            replacer = undefined;\n        }\n        const opt = Object.assign({\n            intAsBigInt: false,\n            keepSourceTokens: false,\n            logLevel: 'warn',\n            prettyErrors: true,\n            strict: true,\n            stringKeys: false,\n            uniqueKeys: true,\n            version: '1.2'\n        }, options);\n        this.options = opt;\n        let { version } = opt;\n        if (options?._directives) {\n            this.directives = options._directives.atDocument();\n            if (this.directives.yaml.explicit)\n                version = this.directives.yaml.version;\n        }\n        else\n            this.directives = new directives.Directives({ version });\n        this.setSchema(version, options);\n        // @ts-expect-error We can't really know that this matches Contents.\n        this.contents =\n            value === undefined ? null : this.createNode(value, _replacer, options);\n    }\n    /**\n     * Create a deep copy of this Document and its contents.\n     *\n     * Custom Node values that inherit from `Object` still refer to their original instances.\n     */\n    clone() {\n        const copy = Object.create(Document.prototype, {\n            [identity.NODE_TYPE]: { value: identity.DOC }\n        });\n        copy.commentBefore = this.commentBefore;\n        copy.comment = this.comment;\n        copy.errors = this.errors.slice();\n        copy.warnings = this.warnings.slice();\n        copy.options = Object.assign({}, this.options);\n        if (this.directives)\n            copy.directives = this.directives.clone();\n        copy.schema = this.schema.clone();\n        // @ts-expect-error We can't really know that this matches Contents.\n        copy.contents = identity.isNode(this.contents)\n            ? this.contents.clone(copy.schema)\n            : this.contents;\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /** Adds a value to the document. */\n    add(value) {\n        if (assertCollection(this.contents))\n            this.contents.add(value);\n    }\n    /** Adds a value to the document. */\n    addIn(path, value) {\n        if (assertCollection(this.contents))\n            this.contents.addIn(path, value);\n    }\n    /**\n     * Create a new `Alias` node, ensuring that the target `node` has the required anchor.\n     *\n     * If `node` already has an anchor, `name` is ignored.\n     * Otherwise, the `node.anchor` value will be set to `name`,\n     * or if an anchor with that name is already present in the document,\n     * `name` will be used as a prefix for a new unique anchor.\n     * If `name` is undefined, the generated anchor will use 'a' as a prefix.\n     */\n    createAlias(node, name) {\n        if (!node.anchor) {\n            const prev = anchors.anchorNames(this);\n            node.anchor =\n                // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n                !name || prev.has(name) ? anchors.findNewAnchor(name || 'a', prev) : name;\n        }\n        return new Alias.Alias(node.anchor);\n    }\n    createNode(value, replacer, options) {\n        let _replacer = undefined;\n        if (typeof replacer === 'function') {\n            value = replacer.call({ '': value }, '', value);\n            _replacer = replacer;\n        }\n        else if (Array.isArray(replacer)) {\n            const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;\n            const asStr = replacer.filter(keyToStr).map(String);\n            if (asStr.length > 0)\n                replacer = replacer.concat(asStr);\n            _replacer = replacer;\n        }\n        else if (options === undefined && replacer) {\n            options = replacer;\n            replacer = undefined;\n        }\n        const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {};\n        const { onAnchor, setAnchors, sourceObjects } = anchors.createNodeAnchors(this, \n        // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n        anchorPrefix || 'a');\n        const ctx = {\n            aliasDuplicateObjects: aliasDuplicateObjects ?? true,\n            keepUndefined: keepUndefined ?? false,\n            onAnchor,\n            onTagObj,\n            replacer: _replacer,\n            schema: this.schema,\n            sourceObjects\n        };\n        const node = createNode.createNode(value, tag, ctx);\n        if (flow && identity.isCollection(node))\n            node.flow = true;\n        setAnchors();\n        return node;\n    }\n    /**\n     * Convert a key and a value into a `Pair` using the current schema,\n     * recursively wrapping all values as `Scalar` or `Collection` nodes.\n     */\n    createPair(key, value, options = {}) {\n        const k = this.createNode(key, null, options);\n        const v = this.createNode(value, null, options);\n        return new Pair.Pair(k, v);\n    }\n    /**\n     * Removes a value from the document.\n     * @returns `true` if the item was found and removed.\n     */\n    delete(key) {\n        return assertCollection(this.contents) ? this.contents.delete(key) : false;\n    }\n    /**\n     * Removes a value from the document.\n     * @returns `true` if the item was found and removed.\n     */\n    deleteIn(path) {\n        if (Collection.isEmptyPath(path)) {\n            if (this.contents == null)\n                return false;\n            // @ts-expect-error Presumed impossible if Strict extends false\n            this.contents = null;\n            return true;\n        }\n        return assertCollection(this.contents)\n            ? this.contents.deleteIn(path)\n            : false;\n    }\n    /**\n     * Returns item at `key`, or `undefined` if not found. By default unwraps\n     * scalar values from their surrounding node; to disable set `keepScalar` to\n     * `true` (collections are always returned intact).\n     */\n    get(key, keepScalar) {\n        return identity.isCollection(this.contents)\n            ? this.contents.get(key, keepScalar)\n            : undefined;\n    }\n    /**\n     * Returns item at `path`, or `undefined` if not found. By default unwraps\n     * scalar values from their surrounding node; to disable set `keepScalar` to\n     * `true` (collections are always returned intact).\n     */\n    getIn(path, keepScalar) {\n        if (Collection.isEmptyPath(path))\n            return !keepScalar && identity.isScalar(this.contents)\n                ? this.contents.value\n                : this.contents;\n        return identity.isCollection(this.contents)\n            ? this.contents.getIn(path, keepScalar)\n            : undefined;\n    }\n    /**\n     * Checks if the document includes a value with the key `key`.\n     */\n    has(key) {\n        return identity.isCollection(this.contents) ? this.contents.has(key) : false;\n    }\n    /**\n     * Checks if the document includes a value at `path`.\n     */\n    hasIn(path) {\n        if (Collection.isEmptyPath(path))\n            return this.contents !== undefined;\n        return identity.isCollection(this.contents) ? this.contents.hasIn(path) : false;\n    }\n    /**\n     * Sets a value in this document. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     */\n    set(key, value) {\n        if (this.contents == null) {\n            // @ts-expect-error We can't really know that this matches Contents.\n            this.contents = Collection.collectionFromPath(this.schema, [key], value);\n        }\n        else if (assertCollection(this.contents)) {\n            this.contents.set(key, value);\n        }\n    }\n    /**\n     * Sets a value in this document. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     */\n    setIn(path, value) {\n        if (Collection.isEmptyPath(path)) {\n            // @ts-expect-error We can't really know that this matches Contents.\n            this.contents = value;\n        }\n        else if (this.contents == null) {\n            // @ts-expect-error We can't really know that this matches Contents.\n            this.contents = Collection.collectionFromPath(this.schema, Array.from(path), value);\n        }\n        else if (assertCollection(this.contents)) {\n            this.contents.setIn(path, value);\n        }\n    }\n    /**\n     * Change the YAML version and schema used by the document.\n     * A `null` version disables support for directives, explicit tags, anchors, and aliases.\n     * It also requires the `schema` option to be given as a `Schema` instance value.\n     *\n     * Overrides all previously set schema options.\n     */\n    setSchema(version, options = {}) {\n        if (typeof version === 'number')\n            version = String(version);\n        let opt;\n        switch (version) {\n            case '1.1':\n                if (this.directives)\n                    this.directives.yaml.version = '1.1';\n                else\n                    this.directives = new directives.Directives({ version: '1.1' });\n                opt = { resolveKnownTags: false, schema: 'yaml-1.1' };\n                break;\n            case '1.2':\n            case 'next':\n                if (this.directives)\n                    this.directives.yaml.version = version;\n                else\n                    this.directives = new directives.Directives({ version });\n                opt = { resolveKnownTags: true, schema: 'core' };\n                break;\n            case null:\n                if (this.directives)\n                    delete this.directives;\n                opt = null;\n                break;\n            default: {\n                const sv = JSON.stringify(version);\n                throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);\n            }\n        }\n        // Not using `instanceof Schema` to allow for duck typing\n        if (options.schema instanceof Object)\n            this.schema = options.schema;\n        else if (opt)\n            this.schema = new Schema.Schema(Object.assign(opt, options));\n        else\n            throw new Error(`With a null YAML version, the { schema: Schema } option is required`);\n    }\n    // json & jsonArg are only used from toJSON()\n    toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n        const ctx = {\n            anchors: new Map(),\n            doc: this,\n            keep: !json,\n            mapAsMap: mapAsMap === true,\n            mapKeyWarned: false,\n            maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n        };\n        const res = toJS.toJS(this.contents, jsonArg ?? '', ctx);\n        if (typeof onAnchor === 'function')\n            for (const { count, res } of ctx.anchors.values())\n                onAnchor(res, count);\n        return typeof reviver === 'function'\n            ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n            : res;\n    }\n    /**\n     * A JSON representation of the document `contents`.\n     *\n     * @param jsonArg Used by `JSON.stringify` to indicate the array index or\n     *   property name.\n     */\n    toJSON(jsonArg, onAnchor) {\n        return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });\n    }\n    /** A YAML representation of the document. */\n    toString(options = {}) {\n        if (this.errors.length > 0)\n            throw new Error('Document with errors cannot be stringified');\n        if ('indent' in options &&\n            (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {\n            const s = JSON.stringify(options.indent);\n            throw new Error(`\"indent\" option must be a positive integer, not ${s}`);\n        }\n        return stringifyDocument.stringifyDocument(this, options);\n    }\n}\nfunction assertCollection(contents) {\n    if (identity.isCollection(contents))\n        return true;\n    throw new Error('Expected a YAML collection as document contents');\n}\n\nexports.Document = Document;\n","'use strict';\n\nclass YAMLError extends Error {\n    constructor(name, pos, code, message) {\n        super();\n        this.name = name;\n        this.code = code;\n        this.message = message;\n        this.pos = pos;\n    }\n}\nclass YAMLParseError extends YAMLError {\n    constructor(pos, code, message) {\n        super('YAMLParseError', pos, code, message);\n    }\n}\nclass YAMLWarning extends YAMLError {\n    constructor(pos, code, message) {\n        super('YAMLWarning', pos, code, message);\n    }\n}\nconst prettifyError = (src, lc) => (error) => {\n    if (error.pos[0] === -1)\n        return;\n    error.linePos = error.pos.map(pos => lc.linePos(pos));\n    const { line, col } = error.linePos[0];\n    error.message += ` at line ${line}, column ${col}`;\n    let ci = col - 1;\n    let lineStr = src\n        .substring(lc.lineStarts[line - 1], lc.lineStarts[line])\n        .replace(/[\\n\\r]+$/, '');\n    // Trim to max 80 chars, keeping col position near the middle\n    if (ci >= 60 && lineStr.length > 80) {\n        const trimStart = Math.min(ci - 39, lineStr.length - 79);\n        lineStr = '…' + lineStr.substring(trimStart);\n        ci -= trimStart - 1;\n    }\n    if (lineStr.length > 80)\n        lineStr = lineStr.substring(0, 79) + '…';\n    // Include previous line in context if pointing at line start\n    if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {\n        // Regexp won't match if start is trimmed\n        let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);\n        if (prev.length > 80)\n            prev = prev.substring(0, 79) + '…\\n';\n        lineStr = prev + lineStr;\n    }\n    if (/[^ ]/.test(lineStr)) {\n        let count = 1;\n        const end = error.linePos[1];\n        if (end?.line === line && end.col > col) {\n            count = Math.max(1, Math.min(end.col - col, 80 - ci));\n        }\n        const pointer = ' '.repeat(ci) + '^'.repeat(count);\n        error.message += `:\\n\\n${lineStr}\\n${pointer}\\n`;\n    }\n};\n\nexports.YAMLError = YAMLError;\nexports.YAMLParseError = YAMLParseError;\nexports.YAMLWarning = YAMLWarning;\nexports.prettifyError = prettifyError;\n","'use strict';\n\nfunction resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {\n    let spaceBefore = false;\n    let atNewline = startOnNewline;\n    let hasSpace = startOnNewline;\n    let comment = '';\n    let commentSep = '';\n    let hasNewline = false;\n    let reqSpace = false;\n    let tab = null;\n    let anchor = null;\n    let tag = null;\n    let newlineAfterProp = null;\n    let comma = null;\n    let found = null;\n    let start = null;\n    for (const token of tokens) {\n        if (reqSpace) {\n            if (token.type !== 'space' &&\n                token.type !== 'newline' &&\n                token.type !== 'comma')\n                onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n            reqSpace = false;\n        }\n        if (tab) {\n            if (atNewline && token.type !== 'comment' && token.type !== 'newline') {\n                onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n            }\n            tab = null;\n        }\n        switch (token.type) {\n            case 'space':\n                // At the doc level, tabs at line start may be parsed\n                // as leading white space rather than indentation.\n                // In a flow collection, only the parser handles indent.\n                if (!flow &&\n                    (indicator !== 'doc-start' || next?.type !== 'flow-collection') &&\n                    token.source.includes('\\t')) {\n                    tab = token;\n                }\n                hasSpace = true;\n                break;\n            case 'comment': {\n                if (!hasSpace)\n                    onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n                const cb = token.source.substring(1) || ' ';\n                if (!comment)\n                    comment = cb;\n                else\n                    comment += commentSep + cb;\n                commentSep = '';\n                atNewline = false;\n                break;\n            }\n            case 'newline':\n                if (atNewline) {\n                    if (comment)\n                        comment += token.source;\n                    else if (!found || indicator !== 'seq-item-ind')\n                        spaceBefore = true;\n                }\n                else\n                    commentSep += token.source;\n                atNewline = true;\n                hasNewline = true;\n                if (anchor || tag)\n                    newlineAfterProp = token;\n                hasSpace = true;\n                break;\n            case 'anchor':\n                if (anchor)\n                    onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor');\n                if (token.source.endsWith(':'))\n                    onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true);\n                anchor = token;\n                start ?? (start = token.offset);\n                atNewline = false;\n                hasSpace = false;\n                reqSpace = true;\n                break;\n            case 'tag': {\n                if (tag)\n                    onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag');\n                tag = token;\n                start ?? (start = token.offset);\n                atNewline = false;\n                hasSpace = false;\n                reqSpace = true;\n                break;\n            }\n            case indicator:\n                // Could here handle preceding comments differently\n                if (anchor || tag)\n                    onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);\n                if (found)\n                    onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow ?? 'collection'}`);\n                found = token;\n                atNewline =\n                    indicator === 'seq-item-ind' || indicator === 'explicit-key-ind';\n                hasSpace = false;\n                break;\n            case 'comma':\n                if (flow) {\n                    if (comma)\n                        onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`);\n                    comma = token;\n                    atNewline = false;\n                    hasSpace = false;\n                    break;\n                }\n            // else fallthrough\n            default:\n                onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`);\n                atNewline = false;\n                hasSpace = false;\n        }\n    }\n    const last = tokens[tokens.length - 1];\n    const end = last ? last.offset + last.source.length : offset;\n    if (reqSpace &&\n        next &&\n        next.type !== 'space' &&\n        next.type !== 'newline' &&\n        next.type !== 'comma' &&\n        (next.type !== 'scalar' || next.source !== '')) {\n        onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n    }\n    if (tab &&\n        ((atNewline && tab.indent <= parentIndent) ||\n            next?.type === 'block-map' ||\n            next?.type === 'block-seq'))\n        onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n    return {\n        comma,\n        found,\n        spaceBefore,\n        comment,\n        hasNewline,\n        anchor,\n        tag,\n        newlineAfterProp,\n        end,\n        start: start ?? end\n    };\n}\n\nexports.resolveProps = resolveProps;\n","'use strict';\n\nfunction containsNewline(key) {\n    if (!key)\n        return null;\n    switch (key.type) {\n        case 'alias':\n        case 'scalar':\n        case 'double-quoted-scalar':\n        case 'single-quoted-scalar':\n            if (key.source.includes('\\n'))\n                return true;\n            if (key.end)\n                for (const st of key.end)\n                    if (st.type === 'newline')\n                        return true;\n            return false;\n        case 'flow-collection':\n            for (const it of key.items) {\n                for (const st of it.start)\n                    if (st.type === 'newline')\n                        return true;\n                if (it.sep)\n                    for (const st of it.sep)\n                        if (st.type === 'newline')\n                            return true;\n                if (containsNewline(it.key) || containsNewline(it.value))\n                    return true;\n            }\n            return false;\n        default:\n            return true;\n    }\n}\n\nexports.containsNewline = containsNewline;\n","'use strict';\n\nvar utilContainsNewline = require('./util-contains-newline.js');\n\nfunction flowIndentCheck(indent, fc, onError) {\n    if (fc?.type === 'flow-collection') {\n        const end = fc.end[0];\n        if (end.indent === indent &&\n            (end.source === ']' || end.source === '}') &&\n            utilContainsNewline.containsNewline(fc)) {\n            const msg = 'Flow end indicator should be more indented than parent';\n            onError(end, 'BAD_INDENT', msg, true);\n        }\n    }\n}\n\nexports.flowIndentCheck = flowIndentCheck;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\n\nfunction mapIncludes(ctx, items, search) {\n    const { uniqueKeys } = ctx.options;\n    if (uniqueKeys === false)\n        return false;\n    const isEqual = typeof uniqueKeys === 'function'\n        ? uniqueKeys\n        : (a, b) => a === b || (identity.isScalar(a) && identity.isScalar(b) && a.value === b.value);\n    return items.some(pair => isEqual(pair.key, search));\n}\n\nexports.mapIncludes = mapIncludes;\n","'use strict';\n\nvar Pair = require('../nodes/Pair.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilContainsNewline = require('./util-contains-newline.js');\nvar utilFlowIndentCheck = require('./util-flow-indent-check.js');\nvar utilMapIncludes = require('./util-map-includes.js');\n\nconst startColMsg = 'All mapping items must start at the same column';\nfunction resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) {\n    const NodeClass = tag?.nodeClass ?? YAMLMap.YAMLMap;\n    const map = new NodeClass(ctx.schema);\n    if (ctx.atRoot)\n        ctx.atRoot = false;\n    let offset = bm.offset;\n    let commentEnd = null;\n    for (const collItem of bm.items) {\n        const { start, key, sep, value } = collItem;\n        // key properties\n        const keyProps = resolveProps.resolveProps(start, {\n            indicator: 'explicit-key-ind',\n            next: key ?? sep?.[0],\n            offset,\n            onError,\n            parentIndent: bm.indent,\n            startOnNewline: true\n        });\n        const implicitKey = !keyProps.found;\n        if (implicitKey) {\n            if (key) {\n                if (key.type === 'block-seq')\n                    onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key');\n                else if ('indent' in key && key.indent !== bm.indent)\n                    onError(offset, 'BAD_INDENT', startColMsg);\n            }\n            if (!keyProps.anchor && !keyProps.tag && !sep) {\n                commentEnd = keyProps.end;\n                if (keyProps.comment) {\n                    if (map.comment)\n                        map.comment += '\\n' + keyProps.comment;\n                    else\n                        map.comment = keyProps.comment;\n                }\n                continue;\n            }\n            if (keyProps.newlineAfterProp || utilContainsNewline.containsNewline(key)) {\n                onError(key ?? start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line');\n            }\n        }\n        else if (keyProps.found?.indent !== bm.indent) {\n            onError(offset, 'BAD_INDENT', startColMsg);\n        }\n        // key value\n        ctx.atKey = true;\n        const keyStart = keyProps.end;\n        const keyNode = key\n            ? composeNode(ctx, key, keyProps, onError)\n            : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);\n        if (ctx.schema.compat)\n            utilFlowIndentCheck.flowIndentCheck(bm.indent, key, onError);\n        ctx.atKey = false;\n        if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))\n            onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n        // value properties\n        const valueProps = resolveProps.resolveProps(sep ?? [], {\n            indicator: 'map-value-ind',\n            next: value,\n            offset: keyNode.range[2],\n            onError,\n            parentIndent: bm.indent,\n            startOnNewline: !key || key.type === 'block-scalar'\n        });\n        offset = valueProps.end;\n        if (valueProps.found) {\n            if (implicitKey) {\n                if (value?.type === 'block-map' && !valueProps.hasNewline)\n                    onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings');\n                if (ctx.options.strict &&\n                    keyProps.start < valueProps.found.offset - 1024)\n                    onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key');\n            }\n            // value value\n            const valueNode = value\n                ? composeNode(ctx, value, valueProps, onError)\n                : composeEmptyNode(ctx, offset, sep, null, valueProps, onError);\n            if (ctx.schema.compat)\n                utilFlowIndentCheck.flowIndentCheck(bm.indent, value, onError);\n            offset = valueNode.range[2];\n            const pair = new Pair.Pair(keyNode, valueNode);\n            if (ctx.options.keepSourceTokens)\n                pair.srcToken = collItem;\n            map.items.push(pair);\n        }\n        else {\n            // key with no value\n            if (implicitKey)\n                onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values');\n            if (valueProps.comment) {\n                if (keyNode.comment)\n                    keyNode.comment += '\\n' + valueProps.comment;\n                else\n                    keyNode.comment = valueProps.comment;\n            }\n            const pair = new Pair.Pair(keyNode);\n            if (ctx.options.keepSourceTokens)\n                pair.srcToken = collItem;\n            map.items.push(pair);\n        }\n    }\n    if (commentEnd && commentEnd < offset)\n        onError(commentEnd, 'IMPOSSIBLE', 'Map comment with trailing content');\n    map.range = [bm.offset, offset, commentEnd ?? offset];\n    return map;\n}\n\nexports.resolveBlockMap = resolveBlockMap;\n","'use strict';\n\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilFlowIndentCheck = require('./util-flow-indent-check.js');\n\nfunction resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) {\n    const NodeClass = tag?.nodeClass ?? YAMLSeq.YAMLSeq;\n    const seq = new NodeClass(ctx.schema);\n    if (ctx.atRoot)\n        ctx.atRoot = false;\n    if (ctx.atKey)\n        ctx.atKey = false;\n    let offset = bs.offset;\n    let commentEnd = null;\n    for (const { start, value } of bs.items) {\n        const props = resolveProps.resolveProps(start, {\n            indicator: 'seq-item-ind',\n            next: value,\n            offset,\n            onError,\n            parentIndent: bs.indent,\n            startOnNewline: true\n        });\n        if (!props.found) {\n            if (props.anchor || props.tag || value) {\n                if (value?.type === 'block-seq')\n                    onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column');\n                else\n                    onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');\n            }\n            else {\n                commentEnd = props.end;\n                if (props.comment)\n                    seq.comment = props.comment;\n                continue;\n            }\n        }\n        const node = value\n            ? composeNode(ctx, value, props, onError)\n            : composeEmptyNode(ctx, props.end, start, null, props, onError);\n        if (ctx.schema.compat)\n            utilFlowIndentCheck.flowIndentCheck(bs.indent, value, onError);\n        offset = node.range[2];\n        seq.items.push(node);\n    }\n    seq.range = [bs.offset, offset, commentEnd ?? offset];\n    return seq;\n}\n\nexports.resolveBlockSeq = resolveBlockSeq;\n","'use strict';\n\nfunction resolveEnd(end, offset, reqSpace, onError) {\n    let comment = '';\n    if (end) {\n        let hasSpace = false;\n        let sep = '';\n        for (const token of end) {\n            const { source, type } = token;\n            switch (type) {\n                case 'space':\n                    hasSpace = true;\n                    break;\n                case 'comment': {\n                    if (reqSpace && !hasSpace)\n                        onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n                    const cb = source.substring(1) || ' ';\n                    if (!comment)\n                        comment = cb;\n                    else\n                        comment += sep + cb;\n                    sep = '';\n                    break;\n                }\n                case 'newline':\n                    if (comment)\n                        sep += source;\n                    hasSpace = true;\n                    break;\n                default:\n                    onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`);\n            }\n            offset += source.length;\n        }\n    }\n    return { comment, offset };\n}\n\nexports.resolveEnd = resolveEnd;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Pair = require('../nodes/Pair.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilContainsNewline = require('./util-contains-newline.js');\nvar utilMapIncludes = require('./util-map-includes.js');\n\nconst blockMsg = 'Block collections are not allowed within flow collections';\nconst isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');\nfunction resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) {\n    const isMap = fc.start.source === '{';\n    const fcName = isMap ? 'flow map' : 'flow sequence';\n    const NodeClass = (tag?.nodeClass ?? (isMap ? YAMLMap.YAMLMap : YAMLSeq.YAMLSeq));\n    const coll = new NodeClass(ctx.schema);\n    coll.flow = true;\n    const atRoot = ctx.atRoot;\n    if (atRoot)\n        ctx.atRoot = false;\n    if (ctx.atKey)\n        ctx.atKey = false;\n    let offset = fc.offset + fc.start.source.length;\n    for (let i = 0; i < fc.items.length; ++i) {\n        const collItem = fc.items[i];\n        const { start, key, sep, value } = collItem;\n        const props = resolveProps.resolveProps(start, {\n            flow: fcName,\n            indicator: 'explicit-key-ind',\n            next: key ?? sep?.[0],\n            offset,\n            onError,\n            parentIndent: fc.indent,\n            startOnNewline: false\n        });\n        if (!props.found) {\n            if (!props.anchor && !props.tag && !sep && !value) {\n                if (i === 0 && props.comma)\n                    onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n                else if (i < fc.items.length - 1)\n                    onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`);\n                if (props.comment) {\n                    if (coll.comment)\n                        coll.comment += '\\n' + props.comment;\n                    else\n                        coll.comment = props.comment;\n                }\n                offset = props.end;\n                continue;\n            }\n            if (!isMap && ctx.options.strict && utilContainsNewline.containsNewline(key))\n                onError(key, // checked by containsNewline()\n                'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n        }\n        if (i === 0) {\n            if (props.comma)\n                onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n        }\n        else {\n            if (!props.comma)\n                onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`);\n            if (props.comment) {\n                let prevItemComment = '';\n                loop: for (const st of start) {\n                    switch (st.type) {\n                        case 'comma':\n                        case 'space':\n                            break;\n                        case 'comment':\n                            prevItemComment = st.source.substring(1);\n                            break loop;\n                        default:\n                            break loop;\n                    }\n                }\n                if (prevItemComment) {\n                    let prev = coll.items[coll.items.length - 1];\n                    if (identity.isPair(prev))\n                        prev = prev.value ?? prev.key;\n                    if (prev.comment)\n                        prev.comment += '\\n' + prevItemComment;\n                    else\n                        prev.comment = prevItemComment;\n                    props.comment = props.comment.substring(prevItemComment.length + 1);\n                }\n            }\n        }\n        if (!isMap && !sep && !props.found) {\n            // item is a value in a seq\n            // → key & sep are empty, start does not include ? or :\n            const valueNode = value\n                ? composeNode(ctx, value, props, onError)\n                : composeEmptyNode(ctx, props.end, sep, null, props, onError);\n            coll.items.push(valueNode);\n            offset = valueNode.range[2];\n            if (isBlock(value))\n                onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n        }\n        else {\n            // item is a key+value pair\n            // key value\n            ctx.atKey = true;\n            const keyStart = props.end;\n            const keyNode = key\n                ? composeNode(ctx, key, props, onError)\n                : composeEmptyNode(ctx, keyStart, start, null, props, onError);\n            if (isBlock(key))\n                onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);\n            ctx.atKey = false;\n            // value properties\n            const valueProps = resolveProps.resolveProps(sep ?? [], {\n                flow: fcName,\n                indicator: 'map-value-ind',\n                next: value,\n                offset: keyNode.range[2],\n                onError,\n                parentIndent: fc.indent,\n                startOnNewline: false\n            });\n            if (valueProps.found) {\n                if (!isMap && !props.found && ctx.options.strict) {\n                    if (sep)\n                        for (const st of sep) {\n                            if (st === valueProps.found)\n                                break;\n                            if (st.type === 'newline') {\n                                onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n                                break;\n                            }\n                        }\n                    if (props.start < valueProps.found.offset - 1024)\n                        onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key');\n                }\n            }\n            else if (value) {\n                if ('source' in value && value.source?.[0] === ':')\n                    onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);\n                else\n                    onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);\n            }\n            // value value\n            const valueNode = value\n                ? composeNode(ctx, value, valueProps, onError)\n                : valueProps.found\n                    ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError)\n                    : null;\n            if (valueNode) {\n                if (isBlock(value))\n                    onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n            }\n            else if (valueProps.comment) {\n                if (keyNode.comment)\n                    keyNode.comment += '\\n' + valueProps.comment;\n                else\n                    keyNode.comment = valueProps.comment;\n            }\n            const pair = new Pair.Pair(keyNode, valueNode);\n            if (ctx.options.keepSourceTokens)\n                pair.srcToken = collItem;\n            if (isMap) {\n                const map = coll;\n                if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))\n                    onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n                map.items.push(pair);\n            }\n            else {\n                const map = new YAMLMap.YAMLMap(ctx.schema);\n                map.flow = true;\n                map.items.push(pair);\n                const endRange = (valueNode ?? keyNode).range;\n                map.range = [keyNode.range[0], endRange[1], endRange[2]];\n                coll.items.push(map);\n            }\n            offset = valueNode ? valueNode.range[2] : valueProps.end;\n        }\n    }\n    const expectedEnd = isMap ? '}' : ']';\n    const [ce, ...ee] = fc.end;\n    let cePos = offset;\n    if (ce?.source === expectedEnd)\n        cePos = ce.offset + ce.source.length;\n    else {\n        const name = fcName[0].toUpperCase() + fcName.substring(1);\n        const msg = atRoot\n            ? `${name} must end with a ${expectedEnd}`\n            : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;\n        onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg);\n        if (ce && ce.source.length !== 1)\n            ee.unshift(ce);\n    }\n    if (ee.length > 0) {\n        const end = resolveEnd.resolveEnd(ee, cePos, ctx.options.strict, onError);\n        if (end.comment) {\n            if (coll.comment)\n                coll.comment += '\\n' + end.comment;\n            else\n                coll.comment = end.comment;\n        }\n        coll.range = [fc.offset, cePos, end.offset];\n    }\n    else {\n        coll.range = [fc.offset, cePos, cePos];\n    }\n    return coll;\n}\n\nexports.resolveFlowCollection = resolveFlowCollection;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveBlockMap = require('./resolve-block-map.js');\nvar resolveBlockSeq = require('./resolve-block-seq.js');\nvar resolveFlowCollection = require('./resolve-flow-collection.js');\n\nfunction resolveCollection(CN, ctx, token, onError, tagName, tag) {\n    const coll = token.type === 'block-map'\n        ? resolveBlockMap.resolveBlockMap(CN, ctx, token, onError, tag)\n        : token.type === 'block-seq'\n            ? resolveBlockSeq.resolveBlockSeq(CN, ctx, token, onError, tag)\n            : resolveFlowCollection.resolveFlowCollection(CN, ctx, token, onError, tag);\n    const Coll = coll.constructor;\n    // If we got a tagName matching the class, or the tag name is '!',\n    // then use the tagName from the node class used to create it.\n    if (tagName === '!' || tagName === Coll.tagName) {\n        coll.tag = Coll.tagName;\n        return coll;\n    }\n    if (tagName)\n        coll.tag = tagName;\n    return coll;\n}\nfunction composeCollection(CN, ctx, token, props, onError) {\n    const tagToken = props.tag;\n    const tagName = !tagToken\n        ? null\n        : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));\n    if (token.type === 'block-seq') {\n        const { anchor, newlineAfterProp: nl } = props;\n        const lastProp = anchor && tagToken\n            ? anchor.offset > tagToken.offset\n                ? anchor\n                : tagToken\n            : (anchor ?? tagToken);\n        if (lastProp && (!nl || nl.offset < lastProp.offset)) {\n            const message = 'Missing newline after block sequence props';\n            onError(lastProp, 'MISSING_CHAR', message);\n        }\n    }\n    const expType = token.type === 'block-map'\n        ? 'map'\n        : token.type === 'block-seq'\n            ? 'seq'\n            : token.start.source === '{'\n                ? 'map'\n                : 'seq';\n    // shortcut: check if it's a generic YAMLMap or YAMLSeq\n    // before jumping into the custom tag logic.\n    if (!tagToken ||\n        !tagName ||\n        tagName === '!' ||\n        (tagName === YAMLMap.YAMLMap.tagName && expType === 'map') ||\n        (tagName === YAMLSeq.YAMLSeq.tagName && expType === 'seq')) {\n        return resolveCollection(CN, ctx, token, onError, tagName);\n    }\n    let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType);\n    if (!tag) {\n        const kt = ctx.schema.knownTags[tagName];\n        if (kt?.collection === expType) {\n            ctx.schema.tags.push(Object.assign({}, kt, { default: false }));\n            tag = kt;\n        }\n        else {\n            if (kt) {\n                onError(tagToken, 'BAD_COLLECTION_TYPE', `${kt.tag} used for ${expType} collection, but expects ${kt.collection ?? 'scalar'}`, true);\n            }\n            else {\n                onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true);\n            }\n            return resolveCollection(CN, ctx, token, onError, tagName);\n        }\n    }\n    const coll = resolveCollection(CN, ctx, token, onError, tagName, tag);\n    const res = tag.resolve?.(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options) ?? coll;\n    const node = identity.isNode(res)\n        ? res\n        : new Scalar.Scalar(res);\n    node.range = coll.range;\n    node.tag = tagName;\n    if (tag?.format)\n        node.format = tag.format;\n    return node;\n}\n\nexports.composeCollection = composeCollection;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\n\nfunction resolveBlockScalar(ctx, scalar, onError) {\n    const start = scalar.offset;\n    const header = parseBlockScalarHeader(scalar, ctx.options.strict, onError);\n    if (!header)\n        return { value: '', type: null, comment: '', range: [start, start, start] };\n    const type = header.mode === '>' ? Scalar.Scalar.BLOCK_FOLDED : Scalar.Scalar.BLOCK_LITERAL;\n    const lines = scalar.source ? splitLines(scalar.source) : [];\n    // determine the end of content & start of chomping\n    let chompStart = lines.length;\n    for (let i = lines.length - 1; i >= 0; --i) {\n        const content = lines[i][1];\n        if (content === '' || content === '\\r')\n            chompStart = i;\n        else\n            break;\n    }\n    // shortcut for empty contents\n    if (chompStart === 0) {\n        const value = header.chomp === '+' && lines.length > 0\n            ? '\\n'.repeat(Math.max(1, lines.length - 1))\n            : '';\n        let end = start + header.length;\n        if (scalar.source)\n            end += scalar.source.length;\n        return { value, type, comment: header.comment, range: [start, end, end] };\n    }\n    // find the indentation level to trim from start\n    let trimIndent = scalar.indent + header.indent;\n    let offset = scalar.offset + header.length;\n    let contentStart = 0;\n    for (let i = 0; i < chompStart; ++i) {\n        const [indent, content] = lines[i];\n        if (content === '' || content === '\\r') {\n            if (header.indent === 0 && indent.length > trimIndent)\n                trimIndent = indent.length;\n        }\n        else {\n            if (indent.length < trimIndent) {\n                const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';\n                onError(offset + indent.length, 'MISSING_CHAR', message);\n            }\n            if (header.indent === 0)\n                trimIndent = indent.length;\n            contentStart = i;\n            if (trimIndent === 0 && !ctx.atRoot) {\n                const message = 'Block scalar values in collections must be indented';\n                onError(offset, 'BAD_INDENT', message);\n            }\n            break;\n        }\n        offset += indent.length + content.length + 1;\n    }\n    // include trailing more-indented empty lines in content\n    for (let i = lines.length - 1; i >= chompStart; --i) {\n        if (lines[i][0].length > trimIndent)\n            chompStart = i + 1;\n    }\n    let value = '';\n    let sep = '';\n    let prevMoreIndented = false;\n    // leading whitespace is kept intact\n    for (let i = 0; i < contentStart; ++i)\n        value += lines[i][0].slice(trimIndent) + '\\n';\n    for (let i = contentStart; i < chompStart; ++i) {\n        let [indent, content] = lines[i];\n        offset += indent.length + content.length + 1;\n        const crlf = content[content.length - 1] === '\\r';\n        if (crlf)\n            content = content.slice(0, -1);\n        /* istanbul ignore if already caught in lexer */\n        if (content && indent.length < trimIndent) {\n            const src = header.indent\n                ? 'explicit indentation indicator'\n                : 'first line';\n            const message = `Block scalar lines must not be less indented than their ${src}`;\n            onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message);\n            indent = '';\n        }\n        if (type === Scalar.Scalar.BLOCK_LITERAL) {\n            value += sep + indent.slice(trimIndent) + content;\n            sep = '\\n';\n        }\n        else if (indent.length > trimIndent || content[0] === '\\t') {\n            // more-indented content within a folded block\n            if (sep === ' ')\n                sep = '\\n';\n            else if (!prevMoreIndented && sep === '\\n')\n                sep = '\\n\\n';\n            value += sep + indent.slice(trimIndent) + content;\n            sep = '\\n';\n            prevMoreIndented = true;\n        }\n        else if (content === '') {\n            // empty line\n            if (sep === '\\n')\n                value += '\\n';\n            else\n                sep = '\\n';\n        }\n        else {\n            value += sep + content;\n            sep = ' ';\n            prevMoreIndented = false;\n        }\n    }\n    switch (header.chomp) {\n        case '-':\n            break;\n        case '+':\n            for (let i = chompStart; i < lines.length; ++i)\n                value += '\\n' + lines[i][0].slice(trimIndent);\n            if (value[value.length - 1] !== '\\n')\n                value += '\\n';\n            break;\n        default:\n            value += '\\n';\n    }\n    const end = start + header.length + scalar.source.length;\n    return { value, type, comment: header.comment, range: [start, end, end] };\n}\nfunction parseBlockScalarHeader({ offset, props }, strict, onError) {\n    /* istanbul ignore if should not happen */\n    if (props[0].type !== 'block-scalar-header') {\n        onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found');\n        return null;\n    }\n    const { source } = props[0];\n    const mode = source[0];\n    let indent = 0;\n    let chomp = '';\n    let error = -1;\n    for (let i = 1; i < source.length; ++i) {\n        const ch = source[i];\n        if (!chomp && (ch === '-' || ch === '+'))\n            chomp = ch;\n        else {\n            const n = Number(ch);\n            if (!indent && n)\n                indent = n;\n            else if (error === -1)\n                error = offset + i;\n        }\n    }\n    if (error !== -1)\n        onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`);\n    let hasSpace = false;\n    let comment = '';\n    let length = source.length;\n    for (let i = 1; i < props.length; ++i) {\n        const token = props[i];\n        switch (token.type) {\n            case 'space':\n                hasSpace = true;\n            // fallthrough\n            case 'newline':\n                length += token.source.length;\n                break;\n            case 'comment':\n                if (strict && !hasSpace) {\n                    const message = 'Comments must be separated from other tokens by white space characters';\n                    onError(token, 'MISSING_CHAR', message);\n                }\n                length += token.source.length;\n                comment = token.source.substring(1);\n                break;\n            case 'error':\n                onError(token, 'UNEXPECTED_TOKEN', token.message);\n                length += token.source.length;\n                break;\n            /* istanbul ignore next should not happen */\n            default: {\n                const message = `Unexpected token in block scalar header: ${token.type}`;\n                onError(token, 'UNEXPECTED_TOKEN', message);\n                const ts = token.source;\n                if (ts && typeof ts === 'string')\n                    length += ts.length;\n            }\n        }\n    }\n    return { mode, indent, chomp, comment, length };\n}\n/** @returns Array of lines split up as `[indent, content]` */\nfunction splitLines(source) {\n    const split = source.split(/\\n( *)/);\n    const first = split[0];\n    const m = first.match(/^( *)/);\n    const line0 = m?.[1]\n        ? [m[1], first.slice(m[1].length)]\n        : ['', first];\n    const lines = [line0];\n    for (let i = 1; i < split.length; i += 2)\n        lines.push([split[i], split[i + 1]]);\n    return lines;\n}\n\nexports.resolveBlockScalar = resolveBlockScalar;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction resolveFlowScalar(scalar, strict, onError) {\n    const { offset, type, source, end } = scalar;\n    let _type;\n    let value;\n    const _onError = (rel, code, msg) => onError(offset + rel, code, msg);\n    switch (type) {\n        case 'scalar':\n            _type = Scalar.Scalar.PLAIN;\n            value = plainValue(source, _onError);\n            break;\n        case 'single-quoted-scalar':\n            _type = Scalar.Scalar.QUOTE_SINGLE;\n            value = singleQuotedValue(source, _onError);\n            break;\n        case 'double-quoted-scalar':\n            _type = Scalar.Scalar.QUOTE_DOUBLE;\n            value = doubleQuotedValue(source, _onError);\n            break;\n        /* istanbul ignore next should not happen */\n        default:\n            onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);\n            return {\n                value: '',\n                type: null,\n                comment: '',\n                range: [offset, offset + source.length, offset + source.length]\n            };\n    }\n    const valueEnd = offset + source.length;\n    const re = resolveEnd.resolveEnd(end, valueEnd, strict, onError);\n    return {\n        value,\n        type: _type,\n        comment: re.comment,\n        range: [offset, valueEnd, re.offset]\n    };\n}\nfunction plainValue(source, onError) {\n    let badChar = '';\n    switch (source[0]) {\n        /* istanbul ignore next should not happen */\n        case '\\t':\n            badChar = 'a tab character';\n            break;\n        case ',':\n            badChar = 'flow indicator character ,';\n            break;\n        case '%':\n            badChar = 'directive indicator character %';\n            break;\n        case '|':\n        case '>': {\n            badChar = `block scalar indicator ${source[0]}`;\n            break;\n        }\n        case '@':\n        case '`': {\n            badChar = `reserved character ${source[0]}`;\n            break;\n        }\n    }\n    if (badChar)\n        onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);\n    return foldLines(source);\n}\nfunction singleQuotedValue(source, onError) {\n    if (source[source.length - 1] !== \"'\" || source.length === 1)\n        onError(source.length, 'MISSING_CHAR', \"Missing closing 'quote\");\n    return foldLines(source.slice(1, -1)).replace(/''/g, \"'\");\n}\nfunction foldLines(source) {\n    /**\n     * The negative lookbehind here and in the `re` RegExp is to\n     * prevent causing a polynomial search time in certain cases.\n     *\n     * The try-catch is for Safari, which doesn't support this yet:\n     * https://caniuse.com/js-regexp-lookbehind\n     */\n    let first, line;\n    try {\n        first = new RegExp('(.*?)(?<![ \\t])[ \\t]*\\r?\\n', 'sy');\n        line = new RegExp('[ \\t]*(.*?)(?:(?<![ \\t])[ \\t]*)?\\r?\\n', 'sy');\n    }\n    catch {\n        first = /(.*?)[ \\t]*\\r?\\n/sy;\n        line = /[ \\t]*(.*?)[ \\t]*\\r?\\n/sy;\n    }\n    let match = first.exec(source);\n    if (!match)\n        return source;\n    let res = match[1];\n    let sep = ' ';\n    let pos = first.lastIndex;\n    line.lastIndex = pos;\n    while ((match = line.exec(source))) {\n        if (match[1] === '') {\n            if (sep === '\\n')\n                res += sep;\n            else\n                sep = '\\n';\n        }\n        else {\n            res += sep + match[1];\n            sep = ' ';\n        }\n        pos = line.lastIndex;\n    }\n    const last = /[ \\t]*(.*)/sy;\n    last.lastIndex = pos;\n    match = last.exec(source);\n    return res + sep + (match?.[1] ?? '');\n}\nfunction doubleQuotedValue(source, onError) {\n    let res = '';\n    for (let i = 1; i < source.length - 1; ++i) {\n        const ch = source[i];\n        if (ch === '\\r' && source[i + 1] === '\\n')\n            continue;\n        if (ch === '\\n') {\n            const { fold, offset } = foldNewline(source, i);\n            res += fold;\n            i = offset;\n        }\n        else if (ch === '\\\\') {\n            let next = source[++i];\n            const cc = escapeCodes[next];\n            if (cc)\n                res += cc;\n            else if (next === '\\n') {\n                // skip escaped newlines, but still trim the following line\n                next = source[i + 1];\n                while (next === ' ' || next === '\\t')\n                    next = source[++i + 1];\n            }\n            else if (next === '\\r' && source[i + 1] === '\\n') {\n                // skip escaped CRLF newlines, but still trim the following line\n                next = source[++i + 1];\n                while (next === ' ' || next === '\\t')\n                    next = source[++i + 1];\n            }\n            else if (next === 'x' || next === 'u' || next === 'U') {\n                const length = next === 'x' ? 2 : next === 'u' ? 4 : 8;\n                res += parseCharCode(source, i + 1, length, onError);\n                i += length;\n            }\n            else {\n                const raw = source.substr(i - 1, 2);\n                onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n                res += raw;\n            }\n        }\n        else if (ch === ' ' || ch === '\\t') {\n            // trim trailing whitespace\n            const wsStart = i;\n            let next = source[i + 1];\n            while (next === ' ' || next === '\\t')\n                next = source[++i + 1];\n            if (next !== '\\n' && !(next === '\\r' && source[i + 2] === '\\n'))\n                res += i > wsStart ? source.slice(wsStart, i + 1) : ch;\n        }\n        else {\n            res += ch;\n        }\n    }\n    if (source[source.length - 1] !== '\"' || source.length === 1)\n        onError(source.length, 'MISSING_CHAR', 'Missing closing \"quote');\n    return res;\n}\n/**\n * Fold a single newline into a space, multiple newlines to N - 1 newlines.\n * Presumes `source[offset] === '\\n'`\n */\nfunction foldNewline(source, offset) {\n    let fold = '';\n    let ch = source[offset + 1];\n    while (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n        if (ch === '\\r' && source[offset + 2] !== '\\n')\n            break;\n        if (ch === '\\n')\n            fold += '\\n';\n        offset += 1;\n        ch = source[offset + 1];\n    }\n    if (!fold)\n        fold = ' ';\n    return { fold, offset };\n}\nconst escapeCodes = {\n    '0': '\\0', // null character\n    a: '\\x07', // bell character\n    b: '\\b', // backspace\n    e: '\\x1b', // escape character\n    f: '\\f', // form feed\n    n: '\\n', // line feed\n    r: '\\r', // carriage return\n    t: '\\t', // horizontal tab\n    v: '\\v', // vertical tab\n    N: '\\u0085', // Unicode next line\n    _: '\\u00a0', // Unicode non-breaking space\n    L: '\\u2028', // Unicode line separator\n    P: '\\u2029', // Unicode paragraph separator\n    ' ': ' ',\n    '\"': '\"',\n    '/': '/',\n    '\\\\': '\\\\',\n    '\\t': '\\t'\n};\nfunction parseCharCode(source, offset, length, onError) {\n    const cc = source.substr(offset, length);\n    const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n    const code = ok ? parseInt(cc, 16) : NaN;\n    try {\n        return String.fromCodePoint(code);\n    }\n    catch {\n        const raw = source.substr(offset - 2, length + 2);\n        onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n        return raw;\n    }\n}\n\nexports.resolveFlowScalar = resolveFlowScalar;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveBlockScalar = require('./resolve-block-scalar.js');\nvar resolveFlowScalar = require('./resolve-flow-scalar.js');\n\nfunction composeScalar(ctx, token, tagToken, onError) {\n    const { value, type, comment, range } = token.type === 'block-scalar'\n        ? resolveBlockScalar.resolveBlockScalar(ctx, token, onError)\n        : resolveFlowScalar.resolveFlowScalar(token, ctx.options.strict, onError);\n    const tagName = tagToken\n        ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))\n        : null;\n    let tag;\n    if (ctx.options.stringKeys && ctx.atKey) {\n        tag = ctx.schema[identity.SCALAR];\n    }\n    else if (tagName)\n        tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError);\n    else if (token.type === 'scalar')\n        tag = findScalarTagByTest(ctx, value, token, onError);\n    else\n        tag = ctx.schema[identity.SCALAR];\n    let scalar;\n    try {\n        const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options);\n        scalar = identity.isScalar(res) ? res : new Scalar.Scalar(res);\n    }\n    catch (error) {\n        const msg = error instanceof Error ? error.message : String(error);\n        onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg);\n        scalar = new Scalar.Scalar(value);\n    }\n    scalar.range = range;\n    scalar.source = value;\n    if (type)\n        scalar.type = type;\n    if (tagName)\n        scalar.tag = tagName;\n    if (tag.format)\n        scalar.format = tag.format;\n    if (comment)\n        scalar.comment = comment;\n    return scalar;\n}\nfunction findScalarTagByName(schema, value, tagName, tagToken, onError) {\n    if (tagName === '!')\n        return schema[identity.SCALAR]; // non-specific tag\n    const matchWithTest = [];\n    for (const tag of schema.tags) {\n        if (!tag.collection && tag.tag === tagName) {\n            if (tag.default && tag.test)\n                matchWithTest.push(tag);\n            else\n                return tag;\n        }\n    }\n    for (const tag of matchWithTest)\n        if (tag.test?.test(value))\n            return tag;\n    const kt = schema.knownTags[tagName];\n    if (kt && !kt.collection) {\n        // Ensure that the known tag is available for stringifying,\n        // but does not get used by default.\n        schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));\n        return kt;\n    }\n    onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');\n    return schema[identity.SCALAR];\n}\nfunction findScalarTagByTest({ atKey, directives, schema }, value, token, onError) {\n    const tag = schema.tags.find(tag => (tag.default === true || (atKey && tag.default === 'key')) &&\n        tag.test?.test(value)) || schema[identity.SCALAR];\n    if (schema.compat) {\n        const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ??\n            schema[identity.SCALAR];\n        if (tag.tag !== compat.tag) {\n            const ts = directives.tagString(tag.tag);\n            const cs = directives.tagString(compat.tag);\n            const msg = `Value may be parsed as either ${ts} or ${cs}`;\n            onError(token, 'TAG_RESOLVE_FAILED', msg, true);\n        }\n    }\n    return tag;\n}\n\nexports.composeScalar = composeScalar;\n","'use strict';\n\nfunction emptyScalarPosition(offset, before, pos) {\n    if (before) {\n        pos ?? (pos = before.length);\n        for (let i = pos - 1; i >= 0; --i) {\n            let st = before[i];\n            switch (st.type) {\n                case 'space':\n                case 'comment':\n                case 'newline':\n                    offset -= st.source.length;\n                    continue;\n            }\n            // Technically, an empty scalar is immediately after the last non-empty\n            // node, but it's more useful to place it after any whitespace.\n            st = before[++i];\n            while (st?.type === 'space') {\n                offset += st.source.length;\n                st = before[++i];\n            }\n            break;\n        }\n    }\n    return offset;\n}\n\nexports.emptyScalarPosition = emptyScalarPosition;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar composeCollection = require('./compose-collection.js');\nvar composeScalar = require('./compose-scalar.js');\nvar resolveEnd = require('./resolve-end.js');\nvar utilEmptyScalarPosition = require('./util-empty-scalar-position.js');\n\nconst CN = { composeNode, composeEmptyNode };\nfunction composeNode(ctx, token, props, onError) {\n    const atKey = ctx.atKey;\n    const { spaceBefore, comment, anchor, tag } = props;\n    let node;\n    let isSrcToken = true;\n    switch (token.type) {\n        case 'alias':\n            node = composeAlias(ctx, token, onError);\n            if (anchor || tag)\n                onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');\n            break;\n        case 'scalar':\n        case 'single-quoted-scalar':\n        case 'double-quoted-scalar':\n        case 'block-scalar':\n            node = composeScalar.composeScalar(ctx, token, tag, onError);\n            if (anchor)\n                node.anchor = anchor.source.substring(1);\n            break;\n        case 'block-map':\n        case 'block-seq':\n        case 'flow-collection':\n            try {\n                node = composeCollection.composeCollection(CN, ctx, token, props, onError);\n                if (anchor)\n                    node.anchor = anchor.source.substring(1);\n            }\n            catch (error) {\n                // Almost certainly here due to a stack overflow\n                const message = error instanceof Error ? error.message : String(error);\n                onError(token, 'RESOURCE_EXHAUSTION', message);\n            }\n            break;\n        default: {\n            const message = token.type === 'error'\n                ? token.message\n                : `Unsupported token (type: ${token.type})`;\n            onError(token, 'UNEXPECTED_TOKEN', message);\n            isSrcToken = false;\n        }\n    }\n    node ?? (node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError));\n    if (anchor && node.anchor === '')\n        onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n    if (atKey &&\n        ctx.options.stringKeys &&\n        (!identity.isScalar(node) ||\n            typeof node.value !== 'string' ||\n            (node.tag && node.tag !== 'tag:yaml.org,2002:str'))) {\n        const msg = 'With stringKeys, all keys must be strings';\n        onError(tag ?? token, 'NON_STRING_KEY', msg);\n    }\n    if (spaceBefore)\n        node.spaceBefore = true;\n    if (comment) {\n        if (token.type === 'scalar' && token.source === '')\n            node.comment = comment;\n        else\n            node.commentBefore = comment;\n    }\n    // @ts-expect-error Type checking misses meaning of isSrcToken\n    if (ctx.options.keepSourceTokens && isSrcToken)\n        node.srcToken = token;\n    return node;\n}\nfunction composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {\n    const token = {\n        type: 'scalar',\n        offset: utilEmptyScalarPosition.emptyScalarPosition(offset, before, pos),\n        indent: -1,\n        source: ''\n    };\n    const node = composeScalar.composeScalar(ctx, token, tag, onError);\n    if (anchor) {\n        node.anchor = anchor.source.substring(1);\n        if (node.anchor === '')\n            onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n    }\n    if (spaceBefore)\n        node.spaceBefore = true;\n    if (comment) {\n        node.comment = comment;\n        node.range[2] = end;\n    }\n    return node;\n}\nfunction composeAlias({ options }, { offset, source, end }, onError) {\n    const alias = new Alias.Alias(source.substring(1));\n    if (alias.source === '')\n        onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');\n    if (alias.source.endsWith(':'))\n        onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);\n    const valueEnd = offset + source.length;\n    const re = resolveEnd.resolveEnd(end, valueEnd, options.strict, onError);\n    alias.range = [offset, valueEnd, re.offset];\n    if (re.comment)\n        alias.comment = re.comment;\n    return alias;\n}\n\nexports.composeEmptyNode = composeEmptyNode;\nexports.composeNode = composeNode;\n","'use strict';\n\nvar Document = require('../doc/Document.js');\nvar composeNode = require('./compose-node.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\n\nfunction composeDoc(options, directives, { offset, start, value, end }, onError) {\n    const opts = Object.assign({ _directives: directives }, options);\n    const doc = new Document.Document(undefined, opts);\n    const ctx = {\n        atKey: false,\n        atRoot: true,\n        directives: doc.directives,\n        options: doc.options,\n        schema: doc.schema\n    };\n    const props = resolveProps.resolveProps(start, {\n        indicator: 'doc-start',\n        next: value ?? end?.[0],\n        offset,\n        onError,\n        parentIndent: 0,\n        startOnNewline: true\n    });\n    if (props.found) {\n        doc.directives.docStart = true;\n        if (value &&\n            (value.type === 'block-map' || value.type === 'block-seq') &&\n            !props.hasNewline)\n            onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');\n    }\n    // @ts-expect-error If Contents is set, let's trust the user\n    doc.contents = value\n        ? composeNode.composeNode(ctx, value, props, onError)\n        : composeNode.composeEmptyNode(ctx, props.end, start, null, props, onError);\n    const contentEnd = doc.contents.range[2];\n    const re = resolveEnd.resolveEnd(end, contentEnd, false, onError);\n    if (re.comment)\n        doc.comment = re.comment;\n    doc.range = [offset, contentEnd, re.offset];\n    return doc;\n}\n\nexports.composeDoc = composeDoc;\n","'use strict';\n\nvar node_process = require('process');\nvar directives = require('../doc/directives.js');\nvar Document = require('../doc/Document.js');\nvar errors = require('../errors.js');\nvar identity = require('../nodes/identity.js');\nvar composeDoc = require('./compose-doc.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction getErrorPos(src) {\n    if (typeof src === 'number')\n        return [src, src + 1];\n    if (Array.isArray(src))\n        return src.length === 2 ? src : [src[0], src[1]];\n    const { offset, source } = src;\n    return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n    let comment = '';\n    let atComment = false;\n    let afterEmptyLine = false;\n    for (let i = 0; i < prelude.length; ++i) {\n        const source = prelude[i];\n        switch (source[0]) {\n            case '#':\n                comment +=\n                    (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n                        (source.substring(1) || ' ');\n                atComment = true;\n                afterEmptyLine = false;\n                break;\n            case '%':\n                if (prelude[i + 1]?.[0] !== '#')\n                    i += 1;\n                atComment = false;\n                break;\n            default:\n                // This may be wrong after doc-end, but in that case it doesn't matter\n                if (!atComment)\n                    afterEmptyLine = true;\n                atComment = false;\n        }\n    }\n    return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n    constructor(options = {}) {\n        this.doc = null;\n        this.atDirectives = false;\n        this.prelude = [];\n        this.errors = [];\n        this.warnings = [];\n        this.onError = (source, code, message, warning) => {\n            const pos = getErrorPos(source);\n            if (warning)\n                this.warnings.push(new errors.YAMLWarning(pos, code, message));\n            else\n                this.errors.push(new errors.YAMLParseError(pos, code, message));\n        };\n        // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n        this.directives = new directives.Directives({ version: options.version || '1.2' });\n        this.options = options;\n    }\n    decorate(doc, afterDoc) {\n        const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n        //console.log({ dc: doc.comment, prelude, comment })\n        if (comment) {\n            const dc = doc.contents;\n            if (afterDoc) {\n                doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n            }\n            else if (afterEmptyLine || doc.directives.docStart || !dc) {\n                doc.commentBefore = comment;\n            }\n            else if (identity.isCollection(dc) && !dc.flow && dc.items.length > 0) {\n                let it = dc.items[0];\n                if (identity.isPair(it))\n                    it = it.key;\n                const cb = it.commentBefore;\n                it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n            }\n            else {\n                const cb = dc.commentBefore;\n                dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n            }\n        }\n        if (afterDoc) {\n            for (let i = 0; i < this.errors.length; ++i)\n                doc.errors.push(this.errors[i]);\n            for (let i = 0; i < this.warnings.length; ++i)\n                doc.warnings.push(this.warnings[i]);\n        }\n        else {\n            doc.errors = this.errors;\n            doc.warnings = this.warnings;\n        }\n        this.prelude = [];\n        this.errors = [];\n        this.warnings = [];\n    }\n    /**\n     * Current stream status information.\n     *\n     * Mostly useful at the end of input for an empty stream.\n     */\n    streamInfo() {\n        return {\n            comment: parsePrelude(this.prelude).comment,\n            directives: this.directives,\n            errors: this.errors,\n            warnings: this.warnings\n        };\n    }\n    /**\n     * Compose tokens into documents.\n     *\n     * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n     * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n     */\n    *compose(tokens, forceDoc = false, endOffset = -1) {\n        for (const token of tokens)\n            yield* this.next(token);\n        yield* this.end(forceDoc, endOffset);\n    }\n    /** Advance the composer by one CST token. */\n    *next(token) {\n        if (node_process.env.LOG_STREAM)\n            console.dir(token, { depth: null });\n        switch (token.type) {\n            case 'directive':\n                this.directives.add(token.source, (offset, message, warning) => {\n                    const pos = getErrorPos(token);\n                    pos[0] += offset;\n                    this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n                });\n                this.prelude.push(token.source);\n                this.atDirectives = true;\n                break;\n            case 'document': {\n                const doc = composeDoc.composeDoc(this.options, this.directives, token, this.onError);\n                if (this.atDirectives && !doc.directives.docStart)\n                    this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n                this.decorate(doc, false);\n                if (this.doc)\n                    yield this.doc;\n                this.doc = doc;\n                this.atDirectives = false;\n                break;\n            }\n            case 'byte-order-mark':\n            case 'space':\n                break;\n            case 'comment':\n            case 'newline':\n                this.prelude.push(token.source);\n                break;\n            case 'error': {\n                const msg = token.source\n                    ? `${token.message}: ${JSON.stringify(token.source)}`\n                    : token.message;\n                const error = new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n                if (this.atDirectives || !this.doc)\n                    this.errors.push(error);\n                else\n                    this.doc.errors.push(error);\n                break;\n            }\n            case 'doc-end': {\n                if (!this.doc) {\n                    const msg = 'Unexpected doc-end without preceding document';\n                    this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n                    break;\n                }\n                this.doc.directives.docEnd = true;\n                const end = resolveEnd.resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n                this.decorate(this.doc, true);\n                if (end.comment) {\n                    const dc = this.doc.comment;\n                    this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n                }\n                this.doc.range[2] = end.offset;\n                break;\n            }\n            default:\n                this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n        }\n    }\n    /**\n     * Call at end of input to yield any remaining document.\n     *\n     * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n     * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n     */\n    *end(forceDoc = false, endOffset = -1) {\n        if (this.doc) {\n            this.decorate(this.doc, true);\n            yield this.doc;\n            this.doc = null;\n        }\n        else if (forceDoc) {\n            const opts = Object.assign({ _directives: this.directives }, this.options);\n            const doc = new Document.Document(undefined, opts);\n            if (this.atDirectives)\n                this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n            doc.range = [0, endOffset, endOffset];\n            this.decorate(doc, false);\n            yield doc;\n        }\n    }\n}\n\nexports.Composer = Composer;\n","'use strict';\n\nvar resolveBlockScalar = require('../compose/resolve-block-scalar.js');\nvar resolveFlowScalar = require('../compose/resolve-flow-scalar.js');\nvar errors = require('../errors.js');\nvar stringifyString = require('../stringify/stringifyString.js');\n\nfunction resolveAsScalar(token, strict = true, onError) {\n    if (token) {\n        const _onError = (pos, code, message) => {\n            const offset = typeof pos === 'number' ? pos : Array.isArray(pos) ? pos[0] : pos.offset;\n            if (onError)\n                onError(offset, code, message);\n            else\n                throw new errors.YAMLParseError([offset, offset + 1], code, message);\n        };\n        switch (token.type) {\n            case 'scalar':\n            case 'single-quoted-scalar':\n            case 'double-quoted-scalar':\n                return resolveFlowScalar.resolveFlowScalar(token, strict, _onError);\n            case 'block-scalar':\n                return resolveBlockScalar.resolveBlockScalar({ options: { strict } }, token, _onError);\n        }\n    }\n    return null;\n}\n/**\n * Create a new scalar token with `value`\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.end Comments and whitespace after the end of the value, or after the block scalar header. If undefined, a newline will be added.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.indent The indent level of the token.\n * @param context.inFlow Is this scalar within a flow collection? This may affect the resolved type of the token's value.\n * @param context.offset The offset position of the token.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction createScalarToken(value, context) {\n    const { implicitKey = false, indent, inFlow = false, offset = -1, type = 'PLAIN' } = context;\n    const source = stringifyString.stringifyString({ type, value }, {\n        implicitKey,\n        indent: indent > 0 ? ' '.repeat(indent) : '',\n        inFlow,\n        options: { blockQuote: true, lineWidth: -1 }\n    });\n    const end = context.end ?? [\n        { type: 'newline', offset: -1, indent, source: '\\n' }\n    ];\n    switch (source[0]) {\n        case '|':\n        case '>': {\n            const he = source.indexOf('\\n');\n            const head = source.substring(0, he);\n            const body = source.substring(he + 1) + '\\n';\n            const props = [\n                { type: 'block-scalar-header', offset, indent, source: head }\n            ];\n            if (!addEndtoBlockProps(props, end))\n                props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n            return { type: 'block-scalar', offset, indent, props, source: body };\n        }\n        case '\"':\n            return { type: 'double-quoted-scalar', offset, indent, source, end };\n        case \"'\":\n            return { type: 'single-quoted-scalar', offset, indent, source, end };\n        default:\n            return { type: 'scalar', offset, indent, source, end };\n    }\n}\n/**\n * Set the value of `token` to the given string `value`, overwriting any previous contents and type that it may have.\n *\n * Best efforts are made to retain any comments previously associated with the `token`,\n * though all contents within a collection's `items` will be overwritten.\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param token Any token. If it does not include an `indent` value, the value will be stringified as if it were an implicit key.\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.afterKey In most cases, values after a key should have an additional level of indentation.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.inFlow Being within a flow collection may affect the resolved type of the token's value.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction setScalarValue(token, value, context = {}) {\n    let { afterKey = false, implicitKey = false, inFlow = false, type } = context;\n    let indent = 'indent' in token ? token.indent : null;\n    if (afterKey && typeof indent === 'number')\n        indent += 2;\n    if (!type)\n        switch (token.type) {\n            case 'single-quoted-scalar':\n                type = 'QUOTE_SINGLE';\n                break;\n            case 'double-quoted-scalar':\n                type = 'QUOTE_DOUBLE';\n                break;\n            case 'block-scalar': {\n                const header = token.props[0];\n                if (header.type !== 'block-scalar-header')\n                    throw new Error('Invalid block scalar header');\n                type = header.source[0] === '>' ? 'BLOCK_FOLDED' : 'BLOCK_LITERAL';\n                break;\n            }\n            default:\n                type = 'PLAIN';\n        }\n    const source = stringifyString.stringifyString({ type, value }, {\n        implicitKey: implicitKey || indent === null,\n        indent: indent !== null && indent > 0 ? ' '.repeat(indent) : '',\n        inFlow,\n        options: { blockQuote: true, lineWidth: -1 }\n    });\n    switch (source[0]) {\n        case '|':\n        case '>':\n            setBlockScalarValue(token, source);\n            break;\n        case '\"':\n            setFlowScalarValue(token, source, 'double-quoted-scalar');\n            break;\n        case \"'\":\n            setFlowScalarValue(token, source, 'single-quoted-scalar');\n            break;\n        default:\n            setFlowScalarValue(token, source, 'scalar');\n    }\n}\nfunction setBlockScalarValue(token, source) {\n    const he = source.indexOf('\\n');\n    const head = source.substring(0, he);\n    const body = source.substring(he + 1) + '\\n';\n    if (token.type === 'block-scalar') {\n        const header = token.props[0];\n        if (header.type !== 'block-scalar-header')\n            throw new Error('Invalid block scalar header');\n        header.source = head;\n        token.source = body;\n    }\n    else {\n        const { offset } = token;\n        const indent = 'indent' in token ? token.indent : -1;\n        const props = [\n            { type: 'block-scalar-header', offset, indent, source: head }\n        ];\n        if (!addEndtoBlockProps(props, 'end' in token ? token.end : undefined))\n            props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n        for (const key of Object.keys(token))\n            if (key !== 'type' && key !== 'offset')\n                delete token[key];\n        Object.assign(token, { type: 'block-scalar', indent, props, source: body });\n    }\n}\n/** @returns `true` if last token is a newline */\nfunction addEndtoBlockProps(props, end) {\n    if (end)\n        for (const st of end)\n            switch (st.type) {\n                case 'space':\n                case 'comment':\n                    props.push(st);\n                    break;\n                case 'newline':\n                    props.push(st);\n                    return true;\n            }\n    return false;\n}\nfunction setFlowScalarValue(token, source, type) {\n    switch (token.type) {\n        case 'scalar':\n        case 'double-quoted-scalar':\n        case 'single-quoted-scalar':\n            token.type = type;\n            token.source = source;\n            break;\n        case 'block-scalar': {\n            const end = token.props.slice(1);\n            let oa = source.length;\n            if (token.props[0].type === 'block-scalar-header')\n                oa -= token.props[0].source.length;\n            for (const tok of end)\n                tok.offset += oa;\n            delete token.props;\n            Object.assign(token, { type, source, end });\n            break;\n        }\n        case 'block-map':\n        case 'block-seq': {\n            const offset = token.offset + source.length;\n            const nl = { type: 'newline', offset, indent: token.indent, source: '\\n' };\n            delete token.items;\n            Object.assign(token, { type, source, end: [nl] });\n            break;\n        }\n        default: {\n            const indent = 'indent' in token ? token.indent : -1;\n            const end = 'end' in token && Array.isArray(token.end)\n                ? token.end.filter(st => st.type === 'space' ||\n                    st.type === 'comment' ||\n                    st.type === 'newline')\n                : [];\n            for (const key of Object.keys(token))\n                if (key !== 'type' && key !== 'offset')\n                    delete token[key];\n            Object.assign(token, { type, indent, source, end });\n        }\n    }\n}\n\nexports.createScalarToken = createScalarToken;\nexports.resolveAsScalar = resolveAsScalar;\nexports.setScalarValue = setScalarValue;\n","'use strict';\n\n/**\n * Stringify a CST document, token, or collection item\n *\n * Fair warning: This applies no validation whatsoever, and\n * simply concatenates the sources in their logical order.\n */\nconst stringify = (cst) => 'type' in cst ? stringifyToken(cst) : stringifyItem(cst);\nfunction stringifyToken(token) {\n    switch (token.type) {\n        case 'block-scalar': {\n            let res = '';\n            for (const tok of token.props)\n                res += stringifyToken(tok);\n            return res + token.source;\n        }\n        case 'block-map':\n        case 'block-seq': {\n            let res = '';\n            for (const item of token.items)\n                res += stringifyItem(item);\n            return res;\n        }\n        case 'flow-collection': {\n            let res = token.start.source;\n            for (const item of token.items)\n                res += stringifyItem(item);\n            for (const st of token.end)\n                res += st.source;\n            return res;\n        }\n        case 'document': {\n            let res = stringifyItem(token);\n            if (token.end)\n                for (const st of token.end)\n                    res += st.source;\n            return res;\n        }\n        default: {\n            let res = token.source;\n            if ('end' in token && token.end)\n                for (const st of token.end)\n                    res += st.source;\n            return res;\n        }\n    }\n}\nfunction stringifyItem({ start, key, sep, value }) {\n    let res = '';\n    for (const st of start)\n        res += st.source;\n    if (key)\n        res += stringifyToken(key);\n    if (sep)\n        for (const st of sep)\n            res += st.source;\n    if (value)\n        res += stringifyToken(value);\n    return res;\n}\n\nexports.stringify = stringify;\n","'use strict';\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove item');\n/**\n * Apply a visitor to a CST document or item.\n *\n * Walks through the tree (depth-first) starting from the root, calling a\n * `visitor` function with two arguments when entering each item:\n *   - `item`: The current item, which included the following members:\n *     - `start: SourceToken[]` – Source tokens before the key or value,\n *       possibly including its anchor or tag.\n *     - `key?: Token | null` – Set for pair values. May then be `null`, if\n *       the key before the `:` separator is empty.\n *     - `sep?: SourceToken[]` – Source tokens between the key and the value,\n *       which should include the `:` map value indicator if `value` is set.\n *     - `value?: Token` – The value of a sequence item, or of a map pair.\n *   - `path`: The steps from the root to the current node, as an array of\n *     `['key' | 'value', number]` tuples.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this token, continue with\n *      next sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current item, then continue with the next one\n *   - `number`: Set the index of the next step. This is useful especially if\n *     the index of the current token has changed.\n *   - `function`: Define the next visitor for this item. After the original\n *     visitor is called on item entry, next visitors are called after handling\n *     a non-empty `key` and when exiting the item.\n */\nfunction visit(cst, visitor) {\n    if ('type' in cst && cst.type === 'document')\n        cst = { start: cst.start, value: cst.value };\n    _visit(Object.freeze([]), cst, visitor);\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current item */\nvisit.SKIP = SKIP;\n/** Remove the current item */\nvisit.REMOVE = REMOVE;\n/** Find the item at `path` from `cst` as the root */\nvisit.itemAtPath = (cst, path) => {\n    let item = cst;\n    for (const [field, index] of path) {\n        const tok = item?.[field];\n        if (tok && 'items' in tok) {\n            item = tok.items[index];\n        }\n        else\n            return undefined;\n    }\n    return item;\n};\n/**\n * Get the immediate parent collection of the item at `path` from `cst` as the root.\n *\n * Throws an error if the collection is not found, which should never happen if the item itself exists.\n */\nvisit.parentCollection = (cst, path) => {\n    const parent = visit.itemAtPath(cst, path.slice(0, -1));\n    const field = path[path.length - 1][0];\n    const coll = parent?.[field];\n    if (coll && 'items' in coll)\n        return coll;\n    throw new Error('Parent collection not found');\n};\nfunction _visit(path, item, visitor) {\n    let ctrl = visitor(item, path);\n    if (typeof ctrl === 'symbol')\n        return ctrl;\n    for (const field of ['key', 'value']) {\n        const token = item[field];\n        if (token && 'items' in token) {\n            for (let i = 0; i < token.items.length; ++i) {\n                const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    token.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n            if (typeof ctrl === 'function' && field === 'key')\n                ctrl = ctrl(item, path);\n        }\n    }\n    return typeof ctrl === 'function' ? ctrl(item, path) : ctrl;\n}\n\nexports.visit = visit;\n","'use strict';\n\nvar cstScalar = require('./cst-scalar.js');\nvar cstStringify = require('./cst-stringify.js');\nvar cstVisit = require('./cst-visit.js');\n\n/** The byte order mark */\nconst BOM = '\\u{FEFF}';\n/** Start of doc-mode */\nconst DOCUMENT = '\\x02'; // C0: Start of Text\n/** Unexpected end of flow-mode */\nconst FLOW_END = '\\x18'; // C0: Cancel\n/** Next token is a scalar value */\nconst SCALAR = '\\x1f'; // C0: Unit Separator\n/** @returns `true` if `token` is a flow or block collection */\nconst isCollection = (token) => !!token && 'items' in token;\n/** @returns `true` if `token` is a flow or block scalar; not an alias */\nconst isScalar = (token) => !!token &&\n    (token.type === 'scalar' ||\n        token.type === 'single-quoted-scalar' ||\n        token.type === 'double-quoted-scalar' ||\n        token.type === 'block-scalar');\n/* istanbul ignore next */\n/** Get a printable representation of a lexer token */\nfunction prettyToken(token) {\n    switch (token) {\n        case BOM:\n            return '<BOM>';\n        case DOCUMENT:\n            return '<DOC>';\n        case FLOW_END:\n            return '<FLOW_END>';\n        case SCALAR:\n            return '<SCALAR>';\n        default:\n            return JSON.stringify(token);\n    }\n}\n/** Identify the type of a lexer token. May return `null` for unknown tokens. */\nfunction tokenType(source) {\n    switch (source) {\n        case BOM:\n            return 'byte-order-mark';\n        case DOCUMENT:\n            return 'doc-mode';\n        case FLOW_END:\n            return 'flow-error-end';\n        case SCALAR:\n            return 'scalar';\n        case '---':\n            return 'doc-start';\n        case '...':\n            return 'doc-end';\n        case '':\n        case '\\n':\n        case '\\r\\n':\n            return 'newline';\n        case '-':\n            return 'seq-item-ind';\n        case '?':\n            return 'explicit-key-ind';\n        case ':':\n            return 'map-value-ind';\n        case '{':\n            return 'flow-map-start';\n        case '}':\n            return 'flow-map-end';\n        case '[':\n            return 'flow-seq-start';\n        case ']':\n            return 'flow-seq-end';\n        case ',':\n            return 'comma';\n    }\n    switch (source[0]) {\n        case ' ':\n        case '\\t':\n            return 'space';\n        case '#':\n            return 'comment';\n        case '%':\n            return 'directive-line';\n        case '*':\n            return 'alias';\n        case '&':\n            return 'anchor';\n        case '!':\n            return 'tag';\n        case \"'\":\n            return 'single-quoted-scalar';\n        case '\"':\n            return 'double-quoted-scalar';\n        case '|':\n        case '>':\n            return 'block-scalar-header';\n    }\n    return null;\n}\n\nexports.createScalarToken = cstScalar.createScalarToken;\nexports.resolveAsScalar = cstScalar.resolveAsScalar;\nexports.setScalarValue = cstScalar.setScalarValue;\nexports.stringify = cstStringify.stringify;\nexports.visit = cstVisit.visit;\nexports.BOM = BOM;\nexports.DOCUMENT = DOCUMENT;\nexports.FLOW_END = FLOW_END;\nexports.SCALAR = SCALAR;\nexports.isCollection = isCollection;\nexports.isScalar = isScalar;\nexports.prettyToken = prettyToken;\nexports.tokenType = tokenType;\n","'use strict';\n\nvar cst = require('./cst.js');\n\n/*\nSTART -> stream\n\nstream\n  directive -> line-end -> stream\n  indent + line-end -> stream\n  [else] -> line-start\n\nline-end\n  comment -> line-end\n  newline -> .\n  input-end -> END\n\nline-start\n  doc-start -> doc\n  doc-end -> stream\n  [else] -> indent -> block-start\n\nblock-start\n  seq-item-start -> block-start\n  explicit-key-start -> block-start\n  map-value-start -> block-start\n  [else] -> doc\n\ndoc\n  line-end -> line-start\n  spaces -> doc\n  anchor -> doc\n  tag -> doc\n  flow-start -> flow -> doc\n  flow-end -> error -> doc\n  seq-item-start -> error -> doc\n  explicit-key-start -> error -> doc\n  map-value-start -> doc\n  alias -> doc\n  quote-start -> quoted-scalar -> doc\n  block-scalar-header -> line-end -> block-scalar(min) -> line-start\n  [else] -> plain-scalar(false, min) -> doc\n\nflow\n  line-end -> flow\n  spaces -> flow\n  anchor -> flow\n  tag -> flow\n  flow-start -> flow -> flow\n  flow-end -> .\n  seq-item-start -> error -> flow\n  explicit-key-start -> flow\n  map-value-start -> flow\n  alias -> flow\n  quote-start -> quoted-scalar -> flow\n  comma -> flow\n  [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n  quote-end -> .\n  [else] -> quoted-scalar\n\nblock-scalar(min)\n  newline + peek(indent < min) -> .\n  [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n  scalar-end(is-flow) -> .\n  peek(newline + (indent < min)) -> .\n  [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n    switch (ch) {\n        case undefined:\n        case ' ':\n        case '\\n':\n        case '\\r':\n        case '\\t':\n            return true;\n        default:\n            return false;\n    }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n    constructor() {\n        /**\n         * Flag indicating whether the end of the current buffer marks the end of\n         * all input\n         */\n        this.atEnd = false;\n        /**\n         * Explicit indent set in block scalar header, as an offset from the current\n         * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n         * explicitly set.\n         */\n        this.blockScalarIndent = -1;\n        /**\n         * Block scalars that include a + (keep) chomping indicator in their header\n         * include trailing empty lines, which are otherwise excluded from the\n         * scalar's contents.\n         */\n        this.blockScalarKeep = false;\n        /** Current input */\n        this.buffer = '';\n        /**\n         * Flag noting whether the map value indicator : can immediately follow this\n         * node within a flow context.\n         */\n        this.flowKey = false;\n        /** Count of surrounding flow collection levels. */\n        this.flowLevel = 0;\n        /**\n         * Minimum level of indentation required for next lines to be parsed as a\n         * part of the current scalar value.\n         */\n        this.indentNext = 0;\n        /** Indentation level of the current line. */\n        this.indentValue = 0;\n        /** Position of the next \\n character. */\n        this.lineEndPos = null;\n        /** Stores the state of the lexer if reaching the end of incpomplete input */\n        this.next = null;\n        /** A pointer to `buffer`; the current position of the lexer. */\n        this.pos = 0;\n    }\n    /**\n     * Generate YAML tokens from the `source` string. If `incomplete`,\n     * a part of the last line may be left as a buffer for the next call.\n     *\n     * @returns A generator of lexical tokens\n     */\n    *lex(source, incomplete = false) {\n        if (source) {\n            if (typeof source !== 'string')\n                throw TypeError('source is not a string');\n            this.buffer = this.buffer ? this.buffer + source : source;\n            this.lineEndPos = null;\n        }\n        this.atEnd = !incomplete;\n        let next = this.next ?? 'stream';\n        while (next && (incomplete || this.hasChars(1)))\n            next = yield* this.parseNext(next);\n    }\n    atLineEnd() {\n        let i = this.pos;\n        let ch = this.buffer[i];\n        while (ch === ' ' || ch === '\\t')\n            ch = this.buffer[++i];\n        if (!ch || ch === '#' || ch === '\\n')\n            return true;\n        if (ch === '\\r')\n            return this.buffer[i + 1] === '\\n';\n        return false;\n    }\n    charAt(n) {\n        return this.buffer[this.pos + n];\n    }\n    continueScalar(offset) {\n        let ch = this.buffer[offset];\n        if (this.indentNext > 0) {\n            let indent = 0;\n            while (ch === ' ')\n                ch = this.buffer[++indent + offset];\n            if (ch === '\\r') {\n                const next = this.buffer[indent + offset + 1];\n                if (next === '\\n' || (!next && !this.atEnd))\n                    return offset + indent + 1;\n            }\n            return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n                ? offset + indent\n                : -1;\n        }\n        if (ch === '-' || ch === '.') {\n            const dt = this.buffer.substr(offset, 3);\n            if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n                return -1;\n        }\n        return offset;\n    }\n    getLine() {\n        let end = this.lineEndPos;\n        if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n            end = this.buffer.indexOf('\\n', this.pos);\n            this.lineEndPos = end;\n        }\n        if (end === -1)\n            return this.atEnd ? this.buffer.substring(this.pos) : null;\n        if (this.buffer[end - 1] === '\\r')\n            end -= 1;\n        return this.buffer.substring(this.pos, end);\n    }\n    hasChars(n) {\n        return this.pos + n <= this.buffer.length;\n    }\n    setNext(state) {\n        this.buffer = this.buffer.substring(this.pos);\n        this.pos = 0;\n        this.lineEndPos = null;\n        this.next = state;\n        return null;\n    }\n    peek(n) {\n        return this.buffer.substr(this.pos, n);\n    }\n    *parseNext(next) {\n        switch (next) {\n            case 'stream':\n                return yield* this.parseStream();\n            case 'line-start':\n                return yield* this.parseLineStart();\n            case 'block-start':\n                return yield* this.parseBlockStart();\n            case 'doc':\n                return yield* this.parseDocument();\n            case 'flow':\n                return yield* this.parseFlowCollection();\n            case 'quoted-scalar':\n                return yield* this.parseQuotedScalar();\n            case 'block-scalar':\n                return yield* this.parseBlockScalar();\n            case 'plain-scalar':\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseStream() {\n        let line = this.getLine();\n        if (line === null)\n            return this.setNext('stream');\n        if (line[0] === cst.BOM) {\n            yield* this.pushCount(1);\n            line = line.substring(1);\n        }\n        if (line[0] === '%') {\n            let dirEnd = line.length;\n            let cs = line.indexOf('#');\n            while (cs !== -1) {\n                const ch = line[cs - 1];\n                if (ch === ' ' || ch === '\\t') {\n                    dirEnd = cs - 1;\n                    break;\n                }\n                else {\n                    cs = line.indexOf('#', cs + 1);\n                }\n            }\n            while (true) {\n                const ch = line[dirEnd - 1];\n                if (ch === ' ' || ch === '\\t')\n                    dirEnd -= 1;\n                else\n                    break;\n            }\n            const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n            yield* this.pushCount(line.length - n); // possible comment\n            this.pushNewline();\n            return 'stream';\n        }\n        if (this.atLineEnd()) {\n            const sp = yield* this.pushSpaces(true);\n            yield* this.pushCount(line.length - sp);\n            yield* this.pushNewline();\n            return 'stream';\n        }\n        yield cst.DOCUMENT;\n        return yield* this.parseLineStart();\n    }\n    *parseLineStart() {\n        const ch = this.charAt(0);\n        if (!ch && !this.atEnd)\n            return this.setNext('line-start');\n        if (ch === '-' || ch === '.') {\n            if (!this.atEnd && !this.hasChars(4))\n                return this.setNext('line-start');\n            const s = this.peek(3);\n            if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n                yield* this.pushCount(3);\n                this.indentValue = 0;\n                this.indentNext = 0;\n                return s === '---' ? 'doc' : 'stream';\n            }\n        }\n        this.indentValue = yield* this.pushSpaces(false);\n        if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n            this.indentNext = this.indentValue;\n        return yield* this.parseBlockStart();\n    }\n    *parseBlockStart() {\n        const [ch0, ch1] = this.peek(2);\n        if (!ch1 && !this.atEnd)\n            return this.setNext('block-start');\n        if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n            const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n            this.indentNext = this.indentValue + 1;\n            this.indentValue += n;\n            return 'block-start';\n        }\n        return 'doc';\n    }\n    *parseDocument() {\n        yield* this.pushSpaces(true);\n        const line = this.getLine();\n        if (line === null)\n            return this.setNext('doc');\n        let n = yield* this.pushIndicators();\n        switch (line[n]) {\n            case '#':\n                yield* this.pushCount(line.length - n);\n            // fallthrough\n            case undefined:\n                yield* this.pushNewline();\n                return yield* this.parseLineStart();\n            case '{':\n            case '[':\n                yield* this.pushCount(1);\n                this.flowKey = false;\n                this.flowLevel = 1;\n                return 'flow';\n            case '}':\n            case ']':\n                // this is an error\n                yield* this.pushCount(1);\n                return 'doc';\n            case '*':\n                yield* this.pushUntil(isNotAnchorChar);\n                return 'doc';\n            case '\"':\n            case \"'\":\n                return yield* this.parseQuotedScalar();\n            case '|':\n            case '>':\n                n += yield* this.parseBlockScalarHeader();\n                n += yield* this.pushSpaces(true);\n                yield* this.pushCount(line.length - n);\n                yield* this.pushNewline();\n                return yield* this.parseBlockScalar();\n            default:\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseFlowCollection() {\n        let nl, sp;\n        let indent = -1;\n        do {\n            nl = yield* this.pushNewline();\n            if (nl > 0) {\n                sp = yield* this.pushSpaces(false);\n                this.indentValue = indent = sp;\n            }\n            else {\n                sp = 0;\n            }\n            sp += yield* this.pushSpaces(true);\n        } while (nl + sp > 0);\n        const line = this.getLine();\n        if (line === null)\n            return this.setNext('flow');\n        if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n            (indent === 0 &&\n                (line.startsWith('---') || line.startsWith('...')) &&\n                isEmpty(line[3]))) {\n            // Allowing for the terminal ] or } at the same (rather than greater)\n            // indent level as the initial [ or { is technically invalid, but\n            // failing here would be surprising to users.\n            const atFlowEndMarker = indent === this.indentNext - 1 &&\n                this.flowLevel === 1 &&\n                (line[0] === ']' || line[0] === '}');\n            if (!atFlowEndMarker) {\n                // this is an error\n                this.flowLevel = 0;\n                yield cst.FLOW_END;\n                return yield* this.parseLineStart();\n            }\n        }\n        let n = 0;\n        while (line[n] === ',') {\n            n += yield* this.pushCount(1);\n            n += yield* this.pushSpaces(true);\n            this.flowKey = false;\n        }\n        n += yield* this.pushIndicators();\n        switch (line[n]) {\n            case undefined:\n                return 'flow';\n            case '#':\n                yield* this.pushCount(line.length - n);\n                return 'flow';\n            case '{':\n            case '[':\n                yield* this.pushCount(1);\n                this.flowKey = false;\n                this.flowLevel += 1;\n                return 'flow';\n            case '}':\n            case ']':\n                yield* this.pushCount(1);\n                this.flowKey = true;\n                this.flowLevel -= 1;\n                return this.flowLevel ? 'flow' : 'doc';\n            case '*':\n                yield* this.pushUntil(isNotAnchorChar);\n                return 'flow';\n            case '\"':\n            case \"'\":\n                this.flowKey = true;\n                return yield* this.parseQuotedScalar();\n            case ':': {\n                const next = this.charAt(1);\n                if (this.flowKey || isEmpty(next) || next === ',') {\n                    this.flowKey = false;\n                    yield* this.pushCount(1);\n                    yield* this.pushSpaces(true);\n                    return 'flow';\n                }\n            }\n            // fallthrough\n            default:\n                this.flowKey = false;\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseQuotedScalar() {\n        const quote = this.charAt(0);\n        let end = this.buffer.indexOf(quote, this.pos + 1);\n        if (quote === \"'\") {\n            while (end !== -1 && this.buffer[end + 1] === \"'\")\n                end = this.buffer.indexOf(\"'\", end + 2);\n        }\n        else {\n            // double-quote\n            while (end !== -1) {\n                let n = 0;\n                while (this.buffer[end - 1 - n] === '\\\\')\n                    n += 1;\n                if (n % 2 === 0)\n                    break;\n                end = this.buffer.indexOf('\"', end + 1);\n            }\n        }\n        // Only looking for newlines within the quotes\n        const qb = this.buffer.substring(0, end);\n        let nl = qb.indexOf('\\n', this.pos);\n        if (nl !== -1) {\n            while (nl !== -1) {\n                const cs = this.continueScalar(nl + 1);\n                if (cs === -1)\n                    break;\n                nl = qb.indexOf('\\n', cs);\n            }\n            if (nl !== -1) {\n                // this is an error caused by an unexpected unindent\n                end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n            }\n        }\n        if (end === -1) {\n            if (!this.atEnd)\n                return this.setNext('quoted-scalar');\n            end = this.buffer.length;\n        }\n        yield* this.pushToIndex(end + 1, false);\n        return this.flowLevel ? 'flow' : 'doc';\n    }\n    *parseBlockScalarHeader() {\n        this.blockScalarIndent = -1;\n        this.blockScalarKeep = false;\n        let i = this.pos;\n        while (true) {\n            const ch = this.buffer[++i];\n            if (ch === '+')\n                this.blockScalarKeep = true;\n            else if (ch > '0' && ch <= '9')\n                this.blockScalarIndent = Number(ch) - 1;\n            else if (ch !== '-')\n                break;\n        }\n        return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n    }\n    *parseBlockScalar() {\n        let nl = this.pos - 1; // may be -1 if this.pos === 0\n        let indent = 0;\n        let ch;\n        loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n            switch (ch) {\n                case ' ':\n                    indent += 1;\n                    break;\n                case '\\n':\n                    nl = i;\n                    indent = 0;\n                    break;\n                case '\\r': {\n                    const next = this.buffer[i + 1];\n                    if (!next && !this.atEnd)\n                        return this.setNext('block-scalar');\n                    if (next === '\\n')\n                        break;\n                } // fallthrough\n                default:\n                    break loop;\n            }\n        }\n        if (!ch && !this.atEnd)\n            return this.setNext('block-scalar');\n        if (indent >= this.indentNext) {\n            if (this.blockScalarIndent === -1)\n                this.indentNext = indent;\n            else {\n                this.indentNext =\n                    this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n            }\n            do {\n                const cs = this.continueScalar(nl + 1);\n                if (cs === -1)\n                    break;\n                nl = this.buffer.indexOf('\\n', cs);\n            } while (nl !== -1);\n            if (nl === -1) {\n                if (!this.atEnd)\n                    return this.setNext('block-scalar');\n                nl = this.buffer.length;\n            }\n        }\n        // Trailing insufficiently indented tabs are invalid.\n        // To catch that during parsing, we include them in the block scalar value.\n        let i = nl + 1;\n        ch = this.buffer[i];\n        while (ch === ' ')\n            ch = this.buffer[++i];\n        if (ch === '\\t') {\n            while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n                ch = this.buffer[++i];\n            nl = i - 1;\n        }\n        else if (!this.blockScalarKeep) {\n            do {\n                let i = nl - 1;\n                let ch = this.buffer[i];\n                if (ch === '\\r')\n                    ch = this.buffer[--i];\n                const lastChar = i; // Drop the line if last char not more indented\n                while (ch === ' ')\n                    ch = this.buffer[--i];\n                if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n                    nl = i;\n                else\n                    break;\n            } while (true);\n        }\n        yield cst.SCALAR;\n        yield* this.pushToIndex(nl + 1, true);\n        return yield* this.parseLineStart();\n    }\n    *parsePlainScalar() {\n        const inFlow = this.flowLevel > 0;\n        let end = this.pos - 1;\n        let i = this.pos - 1;\n        let ch;\n        while ((ch = this.buffer[++i])) {\n            if (ch === ':') {\n                const next = this.buffer[i + 1];\n                if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n                    break;\n                end = i;\n            }\n            else if (isEmpty(ch)) {\n                let next = this.buffer[i + 1];\n                if (ch === '\\r') {\n                    if (next === '\\n') {\n                        i += 1;\n                        ch = '\\n';\n                        next = this.buffer[i + 1];\n                    }\n                    else\n                        end = i;\n                }\n                if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n                    break;\n                if (ch === '\\n') {\n                    const cs = this.continueScalar(i + 1);\n                    if (cs === -1)\n                        break;\n                    i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n                }\n            }\n            else {\n                if (inFlow && flowIndicatorChars.has(ch))\n                    break;\n                end = i;\n            }\n        }\n        if (!ch && !this.atEnd)\n            return this.setNext('plain-scalar');\n        yield cst.SCALAR;\n        yield* this.pushToIndex(end + 1, true);\n        return inFlow ? 'flow' : 'doc';\n    }\n    *pushCount(n) {\n        if (n > 0) {\n            yield this.buffer.substr(this.pos, n);\n            this.pos += n;\n            return n;\n        }\n        return 0;\n    }\n    *pushToIndex(i, allowEmpty) {\n        const s = this.buffer.slice(this.pos, i);\n        if (s) {\n            yield s;\n            this.pos += s.length;\n            return s.length;\n        }\n        else if (allowEmpty)\n            yield '';\n        return 0;\n    }\n    *pushIndicators() {\n        let n = 0;\n        loop: while (true) {\n            switch (this.charAt(0)) {\n                case '!':\n                    n += yield* this.pushTag();\n                    n += yield* this.pushSpaces(true);\n                    continue loop;\n                case '&':\n                    n += yield* this.pushUntil(isNotAnchorChar);\n                    n += yield* this.pushSpaces(true);\n                    continue loop;\n                case '-': // this is an error\n                case '?': // this is an error outside flow collections\n                case ':': {\n                    const inFlow = this.flowLevel > 0;\n                    const ch1 = this.charAt(1);\n                    if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n                        if (!inFlow)\n                            this.indentNext = this.indentValue + 1;\n                        else if (this.flowKey)\n                            this.flowKey = false;\n                        n += yield* this.pushCount(1);\n                        n += yield* this.pushSpaces(true);\n                        continue loop;\n                    }\n                }\n            }\n            break loop;\n        }\n        return n;\n    }\n    *pushTag() {\n        if (this.charAt(1) === '<') {\n            let i = this.pos + 2;\n            let ch = this.buffer[i];\n            while (!isEmpty(ch) && ch !== '>')\n                ch = this.buffer[++i];\n            return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n        }\n        else {\n            let i = this.pos + 1;\n            let ch = this.buffer[i];\n            while (ch) {\n                if (tagChars.has(ch))\n                    ch = this.buffer[++i];\n                else if (ch === '%' &&\n                    hexDigits.has(this.buffer[i + 1]) &&\n                    hexDigits.has(this.buffer[i + 2])) {\n                    ch = this.buffer[(i += 3)];\n                }\n                else\n                    break;\n            }\n            return yield* this.pushToIndex(i, false);\n        }\n    }\n    *pushNewline() {\n        const ch = this.buffer[this.pos];\n        if (ch === '\\n')\n            return yield* this.pushCount(1);\n        else if (ch === '\\r' && this.charAt(1) === '\\n')\n            return yield* this.pushCount(2);\n        else\n            return 0;\n    }\n    *pushSpaces(allowTabs) {\n        let i = this.pos - 1;\n        let ch;\n        do {\n            ch = this.buffer[++i];\n        } while (ch === ' ' || (allowTabs && ch === '\\t'));\n        const n = i - this.pos;\n        if (n > 0) {\n            yield this.buffer.substr(this.pos, n);\n            this.pos = i;\n        }\n        return n;\n    }\n    *pushUntil(test) {\n        let i = this.pos;\n        let ch = this.buffer[i];\n        while (!test(ch))\n            ch = this.buffer[++i];\n        return yield* this.pushToIndex(i, false);\n    }\n}\n\nexports.Lexer = Lexer;\n","'use strict';\n\n/**\n * Tracks newlines during parsing in order to provide an efficient API for\n * determining the one-indexed `{ line, col }` position for any offset\n * within the input.\n */\nclass LineCounter {\n    constructor() {\n        this.lineStarts = [];\n        /**\n         * Should be called in ascending order. Otherwise, call\n         * `lineCounter.lineStarts.sort()` before calling `linePos()`.\n         */\n        this.addNewLine = (offset) => this.lineStarts.push(offset);\n        /**\n         * Performs a binary search and returns the 1-indexed { line, col }\n         * position of `offset`. If `line === 0`, `addNewLine` has never been\n         * called or `offset` is before the first known newline.\n         */\n        this.linePos = (offset) => {\n            let low = 0;\n            let high = this.lineStarts.length;\n            while (low < high) {\n                const mid = (low + high) >> 1; // Math.floor((low + high) / 2)\n                if (this.lineStarts[mid] < offset)\n                    low = mid + 1;\n                else\n                    high = mid;\n            }\n            if (this.lineStarts[low] === offset)\n                return { line: low + 1, col: 1 };\n            if (low === 0)\n                return { line: 0, col: offset };\n            const start = this.lineStarts[low - 1];\n            return { line: low, col: offset - start + 1 };\n        };\n    }\n}\n\nexports.LineCounter = LineCounter;\n","'use strict';\n\nvar node_process = require('process');\nvar cst = require('./cst.js');\nvar lexer = require('./lexer.js');\n\nfunction includesToken(list, type) {\n    for (let i = 0; i < list.length; ++i)\n        if (list[i].type === type)\n            return true;\n    return false;\n}\nfunction findNonEmptyIndex(list) {\n    for (let i = 0; i < list.length; ++i) {\n        switch (list[i].type) {\n            case 'space':\n            case 'comment':\n            case 'newline':\n                break;\n            default:\n                return i;\n        }\n    }\n    return -1;\n}\nfunction isFlowToken(token) {\n    switch (token?.type) {\n        case 'alias':\n        case 'scalar':\n        case 'single-quoted-scalar':\n        case 'double-quoted-scalar':\n        case 'flow-collection':\n            return true;\n        default:\n            return false;\n    }\n}\nfunction getPrevProps(parent) {\n    switch (parent.type) {\n        case 'document':\n            return parent.start;\n        case 'block-map': {\n            const it = parent.items[parent.items.length - 1];\n            return it.sep ?? it.start;\n        }\n        case 'block-seq':\n            return parent.items[parent.items.length - 1].start;\n        /* istanbul ignore next should not happen */\n        default:\n            return [];\n    }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n    if (prev.length === 0)\n        return [];\n    let i = prev.length;\n    loop: while (--i >= 0) {\n        switch (prev[i].type) {\n            case 'doc-start':\n            case 'explicit-key-ind':\n            case 'map-value-ind':\n            case 'seq-item-ind':\n            case 'newline':\n                break loop;\n        }\n    }\n    while (prev[++i]?.type === 'space') {\n        /* loop */\n    }\n    return prev.splice(i, prev.length);\n}\nfunction arrayPushArray(target, source) {\n    // May exhaust call stack with large `source` array\n    if (source.length < 1e5)\n        Array.prototype.push.apply(target, source);\n    else\n        for (let i = 0; i < source.length; ++i)\n            target.push(source[i]);\n}\nfunction fixFlowSeqItems(fc) {\n    if (fc.start.type === 'flow-seq-start') {\n        for (const it of fc.items) {\n            if (it.sep &&\n                !it.value &&\n                !includesToken(it.start, 'explicit-key-ind') &&\n                !includesToken(it.sep, 'map-value-ind')) {\n                if (it.key)\n                    it.value = it.key;\n                delete it.key;\n                if (isFlowToken(it.value)) {\n                    if (it.value.end)\n                        arrayPushArray(it.value.end, it.sep);\n                    else\n                        it.value.end = it.sep;\n                }\n                else\n                    arrayPushArray(it.start, it.sep);\n                delete it.sep;\n            }\n        }\n    }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n *   // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n *   const parser = new Parser()\n *   for (const lexeme of lexer.lex(source))\n *     yield* parser.next(lexeme)\n *   yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n *   // token: Token\n * }\n * ```\n */\nclass Parser {\n    /**\n     * @param onNewLine - If defined, called separately with the start position of\n     *   each new line (in `parse()`, including the start of input).\n     */\n    constructor(onNewLine) {\n        /** If true, space and sequence indicators count as indentation */\n        this.atNewLine = true;\n        /** If true, next token is a scalar value */\n        this.atScalar = false;\n        /** Current indentation level */\n        this.indent = 0;\n        /** Current offset since the start of parsing */\n        this.offset = 0;\n        /** On the same line with a block map key */\n        this.onKeyLine = false;\n        /** Top indicates the node that's currently being built */\n        this.stack = [];\n        /** The source of the current token, set in parse() */\n        this.source = '';\n        /** The type of the current token, set in parse() */\n        this.type = '';\n        // Must be defined after `next()`\n        this.lexer = new lexer.Lexer();\n        this.onNewLine = onNewLine;\n    }\n    /**\n     * Parse `source` as a YAML stream.\n     * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n     *\n     * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n     *\n     * @returns A generator of tokens representing each directive, document, and other structure.\n     */\n    *parse(source, incomplete = false) {\n        if (this.onNewLine && this.offset === 0)\n            this.onNewLine(0);\n        for (const lexeme of this.lexer.lex(source, incomplete))\n            yield* this.next(lexeme);\n        if (!incomplete)\n            yield* this.end();\n    }\n    /**\n     * Advance the parser by the `source` of one lexical token.\n     */\n    *next(source) {\n        this.source = source;\n        if (node_process.env.LOG_TOKENS)\n            console.log('|', cst.prettyToken(source));\n        if (this.atScalar) {\n            this.atScalar = false;\n            yield* this.step();\n            this.offset += source.length;\n            return;\n        }\n        const type = cst.tokenType(source);\n        if (!type) {\n            const message = `Not a YAML token: ${source}`;\n            yield* this.pop({ type: 'error', offset: this.offset, message, source });\n            this.offset += source.length;\n        }\n        else if (type === 'scalar') {\n            this.atNewLine = false;\n            this.atScalar = true;\n            this.type = 'scalar';\n        }\n        else {\n            this.type = type;\n            yield* this.step();\n            switch (type) {\n                case 'newline':\n                    this.atNewLine = true;\n                    this.indent = 0;\n                    if (this.onNewLine)\n                        this.onNewLine(this.offset + source.length);\n                    break;\n                case 'space':\n                    if (this.atNewLine && source[0] === ' ')\n                        this.indent += source.length;\n                    break;\n                case 'explicit-key-ind':\n                case 'map-value-ind':\n                case 'seq-item-ind':\n                    if (this.atNewLine)\n                        this.indent += source.length;\n                    break;\n                case 'doc-mode':\n                case 'flow-error-end':\n                    return;\n                default:\n                    this.atNewLine = false;\n            }\n            this.offset += source.length;\n        }\n    }\n    /** Call at end of input to push out any remaining constructions */\n    *end() {\n        while (this.stack.length > 0)\n            yield* this.pop();\n    }\n    get sourceToken() {\n        const st = {\n            type: this.type,\n            offset: this.offset,\n            indent: this.indent,\n            source: this.source\n        };\n        return st;\n    }\n    *step() {\n        const top = this.peek(1);\n        if (this.type === 'doc-end' && top?.type !== 'doc-end') {\n            while (this.stack.length > 0)\n                yield* this.pop();\n            this.stack.push({\n                type: 'doc-end',\n                offset: this.offset,\n                source: this.source\n            });\n            return;\n        }\n        if (!top)\n            return yield* this.stream();\n        switch (top.type) {\n            case 'document':\n                return yield* this.document(top);\n            case 'alias':\n            case 'scalar':\n            case 'single-quoted-scalar':\n            case 'double-quoted-scalar':\n                return yield* this.scalar(top);\n            case 'block-scalar':\n                return yield* this.blockScalar(top);\n            case 'block-map':\n                return yield* this.blockMap(top);\n            case 'block-seq':\n                return yield* this.blockSequence(top);\n            case 'flow-collection':\n                return yield* this.flowCollection(top);\n            case 'doc-end':\n                return yield* this.documentEnd(top);\n        }\n        /* istanbul ignore next should not happen */\n        yield* this.pop();\n    }\n    peek(n) {\n        return this.stack[this.stack.length - n];\n    }\n    *pop(error) {\n        const token = error ?? this.stack.pop();\n        /* istanbul ignore if should not happen */\n        if (!token) {\n            const message = 'Tried to pop an empty stack';\n            yield { type: 'error', offset: this.offset, source: '', message };\n        }\n        else if (this.stack.length === 0) {\n            yield token;\n        }\n        else {\n            const top = this.peek(1);\n            if (token.type === 'block-scalar') {\n                // Block scalars use their parent rather than header indent\n                token.indent = 'indent' in top ? top.indent : 0;\n            }\n            else if (token.type === 'flow-collection' && top.type === 'document') {\n                // Ignore all indent for top-level flow collections\n                token.indent = 0;\n            }\n            if (token.type === 'flow-collection')\n                fixFlowSeqItems(token);\n            switch (top.type) {\n                case 'document':\n                    top.value = token;\n                    break;\n                case 'block-scalar':\n                    top.props.push(token); // error\n                    break;\n                case 'block-map': {\n                    const it = top.items[top.items.length - 1];\n                    if (it.value) {\n                        top.items.push({ start: [], key: token, sep: [] });\n                        this.onKeyLine = true;\n                        return;\n                    }\n                    else if (it.sep) {\n                        it.value = token;\n                    }\n                    else {\n                        Object.assign(it, { key: token, sep: [] });\n                        this.onKeyLine = !it.explicitKey;\n                        return;\n                    }\n                    break;\n                }\n                case 'block-seq': {\n                    const it = top.items[top.items.length - 1];\n                    if (it.value)\n                        top.items.push({ start: [], value: token });\n                    else\n                        it.value = token;\n                    break;\n                }\n                case 'flow-collection': {\n                    const it = top.items[top.items.length - 1];\n                    if (!it || it.value)\n                        top.items.push({ start: [], key: token, sep: [] });\n                    else if (it.sep)\n                        it.value = token;\n                    else\n                        Object.assign(it, { key: token, sep: [] });\n                    return;\n                }\n                /* istanbul ignore next should not happen */\n                default:\n                    yield* this.pop();\n                    yield* this.pop(token);\n            }\n            if ((top.type === 'document' ||\n                top.type === 'block-map' ||\n                top.type === 'block-seq') &&\n                (token.type === 'block-map' || token.type === 'block-seq')) {\n                const last = token.items[token.items.length - 1];\n                if (last &&\n                    !last.sep &&\n                    !last.value &&\n                    last.start.length > 0 &&\n                    findNonEmptyIndex(last.start) === -1 &&\n                    (token.indent === 0 ||\n                        last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n                    if (top.type === 'document')\n                        top.end = last.start;\n                    else\n                        top.items.push({ start: last.start });\n                    token.items.splice(-1, 1);\n                }\n            }\n        }\n    }\n    *stream() {\n        switch (this.type) {\n            case 'directive-line':\n                yield { type: 'directive', offset: this.offset, source: this.source };\n                return;\n            case 'byte-order-mark':\n            case 'space':\n            case 'comment':\n            case 'newline':\n                yield this.sourceToken;\n                return;\n            case 'doc-mode':\n            case 'doc-start': {\n                const doc = {\n                    type: 'document',\n                    offset: this.offset,\n                    start: []\n                };\n                if (this.type === 'doc-start')\n                    doc.start.push(this.sourceToken);\n                this.stack.push(doc);\n                return;\n            }\n        }\n        yield {\n            type: 'error',\n            offset: this.offset,\n            message: `Unexpected ${this.type} token in YAML stream`,\n            source: this.source\n        };\n    }\n    *document(doc) {\n        if (doc.value)\n            return yield* this.lineEnd(doc);\n        switch (this.type) {\n            case 'doc-start': {\n                if (findNonEmptyIndex(doc.start) !== -1) {\n                    yield* this.pop();\n                    yield* this.step();\n                }\n                else\n                    doc.start.push(this.sourceToken);\n                return;\n            }\n            case 'anchor':\n            case 'tag':\n            case 'space':\n            case 'comment':\n            case 'newline':\n                doc.start.push(this.sourceToken);\n                return;\n        }\n        const bv = this.startBlockValue(doc);\n        if (bv)\n            this.stack.push(bv);\n        else {\n            yield {\n                type: 'error',\n                offset: this.offset,\n                message: `Unexpected ${this.type} token in YAML document`,\n                source: this.source\n            };\n        }\n    }\n    *scalar(scalar) {\n        if (this.type === 'map-value-ind') {\n            const prev = getPrevProps(this.peek(2));\n            const start = getFirstKeyStartProps(prev);\n            let sep;\n            if (scalar.end) {\n                sep = scalar.end;\n                sep.push(this.sourceToken);\n                delete scalar.end;\n            }\n            else\n                sep = [this.sourceToken];\n            const map = {\n                type: 'block-map',\n                offset: scalar.offset,\n                indent: scalar.indent,\n                items: [{ start, key: scalar, sep }]\n            };\n            this.onKeyLine = true;\n            this.stack[this.stack.length - 1] = map;\n        }\n        else\n            yield* this.lineEnd(scalar);\n    }\n    *blockScalar(scalar) {\n        switch (this.type) {\n            case 'space':\n            case 'comment':\n            case 'newline':\n                scalar.props.push(this.sourceToken);\n                return;\n            case 'scalar':\n                scalar.source = this.source;\n                // block-scalar source includes trailing newline\n                this.atNewLine = true;\n                this.indent = 0;\n                if (this.onNewLine) {\n                    let nl = this.source.indexOf('\\n') + 1;\n                    while (nl !== 0) {\n                        this.onNewLine(this.offset + nl);\n                        nl = this.source.indexOf('\\n', nl) + 1;\n                    }\n                }\n                yield* this.pop();\n                break;\n            /* istanbul ignore next should not happen */\n            default:\n                yield* this.pop();\n                yield* this.step();\n        }\n    }\n    *blockMap(map) {\n        const it = map.items[map.items.length - 1];\n        // it.sep is true-ish if pair already has key or : separator\n        switch (this.type) {\n            case 'newline':\n                this.onKeyLine = false;\n                if (it.value) {\n                    const end = 'end' in it.value ? it.value.end : undefined;\n                    const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n                    if (last?.type === 'comment')\n                        end?.push(this.sourceToken);\n                    else\n                        map.items.push({ start: [this.sourceToken] });\n                }\n                else if (it.sep) {\n                    it.sep.push(this.sourceToken);\n                }\n                else {\n                    it.start.push(this.sourceToken);\n                }\n                return;\n            case 'space':\n            case 'comment':\n                if (it.value) {\n                    map.items.push({ start: [this.sourceToken] });\n                }\n                else if (it.sep) {\n                    it.sep.push(this.sourceToken);\n                }\n                else {\n                    if (this.atIndentedComment(it.start, map.indent)) {\n                        const prev = map.items[map.items.length - 2];\n                        const end = prev?.value?.end;\n                        if (Array.isArray(end)) {\n                            arrayPushArray(end, it.start);\n                            end.push(this.sourceToken);\n                            map.items.pop();\n                            return;\n                        }\n                    }\n                    it.start.push(this.sourceToken);\n                }\n                return;\n        }\n        if (this.indent >= map.indent) {\n            const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n            const atNextItem = atMapIndent &&\n                (it.sep || it.explicitKey) &&\n                this.type !== 'seq-item-ind';\n            // For empty nodes, assign newline-separated not indented empty tokens to following node\n            let start = [];\n            if (atNextItem && it.sep && !it.value) {\n                const nl = [];\n                for (let i = 0; i < it.sep.length; ++i) {\n                    const st = it.sep[i];\n                    switch (st.type) {\n                        case 'newline':\n                            nl.push(i);\n                            break;\n                        case 'space':\n                            break;\n                        case 'comment':\n                            if (st.indent > map.indent)\n                                nl.length = 0;\n                            break;\n                        default:\n                            nl.length = 0;\n                    }\n                }\n                if (nl.length >= 2)\n                    start = it.sep.splice(nl[1]);\n            }\n            switch (this.type) {\n                case 'anchor':\n                case 'tag':\n                    if (atNextItem || it.value) {\n                        start.push(this.sourceToken);\n                        map.items.push({ start });\n                        this.onKeyLine = true;\n                    }\n                    else if (it.sep) {\n                        it.sep.push(this.sourceToken);\n                    }\n                    else {\n                        it.start.push(this.sourceToken);\n                    }\n                    return;\n                case 'explicit-key-ind':\n                    if (!it.sep && !it.explicitKey) {\n                        it.start.push(this.sourceToken);\n                        it.explicitKey = true;\n                    }\n                    else if (atNextItem || it.value) {\n                        start.push(this.sourceToken);\n                        map.items.push({ start, explicitKey: true });\n                    }\n                    else {\n                        this.stack.push({\n                            type: 'block-map',\n                            offset: this.offset,\n                            indent: this.indent,\n                            items: [{ start: [this.sourceToken], explicitKey: true }]\n                        });\n                    }\n                    this.onKeyLine = true;\n                    return;\n                case 'map-value-ind':\n                    if (it.explicitKey) {\n                        if (!it.sep) {\n                            if (includesToken(it.start, 'newline')) {\n                                Object.assign(it, { key: null, sep: [this.sourceToken] });\n                            }\n                            else {\n                                const start = getFirstKeyStartProps(it.start);\n                                this.stack.push({\n                                    type: 'block-map',\n                                    offset: this.offset,\n                                    indent: this.indent,\n                                    items: [{ start, key: null, sep: [this.sourceToken] }]\n                                });\n                            }\n                        }\n                        else if (it.value) {\n                            map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n                        }\n                        else if (includesToken(it.sep, 'map-value-ind')) {\n                            this.stack.push({\n                                type: 'block-map',\n                                offset: this.offset,\n                                indent: this.indent,\n                                items: [{ start, key: null, sep: [this.sourceToken] }]\n                            });\n                        }\n                        else if (isFlowToken(it.key) &&\n                            !includesToken(it.sep, 'newline')) {\n                            const start = getFirstKeyStartProps(it.start);\n                            const key = it.key;\n                            const sep = it.sep;\n                            sep.push(this.sourceToken);\n                            // @ts-expect-error type guard is wrong here\n                            delete it.key;\n                            // @ts-expect-error type guard is wrong here\n                            delete it.sep;\n                            this.stack.push({\n                                type: 'block-map',\n                                offset: this.offset,\n                                indent: this.indent,\n                                items: [{ start, key, sep }]\n                            });\n                        }\n                        else if (start.length > 0) {\n                            // Not actually at next item\n                            it.sep = it.sep.concat(start, this.sourceToken);\n                        }\n                        else {\n                            it.sep.push(this.sourceToken);\n                        }\n                    }\n                    else {\n                        if (!it.sep) {\n                            Object.assign(it, { key: null, sep: [this.sourceToken] });\n                        }\n                        else if (it.value || atNextItem) {\n                            map.items.push({ start, key: null, sep: [this.sourceToken] });\n                        }\n                        else if (includesToken(it.sep, 'map-value-ind')) {\n                            this.stack.push({\n                                type: 'block-map',\n                                offset: this.offset,\n                                indent: this.indent,\n                                items: [{ start: [], key: null, sep: [this.sourceToken] }]\n                            });\n                        }\n                        else {\n                            it.sep.push(this.sourceToken);\n                        }\n                    }\n                    this.onKeyLine = true;\n                    return;\n                case 'alias':\n                case 'scalar':\n                case 'single-quoted-scalar':\n                case 'double-quoted-scalar': {\n                    const fs = this.flowScalar(this.type);\n                    if (atNextItem || it.value) {\n                        map.items.push({ start, key: fs, sep: [] });\n                        this.onKeyLine = true;\n                    }\n                    else if (it.sep) {\n                        this.stack.push(fs);\n                    }\n                    else {\n                        Object.assign(it, { key: fs, sep: [] });\n                        this.onKeyLine = true;\n                    }\n                    return;\n                }\n                default: {\n                    const bv = this.startBlockValue(map);\n                    if (bv) {\n                        if (bv.type === 'block-seq') {\n                            if (!it.explicitKey &&\n                                it.sep &&\n                                !includesToken(it.sep, 'newline')) {\n                                yield* this.pop({\n                                    type: 'error',\n                                    offset: this.offset,\n                                    message: 'Unexpected block-seq-ind on same line with key',\n                                    source: this.source\n                                });\n                                return;\n                            }\n                        }\n                        else if (atMapIndent) {\n                            map.items.push({ start });\n                        }\n                        this.stack.push(bv);\n                        return;\n                    }\n                }\n            }\n        }\n        yield* this.pop();\n        yield* this.step();\n    }\n    *blockSequence(seq) {\n        const it = seq.items[seq.items.length - 1];\n        switch (this.type) {\n            case 'newline':\n                if (it.value) {\n                    const end = 'end' in it.value ? it.value.end : undefined;\n                    const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n                    if (last?.type === 'comment')\n                        end?.push(this.sourceToken);\n                    else\n                        seq.items.push({ start: [this.sourceToken] });\n                }\n                else\n                    it.start.push(this.sourceToken);\n                return;\n            case 'space':\n            case 'comment':\n                if (it.value)\n                    seq.items.push({ start: [this.sourceToken] });\n                else {\n                    if (this.atIndentedComment(it.start, seq.indent)) {\n                        const prev = seq.items[seq.items.length - 2];\n                        const end = prev?.value?.end;\n                        if (Array.isArray(end)) {\n                            arrayPushArray(end, it.start);\n                            end.push(this.sourceToken);\n                            seq.items.pop();\n                            return;\n                        }\n                    }\n                    it.start.push(this.sourceToken);\n                }\n                return;\n            case 'anchor':\n            case 'tag':\n                if (it.value || this.indent <= seq.indent)\n                    break;\n                it.start.push(this.sourceToken);\n                return;\n            case 'seq-item-ind':\n                if (this.indent !== seq.indent)\n                    break;\n                if (it.value || includesToken(it.start, 'seq-item-ind'))\n                    seq.items.push({ start: [this.sourceToken] });\n                else\n                    it.start.push(this.sourceToken);\n                return;\n        }\n        if (this.indent > seq.indent) {\n            const bv = this.startBlockValue(seq);\n            if (bv) {\n                this.stack.push(bv);\n                return;\n            }\n        }\n        yield* this.pop();\n        yield* this.step();\n    }\n    *flowCollection(fc) {\n        const it = fc.items[fc.items.length - 1];\n        if (this.type === 'flow-error-end') {\n            let top;\n            do {\n                yield* this.pop();\n                top = this.peek(1);\n            } while (top?.type === 'flow-collection');\n        }\n        else if (fc.end.length === 0) {\n            switch (this.type) {\n                case 'comma':\n                case 'explicit-key-ind':\n                    if (!it || it.sep)\n                        fc.items.push({ start: [this.sourceToken] });\n                    else\n                        it.start.push(this.sourceToken);\n                    return;\n                case 'map-value-ind':\n                    if (!it || it.value)\n                        fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n                    else if (it.sep)\n                        it.sep.push(this.sourceToken);\n                    else\n                        Object.assign(it, { key: null, sep: [this.sourceToken] });\n                    return;\n                case 'space':\n                case 'comment':\n                case 'newline':\n                case 'anchor':\n                case 'tag':\n                    if (!it || it.value)\n                        fc.items.push({ start: [this.sourceToken] });\n                    else if (it.sep)\n                        it.sep.push(this.sourceToken);\n                    else\n                        it.start.push(this.sourceToken);\n                    return;\n                case 'alias':\n                case 'scalar':\n                case 'single-quoted-scalar':\n                case 'double-quoted-scalar': {\n                    const fs = this.flowScalar(this.type);\n                    if (!it || it.value)\n                        fc.items.push({ start: [], key: fs, sep: [] });\n                    else if (it.sep)\n                        this.stack.push(fs);\n                    else\n                        Object.assign(it, { key: fs, sep: [] });\n                    return;\n                }\n                case 'flow-map-end':\n                case 'flow-seq-end':\n                    fc.end.push(this.sourceToken);\n                    return;\n            }\n            const bv = this.startBlockValue(fc);\n            /* istanbul ignore else should not happen */\n            if (bv)\n                this.stack.push(bv);\n            else {\n                yield* this.pop();\n                yield* this.step();\n            }\n        }\n        else {\n            const parent = this.peek(2);\n            if (parent.type === 'block-map' &&\n                ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n                    (this.type === 'newline' &&\n                        !parent.items[parent.items.length - 1].sep))) {\n                yield* this.pop();\n                yield* this.step();\n            }\n            else if (this.type === 'map-value-ind' &&\n                parent.type !== 'flow-collection') {\n                const prev = getPrevProps(parent);\n                const start = getFirstKeyStartProps(prev);\n                fixFlowSeqItems(fc);\n                const sep = fc.end.splice(1, fc.end.length);\n                sep.push(this.sourceToken);\n                const map = {\n                    type: 'block-map',\n                    offset: fc.offset,\n                    indent: fc.indent,\n                    items: [{ start, key: fc, sep }]\n                };\n                this.onKeyLine = true;\n                this.stack[this.stack.length - 1] = map;\n            }\n            else {\n                yield* this.lineEnd(fc);\n            }\n        }\n    }\n    flowScalar(type) {\n        if (this.onNewLine) {\n            let nl = this.source.indexOf('\\n') + 1;\n            while (nl !== 0) {\n                this.onNewLine(this.offset + nl);\n                nl = this.source.indexOf('\\n', nl) + 1;\n            }\n        }\n        return {\n            type,\n            offset: this.offset,\n            indent: this.indent,\n            source: this.source\n        };\n    }\n    startBlockValue(parent) {\n        switch (this.type) {\n            case 'alias':\n            case 'scalar':\n            case 'single-quoted-scalar':\n            case 'double-quoted-scalar':\n                return this.flowScalar(this.type);\n            case 'block-scalar-header':\n                return {\n                    type: 'block-scalar',\n                    offset: this.offset,\n                    indent: this.indent,\n                    props: [this.sourceToken],\n                    source: ''\n                };\n            case 'flow-map-start':\n            case 'flow-seq-start':\n                return {\n                    type: 'flow-collection',\n                    offset: this.offset,\n                    indent: this.indent,\n                    start: this.sourceToken,\n                    items: [],\n                    end: []\n                };\n            case 'seq-item-ind':\n                return {\n                    type: 'block-seq',\n                    offset: this.offset,\n                    indent: this.indent,\n                    items: [{ start: [this.sourceToken] }]\n                };\n            case 'explicit-key-ind': {\n                this.onKeyLine = true;\n                const prev = getPrevProps(parent);\n                const start = getFirstKeyStartProps(prev);\n                start.push(this.sourceToken);\n                return {\n                    type: 'block-map',\n                    offset: this.offset,\n                    indent: this.indent,\n                    items: [{ start, explicitKey: true }]\n                };\n            }\n            case 'map-value-ind': {\n                this.onKeyLine = true;\n                const prev = getPrevProps(parent);\n                const start = getFirstKeyStartProps(prev);\n                return {\n                    type: 'block-map',\n                    offset: this.offset,\n                    indent: this.indent,\n                    items: [{ start, key: null, sep: [this.sourceToken] }]\n                };\n            }\n        }\n        return null;\n    }\n    atIndentedComment(start, indent) {\n        if (this.type !== 'comment')\n            return false;\n        if (this.indent <= indent)\n            return false;\n        return start.every(st => st.type === 'newline' || st.type === 'space');\n    }\n    *documentEnd(docEnd) {\n        if (this.type !== 'doc-mode') {\n            if (docEnd.end)\n                docEnd.end.push(this.sourceToken);\n            else\n                docEnd.end = [this.sourceToken];\n            if (this.type === 'newline')\n                yield* this.pop();\n        }\n    }\n    *lineEnd(token) {\n        switch (this.type) {\n            case 'comma':\n            case 'doc-start':\n            case 'doc-end':\n            case 'flow-seq-end':\n            case 'flow-map-end':\n            case 'map-value-ind':\n                yield* this.pop();\n                yield* this.step();\n                break;\n            case 'newline':\n                this.onKeyLine = false;\n            // fallthrough\n            case 'space':\n            case 'comment':\n            default:\n                // all other values are errors\n                if (token.end)\n                    token.end.push(this.sourceToken);\n                else\n                    token.end = [this.sourceToken];\n                if (this.type === 'newline')\n                    yield* this.pop();\n        }\n    }\n}\n\nexports.Parser = Parser;\n","'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar errors = require('./errors.js');\nvar log = require('./log.js');\nvar identity = require('./nodes/identity.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\n\nfunction parseOptions(options) {\n    const prettyErrors = options.prettyErrors !== false;\n    const lineCounter$1 = options.lineCounter || (prettyErrors && new lineCounter.LineCounter()) || null;\n    return { lineCounter: lineCounter$1, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n *   EmptyStream and contain additional stream information. In\n *   TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n    const { lineCounter, prettyErrors } = parseOptions(options);\n    const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n    const composer$1 = new composer.Composer(options);\n    const docs = Array.from(composer$1.compose(parser$1.parse(source)));\n    if (prettyErrors && lineCounter)\n        for (const doc of docs) {\n            doc.errors.forEach(errors.prettifyError(source, lineCounter));\n            doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n        }\n    if (docs.length > 0)\n        return docs;\n    return Object.assign([], { empty: true }, composer$1.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n    const { lineCounter, prettyErrors } = parseOptions(options);\n    const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n    const composer$1 = new composer.Composer(options);\n    // `doc` is always set by compose.end(true) at the very latest\n    let doc = null;\n    for (const _doc of composer$1.compose(parser$1.parse(source), true, source.length)) {\n        if (!doc)\n            doc = _doc;\n        else if (doc.options.logLevel !== 'silent') {\n            doc.errors.push(new errors.YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n            break;\n        }\n    }\n    if (prettyErrors && lineCounter) {\n        doc.errors.forEach(errors.prettifyError(source, lineCounter));\n        doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n    }\n    return doc;\n}\nfunction parse(src, reviver, options) {\n    let _reviver = undefined;\n    if (typeof reviver === 'function') {\n        _reviver = reviver;\n    }\n    else if (options === undefined && reviver && typeof reviver === 'object') {\n        options = reviver;\n    }\n    const doc = parseDocument(src, options);\n    if (!doc)\n        return null;\n    doc.warnings.forEach(warning => log.warn(doc.options.logLevel, warning));\n    if (doc.errors.length > 0) {\n        if (doc.options.logLevel !== 'silent')\n            throw doc.errors[0];\n        else\n            doc.errors = [];\n    }\n    return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n    let _replacer = null;\n    if (typeof replacer === 'function' || Array.isArray(replacer)) {\n        _replacer = replacer;\n    }\n    else if (options === undefined && replacer) {\n        options = replacer;\n    }\n    if (typeof options === 'string')\n        options = options.length;\n    if (typeof options === 'number') {\n        const indent = Math.round(options);\n        options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n    }\n    if (value === undefined) {\n        const { keepUndefined } = options ?? replacer ?? {};\n        if (!keepUndefined)\n            return undefined;\n    }\n    if (identity.isDocument(value) && !_replacer)\n        return value.toString(options);\n    return new Document.Document(value, _replacer, options).toString(options);\n}\n\nexports.parse = parse;\nexports.parseAllDocuments = parseAllDocuments;\nexports.parseDocument = parseDocument;\nexports.stringify = stringify;\n","'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar Schema = require('./schema/Schema.js');\nvar errors = require('./errors.js');\nvar Alias = require('./nodes/Alias.js');\nvar identity = require('./nodes/identity.js');\nvar Pair = require('./nodes/Pair.js');\nvar Scalar = require('./nodes/Scalar.js');\nvar YAMLMap = require('./nodes/YAMLMap.js');\nvar YAMLSeq = require('./nodes/YAMLSeq.js');\nvar cst = require('./parse/cst.js');\nvar lexer = require('./parse/lexer.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\nvar publicApi = require('./public-api.js');\nvar visit = require('./visit.js');\n\n\n\nexports.Composer = composer.Composer;\nexports.Document = Document.Document;\nexports.Schema = Schema.Schema;\nexports.YAMLError = errors.YAMLError;\nexports.YAMLParseError = errors.YAMLParseError;\nexports.YAMLWarning = errors.YAMLWarning;\nexports.Alias = Alias.Alias;\nexports.isAlias = identity.isAlias;\nexports.isCollection = identity.isCollection;\nexports.isDocument = identity.isDocument;\nexports.isMap = identity.isMap;\nexports.isNode = identity.isNode;\nexports.isPair = identity.isPair;\nexports.isScalar = identity.isScalar;\nexports.isSeq = identity.isSeq;\nexports.Pair = Pair.Pair;\nexports.Scalar = Scalar.Scalar;\nexports.YAMLMap = YAMLMap.YAMLMap;\nexports.YAMLSeq = YAMLSeq.YAMLSeq;\nexports.CST = cst;\nexports.Lexer = lexer.Lexer;\nexports.LineCounter = lineCounter.LineCounter;\nexports.Parser = parser.Parser;\nexports.parse = publicApi.parse;\nexports.parseAllDocuments = publicApi.parseAllDocuments;\nexports.parseDocument = publicApi.parseDocument;\nexports.stringify = publicApi.stringify;\nexports.visit = visit.visit;\nexports.visitAsync = visit.visitAsync;\n","var _a;\n/** A special constant with type `never` */\nexport const NEVER = /*@__PURE__*/ Object.freeze({\n    status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n    function init(inst, def) {\n        if (!inst._zod) {\n            Object.defineProperty(inst, \"_zod\", {\n                value: {\n                    def,\n                    constr: _,\n                    traits: new Set(),\n                },\n                enumerable: false,\n            });\n        }\n        if (inst._zod.traits.has(name)) {\n            return;\n        }\n        inst._zod.traits.add(name);\n        initializer(inst, def);\n        // support prototype modifications\n        const proto = _.prototype;\n        const keys = Object.keys(proto);\n        for (let i = 0; i < keys.length; i++) {\n            const k = keys[i];\n            if (!(k in inst)) {\n                inst[k] = proto[k].bind(inst);\n            }\n        }\n    }\n    // doesn't work if Parent has a constructor with arguments\n    const Parent = params?.Parent ?? Object;\n    class Definition extends Parent {\n    }\n    Object.defineProperty(Definition, \"name\", { value: name });\n    function _(def) {\n        var _a;\n        const inst = params?.Parent ? new Definition() : this;\n        init(inst, def);\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        for (const fn of inst._zod.deferred) {\n            fn();\n        }\n        return inst;\n    }\n    Object.defineProperty(_, \"init\", { value: init });\n    Object.defineProperty(_, Symbol.hasInstance, {\n        value: (inst) => {\n            if (params?.Parent && inst instanceof params.Parent)\n                return true;\n            return inst?._zod?.traits?.has(name);\n        },\n    });\n    Object.defineProperty(_, \"name\", { value: name });\n    return _;\n}\n//////////////////////////////   UTILITIES   ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n    constructor() {\n        super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n    }\n}\nexport class $ZodEncodeError extends Error {\n    constructor(name) {\n        super(`Encountered unidirectional transform during encode: ${name}`);\n        this.name = \"ZodEncodeError\";\n    }\n}\n(_a = globalThis).__zod_globalConfig ?? (_a.__zod_globalConfig = {});\nexport const globalConfig = globalThis.__zod_globalConfig;\nexport function config(newConfig) {\n    if (newConfig)\n        Object.assign(globalConfig, newConfig);\n    return globalConfig;\n}\n","import { globalConfig } from \"./core.js\";\n// functions\nexport function assertEqual(val) {\n    return val;\n}\nexport function assertNotEqual(val) {\n    return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n    throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n    const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n    const values = Object.entries(entries)\n        .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n        .map(([_, v]) => v);\n    return values;\n}\nexport function joinValues(array, separator = \"|\") {\n    return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n    if (typeof value === \"bigint\")\n        return value.toString();\n    return value;\n}\nexport function cached(getter) {\n    const set = false;\n    return {\n        get value() {\n            if (!set) {\n                const value = getter();\n                Object.defineProperty(this, \"value\", { value });\n                return value;\n            }\n            throw new Error(\"cached value already set\");\n        },\n    };\n}\nexport function nullish(input) {\n    return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n    const start = source.startsWith(\"^\") ? 1 : 0;\n    const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n    return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n    const ratio = val / step;\n    const roundedRatio = Math.round(ratio);\n    // Use a relative epsilon scaled to the magnitude of the result\n    const tolerance = Number.EPSILON * Math.max(Math.abs(ratio), 1);\n    if (Math.abs(ratio - roundedRatio) < tolerance)\n        return 0;\n    return ratio - roundedRatio;\n}\nconst EVALUATING = /* @__PURE__*/ Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n    let value = undefined;\n    Object.defineProperty(object, key, {\n        get() {\n            if (value === EVALUATING) {\n                // Circular reference detected, return undefined to break the cycle\n                return undefined;\n            }\n            if (value === undefined) {\n                value = EVALUATING;\n                value = getter();\n            }\n            return value;\n        },\n        set(v) {\n            Object.defineProperty(object, key, {\n                value: v,\n                // configurable: true,\n            });\n            // object[key] = v;\n        },\n        configurable: true,\n    });\n}\nexport function objectClone(obj) {\n    return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n    Object.defineProperty(target, prop, {\n        value,\n        writable: true,\n        enumerable: true,\n        configurable: true,\n    });\n}\nexport function mergeDefs(...defs) {\n    const mergedDescriptors = {};\n    for (const def of defs) {\n        const descriptors = Object.getOwnPropertyDescriptors(def);\n        Object.assign(mergedDescriptors, descriptors);\n    }\n    return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n    return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n    if (!path)\n        return obj;\n    return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n    const keys = Object.keys(promisesObj);\n    const promises = keys.map((key) => promisesObj[key]);\n    return Promise.all(promises).then((results) => {\n        const resolvedObj = {};\n        for (let i = 0; i < keys.length; i++) {\n            resolvedObj[keys[i]] = results[i];\n        }\n        return resolvedObj;\n    });\n}\nexport function randomString(length = 10) {\n    const chars = \"abcdefghijklmnopqrstuvwxyz\";\n    let str = \"\";\n    for (let i = 0; i < length; i++) {\n        str += chars[Math.floor(Math.random() * chars.length)];\n    }\n    return str;\n}\nexport function esc(str) {\n    return JSON.stringify(str);\n}\nexport function slugify(input) {\n    return input\n        .toLowerCase()\n        .trim()\n        .replace(/[^\\w\\s-]/g, \"\")\n        .replace(/[\\s_-]+/g, \"-\")\n        .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n    return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = /* @__PURE__*/ cached(() => {\n    // Skip the probe under `jitless`: strict CSPs report the caught `new Function`\n    // as a `securitypolicyviolation` even though the throw is swallowed.\n    if (globalConfig.jitless) {\n        return false;\n    }\n    // @ts-ignore\n    if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n        return false;\n    }\n    try {\n        const F = Function;\n        new F(\"\");\n        return true;\n    }\n    catch (_) {\n        return false;\n    }\n});\nexport function isPlainObject(o) {\n    if (isObject(o) === false)\n        return false;\n    // modified constructor\n    const ctor = o.constructor;\n    if (ctor === undefined)\n        return true;\n    if (typeof ctor !== \"function\")\n        return true;\n    // modified prototype\n    const prot = ctor.prototype;\n    if (isObject(prot) === false)\n        return false;\n    // ctor doesn't have static `isPrototypeOf`\n    if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n        return false;\n    }\n    return true;\n}\nexport function shallowClone(o) {\n    if (isPlainObject(o))\n        return { ...o };\n    if (Array.isArray(o))\n        return [...o];\n    if (o instanceof Map)\n        return new Map(o);\n    if (o instanceof Set)\n        return new Set(o);\n    return o;\n}\nexport function numKeys(data) {\n    let keyCount = 0;\n    for (const key in data) {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n            keyCount++;\n        }\n    }\n    return keyCount;\n}\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return \"undefined\";\n        case \"string\":\n            return \"string\";\n        case \"number\":\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        case \"boolean\":\n            return \"boolean\";\n        case \"function\":\n            return \"function\";\n        case \"bigint\":\n            return \"bigint\";\n        case \"symbol\":\n            return \"symbol\";\n        case \"object\":\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return \"promise\";\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return \"map\";\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return \"set\";\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return \"date\";\n            }\n            // @ts-ignore\n            if (typeof File !== \"undefined\" && data instanceof File) {\n                return \"file\";\n            }\n            return \"object\";\n        default:\n            throw new Error(`Unknown data type: ${t}`);\n    }\n};\nexport const propertyKeyTypes = /* @__PURE__*/ new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = /* @__PURE__*/ new Set([\n    \"string\",\n    \"number\",\n    \"bigint\",\n    \"boolean\",\n    \"symbol\",\n    \"undefined\",\n]);\nexport function escapeRegex(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n    const cl = new inst._zod.constr(def ?? inst._zod.def);\n    if (!def || params?.parent)\n        cl._zod.parent = inst;\n    return cl;\n}\nexport function normalizeParams(_params) {\n    const params = _params;\n    if (!params)\n        return {};\n    if (typeof params === \"string\")\n        return { error: () => params };\n    if (params?.message !== undefined) {\n        if (params?.error !== undefined)\n            throw new Error(\"Cannot specify both `message` and `error` params\");\n        params.error = params.message;\n    }\n    delete params.message;\n    if (typeof params.error === \"string\")\n        return { ...params, error: () => params.error };\n    return params;\n}\nexport function createTransparentProxy(getter) {\n    let target;\n    return new Proxy({}, {\n        get(_, prop, receiver) {\n            target ?? (target = getter());\n            return Reflect.get(target, prop, receiver);\n        },\n        set(_, prop, value, receiver) {\n            target ?? (target = getter());\n            return Reflect.set(target, prop, value, receiver);\n        },\n        has(_, prop) {\n            target ?? (target = getter());\n            return Reflect.has(target, prop);\n        },\n        deleteProperty(_, prop) {\n            target ?? (target = getter());\n            return Reflect.deleteProperty(target, prop);\n        },\n        ownKeys(_) {\n            target ?? (target = getter());\n            return Reflect.ownKeys(target);\n        },\n        getOwnPropertyDescriptor(_, prop) {\n            target ?? (target = getter());\n            return Reflect.getOwnPropertyDescriptor(target, prop);\n        },\n        defineProperty(_, prop, descriptor) {\n            target ?? (target = getter());\n            return Reflect.defineProperty(target, prop, descriptor);\n        },\n    });\n}\nexport function stringifyPrimitive(value) {\n    if (typeof value === \"bigint\")\n        return value.toString() + \"n\";\n    if (typeof value === \"string\")\n        return `\"${value}\"`;\n    return `${value}`;\n}\nexport function optionalKeys(shape) {\n    return Object.keys(shape).filter((k) => {\n        return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n    });\n}\nexport const NUMBER_FORMAT_RANGES = {\n    safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n    int32: [-2147483648, 2147483647],\n    uint32: [0, 4294967295],\n    float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n    float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n    int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n    uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = {};\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                newShape[key] = currDef.shape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function omit(schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = { ...schema._zod.def.shape };\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                delete newShape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function extend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to extend: expected a plain object\");\n    }\n    const checks = schema._zod.def.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        // Only throw if new shape overlaps with existing shape\n        // Use getOwnPropertyDescriptor to check key existence without accessing values\n        const existingShape = schema._zod.def.shape;\n        for (const key in shape) {\n            if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n                throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n            }\n        }\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n    });\n    return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n    });\n    return clone(schema, def);\n}\nexport function merge(a, b) {\n    if (a._zod.def.checks?.length) {\n        throw new Error(\".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.\");\n    }\n    const def = mergeDefs(a._zod.def, {\n        get shape() {\n            const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        get catchall() {\n            return b._zod.def.catchall;\n        },\n        checks: b._zod.def.checks ?? [],\n    });\n    return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in oldShape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in shape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n    });\n    return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n    if (x.aborted === true)\n        return true;\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue !== true) {\n            return true;\n        }\n    }\n    return false;\n}\n// Checks for explicit abort (continue === false), as opposed to implicit abort (continue === undefined).\n// Used to respect `abort: true` in .refine() even for checks that have a `when` function.\nexport function explicitlyAborted(x, startIndex = 0) {\n    if (x.aborted === true)\n        return true;\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue === false) {\n            return true;\n        }\n    }\n    return false;\n}\nexport function prefixIssues(path, issues) {\n    return issues.map((iss) => {\n        var _a;\n        (_a = iss).path ?? (_a.path = []);\n        iss.path.unshift(path);\n        return iss;\n    });\n}\nexport function unwrapMessage(message) {\n    return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n    const message = iss.message\n        ? iss.message\n        : (unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n            unwrapMessage(ctx?.error?.(iss)) ??\n            unwrapMessage(config.customError?.(iss)) ??\n            unwrapMessage(config.localeError?.(iss)) ??\n            \"Invalid input\");\n    const { inst: _inst, continue: _continue, input: _input, ...rest } = iss;\n    rest.path ?? (rest.path = []);\n    rest.message = message;\n    if (ctx?.reportInput) {\n        rest.input = _input;\n    }\n    return rest;\n}\nexport function getSizableOrigin(input) {\n    if (input instanceof Set)\n        return \"set\";\n    if (input instanceof Map)\n        return \"map\";\n    // @ts-ignore\n    if (input instanceof File)\n        return \"file\";\n    return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n    if (Array.isArray(input))\n        return \"array\";\n    if (typeof input === \"string\")\n        return \"string\";\n    return \"unknown\";\n}\nexport function parsedType(data) {\n    const t = typeof data;\n    switch (t) {\n        case \"number\": {\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        }\n        case \"object\": {\n            if (data === null) {\n                return \"null\";\n            }\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            const obj = data;\n            if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n                return obj.constructor.name;\n            }\n        }\n    }\n    return t;\n}\nexport function issue(...args) {\n    const [iss, input, inst] = args;\n    if (typeof iss === \"string\") {\n        return {\n            message: iss,\n            code: \"custom\",\n            input,\n            inst,\n        };\n    }\n    return { ...iss };\n}\nexport function cleanEnum(obj) {\n    return Object.entries(obj)\n        .filter(([k, _]) => {\n        // return true if NaN, meaning it's not a number, thus a string key\n        return Number.isNaN(Number.parseInt(k, 10));\n    })\n        .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n    const binaryString = atob(base64);\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n        bytes[i] = binaryString.charCodeAt(i);\n    }\n    return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n    let binaryString = \"\";\n    for (let i = 0; i < bytes.length; i++) {\n        binaryString += String.fromCharCode(bytes[i]);\n    }\n    return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n    const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n    const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n    return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n    return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n    const cleanHex = hex.replace(/^0x/, \"\");\n    if (cleanHex.length % 2 !== 0) {\n        throw new Error(\"Invalid hex string length\");\n    }\n    const bytes = new Uint8Array(cleanHex.length / 2);\n    for (let i = 0; i < cleanHex.length; i += 2) {\n        bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n    }\n    return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n    return Array.from(bytes)\n        .map((b) => b.toString(16).padStart(2, \"0\"))\n        .join(\"\");\n}\n// instanceof\nexport class Class {\n    constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n    inst.name = \"$ZodError\";\n    Object.defineProperty(inst, \"_zod\", {\n        value: inst._zod,\n        enumerable: false,\n    });\n    Object.defineProperty(inst, \"issues\", {\n        value: def,\n        enumerable: false,\n    });\n    inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n    Object.defineProperty(inst, \"toString\", {\n        value: () => inst.message,\n        enumerable: false,\n    });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = {};\n    const formErrors = [];\n    for (const sub of error.issues) {\n        if (sub.path.length > 0) {\n            fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n            fieldErrors[sub.path[0]].push(mapper(sub));\n        }\n        else {\n            formErrors.push(mapper(sub));\n        }\n    }\n    return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = { _errors: [] };\n    const processError = (error, path = []) => {\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < fullpath.length) {\n                        const el = fullpath[i];\n                        const terminal = i === fullpath.length - 1;\n                        if (!terminal) {\n                            curr[el] = curr[el] || { _errors: [] };\n                        }\n                        else {\n                            curr[el] = curr[el] || { _errors: [] };\n                            curr[el]._errors.push(mapper(issue));\n                        }\n                        curr = curr[el];\n                        i++;\n                    }\n                }\n            }\n        }\n    };\n    processError(error);\n    return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n    const result = { errors: [] };\n    const processError = (error, path = []) => {\n        var _a, _b;\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                // regular union error\n                issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    result.errors.push(mapper(issue));\n                    continue;\n                }\n                let curr = result;\n                let i = 0;\n                while (i < fullpath.length) {\n                    const el = fullpath[i];\n                    const terminal = i === fullpath.length - 1;\n                    if (typeof el === \"string\") {\n                        curr.properties ?? (curr.properties = {});\n                        (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n                        curr = curr.properties[el];\n                    }\n                    else {\n                        curr.items ?? (curr.items = []);\n                        (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n                        curr = curr.items[el];\n                    }\n                    if (terminal) {\n                        curr.errors.push(mapper(issue));\n                    }\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n *   issues: [\n *     {\n *       expected: 'string',\n *       code: 'invalid_type',\n *       path: [ 'username' ],\n *       message: 'Invalid input: expected string'\n *     },\n *     {\n *       expected: 'number',\n *       code: 'invalid_type',\n *       path: [ 'favoriteNumbers', 1 ],\n *       message: 'Invalid input: expected number'\n *     }\n *   ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n *   ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n *   ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n    const segs = [];\n    const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n    for (const seg of path) {\n        if (typeof seg === \"number\")\n            segs.push(`[${seg}]`);\n        else if (typeof seg === \"symbol\")\n            segs.push(`[${JSON.stringify(String(seg))}]`);\n        else if (/[^\\w$]/.test(seg))\n            segs.push(`[${JSON.stringify(seg)}]`);\n        else {\n            if (segs.length)\n                segs.push(\".\");\n            segs.push(seg);\n        }\n    }\n    return segs.join(\"\");\n}\nexport function prettifyError(error) {\n    const lines = [];\n    // sort by path length\n    const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n    // Process each issue\n    for (const issue of issues) {\n        lines.push(`✖ ${issue.message}`);\n        if (issue.path?.length)\n            lines.push(`  → at ${toDotPath(issue.path)}`);\n    }\n    // Convert Map to formatted string\n    return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    if (result.issues.length) {\n        const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, _params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n    const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    if (result.issues.length) {\n        const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length\n        ? {\n            success: false,\n            error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length\n        ? {\n            success: false,\n            error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n    return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n    return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n    return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n    return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n    return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n    return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","import * as util from \"./util.js\";\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const cuid = /^[cC][0-9a-z]{6,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n    if (!version)\n        return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n    return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n    return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n    const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n    return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\nexport const httpProtocol = /^https?$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n    const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n    const regex = typeof args.precision === \"number\"\n        ? args.precision === -1\n            ? `${hhmm}`\n            : args.precision === 0\n                ? `${hhmm}:[0-5]\\\\d`\n                : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n        : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n    return regex;\n}\nexport function time(args) {\n    return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n    const time = timeSource({ precision: args.precision });\n    const opts = [\"Z\"];\n    if (args.local)\n        opts.push(\"\");\n    // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n    if (args.offset)\n        opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n    const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n    return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n    const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n    return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n    return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n    return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n    var _a;\n    inst._zod ?? (inst._zod = {});\n    inst._zod.def = def;\n    (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n    number: \"number\",\n    bigint: \"bigint\",\n    object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n        if (def.value < curr) {\n            if (def.inclusive)\n                bag.maximum = def.value;\n            else\n                bag.exclusiveMaximum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n        if (def.value > curr) {\n            if (def.inclusive)\n                bag.minimum = def.value;\n            else\n                bag.exclusiveMinimum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        var _a;\n        (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n    });\n    inst._zod.check = (payload) => {\n        if (typeof payload.value !== typeof def.value)\n            throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n        const isMultiple = typeof payload.value === \"bigint\"\n            ? payload.value % def.value === BigInt(0)\n            : util.floatSafeRemainder(payload.value, def.value) === 0;\n        if (isMultiple)\n            return;\n        payload.issues.push({\n            origin: typeof payload.value,\n            code: \"not_multiple_of\",\n            divisor: def.value,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    def.format = def.format || \"float64\";\n    const isInt = def.format?.includes(\"int\");\n    const origin = isInt ? \"int\" : \"number\";\n    const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n        if (isInt)\n            bag.pattern = regexes.integer;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (isInt) {\n            if (!Number.isInteger(input)) {\n                // invalid_format issue\n                // payload.issues.push({\n                //   expected: def.format,\n                //   format: def.format,\n                //   code: \"invalid_format\",\n                //   input,\n                //   inst,\n                // });\n                // invalid_type issue\n                payload.issues.push({\n                    expected: origin,\n                    format: def.format,\n                    code: \"invalid_type\",\n                    continue: false,\n                    input,\n                    inst,\n                });\n                return;\n                // not_multiple_of issue\n                // payload.issues.push({\n                //   code: \"not_multiple_of\",\n                //   origin: \"number\",\n                //   input,\n                //   inst,\n                //   divisor: 1,\n                // });\n            }\n            if (!Number.isSafeInteger(input)) {\n                if (input > 0) {\n                    // too_big\n                    payload.issues.push({\n                        input,\n                        code: \"too_big\",\n                        maximum: Number.MAX_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        inclusive: true,\n                        continue: !def.abort,\n                    });\n                }\n                else {\n                    // too_small\n                    payload.issues.push({\n                        input,\n                        code: \"too_small\",\n                        minimum: Number.MIN_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        inclusive: true,\n                        continue: !def.abort,\n                    });\n                }\n                return;\n            }\n        }\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_small\",\n                minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_small\",\n                minimum: minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size <= def.maximum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size >= def.minimum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.size;\n        bag.maximum = def.size;\n        bag.size = def.size;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size === def.size)\n            return;\n        const tooBig = size > def.size;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length <= def.maximum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length >= def.minimum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.length;\n        bag.maximum = def.length;\n        bag.length = def.length;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length === def.length)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        const tooBig = length > def.length;\n        payload.issues.push({\n            origin,\n            ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n    var _a, _b;\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        if (def.pattern) {\n            bag.patterns ?? (bag.patterns = new Set());\n            bag.patterns.add(def.pattern);\n        }\n    });\n    if (def.pattern)\n        (_a = inst._zod).check ?? (_a.check = (payload) => {\n            def.pattern.lastIndex = 0;\n            if (def.pattern.test(payload.value))\n                return;\n            payload.issues.push({\n                origin: \"string\",\n                code: \"invalid_format\",\n                format: def.format,\n                input: payload.value,\n                ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n                inst,\n                continue: !def.abort,\n            });\n        });\n    else\n        (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n    $ZodCheckStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        def.pattern.lastIndex = 0;\n        if (def.pattern.test(payload.value))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"regex\",\n            input: payload.value,\n            pattern: def.pattern.toString(),\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.lowercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.uppercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const escapedRegex = util.escapeRegex(def.includes);\n    const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n    def.pattern = pattern;\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.includes(def.includes, def.position))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"includes\",\n            includes: def.includes,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.startsWith(def.prefix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"starts_with\",\n            prefix: def.prefix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.endsWith(def.suffix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"ends_with\",\n            suffix: def.suffix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n///////////////////////////////////\n/////    $ZodCheckProperty    /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n    if (result.issues.length) {\n        payload.issues.push(...util.prefixIssues(property, result.issues));\n    }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        const result = def.schema._zod.run({\n            value: payload.value[def.property],\n            issues: [],\n        }, {});\n        if (result instanceof Promise) {\n            return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n        }\n        handleCheckPropertyResult(result, payload, def.property);\n        return;\n    };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const mimeSet = new Set(def.mime);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.mime = def.mime;\n    });\n    inst._zod.check = (payload) => {\n        if (mimeSet.has(payload.value.type))\n            return;\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.mime,\n            input: payload.value.type,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        payload.value = def.tx(payload.value);\n    };\n});\n","export class Doc {\n    constructor(args = []) {\n        this.content = [];\n        this.indent = 0;\n        if (this)\n            this.args = args;\n    }\n    indented(fn) {\n        this.indent += 1;\n        fn(this);\n        this.indent -= 1;\n    }\n    write(arg) {\n        if (typeof arg === \"function\") {\n            arg(this, { execution: \"sync\" });\n            arg(this, { execution: \"async\" });\n            return;\n        }\n        const content = arg;\n        const lines = content.split(\"\\n\").filter((x) => x);\n        const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n        const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n        for (const line of dedented) {\n            this.content.push(line);\n        }\n    }\n    compile() {\n        const F = Function;\n        const args = this?.args;\n        const content = this?.content ?? [``];\n        const lines = [...content.map((x) => `  ${x}`)];\n        // console.log(lines.join(\"\\n\"));\n        return new F(...args, lines.join(\"\\n\"));\n    }\n}\n","export const version = {\n    major: 4,\n    minor: 4,\n    patch: 3,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n    var _a;\n    inst ?? (inst = {});\n    inst._zod.def = def; // set _def property\n    inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n    inst._zod.version = version;\n    const checks = [...(inst._zod.def.checks ?? [])];\n    // if inst is itself a checks.$ZodCheck, run it as a check\n    if (inst._zod.traits.has(\"$ZodCheck\")) {\n        checks.unshift(inst);\n    }\n    for (const ch of checks) {\n        for (const fn of ch._zod.onattach) {\n            fn(inst);\n        }\n    }\n    if (checks.length === 0) {\n        // deferred initializer\n        // inst._zod.parse is not yet defined\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred?.push(() => {\n            inst._zod.run = inst._zod.parse;\n        });\n    }\n    else {\n        const runChecks = (payload, checks, ctx) => {\n            let isAborted = util.aborted(payload);\n            let asyncResult;\n            for (const ch of checks) {\n                if (ch._zod.def.when) {\n                    if (util.explicitlyAborted(payload))\n                        continue;\n                    const shouldRun = ch._zod.def.when(payload);\n                    if (!shouldRun)\n                        continue;\n                }\n                else if (isAborted) {\n                    continue;\n                }\n                const currLen = payload.issues.length;\n                const _ = ch._zod.check(payload);\n                if (_ instanceof Promise && ctx?.async === false) {\n                    throw new core.$ZodAsyncError();\n                }\n                if (asyncResult || _ instanceof Promise) {\n                    asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n                        await _;\n                        const nextLen = payload.issues.length;\n                        if (nextLen === currLen)\n                            return;\n                        if (!isAborted)\n                            isAborted = util.aborted(payload, currLen);\n                    });\n                }\n                else {\n                    const nextLen = payload.issues.length;\n                    if (nextLen === currLen)\n                        continue;\n                    if (!isAborted)\n                        isAborted = util.aborted(payload, currLen);\n                }\n            }\n            if (asyncResult) {\n                return asyncResult.then(() => {\n                    return payload;\n                });\n            }\n            return payload;\n        };\n        const handleCanaryResult = (canary, payload, ctx) => {\n            // abort if the canary is aborted\n            if (util.aborted(canary)) {\n                canary.aborted = true;\n                return canary;\n            }\n            // run checks first, then\n            const checkResult = runChecks(payload, checks, ctx);\n            if (checkResult instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n            }\n            return inst._zod.parse(checkResult, ctx);\n        };\n        inst._zod.run = (payload, ctx) => {\n            if (ctx.skipChecks) {\n                return inst._zod.parse(payload, ctx);\n            }\n            if (ctx.direction === \"backward\") {\n                // run canary\n                // initial pass (no checks)\n                const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n                if (canary instanceof Promise) {\n                    return canary.then((canary) => {\n                        return handleCanaryResult(canary, payload, ctx);\n                    });\n                }\n                return handleCanaryResult(canary, payload, ctx);\n            }\n            // forward\n            const result = inst._zod.parse(payload, ctx);\n            if (result instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return result.then((result) => runChecks(result, checks, ctx));\n            }\n            return runChecks(result, checks, ctx);\n        };\n    }\n    // Lazy initialize ~standard to avoid creating objects for every schema\n    util.defineLazy(inst, \"~standard\", () => ({\n        validate: (value) => {\n            try {\n                const r = safeParse(inst, value);\n                return r.success ? { value: r.data } : { issues: r.error?.issues };\n            }\n            catch (_) {\n                return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n            }\n        },\n        vendor: \"zod\",\n        version: 1,\n    }));\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n    inst._zod.parse = (payload, _) => {\n        if (def.coerce)\n            try {\n                payload.value = String(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"string\")\n            return payload;\n        payload.issues.push({\n            expected: \"string\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n    // check initialization must come first\n    checks.$ZodCheckStringFormat.init(inst, def);\n    $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.guid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n    if (def.version) {\n        const versionMap = {\n            v1: 1,\n            v2: 2,\n            v3: 3,\n            v4: 4,\n            v5: 5,\n            v6: 6,\n            v7: 7,\n            v8: 8,\n        };\n        const v = versionMap[def.version];\n        if (v === undefined)\n            throw new Error(`Invalid UUID version: \"${def.version}\"`);\n        def.pattern ?? (def.pattern = regexes.uuid(v));\n    }\n    else\n        def.pattern ?? (def.pattern = regexes.uuid());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.email);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        try {\n            // Trim whitespace from input\n            const trimmed = payload.value.trim();\n            // When normalize is off, require :// for http/https URLs\n            // This prevents strings like \"http:example.com\" or \"https:/path\" from being silently accepted\n            if (!def.normalize && def.protocol?.source === regexes.httpProtocol.source) {\n                if (!/^https?:\\/\\//i.test(trimmed)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid URL format\",\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                    return;\n                }\n            }\n            // @ts-ignore\n            const url = new URL(trimmed);\n            if (def.hostname) {\n                def.hostname.lastIndex = 0;\n                if (!def.hostname.test(url.hostname)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid hostname\",\n                        pattern: def.hostname.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            if (def.protocol) {\n                def.protocol.lastIndex = 0;\n                if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid protocol\",\n                        pattern: def.protocol.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            // Set the output value based on normalize flag\n            if (def.normalize) {\n                // Use normalized URL\n                payload.value = url.href;\n            }\n            else {\n                // Preserve the original input (trimmed)\n                payload.value = trimmed;\n            }\n            return;\n        }\n        catch (_) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"url\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.emoji());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.nanoid);\n    $ZodStringFormat.init(inst, def);\n});\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link $ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid2);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ulid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.xid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ksuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.datetime(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.date);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.time(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.duration);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv4);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.format = `ipv4`;\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv6);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.format = `ipv6`;\n    inst._zod.check = (payload) => {\n        try {\n            // @ts-ignore\n            new URL(`http://[${payload.value}]`);\n            // return;\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"ipv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.format = `mac`;\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv4);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        const parts = payload.value.split(\"/\");\n        try {\n            if (parts.length !== 2)\n                throw new Error();\n            const [address, prefix] = parts;\n            if (!prefix)\n                throw new Error();\n            const prefixNum = Number(prefix);\n            if (`${prefixNum}` !== prefix)\n                throw new Error();\n            if (prefixNum < 0 || prefixNum > 128)\n                throw new Error();\n            // @ts-ignore\n            new URL(`http://[${address}]`);\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"cidrv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64(data) {\n    if (data === \"\")\n        return true;\n    // atob ignores whitespace, so reject it up front.\n    if (/\\s/.test(data))\n        return false;\n    if (data.length % 4 !== 0)\n        return false;\n    try {\n        // @ts-ignore\n        atob(data);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.contentEncoding = \"base64\";\n    inst._zod.check = (payload) => {\n        if (isValidBase64(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64URL(data) {\n    if (!regexes.base64url.test(data))\n        return false;\n    const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n    const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n    return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64url);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.contentEncoding = \"base64url\";\n    inst._zod.check = (payload) => {\n        if (isValidBase64URL(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64url\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.e164);\n    $ZodStringFormat.init(inst, def);\n});\n//////////////////////////////   ZodJWT   //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n    try {\n        const tokensParts = token.split(\".\");\n        if (tokensParts.length !== 3)\n            return false;\n        const [header] = tokensParts;\n        if (!header)\n            return false;\n        // @ts-ignore\n        const parsedHeader = JSON.parse(atob(header));\n        if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n            return false;\n        if (!parsedHeader.alg)\n            return false;\n        if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidJWT(payload.value, def.alg))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"jwt\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (def.fn(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: def.format,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Number(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n            return payload;\n        }\n        const received = typeof input === \"number\"\n            ? Number.isNaN(input)\n                ? \"NaN\"\n                : !Number.isFinite(input)\n                    ? \"Infinity\"\n                    : undefined\n            : undefined;\n        payload.issues.push({\n            expected: \"number\",\n            code: \"invalid_type\",\n            input,\n            inst,\n            ...(received ? { received } : {}),\n        });\n        return payload;\n    };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n    checks.$ZodCheckNumberFormat.init(inst, def);\n    $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.boolean;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Boolean(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"boolean\")\n            return payload;\n        payload.issues.push({\n            expected: \"boolean\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.bigint;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = BigInt(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"bigint\")\n            return payload;\n        payload.issues.push({\n            expected: \"bigint\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n    checks.$ZodCheckBigIntFormat.init(inst, def);\n    $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"symbol\")\n            return payload;\n        payload.issues.push({\n            expected: \"symbol\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.undefined;\n    inst._zod.values = new Set([undefined]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"undefined\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.null;\n    inst._zod.values = new Set([null]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input === null)\n            return payload;\n        payload.issues.push({\n            expected: \"null\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.issues.push({\n            expected: \"never\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"void\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce) {\n            try {\n                payload.value = new Date(payload.value);\n            }\n            catch (_err) { }\n        }\n        const input = payload.value;\n        const isDate = input instanceof Date;\n        const isValidDate = isDate && !Number.isNaN(input.getTime());\n        if (isValidDate)\n            return payload;\n        payload.issues.push({\n            expected: \"date\",\n            code: \"invalid_type\",\n            input,\n            ...(isDate ? { received: \"Invalid Date\" } : {}),\n            inst,\n        });\n        return payload;\n    };\n});\nfunction handleArrayResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                expected: \"array\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = Array(input.length);\n        const proms = [];\n        for (let i = 0; i < input.length; i++) {\n            const item = input[i];\n            const result = def.element._zod.run({\n                value: item,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n            }\n            else {\n                handleArrayResult(result, payload, i);\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload; //handleArrayResultsAsync(parseResults, final);\n    };\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalIn, isOptionalOut) {\n    const isPresent = key in input;\n    if (result.issues.length) {\n        // For optional-in/out schemas, ignore errors on absent keys.\n        if (isOptionalIn && isOptionalOut && !isPresent) {\n            return;\n        }\n        final.issues.push(...util.prefixIssues(key, result.issues));\n    }\n    if (!isPresent && !isOptionalIn) {\n        if (!result.issues.length) {\n            final.issues.push({\n                code: \"invalid_type\",\n                expected: \"nonoptional\",\n                input: undefined,\n                path: [key],\n            });\n        }\n        return;\n    }\n    if (result.value === undefined) {\n        if (isPresent) {\n            final.value[key] = undefined;\n        }\n    }\n    else {\n        final.value[key] = result.value;\n    }\n}\nfunction normalizeDef(def) {\n    const keys = Object.keys(def.shape);\n    for (const k of keys) {\n        if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n            throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n        }\n    }\n    const okeys = util.optionalKeys(def.shape);\n    return {\n        ...def,\n        keys,\n        keySet: new Set(keys),\n        numKeys: keys.length,\n        optionalKeys: new Set(okeys),\n    };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n    const unrecognized = [];\n    const keySet = def.keySet;\n    const _catchall = def.catchall._zod;\n    const t = _catchall.def.type;\n    const isOptionalIn = _catchall.optin === \"optional\";\n    const isOptionalOut = _catchall.optout === \"optional\";\n    for (const key in input) {\n        // skip __proto__ so it can't replace the result prototype via the\n        // assignment setter on the plain {} we build into\n        if (key === \"__proto__\")\n            continue;\n        if (keySet.has(key))\n            continue;\n        if (t === \"never\") {\n            unrecognized.push(key);\n            continue;\n        }\n        const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n        if (r instanceof Promise) {\n            proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut)));\n        }\n        else {\n            handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut);\n        }\n    }\n    if (unrecognized.length) {\n        payload.issues.push({\n            code: \"unrecognized_keys\",\n            keys: unrecognized,\n            input,\n            inst,\n        });\n    }\n    if (!proms.length)\n        return payload;\n    return Promise.all(proms).then(() => {\n        return payload;\n    });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodType.init(inst, def);\n    // const sh = def.shape;\n    const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n    if (!desc?.get) {\n        const sh = def.shape;\n        Object.defineProperty(def, \"shape\", {\n            get: () => {\n                const newSh = { ...sh };\n                Object.defineProperty(def, \"shape\", {\n                    value: newSh,\n                });\n                return newSh;\n            },\n        });\n    }\n    const _normalized = util.cached(() => normalizeDef(def));\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const shape = def.shape;\n        const propValues = {};\n        for (const key in shape) {\n            const field = shape[key]._zod;\n            if (field.values) {\n                propValues[key] ?? (propValues[key] = new Set());\n                for (const v of field.values)\n                    propValues[key].add(v);\n            }\n        }\n        return propValues;\n    });\n    const isObject = util.isObject;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = {};\n        const proms = [];\n        const shape = value.shape;\n        for (const key of value.keys) {\n            const el = shape[key];\n            const isOptionalIn = el._zod.optin === \"optional\";\n            const isOptionalOut = el._zod.optout === \"optional\";\n            const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut)));\n            }\n            else {\n                handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut);\n            }\n        }\n        if (!catchall) {\n            return proms.length ? Promise.all(proms).then(() => payload) : payload;\n        }\n        return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n    };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodObject.init(inst, def);\n    const superParse = inst._zod.parse;\n    const _normalized = util.cached(() => normalizeDef(def));\n    const generateFastpass = (shape) => {\n        const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n        const normalized = _normalized.value;\n        const parseStr = (key) => {\n            const k = util.esc(key);\n            return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n        };\n        doc.write(`const input = payload.value;`);\n        const ids = Object.create(null);\n        let counter = 0;\n        for (const key of normalized.keys) {\n            ids[key] = `key_${counter++}`;\n        }\n        // A: preserve key order {\n        doc.write(`const newResult = {};`);\n        for (const key of normalized.keys) {\n            const id = ids[key];\n            const k = util.esc(key);\n            const schema = shape[key];\n            const isOptionalIn = schema?._zod?.optin === \"optional\";\n            const isOptionalOut = schema?._zod?.optout === \"optional\";\n            doc.write(`const ${id} = ${parseStr(key)};`);\n            if (isOptionalIn && isOptionalOut) {\n                // For optional-in/out schemas, ignore errors on absent keys\n                doc.write(`\n        if (${id}.issues.length) {\n          if (${k} in input) {\n            payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n              ...iss,\n              path: iss.path ? [${k}, ...iss.path] : [${k}]\n            })));\n          }\n        }\n        \n        if (${id}.value === undefined) {\n          if (${k} in input) {\n            newResult[${k}] = undefined;\n          }\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        \n      `);\n            }\n            else if (!isOptionalIn) {\n                doc.write(`\n        const ${id}_present = ${k} in input;\n        if (${id}.issues.length) {\n          payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n            ...iss,\n            path: iss.path ? [${k}, ...iss.path] : [${k}]\n          })));\n        }\n        if (!${id}_present && !${id}.issues.length) {\n          payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: undefined,\n            path: [${k}]\n          });\n        }\n\n        if (${id}_present) {\n          if (${id}.value === undefined) {\n            newResult[${k}] = undefined;\n          } else {\n            newResult[${k}] = ${id}.value;\n          }\n        }\n\n      `);\n            }\n            else {\n                doc.write(`\n        if (${id}.issues.length) {\n          payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n            ...iss,\n            path: iss.path ? [${k}, ...iss.path] : [${k}]\n          })));\n        }\n        \n        if (${id}.value === undefined) {\n          if (${k} in input) {\n            newResult[${k}] = undefined;\n          }\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        \n      `);\n            }\n        }\n        doc.write(`payload.value = newResult;`);\n        doc.write(`return payload;`);\n        const fn = doc.compile();\n        return (payload, ctx) => fn(shape, payload, ctx);\n    };\n    let fastpass;\n    const isObject = util.isObject;\n    const jit = !core.globalConfig.jitless;\n    const allowsEval = util.allowsEval;\n    const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n            // always synchronous\n            if (!fastpass)\n                fastpass = generateFastpass(def.shape);\n            payload = fastpass(payload, ctx);\n            if (!catchall)\n                return payload;\n            return handleCatchall([], input, payload, ctx, value, inst);\n        }\n        return superParse(payload, ctx);\n    };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n    for (const result of results) {\n        if (result.issues.length === 0) {\n            final.value = result.value;\n            return final;\n        }\n    }\n    const nonaborted = results.filter((r) => !util.aborted(r));\n    if (nonaborted.length === 1) {\n        final.value = nonaborted[0].value;\n        return nonaborted[0];\n    }\n    final.issues.push({\n        code: \"invalid_union\",\n        input: final.value,\n        inst,\n        errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n    });\n    return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"values\", () => {\n        if (def.options.every((o) => o._zod.values)) {\n            return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n        }\n        return undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        if (def.options.every((o) => o._zod.pattern)) {\n            const patterns = def.options.map((o) => o._zod.pattern);\n            return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n        }\n        return undefined;\n    });\n    const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n    inst._zod.parse = (payload, ctx) => {\n        if (first) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                if (result.issues.length === 0)\n                    return result;\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n    const successes = results.filter((r) => r.issues.length === 0);\n    if (successes.length === 1) {\n        final.value = successes[0].value;\n        return final;\n    }\n    if (successes.length === 0) {\n        // No matches - same as regular union\n        final.issues.push({\n            code: \"invalid_union\",\n            input: final.value,\n            inst,\n            errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        });\n    }\n    else {\n        // Multiple matches - exclusive union failure\n        final.issues.push({\n            code: \"invalid_union\",\n            input: final.value,\n            inst,\n            errors: [],\n            inclusive: false,\n        });\n    }\n    return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n    $ZodUnion.init(inst, def);\n    def.inclusive = false;\n    const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n    inst._zod.parse = (payload, ctx) => {\n        if (first) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleExclusiveUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleExclusiveUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n    def.inclusive = false;\n    $ZodUnion.init(inst, def);\n    const _super = inst._zod.parse;\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const propValues = {};\n        for (const option of def.options) {\n            const pv = option._zod.propValues;\n            if (!pv || Object.keys(pv).length === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n            for (const [k, v] of Object.entries(pv)) {\n                if (!propValues[k])\n                    propValues[k] = new Set();\n                for (const val of v) {\n                    propValues[k].add(val);\n                }\n            }\n        }\n        return propValues;\n    });\n    const disc = util.cached(() => {\n        const opts = def.options;\n        const map = new Map();\n        for (const o of opts) {\n            const values = o._zod.propValues?.[def.discriminator];\n            if (!values || values.size === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n            for (const v of values) {\n                if (map.has(v)) {\n                    throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n                }\n                map.set(v, o);\n            }\n        }\n        return map;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isObject(input)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"object\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const opt = disc.value.get(input?.[def.discriminator]);\n        if (opt) {\n            return opt._zod.run(payload, ctx);\n        }\n        // Fall back to union matching when the fast discriminator path fails:\n        // - explicitly enabled via unionFallback, or\n        // - during backward direction (encode), since codec-based discriminators\n        //   have different values in forward vs backward directions\n        if (def.unionFallback || ctx.direction === \"backward\") {\n            return _super(payload, ctx);\n        }\n        // no matching discriminator\n        payload.issues.push({\n            code: \"invalid_union\",\n            errors: [],\n            note: \"No matching discriminator\",\n            discriminator: def.discriminator,\n            options: Array.from(disc.value.keys()),\n            input,\n            path: [def.discriminator],\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n        const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n        const async = left instanceof Promise || right instanceof Promise;\n        if (async) {\n            return Promise.all([left, right]).then(([left, right]) => {\n                return handleIntersectionResults(payload, left, right);\n            });\n        }\n        return handleIntersectionResults(payload, left, right);\n    };\n});\nfunction mergeValues(a, b) {\n    // const aType = parse.t(a);\n    // const bType = parse.t(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    if (a instanceof Date && b instanceof Date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    if (util.isPlainObject(a) && util.isPlainObject(b)) {\n        const bKeys = Object.keys(b);\n        const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    if (Array.isArray(a) && Array.isArray(b)) {\n        if (a.length !== b.length) {\n            return { valid: false, mergeErrorPath: [] };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n    // Track which side(s) report each key as unrecognized\n    const unrecKeys = new Map();\n    let unrecIssue;\n    for (const iss of left.issues) {\n        if (iss.code === \"unrecognized_keys\") {\n            unrecIssue ?? (unrecIssue = iss);\n            for (const k of iss.keys) {\n                if (!unrecKeys.has(k))\n                    unrecKeys.set(k, {});\n                unrecKeys.get(k).l = true;\n            }\n        }\n        else {\n            result.issues.push(iss);\n        }\n    }\n    for (const iss of right.issues) {\n        if (iss.code === \"unrecognized_keys\") {\n            for (const k of iss.keys) {\n                if (!unrecKeys.has(k))\n                    unrecKeys.set(k, {});\n                unrecKeys.get(k).r = true;\n            }\n        }\n        else {\n            result.issues.push(iss);\n        }\n    }\n    // Report only keys unrecognized by BOTH sides\n    const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n    if (bothKeys.length && unrecIssue) {\n        result.issues.push({ ...unrecIssue, keys: bothKeys });\n    }\n    if (util.aborted(result))\n        return result;\n    const merged = mergeValues(left.value, right.value);\n    if (!merged.valid) {\n        throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n    }\n    result.value = merged.data;\n    return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const items = def.items;\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"tuple\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        payload.value = [];\n        const proms = [];\n        const optinStart = getTupleOptStart(items, \"optin\");\n        const optoutStart = getTupleOptStart(items, \"optout\");\n        if (!def.rest) {\n            if (input.length < optinStart) {\n                payload.issues.push({\n                    code: \"too_small\",\n                    minimum: optinStart,\n                    inclusive: true,\n                    input,\n                    inst,\n                    origin: \"array\",\n                });\n                return payload;\n            }\n            if (input.length > items.length) {\n                payload.issues.push({\n                    code: \"too_big\",\n                    maximum: items.length,\n                    inclusive: true,\n                    input,\n                    inst,\n                    origin: \"array\",\n                });\n            }\n        }\n        // Run every item in parallel, collecting results into an indexed\n        // array. The post-processing in `handleTupleResults` walks them in\n        // order so it can decide whether an absent optional-output error can\n        // truncate the tail or must be reported to preserve required output.\n        const itemResults = new Array(items.length);\n        for (let i = 0; i < items.length; i++) {\n            const r = items[i]._zod.run({ value: input[i], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((rr) => {\n                    itemResults[i] = rr;\n                }));\n            }\n            else {\n                itemResults[i] = r;\n            }\n        }\n        if (def.rest) {\n            let i = items.length - 1;\n            const rest = input.slice(items.length);\n            for (const el of rest) {\n                i++;\n                const result = def.rest._zod.run({ value: el, issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((r) => handleTupleResult(r, payload, i)));\n                }\n                else {\n                    handleTupleResult(result, payload, i);\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => handleTupleResults(itemResults, payload, items, input, optoutStart));\n        }\n        return handleTupleResults(itemResults, payload, items, input, optoutStart);\n    };\n});\nfunction getTupleOptStart(items, key) {\n    for (let i = items.length - 1; i >= 0; i--) {\n        if (items[i]._zod[key] !== \"optional\")\n            return i + 1;\n    }\n    return 0;\n}\nfunction handleTupleResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nfunction handleTupleResults(itemResults, final, items, input, optoutStart) {\n    // Walk results in order. Mirror $ZodObject's swallow-on-absent-optional\n    // rule, but only after `optoutStart`: the first index where the output\n    // tuple tail can be absent.\n    for (let i = 0; i < items.length; i++) {\n        const r = itemResults[i];\n        const isPresent = i < input.length;\n        if (r.issues.length) {\n            if (!isPresent && i >= optoutStart) {\n                final.value.length = i;\n                break;\n            }\n            final.issues.push(...util.prefixIssues(i, r.issues));\n        }\n        final.value[i] = r.value;\n    }\n    // Drop trailing slots that produced `undefined` for absent input\n    // (the array analog of an absent optional key on an object). The\n    // `i >= input.length` floor is critical: an explicit `undefined`\n    // *inside* the input must be preserved even when the schema is\n    // optional-out (e.g. `z.string().or(z.undefined())` accepting an\n    // explicit undefined value).\n    for (let i = final.value.length - 1; i >= input.length; i--) {\n        if (items[i]._zod.optout === \"optional\" && final.value[i] === undefined) {\n            final.value.length = i;\n        }\n        else {\n            break;\n        }\n    }\n    return final;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isPlainObject(input)) {\n            payload.issues.push({\n                expected: \"record\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        const values = def.keyType._zod.values;\n        if (values) {\n            payload.value = {};\n            const recordKeys = new Set();\n            for (const key of values) {\n                if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n                    recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n                    const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                    if (keyResult instanceof Promise) {\n                        throw new Error(\"Async schemas not supported in object keys currently\");\n                    }\n                    if (keyResult.issues.length) {\n                        payload.issues.push({\n                            code: \"invalid_key\",\n                            origin: \"record\",\n                            issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                            input: key,\n                            path: [key],\n                            inst,\n                        });\n                        continue;\n                    }\n                    const outKey = keyResult.value;\n                    const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                    if (result instanceof Promise) {\n                        proms.push(result.then((result) => {\n                            if (result.issues.length) {\n                                payload.issues.push(...util.prefixIssues(key, result.issues));\n                            }\n                            payload.value[outKey] = result.value;\n                        }));\n                    }\n                    else {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[outKey] = result.value;\n                    }\n                }\n            }\n            let unrecognized;\n            for (const key in input) {\n                if (!recordKeys.has(key)) {\n                    unrecognized = unrecognized ?? [];\n                    unrecognized.push(key);\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                });\n            }\n        }\n        else {\n            payload.value = {};\n            // Reflect.ownKeys for Symbol-key support; filter non-enumerable to match z.object()\n            for (const key of Reflect.ownKeys(input)) {\n                if (key === \"__proto__\")\n                    continue;\n                if (!Object.prototype.propertyIsEnumerable.call(input, key))\n                    continue;\n                let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                if (keyResult instanceof Promise) {\n                    throw new Error(\"Async schemas not supported in object keys currently\");\n                }\n                // Numeric string fallback: if key is a numeric string and failed, retry with Number(key)\n                // This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n                const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n                if (checkNumericKey) {\n                    const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n                    if (retryResult instanceof Promise) {\n                        throw new Error(\"Async schemas not supported in object keys currently\");\n                    }\n                    if (retryResult.issues.length === 0) {\n                        keyResult = retryResult;\n                    }\n                }\n                if (keyResult.issues.length) {\n                    if (def.mode === \"loose\") {\n                        // Pass through unchanged\n                        payload.value[key] = input[key];\n                    }\n                    else {\n                        // Default \"strict\" behavior: error on invalid key\n                        payload.issues.push({\n                            code: \"invalid_key\",\n                            origin: \"record\",\n                            issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                            input: key,\n                            path: [key],\n                            inst,\n                        });\n                    }\n                    continue;\n                }\n                const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[keyResult.value] = result.value;\n                    }));\n                }\n                else {\n                    if (result.issues.length) {\n                        payload.issues.push(...util.prefixIssues(key, result.issues));\n                    }\n                    payload.value[keyResult.value] = result.value;\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload;\n    };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Map)) {\n            payload.issues.push({\n                expected: \"map\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Map();\n        for (const [key, value] of input) {\n            const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n            const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n            if (keyResult instanceof Promise || valueResult instanceof Promise) {\n                proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n                    handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n                }));\n            }\n            else {\n                handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n    if (keyResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, keyResult.issues));\n        }\n        else {\n            final.issues.push({\n                code: \"invalid_key\",\n                origin: \"map\",\n                input,\n                inst,\n                issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    if (valueResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, valueResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_element\",\n                input,\n                inst,\n                key: key,\n                issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Set)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"set\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Set();\n        for (const item of input) {\n            const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleSetResult(result, payload)));\n            }\n            else\n                handleSetResult(result, payload);\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleSetResult(result, final) {\n    if (result.issues.length) {\n        final.issues.push(...result.issues);\n    }\n    final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const values = util.getEnumValues(def.entries);\n    const valuesSet = new Set(values);\n    inst._zod.values = valuesSet;\n    inst._zod.pattern = new RegExp(`^(${values\n        .filter((k) => util.propertyKeyTypes.has(typeof k))\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (valuesSet.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    if (def.values.length === 0) {\n        throw new Error(\"Cannot create literal schema with no valid values\");\n    }\n    const values = new Set(def.values);\n    inst._zod.values = values;\n    inst._zod.pattern = new RegExp(`^(${def.values\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        // @ts-ignore\n        if (input instanceof File)\n            return payload;\n        payload.issues.push({\n            expected: \"file\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        const _out = def.transform(payload.value, payload);\n        if (ctx.async) {\n            const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n            return output.then((output) => {\n                payload.value = output;\n                payload.fallback = true;\n                return payload;\n            });\n        }\n        if (_out instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        payload.value = _out;\n        payload.fallback = true;\n        return payload;\n    };\n});\nfunction handleOptionalResult(result, input) {\n    if (input === undefined && (result.issues.length || result.fallback)) {\n        return { issues: [], value: undefined };\n    }\n    return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (def.innerType._zod.optin === \"optional\") {\n            const input = payload.value;\n            const result = def.innerType._zod.run(payload, ctx);\n            if (result instanceof Promise)\n                return result.then((r) => handleOptionalResult(r, input));\n            return handleOptionalResult(result, input);\n        }\n        if (payload.value === undefined) {\n            return payload;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n    // Call parent init - inherits optin/optout = \"optional\"\n    $ZodOptional.init(inst, def);\n    // Override values/pattern to NOT add undefined\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n    // Override parse to just delegate (no undefined handling)\n    inst._zod.parse = (payload, ctx) => {\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n    });\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        // Forward direction (decode): allow null to pass through\n        if (payload.value === null)\n            return payload;\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // inst._zod.qin = \"true\";\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply defaults for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n            /**\n             * $ZodDefault returns the default value immediately in forward direction.\n             * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe.   */\n            return payload;\n        }\n        // Forward direction: continue with default handling\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleDefaultResult(result, def));\n        }\n        return handleDefaultResult(result, def);\n    };\n});\nfunction handleDefaultResult(payload, def) {\n    if (payload.value === undefined) {\n        payload.value = def.defaultValue;\n    }\n    return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply prefault for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => {\n        const v = def.innerType._zod.values;\n        return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleNonOptionalResult(result, inst));\n        }\n        return handleNonOptionalResult(result, inst);\n    };\n});\nfunction handleNonOptionalResult(payload, inst) {\n    if (!payload.issues.length && payload.value === undefined) {\n        payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: payload.value,\n            inst,\n        });\n    }\n    return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(\"ZodSuccess\");\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.issues.length === 0;\n                return payload;\n            });\n        }\n        payload.value = result.issues.length === 0;\n        return payload;\n    };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply catch logic\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.value;\n                if (result.issues.length) {\n                    payload.value = def.catchValue({\n                        ...payload,\n                        error: {\n                            issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        },\n                        input: payload.value,\n                    });\n                    payload.issues = [];\n                    payload.fallback = true;\n                }\n                return payload;\n            });\n        }\n        payload.value = result.value;\n        if (result.issues.length) {\n            payload.value = def.catchValue({\n                ...payload,\n                error: {\n                    issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                },\n                input: payload.value,\n            });\n            payload.issues = [];\n            payload.fallback = true;\n        }\n        return payload;\n    };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"nan\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handlePipeResult(right, def.in, ctx));\n            }\n            return handlePipeResult(right, def.in, ctx);\n        }\n        const left = def.in._zod.run(payload, ctx);\n        if (left instanceof Promise) {\n            return left.then((left) => handlePipeResult(left, def.out, ctx));\n        }\n        return handlePipeResult(left, def.out, ctx);\n    };\n});\nfunction handlePipeResult(left, next, ctx) {\n    if (left.issues.length) {\n        // prevent further checks\n        left.aborted = true;\n        return left;\n    }\n    return next._zod.run({ value: left.value, issues: left.issues, fallback: left.fallback }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        const direction = ctx.direction || \"forward\";\n        if (direction === \"forward\") {\n            const left = def.in._zod.run(payload, ctx);\n            if (left instanceof Promise) {\n                return left.then((left) => handleCodecAResult(left, def, ctx));\n            }\n            return handleCodecAResult(left, def, ctx);\n        }\n        else {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handleCodecAResult(right, def, ctx));\n            }\n            return handleCodecAResult(right, def, ctx);\n        }\n    };\n});\nfunction handleCodecAResult(result, def, ctx) {\n    if (result.issues.length) {\n        // prevent further checks\n        result.aborted = true;\n        return result;\n    }\n    const direction = ctx.direction || \"forward\";\n    if (direction === \"forward\") {\n        const transformed = def.transform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.out, ctx);\n    }\n    else {\n        const transformed = def.reverseTransform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.in, ctx);\n    }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n    // Check if transform added any issues\n    if (left.issues.length) {\n        left.aborted = true;\n        return left;\n    }\n    return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodPreprocess = /*@__PURE__*/ core.$constructor(\"$ZodPreprocess\", (inst, def) => {\n    $ZodPipe.init(inst, def);\n});\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then(handleReadonlyResult);\n        }\n        return handleReadonlyResult(result);\n    };\n});\nfunction handleReadonlyResult(payload) {\n    payload.value = Object.freeze(payload.value);\n    return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const regexParts = [];\n    for (const part of def.parts) {\n        if (typeof part === \"object\" && part !== null) {\n            // is Zod schema\n            if (!part._zod.pattern) {\n                // if (!source)\n                throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n            }\n            const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n            if (!source)\n                throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n            const start = source.startsWith(\"^\") ? 1 : 0;\n            const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n            regexParts.push(source.slice(start, end));\n        }\n        else if (part === null || util.primitiveTypes.has(typeof part)) {\n            regexParts.push(util.escapeRegex(`${part}`));\n        }\n        else {\n            throw new Error(`Invalid template literal part: ${part}`);\n        }\n    }\n    inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"string\") {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"string\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        inst._zod.pattern.lastIndex = 0;\n        if (!inst._zod.pattern.test(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                code: \"invalid_format\",\n                format: def.format ?? \"template_literal\",\n                pattern: inst._zod.pattern.source,\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._def = def;\n    inst._zod.def = def;\n    inst.implement = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implement() must be called with a function\");\n        }\n        return function (...args) {\n            const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n            const result = Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return parse(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst.implementAsync = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implementAsync() must be called with a function\");\n        }\n        return async function (...args) {\n            const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n            const result = await Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return await parseAsync(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"function\") {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"function\",\n                input: payload.value,\n                inst,\n            });\n            return payload;\n        }\n        // Check if output is a promise type to determine if we should use async implementation\n        const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n        if (hasPromiseOutput) {\n            payload.value = inst.implementAsync(payload.value);\n        }\n        else {\n            payload.value = inst.implement(payload.value);\n        }\n        return payload;\n    };\n    inst.input = (...args) => {\n        const F = inst.constructor;\n        if (Array.isArray(args[0])) {\n            return new F({\n                type: \"function\",\n                input: new $ZodTuple({\n                    type: \"tuple\",\n                    items: args[0],\n                    rest: args[1],\n                }),\n                output: inst._def.output,\n            });\n        }\n        return new F({\n            type: \"function\",\n            input: args[0],\n            output: inst._def.output,\n        });\n    };\n    inst.output = (output) => {\n        const F = inst.constructor;\n        return new F({\n            type: \"function\",\n            input: inst._def.input,\n            output,\n        });\n    };\n    return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n    };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // Cache the resolved inner type on the shared `def` so all clones of this\n    // lazy (e.g. via `.describe()`/`.meta()`) share the same inner instance,\n    // preserving identity for cycle detection on recursive schemas.\n    util.defineLazy(inst._zod, \"innerType\", () => {\n        const d = def;\n        if (!d._cachedInner)\n            d._cachedInner = def.getter();\n        return d._cachedInner;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n    util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n    util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n    util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\n    inst._zod.parse = (payload, ctx) => {\n        const inner = inst._zod.innerType;\n        return inner._zod.run(payload, ctx);\n    };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n    checks.$ZodCheck.init(inst, def);\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _) => {\n        return payload;\n    };\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const r = def.fn(input);\n        if (r instanceof Promise) {\n            return r.then((r) => handleRefineResult(r, payload, input, inst));\n        }\n        handleRefineResult(r, payload, input, inst);\n        return;\n    };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n    if (!result) {\n        const _iss = {\n            code: \"custom\",\n            input,\n            inst, // incorporates params.error into issue reporting\n            path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n            continue: !inst._zod.def.abort,\n            // params: inst._zod.def.params,\n        };\n        if (inst._zod.def.params)\n            _iss.params = inst._zod.def.params;\n        payload.issues.push(util.issue(_iss));\n    }\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"حرف\", verb: \"أن يحوي\" },\n        file: { unit: \"بايت\", verb: \"أن يحوي\" },\n        array: { unit: \"عنصر\", verb: \"أن يحوي\" },\n        set: { unit: \"عنصر\", verb: \"أن يحوي\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"مدخل\",\n        email: \"بريد إلكتروني\",\n        url: \"رابط\",\n        emoji: \"إيموجي\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"تاريخ ووقت بمعيار ISO\",\n        date: \"تاريخ بمعيار ISO\",\n        time: \"وقت بمعيار ISO\",\n        duration: \"مدة بمعيار ISO\",\n        ipv4: \"عنوان IPv4\",\n        ipv6: \"عنوان IPv6\",\n        cidrv4: \"مدى عناوين بصيغة IPv4\",\n        cidrv6: \"مدى عناوين بصيغة IPv6\",\n        base64: \"نَص بترميز base64-encoded\",\n        base64url: \"نَص بترميز base64url-encoded\",\n        json_string: \"نَص على هيئة JSON\",\n        e164: \"رقم هاتف بمعيار E.164\",\n        jwt: \"JWT\",\n        template_literal: \"مدخل\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `مدخلات غير مقبولة: يفترض إدخال instanceof ${issue.expected}، ولكن تم إدخال ${received}`;\n                }\n                return `مدخلات غير مقبولة: يفترض إدخال ${expected}، ولكن تم إدخال ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `مدخلات غير مقبولة: يفترض إدخال ${util.stringifyPrimitive(issue.values[0])}`;\n                return `اختيار غير مقبول: يتوقع انتقاء أحد هذه الخيارات: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return ` أكبر من اللازم: يفترض أن تكون ${issue.origin ?? \"القيمة\"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"عنصر\"}`;\n                return `أكبر من اللازم: يفترض أن تكون ${issue.origin ?? \"القيمة\"} ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `أصغر من اللازم: يفترض لـ ${issue.origin} أن يكون ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `أصغر من اللازم: يفترض لـ ${issue.origin} أن يكون ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `نَص غير مقبول: يجب أن يبدأ بـ \"${issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `نَص غير مقبول: يجب أن ينتهي بـ \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `نَص غير مقبول: يجب أن يتضمَّن \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `نَص غير مقبول: يجب أن يطابق النمط ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} غير مقبول`;\n            }\n            case \"not_multiple_of\":\n                return `رقم غير مقبول: يجب أن يكون من مضاعفات ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `معرف${issue.keys.length > 1 ? \"ات\" : \"\"} غريب${issue.keys.length > 1 ? \"ة\" : \"\"}: ${util.joinValues(issue.keys, \"، \")}`;\n            case \"invalid_key\":\n                return `معرف غير مقبول في ${issue.origin}`;\n            case \"invalid_union\":\n                return \"مدخل غير مقبول\";\n            case \"invalid_element\":\n                return `مدخل غير مقبول في ${issue.origin}`;\n            default:\n                return \"مدخل غير مقبول\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"simvol\", verb: \"olmalıdır\" },\n        file: { unit: \"bayt\", verb: \"olmalıdır\" },\n        array: { unit: \"element\", verb: \"olmalıdır\" },\n        set: { unit: \"element\", verb: \"olmalıdır\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"email address\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datetime\",\n        date: \"ISO date\",\n        time: \"ISO time\",\n        duration: \"ISO duration\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded string\",\n        base64url: \"base64url-encoded string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 number\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Yanlış dəyər: gözlənilən instanceof ${issue.expected}, daxil olan ${received}`;\n                }\n                return `Yanlış dəyər: gözlənilən ${expected}, daxil olan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Yanlış dəyər: gözlənilən ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Yanlış seçim: aşağıdakılardan biri olmalıdır: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Çox böyük: gözlənilən ${issue.origin ?? \"dəyər\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n                return `Çox böyük: gözlənilən ${issue.origin ?? \"dəyər\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Çox kiçik: gözlənilən ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                return `Çox kiçik: gözlənilən ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Yanlış mətn: \"${_issue.prefix}\" ilə başlamalıdır`;\n                if (_issue.format === \"ends_with\")\n                    return `Yanlış mətn: \"${_issue.suffix}\" ilə bitməlidir`;\n                if (_issue.format === \"includes\")\n                    return `Yanlış mətn: \"${_issue.includes}\" daxil olmalıdır`;\n                if (_issue.format === \"regex\")\n                    return `Yanlış mətn: ${_issue.pattern} şablonuna uyğun olmalıdır`;\n                return `Yanlış ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Yanlış ədəd: ${issue.divisor} ilə bölünə bilən olmalıdır`;\n            case \"unrecognized_keys\":\n                return `Tanınmayan açar${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} daxilində yanlış açar`;\n            case \"invalid_union\":\n                return \"Yanlış dəyər\";\n            case \"invalid_element\":\n                return `${issue.origin} daxilində yanlış dəyər`;\n            default:\n                return `Yanlış dəyər`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nfunction getBelarusianPlural(count, one, few, many) {\n    const absCount = Math.abs(count);\n    const lastDigit = absCount % 10;\n    const lastTwoDigits = absCount % 100;\n    if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {\n        return many;\n    }\n    if (lastDigit === 1) {\n        return one;\n    }\n    if (lastDigit >= 2 && lastDigit <= 4) {\n        return few;\n    }\n    return many;\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"сімвал\",\n                few: \"сімвалы\",\n                many: \"сімвалаў\",\n            },\n            verb: \"мець\",\n        },\n        array: {\n            unit: {\n                one: \"элемент\",\n                few: \"элементы\",\n                many: \"элементаў\",\n            },\n            verb: \"мець\",\n        },\n        set: {\n            unit: {\n                one: \"элемент\",\n                few: \"элементы\",\n                many: \"элементаў\",\n            },\n            verb: \"мець\",\n        },\n        file: {\n            unit: {\n                one: \"байт\",\n                few: \"байты\",\n                many: \"байтаў\",\n            },\n            verb: \"мець\",\n        },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"увод\",\n        email: \"email адрас\",\n        url: \"URL\",\n        emoji: \"эмодзі\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO дата і час\",\n        date: \"ISO дата\",\n        time: \"ISO час\",\n        duration: \"ISO працягласць\",\n        ipv4: \"IPv4 адрас\",\n        ipv6: \"IPv6 адрас\",\n        cidrv4: \"IPv4 дыяпазон\",\n        cidrv6: \"IPv6 дыяпазон\",\n        base64: \"радок у фармаце base64\",\n        base64url: \"радок у фармаце base64url\",\n        json_string: \"JSON радок\",\n        e164: \"нумар E.164\",\n        jwt: \"JWT\",\n        template_literal: \"увод\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"лік\",\n        array: \"масіў\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Няправільны ўвод: чакаўся instanceof ${issue.expected}, атрымана ${received}`;\n                }\n                return `Няправільны ўвод: чакаўся ${expected}, атрымана ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Няправільны ўвод: чакалася ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Няправільны варыянт: чакаўся адзін з ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const maxValue = Number(issue.maximum);\n                    const unit = getBelarusianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `Занадта вялікі: чакалася, што ${issue.origin ?? \"значэнне\"} павінна ${sizing.verb} ${adj}${issue.maximum.toString()} ${unit}`;\n                }\n                return `Занадта вялікі: чакалася, што ${issue.origin ?? \"значэнне\"} павінна быць ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const minValue = Number(issue.minimum);\n                    const unit = getBelarusianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `Занадта малы: чакалася, што ${issue.origin} павінна ${sizing.verb} ${adj}${issue.minimum.toString()} ${unit}`;\n                }\n                return `Занадта малы: чакалася, што ${issue.origin} павінна быць ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Няправільны радок: павінен пачынацца з \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Няправільны радок: павінен заканчвацца на \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Няправільны радок: павінен змяшчаць \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Няправільны радок: павінен адпавядаць шаблону ${_issue.pattern}`;\n                return `Няправільны ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Няправільны лік: павінен быць кратным ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Нераспазнаны ${issue.keys.length > 1 ? \"ключы\" : \"ключ\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Няправільны ключ у ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Няправільны ўвод\";\n            case \"invalid_element\":\n                return `Няправільнае значэнне ў ${issue.origin}`;\n            default:\n                return `Няправільны ўвод`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"символа\", verb: \"да съдържа\" },\n        file: { unit: \"байта\", verb: \"да съдържа\" },\n        array: { unit: \"елемента\", verb: \"да съдържа\" },\n        set: { unit: \"елемента\", verb: \"да съдържа\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"вход\",\n        email: \"имейл адрес\",\n        url: \"URL\",\n        emoji: \"емоджи\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO време\",\n        date: \"ISO дата\",\n        time: \"ISO време\",\n        duration: \"ISO продължителност\",\n        ipv4: \"IPv4 адрес\",\n        ipv6: \"IPv6 адрес\",\n        cidrv4: \"IPv4 диапазон\",\n        cidrv6: \"IPv6 диапазон\",\n        base64: \"base64-кодиран низ\",\n        base64url: \"base64url-кодиран низ\",\n        json_string: \"JSON низ\",\n        e164: \"E.164 номер\",\n        jwt: \"JWT\",\n        template_literal: \"вход\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"число\",\n        array: \"масив\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Невалиден вход: очакван instanceof ${issue.expected}, получен ${received}`;\n                }\n                return `Невалиден вход: очакван ${expected}, получен ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Невалиден вход: очакван ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Невалидна опция: очаквано едно от ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Твърде голямо: очаква се ${issue.origin ?? \"стойност\"} да съдържа ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"елемента\"}`;\n                return `Твърде голямо: очаква се ${issue.origin ?? \"стойност\"} да бъде ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Твърде малко: очаква се ${issue.origin} да съдържа ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Твърде малко: очаква се ${issue.origin} да бъде ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Невалиден низ: трябва да започва с \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Невалиден низ: трябва да завършва с \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Невалиден низ: трябва да включва \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Невалиден низ: трябва да съвпада с ${_issue.pattern}`;\n                let invalid_adj = \"Невалиден\";\n                if (_issue.format === \"emoji\")\n                    invalid_adj = \"Невалидно\";\n                if (_issue.format === \"datetime\")\n                    invalid_adj = \"Невалидно\";\n                if (_issue.format === \"date\")\n                    invalid_adj = \"Невалидна\";\n                if (_issue.format === \"time\")\n                    invalid_adj = \"Невалидно\";\n                if (_issue.format === \"duration\")\n                    invalid_adj = \"Невалидна\";\n                return `${invalid_adj} ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Невалидно число: трябва да бъде кратно на ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Неразпознат${issue.keys.length > 1 ? \"и\" : \"\"} ключ${issue.keys.length > 1 ? \"ове\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Невалиден ключ в ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Невалиден вход\";\n            case \"invalid_element\":\n                return `Невалидна стойност в ${issue.origin}`;\n            default:\n                return `Невалиден вход`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caràcters\", verb: \"contenir\" },\n        file: { unit: \"bytes\", verb: \"contenir\" },\n        array: { unit: \"elements\", verb: \"contenir\" },\n        set: { unit: \"elements\", verb: \"contenir\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"entrada\",\n        email: \"adreça electrònica\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data i hora ISO\",\n        date: \"data ISO\",\n        time: \"hora ISO\",\n        duration: \"durada ISO\",\n        ipv4: \"adreça IPv4\",\n        ipv6: \"adreça IPv6\",\n        cidrv4: \"rang IPv4\",\n        cidrv6: \"rang IPv6\",\n        base64: \"cadena codificada en base64\",\n        base64url: \"cadena codificada en base64url\",\n        json_string: \"cadena JSON\",\n        e164: \"número E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entrada\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Tipus invàlid: s'esperava instanceof ${issue.expected}, s'ha rebut ${received}`;\n                }\n                return `Tipus invàlid: s'esperava ${expected}, s'ha rebut ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Valor invàlid: s'esperava ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opció invàlida: s'esperava una de ${util.joinValues(issue.values, \" o \")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"com a màxim\" : \"menys de\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Massa gran: s'esperava que ${issue.origin ?? \"el valor\"} contingués ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `Massa gran: s'esperava que ${issue.origin ?? \"el valor\"} fos ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"com a mínim\" : \"més de\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Massa petit: s'esperava que ${issue.origin} contingués ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Massa petit: s'esperava que ${issue.origin} fos ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Format invàlid: ha de començar amb \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Format invàlid: ha d'acabar amb \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Format invàlid: ha d'incloure \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Format invàlid: ha de coincidir amb el patró ${_issue.pattern}`;\n                return `Format invàlid per a ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Número invàlid: ha de ser múltiple de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Clau${issue.keys.length > 1 ? \"s\" : \"\"} no reconeguda${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Clau invàlida a ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrada invàlida\"; // Could also be \"Tipus d'unió invàlid\" but \"Entrada invàlida\" is more general\n            case \"invalid_element\":\n                return `Element invàlid a ${issue.origin}`;\n            default:\n                return `Entrada invàlida`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znaků\", verb: \"mít\" },\n        file: { unit: \"bajtů\", verb: \"mít\" },\n        array: { unit: \"prvků\", verb: \"mít\" },\n        set: { unit: \"prvků\", verb: \"mít\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"regulární výraz\",\n        email: \"e-mailová adresa\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"datum a čas ve formátu ISO\",\n        date: \"datum ve formátu ISO\",\n        time: \"čas ve formátu ISO\",\n        duration: \"doba trvání ISO\",\n        ipv4: \"IPv4 adresa\",\n        ipv6: \"IPv6 adresa\",\n        cidrv4: \"rozsah IPv4\",\n        cidrv6: \"rozsah IPv6\",\n        base64: \"řetězec zakódovaný ve formátu base64\",\n        base64url: \"řetězec zakódovaný ve formátu base64url\",\n        json_string: \"řetězec ve formátu JSON\",\n        e164: \"číslo E.164\",\n        jwt: \"JWT\",\n        template_literal: \"vstup\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"číslo\",\n        string: \"řetězec\",\n        function: \"funkce\",\n        array: \"pole\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Neplatný vstup: očekáváno instanceof ${issue.expected}, obdrženo ${received}`;\n                }\n                return `Neplatný vstup: očekáváno ${expected}, obdrženo ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Neplatný vstup: očekáváno ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Neplatná možnost: očekávána jedna z hodnot ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Hodnota je příliš velká: ${issue.origin ?? \"hodnota\"} musí mít ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"prvků\"}`;\n                }\n                return `Hodnota je příliš velká: ${issue.origin ?? \"hodnota\"} musí být ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Hodnota je příliš malá: ${issue.origin ?? \"hodnota\"} musí mít ${adj}${issue.minimum.toString()} ${sizing.unit ?? \"prvků\"}`;\n                }\n                return `Hodnota je příliš malá: ${issue.origin ?? \"hodnota\"} musí být ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Neplatný řetězec: musí začínat na \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Neplatný řetězec: musí končit na \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Neplatný řetězec: musí obsahovat \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Neplatný řetězec: musí odpovídat vzoru ${_issue.pattern}`;\n                return `Neplatný formát ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Neplatné číslo: musí být násobkem ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Neznámé klíče: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Neplatný klíč v ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Neplatný vstup\";\n            case \"invalid_element\":\n                return `Neplatná hodnota v ${issue.origin}`;\n            default:\n                return `Neplatný vstup`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tegn\", verb: \"havde\" },\n        file: { unit: \"bytes\", verb: \"havde\" },\n        array: { unit: \"elementer\", verb: \"indeholdt\" },\n        set: { unit: \"elementer\", verb: \"indeholdt\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"e-mailadresse\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO dato- og klokkeslæt\",\n        date: \"ISO-dato\",\n        time: \"ISO-klokkeslæt\",\n        duration: \"ISO-varighed\",\n        ipv4: \"IPv4-område\",\n        ipv6: \"IPv6-område\",\n        cidrv4: \"IPv4-spektrum\",\n        cidrv6: \"IPv6-spektrum\",\n        base64: \"base64-kodet streng\",\n        base64url: \"base64url-kodet streng\",\n        json_string: \"JSON-streng\",\n        e164: \"E.164-nummer\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        string: \"streng\",\n        number: \"tal\",\n        boolean: \"boolean\",\n        array: \"liste\",\n        object: \"objekt\",\n        set: \"sæt\",\n        file: \"fil\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ugyldigt input: forventede instanceof ${issue.expected}, fik ${received}`;\n                }\n                return `Ugyldigt input: forventede ${expected}, fik ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ugyldig værdi: forventede ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ugyldigt valg: forventede en af følgende ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing)\n                    return `For stor: forventede ${origin ?? \"value\"} ${sizing.verb} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"elementer\"}`;\n                return `For stor: forventede ${origin ?? \"value\"} havde ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing) {\n                    return `For lille: forventede ${origin} ${sizing.verb} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `For lille: forventede ${origin} havde ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ugyldig streng: skal starte med \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Ugyldig streng: skal ende med \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ugyldig streng: skal indeholde \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ugyldig streng: skal matche mønsteret ${_issue.pattern}`;\n                return `Ugyldig ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ugyldigt tal: skal være deleligt med ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Ukendte nøgler\" : \"Ukendt nøgle\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ugyldig nøgle i ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ugyldigt input: matcher ingen af de tilladte typer\";\n            case \"invalid_element\":\n                return `Ugyldig værdi i ${issue.origin}`;\n            default:\n                return `Ugyldigt input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"Zeichen\", verb: \"zu haben\" },\n        file: { unit: \"Bytes\", verb: \"zu haben\" },\n        array: { unit: \"Elemente\", verb: \"zu haben\" },\n        set: { unit: \"Elemente\", verb: \"zu haben\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"Eingabe\",\n        email: \"E-Mail-Adresse\",\n        url: \"URL\",\n        emoji: \"Emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-Datum und -Uhrzeit\",\n        date: \"ISO-Datum\",\n        time: \"ISO-Uhrzeit\",\n        duration: \"ISO-Dauer\",\n        ipv4: \"IPv4-Adresse\",\n        ipv6: \"IPv6-Adresse\",\n        cidrv4: \"IPv4-Bereich\",\n        cidrv6: \"IPv6-Bereich\",\n        base64: \"Base64-codierter String\",\n        base64url: \"Base64-URL-codierter String\",\n        json_string: \"JSON-String\",\n        e164: \"E.164-Nummer\",\n        jwt: \"JWT\",\n        template_literal: \"Eingabe\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"Zahl\",\n        array: \"Array\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ungültige Eingabe: erwartet instanceof ${issue.expected}, erhalten ${received}`;\n                }\n                return `Ungültige Eingabe: erwartet ${expected}, erhalten ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ungültige Eingabe: erwartet ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ungültige Option: erwartet eine von ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Zu groß: erwartet, dass ${issue.origin ?? \"Wert\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"Elemente\"} hat`;\n                return `Zu groß: erwartet, dass ${issue.origin ?? \"Wert\"} ${adj}${issue.maximum.toString()} ist`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} hat`;\n                }\n                return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ist`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ungültiger String: muss mit \"${_issue.prefix}\" beginnen`;\n                if (_issue.format === \"ends_with\")\n                    return `Ungültiger String: muss mit \"${_issue.suffix}\" enden`;\n                if (_issue.format === \"includes\")\n                    return `Ungültiger String: muss \"${_issue.includes}\" enthalten`;\n                if (_issue.format === \"regex\")\n                    return `Ungültiger String: muss dem Muster ${_issue.pattern} entsprechen`;\n                return `Ungültig: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ungültige Zahl: muss ein Vielfaches von ${issue.divisor} sein`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Unbekannte Schlüssel\" : \"Unbekannter Schlüssel\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ungültiger Schlüssel in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ungültige Eingabe\";\n            case \"invalid_element\":\n                return `Ungültiger Wert in ${issue.origin}`;\n            default:\n                return `Ungültige Eingabe`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"χαρακτήρες\", verb: \"να έχει\" },\n        file: { unit: \"bytes\", verb: \"να έχει\" },\n        array: { unit: \"στοιχεία\", verb: \"να έχει\" },\n        set: { unit: \"στοιχεία\", verb: \"να έχει\" },\n        map: { unit: \"καταχωρήσεις\", verb: \"να έχει\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"είσοδος\",\n        email: \"διεύθυνση email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO ημερομηνία και ώρα\",\n        date: \"ISO ημερομηνία\",\n        time: \"ISO ώρα\",\n        duration: \"ISO διάρκεια\",\n        ipv4: \"διεύθυνση IPv4\",\n        ipv6: \"διεύθυνση IPv6\",\n        mac: \"διεύθυνση MAC\",\n        cidrv4: \"εύρος IPv4\",\n        cidrv6: \"εύρος IPv6\",\n        base64: \"συμβολοσειρά κωδικοποιημένη σε base64\",\n        base64url: \"συμβολοσειρά κωδικοποιημένη σε base64url\",\n        json_string: \"συμβολοσειρά JSON\",\n        e164: \"αριθμός E.164\",\n        jwt: \"JWT\",\n        template_literal: \"είσοδος\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (typeof issue.expected === \"string\" && /^[A-Z]/.test(issue.expected)) {\n                    return `Μη έγκυρη είσοδος: αναμενόταν instanceof ${issue.expected}, λήφθηκε ${received}`;\n                }\n                return `Μη έγκυρη είσοδος: αναμενόταν ${expected}, λήφθηκε ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Μη έγκυρη είσοδος: αναμενόταν ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Μη έγκυρη επιλογή: αναμενόταν ένα από ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Πολύ μεγάλο: αναμενόταν ${issue.origin ?? \"τιμή\"} να έχει ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"στοιχεία\"}`;\n                return `Πολύ μεγάλο: αναμενόταν ${issue.origin ?? \"τιμή\"} να είναι ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Πολύ μικρό: αναμενόταν ${issue.origin} να έχει ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Πολύ μικρό: αναμενόταν ${issue.origin} να είναι ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Μη έγκυρη συμβολοσειρά: πρέπει να ξεκινά με \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Μη έγκυρη συμβολοσειρά: πρέπει να τελειώνει με \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Μη έγκυρη συμβολοσειρά: πρέπει να περιέχει \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Μη έγκυρη συμβολοσειρά: πρέπει να ταιριάζει με το μοτίβο ${_issue.pattern}`;\n                return `Μη έγκυρο: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Μη έγκυρος αριθμός: πρέπει να είναι πολλαπλάσιο του ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Άγνωστ${issue.keys.length > 1 ? \"α\" : \"ο\"} κλειδ${issue.keys.length > 1 ? \"ιά\" : \"ί\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Μη έγκυρο κλειδί στο ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Μη έγκυρη είσοδος\";\n            case \"invalid_element\":\n                return `Μη έγκυρη τιμή στο ${issue.origin}`;\n            default:\n                return `Μη έγκυρη είσοδος`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"characters\", verb: \"to have\" },\n        file: { unit: \"bytes\", verb: \"to have\" },\n        array: { unit: \"items\", verb: \"to have\" },\n        set: { unit: \"items\", verb: \"to have\" },\n        map: { unit: \"entries\", verb: \"to have\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"email address\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datetime\",\n        date: \"ISO date\",\n        time: \"ISO time\",\n        duration: \"ISO duration\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        mac: \"MAC address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded string\",\n        base64url: \"base64url-encoded string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 number\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    // type names: missing keys = do not translate (use raw value via ?? fallback)\n    const TypeDictionary = {\n        // Compatibility: \"nan\" -> \"NaN\" for display\n        nan: \"NaN\",\n        // All other type names omitted - they fall back to raw values via ?? operator\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                return `Invalid input: expected ${expected}, received ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Invalid option: expected one of ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Too big: expected ${issue.origin ?? \"value\"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `Too big: expected ${issue.origin ?? \"value\"} to be ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Invalid string: must start with \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Invalid string: must end with \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Invalid string: must include \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Invalid string: must match pattern ${_issue.pattern}`;\n                return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Invalid number: must be a multiple of ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Unrecognized key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Invalid key in ${issue.origin}`;\n            case \"invalid_union\":\n                if (issue.options && Array.isArray(issue.options) && issue.options.length > 0) {\n                    const opts = issue.options.map((o) => `'${o}'`).join(\" | \");\n                    return `Invalid discriminator value. Expected ${opts}`;\n                }\n                return \"Invalid input\";\n            case \"invalid_element\":\n                return `Invalid value in ${issue.origin}`;\n            default:\n                return `Invalid input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karaktrojn\", verb: \"havi\" },\n        file: { unit: \"bajtojn\", verb: \"havi\" },\n        array: { unit: \"elementojn\", verb: \"havi\" },\n        set: { unit: \"elementojn\", verb: \"havi\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"enigo\",\n        email: \"retadreso\",\n        url: \"URL\",\n        emoji: \"emoĝio\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-datotempo\",\n        date: \"ISO-dato\",\n        time: \"ISO-tempo\",\n        duration: \"ISO-daŭro\",\n        ipv4: \"IPv4-adreso\",\n        ipv6: \"IPv6-adreso\",\n        cidrv4: \"IPv4-rango\",\n        cidrv6: \"IPv6-rango\",\n        base64: \"64-ume kodita karaktraro\",\n        base64url: \"URL-64-ume kodita karaktraro\",\n        json_string: \"JSON-karaktraro\",\n        e164: \"E.164-nombro\",\n        jwt: \"JWT\",\n        template_literal: \"enigo\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"nombro\",\n        array: \"tabelo\",\n        null: \"senvalora\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Nevalida enigo: atendiĝis instanceof ${issue.expected}, riceviĝis ${received}`;\n                }\n                return `Nevalida enigo: atendiĝis ${expected}, riceviĝis ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Nevalida enigo: atendiĝis ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Nevalida opcio: atendiĝis unu el ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Tro granda: atendiĝis ke ${issue.origin ?? \"valoro\"} havu ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementojn\"}`;\n                return `Tro granda: atendiĝis ke ${issue.origin ?? \"valoro\"} havu ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Tro malgranda: atendiĝis ke ${issue.origin} havu ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Tro malgranda: atendiĝis ke ${issue.origin} estu ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Nevalida karaktraro: devas komenciĝi per \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Nevalida karaktraro: devas finiĝi per \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Nevalida karaktraro: devas inkluzivi \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Nevalida karaktraro: devas kongrui kun la modelo ${_issue.pattern}`;\n                return `Nevalida ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Nevalida nombro: devas esti oblo de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Nekonata${issue.keys.length > 1 ? \"j\" : \"\"} ŝlosilo${issue.keys.length > 1 ? \"j\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Nevalida ŝlosilo en ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Nevalida enigo\";\n            case \"invalid_element\":\n                return `Nevalida valoro en ${issue.origin}`;\n            default:\n                return `Nevalida enigo`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caracteres\", verb: \"tener\" },\n        file: { unit: \"bytes\", verb: \"tener\" },\n        array: { unit: \"elementos\", verb: \"tener\" },\n        set: { unit: \"elementos\", verb: \"tener\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"entrada\",\n        email: \"dirección de correo electrónico\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"fecha y hora ISO\",\n        date: \"fecha ISO\",\n        time: \"hora ISO\",\n        duration: \"duración ISO\",\n        ipv4: \"dirección IPv4\",\n        ipv6: \"dirección IPv6\",\n        cidrv4: \"rango IPv4\",\n        cidrv6: \"rango IPv6\",\n        base64: \"cadena codificada en base64\",\n        base64url: \"URL codificada en base64\",\n        json_string: \"cadena JSON\",\n        e164: \"número E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entrada\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        string: \"texto\",\n        number: \"número\",\n        boolean: \"booleano\",\n        array: \"arreglo\",\n        object: \"objeto\",\n        set: \"conjunto\",\n        file: \"archivo\",\n        date: \"fecha\",\n        bigint: \"número grande\",\n        symbol: \"símbolo\",\n        undefined: \"indefinido\",\n        null: \"nulo\",\n        function: \"función\",\n        map: \"mapa\",\n        record: \"registro\",\n        tuple: \"tupla\",\n        enum: \"enumeración\",\n        union: \"unión\",\n        literal: \"literal\",\n        promise: \"promesa\",\n        void: \"vacío\",\n        never: \"nunca\",\n        unknown: \"desconocido\",\n        any: \"cualquiera\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Entrada inválida: se esperaba instanceof ${issue.expected}, recibido ${received}`;\n                }\n                return `Entrada inválida: se esperaba ${expected}, recibido ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entrada inválida: se esperaba ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opción inválida: se esperaba una de ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing)\n                    return `Demasiado grande: se esperaba que ${origin ?? \"valor\"} tuviera ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementos\"}`;\n                return `Demasiado grande: se esperaba que ${origin ?? \"valor\"} fuera ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing) {\n                    return `Demasiado pequeño: se esperaba que ${origin} tuviera ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Demasiado pequeño: se esperaba que ${origin} fuera ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Cadena inválida: debe comenzar con \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Cadena inválida: debe terminar en \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Cadena inválida: debe incluir \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Cadena inválida: debe coincidir con el patrón ${_issue.pattern}`;\n                return `Inválido ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Número inválido: debe ser múltiplo de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Llave${issue.keys.length > 1 ? \"s\" : \"\"} desconocida${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Llave inválida en ${TypeDictionary[issue.origin] ?? issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrada inválida\";\n            case \"invalid_element\":\n                return `Valor inválido en ${TypeDictionary[issue.origin] ?? issue.origin}`;\n            default:\n                return `Entrada inválida`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"کاراکتر\", verb: \"داشته باشد\" },\n        file: { unit: \"بایت\", verb: \"داشته باشد\" },\n        array: { unit: \"آیتم\", verb: \"داشته باشد\" },\n        set: { unit: \"آیتم\", verb: \"داشته باشد\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"ورودی\",\n        email: \"آدرس ایمیل\",\n        url: \"URL\",\n        emoji: \"ایموجی\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"تاریخ و زمان ایزو\",\n        date: \"تاریخ ایزو\",\n        time: \"زمان ایزو\",\n        duration: \"مدت زمان ایزو\",\n        ipv4: \"IPv4 آدرس\",\n        ipv6: \"IPv6 آدرس\",\n        cidrv4: \"IPv4 دامنه\",\n        cidrv6: \"IPv6 دامنه\",\n        base64: \"base64-encoded رشته\",\n        base64url: \"base64url-encoded رشته\",\n        json_string: \"JSON رشته\",\n        e164: \"E.164 عدد\",\n        jwt: \"JWT\",\n        template_literal: \"ورودی\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"عدد\",\n        array: \"آرایه\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `ورودی نامعتبر: می‌بایست instanceof ${issue.expected} می‌بود، ${received} دریافت شد`;\n                }\n                return `ورودی نامعتبر: می‌بایست ${expected} می‌بود، ${received} دریافت شد`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1) {\n                    return `ورودی نامعتبر: می‌بایست ${util.stringifyPrimitive(issue.values[0])} می‌بود`;\n                }\n                return `گزینه نامعتبر: می‌بایست یکی از ${util.joinValues(issue.values, \"|\")} می‌بود`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `خیلی بزرگ: ${issue.origin ?? \"مقدار\"} باید ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"عنصر\"} باشد`;\n                }\n                return `خیلی بزرگ: ${issue.origin ?? \"مقدار\"} باید ${adj}${issue.maximum.toString()} باشد`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `خیلی کوچک: ${issue.origin} باید ${adj}${issue.minimum.toString()} ${sizing.unit} باشد`;\n                }\n                return `خیلی کوچک: ${issue.origin} باید ${adj}${issue.minimum.toString()} باشد`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `رشته نامعتبر: باید با \"${_issue.prefix}\" شروع شود`;\n                }\n                if (_issue.format === \"ends_with\") {\n                    return `رشته نامعتبر: باید با \"${_issue.suffix}\" تمام شود`;\n                }\n                if (_issue.format === \"includes\") {\n                    return `رشته نامعتبر: باید شامل \"${_issue.includes}\" باشد`;\n                }\n                if (_issue.format === \"regex\") {\n                    return `رشته نامعتبر: باید با الگوی ${_issue.pattern} مطابقت داشته باشد`;\n                }\n                return `${FormatDictionary[_issue.format] ?? issue.format} نامعتبر`;\n            }\n            case \"not_multiple_of\":\n                return `عدد نامعتبر: باید مضرب ${issue.divisor} باشد`;\n            case \"unrecognized_keys\":\n                return `کلید${issue.keys.length > 1 ? \"های\" : \"\"} ناشناس: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `کلید ناشناس در ${issue.origin}`;\n            case \"invalid_union\":\n                return `ورودی نامعتبر`;\n            case \"invalid_element\":\n                return `مقدار نامعتبر در ${issue.origin}`;\n            default:\n                return `ورودی نامعتبر`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"merkkiä\", subject: \"merkkijonon\" },\n        file: { unit: \"tavua\", subject: \"tiedoston\" },\n        array: { unit: \"alkiota\", subject: \"listan\" },\n        set: { unit: \"alkiota\", subject: \"joukon\" },\n        number: { unit: \"\", subject: \"luvun\" },\n        bigint: { unit: \"\", subject: \"suuren kokonaisluvun\" },\n        int: { unit: \"\", subject: \"kokonaisluvun\" },\n        date: { unit: \"\", subject: \"päivämäärän\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"säännöllinen lauseke\",\n        email: \"sähköpostiosoite\",\n        url: \"URL-osoite\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-aikaleima\",\n        date: \"ISO-päivämäärä\",\n        time: \"ISO-aika\",\n        duration: \"ISO-kesto\",\n        ipv4: \"IPv4-osoite\",\n        ipv6: \"IPv6-osoite\",\n        cidrv4: \"IPv4-alue\",\n        cidrv6: \"IPv6-alue\",\n        base64: \"base64-koodattu merkkijono\",\n        base64url: \"base64url-koodattu merkkijono\",\n        json_string: \"JSON-merkkijono\",\n        e164: \"E.164-luku\",\n        jwt: \"JWT\",\n        template_literal: \"templaattimerkkijono\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Virheellinen tyyppi: odotettiin instanceof ${issue.expected}, oli ${received}`;\n                }\n                return `Virheellinen tyyppi: odotettiin ${expected}, oli ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Virheellinen syöte: täytyy olla ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Virheellinen valinta: täytyy olla yksi seuraavista: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Liian suuri: ${sizing.subject} täytyy olla ${adj}${issue.maximum.toString()} ${sizing.unit}`.trim();\n                }\n                return `Liian suuri: arvon täytyy olla ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Liian pieni: ${sizing.subject} täytyy olla ${adj}${issue.minimum.toString()} ${sizing.unit}`.trim();\n                }\n                return `Liian pieni: arvon täytyy olla ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Virheellinen syöte: täytyy alkaa \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Virheellinen syöte: täytyy loppua \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Virheellinen syöte: täytyy sisältää \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\") {\n                    return `Virheellinen syöte: täytyy vastata säännöllistä lauseketta ${_issue.pattern}`;\n                }\n                return `Virheellinen ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Virheellinen luku: täytyy olla luvun ${issue.divisor} monikerta`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Tuntemattomat avaimet\" : \"Tuntematon avain\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return \"Virheellinen avain tietueessa\";\n            case \"invalid_union\":\n                return \"Virheellinen unioni\";\n            case \"invalid_element\":\n                return \"Virheellinen arvo joukossa\";\n            default:\n                return `Virheellinen syöte`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caractères\", verb: \"avoir\" },\n        file: { unit: \"octets\", verb: \"avoir\" },\n        array: { unit: \"éléments\", verb: \"avoir\" },\n        set: { unit: \"éléments\", verb: \"avoir\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"entrée\",\n        email: \"adresse e-mail\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"date et heure ISO\",\n        date: \"date ISO\",\n        time: \"heure ISO\",\n        duration: \"durée ISO\",\n        ipv4: \"adresse IPv4\",\n        ipv6: \"adresse IPv6\",\n        cidrv4: \"plage IPv4\",\n        cidrv6: \"plage IPv6\",\n        base64: \"chaîne encodée en base64\",\n        base64url: \"chaîne encodée en base64url\",\n        json_string: \"chaîne JSON\",\n        e164: \"numéro E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entrée\",\n    };\n    const TypeDictionary = {\n        string: \"chaîne\",\n        number: \"nombre\",\n        int: \"entier\",\n        boolean: \"booléen\",\n        bigint: \"grand entier\",\n        symbol: \"symbole\",\n        undefined: \"indéfini\",\n        null: \"null\",\n        never: \"jamais\",\n        void: \"vide\",\n        date: \"date\",\n        array: \"tableau\",\n        object: \"objet\",\n        tuple: \"tuple\",\n        record: \"enregistrement\",\n        map: \"carte\",\n        set: \"ensemble\",\n        file: \"fichier\",\n        nonoptional: \"non-optionnel\",\n        nan: \"NaN\",\n        function: \"fonction\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Entrée invalide : instanceof ${issue.expected} attendu, ${received} reçu`;\n                }\n                return `Entrée invalide : ${expected} attendu, ${received} reçu`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entrée invalide : ${util.stringifyPrimitive(issue.values[0])} attendu`;\n                return `Option invalide : une valeur parmi ${util.joinValues(issue.values, \"|\")} attendue`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Trop grand : ${TypeDictionary[issue.origin] ?? \"valeur\"} doit ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"élément(s)\"}`;\n                return `Trop grand : ${TypeDictionary[issue.origin] ?? \"valeur\"} doit être ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Trop petit : ${TypeDictionary[issue.origin] ?? \"valeur\"} doit ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                return `Trop petit : ${TypeDictionary[issue.origin] ?? \"valeur\"} doit être ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Chaîne invalide : doit commencer par \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Chaîne invalide : doit se terminer par \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Chaîne invalide : doit inclure \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Chaîne invalide : doit correspondre au modèle ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} invalide`;\n            }\n            case \"not_multiple_of\":\n                return `Nombre invalide : doit être un multiple de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Clé${issue.keys.length > 1 ? \"s\" : \"\"} non reconnue${issue.keys.length > 1 ? \"s\" : \"\"} : ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Clé invalide dans ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrée invalide\";\n            case \"invalid_element\":\n                return `Valeur invalide dans ${issue.origin}`;\n            default:\n                return `Entrée invalide`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caractères\", verb: \"avoir\" },\n        file: { unit: \"octets\", verb: \"avoir\" },\n        array: { unit: \"éléments\", verb: \"avoir\" },\n        set: { unit: \"éléments\", verb: \"avoir\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"entrée\",\n        email: \"adresse courriel\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"date-heure ISO\",\n        date: \"date ISO\",\n        time: \"heure ISO\",\n        duration: \"durée ISO\",\n        ipv4: \"adresse IPv4\",\n        ipv6: \"adresse IPv6\",\n        cidrv4: \"plage IPv4\",\n        cidrv6: \"plage IPv6\",\n        base64: \"chaîne encodée en base64\",\n        base64url: \"chaîne encodée en base64url\",\n        json_string: \"chaîne JSON\",\n        e164: \"numéro E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entrée\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Entrée invalide : attendu instanceof ${issue.expected}, reçu ${received}`;\n                }\n                return `Entrée invalide : attendu ${expected}, reçu ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entrée invalide : attendu ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Option invalide : attendu l'une des valeurs suivantes ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"≤\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Trop grand : attendu que ${issue.origin ?? \"la valeur\"} ait ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n                return `Trop grand : attendu que ${issue.origin ?? \"la valeur\"} soit ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"≥\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Trop petit : attendu que ${issue.origin} ait ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Trop petit : attendu que ${issue.origin} soit ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Chaîne invalide : doit commencer par \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Chaîne invalide : doit se terminer par \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Chaîne invalide : doit inclure \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Chaîne invalide : doit correspondre au motif ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} invalide`;\n            }\n            case \"not_multiple_of\":\n                return `Nombre invalide : doit être un multiple de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Clé${issue.keys.length > 1 ? \"s\" : \"\"} non reconnue${issue.keys.length > 1 ? \"s\" : \"\"} : ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Clé invalide dans ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrée invalide\";\n            case \"invalid_element\":\n                return `Valeur invalide dans ${issue.origin}`;\n            default:\n                return `Entrée invalide`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    // Hebrew labels + grammatical gender\n    const TypeNames = {\n        string: { label: \"מחרוזת\", gender: \"f\" },\n        number: { label: \"מספר\", gender: \"m\" },\n        boolean: { label: \"ערך בוליאני\", gender: \"m\" },\n        bigint: { label: \"BigInt\", gender: \"m\" },\n        date: { label: \"תאריך\", gender: \"m\" },\n        array: { label: \"מערך\", gender: \"m\" },\n        object: { label: \"אובייקט\", gender: \"m\" },\n        null: { label: \"ערך ריק (null)\", gender: \"m\" },\n        undefined: { label: \"ערך לא מוגדר (undefined)\", gender: \"m\" },\n        symbol: { label: \"סימבול (Symbol)\", gender: \"m\" },\n        function: { label: \"פונקציה\", gender: \"f\" },\n        map: { label: \"מפה (Map)\", gender: \"f\" },\n        set: { label: \"קבוצה (Set)\", gender: \"f\" },\n        file: { label: \"קובץ\", gender: \"m\" },\n        promise: { label: \"Promise\", gender: \"m\" },\n        NaN: { label: \"NaN\", gender: \"m\" },\n        unknown: { label: \"ערך לא ידוע\", gender: \"m\" },\n        value: { label: \"ערך\", gender: \"m\" },\n    };\n    // Sizing units for size-related messages + localized origin labels\n    const Sizable = {\n        string: { unit: \"תווים\", shortLabel: \"קצר\", longLabel: \"ארוך\" },\n        file: { unit: \"בייטים\", shortLabel: \"קטן\", longLabel: \"גדול\" },\n        array: { unit: \"פריטים\", shortLabel: \"קטן\", longLabel: \"גדול\" },\n        set: { unit: \"פריטים\", shortLabel: \"קטן\", longLabel: \"גדול\" },\n        number: { unit: \"\", shortLabel: \"קטן\", longLabel: \"גדול\" }, // no unit\n    };\n    // Helpers — labels, articles, and verbs\n    const typeEntry = (t) => (t ? TypeNames[t] : undefined);\n    const typeLabel = (t) => {\n        const e = typeEntry(t);\n        if (e)\n            return e.label;\n        // fallback: show raw string if unknown\n        return t ?? TypeNames.unknown.label;\n    };\n    const withDefinite = (t) => `ה${typeLabel(t)}`;\n    const verbFor = (t) => {\n        const e = typeEntry(t);\n        const gender = e?.gender ?? \"m\";\n        return gender === \"f\" ? \"צריכה להיות\" : \"צריך להיות\";\n    };\n    const getSizing = (origin) => {\n        if (!origin)\n            return null;\n        return Sizable[origin] ?? null;\n    };\n    const FormatDictionary = {\n        regex: { label: \"קלט\", gender: \"m\" },\n        email: { label: \"כתובת אימייל\", gender: \"f\" },\n        url: { label: \"כתובת רשת\", gender: \"f\" },\n        emoji: { label: \"אימוג'י\", gender: \"m\" },\n        uuid: { label: \"UUID\", gender: \"m\" },\n        nanoid: { label: \"nanoid\", gender: \"m\" },\n        guid: { label: \"GUID\", gender: \"m\" },\n        cuid: { label: \"cuid\", gender: \"m\" },\n        cuid2: { label: \"cuid2\", gender: \"m\" },\n        ulid: { label: \"ULID\", gender: \"m\" },\n        xid: { label: \"XID\", gender: \"m\" },\n        ksuid: { label: \"KSUID\", gender: \"m\" },\n        datetime: { label: \"תאריך וזמן ISO\", gender: \"m\" },\n        date: { label: \"תאריך ISO\", gender: \"m\" },\n        time: { label: \"זמן ISO\", gender: \"m\" },\n        duration: { label: \"משך זמן ISO\", gender: \"m\" },\n        ipv4: { label: \"כתובת IPv4\", gender: \"f\" },\n        ipv6: { label: \"כתובת IPv6\", gender: \"f\" },\n        cidrv4: { label: \"טווח IPv4\", gender: \"m\" },\n        cidrv6: { label: \"טווח IPv6\", gender: \"m\" },\n        base64: { label: \"מחרוזת בבסיס 64\", gender: \"f\" },\n        base64url: { label: \"מחרוזת בבסיס 64 לכתובות רשת\", gender: \"f\" },\n        json_string: { label: \"מחרוזת JSON\", gender: \"f\" },\n        e164: { label: \"מספר E.164\", gender: \"m\" },\n        jwt: { label: \"JWT\", gender: \"m\" },\n        ends_with: { label: \"קלט\", gender: \"m\" },\n        includes: { label: \"קלט\", gender: \"m\" },\n        lowercase: { label: \"קלט\", gender: \"m\" },\n        starts_with: { label: \"קלט\", gender: \"m\" },\n        uppercase: { label: \"קלט\", gender: \"m\" },\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                // Expected type: show without definite article for clearer Hebrew\n                const expectedKey = issue.expected;\n                const expected = TypeDictionary[expectedKey ?? \"\"] ?? typeLabel(expectedKey);\n                // Received: show localized label if known, otherwise constructor/raw\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? TypeNames[receivedType]?.label ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `קלט לא תקין: צריך להיות instanceof ${issue.expected}, התקבל ${received}`;\n                }\n                return `קלט לא תקין: צריך להיות ${expected}, התקבל ${received}`;\n            }\n            case \"invalid_value\": {\n                if (issue.values.length === 1) {\n                    return `ערך לא תקין: הערך חייב להיות ${util.stringifyPrimitive(issue.values[0])}`;\n                }\n                // Join values with proper Hebrew formatting\n                const stringified = issue.values.map((v) => util.stringifyPrimitive(v));\n                if (issue.values.length === 2) {\n                    return `ערך לא תקין: האפשרויות המתאימות הן ${stringified[0]} או ${stringified[1]}`;\n                }\n                // For 3+ values: \"a\", \"b\" או \"c\"\n                const lastValue = stringified[stringified.length - 1];\n                const restValues = stringified.slice(0, -1).join(\", \");\n                return `ערך לא תקין: האפשרויות המתאימות הן ${restValues} או ${lastValue}`;\n            }\n            case \"too_big\": {\n                const sizing = getSizing(issue.origin);\n                const subject = withDefinite(issue.origin ?? \"value\");\n                if (issue.origin === \"string\") {\n                    // Special handling for strings - more natural Hebrew\n                    return `${sizing?.longLabel ?? \"ארוך\"} מדי: ${subject} צריכה להכיל ${issue.maximum.toString()} ${sizing?.unit ?? \"\"} ${issue.inclusive ? \"או פחות\" : \"לכל היותר\"}`.trim();\n                }\n                if (issue.origin === \"number\") {\n                    // Natural Hebrew for numbers\n                    const comparison = issue.inclusive ? `קטן או שווה ל-${issue.maximum}` : `קטן מ-${issue.maximum}`;\n                    return `גדול מדי: ${subject} צריך להיות ${comparison}`;\n                }\n                if (issue.origin === \"array\" || issue.origin === \"set\") {\n                    // Natural Hebrew for arrays and sets\n                    const verb = issue.origin === \"set\" ? \"צריכה\" : \"צריך\";\n                    const comparison = issue.inclusive\n                        ? `${issue.maximum} ${sizing?.unit ?? \"\"} או פחות`\n                        : `פחות מ-${issue.maximum} ${sizing?.unit ?? \"\"}`;\n                    return `גדול מדי: ${subject} ${verb} להכיל ${comparison}`.trim();\n                }\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const be = verbFor(issue.origin ?? \"value\");\n                if (sizing?.unit) {\n                    return `${sizing.longLabel} מדי: ${subject} ${be} ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n                }\n                return `${sizing?.longLabel ?? \"גדול\"} מדי: ${subject} ${be} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const sizing = getSizing(issue.origin);\n                const subject = withDefinite(issue.origin ?? \"value\");\n                if (issue.origin === \"string\") {\n                    // Special handling for strings - more natural Hebrew\n                    return `${sizing?.shortLabel ?? \"קצר\"} מדי: ${subject} צריכה להכיל ${issue.minimum.toString()} ${sizing?.unit ?? \"\"} ${issue.inclusive ? \"או יותר\" : \"לפחות\"}`.trim();\n                }\n                if (issue.origin === \"number\") {\n                    // Natural Hebrew for numbers\n                    const comparison = issue.inclusive ? `גדול או שווה ל-${issue.minimum}` : `גדול מ-${issue.minimum}`;\n                    return `קטן מדי: ${subject} צריך להיות ${comparison}`;\n                }\n                if (issue.origin === \"array\" || issue.origin === \"set\") {\n                    // Natural Hebrew for arrays and sets\n                    const verb = issue.origin === \"set\" ? \"צריכה\" : \"צריך\";\n                    // Special case for singular (minimum === 1)\n                    if (issue.minimum === 1 && issue.inclusive) {\n                        const singularPhrase = issue.origin === \"set\" ? \"לפחות פריט אחד\" : \"לפחות פריט אחד\";\n                        return `קטן מדי: ${subject} ${verb} להכיל ${singularPhrase}`;\n                    }\n                    const comparison = issue.inclusive\n                        ? `${issue.minimum} ${sizing?.unit ?? \"\"} או יותר`\n                        : `יותר מ-${issue.minimum} ${sizing?.unit ?? \"\"}`;\n                    return `קטן מדי: ${subject} ${verb} להכיל ${comparison}`.trim();\n                }\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const be = verbFor(issue.origin ?? \"value\");\n                if (sizing?.unit) {\n                    return `${sizing.shortLabel} מדי: ${subject} ${be} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `${sizing?.shortLabel ?? \"קטן\"} מדי: ${subject} ${be} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                // These apply to strings — use feminine grammar + ה׳ הידיעה\n                if (_issue.format === \"starts_with\")\n                    return `המחרוזת חייבת להתחיל ב \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `המחרוזת חייבת להסתיים ב \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `המחרוזת חייבת לכלול \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `המחרוזת חייבת להתאים לתבנית ${_issue.pattern}`;\n                // Handle gender agreement for formats\n                const nounEntry = FormatDictionary[_issue.format];\n                const noun = nounEntry?.label ?? _issue.format;\n                const gender = nounEntry?.gender ?? \"m\";\n                const adjective = gender === \"f\" ? \"תקינה\" : \"תקין\";\n                return `${noun} לא ${adjective}`;\n            }\n            case \"not_multiple_of\":\n                return `מספר לא תקין: חייב להיות מכפלה של ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `מפתח${issue.keys.length > 1 ? \"ות\" : \"\"} לא מזוה${issue.keys.length > 1 ? \"ים\" : \"ה\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\": {\n                return `שדה לא תקין באובייקט`;\n            }\n            case \"invalid_union\":\n                return \"קלט לא תקין\";\n            case \"invalid_element\": {\n                const place = withDefinite(issue.origin ?? \"array\");\n                return `ערך לא תקין ב${place}`;\n            }\n            default:\n                return `קלט לא תקין`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znakova\", verb: \"imati\" },\n        file: { unit: \"bajtova\", verb: \"imati\" },\n        array: { unit: \"stavki\", verb: \"imati\" },\n        set: { unit: \"stavki\", verb: \"imati\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"unos\",\n        email: \"email adresa\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datum i vrijeme\",\n        date: \"ISO datum\",\n        time: \"ISO vrijeme\",\n        duration: \"ISO trajanje\",\n        ipv4: \"IPv4 adresa\",\n        ipv6: \"IPv6 adresa\",\n        cidrv4: \"IPv4 raspon\",\n        cidrv6: \"IPv6 raspon\",\n        base64: \"base64 kodirani tekst\",\n        base64url: \"base64url kodirani tekst\",\n        json_string: \"JSON tekst\",\n        e164: \"E.164 broj\",\n        jwt: \"JWT\",\n        template_literal: \"unos\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        string: \"tekst\",\n        number: \"broj\",\n        boolean: \"boolean\",\n        array: \"niz\",\n        object: \"objekt\",\n        set: \"skup\",\n        file: \"datoteka\",\n        date: \"datum\",\n        bigint: \"bigint\",\n        symbol: \"simbol\",\n        undefined: \"undefined\",\n        null: \"null\",\n        function: \"funkcija\",\n        map: \"mapa\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Neispravan unos: očekuje se instanceof ${issue.expected}, a primljeno je ${received}`;\n                }\n                return `Neispravan unos: očekuje se ${expected}, a primljeno je ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Neispravna vrijednost: očekivano ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Neispravna opcija: očekivano jedno od ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing)\n                    return `Preveliko: očekivano da ${origin ?? \"vrijednost\"} ima ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemenata\"}`;\n                return `Preveliko: očekivano da ${origin ?? \"vrijednost\"} bude ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing) {\n                    return `Premalo: očekivano da ${origin} ima ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Premalo: očekivano da ${origin} bude ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Neispravan tekst: mora započinjati s \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Neispravan tekst: mora završavati s \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Neispravan tekst: mora sadržavati \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Neispravan tekst: mora odgovarati uzorku ${_issue.pattern}`;\n                return `Neispravna ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Neispravan broj: mora biti višekratnik od ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Neprepoznat${issue.keys.length > 1 ? \"i ključevi\" : \" ključ\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Neispravan ključ u ${TypeDictionary[issue.origin] ?? issue.origin}`;\n            case \"invalid_union\":\n                return \"Neispravan unos\";\n            case \"invalid_element\":\n                return `Neispravna vrijednost u ${TypeDictionary[issue.origin] ?? issue.origin}`;\n            default:\n                return `Neispravan unos`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karakter\", verb: \"legyen\" },\n        file: { unit: \"byte\", verb: \"legyen\" },\n        array: { unit: \"elem\", verb: \"legyen\" },\n        set: { unit: \"elem\", verb: \"legyen\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"bemenet\",\n        email: \"email cím\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO időbélyeg\",\n        date: \"ISO dátum\",\n        time: \"ISO idő\",\n        duration: \"ISO időintervallum\",\n        ipv4: \"IPv4 cím\",\n        ipv6: \"IPv6 cím\",\n        cidrv4: \"IPv4 tartomány\",\n        cidrv6: \"IPv6 tartomány\",\n        base64: \"base64-kódolt string\",\n        base64url: \"base64url-kódolt string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 szám\",\n        jwt: \"JWT\",\n        template_literal: \"bemenet\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"szám\",\n        array: \"tömb\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Érvénytelen bemenet: a várt érték instanceof ${issue.expected}, a kapott érték ${received}`;\n                }\n                return `Érvénytelen bemenet: a várt érték ${expected}, a kapott érték ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Érvénytelen bemenet: a várt érték ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Érvénytelen opció: valamelyik érték várt ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Túl nagy: ${issue.origin ?? \"érték\"} mérete túl nagy ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elem\"}`;\n                return `Túl nagy: a bemeneti érték ${issue.origin ?? \"érték\"} túl nagy: ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Túl kicsi: a bemeneti érték ${issue.origin} mérete túl kicsi ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Túl kicsi: a bemeneti érték ${issue.origin} túl kicsi ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Érvénytelen string: \"${_issue.prefix}\" értékkel kell kezdődnie`;\n                if (_issue.format === \"ends_with\")\n                    return `Érvénytelen string: \"${_issue.suffix}\" értékkel kell végződnie`;\n                if (_issue.format === \"includes\")\n                    return `Érvénytelen string: \"${_issue.includes}\" értéket kell tartalmaznia`;\n                if (_issue.format === \"regex\")\n                    return `Érvénytelen string: ${_issue.pattern} mintának kell megfelelnie`;\n                return `Érvénytelen ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Érvénytelen szám: ${issue.divisor} többszörösének kell lennie`;\n            case \"unrecognized_keys\":\n                return `Ismeretlen kulcs${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Érvénytelen kulcs ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Érvénytelen bemenet\";\n            case \"invalid_element\":\n                return `Érvénytelen érték: ${issue.origin}`;\n            default:\n                return `Érvénytelen bemenet`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nfunction getArmenianPlural(count, one, many) {\n    return Math.abs(count) === 1 ? one : many;\n}\nfunction withDefiniteArticle(word) {\n    if (!word)\n        return \"\";\n    const vowels = [\"ա\", \"ե\", \"ը\", \"ի\", \"ո\", \"ու\", \"օ\"];\n    const lastChar = word[word.length - 1];\n    return word + (vowels.includes(lastChar) ? \"ն\" : \"ը\");\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"նշան\",\n                many: \"նշաններ\",\n            },\n            verb: \"ունենալ\",\n        },\n        file: {\n            unit: {\n                one: \"բայթ\",\n                many: \"բայթեր\",\n            },\n            verb: \"ունենալ\",\n        },\n        array: {\n            unit: {\n                one: \"տարր\",\n                many: \"տարրեր\",\n            },\n            verb: \"ունենալ\",\n        },\n        set: {\n            unit: {\n                one: \"տարր\",\n                many: \"տարրեր\",\n            },\n            verb: \"ունենալ\",\n        },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"մուտք\",\n        email: \"էլ. հասցե\",\n        url: \"URL\",\n        emoji: \"էմոջի\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO ամսաթիվ և ժամ\",\n        date: \"ISO ամսաթիվ\",\n        time: \"ISO ժամ\",\n        duration: \"ISO տևողություն\",\n        ipv4: \"IPv4 հասցե\",\n        ipv6: \"IPv6 հասցե\",\n        cidrv4: \"IPv4 միջակայք\",\n        cidrv6: \"IPv6 միջակայք\",\n        base64: \"base64 ձևաչափով տող\",\n        base64url: \"base64url ձևաչափով տող\",\n        json_string: \"JSON տող\",\n        e164: \"E.164 համար\",\n        jwt: \"JWT\",\n        template_literal: \"մուտք\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"թիվ\",\n        array: \"զանգված\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Սխալ մուտքագրում․ սպասվում էր instanceof ${issue.expected}, ստացվել է ${received}`;\n                }\n                return `Սխալ մուտքագրում․ սպասվում էր ${expected}, ստացվել է ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Սխալ մուտքագրում․ սպասվում էր ${util.stringifyPrimitive(issue.values[1])}`;\n                return `Սխալ տարբերակ․ սպասվում էր հետևյալներից մեկը՝ ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const maxValue = Number(issue.maximum);\n                    const unit = getArmenianPlural(maxValue, sizing.unit.one, sizing.unit.many);\n                    return `Չափազանց մեծ արժեք․ սպասվում է, որ ${withDefiniteArticle(issue.origin ?? \"արժեք\")} կունենա ${adj}${issue.maximum.toString()} ${unit}`;\n                }\n                return `Չափազանց մեծ արժեք․ սպասվում է, որ ${withDefiniteArticle(issue.origin ?? \"արժեք\")} լինի ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const minValue = Number(issue.minimum);\n                    const unit = getArmenianPlural(minValue, sizing.unit.one, sizing.unit.many);\n                    return `Չափազանց փոքր արժեք․ սպասվում է, որ ${withDefiniteArticle(issue.origin)} կունենա ${adj}${issue.minimum.toString()} ${unit}`;\n                }\n                return `Չափազանց փոքր արժեք․ սպասվում է, որ ${withDefiniteArticle(issue.origin)} լինի ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Սխալ տող․ պետք է սկսվի \"${_issue.prefix}\"-ով`;\n                if (_issue.format === \"ends_with\")\n                    return `Սխալ տող․ պետք է ավարտվի \"${_issue.suffix}\"-ով`;\n                if (_issue.format === \"includes\")\n                    return `Սխալ տող․ պետք է պարունակի \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Սխալ տող․ պետք է համապատասխանի ${_issue.pattern} ձևաչափին`;\n                return `Սխալ ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Սխալ թիվ․ պետք է բազմապատիկ լինի ${issue.divisor}-ի`;\n            case \"unrecognized_keys\":\n                return `Չճանաչված բանալի${issue.keys.length > 1 ? \"ներ\" : \"\"}. ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Սխալ բանալի ${withDefiniteArticle(issue.origin)}-ում`;\n            case \"invalid_union\":\n                return \"Սխալ մուտքագրում\";\n            case \"invalid_element\":\n                return `Սխալ արժեք ${withDefiniteArticle(issue.origin)}-ում`;\n            default:\n                return `Սխալ մուտքագրում`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karakter\", verb: \"memiliki\" },\n        file: { unit: \"byte\", verb: \"memiliki\" },\n        array: { unit: \"item\", verb: \"memiliki\" },\n        set: { unit: \"item\", verb: \"memiliki\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"alamat email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"tanggal dan waktu format ISO\",\n        date: \"tanggal format ISO\",\n        time: \"jam format ISO\",\n        duration: \"durasi format ISO\",\n        ipv4: \"alamat IPv4\",\n        ipv6: \"alamat IPv6\",\n        cidrv4: \"rentang alamat IPv4\",\n        cidrv6: \"rentang alamat IPv6\",\n        base64: \"string dengan enkode base64\",\n        base64url: \"string dengan enkode base64url\",\n        json_string: \"string JSON\",\n        e164: \"angka E.164\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Input tidak valid: diharapkan instanceof ${issue.expected}, diterima ${received}`;\n                }\n                return `Input tidak valid: diharapkan ${expected}, diterima ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Input tidak valid: diharapkan ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Pilihan tidak valid: diharapkan salah satu dari ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Terlalu besar: diharapkan ${issue.origin ?? \"value\"} memiliki ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemen\"}`;\n                return `Terlalu besar: diharapkan ${issue.origin ?? \"value\"} menjadi ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Terlalu kecil: diharapkan ${issue.origin} memiliki ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Terlalu kecil: diharapkan ${issue.origin} menjadi ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `String tidak valid: harus dimulai dengan \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `String tidak valid: harus berakhir dengan \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `String tidak valid: harus menyertakan \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `String tidak valid: harus sesuai pola ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} tidak valid`;\n            }\n            case \"not_multiple_of\":\n                return `Angka tidak valid: harus kelipatan dari ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Kunci tidak dikenali ${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Kunci tidak valid di ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Input tidak valid\";\n            case \"invalid_element\":\n                return `Nilai tidak valid di ${issue.origin}`;\n            default:\n                return `Input tidak valid`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"stafi\", verb: \"að hafa\" },\n        file: { unit: \"bæti\", verb: \"að hafa\" },\n        array: { unit: \"hluti\", verb: \"að hafa\" },\n        set: { unit: \"hluti\", verb: \"að hafa\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"gildi\",\n        email: \"netfang\",\n        url: \"vefslóð\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO dagsetning og tími\",\n        date: \"ISO dagsetning\",\n        time: \"ISO tími\",\n        duration: \"ISO tímalengd\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded strengur\",\n        base64url: \"base64url-encoded strengur\",\n        json_string: \"JSON strengur\",\n        e164: \"E.164 tölugildi\",\n        jwt: \"JWT\",\n        template_literal: \"gildi\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"númer\",\n        array: \"fylki\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Rangt gildi: Þú slóst inn ${received} þar sem á að vera instanceof ${issue.expected}`;\n                }\n                return `Rangt gildi: Þú slóst inn ${received} þar sem á að vera ${expected}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Rangt gildi: gert ráð fyrir ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ógilt val: má vera eitt af eftirfarandi ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Of stórt: gert er ráð fyrir að ${issue.origin ?? \"gildi\"} hafi ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"hluti\"}`;\n                return `Of stórt: gert er ráð fyrir að ${issue.origin ?? \"gildi\"} sé ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Of lítið: gert er ráð fyrir að ${issue.origin} hafi ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Of lítið: gert er ráð fyrir að ${issue.origin} sé ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Ógildur strengur: verður að byrja á \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Ógildur strengur: verður að enda á \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ógildur strengur: verður að innihalda \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ógildur strengur: verður að fylgja mynstri ${_issue.pattern}`;\n                return `Rangt ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Röng tala: verður að vera margfeldi af ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Óþekkt ${issue.keys.length > 1 ? \"ir lyklar\" : \"ur lykill\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Rangur lykill í ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Rangt gildi\";\n            case \"invalid_element\":\n                return `Rangt gildi í ${issue.origin}`;\n            default:\n                return `Rangt gildi`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caratteri\", verb: \"avere\" },\n        file: { unit: \"byte\", verb: \"avere\" },\n        array: { unit: \"elementi\", verb: \"avere\" },\n        set: { unit: \"elementi\", verb: \"avere\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"indirizzo email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data e ora ISO\",\n        date: \"data ISO\",\n        time: \"ora ISO\",\n        duration: \"durata ISO\",\n        ipv4: \"indirizzo IPv4\",\n        ipv6: \"indirizzo IPv6\",\n        cidrv4: \"intervallo IPv4\",\n        cidrv6: \"intervallo IPv6\",\n        base64: \"stringa codificata in base64\",\n        base64url: \"URL codificata in base64\",\n        json_string: \"stringa JSON\",\n        e164: \"numero E.164\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"numero\",\n        array: \"vettore\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Input non valido: atteso instanceof ${issue.expected}, ricevuto ${received}`;\n                }\n                return `Input non valido: atteso ${expected}, ricevuto ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Input non valido: atteso ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opzione non valida: atteso uno tra ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Troppo grande: ${issue.origin ?? \"valore\"} deve avere ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementi\"}`;\n                return `Troppo grande: ${issue.origin ?? \"valore\"} deve essere ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Troppo piccolo: ${issue.origin} deve avere ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Troppo piccolo: ${issue.origin} deve essere ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Stringa non valida: deve iniziare con \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Stringa non valida: deve terminare con \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Stringa non valida: deve includere \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Stringa non valida: deve corrispondere al pattern ${_issue.pattern}`;\n                return `Input non valido: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Numero non valido: deve essere un multiplo di ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Chiav${issue.keys.length > 1 ? \"i\" : \"e\"} non riconosciut${issue.keys.length > 1 ? \"e\" : \"a\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Chiave non valida in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Input non valido\";\n            case \"invalid_element\":\n                return `Valore non valido in ${issue.origin}`;\n            default:\n                return `Input non valido`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"文字\", verb: \"である\" },\n        file: { unit: \"バイト\", verb: \"である\" },\n        array: { unit: \"要素\", verb: \"である\" },\n        set: { unit: \"要素\", verb: \"である\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"入力値\",\n        email: \"メールアドレス\",\n        url: \"URL\",\n        emoji: \"絵文字\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO日時\",\n        date: \"ISO日付\",\n        time: \"ISO時刻\",\n        duration: \"ISO期間\",\n        ipv4: \"IPv4アドレス\",\n        ipv6: \"IPv6アドレス\",\n        cidrv4: \"IPv4範囲\",\n        cidrv6: \"IPv6範囲\",\n        base64: \"base64エンコード文字列\",\n        base64url: \"base64urlエンコード文字列\",\n        json_string: \"JSON文字列\",\n        e164: \"E.164番号\",\n        jwt: \"JWT\",\n        template_literal: \"入力値\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"数値\",\n        array: \"配列\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `無効な入力: instanceof ${issue.expected}が期待されましたが、${received}が入力されました`;\n                }\n                return `無効な入力: ${expected}が期待されましたが、${received}が入力されました`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `無効な入力: ${util.stringifyPrimitive(issue.values[0])}が期待されました`;\n                return `無効な選択: ${util.joinValues(issue.values, \"、\")}のいずれかである必要があります`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"以下である\" : \"より小さい\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `大きすぎる値: ${issue.origin ?? \"値\"}は${issue.maximum.toString()}${sizing.unit ?? \"要素\"}${adj}必要があります`;\n                return `大きすぎる値: ${issue.origin ?? \"値\"}は${issue.maximum.toString()}${adj}必要があります`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"以上である\" : \"より大きい\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `小さすぎる値: ${issue.origin}は${issue.minimum.toString()}${sizing.unit}${adj}必要があります`;\n                return `小さすぎる値: ${issue.origin}は${issue.minimum.toString()}${adj}必要があります`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `無効な文字列: \"${_issue.prefix}\"で始まる必要があります`;\n                if (_issue.format === \"ends_with\")\n                    return `無効な文字列: \"${_issue.suffix}\"で終わる必要があります`;\n                if (_issue.format === \"includes\")\n                    return `無効な文字列: \"${_issue.includes}\"を含む必要があります`;\n                if (_issue.format === \"regex\")\n                    return `無効な文字列: パターン${_issue.pattern}に一致する必要があります`;\n                return `無効な${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `無効な数値: ${issue.divisor}の倍数である必要があります`;\n            case \"unrecognized_keys\":\n                return `認識されていないキー${issue.keys.length > 1 ? \"群\" : \"\"}: ${util.joinValues(issue.keys, \"、\")}`;\n            case \"invalid_key\":\n                return `${issue.origin}内の無効なキー`;\n            case \"invalid_union\":\n                return \"無効な入力\";\n            case \"invalid_element\":\n                return `${issue.origin}内の無効な値`;\n            default:\n                return `無効な入力`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"სიმბოლო\", verb: \"უნდა შეიცავდეს\" },\n        file: { unit: \"ბაიტი\", verb: \"უნდა შეიცავდეს\" },\n        array: { unit: \"ელემენტი\", verb: \"უნდა შეიცავდეს\" },\n        set: { unit: \"ელემენტი\", verb: \"უნდა შეიცავდეს\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"შეყვანა\",\n        email: \"ელ-ფოსტის მისამართი\",\n        url: \"URL\",\n        emoji: \"ემოჯი\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"თარიღი-დრო\",\n        date: \"თარიღი\",\n        time: \"დრო\",\n        duration: \"ხანგრძლივობა\",\n        ipv4: \"IPv4 მისამართი\",\n        ipv6: \"IPv6 მისამართი\",\n        cidrv4: \"IPv4 დიაპაზონი\",\n        cidrv6: \"IPv6 დიაპაზონი\",\n        base64: \"base64-კოდირებული ველი\",\n        base64url: \"base64url-კოდირებული ველი\",\n        json_string: \"JSON ველი\",\n        e164: \"E.164 ნომერი\",\n        jwt: \"JWT\",\n        template_literal: \"შეყვანა\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"რიცხვი\",\n        string: \"ველი\",\n        boolean: \"ბულეანი\",\n        function: \"ფუნქცია\",\n        array: \"მასივი\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `არასწორი შეყვანა: მოსალოდნელი instanceof ${issue.expected}, მიღებული ${received}`;\n                }\n                return `არასწორი შეყვანა: მოსალოდნელი ${expected}, მიღებული ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `არასწორი შეყვანა: მოსალოდნელი ${util.stringifyPrimitive(issue.values[0])}`;\n                return `არასწორი ვარიანტი: მოსალოდნელია ერთ-ერთი ${util.joinValues(issue.values, \"|\")}-დან`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `ზედმეტად დიდი: მოსალოდნელი ${issue.origin ?? \"მნიშვნელობა\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n                return `ზედმეტად დიდი: მოსალოდნელი ${issue.origin ?? \"მნიშვნელობა\"} იყოს ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `ზედმეტად პატარა: მოსალოდნელი ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `ზედმეტად პატარა: მოსალოდნელი ${issue.origin} იყოს ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `არასწორი ველი: უნდა იწყებოდეს \"${_issue.prefix}\"-ით`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `არასწორი ველი: უნდა მთავრდებოდეს \"${_issue.suffix}\"-ით`;\n                if (_issue.format === \"includes\")\n                    return `არასწორი ველი: უნდა შეიცავდეს \"${_issue.includes}\"-ს`;\n                if (_issue.format === \"regex\")\n                    return `არასწორი ველი: უნდა შეესაბამებოდეს შაბლონს ${_issue.pattern}`;\n                return `არასწორი ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `არასწორი რიცხვი: უნდა იყოს ${issue.divisor}-ის ჯერადი`;\n            case \"unrecognized_keys\":\n                return `უცნობი გასაღებ${issue.keys.length > 1 ? \"ები\" : \"ი\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `არასწორი გასაღები ${issue.origin}-ში`;\n            case \"invalid_union\":\n                return \"არასწორი შეყვანა\";\n            case \"invalid_element\":\n                return `არასწორი მნიშვნელობა ${issue.origin}-ში`;\n            default:\n                return `არასწორი შეყვანა`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"តួអក្សរ\", verb: \"គួរមាន\" },\n        file: { unit: \"បៃ\", verb: \"គួរមាន\" },\n        array: { unit: \"ធាតុ\", verb: \"គួរមាន\" },\n        set: { unit: \"ធាតុ\", verb: \"គួរមាន\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"ទិន្នន័យបញ្ចូល\",\n        email: \"អាសយដ្ឋានអ៊ីមែល\",\n        url: \"URL\",\n        emoji: \"សញ្ញាអារម្មណ៍\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"កាលបរិច្ឆេទ និងម៉ោង ISO\",\n        date: \"កាលបរិច្ឆេទ ISO\",\n        time: \"ម៉ោង ISO\",\n        duration: \"រយៈពេល ISO\",\n        ipv4: \"អាសយដ្ឋាន IPv4\",\n        ipv6: \"អាសយដ្ឋាន IPv6\",\n        cidrv4: \"ដែនអាសយដ្ឋាន IPv4\",\n        cidrv6: \"ដែនអាសយដ្ឋាន IPv6\",\n        base64: \"ខ្សែអក្សរអ៊ិកូដ base64\",\n        base64url: \"ខ្សែអក្សរអ៊ិកូដ base64url\",\n        json_string: \"ខ្សែអក្សរ JSON\",\n        e164: \"លេខ E.164\",\n        jwt: \"JWT\",\n        template_literal: \"ទិន្នន័យបញ្ចូល\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"លេខ\",\n        array: \"អារេ (Array)\",\n        null: \"គ្មានតម្លៃ (null)\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ instanceof ${issue.expected} ប៉ុន្តែទទួលបាន ${received}`;\n                }\n                return `ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ ${expected} ប៉ុន្តែទទួលបាន ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ ${util.stringifyPrimitive(issue.values[0])}`;\n                return `ជម្រើសមិនត្រឹមត្រូវ៖ ត្រូវជាមួយក្នុងចំណោម ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `ធំពេក៖ ត្រូវការ ${issue.origin ?? \"តម្លៃ\"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"ធាតុ\"}`;\n                return `ធំពេក៖ ត្រូវការ ${issue.origin ?? \"តម្លៃ\"} ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `តូចពេក៖ ត្រូវការ ${issue.origin} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `តូចពេក៖ ត្រូវការ ${issue.origin} ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវចាប់ផ្តើមដោយ \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវបញ្ចប់ដោយ \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវមាន \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវតែផ្គូផ្គងនឹងទម្រង់ដែលបានកំណត់ ${_issue.pattern}`;\n                return `មិនត្រឹមត្រូវ៖ ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `លេខមិនត្រឹមត្រូវ៖ ត្រូវតែជាពហុគុណនៃ ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `រកឃើញសោមិនស្គាល់៖ ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `សោមិនត្រឹមត្រូវនៅក្នុង ${issue.origin}`;\n            case \"invalid_union\":\n                return `ទិន្នន័យមិនត្រឹមត្រូវ`;\n            case \"invalid_element\":\n                return `ទិន្នន័យមិនត្រឹមត្រូវនៅក្នុង ${issue.origin}`;\n            default:\n                return `ទិន្នន័យមិនត្រឹមត្រូវ`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import km from \"./km.js\";\n/** @deprecated Use `km` instead. */\nexport default function () {\n    return km();\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"문자\", verb: \"to have\" },\n        file: { unit: \"바이트\", verb: \"to have\" },\n        array: { unit: \"개\", verb: \"to have\" },\n        set: { unit: \"개\", verb: \"to have\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"입력\",\n        email: \"이메일 주소\",\n        url: \"URL\",\n        emoji: \"이모지\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO 날짜시간\",\n        date: \"ISO 날짜\",\n        time: \"ISO 시간\",\n        duration: \"ISO 기간\",\n        ipv4: \"IPv4 주소\",\n        ipv6: \"IPv6 주소\",\n        cidrv4: \"IPv4 범위\",\n        cidrv6: \"IPv6 범위\",\n        base64: \"base64 인코딩 문자열\",\n        base64url: \"base64url 인코딩 문자열\",\n        json_string: \"JSON 문자열\",\n        e164: \"E.164 번호\",\n        jwt: \"JWT\",\n        template_literal: \"입력\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `잘못된 입력: 예상 타입은 instanceof ${issue.expected}, 받은 타입은 ${received}입니다`;\n                }\n                return `잘못된 입력: 예상 타입은 ${expected}, 받은 타입은 ${received}입니다`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `잘못된 입력: 값은 ${util.stringifyPrimitive(issue.values[0])} 이어야 합니다`;\n                return `잘못된 옵션: ${util.joinValues(issue.values, \"또는 \")} 중 하나여야 합니다`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"이하\" : \"미만\";\n                const suffix = adj === \"미만\" ? \"이어야 합니다\" : \"여야 합니다\";\n                const sizing = getSizing(issue.origin);\n                const unit = sizing?.unit ?? \"요소\";\n                if (sizing)\n                    return `${issue.origin ?? \"값\"}이 너무 큽니다: ${issue.maximum.toString()}${unit} ${adj}${suffix}`;\n                return `${issue.origin ?? \"값\"}이 너무 큽니다: ${issue.maximum.toString()} ${adj}${suffix}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"이상\" : \"초과\";\n                const suffix = adj === \"이상\" ? \"이어야 합니다\" : \"여야 합니다\";\n                const sizing = getSizing(issue.origin);\n                const unit = sizing?.unit ?? \"요소\";\n                if (sizing) {\n                    return `${issue.origin ?? \"값\"}이 너무 작습니다: ${issue.minimum.toString()}${unit} ${adj}${suffix}`;\n                }\n                return `${issue.origin ?? \"값\"}이 너무 작습니다: ${issue.minimum.toString()} ${adj}${suffix}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `잘못된 문자열: \"${_issue.prefix}\"(으)로 시작해야 합니다`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `잘못된 문자열: \"${_issue.suffix}\"(으)로 끝나야 합니다`;\n                if (_issue.format === \"includes\")\n                    return `잘못된 문자열: \"${_issue.includes}\"을(를) 포함해야 합니다`;\n                if (_issue.format === \"regex\")\n                    return `잘못된 문자열: 정규식 ${_issue.pattern} 패턴과 일치해야 합니다`;\n                return `잘못된 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `잘못된 숫자: ${issue.divisor}의 배수여야 합니다`;\n            case \"unrecognized_keys\":\n                return `인식할 수 없는 키: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `잘못된 키: ${issue.origin}`;\n            case \"invalid_union\":\n                return `잘못된 입력`;\n            case \"invalid_element\":\n                return `잘못된 값: ${issue.origin}`;\n            default:\n                return `잘못된 입력`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst capitalizeFirstCharacter = (text) => {\n    return text.charAt(0).toUpperCase() + text.slice(1);\n};\nfunction getUnitTypeFromNumber(number) {\n    const abs = Math.abs(number);\n    const last = abs % 10;\n    const last2 = abs % 100;\n    if ((last2 >= 11 && last2 <= 19) || last === 0)\n        return \"many\";\n    if (last === 1)\n        return \"one\";\n    return \"few\";\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"simbolis\",\n                few: \"simboliai\",\n                many: \"simbolių\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi būti ne ilgesnė kaip\",\n                    notInclusive: \"turi būti trumpesnė kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi būti ne trumpesnė kaip\",\n                    notInclusive: \"turi būti ilgesnė kaip\",\n                },\n            },\n        },\n        file: {\n            unit: {\n                one: \"baitas\",\n                few: \"baitai\",\n                many: \"baitų\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi būti ne didesnis kaip\",\n                    notInclusive: \"turi būti mažesnis kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi būti ne mažesnis kaip\",\n                    notInclusive: \"turi būti didesnis kaip\",\n                },\n            },\n        },\n        array: {\n            unit: {\n                one: \"elementą\",\n                few: \"elementus\",\n                many: \"elementų\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi turėti ne daugiau kaip\",\n                    notInclusive: \"turi turėti mažiau kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi turėti ne mažiau kaip\",\n                    notInclusive: \"turi turėti daugiau kaip\",\n                },\n            },\n        },\n        set: {\n            unit: {\n                one: \"elementą\",\n                few: \"elementus\",\n                many: \"elementų\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi turėti ne daugiau kaip\",\n                    notInclusive: \"turi turėti mažiau kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi turėti ne mažiau kaip\",\n                    notInclusive: \"turi turėti daugiau kaip\",\n                },\n            },\n        },\n    };\n    function getSizing(origin, unitType, inclusive, targetShouldBe) {\n        const result = Sizable[origin] ?? null;\n        if (result === null)\n            return result;\n        return {\n            unit: result.unit[unitType],\n            verb: result.verb[targetShouldBe][inclusive ? \"inclusive\" : \"notInclusive\"],\n        };\n    }\n    const FormatDictionary = {\n        regex: \"įvestis\",\n        email: \"el. pašto adresas\",\n        url: \"URL\",\n        emoji: \"jaustukas\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO data ir laikas\",\n        date: \"ISO data\",\n        time: \"ISO laikas\",\n        duration: \"ISO trukmė\",\n        ipv4: \"IPv4 adresas\",\n        ipv6: \"IPv6 adresas\",\n        cidrv4: \"IPv4 tinklo prefiksas (CIDR)\",\n        cidrv6: \"IPv6 tinklo prefiksas (CIDR)\",\n        base64: \"base64 užkoduota eilutė\",\n        base64url: \"base64url užkoduota eilutė\",\n        json_string: \"JSON eilutė\",\n        e164: \"E.164 numeris\",\n        jwt: \"JWT\",\n        template_literal: \"įvestis\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"skaičius\",\n        bigint: \"sveikasis skaičius\",\n        string: \"eilutė\",\n        boolean: \"loginė reikšmė\",\n        undefined: \"neapibrėžta reikšmė\",\n        function: \"funkcija\",\n        symbol: \"simbolis\",\n        array: \"masyvas\",\n        object: \"objektas\",\n        null: \"nulinė reikšmė\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Gautas tipas ${received}, o tikėtasi - instanceof ${issue.expected}`;\n                }\n                return `Gautas tipas ${received}, o tikėtasi - ${expected}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Privalo būti ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Privalo būti vienas iš ${util.joinValues(issue.values, \"|\")} pasirinkimų`;\n            case \"too_big\": {\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                const sizing = getSizing(issue.origin, getUnitTypeFromNumber(Number(issue.maximum)), issue.inclusive ?? false, \"smaller\");\n                if (sizing?.verb)\n                    return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reikšmė\")} ${sizing.verb} ${issue.maximum.toString()} ${sizing.unit ?? \"elementų\"}`;\n                const adj = issue.inclusive ? \"ne didesnis kaip\" : \"mažesnis kaip\";\n                return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reikšmė\")} turi būti ${adj} ${issue.maximum.toString()} ${sizing?.unit}`;\n            }\n            case \"too_small\": {\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                const sizing = getSizing(issue.origin, getUnitTypeFromNumber(Number(issue.minimum)), issue.inclusive ?? false, \"bigger\");\n                if (sizing?.verb)\n                    return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reikšmė\")} ${sizing.verb} ${issue.minimum.toString()} ${sizing.unit ?? \"elementų\"}`;\n                const adj = issue.inclusive ? \"ne mažesnis kaip\" : \"didesnis kaip\";\n                return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reikšmė\")} turi būti ${adj} ${issue.minimum.toString()} ${sizing?.unit}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Eilutė privalo prasidėti \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Eilutė privalo pasibaigti \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Eilutė privalo įtraukti \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Eilutė privalo atitikti ${_issue.pattern}`;\n                return `Neteisingas ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Skaičius privalo būti ${issue.divisor} kartotinis.`;\n            case \"unrecognized_keys\":\n                return `Neatpažint${issue.keys.length > 1 ? \"i\" : \"as\"} rakt${issue.keys.length > 1 ? \"ai\" : \"as\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return \"Rastas klaidingas raktas\";\n            case \"invalid_union\":\n                return \"Klaidinga įvestis\";\n            case \"invalid_element\": {\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reikšmė\")} turi klaidingą įvestį`;\n            }\n            default:\n                return \"Klaidinga įvestis\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"знаци\", verb: \"да имаат\" },\n        file: { unit: \"бајти\", verb: \"да имаат\" },\n        array: { unit: \"ставки\", verb: \"да имаат\" },\n        set: { unit: \"ставки\", verb: \"да имаат\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"внес\",\n        email: \"адреса на е-пошта\",\n        url: \"URL\",\n        emoji: \"емоџи\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO датум и време\",\n        date: \"ISO датум\",\n        time: \"ISO време\",\n        duration: \"ISO времетраење\",\n        ipv4: \"IPv4 адреса\",\n        ipv6: \"IPv6 адреса\",\n        cidrv4: \"IPv4 опсег\",\n        cidrv6: \"IPv6 опсег\",\n        base64: \"base64-енкодирана низа\",\n        base64url: \"base64url-енкодирана низа\",\n        json_string: \"JSON низа\",\n        e164: \"E.164 број\",\n        jwt: \"JWT\",\n        template_literal: \"внес\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"број\",\n        array: \"низа\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Грешен внес: се очекува instanceof ${issue.expected}, примено ${received}`;\n                }\n                return `Грешен внес: се очекува ${expected}, примено ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Грешана опција: се очекува една ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Премногу голем: се очекува ${issue.origin ?? \"вредноста\"} да има ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"елементи\"}`;\n                return `Премногу голем: се очекува ${issue.origin ?? \"вредноста\"} да биде ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Премногу мал: се очекува ${issue.origin} да има ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Премногу мал: се очекува ${issue.origin} да биде ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Неважечка низа: мора да започнува со \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Неважечка низа: мора да завршува со \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Неважечка низа: мора да вклучува \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Неважечка низа: мора да одгоара на патернот ${_issue.pattern}`;\n                return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Грешен број: мора да биде делив со ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Непрепознаени клучеви\" : \"Непрепознаен клуч\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Грешен клуч во ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Грешен внес\";\n            case \"invalid_element\":\n                return `Грешна вредност во ${issue.origin}`;\n            default:\n                return `Грешен внес`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"aksara\", verb: \"mempunyai\" },\n        file: { unit: \"bait\", verb: \"mempunyai\" },\n        array: { unit: \"elemen\", verb: \"mempunyai\" },\n        set: { unit: \"elemen\", verb: \"mempunyai\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"alamat e-mel\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"tarikh masa ISO\",\n        date: \"tarikh ISO\",\n        time: \"masa ISO\",\n        duration: \"tempoh ISO\",\n        ipv4: \"alamat IPv4\",\n        ipv6: \"alamat IPv6\",\n        cidrv4: \"julat IPv4\",\n        cidrv6: \"julat IPv6\",\n        base64: \"string dikodkan base64\",\n        base64url: \"string dikodkan base64url\",\n        json_string: \"string JSON\",\n        e164: \"nombor E.164\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"nombor\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Input tidak sah: dijangka instanceof ${issue.expected}, diterima ${received}`;\n                }\n                return `Input tidak sah: dijangka ${expected}, diterima ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Input tidak sah: dijangka ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Pilihan tidak sah: dijangka salah satu daripada ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Terlalu besar: dijangka ${issue.origin ?? \"nilai\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemen\"}`;\n                return `Terlalu besar: dijangka ${issue.origin ?? \"nilai\"} adalah ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Terlalu kecil: dijangka ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Terlalu kecil: dijangka ${issue.origin} adalah ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `String tidak sah: mesti bermula dengan \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `String tidak sah: mesti berakhir dengan \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `String tidak sah: mesti mengandungi \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `String tidak sah: mesti sepadan dengan corak ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} tidak sah`;\n            }\n            case \"not_multiple_of\":\n                return `Nombor tidak sah: perlu gandaan ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Kunci tidak dikenali: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Kunci tidak sah dalam ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Input tidak sah\";\n            case \"invalid_element\":\n                return `Nilai tidak sah dalam ${issue.origin}`;\n            default:\n                return `Input tidak sah`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tekens\", verb: \"heeft\" },\n        file: { unit: \"bytes\", verb: \"heeft\" },\n        array: { unit: \"elementen\", verb: \"heeft\" },\n        set: { unit: \"elementen\", verb: \"heeft\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"invoer\",\n        email: \"emailadres\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datum en tijd\",\n        date: \"ISO datum\",\n        time: \"ISO tijd\",\n        duration: \"ISO duur\",\n        ipv4: \"IPv4-adres\",\n        ipv6: \"IPv6-adres\",\n        cidrv4: \"IPv4-bereik\",\n        cidrv6: \"IPv6-bereik\",\n        base64: \"base64-gecodeerde tekst\",\n        base64url: \"base64 URL-gecodeerde tekst\",\n        json_string: \"JSON string\",\n        e164: \"E.164-nummer\",\n        jwt: \"JWT\",\n        template_literal: \"invoer\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"getal\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ongeldige invoer: verwacht instanceof ${issue.expected}, ontving ${received}`;\n                }\n                return `Ongeldige invoer: verwacht ${expected}, ontving ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ongeldige invoer: verwacht ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ongeldige optie: verwacht één van ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                const longName = issue.origin === \"date\" ? \"laat\" : issue.origin === \"string\" ? \"lang\" : \"groot\";\n                if (sizing)\n                    return `Te ${longName}: verwacht dat ${issue.origin ?? \"waarde\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementen\"} ${sizing.verb}`;\n                return `Te ${longName}: verwacht dat ${issue.origin ?? \"waarde\"} ${adj}${issue.maximum.toString()} is`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                const shortName = issue.origin === \"date\" ? \"vroeg\" : issue.origin === \"string\" ? \"kort\" : \"klein\";\n                if (sizing) {\n                    return `Te ${shortName}: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} ${sizing.verb}`;\n                }\n                return `Te ${shortName}: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} is`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Ongeldige tekst: moet met \"${_issue.prefix}\" beginnen`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Ongeldige tekst: moet op \"${_issue.suffix}\" eindigen`;\n                if (_issue.format === \"includes\")\n                    return `Ongeldige tekst: moet \"${_issue.includes}\" bevatten`;\n                if (_issue.format === \"regex\")\n                    return `Ongeldige tekst: moet overeenkomen met patroon ${_issue.pattern}`;\n                return `Ongeldig: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ongeldig getal: moet een veelvoud van ${issue.divisor} zijn`;\n            case \"unrecognized_keys\":\n                return `Onbekende key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ongeldige key in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ongeldige invoer\";\n            case \"invalid_element\":\n                return `Ongeldige waarde in ${issue.origin}`;\n            default:\n                return `Ongeldige invoer`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tegn\", verb: \"å ha\" },\n        file: { unit: \"bytes\", verb: \"å ha\" },\n        array: { unit: \"elementer\", verb: \"å inneholde\" },\n        set: { unit: \"elementer\", verb: \"å inneholde\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"e-postadresse\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO dato- og klokkeslett\",\n        date: \"ISO-dato\",\n        time: \"ISO-klokkeslett\",\n        duration: \"ISO-varighet\",\n        ipv4: \"IPv4-område\",\n        ipv6: \"IPv6-område\",\n        cidrv4: \"IPv4-spekter\",\n        cidrv6: \"IPv6-spekter\",\n        base64: \"base64-enkodet streng\",\n        base64url: \"base64url-enkodet streng\",\n        json_string: \"JSON-streng\",\n        e164: \"E.164-nummer\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"tall\",\n        array: \"liste\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ugyldig input: forventet instanceof ${issue.expected}, fikk ${received}`;\n                }\n                return `Ugyldig input: forventet ${expected}, fikk ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ugyldig verdi: forventet ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ugyldig valg: forventet en av ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `For stor(t): forventet ${issue.origin ?? \"value\"} til å ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementer\"}`;\n                return `For stor(t): forventet ${issue.origin ?? \"value\"} til å ha ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `For lite(n): forventet ${issue.origin} til å ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `For lite(n): forventet ${issue.origin} til å ha ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ugyldig streng: må starte med \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Ugyldig streng: må ende med \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ugyldig streng: må inneholde \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ugyldig streng: må matche mønsteret ${_issue.pattern}`;\n                return `Ugyldig ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ugyldig tall: må være et multiplum av ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Ukjente nøkler\" : \"Ukjent nøkkel\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ugyldig nøkkel i ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ugyldig input\";\n            case \"invalid_element\":\n                return `Ugyldig verdi i ${issue.origin}`;\n            default:\n                return `Ugyldig input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"harf\", verb: \"olmalıdır\" },\n        file: { unit: \"bayt\", verb: \"olmalıdır\" },\n        array: { unit: \"unsur\", verb: \"olmalıdır\" },\n        set: { unit: \"unsur\", verb: \"olmalıdır\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"giren\",\n        email: \"epostagâh\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO hengâmı\",\n        date: \"ISO tarihi\",\n        time: \"ISO zamanı\",\n        duration: \"ISO müddeti\",\n        ipv4: \"IPv4 nişânı\",\n        ipv6: \"IPv6 nişânı\",\n        cidrv4: \"IPv4 menzili\",\n        cidrv6: \"IPv6 menzili\",\n        base64: \"base64-şifreli metin\",\n        base64url: \"base64url-şifreli metin\",\n        json_string: \"JSON metin\",\n        e164: \"E.164 sayısı\",\n        jwt: \"JWT\",\n        template_literal: \"giren\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"numara\",\n        array: \"saf\",\n        null: \"gayb\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Fâsit giren: umulan instanceof ${issue.expected}, alınan ${received}`;\n                }\n                return `Fâsit giren: umulan ${expected}, alınan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Fâsit giren: umulan ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Fâsit tercih: mûteberler ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Fazla büyük: ${issue.origin ?? \"value\"}, ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"} sahip olmalıydı.`;\n                return `Fazla büyük: ${issue.origin ?? \"value\"}, ${adj}${issue.maximum.toString()} olmalıydı.`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Fazla küçük: ${issue.origin}, ${adj}${issue.minimum.toString()} ${sizing.unit} sahip olmalıydı.`;\n                }\n                return `Fazla küçük: ${issue.origin}, ${adj}${issue.minimum.toString()} olmalıydı.`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Fâsit metin: \"${_issue.prefix}\" ile başlamalı.`;\n                if (_issue.format === \"ends_with\")\n                    return `Fâsit metin: \"${_issue.suffix}\" ile bitmeli.`;\n                if (_issue.format === \"includes\")\n                    return `Fâsit metin: \"${_issue.includes}\" ihtivâ etmeli.`;\n                if (_issue.format === \"regex\")\n                    return `Fâsit metin: ${_issue.pattern} nakşına uymalı.`;\n                return `Fâsit ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Fâsit sayı: ${issue.divisor} katı olmalıydı.`;\n            case \"unrecognized_keys\":\n                return `Tanınmayan anahtar ${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} için tanınmayan anahtar var.`;\n            case \"invalid_union\":\n                return \"Giren tanınamadı.\";\n            case \"invalid_element\":\n                return `${issue.origin} için tanınmayan kıymet var.`;\n            default:\n                return `Kıymet tanınamadı.`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"توکي\", verb: \"ولري\" },\n        file: { unit: \"بایټس\", verb: \"ولري\" },\n        array: { unit: \"توکي\", verb: \"ولري\" },\n        set: { unit: \"توکي\", verb: \"ولري\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"ورودي\",\n        email: \"بریښنالیک\",\n        url: \"یو آر ال\",\n        emoji: \"ایموجي\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"نیټه او وخت\",\n        date: \"نېټه\",\n        time: \"وخت\",\n        duration: \"موده\",\n        ipv4: \"د IPv4 پته\",\n        ipv6: \"د IPv6 پته\",\n        cidrv4: \"د IPv4 ساحه\",\n        cidrv6: \"د IPv6 ساحه\",\n        base64: \"base64-encoded متن\",\n        base64url: \"base64url-encoded متن\",\n        json_string: \"JSON متن\",\n        e164: \"د E.164 شمېره\",\n        jwt: \"JWT\",\n        template_literal: \"ورودي\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"عدد\",\n        array: \"ارې\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `ناسم ورودي: باید instanceof ${issue.expected} وای, مګر ${received} ترلاسه شو`;\n                }\n                return `ناسم ورودي: باید ${expected} وای, مګر ${received} ترلاسه شو`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1) {\n                    return `ناسم ورودي: باید ${util.stringifyPrimitive(issue.values[0])} وای`;\n                }\n                return `ناسم انتخاب: باید یو له ${util.joinValues(issue.values, \"|\")} څخه وای`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `ډیر لوی: ${issue.origin ?? \"ارزښت\"} باید ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"عنصرونه\"} ولري`;\n                }\n                return `ډیر لوی: ${issue.origin ?? \"ارزښت\"} باید ${adj}${issue.maximum.toString()} وي`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `ډیر کوچنی: ${issue.origin} باید ${adj}${issue.minimum.toString()} ${sizing.unit} ولري`;\n                }\n                return `ډیر کوچنی: ${issue.origin} باید ${adj}${issue.minimum.toString()} وي`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `ناسم متن: باید د \"${_issue.prefix}\" سره پیل شي`;\n                }\n                if (_issue.format === \"ends_with\") {\n                    return `ناسم متن: باید د \"${_issue.suffix}\" سره پای ته ورسيږي`;\n                }\n                if (_issue.format === \"includes\") {\n                    return `ناسم متن: باید \"${_issue.includes}\" ولري`;\n                }\n                if (_issue.format === \"regex\") {\n                    return `ناسم متن: باید د ${_issue.pattern} سره مطابقت ولري`;\n                }\n                return `${FormatDictionary[_issue.format] ?? issue.format} ناسم دی`;\n            }\n            case \"not_multiple_of\":\n                return `ناسم عدد: باید د ${issue.divisor} مضرب وي`;\n            case \"unrecognized_keys\":\n                return `ناسم ${issue.keys.length > 1 ? \"کلیډونه\" : \"کلیډ\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `ناسم کلیډ په ${issue.origin} کې`;\n            case \"invalid_union\":\n                return `ناسمه ورودي`;\n            case \"invalid_element\":\n                return `ناسم عنصر په ${issue.origin} کې`;\n            default:\n                return `ناسمه ورودي`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znaków\", verb: \"mieć\" },\n        file: { unit: \"bajtów\", verb: \"mieć\" },\n        array: { unit: \"elementów\", verb: \"mieć\" },\n        set: { unit: \"elementów\", verb: \"mieć\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"wyrażenie\",\n        email: \"adres email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data i godzina w formacie ISO\",\n        date: \"data w formacie ISO\",\n        time: \"godzina w formacie ISO\",\n        duration: \"czas trwania ISO\",\n        ipv4: \"adres IPv4\",\n        ipv6: \"adres IPv6\",\n        cidrv4: \"zakres IPv4\",\n        cidrv6: \"zakres IPv6\",\n        base64: \"ciąg znaków zakodowany w formacie base64\",\n        base64url: \"ciąg znaków zakodowany w formacie base64url\",\n        json_string: \"ciąg znaków w formacie JSON\",\n        e164: \"liczba E.164\",\n        jwt: \"JWT\",\n        template_literal: \"wejście\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"liczba\",\n        array: \"tablica\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Nieprawidłowe dane wejściowe: oczekiwano instanceof ${issue.expected}, otrzymano ${received}`;\n                }\n                return `Nieprawidłowe dane wejściowe: oczekiwano ${expected}, otrzymano ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Nieprawidłowe dane wejściowe: oczekiwano ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Nieprawidłowa opcja: oczekiwano jednej z wartości ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Za duża wartość: oczekiwano, że ${issue.origin ?? \"wartość\"} będzie mieć ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementów\"}`;\n                }\n                return `Zbyt duż(y/a/e): oczekiwano, że ${issue.origin ?? \"wartość\"} będzie wynosić ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Za mała wartość: oczekiwano, że ${issue.origin ?? \"wartość\"} będzie mieć ${adj}${issue.minimum.toString()} ${sizing.unit ?? \"elementów\"}`;\n                }\n                return `Zbyt mał(y/a/e): oczekiwano, że ${issue.origin ?? \"wartość\"} będzie wynosić ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Nieprawidłowy ciąg znaków: musi zaczynać się od \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Nieprawidłowy ciąg znaków: musi kończyć się na \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Nieprawidłowy ciąg znaków: musi zawierać \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Nieprawidłowy ciąg znaków: musi odpowiadać wzorcowi ${_issue.pattern}`;\n                return `Nieprawidłow(y/a/e) ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Nieprawidłowa liczba: musi być wielokrotnością ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Nierozpoznane klucze${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Nieprawidłowy klucz w ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Nieprawidłowe dane wejściowe\";\n            case \"invalid_element\":\n                return `Nieprawidłowa wartość w ${issue.origin}`;\n            default:\n                return `Nieprawidłowe dane wejściowe`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caracteres\", verb: \"ter\" },\n        file: { unit: \"bytes\", verb: \"ter\" },\n        array: { unit: \"itens\", verb: \"ter\" },\n        set: { unit: \"itens\", verb: \"ter\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"padrão\",\n        email: \"endereço de e-mail\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data e hora ISO\",\n        date: \"data ISO\",\n        time: \"hora ISO\",\n        duration: \"duração ISO\",\n        ipv4: \"endereço IPv4\",\n        ipv6: \"endereço IPv6\",\n        cidrv4: \"faixa de IPv4\",\n        cidrv6: \"faixa de IPv6\",\n        base64: \"texto codificado em base64\",\n        base64url: \"URL codificada em base64\",\n        json_string: \"texto JSON\",\n        e164: \"número E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entrada\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"número\",\n        null: \"nulo\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Tipo inválido: esperado instanceof ${issue.expected}, recebido ${received}`;\n                }\n                return `Tipo inválido: esperado ${expected}, recebido ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entrada inválida: esperado ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opção inválida: esperada uma das ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Muito grande: esperado que ${issue.origin ?? \"valor\"} tivesse ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementos\"}`;\n                return `Muito grande: esperado que ${issue.origin ?? \"valor\"} fosse ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Muito pequeno: esperado que ${issue.origin} tivesse ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Muito pequeno: esperado que ${issue.origin} fosse ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Texto inválido: deve começar com \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Texto inválido: deve terminar com \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Texto inválido: deve incluir \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Texto inválido: deve corresponder ao padrão ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} inválido`;\n            }\n            case \"not_multiple_of\":\n                return `Número inválido: deve ser múltiplo de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Chave${issue.keys.length > 1 ? \"s\" : \"\"} desconhecida${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Chave inválida em ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrada inválida\";\n            case \"invalid_element\":\n                return `Valor inválido em ${issue.origin}`;\n            default:\n                return `Campo inválido`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caractere\", verb: \"să aibă\" },\n        file: { unit: \"octeți\", verb: \"să aibă\" },\n        array: { unit: \"elemente\", verb: \"să aibă\" },\n        set: { unit: \"elemente\", verb: \"să aibă\" },\n        map: { unit: \"intrări\", verb: \"să aibă\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"intrare\",\n        email: \"adresă de email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"dată și oră ISO\",\n        date: \"dată ISO\",\n        time: \"oră ISO\",\n        duration: \"durată ISO\",\n        ipv4: \"adresă IPv4\",\n        ipv6: \"adresă IPv6\",\n        mac: \"adresă MAC\",\n        cidrv4: \"interval IPv4\",\n        cidrv6: \"interval IPv6\",\n        base64: \"șir codat base64\",\n        base64url: \"șir codat base64url\",\n        json_string: \"șir JSON\",\n        e164: \"număr E.164\",\n        jwt: \"JWT\",\n        template_literal: \"intrare\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        string: \"șir\",\n        number: \"număr\",\n        boolean: \"boolean\",\n        function: \"funcție\",\n        array: \"matrice\",\n        object: \"obiect\",\n        undefined: \"nedefinit\",\n        symbol: \"simbol\",\n        bigint: \"număr mare\",\n        void: \"void\",\n        never: \"never\",\n        map: \"hartă\",\n        set: \"set\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                return `Intrare invalidă: așteptat ${expected}, primit ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Intrare invalidă: așteptat ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opțiune invalidă: așteptat una dintre ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Prea mare: așteptat ca ${issue.origin ?? \"valoarea\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemente\"}`;\n                return `Prea mare: așteptat ca ${issue.origin ?? \"valoarea\"} să fie ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Prea mic: așteptat ca ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Prea mic: așteptat ca ${issue.origin} să fie ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Șir invalid: trebuie să înceapă cu \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Șir invalid: trebuie să se termine cu \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Șir invalid: trebuie să includă \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Șir invalid: trebuie să se potrivească cu modelul ${_issue.pattern}`;\n                return `Format invalid: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Număr invalid: trebuie să fie multiplu de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Chei nerecunoscute: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Cheie invalidă în ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Intrare invalidă\";\n            case \"invalid_element\":\n                return `Valoare invalidă în ${issue.origin}`;\n            default:\n                return `Intrare invalidă`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nfunction getRussianPlural(count, one, few, many) {\n    const absCount = Math.abs(count);\n    const lastDigit = absCount % 10;\n    const lastTwoDigits = absCount % 100;\n    if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {\n        return many;\n    }\n    if (lastDigit === 1) {\n        return one;\n    }\n    if (lastDigit >= 2 && lastDigit <= 4) {\n        return few;\n    }\n    return many;\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"символ\",\n                few: \"символа\",\n                many: \"символов\",\n            },\n            verb: \"иметь\",\n        },\n        file: {\n            unit: {\n                one: \"байт\",\n                few: \"байта\",\n                many: \"байт\",\n            },\n            verb: \"иметь\",\n        },\n        array: {\n            unit: {\n                one: \"элемент\",\n                few: \"элемента\",\n                many: \"элементов\",\n            },\n            verb: \"иметь\",\n        },\n        set: {\n            unit: {\n                one: \"элемент\",\n                few: \"элемента\",\n                many: \"элементов\",\n            },\n            verb: \"иметь\",\n        },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"ввод\",\n        email: \"email адрес\",\n        url: \"URL\",\n        emoji: \"эмодзи\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO дата и время\",\n        date: \"ISO дата\",\n        time: \"ISO время\",\n        duration: \"ISO длительность\",\n        ipv4: \"IPv4 адрес\",\n        ipv6: \"IPv6 адрес\",\n        cidrv4: \"IPv4 диапазон\",\n        cidrv6: \"IPv6 диапазон\",\n        base64: \"строка в формате base64\",\n        base64url: \"строка в формате base64url\",\n        json_string: \"JSON строка\",\n        e164: \"номер E.164\",\n        jwt: \"JWT\",\n        template_literal: \"ввод\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"число\",\n        array: \"массив\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Неверный ввод: ожидалось instanceof ${issue.expected}, получено ${received}`;\n                }\n                return `Неверный ввод: ожидалось ${expected}, получено ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Неверный ввод: ожидалось ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Неверный вариант: ожидалось одно из ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const maxValue = Number(issue.maximum);\n                    const unit = getRussianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `Слишком большое значение: ожидалось, что ${issue.origin ?? \"значение\"} будет иметь ${adj}${issue.maximum.toString()} ${unit}`;\n                }\n                return `Слишком большое значение: ожидалось, что ${issue.origin ?? \"значение\"} будет ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const minValue = Number(issue.minimum);\n                    const unit = getRussianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `Слишком маленькое значение: ожидалось, что ${issue.origin} будет иметь ${adj}${issue.minimum.toString()} ${unit}`;\n                }\n                return `Слишком маленькое значение: ожидалось, что ${issue.origin} будет ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Неверная строка: должна начинаться с \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Неверная строка: должна заканчиваться на \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Неверная строка: должна содержать \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Неверная строка: должна соответствовать шаблону ${_issue.pattern}`;\n                return `Неверный ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Неверное число: должно быть кратным ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Нераспознанн${issue.keys.length > 1 ? \"ые\" : \"ый\"} ключ${issue.keys.length > 1 ? \"и\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Неверный ключ в ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Неверные входные данные\";\n            case \"invalid_element\":\n                return `Неверное значение в ${issue.origin}`;\n            default:\n                return `Неверные входные данные`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znakov\", verb: \"imeti\" },\n        file: { unit: \"bajtov\", verb: \"imeti\" },\n        array: { unit: \"elementov\", verb: \"imeti\" },\n        set: { unit: \"elementov\", verb: \"imeti\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"vnos\",\n        email: \"e-poštni naslov\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datum in čas\",\n        date: \"ISO datum\",\n        time: \"ISO čas\",\n        duration: \"ISO trajanje\",\n        ipv4: \"IPv4 naslov\",\n        ipv6: \"IPv6 naslov\",\n        cidrv4: \"obseg IPv4\",\n        cidrv6: \"obseg IPv6\",\n        base64: \"base64 kodiran niz\",\n        base64url: \"base64url kodiran niz\",\n        json_string: \"JSON niz\",\n        e164: \"E.164 številka\",\n        jwt: \"JWT\",\n        template_literal: \"vnos\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"število\",\n        array: \"tabela\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Neveljaven vnos: pričakovano instanceof ${issue.expected}, prejeto ${received}`;\n                }\n                return `Neveljaven vnos: pričakovano ${expected}, prejeto ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Neveljaven vnos: pričakovano ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Neveljavna možnost: pričakovano eno izmed ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Preveliko: pričakovano, da bo ${issue.origin ?? \"vrednost\"} imelo ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementov\"}`;\n                return `Preveliko: pričakovano, da bo ${issue.origin ?? \"vrednost\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Premajhno: pričakovano, da bo ${issue.origin} imelo ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Premajhno: pričakovano, da bo ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Neveljaven niz: mora se začeti z \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Neveljaven niz: mora se končati z \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Neveljaven niz: mora vsebovati \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Neveljaven niz: mora ustrezati vzorcu ${_issue.pattern}`;\n                return `Neveljaven ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Neveljavno število: mora biti večkratnik ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Neprepoznan${issue.keys.length > 1 ? \"i ključi\" : \" ključ\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Neveljaven ključ v ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Neveljaven vnos\";\n            case \"invalid_element\":\n                return `Neveljavna vrednost v ${issue.origin}`;\n            default:\n                return \"Neveljaven vnos\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tecken\", verb: \"att ha\" },\n        file: { unit: \"bytes\", verb: \"att ha\" },\n        array: { unit: \"objekt\", verb: \"att innehålla\" },\n        set: { unit: \"objekt\", verb: \"att innehålla\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"reguljärt uttryck\",\n        email: \"e-postadress\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-datum och tid\",\n        date: \"ISO-datum\",\n        time: \"ISO-tid\",\n        duration: \"ISO-varaktighet\",\n        ipv4: \"IPv4-intervall\",\n        ipv6: \"IPv6-intervall\",\n        cidrv4: \"IPv4-spektrum\",\n        cidrv6: \"IPv6-spektrum\",\n        base64: \"base64-kodad sträng\",\n        base64url: \"base64url-kodad sträng\",\n        json_string: \"JSON-sträng\",\n        e164: \"E.164-nummer\",\n        jwt: \"JWT\",\n        template_literal: \"mall-literal\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"antal\",\n        array: \"lista\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ogiltig inmatning: förväntat instanceof ${issue.expected}, fick ${received}`;\n                }\n                return `Ogiltig inmatning: förväntat ${expected}, fick ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ogiltig inmatning: förväntat ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ogiltigt val: förväntade en av ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `För stor(t): förväntade ${issue.origin ?? \"värdet\"} att ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n                }\n                return `För stor(t): förväntat ${issue.origin ?? \"värdet\"} att ha ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `För lite(t): förväntade ${issue.origin ?? \"värdet\"} att ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `För lite(t): förväntade ${issue.origin ?? \"värdet\"} att ha ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Ogiltig sträng: måste börja med \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Ogiltig sträng: måste sluta med \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ogiltig sträng: måste innehålla \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ogiltig sträng: måste matcha mönstret \"${_issue.pattern}\"`;\n                return `Ogiltig(t) ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ogiltigt tal: måste vara en multipel av ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Okända nycklar\" : \"Okänd nyckel\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ogiltig nyckel i ${issue.origin ?? \"värdet\"}`;\n            case \"invalid_union\":\n                return \"Ogiltig input\";\n            case \"invalid_element\":\n                return `Ogiltigt värde i ${issue.origin ?? \"värdet\"}`;\n            default:\n                return `Ogiltig input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"எழுத்துக்கள்\", verb: \"கொண்டிருக்க வேண்டும்\" },\n        file: { unit: \"பைட்டுகள்\", verb: \"கொண்டிருக்க வேண்டும்\" },\n        array: { unit: \"உறுப்புகள்\", verb: \"கொண்டிருக்க வேண்டும்\" },\n        set: { unit: \"உறுப்புகள்\", verb: \"கொண்டிருக்க வேண்டும்\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"உள்ளீடு\",\n        email: \"மின்னஞ்சல் முகவரி\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO தேதி நேரம்\",\n        date: \"ISO தேதி\",\n        time: \"ISO நேரம்\",\n        duration: \"ISO கால அளவு\",\n        ipv4: \"IPv4 முகவரி\",\n        ipv6: \"IPv6 முகவரி\",\n        cidrv4: \"IPv4 வரம்பு\",\n        cidrv6: \"IPv6 வரம்பு\",\n        base64: \"base64-encoded சரம்\",\n        base64url: \"base64url-encoded சரம்\",\n        json_string: \"JSON சரம்\",\n        e164: \"E.164 எண்\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"எண்\",\n        array: \"அணி\",\n        null: \"வெறுமை\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது instanceof ${issue.expected}, பெறப்பட்டது ${received}`;\n                }\n                return `தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது ${expected}, பெறப்பட்டது ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது ${util.stringifyPrimitive(issue.values[0])}`;\n                return `தவறான விருப்பம்: எதிர்பார்க்கப்பட்டது ${util.joinValues(issue.values, \"|\")} இல் ஒன்று`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `மிக பெரியது: எதிர்பார்க்கப்பட்டது ${issue.origin ?? \"மதிப்பு\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"உறுப்புகள்\"} ஆக இருக்க வேண்டும்`;\n                }\n                return `மிக பெரியது: எதிர்பார்க்கப்பட்டது ${issue.origin ?? \"மதிப்பு\"} ${adj}${issue.maximum.toString()} ஆக இருக்க வேண்டும்`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `மிகச் சிறியது: எதிர்பார்க்கப்பட்டது ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} ஆக இருக்க வேண்டும்`; //\n                }\n                return `மிகச் சிறியது: எதிர்பார்க்கப்பட்டது ${issue.origin} ${adj}${issue.minimum.toString()} ஆக இருக்க வேண்டும்`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `தவறான சரம்: \"${_issue.prefix}\" இல் தொடங்க வேண்டும்`;\n                if (_issue.format === \"ends_with\")\n                    return `தவறான சரம்: \"${_issue.suffix}\" இல் முடிவடைய வேண்டும்`;\n                if (_issue.format === \"includes\")\n                    return `தவறான சரம்: \"${_issue.includes}\" ஐ உள்ளடக்க வேண்டும்`;\n                if (_issue.format === \"regex\")\n                    return `தவறான சரம்: ${_issue.pattern} முறைபாட்டுடன் பொருந்த வேண்டும்`;\n                return `தவறான ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `தவறான எண்: ${issue.divisor} இன் பலமாக இருக்க வேண்டும்`;\n            case \"unrecognized_keys\":\n                return `அடையாளம் தெரியாத விசை${issue.keys.length > 1 ? \"கள்\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} இல் தவறான விசை`;\n            case \"invalid_union\":\n                return \"தவறான உள்ளீடு\";\n            case \"invalid_element\":\n                return `${issue.origin} இல் தவறான மதிப்பு`;\n            default:\n                return `தவறான உள்ளீடு`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"ตัวอักษร\", verb: \"ควรมี\" },\n        file: { unit: \"ไบต์\", verb: \"ควรมี\" },\n        array: { unit: \"รายการ\", verb: \"ควรมี\" },\n        set: { unit: \"รายการ\", verb: \"ควรมี\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"ข้อมูลที่ป้อน\",\n        email: \"ที่อยู่อีเมล\",\n        url: \"URL\",\n        emoji: \"อิโมจิ\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"วันที่เวลาแบบ ISO\",\n        date: \"วันที่แบบ ISO\",\n        time: \"เวลาแบบ ISO\",\n        duration: \"ช่วงเวลาแบบ ISO\",\n        ipv4: \"ที่อยู่ IPv4\",\n        ipv6: \"ที่อยู่ IPv6\",\n        cidrv4: \"ช่วง IP แบบ IPv4\",\n        cidrv6: \"ช่วง IP แบบ IPv6\",\n        base64: \"ข้อความแบบ Base64\",\n        base64url: \"ข้อความแบบ Base64 สำหรับ URL\",\n        json_string: \"ข้อความแบบ JSON\",\n        e164: \"เบอร์โทรศัพท์ระหว่างประเทศ (E.164)\",\n        jwt: \"โทเคน JWT\",\n        template_literal: \"ข้อมูลที่ป้อน\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"ตัวเลข\",\n        array: \"อาร์เรย์ (Array)\",\n        null: \"ไม่มีค่า (null)\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `ประเภทข้อมูลไม่ถูกต้อง: ควรเป็น instanceof ${issue.expected} แต่ได้รับ ${received}`;\n                }\n                return `ประเภทข้อมูลไม่ถูกต้อง: ควรเป็น ${expected} แต่ได้รับ ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `ค่าไม่ถูกต้อง: ควรเป็น ${util.stringifyPrimitive(issue.values[0])}`;\n                return `ตัวเลือกไม่ถูกต้อง: ควรเป็นหนึ่งใน ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"ไม่เกิน\" : \"น้อยกว่า\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `เกินกำหนด: ${issue.origin ?? \"ค่า\"} ควรมี${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"รายการ\"}`;\n                return `เกินกำหนด: ${issue.origin ?? \"ค่า\"} ควรมี${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"อย่างน้อย\" : \"มากกว่า\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `น้อยกว่ากำหนด: ${issue.origin} ควรมี${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `น้อยกว่ากำหนด: ${issue.origin} ควรมี${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `รูปแบบไม่ถูกต้อง: ข้อความต้องขึ้นต้นด้วย \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `รูปแบบไม่ถูกต้อง: ข้อความต้องลงท้ายด้วย \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `รูปแบบไม่ถูกต้อง: ข้อความต้องมี \"${_issue.includes}\" อยู่ในข้อความ`;\n                if (_issue.format === \"regex\")\n                    return `รูปแบบไม่ถูกต้อง: ต้องตรงกับรูปแบบที่กำหนด ${_issue.pattern}`;\n                return `รูปแบบไม่ถูกต้อง: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `ตัวเลขไม่ถูกต้อง: ต้องเป็นจำนวนที่หารด้วย ${issue.divisor} ได้ลงตัว`;\n            case \"unrecognized_keys\":\n                return `พบคีย์ที่ไม่รู้จัก: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `คีย์ไม่ถูกต้องใน ${issue.origin}`;\n            case \"invalid_union\":\n                return \"ข้อมูลไม่ถูกต้อง: ไม่ตรงกับรูปแบบยูเนียนที่กำหนดไว้\";\n            case \"invalid_element\":\n                return `ข้อมูลไม่ถูกต้องใน ${issue.origin}`;\n            default:\n                return `ข้อมูลไม่ถูกต้อง`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karakter\", verb: \"olmalı\" },\n        file: { unit: \"bayt\", verb: \"olmalı\" },\n        array: { unit: \"öğe\", verb: \"olmalı\" },\n        set: { unit: \"öğe\", verb: \"olmalı\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"girdi\",\n        email: \"e-posta adresi\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO tarih ve saat\",\n        date: \"ISO tarih\",\n        time: \"ISO saat\",\n        duration: \"ISO süre\",\n        ipv4: \"IPv4 adresi\",\n        ipv6: \"IPv6 adresi\",\n        cidrv4: \"IPv4 aralığı\",\n        cidrv6: \"IPv6 aralığı\",\n        base64: \"base64 ile şifrelenmiş metin\",\n        base64url: \"base64url ile şifrelenmiş metin\",\n        json_string: \"JSON dizesi\",\n        e164: \"E.164 sayısı\",\n        jwt: \"JWT\",\n        template_literal: \"Şablon dizesi\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Geçersiz değer: beklenen instanceof ${issue.expected}, alınan ${received}`;\n                }\n                return `Geçersiz değer: beklenen ${expected}, alınan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Geçersiz değer: beklenen ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Geçersiz seçenek: aşağıdakilerden biri olmalı: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Çok büyük: beklenen ${issue.origin ?? \"değer\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"öğe\"}`;\n                return `Çok büyük: beklenen ${issue.origin ?? \"değer\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Çok küçük: beklenen ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                return `Çok küçük: beklenen ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Geçersiz metin: \"${_issue.prefix}\" ile başlamalı`;\n                if (_issue.format === \"ends_with\")\n                    return `Geçersiz metin: \"${_issue.suffix}\" ile bitmeli`;\n                if (_issue.format === \"includes\")\n                    return `Geçersiz metin: \"${_issue.includes}\" içermeli`;\n                if (_issue.format === \"regex\")\n                    return `Geçersiz metin: ${_issue.pattern} desenine uymalı`;\n                return `Geçersiz ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Geçersiz sayı: ${issue.divisor} ile tam bölünebilmeli`;\n            case \"unrecognized_keys\":\n                return `Tanınmayan anahtar${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} içinde geçersiz anahtar`;\n            case \"invalid_union\":\n                return \"Geçersiz değer\";\n            case \"invalid_element\":\n                return `${issue.origin} içinde geçersiz değer`;\n            default:\n                return `Geçersiz değer`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"символів\", verb: \"матиме\" },\n        file: { unit: \"байтів\", verb: \"матиме\" },\n        array: { unit: \"елементів\", verb: \"матиме\" },\n        set: { unit: \"елементів\", verb: \"матиме\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"вхідні дані\",\n        email: \"адреса електронної пошти\",\n        url: \"URL\",\n        emoji: \"емодзі\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"дата та час ISO\",\n        date: \"дата ISO\",\n        time: \"час ISO\",\n        duration: \"тривалість ISO\",\n        ipv4: \"адреса IPv4\",\n        ipv6: \"адреса IPv6\",\n        cidrv4: \"діапазон IPv4\",\n        cidrv6: \"діапазон IPv6\",\n        base64: \"рядок у кодуванні base64\",\n        base64url: \"рядок у кодуванні base64url\",\n        json_string: \"рядок JSON\",\n        e164: \"номер E.164\",\n        jwt: \"JWT\",\n        template_literal: \"вхідні дані\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"число\",\n        array: \"масив\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Неправильні вхідні дані: очікується instanceof ${issue.expected}, отримано ${received}`;\n                }\n                return `Неправильні вхідні дані: очікується ${expected}, отримано ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Неправильні вхідні дані: очікується ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Неправильна опція: очікується одне з ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Занадто велике: очікується, що ${issue.origin ?? \"значення\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"елементів\"}`;\n                return `Занадто велике: очікується, що ${issue.origin ?? \"значення\"} буде ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Занадто мале: очікується, що ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Занадто мале: очікується, що ${issue.origin} буде ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Неправильний рядок: повинен починатися з \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Неправильний рядок: повинен закінчуватися на \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Неправильний рядок: повинен містити \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Неправильний рядок: повинен відповідати шаблону ${_issue.pattern}`;\n                return `Неправильний ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Неправильне число: повинно бути кратним ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Нерозпізнаний ключ${issue.keys.length > 1 ? \"і\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Неправильний ключ у ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Неправильні вхідні дані\";\n            case \"invalid_element\":\n                return `Неправильне значення у ${issue.origin}`;\n            default:\n                return `Неправильні вхідні дані`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import uk from \"./uk.js\";\n/** @deprecated Use `uk` instead. */\nexport default function () {\n    return uk();\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"حروف\", verb: \"ہونا\" },\n        file: { unit: \"بائٹس\", verb: \"ہونا\" },\n        array: { unit: \"آئٹمز\", verb: \"ہونا\" },\n        set: { unit: \"آئٹمز\", verb: \"ہونا\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"ان پٹ\",\n        email: \"ای میل ایڈریس\",\n        url: \"یو آر ایل\",\n        emoji: \"ایموجی\",\n        uuid: \"یو یو آئی ڈی\",\n        uuidv4: \"یو یو آئی ڈی وی 4\",\n        uuidv6: \"یو یو آئی ڈی وی 6\",\n        nanoid: \"نینو آئی ڈی\",\n        guid: \"جی یو آئی ڈی\",\n        cuid: \"سی یو آئی ڈی\",\n        cuid2: \"سی یو آئی ڈی 2\",\n        ulid: \"یو ایل آئی ڈی\",\n        xid: \"ایکس آئی ڈی\",\n        ksuid: \"کے ایس یو آئی ڈی\",\n        datetime: \"آئی ایس او ڈیٹ ٹائم\",\n        date: \"آئی ایس او تاریخ\",\n        time: \"آئی ایس او وقت\",\n        duration: \"آئی ایس او مدت\",\n        ipv4: \"آئی پی وی 4 ایڈریس\",\n        ipv6: \"آئی پی وی 6 ایڈریس\",\n        cidrv4: \"آئی پی وی 4 رینج\",\n        cidrv6: \"آئی پی وی 6 رینج\",\n        base64: \"بیس 64 ان کوڈڈ سٹرنگ\",\n        base64url: \"بیس 64 یو آر ایل ان کوڈڈ سٹرنگ\",\n        json_string: \"جے ایس او این سٹرنگ\",\n        e164: \"ای 164 نمبر\",\n        jwt: \"جے ڈبلیو ٹی\",\n        template_literal: \"ان پٹ\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"نمبر\",\n        array: \"آرے\",\n        null: \"نل\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `غلط ان پٹ: instanceof ${issue.expected} متوقع تھا، ${received} موصول ہوا`;\n                }\n                return `غلط ان پٹ: ${expected} متوقع تھا، ${received} موصول ہوا`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `غلط ان پٹ: ${util.stringifyPrimitive(issue.values[0])} متوقع تھا`;\n                return `غلط آپشن: ${util.joinValues(issue.values, \"|\")} میں سے ایک متوقع تھا`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `بہت بڑا: ${issue.origin ?? \"ویلیو\"} کے ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"عناصر\"} ہونے متوقع تھے`;\n                return `بہت بڑا: ${issue.origin ?? \"ویلیو\"} کا ${adj}${issue.maximum.toString()} ہونا متوقع تھا`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `بہت چھوٹا: ${issue.origin} کے ${adj}${issue.minimum.toString()} ${sizing.unit} ہونے متوقع تھے`;\n                }\n                return `بہت چھوٹا: ${issue.origin} کا ${adj}${issue.minimum.toString()} ہونا متوقع تھا`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `غلط سٹرنگ: \"${_issue.prefix}\" سے شروع ہونا چاہیے`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `غلط سٹرنگ: \"${_issue.suffix}\" پر ختم ہونا چاہیے`;\n                if (_issue.format === \"includes\")\n                    return `غلط سٹرنگ: \"${_issue.includes}\" شامل ہونا چاہیے`;\n                if (_issue.format === \"regex\")\n                    return `غلط سٹرنگ: پیٹرن ${_issue.pattern} سے میچ ہونا چاہیے`;\n                return `غلط ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `غلط نمبر: ${issue.divisor} کا مضاعف ہونا چاہیے`;\n            case \"unrecognized_keys\":\n                return `غیر تسلیم شدہ کی${issue.keys.length > 1 ? \"ز\" : \"\"}: ${util.joinValues(issue.keys, \"، \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} میں غلط کی`;\n            case \"invalid_union\":\n                return \"غلط ان پٹ\";\n            case \"invalid_element\":\n                return `${issue.origin} میں غلط ویلیو`;\n            default:\n                return `غلط ان پٹ`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"belgi\", verb: \"bo‘lishi kerak\" },\n        file: { unit: \"bayt\", verb: \"bo‘lishi kerak\" },\n        array: { unit: \"element\", verb: \"bo‘lishi kerak\" },\n        set: { unit: \"element\", verb: \"bo‘lishi kerak\" },\n        map: { unit: \"yozuv\", verb: \"bo‘lishi kerak\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"kirish\",\n        email: \"elektron pochta manzili\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO sana va vaqti\",\n        date: \"ISO sana\",\n        time: \"ISO vaqt\",\n        duration: \"ISO davomiylik\",\n        ipv4: \"IPv4 manzil\",\n        ipv6: \"IPv6 manzil\",\n        mac: \"MAC manzil\",\n        cidrv4: \"IPv4 diapazon\",\n        cidrv6: \"IPv6 diapazon\",\n        base64: \"base64 kodlangan satr\",\n        base64url: \"base64url kodlangan satr\",\n        json_string: \"JSON satr\",\n        e164: \"E.164 raqam\",\n        jwt: \"JWT\",\n        template_literal: \"kirish\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"raqam\",\n        array: \"massiv\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Noto‘g‘ri kirish: kutilgan instanceof ${issue.expected}, qabul qilingan ${received}`;\n                }\n                return `Noto‘g‘ri kirish: kutilgan ${expected}, qabul qilingan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Noto‘g‘ri kirish: kutilgan ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Noto‘g‘ri variant: quyidagilardan biri kutilgan ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Juda katta: kutilgan ${issue.origin ?? \"qiymat\"} ${adj}${issue.maximum.toString()} ${sizing.unit} ${sizing.verb}`;\n                return `Juda katta: kutilgan ${issue.origin ?? \"qiymat\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Juda kichik: kutilgan ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} ${sizing.verb}`;\n                }\n                return `Juda kichik: kutilgan ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Noto‘g‘ri satr: \"${_issue.prefix}\" bilan boshlanishi kerak`;\n                if (_issue.format === \"ends_with\")\n                    return `Noto‘g‘ri satr: \"${_issue.suffix}\" bilan tugashi kerak`;\n                if (_issue.format === \"includes\")\n                    return `Noto‘g‘ri satr: \"${_issue.includes}\" ni o‘z ichiga olishi kerak`;\n                if (_issue.format === \"regex\")\n                    return `Noto‘g‘ri satr: ${_issue.pattern} shabloniga mos kelishi kerak`;\n                return `Noto‘g‘ri ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Noto‘g‘ri raqam: ${issue.divisor} ning karralisi bo‘lishi kerak`;\n            case \"unrecognized_keys\":\n                return `Noma’lum kalit${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} dagi kalit noto‘g‘ri`;\n            case \"invalid_union\":\n                return \"Noto‘g‘ri kirish\";\n            case \"invalid_element\":\n                return `${issue.origin} da noto‘g‘ri qiymat`;\n            default:\n                return `Noto‘g‘ri kirish`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"ký tự\", verb: \"có\" },\n        file: { unit: \"byte\", verb: \"có\" },\n        array: { unit: \"phần tử\", verb: \"có\" },\n        set: { unit: \"phần tử\", verb: \"có\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"đầu vào\",\n        email: \"địa chỉ email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ngày giờ ISO\",\n        date: \"ngày ISO\",\n        time: \"giờ ISO\",\n        duration: \"khoảng thời gian ISO\",\n        ipv4: \"địa chỉ IPv4\",\n        ipv6: \"địa chỉ IPv6\",\n        cidrv4: \"dải IPv4\",\n        cidrv6: \"dải IPv6\",\n        base64: \"chuỗi mã hóa base64\",\n        base64url: \"chuỗi mã hóa base64url\",\n        json_string: \"chuỗi JSON\",\n        e164: \"số E.164\",\n        jwt: \"JWT\",\n        template_literal: \"đầu vào\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"số\",\n        array: \"mảng\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Đầu vào không hợp lệ: mong đợi instanceof ${issue.expected}, nhận được ${received}`;\n                }\n                return `Đầu vào không hợp lệ: mong đợi ${expected}, nhận được ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Đầu vào không hợp lệ: mong đợi ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Tùy chọn không hợp lệ: mong đợi một trong các giá trị ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Quá lớn: mong đợi ${issue.origin ?? \"giá trị\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"phần tử\"}`;\n                return `Quá lớn: mong đợi ${issue.origin ?? \"giá trị\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Quá nhỏ: mong đợi ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Quá nhỏ: mong đợi ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Chuỗi không hợp lệ: phải bắt đầu bằng \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Chuỗi không hợp lệ: phải kết thúc bằng \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Chuỗi không hợp lệ: phải bao gồm \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Chuỗi không hợp lệ: phải khớp với mẫu ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} không hợp lệ`;\n            }\n            case \"not_multiple_of\":\n                return `Số không hợp lệ: phải là bội số của ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Khóa không được nhận dạng: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Khóa không hợp lệ trong ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Đầu vào không hợp lệ\";\n            case \"invalid_element\":\n                return `Giá trị không hợp lệ trong ${issue.origin}`;\n            default:\n                return `Đầu vào không hợp lệ`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"字符\", verb: \"包含\" },\n        file: { unit: \"字节\", verb: \"包含\" },\n        array: { unit: \"项\", verb: \"包含\" },\n        set: { unit: \"项\", verb: \"包含\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"输入\",\n        email: \"电子邮件\",\n        url: \"URL\",\n        emoji: \"表情符号\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO日期时间\",\n        date: \"ISO日期\",\n        time: \"ISO时间\",\n        duration: \"ISO时长\",\n        ipv4: \"IPv4地址\",\n        ipv6: \"IPv6地址\",\n        cidrv4: \"IPv4网段\",\n        cidrv6: \"IPv6网段\",\n        base64: \"base64编码字符串\",\n        base64url: \"base64url编码字符串\",\n        json_string: \"JSON字符串\",\n        e164: \"E.164号码\",\n        jwt: \"JWT\",\n        template_literal: \"输入\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"数字\",\n        array: \"数组\",\n        null: \"空值(null)\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `无效输入：期望 instanceof ${issue.expected}，实际接收 ${received}`;\n                }\n                return `无效输入：期望 ${expected}，实际接收 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `无效输入：期望 ${util.stringifyPrimitive(issue.values[0])}`;\n                return `无效选项：期望以下之一 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `数值过大：期望 ${issue.origin ?? \"值\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"个元素\"}`;\n                return `数值过大：期望 ${issue.origin ?? \"值\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `数值过小：期望 ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `数值过小：期望 ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `无效字符串：必须以 \"${_issue.prefix}\" 开头`;\n                if (_issue.format === \"ends_with\")\n                    return `无效字符串：必须以 \"${_issue.suffix}\" 结尾`;\n                if (_issue.format === \"includes\")\n                    return `无效字符串：必须包含 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `无效字符串：必须满足正则表达式 ${_issue.pattern}`;\n                return `无效${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `无效数字：必须是 ${issue.divisor} 的倍数`;\n            case \"unrecognized_keys\":\n                return `出现未知的键(key): ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} 中的键(key)无效`;\n            case \"invalid_union\":\n                return \"无效输入\";\n            case \"invalid_element\":\n                return `${issue.origin} 中包含无效值(value)`;\n            default:\n                return `无效输入`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"字元\", verb: \"擁有\" },\n        file: { unit: \"位元組\", verb: \"擁有\" },\n        array: { unit: \"項目\", verb: \"擁有\" },\n        set: { unit: \"項目\", verb: \"擁有\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"輸入\",\n        email: \"郵件地址\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO 日期時間\",\n        date: \"ISO 日期\",\n        time: \"ISO 時間\",\n        duration: \"ISO 期間\",\n        ipv4: \"IPv4 位址\",\n        ipv6: \"IPv6 位址\",\n        cidrv4: \"IPv4 範圍\",\n        cidrv6: \"IPv6 範圍\",\n        base64: \"base64 編碼字串\",\n        base64url: \"base64url 編碼字串\",\n        json_string: \"JSON 字串\",\n        e164: \"E.164 數值\",\n        jwt: \"JWT\",\n        template_literal: \"輸入\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `無效的輸入值：預期為 instanceof ${issue.expected}，但收到 ${received}`;\n                }\n                return `無效的輸入值：預期為 ${expected}，但收到 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `無效的輸入值：預期為 ${util.stringifyPrimitive(issue.values[0])}`;\n                return `無效的選項：預期為以下其中之一 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `數值過大：預期 ${issue.origin ?? \"值\"} 應為 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"個元素\"}`;\n                return `數值過大：預期 ${issue.origin ?? \"值\"} 應為 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `數值過小：預期 ${issue.origin} 應為 ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `數值過小：預期 ${issue.origin} 應為 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `無效的字串：必須以 \"${_issue.prefix}\" 開頭`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `無效的字串：必須以 \"${_issue.suffix}\" 結尾`;\n                if (_issue.format === \"includes\")\n                    return `無效的字串：必須包含 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `無效的字串：必須符合格式 ${_issue.pattern}`;\n                return `無效的 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `無效的數字：必須為 ${issue.divisor} 的倍數`;\n            case \"unrecognized_keys\":\n                return `無法識別的鍵值${issue.keys.length > 1 ? \"們\" : \"\"}：${util.joinValues(issue.keys, \"、\")}`;\n            case \"invalid_key\":\n                return `${issue.origin} 中有無效的鍵值`;\n            case \"invalid_union\":\n                return \"無效的輸入值\";\n            case \"invalid_element\":\n                return `${issue.origin} 中有無效的值`;\n            default:\n                return `無效的輸入值`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"àmi\", verb: \"ní\" },\n        file: { unit: \"bytes\", verb: \"ní\" },\n        array: { unit: \"nkan\", verb: \"ní\" },\n        set: { unit: \"nkan\", verb: \"ní\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"ẹ̀rọ ìbáwọlé\",\n        email: \"àdírẹ́sì ìmẹ́lì\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"àkókò ISO\",\n        date: \"ọjọ́ ISO\",\n        time: \"àkókò ISO\",\n        duration: \"àkókò tó pé ISO\",\n        ipv4: \"àdírẹ́sì IPv4\",\n        ipv6: \"àdírẹ́sì IPv6\",\n        cidrv4: \"àgbègbè IPv4\",\n        cidrv6: \"àgbègbè IPv6\",\n        base64: \"ọ̀rọ̀ tí a kọ́ ní base64\",\n        base64url: \"ọ̀rọ̀ base64url\",\n        json_string: \"ọ̀rọ̀ JSON\",\n        e164: \"nọ́mbà E.164\",\n        jwt: \"JWT\",\n        template_literal: \"ẹ̀rọ ìbáwọlé\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"nọ́mbà\",\n        array: \"akopọ\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ìbáwọlé aṣìṣe: a ní láti fi instanceof ${issue.expected}, àmọ̀ a rí ${received}`;\n                }\n                return `Ìbáwọlé aṣìṣe: a ní láti fi ${expected}, àmọ̀ a rí ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ìbáwọlé aṣìṣe: a ní láti fi ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Àṣàyàn aṣìṣe: yan ọ̀kan lára ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Tó pọ̀ jù: a ní láti jẹ́ pé ${issue.origin ?? \"iye\"} ${sizing.verb} ${adj}${issue.maximum} ${sizing.unit}`;\n                return `Tó pọ̀ jù: a ní láti jẹ́ ${adj}${issue.maximum}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Kéré ju: a ní láti jẹ́ pé ${issue.origin} ${sizing.verb} ${adj}${issue.minimum} ${sizing.unit}`;\n                return `Kéré ju: a ní láti jẹ́ ${adj}${issue.minimum}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ bẹ̀rẹ̀ pẹ̀lú \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ parí pẹ̀lú \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ ní \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ bá àpẹẹrẹ mu ${_issue.pattern}`;\n                return `Aṣìṣe: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Nọ́mbà aṣìṣe: gbọ́dọ̀ jẹ́ èyà pípín ti ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Bọtìnì àìmọ̀: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Bọtìnì aṣìṣe nínú ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ìbáwọlé aṣìṣe\";\n            case \"invalid_element\":\n                return `Iye aṣìṣe nínú ${issue.origin}`;\n            default:\n                return \"Ìbáwọlé aṣìṣe\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","export { default as ar } from \"./ar.js\";\nexport { default as az } from \"./az.js\";\nexport { default as be } from \"./be.js\";\nexport { default as bg } from \"./bg.js\";\nexport { default as ca } from \"./ca.js\";\nexport { default as cs } from \"./cs.js\";\nexport { default as da } from \"./da.js\";\nexport { default as de } from \"./de.js\";\nexport { default as el } from \"./el.js\";\nexport { default as en } from \"./en.js\";\nexport { default as eo } from \"./eo.js\";\nexport { default as es } from \"./es.js\";\nexport { default as fa } from \"./fa.js\";\nexport { default as fi } from \"./fi.js\";\nexport { default as fr } from \"./fr.js\";\nexport { default as frCA } from \"./fr-CA.js\";\nexport { default as he } from \"./he.js\";\nexport { default as hr } from \"./hr.js\";\nexport { default as hu } from \"./hu.js\";\nexport { default as hy } from \"./hy.js\";\nexport { default as id } from \"./id.js\";\nexport { default as is } from \"./is.js\";\nexport { default as it } from \"./it.js\";\nexport { default as ja } from \"./ja.js\";\nexport { default as ka } from \"./ka.js\";\nexport { default as kh } from \"./kh.js\";\nexport { default as km } from \"./km.js\";\nexport { default as ko } from \"./ko.js\";\nexport { default as lt } from \"./lt.js\";\nexport { default as mk } from \"./mk.js\";\nexport { default as ms } from \"./ms.js\";\nexport { default as nl } from \"./nl.js\";\nexport { default as no } from \"./no.js\";\nexport { default as ota } from \"./ota.js\";\nexport { default as ps } from \"./ps.js\";\nexport { default as pl } from \"./pl.js\";\nexport { default as pt } from \"./pt.js\";\nexport { default as ro } from \"./ro.js\";\nexport { default as ru } from \"./ru.js\";\nexport { default as sl } from \"./sl.js\";\nexport { default as sv } from \"./sv.js\";\nexport { default as ta } from \"./ta.js\";\nexport { default as th } from \"./th.js\";\nexport { default as tr } from \"./tr.js\";\nexport { default as ua } from \"./ua.js\";\nexport { default as uk } from \"./uk.js\";\nexport { default as ur } from \"./ur.js\";\nexport { default as uz } from \"./uz.js\";\nexport { default as vi } from \"./vi.js\";\nexport { default as zhCN } from \"./zh-CN.js\";\nexport { default as zhTW } from \"./zh-TW.js\";\nexport { default as yo } from \"./yo.js\";\n","var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n    constructor() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n    }\n    add(schema, ..._meta) {\n        const meta = _meta[0];\n        this._map.set(schema, meta);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.set(meta.id, schema);\n        }\n        return this;\n    }\n    clear() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n        return this;\n    }\n    remove(schema) {\n        const meta = this._map.get(schema);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.delete(meta.id);\n        }\n        this._map.delete(schema);\n        return this;\n    }\n    get(schema) {\n        // return this._map.get(schema) as any;\n        // inherit metadata\n        const p = schema._zod.parent;\n        if (p) {\n            const pm = { ...(this.get(p) ?? {}) };\n            delete pm.id; // do not inherit id\n            const f = { ...pm, ...this._map.get(schema) };\n            return Object.keys(f).length ? f : undefined;\n        }\n        return this._map.get(schema);\n    }\n    has(schema) {\n        return this._map.has(schema);\n    }\n}\n// registries\nexport function registry() {\n    return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n","import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n    return new Class({\n        type: \"string\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n    return new Class({\n        type: \"string\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"email\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"guid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v4\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v6\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v7\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"emoji\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"nanoid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link _cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid2\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ulid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"xid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ksuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"mac\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"e164\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"jwt\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const TimePrecision = {\n    Any: null,\n    Minute: -1,\n    Second: 0,\n    Millisecond: 3,\n    Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"datetime\",\n        check: \"string_format\",\n        offset: false,\n        local: false,\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"date\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"time\",\n        check: \"string_format\",\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"duration\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n    return new Class({\n        type: \"number\",\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n    return new Class({\n        type: \"number\",\n        coerce: true,\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"safeint\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"int32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"uint32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"int64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"uint64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n    return new Class({\n        type: \"symbol\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n    return new Class({\n        type: \"undefined\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n    return new Class({\n        type: \"null\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n    return new Class({\n        type: \"any\",\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n    return new Class({\n        type: \"unknown\",\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n    return new Class({\n        type: \"never\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n    return new Class({\n        type: \"void\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n    return new Class({\n        type: \"date\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n    return new Class({\n        type: \"date\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n    return new Class({\n        type: \"nan\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n    return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n    return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n    return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n    return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n    return new checks.$ZodCheckMultipleOf({\n        check: \"multiple_of\",\n        ...util.normalizeParams(params),\n        value,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n    return new checks.$ZodCheckMaxSize({\n        check: \"max_size\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n    return new checks.$ZodCheckMinSize({\n        check: \"min_size\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n    return new checks.$ZodCheckSizeEquals({\n        check: \"size_equals\",\n        ...util.normalizeParams(params),\n        size,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n    const ch = new checks.$ZodCheckMaxLength({\n        check: \"max_length\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n    return new checks.$ZodCheckMinLength({\n        check: \"min_length\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n    return new checks.$ZodCheckLengthEquals({\n        check: \"length_equals\",\n        ...util.normalizeParams(params),\n        length,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n    return new checks.$ZodCheckRegex({\n        check: \"string_format\",\n        format: \"regex\",\n        ...util.normalizeParams(params),\n        pattern,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n    return new checks.$ZodCheckLowerCase({\n        check: \"string_format\",\n        format: \"lowercase\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n    return new checks.$ZodCheckUpperCase({\n        check: \"string_format\",\n        format: \"uppercase\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n    return new checks.$ZodCheckIncludes({\n        check: \"string_format\",\n        format: \"includes\",\n        ...util.normalizeParams(params),\n        includes,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n    return new checks.$ZodCheckStartsWith({\n        check: \"string_format\",\n        format: \"starts_with\",\n        ...util.normalizeParams(params),\n        prefix,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n    return new checks.$ZodCheckEndsWith({\n        check: \"string_format\",\n        format: \"ends_with\",\n        ...util.normalizeParams(params),\n        suffix,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n    return new checks.$ZodCheckProperty({\n        check: \"property\",\n        property,\n        schema,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n    return new checks.$ZodCheckMimeType({\n        check: \"mime_type\",\n        mime: types,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n    return new checks.$ZodCheckOverwrite({\n        check: \"overwrite\",\n        tx,\n    });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n    return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n    return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n    return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n    return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n    return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n    return new Class({\n        type: \"array\",\n        element,\n        // get element() {\n        //   return element;\n        // },\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _xor(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        inclusive: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n    return new Class({\n        type: \"intersection\",\n        left,\n        right,\n    });\n}\n// export function _tuple(\n//   Class: util.SchemaClass<schemas.$ZodTuple>,\n//   items: [],\n//   params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new Class({\n        type: \"tuple\",\n        items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"record\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"map\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n    return new Class({\n        type: \"set\",\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    // if (Array.isArray(values)) {\n    //   for (const value of values) {\n    //     entries[value] = value;\n    //   }\n    // } else {\n    //   Object.assign(entries, values);\n    // }\n    // const entries: util.EnumLike = {};\n    // for (const val of values) {\n    //   entries[val] = val;\n    // }\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n    return new Class({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n    return new Class({\n        type: \"file\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n    return new Class({\n        type: \"transform\",\n        transform: fn,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n    return new Class({\n        type: \"optional\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n    return new Class({\n        type: \"nullable\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n    return new Class({\n        type: \"default\",\n        innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n    return new Class({\n        type: \"nonoptional\",\n        innerType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n    return new Class({\n        type: \"success\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n    return new Class({\n        type: \"catch\",\n        innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n    return new Class({\n        type: \"pipe\",\n        in: in_,\n        out,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n    return new Class({\n        type: \"readonly\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n    return new Class({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n    return new Class({\n        type: \"lazy\",\n        getter,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n    return new Class({\n        type: \"promise\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n    const norm = util.normalizeParams(_params);\n    norm.abort ?? (norm.abort = true); // default to abort:false\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...norm,\n    });\n    return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...util.normalizeParams(_params),\n    });\n    return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn, params) {\n    const ch = _check((payload) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = ch);\n                _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        return fn(payload.value, payload);\n    }, params);\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n    const ch = new checks.$ZodCheck({\n        check: \"custom\",\n        ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n    const ch = new checks.$ZodCheck({ check: \"describe\" });\n    ch._zod.onattach = [\n        (inst) => {\n            const existing = registries.globalRegistry.get(inst) ?? {};\n            registries.globalRegistry.add(inst, { ...existing, description });\n        },\n    ];\n    ch._zod.check = () => { }; // no-op check\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n    const ch = new checks.$ZodCheck({ check: \"meta\" });\n    ch._zod.onattach = [\n        (inst) => {\n            const existing = registries.globalRegistry.get(inst) ?? {};\n            registries.globalRegistry.add(inst, { ...existing, ...metadata });\n        },\n    ];\n    ch._zod.check = () => { }; // no-op check\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n    const params = util.normalizeParams(_params);\n    let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n    let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n    if (params.case !== \"sensitive\") {\n        truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n        falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n    }\n    const truthySet = new Set(truthyArray);\n    const falsySet = new Set(falsyArray);\n    const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n    const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n    const _String = Classes.String ?? schemas.$ZodString;\n    const stringSchema = new _String({ type: \"string\", error: params.error });\n    const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n    const codec = new _Codec({\n        type: \"pipe\",\n        in: stringSchema,\n        out: booleanSchema,\n        transform: ((input, payload) => {\n            let data = input;\n            if (params.case !== \"sensitive\")\n                data = data.toLowerCase();\n            if (truthySet.has(data)) {\n                return true;\n            }\n            else if (falsySet.has(data)) {\n                return false;\n            }\n            else {\n                payload.issues.push({\n                    code: \"invalid_value\",\n                    expected: \"stringbool\",\n                    values: [...truthySet, ...falsySet],\n                    input: payload.value,\n                    inst: codec,\n                    continue: false,\n                });\n                return {};\n            }\n        }),\n        reverseTransform: ((input, _payload) => {\n            if (input === true) {\n                return truthyArray[0] || \"true\";\n            }\n            else {\n                return falsyArray[0] || \"false\";\n            }\n        }),\n        error: params.error,\n    });\n    return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n    const params = util.normalizeParams(_params);\n    const def = {\n        ...util.normalizeParams(_params),\n        check: \"string_format\",\n        type: \"string\",\n        format,\n        fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n        ...params,\n    };\n    if (fnOrRegex instanceof RegExp) {\n        def.pattern = fnOrRegex;\n    }\n    const inst = new Class(def);\n    return inst;\n}\n","import { globalRegistry } from \"./registries.js\";\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n//   return {\n//     processor: inputs.processor,\n//     metadataRegistry: inputs.metadata ?? globalRegistry,\n//     target: inputs.target ?? \"draft-2020-12\",\n//     unrepresentable: inputs.unrepresentable ?? \"throw\",\n//   };\n// }\nexport function initializeContext(params) {\n    // Normalize target: convert old non-hyphenated versions to hyphenated versions\n    let target = params?.target ?? \"draft-2020-12\";\n    if (target === \"draft-4\")\n        target = \"draft-04\";\n    if (target === \"draft-7\")\n        target = \"draft-07\";\n    return {\n        processors: params.processors ?? {},\n        metadataRegistry: params?.metadata ?? globalRegistry,\n        target,\n        unrepresentable: params?.unrepresentable ?? \"throw\",\n        override: params?.override ?? (() => { }),\n        io: params?.io ?? \"output\",\n        counter: 0,\n        seen: new Map(),\n        cycles: params?.cycles ?? \"ref\",\n        reused: params?.reused ?? \"inline\",\n        external: params?.external ?? undefined,\n    };\n}\nexport function process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n    var _a;\n    const def = schema._zod.def;\n    // check for schema in seens\n    const seen = ctx.seen.get(schema);\n    if (seen) {\n        seen.count++;\n        // check if cycle\n        const isCycle = _params.schemaPath.includes(schema);\n        if (isCycle) {\n            seen.cycle = _params.path;\n        }\n        return seen.schema;\n    }\n    // initialize\n    const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n    ctx.seen.set(schema, result);\n    // custom method overrides default behavior\n    const overrideSchema = schema._zod.toJSONSchema?.();\n    if (overrideSchema) {\n        result.schema = overrideSchema;\n    }\n    else {\n        const params = {\n            ..._params,\n            schemaPath: [..._params.schemaPath, schema],\n            path: _params.path,\n        };\n        if (schema._zod.processJSONSchema) {\n            schema._zod.processJSONSchema(ctx, result.schema, params);\n        }\n        else {\n            const _json = result.schema;\n            const processor = ctx.processors[def.type];\n            if (!processor) {\n                throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n            }\n            processor(schema, ctx, _json, params);\n        }\n        const parent = schema._zod.parent;\n        if (parent) {\n            // Also set ref if processor didn't (for inheritance)\n            if (!result.ref)\n                result.ref = parent;\n            process(parent, ctx, params);\n            ctx.seen.get(parent).isParent = true;\n        }\n    }\n    // metadata\n    const meta = ctx.metadataRegistry.get(schema);\n    if (meta)\n        Object.assign(result.schema, meta);\n    if (ctx.io === \"input\" && isTransforming(schema)) {\n        // examples/defaults only apply to output type of pipe\n        delete result.schema.examples;\n        delete result.schema.default;\n    }\n    // set prefault as default\n    if (ctx.io === \"input\" && \"_prefault\" in result.schema)\n        (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n    delete result.schema._prefault;\n    // pulling fresh from ctx.seen in case it was overwritten\n    const _result = ctx.seen.get(schema);\n    return _result.schema;\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n    // iterate over seen map;\n    const root = ctx.seen.get(schema);\n    if (!root)\n        throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n    // Track ids to detect duplicates across different schemas\n    const idToSchema = new Map();\n    for (const entry of ctx.seen.entries()) {\n        const id = ctx.metadataRegistry.get(entry[0])?.id;\n        if (id) {\n            const existing = idToSchema.get(id);\n            if (existing && existing !== entry[0]) {\n                throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n            }\n            idToSchema.set(id, entry[0]);\n        }\n    }\n    // returns a ref to the schema\n    // defId will be empty if the ref points to an external schema (or #)\n    const makeURI = (entry) => {\n        // comparing the seen objects because sometimes\n        // multiple schemas map to the same seen object.\n        // e.g. lazy\n        // external is configured\n        const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n        if (ctx.external) {\n            const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n            // check if schema is in the external registry\n            const uriGenerator = ctx.external.uri ?? ((id) => id);\n            if (externalId) {\n                return { ref: uriGenerator(externalId) };\n            }\n            // otherwise, add to __shared\n            const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n            entry[1].defId = id; // set defId so it will be reused if needed\n            return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n        }\n        if (entry[1] === root) {\n            return { ref: \"#\" };\n        }\n        // self-contained schema\n        const uriPrefix = `#`;\n        const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n        const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n        return { defId, ref: defUriPrefix + defId };\n    };\n    // stored cached version in `def` property\n    // remove all properties, set $ref\n    const extractToDef = (entry) => {\n        // if the schema is already a reference, do not extract it\n        if (entry[1].schema.$ref) {\n            return;\n        }\n        const seen = entry[1];\n        const { ref, defId } = makeURI(entry);\n        seen.def = { ...seen.schema };\n        // defId won't be set if the schema is a reference to an external schema\n        // or if the schema is the root schema\n        if (defId)\n            seen.defId = defId;\n        // wipe away all properties except $ref\n        const schema = seen.schema;\n        for (const key in schema) {\n            delete schema[key];\n        }\n        schema.$ref = ref;\n    };\n    // throw on cycles\n    // break cycles\n    if (ctx.cycles === \"throw\") {\n        for (const entry of ctx.seen.entries()) {\n            const seen = entry[1];\n            if (seen.cycle) {\n                throw new Error(\"Cycle detected: \" +\n                    `#/${seen.cycle?.join(\"/\")}/<root>` +\n                    '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n            }\n        }\n    }\n    // extract schemas into $defs\n    for (const entry of ctx.seen.entries()) {\n        const seen = entry[1];\n        // convert root schema to # $ref\n        if (schema === entry[0]) {\n            extractToDef(entry); // this has special handling for the root schema\n            continue;\n        }\n        // extract schemas that are in the external registry\n        if (ctx.external) {\n            const ext = ctx.external.registry.get(entry[0])?.id;\n            if (schema !== entry[0] && ext) {\n                extractToDef(entry);\n                continue;\n            }\n        }\n        // extract schemas with `id` meta\n        const id = ctx.metadataRegistry.get(entry[0])?.id;\n        if (id) {\n            extractToDef(entry);\n            continue;\n        }\n        // break cycles\n        if (seen.cycle) {\n            // any\n            extractToDef(entry);\n            continue;\n        }\n        // extract reused schemas\n        if (seen.count > 1) {\n            if (ctx.reused === \"ref\") {\n                extractToDef(entry);\n                // biome-ignore lint:\n                continue;\n            }\n        }\n    }\n}\nexport function finalize(ctx, schema) {\n    const root = ctx.seen.get(schema);\n    if (!root)\n        throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n    // flatten refs - inherit properties from parent schemas\n    const flattenRef = (zodSchema) => {\n        const seen = ctx.seen.get(zodSchema);\n        // already processed\n        if (seen.ref === null)\n            return;\n        const schema = seen.def ?? seen.schema;\n        const _cached = { ...schema };\n        const ref = seen.ref;\n        seen.ref = null; // prevent infinite recursion\n        if (ref) {\n            flattenRef(ref);\n            const refSeen = ctx.seen.get(ref);\n            const refSchema = refSeen.schema;\n            // merge referenced schema into current\n            if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n                // older drafts can't combine $ref with other properties\n                schema.allOf = schema.allOf ?? [];\n                schema.allOf.push(refSchema);\n            }\n            else {\n                Object.assign(schema, refSchema);\n            }\n            // restore child's own properties (child wins)\n            Object.assign(schema, _cached);\n            const isParentRef = zodSchema._zod.parent === ref;\n            // For parent chain, child is a refinement - remove parent-only properties\n            if (isParentRef) {\n                for (const key in schema) {\n                    if (key === \"$ref\" || key === \"allOf\")\n                        continue;\n                    if (!(key in _cached)) {\n                        delete schema[key];\n                    }\n                }\n            }\n            // When ref was extracted to $defs, remove properties that match the definition\n            if (refSchema.$ref && refSeen.def) {\n                for (const key in schema) {\n                    if (key === \"$ref\" || key === \"allOf\")\n                        continue;\n                    if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n                        delete schema[key];\n                    }\n                }\n            }\n        }\n        // If parent was extracted (has $ref), propagate $ref to this schema\n        // This handles cases like: readonly().meta({id}).describe()\n        // where processor sets ref to innerType but parent should be referenced\n        const parent = zodSchema._zod.parent;\n        if (parent && parent !== ref) {\n            // Ensure parent is processed first so its def has inherited properties\n            flattenRef(parent);\n            const parentSeen = ctx.seen.get(parent);\n            if (parentSeen?.schema.$ref) {\n                schema.$ref = parentSeen.schema.$ref;\n                // De-duplicate with parent's definition\n                if (parentSeen.def) {\n                    for (const key in schema) {\n                        if (key === \"$ref\" || key === \"allOf\")\n                            continue;\n                        if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n                            delete schema[key];\n                        }\n                    }\n                }\n            }\n        }\n        // execute overrides\n        ctx.override({\n            zodSchema: zodSchema,\n            jsonSchema: schema,\n            path: seen.path ?? [],\n        });\n    };\n    for (const entry of [...ctx.seen.entries()].reverse()) {\n        flattenRef(entry[0]);\n    }\n    const result = {};\n    if (ctx.target === \"draft-2020-12\") {\n        result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n    }\n    else if (ctx.target === \"draft-07\") {\n        result.$schema = \"http://json-schema.org/draft-07/schema#\";\n    }\n    else if (ctx.target === \"draft-04\") {\n        result.$schema = \"http://json-schema.org/draft-04/schema#\";\n    }\n    else if (ctx.target === \"openapi-3.0\") {\n        // OpenAPI 3.0 schema objects should not include a $schema property\n    }\n    else {\n        // Arbitrary string values are allowed but won't have a $schema property set\n    }\n    if (ctx.external?.uri) {\n        const id = ctx.external.registry.get(schema)?.id;\n        if (!id)\n            throw new Error(\"Schema is missing an `id` property\");\n        result.$id = ctx.external.uri(id);\n    }\n    Object.assign(result, root.def ?? root.schema);\n    // The `id` in `.meta()` is a Zod-specific registration tag used to extract\n    // schemas into $defs — it is not user-facing JSON Schema metadata. Strip it\n    // from the output body where it would otherwise leak. The id is preserved\n    // implicitly via the $defs key (and via $ref paths).\n    const rootMetaId = ctx.metadataRegistry.get(schema)?.id;\n    if (rootMetaId !== undefined && result.id === rootMetaId)\n        delete result.id;\n    // build defs object\n    const defs = ctx.external?.defs ?? {};\n    for (const entry of ctx.seen.entries()) {\n        const seen = entry[1];\n        if (seen.def && seen.defId) {\n            if (seen.def.id === seen.defId)\n                delete seen.def.id;\n            defs[seen.defId] = seen.def;\n        }\n    }\n    // set definitions in result\n    if (ctx.external) {\n    }\n    else {\n        if (Object.keys(defs).length > 0) {\n            if (ctx.target === \"draft-2020-12\") {\n                result.$defs = defs;\n            }\n            else {\n                result.definitions = defs;\n            }\n        }\n    }\n    try {\n        // this \"finalizes\" this schema and ensures all cycles are removed\n        // each call to finalize() is functionally independent\n        // though the seen map is shared\n        const finalized = JSON.parse(JSON.stringify(result));\n        Object.defineProperty(finalized, \"~standard\", {\n            value: {\n                ...schema[\"~standard\"],\n                jsonSchema: {\n                    input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n                    output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n                },\n            },\n            enumerable: false,\n            writable: false,\n        });\n        return finalized;\n    }\n    catch (_err) {\n        throw new Error(\"Error converting schema to JSON.\");\n    }\n}\nfunction isTransforming(_schema, _ctx) {\n    const ctx = _ctx ?? { seen: new Set() };\n    if (ctx.seen.has(_schema))\n        return false;\n    ctx.seen.add(_schema);\n    const def = _schema._zod.def;\n    if (def.type === \"transform\")\n        return true;\n    if (def.type === \"array\")\n        return isTransforming(def.element, ctx);\n    if (def.type === \"set\")\n        return isTransforming(def.valueType, ctx);\n    if (def.type === \"lazy\")\n        return isTransforming(def.getter(), ctx);\n    if (def.type === \"promise\" ||\n        def.type === \"optional\" ||\n        def.type === \"nonoptional\" ||\n        def.type === \"nullable\" ||\n        def.type === \"readonly\" ||\n        def.type === \"default\" ||\n        def.type === \"prefault\") {\n        return isTransforming(def.innerType, ctx);\n    }\n    if (def.type === \"intersection\") {\n        return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n    }\n    if (def.type === \"record\" || def.type === \"map\") {\n        return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n    }\n    if (def.type === \"pipe\") {\n        if (_schema._zod.traits.has(\"$ZodCodec\"))\n            return true;\n        return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n    }\n    if (def.type === \"object\") {\n        for (const key in def.shape) {\n            if (isTransforming(def.shape[key], ctx))\n                return true;\n        }\n        return false;\n    }\n    if (def.type === \"union\") {\n        for (const option of def.options) {\n            if (isTransforming(option, ctx))\n                return true;\n        }\n        return false;\n    }\n    if (def.type === \"tuple\") {\n        for (const item of def.items) {\n            if (isTransforming(item, ctx))\n                return true;\n        }\n        if (def.rest && isTransforming(def.rest, ctx))\n            return true;\n        return false;\n    }\n    return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n    const ctx = initializeContext({ ...params, processors });\n    process(schema, ctx);\n    extractDefs(ctx, schema);\n    return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n    const { libraryOptions, target } = params ?? {};\n    const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n    process(schema, ctx);\n    extractDefs(ctx, schema);\n    return finalize(ctx, schema);\n};\n","import { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\nimport { getEnumValues } from \"./util.js\";\nconst formatMap = {\n    guid: \"uuid\",\n    url: \"uri\",\n    datetime: \"date-time\",\n    json_string: \"json-string\",\n    regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n    const json = _json;\n    json.type = \"string\";\n    const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n        .bag;\n    if (typeof minimum === \"number\")\n        json.minLength = minimum;\n    if (typeof maximum === \"number\")\n        json.maxLength = maximum;\n    // custom pattern overrides format\n    if (format) {\n        json.format = formatMap[format] ?? format;\n        if (json.format === \"\")\n            delete json.format; // empty format is not valid\n        // JSON Schema format: \"time\" requires a full time with offset or Z\n        // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n        if (format === \"time\") {\n            delete json.format;\n        }\n    }\n    if (contentEncoding)\n        json.contentEncoding = contentEncoding;\n    if (patterns && patterns.size > 0) {\n        const regexes = [...patterns];\n        if (regexes.length === 1)\n            json.pattern = regexes[0].source;\n        else if (regexes.length > 1) {\n            json.allOf = [\n                ...regexes.map((regex) => ({\n                    ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n                        ? { type: \"string\" }\n                        : {}),\n                    pattern: regex.source,\n                })),\n            ];\n        }\n    }\n};\nexport const numberProcessor = (schema, ctx, _json, _params) => {\n    const json = _json;\n    const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n    if (typeof format === \"string\" && format.includes(\"int\"))\n        json.type = \"integer\";\n    else\n        json.type = \"number\";\n    // when both minimum and exclusiveMinimum exist, pick the more restrictive one\n    const exMin = typeof exclusiveMinimum === \"number\" && exclusiveMinimum >= (minimum ?? Number.NEGATIVE_INFINITY);\n    const exMax = typeof exclusiveMaximum === \"number\" && exclusiveMaximum <= (maximum ?? Number.POSITIVE_INFINITY);\n    const legacy = ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\";\n    if (exMin) {\n        if (legacy) {\n            json.minimum = exclusiveMinimum;\n            json.exclusiveMinimum = true;\n        }\n        else {\n            json.exclusiveMinimum = exclusiveMinimum;\n        }\n    }\n    else if (typeof minimum === \"number\") {\n        json.minimum = minimum;\n    }\n    if (exMax) {\n        if (legacy) {\n            json.maximum = exclusiveMaximum;\n            json.exclusiveMaximum = true;\n        }\n        else {\n            json.exclusiveMaximum = exclusiveMaximum;\n        }\n    }\n    else if (typeof maximum === \"number\") {\n        json.maximum = maximum;\n    }\n    if (typeof multipleOf === \"number\")\n        json.multipleOf = multipleOf;\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n    json.type = \"boolean\";\n};\nexport const bigintProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"BigInt cannot be represented in JSON Schema\");\n    }\n};\nexport const symbolProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Symbols cannot be represented in JSON Schema\");\n    }\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n    if (ctx.target === \"openapi-3.0\") {\n        json.type = \"string\";\n        json.nullable = true;\n        json.enum = [null];\n    }\n    else {\n        json.type = \"null\";\n    }\n};\nexport const undefinedProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Undefined cannot be represented in JSON Schema\");\n    }\n};\nexport const voidProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Void cannot be represented in JSON Schema\");\n    }\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n    json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n    // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n    // empty schema accepts anything\n};\nexport const dateProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Date cannot be represented in JSON Schema\");\n    }\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n    const def = schema._zod.def;\n    const values = getEnumValues(def.entries);\n    // Number enums can have both string and number values\n    if (values.every((v) => typeof v === \"number\"))\n        json.type = \"number\";\n    if (values.every((v) => typeof v === \"string\"))\n        json.type = \"string\";\n    json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, _params) => {\n    const def = schema._zod.def;\n    const vals = [];\n    for (const val of def.values) {\n        if (val === undefined) {\n            if (ctx.unrepresentable === \"throw\") {\n                throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n            }\n            else {\n                // do not add to vals\n            }\n        }\n        else if (typeof val === \"bigint\") {\n            if (ctx.unrepresentable === \"throw\") {\n                throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n            }\n            else {\n                vals.push(Number(val));\n            }\n        }\n        else {\n            vals.push(val);\n        }\n    }\n    if (vals.length === 0) {\n        // do nothing (an undefined literal was stripped)\n    }\n    else if (vals.length === 1) {\n        const val = vals[0];\n        json.type = val === null ? \"null\" : typeof val;\n        if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n            json.enum = [val];\n        }\n        else {\n            json.const = val;\n        }\n    }\n    else {\n        if (vals.every((v) => typeof v === \"number\"))\n            json.type = \"number\";\n        if (vals.every((v) => typeof v === \"string\"))\n            json.type = \"string\";\n        if (vals.every((v) => typeof v === \"boolean\"))\n            json.type = \"boolean\";\n        if (vals.every((v) => v === null))\n            json.type = \"null\";\n        json.enum = vals;\n    }\n};\nexport const nanProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"NaN cannot be represented in JSON Schema\");\n    }\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n    const _json = json;\n    const pattern = schema._zod.pattern;\n    if (!pattern)\n        throw new Error(\"Pattern not found in template literal\");\n    _json.type = \"string\";\n    _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n    const _json = json;\n    const file = {\n        type: \"string\",\n        format: \"binary\",\n        contentEncoding: \"binary\",\n    };\n    const { minimum, maximum, mime } = schema._zod.bag;\n    if (minimum !== undefined)\n        file.minLength = minimum;\n    if (maximum !== undefined)\n        file.maxLength = maximum;\n    if (mime) {\n        if (mime.length === 1) {\n            file.contentMediaType = mime[0];\n            Object.assign(_json, file);\n        }\n        else {\n            Object.assign(_json, file); // shared props at root\n            _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n        }\n    }\n    else {\n        Object.assign(_json, file);\n    }\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n    json.type = \"boolean\";\n};\nexport const customProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Custom types cannot be represented in JSON Schema\");\n    }\n};\nexport const functionProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Function types cannot be represented in JSON Schema\");\n    }\n};\nexport const transformProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Transforms cannot be represented in JSON Schema\");\n    }\n};\nexport const mapProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Map cannot be represented in JSON Schema\");\n    }\n};\nexport const setProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Set cannot be represented in JSON Schema\");\n    }\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    const { minimum, maximum } = schema._zod.bag;\n    if (typeof minimum === \"number\")\n        json.minItems = minimum;\n    if (typeof maximum === \"number\")\n        json.maxItems = maximum;\n    json.type = \"array\";\n    json.items = process(def.element, ctx, {\n        ...params,\n        path: [...params.path, \"items\"],\n    });\n};\nexport const objectProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"object\";\n    json.properties = {};\n    const shape = def.shape;\n    for (const key in shape) {\n        json.properties[key] = process(shape[key], ctx, {\n            ...params,\n            path: [...params.path, \"properties\", key],\n        });\n    }\n    // required keys\n    const allKeys = new Set(Object.keys(shape));\n    const requiredKeys = new Set([...allKeys].filter((key) => {\n        const v = def.shape[key]._zod;\n        if (ctx.io === \"input\") {\n            return v.optin === undefined;\n        }\n        else {\n            return v.optout === undefined;\n        }\n    }));\n    if (requiredKeys.size > 0) {\n        json.required = Array.from(requiredKeys);\n    }\n    // catchall\n    if (def.catchall?._zod.def.type === \"never\") {\n        // strict\n        json.additionalProperties = false;\n    }\n    else if (!def.catchall) {\n        // regular\n        if (ctx.io === \"output\")\n            json.additionalProperties = false;\n    }\n    else if (def.catchall) {\n        json.additionalProperties = process(def.catchall, ctx, {\n            ...params,\n            path: [...params.path, \"additionalProperties\"],\n        });\n    }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n    // This includes both z.xor() and discriminated unions\n    const isExclusive = def.inclusive === false;\n    const options = def.options.map((x, i) => process(x, ctx, {\n        ...params,\n        path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n    }));\n    if (isExclusive) {\n        json.oneOf = options;\n    }\n    else {\n        json.anyOf = options;\n    }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    const a = process(def.left, ctx, {\n        ...params,\n        path: [...params.path, \"allOf\", 0],\n    });\n    const b = process(def.right, ctx, {\n        ...params,\n        path: [...params.path, \"allOf\", 1],\n    });\n    const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n    const allOf = [\n        ...(isSimpleIntersection(a) ? a.allOf : [a]),\n        ...(isSimpleIntersection(b) ? b.allOf : [b]),\n    ];\n    json.allOf = allOf;\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"array\";\n    const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n    const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n    const prefixItems = def.items.map((x, i) => process(x, ctx, {\n        ...params,\n        path: [...params.path, prefixPath, i],\n    }));\n    const rest = def.rest\n        ? process(def.rest, ctx, {\n            ...params,\n            path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n        })\n        : null;\n    if (ctx.target === \"draft-2020-12\") {\n        json.prefixItems = prefixItems;\n        if (rest) {\n            json.items = rest;\n        }\n    }\n    else if (ctx.target === \"openapi-3.0\") {\n        json.items = {\n            anyOf: prefixItems,\n        };\n        if (rest) {\n            json.items.anyOf.push(rest);\n        }\n        json.minItems = prefixItems.length;\n        if (!rest) {\n            json.maxItems = prefixItems.length;\n        }\n    }\n    else {\n        json.items = prefixItems;\n        if (rest) {\n            json.additionalItems = rest;\n        }\n    }\n    // length\n    const { minimum, maximum } = schema._zod.bag;\n    if (typeof minimum === \"number\")\n        json.minItems = minimum;\n    if (typeof maximum === \"number\")\n        json.maxItems = maximum;\n};\nexport const recordProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"object\";\n    // For looseRecord with regex patterns, use patternProperties\n    // This correctly represents \"only validate keys matching the pattern\" semantics\n    // and composes well with allOf (intersections)\n    const keyType = def.keyType;\n    const keyBag = keyType._zod.bag;\n    const patterns = keyBag?.patterns;\n    if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n        // Use patternProperties for looseRecord with regex patterns\n        const valueSchema = process(def.valueType, ctx, {\n            ...params,\n            path: [...params.path, \"patternProperties\", \"*\"],\n        });\n        json.patternProperties = {};\n        for (const pattern of patterns) {\n            json.patternProperties[pattern.source] = valueSchema;\n        }\n    }\n    else {\n        // Default behavior: use propertyNames + additionalProperties\n        if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n            json.propertyNames = process(def.keyType, ctx, {\n                ...params,\n                path: [...params.path, \"propertyNames\"],\n            });\n        }\n        json.additionalProperties = process(def.valueType, ctx, {\n            ...params,\n            path: [...params.path, \"additionalProperties\"],\n        });\n    }\n    // Add required for keys with discrete values (enum, literal, etc.)\n    const keyValues = keyType._zod.values;\n    if (keyValues) {\n        const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n        if (validKeyValues.length > 0) {\n            json.required = validKeyValues;\n        }\n    }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    const inner = process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    if (ctx.target === \"openapi-3.0\") {\n        seen.ref = def.innerType;\n        json.nullable = true;\n    }\n    else {\n        json.anyOf = [inner, { type: \"null\" }];\n    }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexport const defaultProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    if (ctx.io === \"input\")\n        json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    let catchValue;\n    try {\n        catchValue = def.catchValue(undefined);\n    }\n    catch {\n        throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n    }\n    json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    const inIsTransform = def.in._zod.traits.has(\"$ZodTransform\");\n    const innerType = ctx.io === \"input\" ? (inIsTransform ? def.out : def.in) : def.out;\n    process(innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n    const innerType = schema._zod.innerType;\n    process(innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n    string: stringProcessor,\n    number: numberProcessor,\n    boolean: booleanProcessor,\n    bigint: bigintProcessor,\n    symbol: symbolProcessor,\n    null: nullProcessor,\n    undefined: undefinedProcessor,\n    void: voidProcessor,\n    never: neverProcessor,\n    any: anyProcessor,\n    unknown: unknownProcessor,\n    date: dateProcessor,\n    enum: enumProcessor,\n    literal: literalProcessor,\n    nan: nanProcessor,\n    template_literal: templateLiteralProcessor,\n    file: fileProcessor,\n    success: successProcessor,\n    custom: customProcessor,\n    function: functionProcessor,\n    transform: transformProcessor,\n    map: mapProcessor,\n    set: setProcessor,\n    array: arrayProcessor,\n    object: objectProcessor,\n    union: unionProcessor,\n    intersection: intersectionProcessor,\n    tuple: tupleProcessor,\n    record: recordProcessor,\n    nullable: nullableProcessor,\n    nonoptional: nonoptionalProcessor,\n    default: defaultProcessor,\n    prefault: prefaultProcessor,\n    catch: catchProcessor,\n    pipe: pipeProcessor,\n    readonly: readonlyProcessor,\n    promise: promiseProcessor,\n    optional: optionalProcessor,\n    lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n    if (\"_idmap\" in input) {\n        // Registry case\n        const registry = input;\n        const ctx = initializeContext({ ...params, processors: allProcessors });\n        const defs = {};\n        // First pass: process all schemas to build the seen map\n        for (const entry of registry._idmap.entries()) {\n            const [_, schema] = entry;\n            process(schema, ctx);\n        }\n        const schemas = {};\n        const external = {\n            registry,\n            uri: params?.uri,\n            defs,\n        };\n        // Update the context with external configuration\n        ctx.external = external;\n        // Second pass: emit each schema\n        for (const entry of registry._idmap.entries()) {\n            const [key, schema] = entry;\n            extractDefs(ctx, schema);\n            schemas[key] = finalize(ctx, schema);\n        }\n        if (Object.keys(defs).length > 0) {\n            const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n            schemas.__shared = {\n                [defsSegment]: defs,\n            };\n        }\n        return { schemas };\n    }\n    // Single schema case\n    const ctx = initializeContext({ ...params, processors: allProcessors });\n    process(input, ctx);\n    extractDefs(ctx, input);\n    return finalize(ctx, input);\n}\n","import { allProcessors } from \"./json-schema-processors.js\";\nimport { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\n/**\n * Legacy class-based interface for JSON Schema generation.\n * This class wraps the new functional implementation to provide backward compatibility.\n *\n * @deprecated Use the `toJSONSchema` function instead for new code.\n *\n * @example\n * ```typescript\n * // Legacy usage (still supported)\n * const gen = new JSONSchemaGenerator({ target: \"draft-07\" });\n * gen.process(schema);\n * const result = gen.emit(schema);\n *\n * // Preferred modern usage\n * const result = toJSONSchema(schema, { target: \"draft-07\" });\n * ```\n */\nexport class JSONSchemaGenerator {\n    /** @deprecated Access via ctx instead */\n    get metadataRegistry() {\n        return this.ctx.metadataRegistry;\n    }\n    /** @deprecated Access via ctx instead */\n    get target() {\n        return this.ctx.target;\n    }\n    /** @deprecated Access via ctx instead */\n    get unrepresentable() {\n        return this.ctx.unrepresentable;\n    }\n    /** @deprecated Access via ctx instead */\n    get override() {\n        return this.ctx.override;\n    }\n    /** @deprecated Access via ctx instead */\n    get io() {\n        return this.ctx.io;\n    }\n    /** @deprecated Access via ctx instead */\n    get counter() {\n        return this.ctx.counter;\n    }\n    set counter(value) {\n        this.ctx.counter = value;\n    }\n    /** @deprecated Access via ctx instead */\n    get seen() {\n        return this.ctx.seen;\n    }\n    constructor(params) {\n        // Normalize target for internal context\n        let normalizedTarget = params?.target ?? \"draft-2020-12\";\n        if (normalizedTarget === \"draft-4\")\n            normalizedTarget = \"draft-04\";\n        if (normalizedTarget === \"draft-7\")\n            normalizedTarget = \"draft-07\";\n        this.ctx = initializeContext({\n            processors: allProcessors,\n            target: normalizedTarget,\n            ...(params?.metadata && { metadata: params.metadata }),\n            ...(params?.unrepresentable && { unrepresentable: params.unrepresentable }),\n            ...(params?.override && { override: params.override }),\n            ...(params?.io && { io: params.io }),\n        });\n    }\n    /**\n     * Process a schema to prepare it for JSON Schema generation.\n     * This must be called before emit().\n     */\n    process(schema, _params = { path: [], schemaPath: [] }) {\n        return process(schema, this.ctx, _params);\n    }\n    /**\n     * Emit the final JSON Schema after processing.\n     * Must call process() first.\n     */\n    emit(schema, _params) {\n        // Apply emit params to the context\n        if (_params) {\n            if (_params.cycles)\n                this.ctx.cycles = _params.cycles;\n            if (_params.reused)\n                this.ctx.reused = _params.reused;\n            if (_params.external)\n                this.ctx.external = _params.external;\n        }\n        extractDefs(this.ctx, schema);\n        const result = finalize(this.ctx, schema);\n        // Strip ~standard property to match old implementation's return type\n        const { \"~standard\": _, ...plainResult } = result;\n        return plainResult;\n    }\n}\n","export {};\n","export * from \"./core.js\";\nexport * from \"./parse.js\";\nexport * from \"./errors.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./versions.js\";\nexport * as util from \"./util.js\";\nexport * as regexes from \"./regexes.js\";\nexport * as locales from \"../locales/index.js\";\nexport * from \"./registries.js\";\nexport * from \"./doc.js\";\nexport * from \"./api.js\";\nexport * from \"./to-json-schema.js\";\nexport { toJSONSchema } from \"./json-schema-processors.js\";\nexport { JSONSchemaGenerator } from \"./json-schema-generator.js\";\nexport * as JSONSchema from \"./json-schema.js\";\n","export { _lt as lt, _lte as lte, _gt as gt, _gte as gte, _positive as positive, _negative as negative, _nonpositive as nonpositive, _nonnegative as nonnegative, _multipleOf as multipleOf, _maxSize as maxSize, _minSize as minSize, _size as size, _maxLength as maxLength, _minLength as minLength, _length as length, _regex as regex, _lowercase as lowercase, _uppercase as uppercase, _includes as includes, _startsWith as startsWith, _endsWith as endsWith, _property as property, _mime as mime, _overwrite as overwrite, _normalize as normalize, _trim as trim, _toLowerCase as toLowerCase, _toUpperCase as toUpperCase, _slugify as slugify, } from \"../core/index.js\";\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n    core.$ZodISODateTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n    return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n    core.$ZodISODate.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n    return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n    core.$ZodISOTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n    return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n    core.$ZodISODuration.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n    return core._isoDuration(ZodISODuration, params);\n}\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n    $ZodError.init(inst, issues);\n    inst.name = \"ZodError\";\n    Object.defineProperties(inst, {\n        format: {\n            value: (mapper) => core.formatError(inst, mapper),\n            // enumerable: false,\n        },\n        flatten: {\n            value: (mapper) => core.flattenError(inst, mapper),\n            // enumerable: false,\n        },\n        addIssue: {\n            value: (issue) => {\n                inst.issues.push(issue);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        addIssues: {\n            value: (issues) => {\n                inst.issues.push(...issues);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        isEmpty: {\n            get() {\n                return inst.issues.length === 0;\n            },\n            // enumerable: false,\n        },\n    });\n    // Object.defineProperty(inst, \"isEmpty\", {\n    //   get() {\n    //     return inst.issues.length === 0;\n    //   },\n    // });\n};\nexport const ZodError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer, {\n    Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\n// Lazy-bind builder methods.\n//\n// Builder methods (`.optional`, `.array`, `.refine`, ...) live as\n// non-enumerable getters on each concrete schema constructor's\n// prototype. On first access from an instance the getter allocates\n// `fn.bind(this)` and caches it as an own property on that instance,\n// so detached usage (`const m = schema.optional; m()`) still works\n// and the per-instance allocation only happens for methods actually\n// touched.\n//\n// One install per (prototype, group), memoized by `_installedGroups`.\nconst _installedGroups = /* @__PURE__ */ new WeakMap();\nfunction _installLazyMethods(inst, group, methods) {\n    const proto = Object.getPrototypeOf(inst);\n    let installed = _installedGroups.get(proto);\n    if (!installed) {\n        installed = new Set();\n        _installedGroups.set(proto, installed);\n    }\n    if (installed.has(group))\n        return;\n    installed.add(group);\n    for (const key in methods) {\n        const fn = methods[key];\n        Object.defineProperty(proto, key, {\n            configurable: true,\n            enumerable: false,\n            get() {\n                const bound = fn.bind(this);\n                Object.defineProperty(this, key, {\n                    configurable: true,\n                    writable: true,\n                    enumerable: true,\n                    value: bound,\n                });\n                return bound;\n            },\n            set(v) {\n                Object.defineProperty(this, key, {\n                    configurable: true,\n                    writable: true,\n                    enumerable: true,\n                    value: v,\n                });\n            },\n        });\n    }\n}\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n    core.$ZodType.init(inst, def);\n    Object.assign(inst[\"~standard\"], {\n        jsonSchema: {\n            input: createStandardJSONSchemaMethod(inst, \"input\"),\n            output: createStandardJSONSchemaMethod(inst, \"output\"),\n        },\n    });\n    inst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n    inst.def = def;\n    inst.type = def.type;\n    Object.defineProperty(inst, \"_def\", { value: def });\n    // Parse-family is intentionally kept as per-instance closures: these are\n    // the hot path AND the most-detached methods (`arr.map(schema.parse)`,\n    // `const { parse } = schema`, etc.). Eager closures here mean callers pay\n    // ~12 closure allocations per schema but get monomorphic call sites and\n    // detached usage that \"just works\".\n    inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n    inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n    inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n    inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n    inst.spa = inst.safeParseAsync;\n    inst.encode = (data, params) => parse.encode(inst, data, params);\n    inst.decode = (data, params) => parse.decode(inst, data, params);\n    inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n    inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n    inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n    inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n    inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n    inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n    // All builder methods are placed on the internal prototype as lazy-bind\n    // getters. On first access per-instance, a bound thunk is allocated and\n    // cached as an own property; subsequent accesses skip the getter. This\n    // means: no per-instance allocation for unused methods, full\n    // detachability preserved (`const m = schema.optional; m()` works), and\n    // shared underlying function references across all instances.\n    _installLazyMethods(inst, \"ZodType\", {\n        check(...chks) {\n            const def = this.def;\n            return this.clone(util.mergeDefs(def, {\n                checks: [\n                    ...(def.checks ?? []),\n                    ...chks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n                ],\n            }), { parent: true });\n        },\n        with(...chks) {\n            return this.check(...chks);\n        },\n        clone(def, params) {\n            return core.clone(this, def, params);\n        },\n        brand() {\n            return this;\n        },\n        register(reg, meta) {\n            reg.add(this, meta);\n            return this;\n        },\n        refine(check, params) {\n            return this.check(refine(check, params));\n        },\n        superRefine(refinement, params) {\n            return this.check(superRefine(refinement, params));\n        },\n        overwrite(fn) {\n            return this.check(checks.overwrite(fn));\n        },\n        optional() {\n            return optional(this);\n        },\n        exactOptional() {\n            return exactOptional(this);\n        },\n        nullable() {\n            return nullable(this);\n        },\n        nullish() {\n            return optional(nullable(this));\n        },\n        nonoptional(params) {\n            return nonoptional(this, params);\n        },\n        array() {\n            return array(this);\n        },\n        or(arg) {\n            return union([this, arg]);\n        },\n        and(arg) {\n            return intersection(this, arg);\n        },\n        transform(tx) {\n            return pipe(this, transform(tx));\n        },\n        default(d) {\n            return _default(this, d);\n        },\n        prefault(d) {\n            return prefault(this, d);\n        },\n        catch(params) {\n            return _catch(this, params);\n        },\n        pipe(target) {\n            return pipe(this, target);\n        },\n        readonly() {\n            return readonly(this);\n        },\n        describe(description) {\n            const cl = this.clone();\n            core.globalRegistry.add(cl, { description });\n            return cl;\n        },\n        meta(...args) {\n            // overloaded: meta() returns the registered metadata, meta(data)\n            // returns a clone with `data` registered. The mapped type picks\n            // up the second overload, so we accept variadic any-args and\n            // return `any` to satisfy both at runtime.\n            if (args.length === 0)\n                return core.globalRegistry.get(this);\n            const cl = this.clone();\n            core.globalRegistry.add(cl, args[0]);\n            return cl;\n        },\n        isOptional() {\n            return this.safeParse(undefined).success;\n        },\n        isNullable() {\n            return this.safeParse(null).success;\n        },\n        apply(fn) {\n            return fn(this);\n        },\n    });\n    Object.defineProperty(inst, \"description\", {\n        get() {\n            return core.globalRegistry.get(inst)?.description;\n        },\n        configurable: true,\n    });\n    return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n    const bag = inst._zod.bag;\n    inst.format = bag.format ?? null;\n    inst.minLength = bag.minimum ?? null;\n    inst.maxLength = bag.maximum ?? null;\n    _installLazyMethods(inst, \"_ZodString\", {\n        regex(...args) {\n            return this.check(checks.regex(...args));\n        },\n        includes(...args) {\n            return this.check(checks.includes(...args));\n        },\n        startsWith(...args) {\n            return this.check(checks.startsWith(...args));\n        },\n        endsWith(...args) {\n            return this.check(checks.endsWith(...args));\n        },\n        min(...args) {\n            return this.check(checks.minLength(...args));\n        },\n        max(...args) {\n            return this.check(checks.maxLength(...args));\n        },\n        length(...args) {\n            return this.check(checks.length(...args));\n        },\n        nonempty(...args) {\n            return this.check(checks.minLength(1, ...args));\n        },\n        lowercase(params) {\n            return this.check(checks.lowercase(params));\n        },\n        uppercase(params) {\n            return this.check(checks.uppercase(params));\n        },\n        trim() {\n            return this.check(checks.trim());\n        },\n        normalize(...args) {\n            return this.check(checks.normalize(...args));\n        },\n        toLowerCase() {\n            return this.check(checks.toLowerCase());\n        },\n        toUpperCase() {\n            return this.check(checks.toUpperCase());\n        },\n        slugify() {\n            return this.check(checks.slugify());\n        },\n    });\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    _ZodString.init(inst, def);\n    inst.email = (params) => inst.check(core._email(ZodEmail, params));\n    inst.url = (params) => inst.check(core._url(ZodURL, params));\n    inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n    inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n    inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n    inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n    inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n    inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n    inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n    inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n    inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n    inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n    inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n    inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n    inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n    inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n    inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n    inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n    inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n    // iso\n    inst.datetime = (params) => inst.check(iso.datetime(params));\n    inst.date = (params) => inst.check(iso.date(params));\n    inst.time = (params) => inst.check(iso.time(params));\n    inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n    return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmail.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n    return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodGUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n    return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodUUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n    return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n    return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n    return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n    return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodURL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n    return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n    return core._url(ZodURL, {\n        protocol: core.regexes.httpProtocol,\n        hostname: core.regexes.domain,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmoji.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n    return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodNanoID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n    return core._nanoid(ZodNanoID, params);\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\n/**\n * Validates a CUID v1 string.\n *\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2 | `z.cuid2()`} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport function cuid(params) {\n    return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID2.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n    return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodULID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n    return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodXID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n    return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodKSUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n    return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n    return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodMAC.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n    return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n    return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n    return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n    return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n    return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64URL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n    return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodE164.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n    return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodJWT.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n    return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCustomStringFormat.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n    const enc = params?.enc ?? \"hex\";\n    const format = `${alg}_${enc}`;\n    const regex = core.regexes[format];\n    if (!regex)\n        throw new Error(`Unrecognized hash format: ${format}`);\n    return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n    _installLazyMethods(inst, \"ZodNumber\", {\n        gt(value, params) {\n            return this.check(checks.gt(value, params));\n        },\n        gte(value, params) {\n            return this.check(checks.gte(value, params));\n        },\n        min(value, params) {\n            return this.check(checks.gte(value, params));\n        },\n        lt(value, params) {\n            return this.check(checks.lt(value, params));\n        },\n        lte(value, params) {\n            return this.check(checks.lte(value, params));\n        },\n        max(value, params) {\n            return this.check(checks.lte(value, params));\n        },\n        int(params) {\n            return this.check(int(params));\n        },\n        safe(params) {\n            return this.check(int(params));\n        },\n        positive(params) {\n            return this.check(checks.gt(0, params));\n        },\n        nonnegative(params) {\n            return this.check(checks.gte(0, params));\n        },\n        negative(params) {\n            return this.check(checks.lt(0, params));\n        },\n        nonpositive(params) {\n            return this.check(checks.lte(0, params));\n        },\n        multipleOf(value, params) {\n            return this.check(checks.multipleOf(value, params));\n        },\n        step(value, params) {\n            return this.check(checks.multipleOf(value, params));\n        },\n        finite() {\n            return this;\n        },\n    });\n    const bag = inst._zod.bag;\n    inst.minValue =\n        Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n    inst.maxValue =\n        Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n    inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n    inst.isFinite = true;\n    inst.format = bag.format ?? null;\n});\nexport function number(params) {\n    return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    ZodNumber.init(inst, def);\n});\nexport function int(params) {\n    return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n    return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n    return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n    return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n    return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n    return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n    inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n    inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n    inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    const bag = inst._zod.bag;\n    inst.minValue = bag.minimum ?? null;\n    inst.maxValue = bag.maximum ?? null;\n    inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n    return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n    return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n    return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n    return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n    return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n    return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n    return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n    return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n    return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n    return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    const c = inst._zod.bag;\n    inst.minDate = c.minimum ? new Date(c.minimum) : null;\n    inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n    return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n    core.$ZodArray.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n    inst.element = def.element;\n    _installLazyMethods(inst, \"ZodArray\", {\n        min(n, params) {\n            return this.check(checks.minLength(n, params));\n        },\n        nonempty(params) {\n            return this.check(checks.minLength(1, params));\n        },\n        max(n, params) {\n            return this.check(checks.maxLength(n, params));\n        },\n        length(n, params) {\n            return this.check(checks.length(n, params));\n        },\n        unwrap() {\n            return this.element;\n        },\n    });\n});\nexport function array(element, params) {\n    return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n    core.$ZodObjectJIT.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n    util.defineLazy(inst, \"shape\", () => {\n        return def.shape;\n    });\n    _installLazyMethods(inst, \"ZodObject\", {\n        keyof() {\n            return _enum(Object.keys(this._zod.def.shape));\n        },\n        catchall(catchall) {\n            return this.clone({ ...this._zod.def, catchall: catchall });\n        },\n        passthrough() {\n            return this.clone({ ...this._zod.def, catchall: unknown() });\n        },\n        loose() {\n            return this.clone({ ...this._zod.def, catchall: unknown() });\n        },\n        strict() {\n            return this.clone({ ...this._zod.def, catchall: never() });\n        },\n        strip() {\n            return this.clone({ ...this._zod.def, catchall: undefined });\n        },\n        extend(incoming) {\n            return util.extend(this, incoming);\n        },\n        safeExtend(incoming) {\n            return util.safeExtend(this, incoming);\n        },\n        merge(other) {\n            return util.merge(this, other);\n        },\n        pick(mask) {\n            return util.pick(this, mask);\n        },\n        omit(mask) {\n            return util.omit(this, mask);\n        },\n        partial(...args) {\n            return util.partial(ZodOptional, this, args[0]);\n        },\n        required(...args) {\n            return util.required(ZodNonOptional, this, args[0]);\n        },\n    });\n});\nexport function object(shape, params) {\n    const def = {\n        type: \"object\",\n        shape: shape ?? {},\n        ...util.normalizeParams(params),\n    };\n    return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: never(),\n        ...util.normalizeParams(params),\n    });\n}\n// looseObject\nexport function looseObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: unknown(),\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n    inst.options = def.options;\n});\nexport function union(options, params) {\n    return new ZodUnion({\n        type: \"union\",\n        options: options,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodXor.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n    inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n    return new ZodXor({\n        type: \"union\",\n        options: options,\n        inclusive: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n    // const [options, params] = args;\n    return new ZodDiscriminatedUnion({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n    return new ZodIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n    core.$ZodTuple.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n    inst.rest = (rest) => inst.clone({\n        ...inst._zod.def,\n        rest: rest,\n    });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new ZodTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n    core.$ZodRecord.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n    // v3-compat: z.record(valueType, params?) — defaults keyType to z.string()\n    if (!valueType || !valueType._zod) {\n        return new ZodRecord({\n            type: \"record\",\n            keyType: string(),\n            valueType: keyType,\n            ...util.normalizeParams(valueType),\n        });\n    }\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n    const k = core.clone(keyType);\n    k._zod.values = undefined;\n    return new ZodRecord({\n        type: \"record\",\n        keyType: k,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function looseRecord(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        mode: \"loose\",\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n    core.$ZodMap.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n    return new ZodMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n    core.$ZodSet.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n    return new ZodSet({\n        type: \"set\",\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n    inst.enum = def.entries;\n    inst.options = Object.values(def.entries);\n    const keys = new Set(Object.keys(def.entries));\n    inst.extract = (values, params) => {\n        const newEntries = {};\n        for (const value of values) {\n            if (keys.has(value)) {\n                newEntries[value] = def.entries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n    inst.exclude = (values, params) => {\n        const newEntries = { ...def.entries };\n        for (const value of values) {\n            if (keys.has(value)) {\n                delete newEntries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n});\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n    inst.values = new Set(def.values);\n    Object.defineProperty(inst, \"value\", {\n        get() {\n            if (def.values.length > 1) {\n                throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n            }\n            return def.values[0];\n        },\n    });\n});\nexport function literal(value, params) {\n    return new ZodLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n    inst.min = (size, params) => inst.check(core._minSize(size, params));\n    inst.max = (size, params) => inst.check(core._maxSize(size, params));\n    inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n    return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n    core.$ZodTransform.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n    inst._zod.parse = (payload, _ctx) => {\n        if (_ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = inst);\n                // _issue.continue ??= true;\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        const output = def.transform(payload.value, payload);\n        if (output instanceof Promise) {\n            return output.then((output) => {\n                payload.value = output;\n                payload.fallback = true;\n                return payload;\n            });\n        }\n        payload.value = output;\n        payload.fallback = true;\n        return payload;\n    };\n});\nexport function transform(fn) {\n    return new ZodTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n    return new ZodOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n    core.$ZodExactOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n    return new ZodExactOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n    return new ZodNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\nexport function nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n    return new ZodDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n    return new ZodPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n    return new ZodNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n    return new ZodSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n    return new ZodCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n    return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n    inst.in = def.in;\n    inst.out = def.out;\n});\nexport function pipe(in_, out) {\n    return new ZodPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        // ...util.normalizeParams(params),\n    });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n    ZodPipe.init(inst, def);\n    core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n    return new ZodCodec({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        transform: params.decode,\n        reverseTransform: params.encode,\n    });\n}\nexport function invertCodec(codec) {\n    const def = codec._zod.def;\n    return new ZodCodec({\n        type: \"pipe\",\n        in: def.out,\n        out: def.in,\n        transform: def.reverseTransform,\n        reverseTransform: def.transform,\n    });\n}\nexport const ZodPreprocess = /*@__PURE__*/ core.$constructor(\"ZodPreprocess\", (inst, def) => {\n    ZodPipe.init(inst, def);\n    core.$ZodPreprocess.init(inst, def);\n});\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n    return new ZodReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n    return new ZodTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n    return new ZodLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n    return new ZodPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n    core.$ZodFunction.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n    return new ZodFunction({\n        type: \"function\",\n        input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n        output: params?.output ?? unknown(),\n    });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        // ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nexport function custom(fn, _params) {\n    return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n    return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn, params) {\n    return core._superRefine(fn, params);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nfunction _instanceof(cls, params = {}) {\n    const inst = new ZodCustom({\n        type: \"custom\",\n        check: \"custom\",\n        fn: (data) => data instanceof cls,\n        abort: true,\n        ...util.normalizeParams(params),\n    });\n    inst._zod.bag.Class = cls;\n    // Override check to emit invalid_type instead of custom\n    inst._zod.check = (payload) => {\n        if (!(payload.value instanceof cls)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: cls.name,\n                input: payload.value,\n                inst,\n                path: [...(inst._zod.def.path ?? [])],\n            });\n        }\n    };\n    return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n    Codec: ZodCodec,\n    Boolean: ZodBoolean,\n    String: ZodString,\n}, ...args);\nexport function json(params) {\n    const jsonSchema = lazy(() => {\n        return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\n// preprocess\nexport function preprocess(fn, schema) {\n    return new ZodPreprocess({\n        type: \"pipe\",\n        in: transform(fn),\n        out: schema,\n    });\n}\n","// Zod 3 compat layer\nimport * as core from \"../core/index.js\";\n/** @deprecated Use the raw string literal codes instead, e.g. \"invalid_type\". */\nexport const ZodIssueCode = {\n    invalid_type: \"invalid_type\",\n    too_big: \"too_big\",\n    too_small: \"too_small\",\n    invalid_format: \"invalid_format\",\n    not_multiple_of: \"not_multiple_of\",\n    unrecognized_keys: \"unrecognized_keys\",\n    invalid_union: \"invalid_union\",\n    invalid_key: \"invalid_key\",\n    invalid_element: \"invalid_element\",\n    invalid_value: \"invalid_value\",\n    custom: \"custom\",\n};\nexport { $brand, config } from \"../core/index.js\";\n/** @deprecated Use `z.config(params)` instead. */\nexport function setErrorMap(map) {\n    core.config({\n        customError: map,\n    });\n}\n/** @deprecated Use `z.config()` instead. */\nexport function getErrorMap() {\n    return core.config().customError;\n}\n/** @deprecated Do not use. Stub definition, only included for zod-to-json-schema compatibility. */\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n","import { globalRegistry } from \"../core/registries.js\";\nimport * as _checks from \"./checks.js\";\nimport * as _iso from \"./iso.js\";\nimport * as _schemas from \"./schemas.js\";\n// Local z object to avoid circular dependency with ../index.js\nconst z = {\n    ..._schemas,\n    ..._checks,\n    iso: _iso,\n};\n// Keys that are recognized and handled by the conversion logic\nconst RECOGNIZED_KEYS = /*@__PURE__*/ new Set([\n    // Schema identification\n    \"$schema\",\n    \"$ref\",\n    \"$defs\",\n    \"definitions\",\n    // Core schema keywords\n    \"$id\",\n    \"id\",\n    \"$comment\",\n    \"$anchor\",\n    \"$vocabulary\",\n    \"$dynamicRef\",\n    \"$dynamicAnchor\",\n    // Type\n    \"type\",\n    \"enum\",\n    \"const\",\n    // Composition\n    \"anyOf\",\n    \"oneOf\",\n    \"allOf\",\n    \"not\",\n    // Object\n    \"properties\",\n    \"required\",\n    \"additionalProperties\",\n    \"patternProperties\",\n    \"propertyNames\",\n    \"minProperties\",\n    \"maxProperties\",\n    // Array\n    \"items\",\n    \"prefixItems\",\n    \"additionalItems\",\n    \"minItems\",\n    \"maxItems\",\n    \"uniqueItems\",\n    \"contains\",\n    \"minContains\",\n    \"maxContains\",\n    // String\n    \"minLength\",\n    \"maxLength\",\n    \"pattern\",\n    \"format\",\n    // Number\n    \"minimum\",\n    \"maximum\",\n    \"exclusiveMinimum\",\n    \"exclusiveMaximum\",\n    \"multipleOf\",\n    // Already handled metadata\n    \"description\",\n    \"default\",\n    // Content\n    \"contentEncoding\",\n    \"contentMediaType\",\n    \"contentSchema\",\n    // Unsupported (error-throwing)\n    \"unevaluatedItems\",\n    \"unevaluatedProperties\",\n    \"if\",\n    \"then\",\n    \"else\",\n    \"dependentSchemas\",\n    \"dependentRequired\",\n    // OpenAPI\n    \"nullable\",\n    \"readOnly\",\n]);\nfunction detectVersion(schema, defaultTarget) {\n    const $schema = schema.$schema;\n    if ($schema === \"https://json-schema.org/draft/2020-12/schema\") {\n        return \"draft-2020-12\";\n    }\n    if ($schema === \"http://json-schema.org/draft-07/schema#\") {\n        return \"draft-7\";\n    }\n    if ($schema === \"http://json-schema.org/draft-04/schema#\") {\n        return \"draft-4\";\n    }\n    // Use defaultTarget if provided, otherwise default to draft-2020-12\n    return defaultTarget ?? \"draft-2020-12\";\n}\nfunction resolveRef(ref, ctx) {\n    if (!ref.startsWith(\"#\")) {\n        throw new Error(\"External $ref is not supported, only local refs (#/...) are allowed\");\n    }\n    const path = ref.slice(1).split(\"/\").filter(Boolean);\n    // Handle root reference \"#\"\n    if (path.length === 0) {\n        return ctx.rootSchema;\n    }\n    const defsKey = ctx.version === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n    if (path[0] === defsKey) {\n        const key = path[1];\n        if (!key || !ctx.defs[key]) {\n            throw new Error(`Reference not found: ${ref}`);\n        }\n        return ctx.defs[key];\n    }\n    throw new Error(`Reference not found: ${ref}`);\n}\nfunction convertBaseSchema(schema, ctx) {\n    // Handle unsupported features\n    if (schema.not !== undefined) {\n        // Special case: { not: {} } represents never\n        if (typeof schema.not === \"object\" && Object.keys(schema.not).length === 0) {\n            return z.never();\n        }\n        throw new Error(\"not is not supported in Zod (except { not: {} } for never)\");\n    }\n    if (schema.unevaluatedItems !== undefined) {\n        throw new Error(\"unevaluatedItems is not supported\");\n    }\n    if (schema.unevaluatedProperties !== undefined) {\n        throw new Error(\"unevaluatedProperties is not supported\");\n    }\n    if (schema.if !== undefined || schema.then !== undefined || schema.else !== undefined) {\n        throw new Error(\"Conditional schemas (if/then/else) are not supported\");\n    }\n    if (schema.dependentSchemas !== undefined || schema.dependentRequired !== undefined) {\n        throw new Error(\"dependentSchemas and dependentRequired are not supported\");\n    }\n    // Handle $ref\n    if (schema.$ref) {\n        const refPath = schema.$ref;\n        if (ctx.refs.has(refPath)) {\n            return ctx.refs.get(refPath);\n        }\n        if (ctx.processing.has(refPath)) {\n            // Circular reference - use lazy\n            return z.lazy(() => {\n                if (!ctx.refs.has(refPath)) {\n                    throw new Error(`Circular reference not resolved: ${refPath}`);\n                }\n                return ctx.refs.get(refPath);\n            });\n        }\n        ctx.processing.add(refPath);\n        const resolved = resolveRef(refPath, ctx);\n        const zodSchema = convertSchema(resolved, ctx);\n        ctx.refs.set(refPath, zodSchema);\n        ctx.processing.delete(refPath);\n        return zodSchema;\n    }\n    // Handle enum\n    if (schema.enum !== undefined) {\n        const enumValues = schema.enum;\n        // Special case: OpenAPI 3.0 null representation { type: \"string\", nullable: true, enum: [null] }\n        if (ctx.version === \"openapi-3.0\" &&\n            schema.nullable === true &&\n            enumValues.length === 1 &&\n            enumValues[0] === null) {\n            return z.null();\n        }\n        if (enumValues.length === 0) {\n            return z.never();\n        }\n        if (enumValues.length === 1) {\n            return z.literal(enumValues[0]);\n        }\n        // Check if all values are strings\n        if (enumValues.every((v) => typeof v === \"string\")) {\n            return z.enum(enumValues);\n        }\n        // Mixed types - use union of literals\n        const literalSchemas = enumValues.map((v) => z.literal(v));\n        if (literalSchemas.length < 2) {\n            return literalSchemas[0];\n        }\n        return z.union([literalSchemas[0], literalSchemas[1], ...literalSchemas.slice(2)]);\n    }\n    // Handle const\n    if (schema.const !== undefined) {\n        return z.literal(schema.const);\n    }\n    // Handle type\n    const type = schema.type;\n    if (Array.isArray(type)) {\n        // Expand type array into anyOf union\n        const typeSchemas = type.map((t) => {\n            const typeSchema = { ...schema, type: t };\n            return convertBaseSchema(typeSchema, ctx);\n        });\n        if (typeSchemas.length === 0) {\n            return z.never();\n        }\n        if (typeSchemas.length === 1) {\n            return typeSchemas[0];\n        }\n        return z.union(typeSchemas);\n    }\n    if (!type) {\n        // No type specified - empty schema (any)\n        return z.any();\n    }\n    let zodSchema;\n    switch (type) {\n        case \"string\": {\n            let stringSchema = z.string();\n            // Apply format using .check() with Zod format functions\n            if (schema.format) {\n                const format = schema.format;\n                // Map common formats to Zod check functions\n                if (format === \"email\") {\n                    stringSchema = stringSchema.check(z.email());\n                }\n                else if (format === \"uri\" || format === \"uri-reference\") {\n                    stringSchema = stringSchema.check(z.url());\n                }\n                else if (format === \"uuid\" || format === \"guid\") {\n                    stringSchema = stringSchema.check(z.uuid());\n                }\n                else if (format === \"date-time\") {\n                    stringSchema = stringSchema.check(z.iso.datetime());\n                }\n                else if (format === \"date\") {\n                    stringSchema = stringSchema.check(z.iso.date());\n                }\n                else if (format === \"time\") {\n                    stringSchema = stringSchema.check(z.iso.time());\n                }\n                else if (format === \"duration\") {\n                    stringSchema = stringSchema.check(z.iso.duration());\n                }\n                else if (format === \"ipv4\") {\n                    stringSchema = stringSchema.check(z.ipv4());\n                }\n                else if (format === \"ipv6\") {\n                    stringSchema = stringSchema.check(z.ipv6());\n                }\n                else if (format === \"mac\") {\n                    stringSchema = stringSchema.check(z.mac());\n                }\n                else if (format === \"cidr\") {\n                    stringSchema = stringSchema.check(z.cidrv4());\n                }\n                else if (format === \"cidr-v6\") {\n                    stringSchema = stringSchema.check(z.cidrv6());\n                }\n                else if (format === \"base64\") {\n                    stringSchema = stringSchema.check(z.base64());\n                }\n                else if (format === \"base64url\") {\n                    stringSchema = stringSchema.check(z.base64url());\n                }\n                else if (format === \"e164\") {\n                    stringSchema = stringSchema.check(z.e164());\n                }\n                else if (format === \"jwt\") {\n                    stringSchema = stringSchema.check(z.jwt());\n                }\n                else if (format === \"emoji\") {\n                    stringSchema = stringSchema.check(z.emoji());\n                }\n                else if (format === \"nanoid\") {\n                    stringSchema = stringSchema.check(z.nanoid());\n                }\n                else if (format === \"cuid\") {\n                    stringSchema = stringSchema.check(z.cuid());\n                }\n                else if (format === \"cuid2\") {\n                    stringSchema = stringSchema.check(z.cuid2());\n                }\n                else if (format === \"ulid\") {\n                    stringSchema = stringSchema.check(z.ulid());\n                }\n                else if (format === \"xid\") {\n                    stringSchema = stringSchema.check(z.xid());\n                }\n                else if (format === \"ksuid\") {\n                    stringSchema = stringSchema.check(z.ksuid());\n                }\n                // Note: json-string format is not currently supported by Zod\n                // Custom formats are ignored - keep as plain string\n            }\n            // Apply constraints\n            if (typeof schema.minLength === \"number\") {\n                stringSchema = stringSchema.min(schema.minLength);\n            }\n            if (typeof schema.maxLength === \"number\") {\n                stringSchema = stringSchema.max(schema.maxLength);\n            }\n            if (schema.pattern) {\n                // JSON Schema patterns are not implicitly anchored (match anywhere in string)\n                stringSchema = stringSchema.regex(new RegExp(schema.pattern));\n            }\n            zodSchema = stringSchema;\n            break;\n        }\n        case \"number\":\n        case \"integer\": {\n            let numberSchema = type === \"integer\" ? z.number().int() : z.number();\n            // Apply constraints\n            if (typeof schema.minimum === \"number\") {\n                numberSchema = numberSchema.min(schema.minimum);\n            }\n            if (typeof schema.maximum === \"number\") {\n                numberSchema = numberSchema.max(schema.maximum);\n            }\n            if (typeof schema.exclusiveMinimum === \"number\") {\n                numberSchema = numberSchema.gt(schema.exclusiveMinimum);\n            }\n            else if (schema.exclusiveMinimum === true && typeof schema.minimum === \"number\") {\n                numberSchema = numberSchema.gt(schema.minimum);\n            }\n            if (typeof schema.exclusiveMaximum === \"number\") {\n                numberSchema = numberSchema.lt(schema.exclusiveMaximum);\n            }\n            else if (schema.exclusiveMaximum === true && typeof schema.maximum === \"number\") {\n                numberSchema = numberSchema.lt(schema.maximum);\n            }\n            if (typeof schema.multipleOf === \"number\") {\n                numberSchema = numberSchema.multipleOf(schema.multipleOf);\n            }\n            zodSchema = numberSchema;\n            break;\n        }\n        case \"boolean\": {\n            zodSchema = z.boolean();\n            break;\n        }\n        case \"null\": {\n            zodSchema = z.null();\n            break;\n        }\n        case \"object\": {\n            const shape = {};\n            const properties = schema.properties || {};\n            const requiredSet = new Set(schema.required || []);\n            // Convert properties - mark optional ones\n            for (const [key, propSchema] of Object.entries(properties)) {\n                const propZodSchema = convertSchema(propSchema, ctx);\n                // If not in required array, make it optional\n                shape[key] = requiredSet.has(key) ? propZodSchema : propZodSchema.optional();\n            }\n            // Handle propertyNames\n            if (schema.propertyNames) {\n                const keySchema = convertSchema(schema.propertyNames, ctx);\n                const valueSchema = schema.additionalProperties && typeof schema.additionalProperties === \"object\"\n                    ? convertSchema(schema.additionalProperties, ctx)\n                    : z.any();\n                // Case A: No properties (pure record)\n                if (Object.keys(shape).length === 0) {\n                    zodSchema = z.record(keySchema, valueSchema);\n                    break;\n                }\n                // Case B: With properties (intersection of object and looseRecord)\n                const objectSchema = z.object(shape).passthrough();\n                const recordSchema = z.looseRecord(keySchema, valueSchema);\n                zodSchema = z.intersection(objectSchema, recordSchema);\n                break;\n            }\n            // Handle patternProperties\n            if (schema.patternProperties) {\n                // patternProperties: keys matching pattern must satisfy corresponding schema\n                // Use loose records so non-matching keys pass through\n                const patternProps = schema.patternProperties;\n                const patternKeys = Object.keys(patternProps);\n                const looseRecords = [];\n                for (const pattern of patternKeys) {\n                    const patternValue = convertSchema(patternProps[pattern], ctx);\n                    const keySchema = z.string().regex(new RegExp(pattern));\n                    looseRecords.push(z.looseRecord(keySchema, patternValue));\n                }\n                // Build intersection: object schema + all pattern property records\n                const schemasToIntersect = [];\n                if (Object.keys(shape).length > 0) {\n                    // Use passthrough so patternProperties can validate additional keys\n                    schemasToIntersect.push(z.object(shape).passthrough());\n                }\n                schemasToIntersect.push(...looseRecords);\n                if (schemasToIntersect.length === 0) {\n                    zodSchema = z.object({}).passthrough();\n                }\n                else if (schemasToIntersect.length === 1) {\n                    zodSchema = schemasToIntersect[0];\n                }\n                else {\n                    // Chain intersections: (A & B) & C & D ...\n                    let result = z.intersection(schemasToIntersect[0], schemasToIntersect[1]);\n                    for (let i = 2; i < schemasToIntersect.length; i++) {\n                        result = z.intersection(result, schemasToIntersect[i]);\n                    }\n                    zodSchema = result;\n                }\n                break;\n            }\n            // Handle additionalProperties\n            // In JSON Schema, additionalProperties defaults to true (allow any extra properties)\n            // In Zod, objects strip unknown keys by default, so we need to handle this explicitly\n            const objectSchema = z.object(shape);\n            if (schema.additionalProperties === false) {\n                // Strict mode - no extra properties allowed\n                zodSchema = objectSchema.strict();\n            }\n            else if (typeof schema.additionalProperties === \"object\") {\n                // Extra properties must match the specified schema\n                zodSchema = objectSchema.catchall(convertSchema(schema.additionalProperties, ctx));\n            }\n            else {\n                // additionalProperties is true or undefined - allow any extra properties (passthrough)\n                zodSchema = objectSchema.passthrough();\n            }\n            break;\n        }\n        case \"array\": {\n            // TODO: uniqueItems is not supported\n            // TODO: contains/minContains/maxContains are not supported\n            // Check if this is a tuple (prefixItems or items as array)\n            const prefixItems = schema.prefixItems;\n            const items = schema.items;\n            if (prefixItems && Array.isArray(prefixItems)) {\n                // Tuple with prefixItems (draft-2020-12)\n                const tupleItems = prefixItems.map((item) => convertSchema(item, ctx));\n                const rest = items && typeof items === \"object\" && !Array.isArray(items)\n                    ? convertSchema(items, ctx)\n                    : undefined;\n                if (rest) {\n                    zodSchema = z.tuple(tupleItems).rest(rest);\n                }\n                else {\n                    zodSchema = z.tuple(tupleItems);\n                }\n                // Apply minItems/maxItems constraints to tuples\n                if (typeof schema.minItems === \"number\") {\n                    zodSchema = zodSchema.check(z.minLength(schema.minItems));\n                }\n                if (typeof schema.maxItems === \"number\") {\n                    zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n                }\n            }\n            else if (Array.isArray(items)) {\n                // Tuple with items array (draft-7)\n                const tupleItems = items.map((item) => convertSchema(item, ctx));\n                const rest = schema.additionalItems && typeof schema.additionalItems === \"object\"\n                    ? convertSchema(schema.additionalItems, ctx)\n                    : undefined; // additionalItems: false means no rest, handled by default tuple behavior\n                if (rest) {\n                    zodSchema = z.tuple(tupleItems).rest(rest);\n                }\n                else {\n                    zodSchema = z.tuple(tupleItems);\n                }\n                // Apply minItems/maxItems constraints to tuples\n                if (typeof schema.minItems === \"number\") {\n                    zodSchema = zodSchema.check(z.minLength(schema.minItems));\n                }\n                if (typeof schema.maxItems === \"number\") {\n                    zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n                }\n            }\n            else if (items !== undefined) {\n                // Regular array\n                const element = convertSchema(items, ctx);\n                let arraySchema = z.array(element);\n                // Apply constraints\n                if (typeof schema.minItems === \"number\") {\n                    arraySchema = arraySchema.min(schema.minItems);\n                }\n                if (typeof schema.maxItems === \"number\") {\n                    arraySchema = arraySchema.max(schema.maxItems);\n                }\n                zodSchema = arraySchema;\n            }\n            else {\n                // No items specified - array of any\n                zodSchema = z.array(z.any());\n            }\n            break;\n        }\n        default:\n            throw new Error(`Unsupported type: ${type}`);\n    }\n    return zodSchema;\n}\nfunction convertSchema(schema, ctx) {\n    if (typeof schema === \"boolean\") {\n        return schema ? z.any() : z.never();\n    }\n    // Convert base schema first (ignoring composition keywords)\n    let baseSchema = convertBaseSchema(schema, ctx);\n    const hasExplicitType = schema.type || schema.enum !== undefined || schema.const !== undefined;\n    // Process composition keywords LAST (they can appear together)\n    // Handle anyOf - wrap base schema with union\n    if (schema.anyOf && Array.isArray(schema.anyOf)) {\n        const options = schema.anyOf.map((s) => convertSchema(s, ctx));\n        const anyOfUnion = z.union(options);\n        baseSchema = hasExplicitType ? z.intersection(baseSchema, anyOfUnion) : anyOfUnion;\n    }\n    // Handle oneOf - exclusive union (exactly one must match)\n    if (schema.oneOf && Array.isArray(schema.oneOf)) {\n        const options = schema.oneOf.map((s) => convertSchema(s, ctx));\n        const oneOfUnion = z.xor(options);\n        baseSchema = hasExplicitType ? z.intersection(baseSchema, oneOfUnion) : oneOfUnion;\n    }\n    // Handle allOf - wrap base schema with intersection\n    if (schema.allOf && Array.isArray(schema.allOf)) {\n        if (schema.allOf.length === 0) {\n            baseSchema = hasExplicitType ? baseSchema : z.any();\n        }\n        else {\n            let result = hasExplicitType ? baseSchema : convertSchema(schema.allOf[0], ctx);\n            const startIdx = hasExplicitType ? 0 : 1;\n            for (let i = startIdx; i < schema.allOf.length; i++) {\n                result = z.intersection(result, convertSchema(schema.allOf[i], ctx));\n            }\n            baseSchema = result;\n        }\n    }\n    // Handle nullable (OpenAPI 3.0)\n    if (schema.nullable === true && ctx.version === \"openapi-3.0\") {\n        baseSchema = z.nullable(baseSchema);\n    }\n    // Handle readOnly\n    if (schema.readOnly === true) {\n        baseSchema = z.readonly(baseSchema);\n    }\n    // Apply `default` so it wraps the fully-composed schema. This ensures\n    // `parse(undefined) -> default` works regardless of which branch of\n    // `convertBaseSchema` produced the inner schema (enum/const/not/typed/etc.).\n    if (schema.default !== undefined) {\n        baseSchema = baseSchema.default(schema.default);\n    }\n    // Collect non-description annotation metadata into the user-supplied\n    // registry. Description is handled separately below via `.describe()` to\n    // preserve the contract that `schema.description` reads from globalRegistry.\n    const extraMeta = {};\n    const coreMetadataKeys = [\"$id\", \"id\", \"$comment\", \"$anchor\", \"$vocabulary\", \"$dynamicRef\", \"$dynamicAnchor\"];\n    for (const key of coreMetadataKeys) {\n        if (key in schema) {\n            extraMeta[key] = schema[key];\n        }\n    }\n    const contentMetadataKeys = [\"contentEncoding\", \"contentMediaType\", \"contentSchema\"];\n    for (const key of contentMetadataKeys) {\n        if (key in schema) {\n            extraMeta[key] = schema[key];\n        }\n    }\n    for (const key of Object.keys(schema)) {\n        if (!RECOGNIZED_KEYS.has(key)) {\n            extraMeta[key] = schema[key];\n        }\n    }\n    if (Object.keys(extraMeta).length > 0) {\n        ctx.registry.add(baseSchema, extraMeta);\n    }\n    // Apply description last. `.describe()` clones the schema and sets\n    // `_zod.parent` on the clone, so registry lookups on the returned reference\n    // still resolve `extraMeta` via parent inheritance.\n    if (schema.description) {\n        baseSchema = baseSchema.describe(schema.description);\n    }\n    return baseSchema;\n}\n/**\n * Converts a JSON Schema to a Zod schema. This function should be considered semi-experimental. It's behavior is liable to change. */\nexport function fromJSONSchema(schema, params) {\n    // Handle boolean schemas\n    if (typeof schema === \"boolean\") {\n        return schema ? z.any() : z.never();\n    }\n    // Normalize input via a JSON round-trip. This guarantees the converter\n    // walks a plain, finite, JSON-valid object graph: cyclic inputs fail here,\n    // getter/Proxy-based properties are materialized into static values, and\n    // class instances collapse to plain objects.\n    let normalized;\n    try {\n        normalized = JSON.parse(JSON.stringify(schema));\n    }\n    catch {\n        throw new Error(\"fromJSONSchema input is not valid JSON (possibly cyclic); use $defs/$ref for recursive schemas\");\n    }\n    const version = detectVersion(normalized, params?.defaultTarget);\n    const defs = (normalized.$defs || normalized.definitions || {});\n    const ctx = {\n        version,\n        defs,\n        refs: new Map(),\n        processing: new Set(),\n        rootSchema: normalized,\n        registry: params?.registry ?? globalRegistry,\n    };\n    return convertSchema(normalized, ctx);\n}\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport function string(params) {\n    return core._coercedString(schemas.ZodString, params);\n}\nexport function number(params) {\n    return core._coercedNumber(schemas.ZodNumber, params);\n}\nexport function boolean(params) {\n    return core._coercedBoolean(schemas.ZodBoolean, params);\n}\nexport function bigint(params) {\n    return core._coercedBigint(schemas.ZodBigInt, params);\n}\nexport function date(params) {\n    return core._coercedDate(schemas.ZodDate, params);\n}\n","export * as core from \"../core/index.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./errors.js\";\nexport * from \"./parse.js\";\nexport * from \"./compat.js\";\n// zod-specified\nimport { config } from \"../core/index.js\";\nimport en from \"../locales/en.js\";\nconfig(en());\nexport { globalRegistry, registry, config, $output, $input, $brand, clone, regexes, treeifyError, prettifyError, formatError, flattenError, TimePrecision, util, NEVER, } from \"../core/index.js\";\nexport { toJSONSchema } from \"../core/json-schema-processors.js\";\nexport { fromJSONSchema } from \"./from-json-schema.js\";\nexport * as locales from \"../locales/index.js\";\n// iso\n// must be exported from top-level\n// https://github.com/colinhacks/zod/issues/4491\nexport { ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration } from \"./iso.js\";\nexport * as iso from \"./iso.js\";\nexport * as coerce from \"./coerce.js\";\n","import * as z from \"./v4/classic/external.js\";\nexport * from \"./v4/classic/external.js\";\nexport { z };\nexport default z;\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport const LAUNCHD_LABEL = \"com.ronen.threadbase\";\nexport const TASK_NAME = process.env.THREADBASE_TASK_NAME ?? \"Threadbase\";\nexport const DEFAULT_PROD_PORT = 8766;\n\nexport function installDir(): string {\n  return process.env.THREADBASE_INSTALL_DIR ?? join(homedir(), \".threadbase\");\n}\n\nexport function markerPath(): string {\n  return join(installDir(), \"prod-suspended.json\");\n}\n\nexport function prefsPath(): string {\n  return join(installDir(), \"dev-prefs.json\");\n}\n\nexport function activeLink(): string {\n  return join(installDir(), \"cli.js\");\n}\n","'use strict'\n\n// **************************************************************\n// * Code initially copied/adapted from \"pony-cause\" npm module *\n// * Please upstream improvements there                         *\n// **************************************************************\n\nconst isErrorLike = (err) => {\n  return err && typeof err.message === 'string'\n}\n\n/**\n * @param {Error|{ cause?: unknown|(()=>err)}} err\n * @returns {Error|Object|undefined}\n */\nconst getErrorCause = (err) => {\n  if (!err) return\n\n  /** @type {unknown} */\n  // @ts-ignore\n  const cause = err.cause\n\n  // VError / NError style causes\n  if (typeof cause === 'function') {\n    // @ts-ignore\n    const causeResult = err.cause()\n\n    return isErrorLike(causeResult)\n      ? causeResult\n      : undefined\n  } else {\n    return isErrorLike(cause)\n      ? cause\n      : undefined\n  }\n}\n\n/**\n * Internal method that keeps a track of which error we have already added, to avoid circular recursion\n *\n * @private\n * @param {Error} err\n * @param {Set<Error>} seen\n * @returns {string}\n */\nconst _stackWithCauses = (err, seen) => {\n  if (!isErrorLike(err)) return ''\n\n  const stack = err.stack || ''\n\n  // Ensure we don't go circular or crazily deep\n  if (seen.has(err)) {\n    return stack + '\\ncauses have become circular...'\n  }\n\n  const cause = getErrorCause(err)\n\n  if (cause) {\n    seen.add(err)\n    return (stack + '\\ncaused by: ' + _stackWithCauses(cause, seen))\n  } else {\n    return stack\n  }\n}\n\n/**\n * @param {Error} err\n * @returns {string}\n */\nconst stackWithCauses = (err) => _stackWithCauses(err, new Set())\n\n/**\n * Internal method that keeps a track of which error we have already added, to avoid circular recursion\n *\n * @private\n * @param {Error} err\n * @param {Set<Error>} seen\n * @param {boolean} [skip]\n * @returns {string}\n */\nconst _messageWithCauses = (err, seen, skip) => {\n  if (!isErrorLike(err)) return ''\n\n  const message = skip ? '' : (err.message || '')\n\n  // Ensure we don't go circular or crazily deep\n  if (seen.has(err)) {\n    return message + ': ...'\n  }\n\n  const cause = getErrorCause(err)\n\n  if (cause) {\n    seen.add(err)\n\n    // @ts-ignore\n    const skipIfVErrorStyleCause = typeof err.cause === 'function'\n\n    return (message +\n      (skipIfVErrorStyleCause ? '' : ': ') +\n      _messageWithCauses(cause, seen, skipIfVErrorStyleCause))\n  } else {\n    return message\n  }\n}\n\n/**\n * @param {Error} err\n * @returns {string}\n */\nconst messageWithCauses = (err) => _messageWithCauses(err, new Set())\n\nmodule.exports = {\n  isErrorLike,\n  getErrorCause,\n  stackWithCauses,\n  messageWithCauses\n}\n","'use strict'\n\nconst seen = Symbol('circular-ref-tag')\nconst rawSymbol = Symbol('pino-raw-err-ref')\n\nconst pinoErrProto = Object.create({}, {\n  type: {\n    enumerable: true,\n    writable: true,\n    value: undefined\n  },\n  message: {\n    enumerable: true,\n    writable: true,\n    value: undefined\n  },\n  stack: {\n    enumerable: true,\n    writable: true,\n    value: undefined\n  },\n  aggregateErrors: {\n    enumerable: true,\n    writable: true,\n    value: undefined\n  },\n  raw: {\n    enumerable: false,\n    get: function () {\n      return this[rawSymbol]\n    },\n    set: function (val) {\n      this[rawSymbol] = val\n    }\n  }\n})\nObject.defineProperty(pinoErrProto, rawSymbol, {\n  writable: true,\n  value: {}\n})\n\nmodule.exports = {\n  pinoErrProto,\n  pinoErrorSymbols: {\n    seen,\n    rawSymbol\n  }\n}\n","'use strict'\n\nmodule.exports = errSerializer\n\nconst { messageWithCauses, stackWithCauses, isErrorLike } = require('./err-helpers')\nconst { pinoErrProto, pinoErrorSymbols } = require('./err-proto')\nconst { seen } = pinoErrorSymbols\n\nconst { toString } = Object.prototype\n\nfunction errSerializer (err) {\n  if (!isErrorLike(err)) {\n    return err\n  }\n\n  err[seen] = undefined // tag to prevent re-looking at this\n  const _err = Object.create(pinoErrProto)\n  _err.type = toString.call(err.constructor) === '[object Function]'\n    ? err.constructor.name\n    : err.name\n  _err.message = messageWithCauses(err)\n  _err.stack = stackWithCauses(err)\n\n  if (Array.isArray(err.errors)) {\n    _err.aggregateErrors = err.errors.map(err => errSerializer(err))\n  }\n\n  for (const key in err) {\n    if (_err[key] === undefined) {\n      const val = err[key]\n      if (isErrorLike(val)) {\n        // We append cause messages and stacks to _err, therefore skipping causes here\n        if (key !== 'cause' && !Object.prototype.hasOwnProperty.call(val, seen)) {\n          _err[key] = errSerializer(val)\n        }\n      } else {\n        _err[key] = val\n      }\n    }\n  }\n\n  delete err[seen] // clean up tag in case err is serialized again later\n  _err.raw = err\n  return _err\n}\n","'use strict'\n\nmodule.exports = errWithCauseSerializer\n\nconst { isErrorLike } = require('./err-helpers')\nconst { pinoErrProto, pinoErrorSymbols } = require('./err-proto')\nconst { seen } = pinoErrorSymbols\n\nconst { toString } = Object.prototype\n\nfunction errWithCauseSerializer (err) {\n  if (!isErrorLike(err)) {\n    return err\n  }\n\n  err[seen] = undefined // tag to prevent re-looking at this\n  const _err = Object.create(pinoErrProto)\n  _err.type = toString.call(err.constructor) === '[object Function]'\n    ? err.constructor.name\n    : err.name\n  _err.message = err.message\n  _err.stack = err.stack\n\n  if (Array.isArray(err.errors)) {\n    _err.aggregateErrors = err.errors.map(err => errWithCauseSerializer(err))\n  }\n\n  if (isErrorLike(err.cause) && !Object.prototype.hasOwnProperty.call(err.cause, seen)) {\n    _err.cause = errWithCauseSerializer(err.cause)\n  }\n\n  for (const key in err) {\n    if (_err[key] === undefined) {\n      const val = err[key]\n      if (isErrorLike(val)) {\n        if (!Object.prototype.hasOwnProperty.call(val, seen)) {\n          _err[key] = errWithCauseSerializer(val)\n        }\n      } else {\n        _err[key] = val\n      }\n    }\n  }\n\n  delete err[seen] // clean up tag in case err is serialized again later\n  _err.raw = err\n  return _err\n}\n","'use strict'\n\nmodule.exports = {\n  mapHttpRequest,\n  reqSerializer\n}\n\nconst rawSymbol = Symbol('pino-raw-req-ref')\nconst pinoReqProto = Object.create({}, {\n  id: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  method: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  url: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  query: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  params: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  headers: {\n    enumerable: true,\n    writable: true,\n    value: {}\n  },\n  remoteAddress: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  remotePort: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  raw: {\n    enumerable: false,\n    get: function () {\n      return this[rawSymbol]\n    },\n    set: function (val) {\n      this[rawSymbol] = val\n    }\n  }\n})\nObject.defineProperty(pinoReqProto, rawSymbol, {\n  writable: true,\n  value: {}\n})\n\nfunction reqSerializer (req) {\n  // req.info is for hapi compat.\n  const connection = req.info || req.socket\n  const _req = Object.create(pinoReqProto)\n  _req.id = (typeof req.id === 'function' ? req.id() : (req.id || (req.info ? req.info.id : undefined)))\n  _req.method = req.method\n  // req.originalUrl is for expressjs compat.\n  if (req.originalUrl) {\n    _req.url = req.originalUrl\n  } else {\n    const path = req.path\n    // path for safe hapi compat.\n    _req.url = typeof path === 'string' ? path : (req.url ? req.url.path || req.url : undefined)\n  }\n\n  if (req.query) {\n    _req.query = req.query\n  }\n\n  if (req.params) {\n    _req.params = req.params\n  }\n\n  _req.headers = req.headers\n  _req.remoteAddress = connection && connection.remoteAddress\n  _req.remotePort = connection && connection.remotePort\n  // req.raw is  for hapi compat/equivalence\n  _req.raw = req.raw || req\n  return _req\n}\n\nfunction mapHttpRequest (req) {\n  return {\n    req: reqSerializer(req)\n  }\n}\n","'use strict'\n\nmodule.exports = {\n  mapHttpResponse,\n  resSerializer\n}\n\nconst rawSymbol = Symbol('pino-raw-res-ref')\nconst pinoResProto = Object.create({}, {\n  statusCode: {\n    enumerable: true,\n    writable: true,\n    value: 0\n  },\n  headers: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  raw: {\n    enumerable: false,\n    get: function () {\n      return this[rawSymbol]\n    },\n    set: function (val) {\n      this[rawSymbol] = val\n    }\n  }\n})\nObject.defineProperty(pinoResProto, rawSymbol, {\n  writable: true,\n  value: {}\n})\n\nfunction resSerializer (res) {\n  const _res = Object.create(pinoResProto)\n  _res.statusCode = res.headersSent ? res.statusCode : null\n  _res.headers = res.getHeaders ? res.getHeaders() : res._headers\n  _res.raw = res\n  return _res\n}\n\nfunction mapHttpResponse (res) {\n  return {\n    res: resSerializer(res)\n  }\n}\n","'use strict'\n\nconst errSerializer = require('./lib/err')\nconst errWithCauseSerializer = require('./lib/err-with-cause')\nconst reqSerializers = require('./lib/req')\nconst resSerializers = require('./lib/res')\n\nmodule.exports = {\n  err: errSerializer,\n  errWithCause: errWithCauseSerializer,\n  mapHttpRequest: reqSerializers.mapHttpRequest,\n  mapHttpResponse: resSerializers.mapHttpResponse,\n  req: reqSerializers.reqSerializer,\n  res: resSerializers.resSerializer,\n\n  wrapErrorSerializer: function wrapErrorSerializer (customSerializer) {\n    if (customSerializer === errSerializer) return customSerializer\n    return function wrapErrSerializer (err) {\n      return customSerializer(errSerializer(err))\n    }\n  },\n\n  wrapRequestSerializer: function wrapRequestSerializer (customSerializer) {\n    if (customSerializer === reqSerializers.reqSerializer) return customSerializer\n    return function wrappedReqSerializer (req) {\n      return customSerializer(reqSerializers.reqSerializer(req))\n    }\n  },\n\n  wrapResponseSerializer: function wrapResponseSerializer (customSerializer) {\n    if (customSerializer === resSerializers.resSerializer) return customSerializer\n    return function wrappedResSerializer (res) {\n      return customSerializer(resSerializers.resSerializer(res))\n    }\n  }\n}\n","'use strict'\n\nfunction noOpPrepareStackTrace (_, stack) {\n  return stack\n}\n\nmodule.exports = function getCallers () {\n  const originalPrepare = Error.prepareStackTrace\n  Error.prepareStackTrace = noOpPrepareStackTrace\n  const stack = new Error().stack\n  Error.prepareStackTrace = originalPrepare\n\n  if (!Array.isArray(stack)) {\n    return undefined\n  }\n\n  const entries = stack.slice(2)\n\n  const fileNames = []\n\n  for (const entry of entries) {\n    if (!entry) {\n      continue\n    }\n\n    fileNames.push(entry.getFileName())\n  }\n\n  return fileNames\n}\n","'use strict'\n\nfunction deepClone (obj) {\n  if (obj === null || typeof obj !== 'object') {\n    return obj\n  }\n\n  if (obj instanceof Date) {\n    return new Date(obj.getTime())\n  }\n\n  if (obj instanceof Array) {\n    const cloned = []\n    for (let i = 0; i < obj.length; i++) {\n      cloned[i] = deepClone(obj[i])\n    }\n    return cloned\n  }\n\n  if (typeof obj === 'object') {\n    const cloned = Object.create(Object.getPrototypeOf(obj))\n    for (const key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        cloned[key] = deepClone(obj[key])\n      }\n    }\n    return cloned\n  }\n\n  return obj\n}\n\nfunction parsePath (path) {\n  const parts = []\n  let current = ''\n  let inBrackets = false\n  let inQuotes = false\n  let quoteChar = ''\n\n  for (let i = 0; i < path.length; i++) {\n    const char = path[i]\n\n    if (!inBrackets && char === '.') {\n      if (current) {\n        parts.push(current)\n        current = ''\n      }\n    } else if (char === '[') {\n      if (current) {\n        parts.push(current)\n        current = ''\n      }\n      inBrackets = true\n    } else if (char === ']' && inBrackets) {\n      // Always push the current value when closing brackets, even if it's an empty string\n      parts.push(current)\n      current = ''\n      inBrackets = false\n      inQuotes = false\n    } else if ((char === '\"' || char === \"'\") && inBrackets) {\n      if (!inQuotes) {\n        inQuotes = true\n        quoteChar = char\n      } else if (char === quoteChar) {\n        inQuotes = false\n        quoteChar = ''\n      } else {\n        current += char\n      }\n    } else {\n      current += char\n    }\n  }\n\n  if (current) {\n    parts.push(current)\n  }\n\n  return parts\n}\n\nfunction setValue (obj, parts, value) {\n  let current = obj\n\n  for (let i = 0; i < parts.length - 1; i++) {\n    const key = parts[i]\n    // Type safety: Check if current is an object before using 'in' operator\n    if (typeof current !== 'object' || current === null || !(key in current)) {\n      return false // Path doesn't exist, don't create it\n    }\n    if (typeof current[key] !== 'object' || current[key] === null) {\n      return false // Path doesn't exist properly\n    }\n    current = current[key]\n  }\n\n  const lastKey = parts[parts.length - 1]\n  if (lastKey === '*') {\n    if (Array.isArray(current)) {\n      for (let i = 0; i < current.length; i++) {\n        current[i] = value\n      }\n    } else if (typeof current === 'object' && current !== null) {\n      for (const key in current) {\n        if (Object.prototype.hasOwnProperty.call(current, key)) {\n          current[key] = value\n        }\n      }\n    }\n  } else {\n    // Type safety: Check if current is an object before using 'in' operator\n    if (typeof current === 'object' && current !== null && lastKey in current && Object.prototype.hasOwnProperty.call(current, lastKey)) {\n      current[lastKey] = value\n    }\n  }\n  return true\n}\n\nfunction removeKey (obj, parts) {\n  let current = obj\n\n  for (let i = 0; i < parts.length - 1; i++) {\n    const key = parts[i]\n    // Type safety: Check if current is an object before using 'in' operator\n    if (typeof current !== 'object' || current === null || !(key in current)) {\n      return false // Path doesn't exist, don't create it\n    }\n    if (typeof current[key] !== 'object' || current[key] === null) {\n      return false // Path doesn't exist properly\n    }\n    current = current[key]\n  }\n\n  const lastKey = parts[parts.length - 1]\n  if (lastKey === '*') {\n    if (Array.isArray(current)) {\n      // For arrays, we can't really \"remove\" all items as that would change indices\n      // Instead, we set them to undefined which will be omitted by JSON.stringify\n      for (let i = 0; i < current.length; i++) {\n        current[i] = undefined\n      }\n    } else if (typeof current === 'object' && current !== null) {\n      for (const key in current) {\n        if (Object.prototype.hasOwnProperty.call(current, key)) {\n          delete current[key]\n        }\n      }\n    }\n  } else {\n    // Type safety: Check if current is an object before using 'in' operator\n    if (typeof current === 'object' && current !== null && lastKey in current && Object.prototype.hasOwnProperty.call(current, lastKey)) {\n      delete current[lastKey]\n    }\n  }\n  return true\n}\n\n// Sentinel object to distinguish between undefined value and non-existent path\nconst PATH_NOT_FOUND = Symbol('PATH_NOT_FOUND')\n\nfunction getValueIfExists (obj, parts) {\n  let current = obj\n\n  for (const part of parts) {\n    if (current === null || current === undefined) {\n      return PATH_NOT_FOUND\n    }\n    // Type safety: Check if current is an object before property access\n    if (typeof current !== 'object' || current === null) {\n      return PATH_NOT_FOUND\n    }\n    // Check if the property exists before accessing it\n    if (!(part in current)) {\n      return PATH_NOT_FOUND\n    }\n    current = current[part]\n  }\n\n  return current\n}\n\nfunction getValue (obj, parts) {\n  let current = obj\n\n  for (const part of parts) {\n    if (current === null || current === undefined) {\n      return undefined\n    }\n    // Type safety: Check if current is an object before property access\n    if (typeof current !== 'object' || current === null) {\n      return undefined\n    }\n    current = current[part]\n  }\n\n  return current\n}\n\nfunction redactPaths (obj, paths, censor, remove = false) {\n  for (const path of paths) {\n    const parts = parsePath(path)\n\n    if (parts.includes('*')) {\n      redactWildcardPath(obj, parts, censor, path, remove)\n    } else {\n      if (remove) {\n        removeKey(obj, parts)\n      } else {\n        // Get value only if path exists - single traversal\n        const value = getValueIfExists(obj, parts)\n        if (value === PATH_NOT_FOUND) {\n          continue\n        }\n\n        const actualCensor = typeof censor === 'function'\n          ? censor(value, parts)\n          : censor\n        setValue(obj, parts, actualCensor)\n      }\n    }\n  }\n}\n\nfunction redactWildcardPath (obj, parts, censor, originalPath, remove = false) {\n  const wildcardIndex = parts.indexOf('*')\n\n  if (wildcardIndex === parts.length - 1) {\n    const parentParts = parts.slice(0, -1)\n    let current = obj\n\n    for (const part of parentParts) {\n      if (current === null || current === undefined) return\n      // Type safety: Check if current is an object before property access\n      if (typeof current !== 'object' || current === null) return\n      current = current[part]\n    }\n\n    if (Array.isArray(current)) {\n      if (remove) {\n        // For arrays, set all items to undefined which will be omitted by JSON.stringify\n        for (let i = 0; i < current.length; i++) {\n          current[i] = undefined\n        }\n      } else {\n        for (let i = 0; i < current.length; i++) {\n          const indexPath = [...parentParts, i.toString()]\n          const actualCensor = typeof censor === 'function'\n            ? censor(current[i], indexPath)\n            : censor\n          current[i] = actualCensor\n        }\n      }\n    } else if (typeof current === 'object' && current !== null) {\n      if (remove) {\n        // Collect keys to delete to avoid issues with deleting during iteration\n        const keysToDelete = []\n        for (const key in current) {\n          if (Object.prototype.hasOwnProperty.call(current, key)) {\n            keysToDelete.push(key)\n          }\n        }\n        for (const key of keysToDelete) {\n          delete current[key]\n        }\n      } else {\n        for (const key in current) {\n          const keyPath = [...parentParts, key]\n          const actualCensor = typeof censor === 'function'\n            ? censor(current[key], keyPath)\n            : censor\n          current[key] = actualCensor\n        }\n      }\n    }\n  } else {\n    redactIntermediateWildcard(obj, parts, censor, wildcardIndex, originalPath, remove)\n  }\n}\n\nfunction redactIntermediateWildcard (obj, parts, censor, wildcardIndex, originalPath, remove = false) {\n  const beforeWildcard = parts.slice(0, wildcardIndex)\n  const afterWildcard = parts.slice(wildcardIndex + 1)\n  const pathArray = [] // Cached array to avoid allocations\n\n  function traverse (current, pathLength) {\n    if (pathLength === beforeWildcard.length) {\n      if (Array.isArray(current)) {\n        for (let i = 0; i < current.length; i++) {\n          pathArray[pathLength] = i.toString()\n          traverse(current[i], pathLength + 1)\n        }\n      } else if (typeof current === 'object' && current !== null) {\n        for (const key in current) {\n          pathArray[pathLength] = key\n          traverse(current[key], pathLength + 1)\n        }\n      }\n    } else if (pathLength < beforeWildcard.length) {\n      const nextKey = beforeWildcard[pathLength]\n      // Type safety: Check if current is an object before using 'in' operator\n      if (current && typeof current === 'object' && current !== null && nextKey in current) {\n        pathArray[pathLength] = nextKey\n        traverse(current[nextKey], pathLength + 1)\n      }\n    } else {\n      // Check if afterWildcard contains more wildcards\n      if (afterWildcard.includes('*')) {\n        // Recursively handle remaining wildcards\n        // Wrap censor to prepend current path context\n        const wrappedCensor = typeof censor === 'function'\n          ? (value, path) => {\n              const fullPath = [...pathArray.slice(0, pathLength), ...path]\n              return censor(value, fullPath)\n            }\n          : censor\n        redactWildcardPath(current, afterWildcard, wrappedCensor, originalPath, remove)\n      } else {\n        // No more wildcards, apply the redaction directly\n        if (remove) {\n          removeKey(current, afterWildcard)\n        } else {\n          const actualCensor = typeof censor === 'function'\n            ? censor(getValue(current, afterWildcard), [...pathArray.slice(0, pathLength), ...afterWildcard])\n            : censor\n          setValue(current, afterWildcard, actualCensor)\n        }\n      }\n    }\n  }\n\n  if (beforeWildcard.length === 0) {\n    traverse(obj, 0)\n  } else {\n    let current = obj\n    for (let i = 0; i < beforeWildcard.length; i++) {\n      const part = beforeWildcard[i]\n      if (current === null || current === undefined) return\n      // Type safety: Check if current is an object before property access\n      if (typeof current !== 'object' || current === null) return\n      current = current[part]\n      pathArray[i] = part\n    }\n    if (current !== null && current !== undefined) {\n      traverse(current, beforeWildcard.length)\n    }\n  }\n}\n\nfunction buildPathStructure (pathsToClone) {\n  if (pathsToClone.length === 0) {\n    return null // No paths to redact\n  }\n\n  // Parse all paths and organize by depth\n  const pathStructure = new Map()\n  for (const path of pathsToClone) {\n    const parts = parsePath(path)\n    let current = pathStructure\n    for (let i = 0; i < parts.length; i++) {\n      const part = parts[i]\n      if (!current.has(part)) {\n        current.set(part, new Map())\n      }\n      current = current.get(part)\n    }\n  }\n  return pathStructure\n}\n\nfunction selectiveClone (obj, pathStructure) {\n  if (!pathStructure) {\n    return obj // No paths to redact, return original\n  }\n\n  function cloneSelectively (source, pathMap, depth = 0) {\n    if (!pathMap || pathMap.size === 0) {\n      return source // No more paths to clone, return reference\n    }\n\n    if (source === null || typeof source !== 'object') {\n      return source\n    }\n\n    if (source instanceof Date) {\n      return new Date(source.getTime())\n    }\n\n    if (Array.isArray(source)) {\n      const cloned = []\n      for (let i = 0; i < source.length; i++) {\n        const indexStr = i.toString()\n        if (pathMap.has(indexStr) || pathMap.has('*')) {\n          cloned[i] = cloneSelectively(source[i], pathMap.get(indexStr) || pathMap.get('*'))\n        } else {\n          cloned[i] = source[i] // Share reference for non-redacted items\n        }\n      }\n      return cloned\n    }\n\n    // Handle objects\n    const cloned = Object.create(Object.getPrototypeOf(source))\n    for (const key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        if (pathMap.has(key) || pathMap.has('*')) {\n          cloned[key] = cloneSelectively(source[key], pathMap.get(key) || pathMap.get('*'))\n        } else {\n          cloned[key] = source[key] // Share reference for non-redacted properties\n        }\n      }\n    }\n    return cloned\n  }\n\n  return cloneSelectively(obj, pathStructure)\n}\n\nfunction validatePath (path) {\n  if (typeof path !== 'string') {\n    throw new Error('Paths must be (non-empty) strings')\n  }\n\n  if (path === '') {\n    throw new Error('Invalid redaction path ()')\n  }\n\n  // Check for double dots\n  if (path.includes('..')) {\n    throw new Error(`Invalid redaction path (${path})`)\n  }\n\n  // Check for comma-separated paths (invalid syntax)\n  if (path.includes(',')) {\n    throw new Error(`Invalid redaction path (${path})`)\n  }\n\n  // Check for unmatched brackets\n  let bracketCount = 0\n  let inQuotes = false\n  let quoteChar = ''\n\n  for (let i = 0; i < path.length; i++) {\n    const char = path[i]\n\n    if ((char === '\"' || char === \"'\") && bracketCount > 0) {\n      if (!inQuotes) {\n        inQuotes = true\n        quoteChar = char\n      } else if (char === quoteChar) {\n        inQuotes = false\n        quoteChar = ''\n      }\n    } else if (char === '[' && !inQuotes) {\n      bracketCount++\n    } else if (char === ']' && !inQuotes) {\n      bracketCount--\n      if (bracketCount < 0) {\n        throw new Error(`Invalid redaction path (${path})`)\n      }\n    }\n  }\n\n  if (bracketCount !== 0) {\n    throw new Error(`Invalid redaction path (${path})`)\n  }\n}\n\nfunction validatePaths (paths) {\n  if (!Array.isArray(paths)) {\n    throw new TypeError('paths must be an array')\n  }\n\n  for (const path of paths) {\n    validatePath(path)\n  }\n}\n\nfunction slowRedact (options = {}) {\n  const {\n    paths = [],\n    censor = '[REDACTED]',\n    serialize = JSON.stringify,\n    strict = true,\n    remove = false\n  } = options\n\n  // Validate paths upfront to match fast-redact behavior\n  validatePaths(paths)\n\n  // Build path structure once during setup, not on every call\n  const pathStructure = buildPathStructure(paths)\n\n  return function redact (obj) {\n    if (strict && (obj === null || typeof obj !== 'object')) {\n      if (obj === null || obj === undefined) {\n        return serialize ? serialize(obj) : obj\n      }\n      if (typeof obj !== 'object') {\n        return serialize ? serialize(obj) : obj\n      }\n    }\n\n    // Only clone paths that need redaction\n    const cloned = selectiveClone(obj, pathStructure)\n    const original = obj // Keep reference to original for restore\n\n    let actualCensor = censor\n    if (typeof censor === 'function') {\n      actualCensor = censor\n    }\n\n    redactPaths(cloned, paths, actualCensor, remove)\n\n    if (serialize === false) {\n      cloned.restore = function () {\n        return deepClone(original) // Full clone only when restore is called\n      }\n      return cloned\n    }\n\n    if (typeof serialize === 'function') {\n      return serialize(cloned)\n    }\n\n    return JSON.stringify(cloned)\n  }\n}\n\nmodule.exports = slowRedact\n","'use strict'\n\nconst setLevelSym = Symbol('pino.setLevel')\nconst getLevelSym = Symbol('pino.getLevel')\nconst levelValSym = Symbol('pino.levelVal')\nconst levelCompSym = Symbol('pino.levelComp')\nconst useLevelLabelsSym = Symbol('pino.useLevelLabels')\nconst useOnlyCustomLevelsSym = Symbol('pino.useOnlyCustomLevels')\nconst mixinSym = Symbol('pino.mixin')\n\nconst lsCacheSym = Symbol('pino.lsCache')\nconst chindingsSym = Symbol('pino.chindings')\n\nconst asJsonSym = Symbol('pino.asJson')\nconst writeSym = Symbol('pino.write')\nconst redactFmtSym = Symbol('pino.redactFmt')\n\nconst timeSym = Symbol('pino.time')\nconst timeSliceIndexSym = Symbol('pino.timeSliceIndex')\nconst streamSym = Symbol('pino.stream')\nconst stringifySym = Symbol('pino.stringify')\nconst stringifySafeSym = Symbol('pino.stringifySafe')\nconst stringifiersSym = Symbol('pino.stringifiers')\nconst endSym = Symbol('pino.end')\nconst formatOptsSym = Symbol('pino.formatOpts')\nconst messageKeySym = Symbol('pino.messageKey')\nconst errorKeySym = Symbol('pino.errorKey')\nconst nestedKeySym = Symbol('pino.nestedKey')\nconst nestedKeyStrSym = Symbol('pino.nestedKeyStr')\nconst mixinMergeStrategySym = Symbol('pino.mixinMergeStrategy')\nconst msgPrefixSym = Symbol('pino.msgPrefix')\n\nconst wildcardFirstSym = Symbol('pino.wildcardFirst')\n\n// public symbols, no need to use the same pino\n// version for these\nconst serializersSym = Symbol.for('pino.serializers')\nconst formattersSym = Symbol.for('pino.formatters')\nconst hooksSym = Symbol.for('pino.hooks')\nconst needsMetadataGsym = Symbol.for('pino.metadata')\n\nmodule.exports = {\n  setLevelSym,\n  getLevelSym,\n  levelValSym,\n  levelCompSym,\n  useLevelLabelsSym,\n  mixinSym,\n  lsCacheSym,\n  chindingsSym,\n  asJsonSym,\n  writeSym,\n  serializersSym,\n  redactFmtSym,\n  timeSym,\n  timeSliceIndexSym,\n  streamSym,\n  stringifySym,\n  stringifySafeSym,\n  stringifiersSym,\n  endSym,\n  formatOptsSym,\n  messageKeySym,\n  errorKeySym,\n  nestedKeySym,\n  wildcardFirstSym,\n  needsMetadataGsym,\n  useOnlyCustomLevelsSym,\n  formattersSym,\n  hooksSym,\n  nestedKeyStrSym,\n  mixinMergeStrategySym,\n  msgPrefixSym\n}\n","'use strict'\n\nconst Redact = require('@pinojs/redact')\nconst { redactFmtSym, wildcardFirstSym } = require('./symbols')\n\n// Custom rx regex equivalent to fast-redact's rx\nconst rx = /[^.[\\]]+|\\[([^[\\]]*?)\\]/g\n\nconst CENSOR = '[Redacted]'\nconst strict = false // TODO should this be configurable?\n\nfunction redaction (opts, serialize) {\n  const { paths, censor, remove } = handle(opts)\n\n  const shape = paths.reduce((o, str) => {\n    rx.lastIndex = 0\n    const first = rx.exec(str)\n    const next = rx.exec(str)\n\n    // ns is the top-level path segment, brackets + quoting removed.\n    let ns = first[1] !== undefined\n      ? first[1].replace(/^(?:\"|'|`)(.*)(?:\"|'|`)$/, '$1')\n      : first[0]\n\n    if (ns === '*') {\n      ns = wildcardFirstSym\n    }\n\n    // top level key:\n    if (next === null) {\n      o[ns] = null\n      return o\n    }\n\n    // path with at least two segments:\n    // if ns is already redacted at the top level, ignore lower level redactions\n    if (o[ns] === null) {\n      return o\n    }\n\n    const { index } = next\n    const nextPath = `${str.substr(index, str.length - 1)}`\n\n    o[ns] = o[ns] || []\n\n    // shape is a mix of paths beginning with literal values and wildcard\n    // paths [ \"a.b.c\", \"*.b.z\" ] should reduce to a shape of\n    // { \"a\": [ \"b.c\", \"b.z\" ], *: [ \"b.z\" ] }\n    // note: \"b.z\" is in both \"a\" and * arrays because \"a\" matches the wildcard.\n    // (* entry has wildcardFirstSym as key)\n    if (ns !== wildcardFirstSym && o[ns].length === 0) {\n      // first time ns's get all '*' redactions so far\n      o[ns].push(...(o[wildcardFirstSym] || []))\n    }\n\n    if (ns === wildcardFirstSym) {\n      // new * path gets added to all previously registered literal ns's.\n      Object.keys(o).forEach(function (k) {\n        if (o[k]) {\n          o[k].push(nextPath)\n        }\n      })\n    }\n\n    o[ns].push(nextPath)\n    return o\n  }, {})\n\n  // the redactor assigned to the format symbol key\n  // provides top level redaction for instances where\n  // an object is interpolated into the msg string\n  const result = {\n    [redactFmtSym]: Redact({ paths, censor, serialize, strict, remove })\n  }\n\n  const topCensor = (...args) => {\n    return typeof censor === 'function' ? serialize(censor(...args)) : serialize(censor)\n  }\n\n  return [...Object.keys(shape), ...Object.getOwnPropertySymbols(shape)].reduce((o, k) => {\n    // top level key:\n    if (shape[k] === null) {\n      o[k] = (value) => topCensor(value, [k])\n    } else {\n      const wrappedCensor = typeof censor === 'function'\n        ? (value, path) => {\n            return censor(value, [k, ...path])\n          }\n        : censor\n      o[k] = Redact({\n        paths: shape[k],\n        censor: wrappedCensor,\n        serialize,\n        strict,\n        remove\n      })\n    }\n    return o\n  }, result)\n}\n\nfunction handle (opts) {\n  if (Array.isArray(opts)) {\n    opts = { paths: opts, censor: CENSOR }\n    return opts\n  }\n  let { paths, censor = CENSOR, remove } = opts\n  if (Array.isArray(paths) === false) { throw Error('pino – redact must contain an array of strings') }\n  if (remove === true) censor = undefined\n\n  return { paths, censor, remove }\n}\n\nmodule.exports = redaction\n","'use strict'\n\nconst nullTime = () => ''\n\nconst epochTime = () => `,\"time\":${Date.now()}`\n\nconst unixTime = () => `,\"time\":${Math.round(Date.now() / 1000.0)}`\n\nconst isoTime = () => `,\"time\":\"${new Date(Date.now()).toISOString()}\"` // using Date.now() for testability\n\nconst NS_PER_MS = 1_000_000n\nconst NS_PER_SEC = 1_000_000_000n\n\nconst startWallTimeNs = BigInt(Date.now()) * NS_PER_MS\nconst startHrTime = process.hrtime.bigint()\n\nconst isoTimeNano = () => {\n  const elapsedNs = process.hrtime.bigint() - startHrTime\n  const currentTimeNs = startWallTimeNs + elapsedNs\n\n  const secondsSinceEpoch = currentTimeNs / NS_PER_SEC\n  const nanosWithinSecond = currentTimeNs % NS_PER_SEC\n\n  const msSinceEpoch = Number(secondsSinceEpoch * 1000n + nanosWithinSecond / 1_000_000n)\n  const date = new Date(msSinceEpoch)\n\n  const year = date.getUTCFullYear()\n  const month = (date.getUTCMonth() + 1).toString().padStart(2, '0')\n  const day = date.getUTCDate().toString().padStart(2, '0')\n  const hours = date.getUTCHours().toString().padStart(2, '0')\n  const minutes = date.getUTCMinutes().toString().padStart(2, '0')\n  const seconds = date.getUTCSeconds().toString().padStart(2, '0')\n\n  return `,\"time\":\"${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${nanosWithinSecond\n    .toString()\n    .padStart(9, '0')}Z\"`\n}\n\nmodule.exports = { nullTime, epochTime, unixTime, isoTime, isoTimeNano }\n","'use strict'\nfunction tryStringify (o) {\n  try { return JSON.stringify(o) } catch(e) { return '\"[Circular]\"' }\n}\n\nmodule.exports = format\n\nfunction format(f, args, opts) {\n  var ss = (opts && opts.stringify) || tryStringify\n  var offset = 1\n  if (typeof f === 'object' && f !== null) {\n    var len = args.length + offset\n    if (len === 1) return f\n    var objects = new Array(len)\n    objects[0] = ss(f)\n    for (var index = 1; index < len; index++) {\n      objects[index] = ss(args[index])\n    }\n    return objects.join(' ')\n  }\n  if (typeof f !== 'string') {\n    return f\n  }\n  var argLen = args.length\n  if (argLen === 0) return f\n  var str = ''\n  var a = 1 - offset\n  var lastPos = -1\n  var flen = (f && f.length) || 0\n  for (var i = 0; i < flen;) {\n    if (f.charCodeAt(i) === 37 && i + 1 < flen) {\n      lastPos = lastPos > -1 ? lastPos : 0\n      switch (f.charCodeAt(i + 1)) {\n        case 100: // 'd'\n        case 102: // 'f'\n          if (a >= argLen)\n            break\n          if (args[a] == null)  break\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          str += Number(args[a])\n          lastPos = i + 2\n          i++\n          break\n        case 105: // 'i'\n          if (a >= argLen)\n            break\n          if (args[a] == null)  break\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          str += Math.floor(Number(args[a]))\n          lastPos = i + 2\n          i++\n          break\n        case 79: // 'O'\n        case 111: // 'o'\n        case 106: // 'j'\n          if (a >= argLen)\n            break\n          if (args[a] === undefined) break\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          var type = typeof args[a]\n          if (type === 'string') {\n            str += '\\'' + args[a] + '\\''\n            lastPos = i + 2\n            i++\n            break\n          }\n          if (type === 'function') {\n            str += args[a].name || '<anonymous>'\n            lastPos = i + 2\n            i++\n            break\n          }\n          str += ss(args[a])\n          lastPos = i + 2\n          i++\n          break\n        case 115: // 's'\n          if (a >= argLen)\n            break\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          str += String(args[a])\n          lastPos = i + 2\n          i++\n          break\n        case 37: // '%'\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          str += '%'\n          lastPos = i + 2\n          i++\n          a--\n          break\n      }\n      ++a\n    }\n    ++i\n  }\n  if (lastPos === -1)\n    return f\n  else if (lastPos < flen) {\n    str += f.slice(lastPos)\n  }\n\n  return str\n}\n","'use strict'\n\n/* global SharedArrayBuffer, Atomics */\n\nif (typeof SharedArrayBuffer !== 'undefined' && typeof Atomics !== 'undefined') {\n  const nil = new Int32Array(new SharedArrayBuffer(4))\n\n  function sleep (ms) {\n    // also filters out NaN, non-number types, including empty strings, but allows bigints\n    const valid = ms > 0 && ms < Infinity \n    if (valid === false) {\n      if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n        throw TypeError('sleep: ms must be a number')\n      }\n      throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')\n    }\n\n    Atomics.wait(nil, 0, 0, Number(ms))\n  }\n  module.exports = sleep\n} else {\n\n  function sleep (ms) {\n    // also filters out NaN, non-number types, including empty strings, but allows bigints\n    const valid = ms > 0 && ms < Infinity \n    if (valid === false) {\n      if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n        throw TypeError('sleep: ms must be a number')\n      }\n      throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')\n    }\n    const target = Date.now() + Number(ms)\n    while (target > Date.now()){}\n  }\n\n  module.exports = sleep\n\n}\n","'use strict'\n\nconst fs = require('fs')\nconst EventEmitter = require('events')\nconst inherits = require('util').inherits\nconst path = require('path')\nconst sleep = require('atomic-sleep')\nconst assert = require('assert')\n\nconst BUSY_WRITE_TIMEOUT = 100\nconst kEmptyBuffer = Buffer.allocUnsafe(0)\n\n// 16 KB. Don't write more than docker buffer size.\n// https://github.com/moby/moby/blob/513ec73831269947d38a644c278ce3cac36783b2/daemon/logger/copier.go#L13\nconst MAX_WRITE = 16 * 1024\n\nconst kContentModeBuffer = 'buffer'\nconst kContentModeUtf8 = 'utf8'\n\nconst [major, minor] = (process.versions.node || '0.0').split('.').map(Number)\nconst kCopyBuffer = major >= 22 && minor >= 7\n\nfunction openFile (file, sonic) {\n  sonic._opening = true\n  sonic._writing = true\n  sonic._asyncDrainScheduled = false\n\n  // NOTE: 'error' and 'ready' events emitted below only relevant when sonic.sync===false\n  // for sync mode, there is no way to add a listener that will receive these\n\n  function fileOpened (err, fd) {\n    if (err) {\n      sonic._reopening = false\n      sonic._writing = false\n      sonic._opening = false\n\n      if (sonic.sync) {\n        process.nextTick(() => {\n          if (sonic.listenerCount('error') > 0) {\n            sonic.emit('error', err)\n          }\n        })\n      } else {\n        sonic.emit('error', err)\n      }\n      return\n    }\n\n    const reopening = sonic._reopening\n\n    sonic.fd = fd\n    sonic.file = file\n    sonic._reopening = false\n    sonic._opening = false\n    sonic._writing = false\n\n    if (sonic.sync) {\n      process.nextTick(() => sonic.emit('ready'))\n    } else {\n      sonic.emit('ready')\n    }\n\n    if (sonic.destroyed) {\n      return\n    }\n\n    // start\n    if ((!sonic._writing && sonic._len > sonic.minLength) || sonic._flushPending) {\n      sonic._actualWrite()\n    } else if (reopening) {\n      process.nextTick(() => sonic.emit('drain'))\n    }\n  }\n\n  const flags = sonic.append ? 'a' : 'w'\n  const mode = sonic.mode\n\n  if (sonic.sync) {\n    try {\n      if (sonic.mkdir) fs.mkdirSync(path.dirname(file), { recursive: true })\n      const fd = fs.openSync(file, flags, mode)\n      fileOpened(null, fd)\n    } catch (err) {\n      fileOpened(err)\n      throw err\n    }\n  } else if (sonic.mkdir) {\n    fs.mkdir(path.dirname(file), { recursive: true }, (err) => {\n      if (err) return fileOpened(err)\n      fs.open(file, flags, mode, fileOpened)\n    })\n  } else {\n    fs.open(file, flags, mode, fileOpened)\n  }\n}\n\nfunction SonicBoom (opts) {\n  if (!(this instanceof SonicBoom)) {\n    return new SonicBoom(opts)\n  }\n\n  let { fd, dest, minLength, maxLength, maxWrite, periodicFlush, sync, append = true, mkdir, retryEAGAIN, fsync, contentMode, mode } = opts || {}\n\n  fd = fd || dest\n\n  this._len = 0\n  this.fd = -1\n  this._bufs = []\n  this._lens = []\n  this._writing = false\n  this._ending = false\n  this._reopening = false\n  this._asyncDrainScheduled = false\n  this._flushPending = false\n  this._hwm = Math.max(minLength || 0, 16387)\n  this.file = null\n  this.destroyed = false\n  this.minLength = minLength || 0\n  this.maxLength = maxLength || 0\n  this.maxWrite = maxWrite || MAX_WRITE\n  this._periodicFlush = periodicFlush || 0\n  this._periodicFlushTimer = undefined\n  this.sync = sync || false\n  this.writable = true\n  this._fsync = fsync || false\n  this.append = append || false\n  this.mode = mode\n  this.retryEAGAIN = retryEAGAIN || (() => true)\n  this.mkdir = mkdir || false\n\n  let fsWriteSync\n  let fsWrite\n  if (contentMode === kContentModeBuffer) {\n    this._writingBuf = kEmptyBuffer\n    this.write = writeBuffer\n    this.flush = flushBuffer\n    this.flushSync = flushBufferSync\n    this._actualWrite = actualWriteBuffer\n    fsWriteSync = () => fs.writeSync(this.fd, this._writingBuf)\n    fsWrite = () => fs.write(this.fd, this._writingBuf, this.release)\n  } else if (contentMode === undefined || contentMode === kContentModeUtf8) {\n    this._writingBuf = ''\n    this.write = write\n    this.flush = flush\n    this.flushSync = flushSync\n    this._actualWrite = actualWrite\n    fsWriteSync = () => {\n      if (Buffer.isBuffer(this._writingBuf)) {\n        return fs.writeSync(this.fd, this._writingBuf)\n      }\n      return fs.writeSync(this.fd, this._writingBuf, 'utf8')\n    }\n    fsWrite = () => {\n      if (Buffer.isBuffer(this._writingBuf)) {\n        return fs.write(this.fd, this._writingBuf, this.release)\n      }\n      return fs.write(this.fd, this._writingBuf, 'utf8', this.release)\n    }\n  } else {\n    throw new Error(`SonicBoom supports \"${kContentModeUtf8}\" and \"${kContentModeBuffer}\", but passed ${contentMode}`)\n  }\n\n  if (typeof fd === 'number') {\n    this.fd = fd\n    process.nextTick(() => this.emit('ready'))\n  } else if (typeof fd === 'string') {\n    openFile(fd, this)\n  } else {\n    throw new Error('SonicBoom supports only file descriptors and files')\n  }\n  if (this.minLength >= this.maxWrite) {\n    throw new Error(`minLength should be smaller than maxWrite (${this.maxWrite})`)\n  }\n\n  this.release = (err, n) => {\n    if (err) {\n      if ((err.code === 'EAGAIN' || err.code === 'EBUSY') && this.retryEAGAIN(err, this._writingBuf.length, this._len - this._writingBuf.length)) {\n        if (this.sync) {\n          // This error code should not happen in sync mode, because it is\n          // not using the underlining operating system asynchronous functions.\n          // However it happens, and so we handle it.\n          // Ref: https://github.com/pinojs/pino/issues/783\n          try {\n            sleep(BUSY_WRITE_TIMEOUT)\n            this.release(undefined, 0)\n          } catch (err) {\n            this.release(err)\n          }\n        } else {\n          // Let's give the destination some time to process the chunk.\n          setTimeout(fsWrite, BUSY_WRITE_TIMEOUT)\n        }\n      } else {\n        this._writing = false\n\n        this.emit('error', err)\n      }\n      return\n    }\n\n    this.emit('write', n)\n    const releasedBufObj = releaseWritingBuf(this._writingBuf, this._len, n)\n    this._len = releasedBufObj.len\n    this._writingBuf = releasedBufObj.writingBuf\n\n    if (this._writingBuf.length) {\n      if (!this.sync) {\n        fsWrite()\n        return\n      }\n\n      try {\n        do {\n          const n = fsWriteSync()\n          const releasedBufObj = releaseWritingBuf(this._writingBuf, this._len, n)\n          this._len = releasedBufObj.len\n          this._writingBuf = releasedBufObj.writingBuf\n        } while (this._writingBuf.length)\n      } catch (err) {\n        this.release(err)\n        return\n      }\n    }\n\n    if (this._fsync) {\n      fs.fsyncSync(this.fd)\n    }\n\n    const len = this._len\n    if (this._reopening) {\n      this._writing = false\n      this._reopening = false\n      this.reopen()\n    } else if (len > this.minLength) {\n      this._actualWrite()\n    } else if (this._ending) {\n      if (len > 0) {\n        this._actualWrite()\n      } else {\n        this._writing = false\n        actualClose(this)\n      }\n    } else {\n      this._writing = false\n      if (this.sync) {\n        if (!this._asyncDrainScheduled) {\n          this._asyncDrainScheduled = true\n          process.nextTick(emitDrain, this)\n        }\n      } else {\n        this.emit('drain')\n      }\n    }\n  }\n\n  this.on('newListener', function (name) {\n    if (name === 'drain') {\n      this._asyncDrainScheduled = false\n    }\n  })\n\n  if (this._periodicFlush !== 0) {\n    this._periodicFlushTimer = setInterval(() => this.flush(null), this._periodicFlush)\n    this._periodicFlushTimer.unref()\n  }\n}\n\n/**\n * Release the writingBuf after fs.write n bytes data\n * @param {string | Buffer} writingBuf - currently writing buffer, usually be instance._writingBuf.\n * @param {number} len - currently buffer length, usually be instance._len.\n * @param {number} n - number of bytes fs already written\n * @returns {{writingBuf: string | Buffer, len: number}} released writingBuf and length\n */\nfunction releaseWritingBuf (writingBuf, len, n) {\n  if (typeof writingBuf === 'string') {\n    writingBuf = Buffer.from(writingBuf)\n  }\n\n  len = Math.max(len - n, 0)\n  writingBuf = writingBuf.subarray(n)\n  return { writingBuf, len }\n}\n\nfunction emitDrain (sonic) {\n  const hasListeners = sonic.listenerCount('drain') > 0\n  if (!hasListeners) return\n  sonic._asyncDrainScheduled = false\n  sonic.emit('drain')\n}\n\ninherits(SonicBoom, EventEmitter)\n\nfunction mergeBuf (bufs, len) {\n  if (bufs.length === 0) {\n    return kEmptyBuffer\n  }\n\n  if (bufs.length === 1) {\n    return bufs[0]\n  }\n\n  return Buffer.concat(bufs, len)\n}\n\nfunction write (data) {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  data = '' + data\n  const dataLen = Buffer.byteLength(data)\n  const len = this._len + dataLen\n  const bufs = this._bufs\n\n  if (this.maxLength && len > this.maxLength) {\n    this.emit('drop', data)\n    return this._len < this._hwm\n  }\n\n  if (\n    bufs.length === 0 ||\n    Buffer.byteLength(bufs[bufs.length - 1]) + dataLen > this.maxWrite\n  ) {\n    bufs.push(data)\n  } else {\n    bufs[bufs.length - 1] += data\n  }\n\n  this._len = len\n\n  if (!this._writing && this._len >= this.minLength) {\n    this._actualWrite()\n  }\n\n  return this._len < this._hwm\n}\n\nfunction writeBuffer (data) {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  const len = this._len + data.length\n  const bufs = this._bufs\n  const lens = this._lens\n\n  if (this.maxLength && len > this.maxLength) {\n    this.emit('drop', data)\n    return this._len < this._hwm\n  }\n\n  if (\n    bufs.length === 0 ||\n    lens[lens.length - 1] + data.length > this.maxWrite\n  ) {\n    bufs.push([data])\n    lens.push(data.length)\n  } else {\n    bufs[bufs.length - 1].push(data)\n    lens[lens.length - 1] += data.length\n  }\n\n  this._len = len\n\n  if (!this._writing && this._len >= this.minLength) {\n    this._actualWrite()\n  }\n\n  return this._len < this._hwm\n}\n\nfunction callFlushCallbackOnDrain (cb) {\n  this._flushPending = true\n  const onDrain = () => {\n    // only if _fsync is false to avoid double fsync\n    if (!this._fsync) {\n      try {\n        fs.fsync(this.fd, (err) => {\n          this._flushPending = false\n          cb(err)\n        })\n      } catch (err) {\n        cb(err)\n      }\n    } else {\n      this._flushPending = false\n      cb()\n    }\n    this.off('error', onError)\n  }\n  const onError = (err) => {\n    this._flushPending = false\n    cb(err)\n    this.off('drain', onDrain)\n  }\n\n  this.once('drain', onDrain)\n  this.once('error', onError)\n}\n\nfunction flush (cb) {\n  if (cb != null && typeof cb !== 'function') {\n    throw new Error('flush cb must be a function')\n  }\n\n  if (this.destroyed) {\n    const error = new Error('SonicBoom destroyed')\n    if (cb) {\n      cb(error)\n      return\n    }\n\n    throw error\n  }\n\n  if (this.minLength <= 0) {\n    cb?.()\n    return\n  }\n\n  if (cb) {\n    callFlushCallbackOnDrain.call(this, cb)\n  }\n\n  if (this._writing) {\n    return\n  }\n\n  if (this._bufs.length === 0) {\n    this._bufs.push('')\n  }\n\n  this._actualWrite()\n}\n\nfunction flushBuffer (cb) {\n  if (cb != null && typeof cb !== 'function') {\n    throw new Error('flush cb must be a function')\n  }\n\n  if (this.destroyed) {\n    const error = new Error('SonicBoom destroyed')\n    if (cb) {\n      cb(error)\n      return\n    }\n\n    throw error\n  }\n\n  if (this.minLength <= 0) {\n    cb?.()\n    return\n  }\n\n  if (cb) {\n    callFlushCallbackOnDrain.call(this, cb)\n  }\n\n  if (this._writing) {\n    return\n  }\n\n  if (this._bufs.length === 0) {\n    this._bufs.push([])\n    this._lens.push(0)\n  }\n\n  this._actualWrite()\n}\n\nSonicBoom.prototype.reopen = function (file) {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  if (this._opening) {\n    this.once('ready', () => {\n      this.reopen(file)\n    })\n    return\n  }\n\n  if (this._ending) {\n    return\n  }\n\n  if (!this.file) {\n    throw new Error('Unable to reopen a file descriptor, you must pass a file to SonicBoom')\n  }\n\n  if (file) {\n    this.file = file\n  }\n  this._reopening = true\n\n  if (this._writing) {\n    return\n  }\n\n  const fd = this.fd\n  this.once('ready', () => {\n    if (fd !== this.fd) {\n      fs.close(fd, (err) => {\n        if (err) {\n          return this.emit('error', err)\n        }\n      })\n    }\n  })\n\n  openFile(this.file, this)\n}\n\nSonicBoom.prototype.end = function () {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  if (this._opening) {\n    this.once('ready', () => {\n      this.end()\n    })\n    return\n  }\n\n  if (this._ending) {\n    return\n  }\n\n  this._ending = true\n\n  if (this._writing) {\n    return\n  }\n\n  if (this._len > 0 && this.fd >= 0) {\n    this._actualWrite()\n  } else {\n    actualClose(this)\n  }\n}\n\nfunction flushSync () {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  if (this.fd < 0) {\n    throw new Error('sonic boom is not ready yet')\n  }\n\n  if (!this._writing && this._writingBuf.length > 0) {\n    this._bufs.unshift(this._writingBuf)\n    this._writingBuf = ''\n  }\n\n  let buf = ''\n  while (this._bufs.length || buf.length) {\n    if (buf.length <= 0) {\n      buf = this._bufs[0]\n    }\n    try {\n      const n = Buffer.isBuffer(buf)\n        ? fs.writeSync(this.fd, buf)\n        : fs.writeSync(this.fd, buf, 'utf8')\n      const releasedBufObj = releaseWritingBuf(buf, this._len, n)\n      buf = releasedBufObj.writingBuf\n      this._len = releasedBufObj.len\n      if (buf.length <= 0) {\n        this._bufs.shift()\n      }\n    } catch (err) {\n      const shouldRetry = err.code === 'EAGAIN' || err.code === 'EBUSY'\n      if (shouldRetry && !this.retryEAGAIN(err, buf.length, this._len - buf.length)) {\n        throw err\n      }\n\n      sleep(BUSY_WRITE_TIMEOUT)\n    }\n  }\n\n  try {\n    fs.fsyncSync(this.fd)\n  } catch {\n    // Skip the error. The fd might not support fsync.\n  }\n}\n\nfunction flushBufferSync () {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  if (this.fd < 0) {\n    throw new Error('sonic boom is not ready yet')\n  }\n\n  if (!this._writing && this._writingBuf.length > 0) {\n    this._bufs.unshift([this._writingBuf])\n    this._writingBuf = kEmptyBuffer\n  }\n\n  let buf = kEmptyBuffer\n  while (this._bufs.length || buf.length) {\n    if (buf.length <= 0) {\n      buf = mergeBuf(this._bufs[0], this._lens[0])\n    }\n    try {\n      const n = fs.writeSync(this.fd, buf)\n      buf = buf.subarray(n)\n      this._len = Math.max(this._len - n, 0)\n      if (buf.length <= 0) {\n        this._bufs.shift()\n        this._lens.shift()\n      }\n    } catch (err) {\n      const shouldRetry = err.code === 'EAGAIN' || err.code === 'EBUSY'\n      if (shouldRetry && !this.retryEAGAIN(err, buf.length, this._len - buf.length)) {\n        throw err\n      }\n\n      sleep(BUSY_WRITE_TIMEOUT)\n    }\n  }\n}\n\nSonicBoom.prototype.destroy = function () {\n  if (this.destroyed) {\n    return\n  }\n  actualClose(this)\n}\n\nfunction actualWrite () {\n  const release = this.release\n  this._writing = true\n  this._writingBuf = this._writingBuf.length ? this._writingBuf : this._bufs.shift() || ''\n\n  if (this.sync) {\n    try {\n      const written = Buffer.isBuffer(this._writingBuf)\n        ? fs.writeSync(this.fd, this._writingBuf)\n        : fs.writeSync(this.fd, this._writingBuf, 'utf8')\n      release(null, written)\n    } catch (err) {\n      release(err)\n    }\n  } else {\n    fs.write(this.fd, this._writingBuf, release)\n  }\n}\n\nfunction actualWriteBuffer () {\n  const release = this.release\n  this._writing = true\n  this._writingBuf = this._writingBuf.length ? this._writingBuf : mergeBuf(this._bufs.shift(), this._lens.shift())\n\n  if (this.sync) {\n    try {\n      const written = fs.writeSync(this.fd, this._writingBuf)\n      release(null, written)\n    } catch (err) {\n      release(err)\n    }\n  } else {\n    // fs.write will need to copy string to buffer anyway so\n    // we do it here to avoid the overhead of calculating the buffer size\n    // in releaseWritingBuf.\n    if (kCopyBuffer) {\n      this._writingBuf = Buffer.from(this._writingBuf)\n    }\n    fs.write(this.fd, this._writingBuf, release)\n  }\n}\n\nfunction actualClose (sonic) {\n  if (sonic.fd === -1) {\n    sonic.once('ready', actualClose.bind(null, sonic))\n    return\n  }\n\n  if (sonic._periodicFlushTimer !== undefined) {\n    clearInterval(sonic._periodicFlushTimer)\n  }\n\n  sonic.destroyed = true\n  sonic._bufs = []\n  sonic._lens = []\n\n  assert(typeof sonic.fd === 'number', `sonic.fd must be a number, got ${typeof sonic.fd}`)\n  try {\n    fs.fsync(sonic.fd, closeWrapped)\n  } catch {\n  }\n\n  function closeWrapped () {\n    // We skip errors in fsync\n\n    if (sonic.fd !== 1 && sonic.fd !== 2) {\n      fs.close(sonic.fd, done)\n    } else {\n      done()\n    }\n  }\n\n  function done (err) {\n    if (err) {\n      sonic.emit('error', err)\n      return\n    }\n\n    if (sonic._ending && !sonic._writing) {\n      sonic.emit('finish')\n    }\n    sonic.emit('close')\n  }\n}\n\n/**\n * These export configurations enable JS and TS developers\n * to consumer SonicBoom in whatever way best suits their needs.\n * Some examples of supported import syntax includes:\n * - `const SonicBoom = require('SonicBoom')`\n * - `const { SonicBoom } = require('SonicBoom')`\n * - `import * as SonicBoom from 'SonicBoom'`\n * - `import { SonicBoom } from 'SonicBoom'`\n * - `import SonicBoom from 'SonicBoom'`\n */\nSonicBoom.SonicBoom = SonicBoom\nSonicBoom.default = SonicBoom\nmodule.exports = SonicBoom\n","'use strict'\n\nconst refs = {\n  exit: [],\n  beforeExit: []\n}\nconst functions = {\n  exit: onExit,\n  beforeExit: onBeforeExit\n}\n\nlet registry\n\nfunction ensureRegistry () {\n  if (registry === undefined) {\n    registry = new FinalizationRegistry(clear)\n  }\n}\n\nfunction install (event) {\n  if (refs[event].length > 0) {\n    return\n  }\n\n  process.on(event, functions[event])\n}\n\nfunction uninstall (event) {\n  if (refs[event].length > 0) {\n    return\n  }\n  process.removeListener(event, functions[event])\n  if (refs.exit.length === 0 && refs.beforeExit.length === 0) {\n    registry = undefined\n  }\n}\n\nfunction onExit () {\n  callRefs('exit')\n}\n\nfunction onBeforeExit () {\n  callRefs('beforeExit')\n}\n\nfunction callRefs (event) {\n  for (const ref of refs[event]) {\n    const obj = ref.deref()\n    const fn = ref.fn\n\n    // This should always happen, however GC is\n    // undeterministic so it might not happen.\n    /* istanbul ignore else */\n    if (obj !== undefined) {\n      fn(obj, event)\n    }\n  }\n  refs[event] = []\n}\n\nfunction clear (ref) {\n  for (const event of ['exit', 'beforeExit']) {\n    const index = refs[event].indexOf(ref)\n    refs[event].splice(index, index + 1)\n    uninstall(event)\n  }\n}\n\nfunction _register (event, obj, fn) {\n  if (obj === undefined) {\n    throw new Error('the object can\\'t be undefined')\n  }\n  install(event)\n  const ref = new WeakRef(obj)\n  ref.fn = fn\n\n  ensureRegistry()\n  registry.register(obj, ref)\n  refs[event].push(ref)\n}\n\nfunction register (obj, fn) {\n  _register('exit', obj, fn)\n}\n\nfunction registerBeforeExit (obj, fn) {\n  _register('beforeExit', obj, fn)\n}\n\nfunction unregister (obj) {\n  if (registry === undefined) {\n    return\n  }\n  registry.unregister(obj)\n  for (const event of ['exit', 'beforeExit']) {\n    refs[event] = refs[event].filter((ref) => {\n      const _obj = ref.deref()\n      return _obj && _obj !== obj\n    })\n    uninstall(event)\n  }\n}\n\nmodule.exports = {\n  register,\n  registerBeforeExit,\n  unregister\n}\n","{\n  \"name\": \"thread-stream\",\n  \"version\": \"4.2.0\",\n  \"description\": \"A streaming way to send data to a Node.js Worker Thread\",\n  \"main\": \"index.js\",\n  \"types\": \"index.d.ts\",\n  \"engines\": {\n    \"node\": \">=20\"\n  },\n  \"dependencies\": {\n    \"real-require\": \"^1.0.0\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"^25.0.2\",\n    \"@yao-pkg/pkg\": \"^6.0.0\",\n    \"borp\": \"^1.0.0\",\n    \"desm\": \"^1.3.0\",\n    \"eslint\": \"^9.39.1\",\n    \"fastbench\": \"^1.0.1\",\n    \"neostandard\": \"^0.13.0\",\n    \"pino-elasticsearch\": \"^9.0.0\",\n    \"sonic-boom\": \"^5.0.0\",\n    \"ts-node\": \"^10.8.0\",\n    \"typescript\": \"~5.7.3\"\n  },\n  \"scripts\": {\n    \"build\": \"tsc --noEmit\",\n    \"lint\": \"eslint\",\n    \"test\": \"npm run lint && npm run build && npm run transpile && borp --pattern \\\"test/*.test.{js,mjs}\\\"\",\n    \"test:ci\": \"npm run lint && npm run transpile && borp --pattern \\\"test/*.test.{js,mjs}\\\"\",\n    \"test:yarn\": \"npm run transpile && borp --pattern \\\"test/*.test.js\\\"\",\n    \"transpile\": \"sh ./test/ts/transpile.sh\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/mcollina/thread-stream.git\"\n  },\n  \"keywords\": [\n    \"worker\",\n    \"thread\",\n    \"threads\",\n    \"stream\"\n  ],\n  \"author\": \"Matteo Collina <hello@matteocollina.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/mcollina/thread-stream/issues\"\n  },\n  \"homepage\": \"https://github.com/mcollina/thread-stream#readme\"\n}\n","'use strict'\n\n// Maximum wait time for a single waitAsync call\n// Used as a fallback poll interval in case notifications are missed\n// Keep this low enough for good throughput but high enough to not busy-loop\nconst WAIT_MS = 10000\n\nfunction wait (state, index, expected, timeout, done) {\n  const max = timeout === Infinity ? Infinity : Date.now() + timeout\n\n  const check = () => {\n    const current = Atomics.load(state, index)\n    if (current === expected) {\n      done(null, 'ok')\n      return\n    }\n\n    if (max !== Infinity && Date.now() > max) {\n      done(null, 'timed-out')\n      return\n    }\n\n    // Wait for any change from current value\n    const remaining = max === Infinity ? WAIT_MS : Math.min(WAIT_MS, Math.max(1, max - Date.now()))\n    const result = Atomics.waitAsync(state, index, current, remaining)\n\n    if (result.async) {\n      result.value.then(check)\n    } else {\n      // Value already changed (not-equal) - recheck on next tick\n      setImmediate(check)\n    }\n  }\n\n  check()\n}\n\nfunction waitDiff (state, index, expected, timeout, done) {\n  const max = timeout === Infinity ? Infinity : Date.now() + timeout\n\n  const check = () => {\n    const current = Atomics.load(state, index)\n    if (current !== expected) {\n      done(null, 'ok')\n      return\n    }\n\n    if (max !== Infinity && Date.now() > max) {\n      done(null, 'timed-out')\n      return\n    }\n\n    // Wait for value to change from expected.\n    // If we are notified, resume immediately even if the value cycled back\n    // to the same number before we could re-read it.\n    const remaining = max === Infinity ? WAIT_MS : Math.min(WAIT_MS, Math.max(1, max - Date.now()))\n    const result = Atomics.waitAsync(state, index, expected, remaining)\n\n    if (result.async) {\n      result.value.then((res) => {\n        if (res === 'ok') {\n          done(null, 'ok')\n          return\n        }\n\n        check()\n      })\n    } else {\n      // Value already changed (not-equal) - recheck on next tick\n      setImmediate(check)\n    }\n  }\n\n  check()\n}\n\nmodule.exports = { wait, waitDiff }\n","'use strict'\n\nconst SEQ_INDEX = 2\nconst WRITE_INDEX = 4\nconst READ_INDEX = 8\n\nmodule.exports = {\n  WRITE_INDEX,\n  READ_INDEX,\n  SEQ_INDEX\n}\n","'use strict'\n\nconst { version } = require('./package.json')\nconst { EventEmitter } = require('events')\nconst { Worker } = require('worker_threads')\nconst { join } = require('path')\nconst { pathToFileURL } = require('url')\nconst { wait } = require('./lib/wait')\nconst {\n  WRITE_INDEX,\n  READ_INDEX,\n  SEQ_INDEX\n} = require('./lib/indexes')\nconst buffer = require('buffer')\nconst assert = require('assert')\n\nconst kImpl = Symbol('kImpl')\n\n// Maximum pending buffered data before forcing a synchronous drain\nconst MAX_STRING = buffer.constants.MAX_STRING_LENGTH\n\nfunction noop () {}\n\nfunction updateState (stream, fn) {\n  Atomics.add(stream[kImpl].state, SEQ_INDEX, 1)\n  fn()\n  Atomics.add(stream[kImpl].state, SEQ_INDEX, 1)\n  Atomics.notify(stream[kImpl].state, SEQ_INDEX)\n}\n\nfunction resetIndexes (stream) {\n  updateState(stream, () => {\n    Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n    Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n  })\n}\n\nclass FakeWeakRef {\n  constructor (value) {\n    this._value = value\n  }\n\n  deref () {\n    return this._value\n  }\n}\n\nclass FakeFinalizationRegistry {\n  register () {}\n\n  unregister () {}\n}\n\n// Currently using FinalizationRegistry with code coverage breaks the world\n// Ref: https://github.com/nodejs/node/issues/49344\nconst FinalizationRegistry = process.env.NODE_V8_COVERAGE ? FakeFinalizationRegistry : global.FinalizationRegistry || FakeFinalizationRegistry\nconst WeakRef = process.env.NODE_V8_COVERAGE ? FakeWeakRef : global.WeakRef || FakeWeakRef\n\nconst registry = new FinalizationRegistry((worker) => {\n  if (worker.exited) {\n    return\n  }\n  worker.terminate()\n})\n\nfunction createWorker (stream, opts) {\n  const { filename, workerData } = opts\n\n  const bundlerOverrides = '__bundlerPathsOverrides' in globalThis ? globalThis.__bundlerPathsOverrides : {}\n  const toExecute = bundlerOverrides['thread-stream-worker'] || join(__dirname, 'lib', 'worker.js')\n\n  const worker = new Worker(toExecute, {\n    ...opts.workerOpts,\n    name: opts.workerOpts?.name || 'thread-stream',\n    trackUnmanagedFds: false,\n    workerData: {\n      filename: filename.indexOf('file://') === 0\n        ? filename\n        : pathToFileURL(filename).href,\n      dataBuf: stream[kImpl].dataBuf,\n      stateBuf: stream[kImpl].stateBuf,\n      workerData: {\n        $context: {\n          threadStreamVersion: version\n        },\n        ...workerData\n      }\n    }\n  })\n\n  // We keep a strong reference for now,\n  // we need to start writing first\n  worker.stream = new FakeWeakRef(stream)\n\n  worker.on('message', onWorkerMessage)\n  worker.on('exit', onWorkerExit)\n  registry.register(stream, worker)\n\n  return worker\n}\n\nfunction drain (stream) {\n  assert(!stream[kImpl].sync)\n  if (stream[kImpl].needDrain) {\n    stream[kImpl].needDrain = false\n    stream.emit('drain')\n  }\n}\n\nfunction nextFlush (stream) {\n  while (true) {\n    const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n    const leftover = stream[kImpl].data.length - writeIndex\n\n    if (leftover > 0) {\n      if (stream[kImpl].bufLen === 0) {\n        stream[kImpl].flushing = false\n\n        if (stream[kImpl].ending) {\n          end(stream)\n        } else if (stream[kImpl].needDrain) {\n          process.nextTick(drain, stream)\n        }\n\n        return\n      }\n\n      write(stream, leftover, noop)\n      continue\n    }\n\n    if (leftover === 0) {\n      if (writeIndex === 0 && stream[kImpl].bufLen === 0) {\n        // we had a flushSync in the meanwhile\n        return\n      }\n      waitForRead(stream, () => {\n        if (stream.destroyed) {\n          return\n        }\n\n        resetIndexes(stream)\n        nextFlush(stream)\n      })\n      return\n    }\n\n    // This should never happen\n    destroy(stream, new Error('overwritten'))\n    return\n  }\n}\n\nfunction onWorkerMessage (msg) {\n  const stream = this.stream.deref()\n  if (stream === undefined) {\n    this.exited = true\n    // Terminate the worker.\n    this.terminate()\n    return\n  }\n\n  // Node.js watch mode may send internal worker messages that do not\n  // participate in thread-stream's worker protocol.\n  if (msg?.code == null) {\n    return\n  }\n\n  switch (msg.code) {\n    case 'READY':\n      // Replace the FakeWeakRef with a\n      // proper one.\n      this.stream = new WeakRef(stream)\n\n      waitForRead(stream, () => {\n        stream[kImpl].ready = true\n        stream.emit('ready')\n      })\n      break\n    case 'ERROR':\n      destroy(stream, msg.err)\n      break\n    case 'EVENT':\n      if (Array.isArray(msg.args)) {\n        stream.emit(msg.name, ...msg.args)\n      } else {\n        stream.emit(msg.name, msg.args)\n      }\n      break\n    case 'FLUSHED': {\n      if (msg.context !== 'thread-stream') {\n        destroy(stream, new Error('this should not happen: ' + msg.code))\n        break\n      }\n\n      const cb = stream[kImpl].flushCallbacks.get(msg.id)\n      if (cb) {\n        stream[kImpl].flushCallbacks.delete(msg.id)\n        process.nextTick(cb)\n      }\n      break\n    }\n    case 'WARNING':\n      process.emitWarning(msg.err)\n      break\n    default:\n      destroy(stream, new Error('this should not happen: ' + msg.code))\n  }\n}\n\nfunction onWorkerExit (code) {\n  const stream = this.stream.deref()\n  if (stream === undefined) {\n    // Nothing to do, the worker already exit\n    return\n  }\n  registry.unregister(stream)\n  stream.worker.exited = true\n  stream.worker.off('exit', onWorkerExit)\n  destroy(stream, code !== 0 ? new Error('the worker thread exited') : null)\n}\n\nclass ThreadStream extends EventEmitter {\n  constructor (opts = {}) {\n    super()\n\n    if (opts.bufferSize < 4) {\n      throw new Error('bufferSize must at least fit a 4-byte utf-8 char')\n    }\n\n    this[kImpl] = {}\n    this[kImpl].stateBuf = new SharedArrayBuffer(128)\n    this[kImpl].state = new Int32Array(this[kImpl].stateBuf)\n    this[kImpl].dataBuf = new SharedArrayBuffer(opts.bufferSize || 4 * 1024 * 1024)\n    this[kImpl].data = Buffer.from(this[kImpl].dataBuf)\n    this[kImpl].sync = opts.sync || false\n    this[kImpl].ending = false\n    this[kImpl].ended = false\n    this[kImpl].needDrain = false\n    this[kImpl].destroyed = false\n    this[kImpl].flushing = false\n    this[kImpl].ready = false\n    this[kImpl].finished = false\n    this[kImpl].errored = null\n    this[kImpl].closed = false\n    this[kImpl].buf = []\n    this[kImpl].bufHead = 0\n    this[kImpl].bufLen = 0\n    this[kImpl].flushCallbacks = new Map()\n    this[kImpl].nextFlushId = 0\n\n    // TODO (fix): Make private?\n    this.worker = createWorker(this, opts) // TODO (fix): make private\n    this.on('message', (message, transferList) => {\n      this.worker.postMessage(message, transferList)\n    })\n  }\n\n  write (data) {\n    const dataBuf = Buffer.isBuffer(data) ? data : Buffer.from(data)\n    if (this[kImpl].destroyed) {\n      error(this, new Error('the worker has exited'))\n      return false\n    }\n\n    if (this[kImpl].ending) {\n      error(this, new Error('the worker is ending'))\n      return false\n    }\n\n    if (this[kImpl].flushing && this[kImpl].bufLen + dataBuf.length >= MAX_STRING) {\n      try {\n        writeSync(this)\n        this[kImpl].flushing = true\n      } catch (err) {\n        destroy(this, err)\n        return false\n      }\n    }\n\n    this[kImpl].buf.push(dataBuf)\n    this[kImpl].bufLen += dataBuf.length\n\n    if (this[kImpl].sync) {\n      try {\n        writeSync(this)\n        return true\n      } catch (err) {\n        destroy(this, err)\n        return false\n      }\n    }\n\n    if (!this[kImpl].flushing) {\n      this[kImpl].flushing = true\n      setImmediate(nextFlush, this)\n    }\n\n    this[kImpl].needDrain = this[kImpl].data.length - this[kImpl].bufLen - Atomics.load(this[kImpl].state, WRITE_INDEX) <= 0\n    return !this[kImpl].needDrain\n  }\n\n  end () {\n    if (this[kImpl].destroyed) {\n      return\n    }\n\n    this[kImpl].ending = true\n    end(this)\n  }\n\n  flush (cb) {\n    cb = typeof cb === 'function' ? cb : noop\n\n    flushBuffer(this, (err) => {\n      if (err) {\n        process.nextTick(cb, err)\n        return\n      }\n\n      requestWorkerFlush(this, cb)\n    })\n  }\n\n  flushSync () {\n    if (this[kImpl].destroyed) {\n      return\n    }\n\n    writeSync(this)\n    flushSync(this)\n  }\n\n  unref () {\n    this.worker.unref()\n  }\n\n  ref () {\n    this.worker.ref()\n  }\n\n  get ready () {\n    return this[kImpl].ready\n  }\n\n  get destroyed () {\n    return this[kImpl].destroyed\n  }\n\n  get closed () {\n    return this[kImpl].closed\n  }\n\n  get writable () {\n    return !this[kImpl].destroyed && !this[kImpl].ending\n  }\n\n  get writableEnded () {\n    return this[kImpl].ending\n  }\n\n  get writableFinished () {\n    return this[kImpl].finished\n  }\n\n  get writableNeedDrain () {\n    return this[kImpl].needDrain\n  }\n\n  get writableObjectMode () {\n    return false\n  }\n\n  get writableErrored () {\n    return this[kImpl].errored\n  }\n}\n\nfunction flushBuffer (stream, cb) {\n  if (stream[kImpl].destroyed) {\n    process.nextTick(cb, new Error('the worker has exited'))\n    return\n  }\n\n  if (!stream[kImpl].sync && (stream[kImpl].flushing || stream[kImpl].bufLen > 0)) {\n    setImmediate(flushBuffer, stream, cb)\n    return\n  }\n\n  waitForRead(stream, cb)\n}\n\nfunction waitForRead (stream, cb) {\n  const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n  wait(stream[kImpl].state, READ_INDEX, writeIndex, Infinity, (err, res) => {\n    if (err) {\n      destroy(stream, err)\n      cb(err)\n      return\n    }\n\n    if (res !== 'ok') {\n      waitForRead(stream, cb)\n      return\n    }\n\n    cb()\n  })\n}\n\nfunction requestWorkerFlush (stream, cb) {\n  if (stream[kImpl].destroyed) {\n    process.nextTick(cb, new Error('the worker has exited'))\n    return\n  }\n\n  if (!stream[kImpl].ready) {\n    const onReady = () => {\n      cleanup()\n      requestWorkerFlush(stream, cb)\n    }\n    const onClose = () => {\n      cleanup()\n      process.nextTick(cb, new Error('the worker has exited'))\n    }\n    const cleanup = () => {\n      stream.off('ready', onReady)\n      stream.off('close', onClose)\n    }\n\n    stream.once('ready', onReady)\n    stream.once('close', onClose)\n    return\n  }\n\n  const id = ++stream[kImpl].nextFlushId\n  stream[kImpl].flushCallbacks.set(id, cb)\n\n  try {\n    stream.worker.postMessage({\n      code: 'FLUSH',\n      context: 'thread-stream',\n      id\n    })\n  } catch (err) {\n    stream[kImpl].flushCallbacks.delete(id)\n    destroy(stream, err)\n    process.nextTick(cb, err)\n  }\n}\n\nfunction failPendingFlushCallbacks (stream, err) {\n  const callbacks = stream[kImpl].flushCallbacks\n  if (callbacks.size === 0) {\n    return\n  }\n\n  const flushErr = err || new Error('the worker has exited')\n\n  for (const cb of callbacks.values()) {\n    process.nextTick(cb, flushErr)\n  }\n  callbacks.clear()\n}\n\nfunction error (stream, err) {\n  setImmediate(() => {\n    stream.emit('error', err)\n  })\n}\n\nfunction destroy (stream, err) {\n  if (stream[kImpl].destroyed) {\n    return\n  }\n  stream[kImpl].destroyed = true\n  failPendingFlushCallbacks(stream, err)\n\n  if (err) {\n    stream[kImpl].errored = err\n    error(stream, err)\n  }\n\n  if (!stream.worker.exited) {\n    stream.worker.terminate()\n      .catch(() => {})\n      .then(() => {\n        stream[kImpl].closed = true\n        stream.emit('close')\n      })\n  } else {\n    setImmediate(() => {\n      stream[kImpl].closed = true\n      stream.emit('close')\n    })\n  }\n}\n\nfunction write (stream, maxBytes, cb) {\n  // data is smaller than the shared buffer length\n  const current = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n  let offset = current\n  let remaining = maxBytes\n\n  while (remaining > 0 && stream[kImpl].bufLen !== 0) {\n    const head = stream[kImpl].bufHead\n    const buf = stream[kImpl].buf[head]\n\n    if (buf.length <= remaining) {\n      buf.copy(stream[kImpl].data, offset)\n      offset += buf.length\n      remaining -= buf.length\n      stream[kImpl].bufLen -= buf.length\n      stream[kImpl].bufHead = head + 1\n\n      if (stream[kImpl].bufHead === stream[kImpl].buf.length) {\n        stream[kImpl].buf.length = 0\n        stream[kImpl].bufHead = 0\n      } else if (stream[kImpl].bufHead >= 1024 && stream[kImpl].bufHead * 2 >= stream[kImpl].buf.length) {\n        stream[kImpl].buf.splice(0, stream[kImpl].bufHead)\n        stream[kImpl].bufHead = 0\n      }\n      continue\n    }\n\n    buf.copy(stream[kImpl].data, offset, 0, remaining)\n    stream[kImpl].buf[head] = buf.subarray(remaining)\n    stream[kImpl].bufLen -= remaining\n    offset += remaining\n    remaining = 0\n  }\n\n  updateState(stream, () => {\n    Atomics.store(stream[kImpl].state, WRITE_INDEX, offset)\n  })\n  cb()\n  return true\n}\n\nfunction end (stream) {\n  if (stream[kImpl].ended || !stream[kImpl].ending || stream[kImpl].flushing) {\n    return\n  }\n  stream[kImpl].ended = true\n\n  try {\n    stream.flushSync()\n\n    let readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n    // process._rawDebug('writing index')\n    updateState(stream, () => {\n      Atomics.store(stream[kImpl].state, WRITE_INDEX, -1)\n    })\n    // process._rawDebug(`(end) readIndex (${Atomics.load(stream.state, READ_INDEX)}) writeIndex (${Atomics.load(stream.state, WRITE_INDEX)})`)\n\n    // Wait for the process to complete\n    let spins = 0\n    while (readIndex !== -1) {\n      // process._rawDebug(`read = ${read}`)\n      Atomics.wait(stream[kImpl].state, READ_INDEX, readIndex, 1000)\n      readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n      if (readIndex === -2) {\n        destroy(stream, new Error('end() failed'))\n        return\n      }\n\n      if (++spins === 10) {\n        destroy(stream, new Error('end() took too long (10s)'))\n        return\n      }\n    }\n\n    process.nextTick(() => {\n      stream[kImpl].finished = true\n      stream.emit('finish')\n    })\n  } catch (err) {\n    destroy(stream, err)\n  }\n  // process._rawDebug('end finished...')\n}\n\nfunction writeSync (stream) {\n  const cb = () => {\n    if (stream[kImpl].ending) {\n      end(stream)\n    } else if (stream[kImpl].needDrain) {\n      process.nextTick(drain, stream)\n    }\n  }\n  stream[kImpl].flushing = false\n\n  while (stream[kImpl].bufLen !== 0) {\n    const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n    const leftover = stream[kImpl].data.length - writeIndex\n    if (leftover === 0) {\n      flushSync(stream)\n      resetIndexes(stream)\n      continue\n    } else if (leftover < 0) {\n      // stream should never happen\n      throw new Error('overwritten')\n    }\n\n    write(stream, leftover, cb)\n  }\n}\n\nfunction flushSync (stream) {\n  if (stream[kImpl].flushing) {\n    throw new Error('unable to flush while flushing')\n  }\n\n  // process._rawDebug('flushSync started')\n\n  const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n\n  let spins = 0\n\n  // TODO handle deadlock\n  while (true) {\n    const readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n    if (readIndex === -2) {\n      throw Error('_flushSync failed')\n    }\n\n    // process._rawDebug(`(flushSync) readIndex (${readIndex}) writeIndex (${writeIndex})`)\n    if (readIndex !== writeIndex) {\n      // TODO stream timeouts for some reason.\n      Atomics.wait(stream[kImpl].state, READ_INDEX, readIndex, 1000)\n    } else {\n      break\n    }\n\n    if (++spins === 10) {\n      throw new Error('_flushSync took too long (10s)')\n    }\n  }\n  // process._rawDebug('flushSync finished')\n}\n\nmodule.exports = ThreadStream\n","'use strict'\n\nconst { createRequire } = require('module')\nconst { existsSync } = require('node:fs')\nconst getCallers = require('./caller')\nconst { join, isAbsolute, sep } = require('node:path')\nconst { fileURLToPath } = require('node:url')\nconst sleep = require('atomic-sleep')\nconst onExit = require('on-exit-leak-free')\nconst ThreadStream = require('thread-stream')\n\nfunction setupOnExit (stream) {\n  // This is leak free, it does not leave event handlers\n  onExit.register(stream, autoEnd)\n  onExit.registerBeforeExit(stream, flush)\n\n  stream.on('close', function () {\n    onExit.unregister(stream)\n  })\n}\n\n// Check if preload flags exist in execArgv.\n// During preload phase (require.main undefined), we pass empty execArgv to prevent infinite worker spawning.\n// We don't try to filter and pass other flags because many (like --stack-trace-limit, --tls-cipher-list)\n// aren't valid for worker threads and would cause ERR_WORKER_INVALID_EXEC_ARGV.\nfunction hasPreloadFlags () {\n  const execArgv = process.execArgv\n  for (let i = 0; i < execArgv.length; i++) {\n    const arg = execArgv[i]\n    if (arg === '--import' || arg === '--require' || arg === '-r') {\n      return true\n    }\n    if (arg.startsWith('--import=') || arg.startsWith('--require=') || arg.startsWith('-r=')) {\n      return true\n    }\n  }\n  return false\n}\n\nfunction sanitizeNodeOptions (nodeOptions) {\n  const tokens = nodeOptions.match(/(?:[^\\s\"']+|\"[^\"]*\"|'[^']*')+/g)\n  if (!tokens) {\n    return nodeOptions\n  }\n\n  const sanitized = []\n  let changed = false\n\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i]\n\n    if (token === '--require' || token === '-r' || token === '--import') {\n      const next = tokens[i + 1]\n      if (next && shouldDropPreload(next)) {\n        changed = true\n        i++\n        continue\n      }\n\n      sanitized.push(token)\n      if (next) {\n        sanitized.push(next)\n        i++\n      }\n      continue\n    }\n\n    if (token.startsWith('--require=') || token.startsWith('-r=') || token.startsWith('--import=')) {\n      const value = token.slice(token.indexOf('=') + 1)\n      if (shouldDropPreload(value)) {\n        changed = true\n        continue\n      }\n    }\n\n    sanitized.push(token)\n  }\n\n  return changed ? sanitized.join(' ') : nodeOptions\n}\n\nfunction shouldDropPreload (value) {\n  const unquoted = stripQuotes(value)\n  if (!unquoted) {\n    return false\n  }\n\n  let path = unquoted\n  if (path.startsWith('file://')) {\n    try {\n      path = fileURLToPath(path)\n    } catch {\n      return false\n    }\n  }\n\n  return isAbsolute(path) && !existsSync(path)\n}\n\nfunction stripQuotes (value) {\n  const first = value[0]\n  const last = value[value.length - 1]\n\n  if ((first === '\"' && last === '\"') || (first === \"'\" && last === \"'\")) {\n    return value.slice(1, -1)\n  }\n\n  return value\n}\n\nfunction buildStream (filename, workerData, workerOpts, sync, name) {\n  // When pino is loaded during a preload phase (via --import or --require),\n  // pass empty execArgv to prevent infinite spawning. Each worker would\n  // otherwise re-run the preload, creating another transport.\n  if (!workerOpts.execArgv && hasPreloadFlags() && require.main === undefined) {\n    workerOpts = {\n      ...workerOpts,\n      execArgv: []\n    }\n  }\n\n  if (!workerOpts.env && process.env.NODE_OPTIONS) {\n    const nodeOptions = sanitizeNodeOptions(process.env.NODE_OPTIONS)\n    if (nodeOptions !== process.env.NODE_OPTIONS) {\n      workerOpts = {\n        ...workerOpts,\n        env: {\n          ...process.env,\n          NODE_OPTIONS: nodeOptions\n        }\n      }\n    }\n  }\n\n  workerOpts = { ...workerOpts, name }\n\n  const stream = new ThreadStream({\n    filename,\n    workerData,\n    workerOpts,\n    sync\n  })\n\n  stream.on('ready', onReady)\n  stream.on('close', function () {\n    process.removeListener('exit', onExit)\n  })\n\n  process.on('exit', onExit)\n\n  function onReady () {\n    process.removeListener('exit', onExit)\n    stream.unref()\n\n    if (workerOpts.autoEnd !== false) {\n      setupOnExit(stream)\n    }\n  }\n\n  function onExit () {\n    /* istanbul ignore next */\n    if (stream.closed) {\n      return\n    }\n    stream.flushSync()\n    // Apparently there is a very sporadic race condition\n    // that in certain OS would prevent the messages to be flushed\n    // because the thread might not have been created still.\n    // Unfortunately we need to sleep(100) in this case.\n    sleep(100)\n    stream.end()\n  }\n\n  return stream\n}\n\nfunction autoEnd (stream) {\n  stream.ref()\n  stream.flushSync()\n  stream.end()\n  stream.once('close', function () {\n    stream.unref()\n  })\n}\n\nfunction flush (stream) {\n  stream.flushSync()\n}\n\nfunction transport (fullOptions) {\n  const { pipeline, targets, levels, dedupe, worker = {}, caller = getCallers(), sync = false } = fullOptions\n\n  const options = {\n    ...fullOptions.options\n  }\n\n  // Backwards compatibility\n  const callers = typeof caller === 'string' ? [caller] : caller\n\n  // This will be eventually modified by bundlers\n  const bundlerOverrides = (typeof globalThis === 'object' &&\n    Object.prototype.hasOwnProperty.call(globalThis, '__bundlerPathsOverrides') &&\n    globalThis.__bundlerPathsOverrides &&\n    typeof globalThis.__bundlerPathsOverrides === 'object')\n    ? globalThis.__bundlerPathsOverrides\n    : Object.create(null)\n\n  let target = fullOptions.target\n\n  if (target && targets) {\n    throw new Error('only one of target or targets can be specified')\n  }\n\n  if (targets) {\n    target = bundlerOverrides['pino-worker'] || join(__dirname, 'worker.js')\n    options.targets = targets.filter(dest => dest.target).map((dest) => {\n      return {\n        ...dest,\n        target: fixTarget(dest.target)\n      }\n    })\n    options.pipelines = targets.filter(dest => dest.pipeline).map((dest) => {\n      return dest.pipeline.map((t) => {\n        return {\n          ...t,\n          level: dest.level, // duplicate the pipeline `level` property defined in the upper level\n          target: fixTarget(t.target)\n        }\n      })\n    })\n  } else if (pipeline) {\n    target = bundlerOverrides['pino-worker'] || join(__dirname, 'worker.js')\n    options.pipelines = [pipeline.map((dest) => {\n      return {\n        ...dest,\n        target: fixTarget(dest.target)\n      }\n    })]\n  }\n\n  if (levels) {\n    options.levels = levels\n  }\n\n  if (dedupe) {\n    options.dedupe = dedupe\n  }\n\n  options.pinoWillSendConfig = true\n\n  const name = (targets || pipeline) ? 'pino.transport' : target\n  return buildStream(fixTarget(target), options, worker, sync, name)\n\n  function fixTarget (origin) {\n    origin = bundlerOverrides[origin] || origin\n\n    if (isAbsolute(origin) || origin.indexOf('file://') === 0) {\n      return origin\n    }\n\n    if (origin === 'pino/file') {\n      return join(__dirname, '..', 'file.js')\n    }\n\n    let fixTarget\n\n    for (const filePath of callers) {\n      try {\n        const context = filePath === 'node:repl'\n          ? process.cwd() + sep\n          : filePath\n\n        fixTarget = createRequire(context).resolve(origin)\n        break\n      } catch (err) {\n        // Silent catch\n        continue\n      }\n    }\n\n    if (!fixTarget) {\n      throw new Error(`unable to determine transport target for \"${origin}\"`)\n    }\n\n    return fixTarget\n  }\n}\n\nmodule.exports = transport\n","'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst diagChan = require('node:diagnostics_channel')\nconst format = require('quick-format-unescaped')\nconst { mapHttpRequest, mapHttpResponse } = require('pino-std-serializers')\nconst SonicBoom = require('sonic-boom')\nconst onExit = require('on-exit-leak-free')\nconst {\n  lsCacheSym,\n  chindingsSym,\n  writeSym,\n  serializersSym,\n  formatOptsSym,\n  endSym,\n  stringifiersSym,\n  stringifySym,\n  stringifySafeSym,\n  wildcardFirstSym,\n  nestedKeySym,\n  formattersSym,\n  messageKeySym,\n  errorKeySym,\n  nestedKeyStrSym,\n  msgPrefixSym\n} = require('./symbols')\nconst { isMainThread } = require('worker_threads')\nconst transport = require('./transport')\nconst [nodeMajor] = process.versions.node.split('.').map(v => Number(v))\n\nconst asJsonChan = diagChan.tracingChannel('pino_asJson')\n\n// JSON.stringify is faster in node 25+.\nconst asString = nodeMajor >= 25 ? str => JSON.stringify(str) : _asString\n\nfunction noop () {\n}\n\nfunction genLog (level, hook) {\n  if (!hook) return LOG\n\n  return function hookWrappedLog (...args) {\n    hook.call(this, args, LOG, level)\n  }\n\n  function LOG (o, ...n) {\n    if (typeof o === 'object') {\n      let msg = o\n      if (o !== null) {\n        if (o.method && o.headers && o.socket) {\n          o = mapHttpRequest(o)\n        } else if (typeof o.setHeader === 'function') {\n          o = mapHttpResponse(o)\n        }\n      }\n      let formatParams\n      if (msg === null && n.length === 0) {\n        formatParams = [null]\n      } else {\n        msg = n.shift()\n        formatParams = n\n      }\n      // We do not use a coercive check for `msg` as it is\n      // measurably slower than the explicit checks.\n      if (typeof this[msgPrefixSym] === 'string' && msg !== undefined && msg !== null) {\n        msg = this[msgPrefixSym] + msg\n      }\n      this[writeSym](o, format(msg, formatParams, this[formatOptsSym]), level)\n    } else {\n      let msg = o === undefined ? n.shift() : o\n\n      // We do not use a coercive check for `msg` as it is\n      // measurably slower than the explicit checks.\n      if (typeof this[msgPrefixSym] === 'string' && msg !== undefined && msg !== null) {\n        msg = this[msgPrefixSym] + msg\n      }\n      this[writeSym](null, format(msg, n, this[formatOptsSym]), level)\n    }\n  }\n}\n\n// magically escape strings for json\n// relying on their charCodeAt\n// everything below 32 needs JSON.stringify()\n// 34 and 92 happens all the time, so we\n// have a fast case for them\nfunction _asString (str) {\n  let result = ''\n  let last = 0\n  let found = false\n  let point = 255\n  const l = str.length\n  if (l > 100) {\n    return JSON.stringify(str)\n  }\n  for (var i = 0; i < l && point >= 32; i++) {\n    point = str.charCodeAt(i)\n    if (point === 34 || point === 92) {\n      result += str.slice(last, i) + '\\\\'\n      last = i\n      found = true\n    }\n  }\n  if (!found) {\n    result = str\n  } else {\n    result += str.slice(last)\n  }\n  return point < 32 ? JSON.stringify(str) : '\"' + result + '\"'\n}\n\n/**\n * `asJson` wraps `_asJson` in order to facilitate generating diagnostics.\n *\n * @param {object} obj The merging object passed to the log method.\n * @param {string} msg The log message passed to the log method.\n * @param {number} num The log level number.\n * @param {number} time The log time in milliseconds.\n *\n * @returns {string}\n */\nfunction asJson (obj, msg, num, time) {\n  if (asJsonChan.hasSubscribers === false) {\n    return _asJson.call(this, obj, msg, num, time)\n  }\n\n  const store = { instance: this, arguments }\n  return asJsonChan.traceSync(_asJson, store, this, obj, msg, num, time)\n}\n\n/**\n * `_asJson` parses all collected data and generates the finalized newline\n * delimited JSON string.\n *\n * @param {object} obj The merging object passed to the log method.\n * @param {string} msg The log message passed to the log method.\n * @param {number} num The log level number.\n * @param {number} time The log time in milliseconds.\n *\n * @returns {string} The finalized log string terminated with a newline.\n * @private\n */\nfunction _asJson (obj, msg, num, time) {\n  const stringify = this[stringifySym]\n  const stringifySafe = this[stringifySafeSym]\n  const stringifiers = this[stringifiersSym]\n  const end = this[endSym]\n  const chindings = this[chindingsSym]\n  const serializers = this[serializersSym]\n  const formatters = this[formattersSym]\n  const messageKey = this[messageKeySym]\n  const errorKey = this[errorKeySym]\n  let data = this[lsCacheSym][num] + time\n\n  // we need the child bindings added to the output first so instance logged\n  // objects can take precedence when JSON.parse-ing the resulting log line\n  data = data + chindings\n\n  let value\n  if (formatters.log) {\n    obj = formatters.log(obj)\n  }\n  const wildcardStringifier = stringifiers[wildcardFirstSym]\n  let propStr = ''\n  for (const key in obj) {\n    value = obj[key]\n    if (Object.prototype.hasOwnProperty.call(obj, key) && value !== undefined) {\n      if (serializers[key]) {\n        value = serializers[key](value)\n      } else if (key === errorKey && serializers.err) {\n        value = serializers.err(value)\n      }\n\n      const stringifier = stringifiers[key] || wildcardStringifier\n\n      switch (typeof value) {\n        case 'undefined':\n        case 'function':\n          continue\n        case 'number':\n          /* eslint no-fallthrough: \"off\" */\n          if (Number.isFinite(value) === false) {\n            value = null\n          }\n        // this case explicitly falls through to the next one\n        case 'boolean':\n          if (stringifier) value = stringifier(value)\n          break\n        case 'string':\n          value = (stringifier || asString)(value)\n          break\n        default:\n          value = (stringifier || stringify)(value, stringifySafe)\n      }\n      if (value === undefined) continue\n      const strKey = asString(key)\n      propStr += ',' + strKey + ':' + value\n    }\n  }\n\n  let msgStr = ''\n  if (msg !== undefined) {\n    value = serializers[messageKey] ? serializers[messageKey](msg) : msg\n    const stringifier = stringifiers[messageKey] || wildcardStringifier\n\n    switch (typeof value) {\n      case 'function':\n        break\n      case 'number':\n        if (Number.isFinite(value) === false) {\n          value = null\n        }\n      // this case explicitly falls through to the next one\n      case 'boolean':\n        if (stringifier) value = stringifier(value)\n        msgStr = ',\"' + messageKey + '\":' + value\n        break\n      case 'string':\n        value = (stringifier || asString)(value)\n        msgStr = ',\"' + messageKey + '\":' + value\n        break\n      default:\n        value = (stringifier || stringify)(value, stringifySafe)\n        msgStr = ',\"' + messageKey + '\":' + value\n    }\n  }\n\n  if (this[nestedKeySym] && propStr) {\n    // place all the obj properties under the specified key\n    // the nested key is already formatted from the constructor\n    return data + this[nestedKeyStrSym] + propStr.slice(1) + '}' + msgStr + end\n  } else {\n    return data + propStr + msgStr + end\n  }\n}\n\nfunction asChindings (instance, bindings) {\n  let value\n  let data = instance[chindingsSym]\n  const stringify = instance[stringifySym]\n  const stringifySafe = instance[stringifySafeSym]\n  const stringifiers = instance[stringifiersSym]\n  const wildcardStringifier = stringifiers[wildcardFirstSym]\n  const serializers = instance[serializersSym]\n  const formatter = instance[formattersSym].bindings\n  bindings = formatter(bindings)\n\n  for (const key in bindings) {\n    value = bindings[key]\n    const valid = (key.length < 5 || (key !== 'level' &&\n      key !== 'serializers' &&\n      key !== 'formatters' &&\n      key !== 'customLevels')) &&\n      bindings.hasOwnProperty(key) &&\n      value !== undefined\n    if (valid === true) {\n      value = serializers[key] ? serializers[key](value) : value\n      value = (stringifiers[key] || wildcardStringifier || stringify)(value, stringifySafe)\n      if (value === undefined) continue\n      data += ',\"' + key + '\":' + value\n    }\n  }\n  return data\n}\n\nfunction hasBeenTampered (stream) {\n  return stream.write !== stream.constructor.prototype.write\n}\n\nfunction buildSafeSonicBoom (opts) {\n  const stream = new SonicBoom(opts)\n  stream.on('error', filterBrokenPipe)\n  // If we are sync: false, we must flush on exit\n  if (!opts.sync && isMainThread) {\n    onExit.register(stream, autoEnd)\n\n    stream.on('close', function () {\n      onExit.unregister(stream)\n    })\n  }\n  return stream\n\n  function filterBrokenPipe (err) {\n    // Impossible to replicate across all operating systems\n    /* istanbul ignore next */\n    if (err.code === 'EPIPE') {\n      // If we get EPIPE, we should stop logging here\n      // however we have no control to the consumer of\n      // SonicBoom, so we just overwrite the write method\n      stream.write = noop\n      stream.end = noop\n      stream.flushSync = noop\n      stream.destroy = noop\n      return\n    }\n    stream.removeListener('error', filterBrokenPipe)\n    stream.emit('error', err)\n  }\n}\n\nfunction autoEnd (stream, eventName) {\n  // This check is needed only on some platforms\n  /* istanbul ignore next */\n  if (stream.destroyed) {\n    return\n  }\n\n  if (eventName === 'beforeExit') {\n    // We still have an event loop, let's use it\n    stream.flush()\n    stream.on('drain', function () {\n      stream.end()\n    })\n  } else {\n    // For some reason istanbul is not detecting this, but it's there\n    /* istanbul ignore next */\n    // We do not have an event loop, so flush synchronously\n    stream.flushSync()\n  }\n}\n\nfunction createArgsNormalizer (defaultOptions) {\n  return function normalizeArgs (instance, caller, opts = {}, stream) {\n    // support stream as a string\n    if (typeof opts === 'string') {\n      stream = buildSafeSonicBoom({ dest: opts })\n      opts = {}\n    } else if (typeof stream === 'string') {\n      if (opts && opts.transport) {\n        throw Error('only one of option.transport or stream can be specified')\n      }\n      stream = buildSafeSonicBoom({ dest: stream })\n    } else if (opts instanceof SonicBoom || opts.writable || opts._writableState) {\n      stream = opts\n      opts = {}\n    } else if (opts.transport) {\n      if (opts.transport instanceof SonicBoom || opts.transport.writable || opts.transport._writableState) {\n        throw Error('option.transport do not allow stream, please pass to option directly. e.g. pino(transport)')\n      }\n      if (opts.transport.targets && opts.transport.targets.length && opts.formatters && typeof opts.formatters.level === 'function') {\n        throw Error('option.transport.targets do not allow custom level formatters')\n      }\n\n      let customLevels\n      if (opts.customLevels) {\n        customLevels = opts.useOnlyCustomLevels ? opts.customLevels : Object.assign({}, opts.levels, opts.customLevels)\n      }\n      stream = transport({ caller, ...opts.transport, levels: customLevels })\n    }\n    opts = Object.assign({}, defaultOptions, opts)\n    opts.serializers = Object.assign({}, defaultOptions.serializers, opts.serializers)\n    opts.formatters = Object.assign({}, defaultOptions.formatters, opts.formatters)\n\n    if (opts.prettyPrint) {\n      throw new Error('prettyPrint option is no longer supported, see the pino-pretty package (https://github.com/pinojs/pino-pretty)')\n    }\n\n    const { enabled, onChild } = opts\n    if (enabled === false) opts.level = 'silent'\n    if (!onChild) opts.onChild = noop\n    if (!stream) {\n      if (!hasBeenTampered(process.stdout)) {\n        // If process.stdout.fd is undefined, it means that we are running\n        // in a worker thread. Let's assume we are logging to file descriptor 1.\n        stream = buildSafeSonicBoom({ fd: process.stdout.fd || 1 })\n      } else {\n        stream = process.stdout\n      }\n    }\n    return { opts, stream }\n  }\n}\n\nfunction stringify (obj, stringifySafeFn) {\n  try {\n    return JSON.stringify(obj)\n  } catch (_) {\n    try {\n      const stringify = stringifySafeFn || this[stringifySafeSym]\n      return stringify(obj)\n    } catch (_) {\n      return '\"[unable to serialize, circular reference is too complex to analyze]\"'\n    }\n  }\n}\n\nfunction buildFormatters (level, bindings, log) {\n  return {\n    level,\n    bindings,\n    log\n  }\n}\n\n/**\n * Convert a string integer file descriptor to a proper native integer\n * file descriptor.\n *\n * @param {string} destination The file descriptor string to attempt to convert.\n *\n * @returns {Number}\n */\nfunction normalizeDestFileDescriptor (destination) {\n  const fd = Number(destination)\n  if (typeof destination === 'string' && Number.isFinite(fd)) {\n    return fd\n  }\n  // destination could be undefined if we are in a worker\n  if (destination === undefined) {\n    // This is stdout in UNIX systems\n    return 1\n  }\n  return destination\n}\n\nmodule.exports = {\n  noop,\n  buildSafeSonicBoom,\n  asChindings,\n  asJson,\n  genLog,\n  createArgsNormalizer,\n  stringify,\n  buildFormatters,\n  normalizeDestFileDescriptor\n}\n","/**\n * Represents default log level values\n *\n * @enum {number}\n */\nconst DEFAULT_LEVELS = {\n  trace: 10,\n  debug: 20,\n  info: 30,\n  warn: 40,\n  error: 50,\n  fatal: 60\n}\n\n/**\n * Represents sort order direction: `ascending` or `descending`\n *\n * @enum {string}\n */\nconst SORTING_ORDER = {\n  ASC: 'ASC',\n  DESC: 'DESC'\n}\n\nmodule.exports = {\n  DEFAULT_LEVELS,\n  SORTING_ORDER\n}\n","'use strict'\n/* eslint no-prototype-builtins: 0 */\nconst {\n  lsCacheSym,\n  levelValSym,\n  useOnlyCustomLevelsSym,\n  streamSym,\n  formattersSym,\n  hooksSym,\n  levelCompSym\n} = require('./symbols')\nconst { noop, genLog } = require('./tools')\nconst { DEFAULT_LEVELS, SORTING_ORDER } = require('./constants')\n\nconst levelMethods = {\n  fatal: (hook) => {\n    const logFatal = genLog(DEFAULT_LEVELS.fatal, hook)\n    return function (...args) {\n      const stream = this[streamSym]\n      logFatal.call(this, ...args)\n      if (typeof stream.flushSync === 'function') {\n        try {\n          stream.flushSync()\n        } catch (e) {\n          // https://github.com/pinojs/pino/pull/740#discussion_r346788313\n        }\n      }\n    }\n  },\n  error: (hook) => genLog(DEFAULT_LEVELS.error, hook),\n  warn: (hook) => genLog(DEFAULT_LEVELS.warn, hook),\n  info: (hook) => genLog(DEFAULT_LEVELS.info, hook),\n  debug: (hook) => genLog(DEFAULT_LEVELS.debug, hook),\n  trace: (hook) => genLog(DEFAULT_LEVELS.trace, hook)\n}\n\nconst nums = Object.keys(DEFAULT_LEVELS).reduce((o, k) => {\n  o[DEFAULT_LEVELS[k]] = k\n  return o\n}, {})\n\nconst initialLsCache = Object.keys(nums).reduce((o, k) => {\n  o[k] = '{\"level\":' + Number(k)\n  return o\n}, {})\n\nfunction genLsCache (instance) {\n  const formatter = instance[formattersSym].level\n  const { labels } = instance.levels\n  const cache = {}\n  for (const label in labels) {\n    const level = formatter(labels[label], Number(label))\n    cache[label] = JSON.stringify(level).slice(0, -1)\n  }\n  instance[lsCacheSym] = cache\n  return instance\n}\n\nfunction isStandardLevel (level, useOnlyCustomLevels) {\n  if (useOnlyCustomLevels) {\n    return false\n  }\n\n  switch (level) {\n    case 'fatal':\n    case 'error':\n    case 'warn':\n    case 'info':\n    case 'debug':\n    case 'trace':\n      return true\n    default:\n      return false\n  }\n}\n\nfunction setLevel (level) {\n  const { labels, values } = this.levels\n  if (typeof level === 'number') {\n    if (labels[level] === undefined) throw Error('unknown level value' + level)\n    level = labels[level]\n  }\n  if (values[level] === undefined) throw Error('unknown level ' + level)\n  const preLevelVal = this[levelValSym]\n  const levelVal = this[levelValSym] = values[level]\n  const useOnlyCustomLevelsVal = this[useOnlyCustomLevelsSym]\n  const levelComparison = this[levelCompSym]\n  const hook = this[hooksSym].logMethod\n\n  for (const key in values) {\n    if (levelComparison(values[key], levelVal) === false) {\n      this[key] = noop\n      continue\n    }\n    this[key] = isStandardLevel(key, useOnlyCustomLevelsVal) ? levelMethods[key](hook) : genLog(values[key], hook)\n  }\n\n  this.emit(\n    'level-change',\n    level,\n    levelVal,\n    labels[preLevelVal],\n    preLevelVal,\n    this\n  )\n}\n\nfunction getLevel (level) {\n  const { levels, levelVal } = this\n  // protection against potential loss of Pino scope from serializers (edge case with circular refs - https://github.com/pinojs/pino/issues/833)\n  return (levels && levels.labels) ? levels.labels[levelVal] : ''\n}\n\nfunction isLevelEnabled (logLevel) {\n  const { values } = this.levels\n  const logLevelVal = values[logLevel]\n  return logLevelVal !== undefined && this[levelCompSym](logLevelVal, this[levelValSym])\n}\n\n/**\n * Determine if the given `current` level is enabled by comparing it\n * against the current threshold (`expected`).\n *\n * @param {SORTING_ORDER} direction comparison direction \"ASC\" or \"DESC\"\n * @param {number} current current log level number representation\n * @param {number} expected threshold value to compare with\n * @returns {boolean}\n */\nfunction compareLevel (direction, current, expected) {\n  if (direction === SORTING_ORDER.DESC) {\n    return current <= expected\n  }\n\n  return current >= expected\n}\n\n/**\n * Create a level comparison function based on `levelComparison`\n * it could a default function which compares levels either in \"ascending\" or \"descending\" order or custom comparison function\n *\n * @param {SORTING_ORDER | Function} levelComparison sort levels order direction or custom comparison function\n * @returns Function\n */\nfunction genLevelComparison (levelComparison) {\n  if (typeof levelComparison === 'string') {\n    return compareLevel.bind(null, levelComparison)\n  }\n\n  return levelComparison\n}\n\nfunction mappings (customLevels = null, useOnlyCustomLevels = false) {\n  const customNums = customLevels\n    /* eslint-disable */\n    ? Object.keys(customLevels).reduce((o, k) => {\n        o[customLevels[k]] = k\n        return o\n      }, {})\n    : null\n    /* eslint-enable */\n\n  const labels = Object.assign(\n    Object.create(Object.prototype, { Infinity: { value: 'silent' } }),\n    useOnlyCustomLevels ? null : nums,\n    customNums\n  )\n  const values = Object.assign(\n    Object.create(Object.prototype, { silent: { value: Infinity } }),\n    useOnlyCustomLevels ? null : DEFAULT_LEVELS,\n    customLevels\n  )\n  return { labels, values }\n}\n\nfunction assertDefaultLevelFound (defaultLevel, customLevels, useOnlyCustomLevels) {\n  if (typeof defaultLevel === 'number') {\n    const values = [].concat(\n      Object.keys(customLevels || {}).map(key => customLevels[key]),\n      useOnlyCustomLevels ? [] : Object.keys(nums).map(level => +level),\n      Infinity\n    )\n    if (!values.includes(defaultLevel)) {\n      throw Error(`default level:${defaultLevel} must be included in custom levels`)\n    }\n    return\n  }\n\n  const labels = Object.assign(\n    Object.create(Object.prototype, { silent: { value: Infinity } }),\n    useOnlyCustomLevels ? null : DEFAULT_LEVELS,\n    customLevels\n  )\n  if (!(defaultLevel in labels)) {\n    throw Error(`default level:${defaultLevel} must be included in custom levels`)\n  }\n}\n\nfunction assertNoLevelCollisions (levels, customLevels) {\n  const { labels, values } = levels\n  for (const k in customLevels) {\n    if (k in values) {\n      throw Error('levels cannot be overridden')\n    }\n    if (customLevels[k] in labels) {\n      throw Error('pre-existing level values cannot be used for new levels')\n    }\n  }\n}\n\n/**\n * Validates whether `levelComparison` is correct\n *\n * @throws Error\n * @param {SORTING_ORDER | Function} levelComparison - value to validate\n * @returns\n */\nfunction assertLevelComparison (levelComparison) {\n  if (typeof levelComparison === 'function') {\n    return\n  }\n\n  if (typeof levelComparison === 'string' && Object.values(SORTING_ORDER).includes(levelComparison)) {\n    return\n  }\n\n  throw new Error('Levels comparison should be one of \"ASC\", \"DESC\" or \"function\" type')\n}\n\nmodule.exports = {\n  initialLsCache,\n  genLsCache,\n  levelMethods,\n  getLevel,\n  setLevel,\n  isLevelEnabled,\n  mappings,\n  assertNoLevelCollisions,\n  assertDefaultLevelFound,\n  genLevelComparison,\n  assertLevelComparison\n}\n","'use strict'\n\nmodule.exports = { version: '10.3.1' }\n","'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst { EventEmitter } = require('node:events')\nconst {\n  lsCacheSym,\n  levelValSym,\n  setLevelSym,\n  getLevelSym,\n  chindingsSym,\n  mixinSym,\n  asJsonSym,\n  writeSym,\n  mixinMergeStrategySym,\n  timeSym,\n  timeSliceIndexSym,\n  streamSym,\n  serializersSym,\n  formattersSym,\n  errorKeySym,\n  messageKeySym,\n  useOnlyCustomLevelsSym,\n  needsMetadataGsym,\n  redactFmtSym,\n  stringifySym,\n  formatOptsSym,\n  stringifiersSym,\n  msgPrefixSym,\n  hooksSym\n} = require('./symbols')\nconst {\n  getLevel,\n  setLevel,\n  isLevelEnabled,\n  mappings,\n  initialLsCache,\n  genLsCache,\n  assertNoLevelCollisions\n} = require('./levels')\nconst {\n  asChindings,\n  asJson,\n  buildFormatters,\n  stringify,\n  noop\n} = require('./tools')\nconst {\n  version\n} = require('./meta')\nconst redaction = require('./redaction')\n\n// note: use of class is satirical\n// https://github.com/pinojs/pino/pull/433#pullrequestreview-127703127\nconst constructor = class Pino {}\nconst prototype = {\n  constructor,\n  child,\n  bindings,\n  setBindings,\n  flush,\n  isLevelEnabled,\n  version,\n  get level () { return this[getLevelSym]() },\n  set level (lvl) { this[setLevelSym](lvl) },\n  get levelVal () { return this[levelValSym] },\n  set levelVal (n) { throw Error('levelVal is read-only') },\n  get msgPrefix () { return this[msgPrefixSym] },\n  get [Symbol.toStringTag] () { return 'Pino' },\n  [lsCacheSym]: initialLsCache,\n  [writeSym]: write,\n  [asJsonSym]: asJson,\n  [getLevelSym]: getLevel,\n  [setLevelSym]: setLevel\n}\n\nObject.setPrototypeOf(prototype, EventEmitter.prototype)\n\n// exporting and consuming the prototype object using factory pattern fixes scoping issues with getters when serializing\nmodule.exports = function () {\n  return Object.create(prototype)\n}\n\nconst resetChildingsFormatter = bindings => bindings\nfunction child (bindings, options) {\n  if (!bindings) {\n    throw Error('missing bindings for child Pino')\n  }\n  const serializers = this[serializersSym]\n  const formatters = this[formattersSym]\n  const instance = Object.create(this)\n\n  // If an `options` object was not supplied, we can improve\n  // the performance of child creation by skipping\n  // the checks for set options and simply return\n  // a baseline instance.\n  if (options == null) {\n    if (instance[formattersSym].bindings !== resetChildingsFormatter) {\n      instance[formattersSym] = buildFormatters(\n        formatters.level,\n        resetChildingsFormatter,\n        formatters.log\n      )\n    }\n\n    instance[chindingsSym] = asChindings(instance, bindings)\n\n    if (this.onChild !== noop) {\n      this.onChild(instance)\n    }\n\n    return instance\n  }\n\n  if (options.hasOwnProperty('serializers') === true) {\n    instance[serializersSym] = Object.create(null)\n\n    for (const k in serializers) {\n      instance[serializersSym][k] = serializers[k]\n    }\n    const parentSymbols = Object.getOwnPropertySymbols(serializers)\n    /* eslint no-var: off */\n    for (var i = 0; i < parentSymbols.length; i++) {\n      const ks = parentSymbols[i]\n      instance[serializersSym][ks] = serializers[ks]\n    }\n\n    for (const bk in options.serializers) {\n      instance[serializersSym][bk] = options.serializers[bk]\n    }\n    const bindingsSymbols = Object.getOwnPropertySymbols(options.serializers)\n    for (var bi = 0; bi < bindingsSymbols.length; bi++) {\n      const bks = bindingsSymbols[bi]\n      instance[serializersSym][bks] = options.serializers[bks]\n    }\n  } else instance[serializersSym] = serializers\n  if (options.hasOwnProperty('formatters')) {\n    const { level, bindings: chindings, log } = options.formatters\n    instance[formattersSym] = buildFormatters(\n      level || formatters.level,\n      chindings || resetChildingsFormatter,\n      log || formatters.log\n    )\n  } else {\n    instance[formattersSym] = buildFormatters(\n      formatters.level,\n      resetChildingsFormatter,\n      formatters.log\n    )\n  }\n  if (options.hasOwnProperty('customLevels') === true) {\n    assertNoLevelCollisions(this.levels, options.customLevels)\n    instance.levels = mappings(options.customLevels, instance[useOnlyCustomLevelsSym])\n    genLsCache(instance)\n  }\n\n  // redact must place before asChindings and only replace if exist\n  if ((typeof options.redact === 'object' && options.redact !== null) || Array.isArray(options.redact)) {\n    instance.redact = options.redact // replace redact directly\n    const stringifiers = redaction(instance.redact, stringify)\n    const formatOpts = { stringify: stringifiers[redactFmtSym] }\n    instance[stringifySym] = stringify\n    instance[stringifiersSym] = stringifiers\n    instance[formatOptsSym] = formatOpts\n  }\n\n  if (typeof options.msgPrefix === 'string') {\n    instance[msgPrefixSym] = (this[msgPrefixSym] || '') + options.msgPrefix\n  }\n\n  instance[chindingsSym] = asChindings(instance, bindings)\n  if ((options.level !== undefined && options.level !== this.level) || options.hasOwnProperty('customLevels')) {\n    const childLevel = options.level || this.level\n    instance[setLevelSym](childLevel)\n  }\n  this.onChild(instance)\n  return instance\n}\n\nfunction bindings () {\n  const chindings = this[chindingsSym]\n  const chindingsJson = `{${chindings.substr(1)}}` // at least contains ,\"pid\":7068,\"hostname\":\"myMac\"\n  const bindingsFromJson = JSON.parse(chindingsJson)\n  delete bindingsFromJson.pid\n  delete bindingsFromJson.hostname\n  return bindingsFromJson\n}\n\nfunction setBindings (newBindings) {\n  const chindings = asChindings(this, newBindings)\n  this[chindingsSym] = chindings\n}\n\n/**\n * Default strategy for creating `mergeObject` from arguments and the result from `mixin()`.\n * Fields from `mergeObject` have higher priority in this strategy.\n *\n * @param {Object} mergeObject The object a user has supplied to the logging function.\n * @param {Object} mixinObject The result of the `mixin` method.\n * @return {Object}\n */\nfunction defaultMixinMergeStrategy (mergeObject, mixinObject) {\n  return Object.assign(mixinObject, mergeObject)\n}\n\nfunction write (_obj, msg, num) {\n  const t = this[timeSym]()\n  const mixin = this[mixinSym]\n  const errorKey = this[errorKeySym]\n  const messageKey = this[messageKeySym]\n  const mixinMergeStrategy = this[mixinMergeStrategySym] || defaultMixinMergeStrategy\n  let obj\n  const streamWriteHook = this[hooksSym].streamWrite\n\n  if (_obj === undefined || _obj === null) {\n    obj = {}\n  } else if (_obj instanceof Error) {\n    obj = { [errorKey]: _obj }\n    if (msg === undefined) {\n      msg = _obj.message\n    }\n  } else {\n    obj = _obj\n    if (msg === undefined && _obj[messageKey] === undefined && _obj[errorKey]) {\n      msg = _obj[errorKey].message\n    }\n  }\n\n  if (mixin) {\n    obj = mixinMergeStrategy(obj, mixin(obj, num, this))\n  }\n\n  const s = this[asJsonSym](obj, msg, num, t)\n\n  const stream = this[streamSym]\n  if (stream[needsMetadataGsym] === true) {\n    stream.lastLevel = num\n    stream.lastObj = obj\n    stream.lastMsg = msg\n    stream.lastTime = t.slice(this[timeSliceIndexSym])\n    stream.lastLogger = this // for child loggers\n  }\n  stream.write(streamWriteHook ? streamWriteHook(s) : s)\n}\n\nfunction flush (cb) {\n  if (cb != null && typeof cb !== 'function') {\n    throw Error('callback must be a function')\n  }\n\n  const stream = this[streamSym]\n\n  if (typeof stream.flush === 'function') {\n    stream.flush(cb || noop)\n  } else if (cb) cb()\n}\n","'use strict'\n\nconst { hasOwnProperty } = Object.prototype\n\nconst stringify = configure()\n\n// @ts-expect-error\nstringify.configure = configure\n// @ts-expect-error\nstringify.stringify = stringify\n\n// @ts-expect-error\nstringify.default = stringify\n\n// @ts-expect-error used for named export\nexports.stringify = stringify\n// @ts-expect-error used for named export\nexports.configure = configure\n\nmodule.exports = stringify\n\n// eslint-disable-next-line no-control-regex\nconst strEscapeSequencesRegExp = /[\\u0000-\\u001f\\u0022\\u005c\\ud800-\\udfff]/\n\n// Escape C0 control characters, double quotes, the backslash and every code\n// unit with a numeric value in the inclusive range 0xD800 to 0xDFFF.\nfunction strEscape (str) {\n  // Some magic numbers that worked out fine while benchmarking with v8 8.0\n  if (str.length < 5000 && !strEscapeSequencesRegExp.test(str)) {\n    return `\"${str}\"`\n  }\n  return JSON.stringify(str)\n}\n\nfunction sort (array, comparator) {\n  // Insertion sort is very efficient for small input sizes, but it has a bad\n  // worst case complexity. Thus, use native array sort for bigger values.\n  if (array.length > 2e2 || comparator) {\n    return array.sort(comparator)\n  }\n  for (let i = 1; i < array.length; i++) {\n    const currentValue = array[i]\n    let position = i\n    while (position !== 0 && array[position - 1] > currentValue) {\n      array[position] = array[position - 1]\n      position--\n    }\n    array[position] = currentValue\n  }\n  return array\n}\n\nconst typedArrayPrototypeGetSymbolToStringTag =\n  Object.getOwnPropertyDescriptor(\n    Object.getPrototypeOf(\n      Object.getPrototypeOf(\n        new Int8Array()\n      )\n    ),\n    Symbol.toStringTag\n  ).get\n\nfunction isTypedArrayWithEntries (value) {\n  return typedArrayPrototypeGetSymbolToStringTag.call(value) !== undefined && value.length !== 0\n}\n\nfunction stringifyTypedArray (array, separator, maximumBreadth) {\n  if (array.length < maximumBreadth) {\n    maximumBreadth = array.length\n  }\n  const whitespace = separator === ',' ? '' : ' '\n  let res = `\"0\":${whitespace}${array[0]}`\n  for (let i = 1; i < maximumBreadth; i++) {\n    res += `${separator}\"${i}\":${whitespace}${array[i]}`\n  }\n  return res\n}\n\nfunction getCircularValueOption (options) {\n  if (hasOwnProperty.call(options, 'circularValue')) {\n    const circularValue = options.circularValue\n    if (typeof circularValue === 'string') {\n      return `\"${circularValue}\"`\n    }\n    if (circularValue == null) {\n      return circularValue\n    }\n    if (circularValue === Error || circularValue === TypeError) {\n      return {\n        toString () {\n          throw new TypeError('Converting circular structure to JSON')\n        }\n      }\n    }\n    throw new TypeError('The \"circularValue\" argument must be of type string or the value null or undefined')\n  }\n  return '\"[Circular]\"'\n}\n\nfunction getDeterministicOption (options) {\n  let value\n  if (hasOwnProperty.call(options, 'deterministic')) {\n    value = options.deterministic\n    if (typeof value !== 'boolean' && typeof value !== 'function') {\n      throw new TypeError('The \"deterministic\" argument must be of type boolean or comparator function')\n    }\n  }\n  return value === undefined ? true : value\n}\n\nfunction getBooleanOption (options, key) {\n  let value\n  if (hasOwnProperty.call(options, key)) {\n    value = options[key]\n    if (typeof value !== 'boolean') {\n      throw new TypeError(`The \"${key}\" argument must be of type boolean`)\n    }\n  }\n  return value === undefined ? true : value\n}\n\nfunction getPositiveIntegerOption (options, key) {\n  let value\n  if (hasOwnProperty.call(options, key)) {\n    value = options[key]\n    if (typeof value !== 'number') {\n      throw new TypeError(`The \"${key}\" argument must be of type number`)\n    }\n    if (!Number.isInteger(value)) {\n      throw new TypeError(`The \"${key}\" argument must be an integer`)\n    }\n    if (value < 1) {\n      throw new RangeError(`The \"${key}\" argument must be >= 1`)\n    }\n  }\n  return value === undefined ? Infinity : value\n}\n\nfunction getItemCount (number) {\n  if (number === 1) {\n    return '1 item'\n  }\n  return `${number} items`\n}\n\nfunction getUniqueReplacerSet (replacerArray) {\n  const replacerSet = new Set()\n  for (const value of replacerArray) {\n    if (typeof value === 'string' || typeof value === 'number') {\n      replacerSet.add(String(value))\n    }\n  }\n  return replacerSet\n}\n\nfunction getStrictOption (options) {\n  if (hasOwnProperty.call(options, 'strict')) {\n    const value = options.strict\n    if (typeof value !== 'boolean') {\n      throw new TypeError('The \"strict\" argument must be of type boolean')\n    }\n    if (value) {\n      return (value) => {\n        let message = `Object can not safely be stringified. Received type ${typeof value}`\n        if (typeof value !== 'function') message += ` (${value.toString()})`\n        throw new Error(message)\n      }\n    }\n  }\n}\n\nfunction configure (options) {\n  options = { ...options }\n  const fail = getStrictOption(options)\n  if (fail) {\n    if (options.bigint === undefined) {\n      options.bigint = false\n    }\n    if (!('circularValue' in options)) {\n      options.circularValue = Error\n    }\n  }\n  const circularValue = getCircularValueOption(options)\n  const bigint = getBooleanOption(options, 'bigint')\n  const deterministic = getDeterministicOption(options)\n  const comparator = typeof deterministic === 'function' ? deterministic : undefined\n  const maximumDepth = getPositiveIntegerOption(options, 'maximumDepth')\n  const maximumBreadth = getPositiveIntegerOption(options, 'maximumBreadth')\n\n  function stringifyFnReplacer (key, parent, stack, replacer, spacer, indentation) {\n    let value = parent[key]\n\n    if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n      value = value.toJSON(key)\n    }\n    value = replacer.call(parent, key, value)\n\n    switch (typeof value) {\n      case 'string':\n        return strEscape(value)\n      case 'object': {\n        if (value === null) {\n          return 'null'\n        }\n        if (stack.indexOf(value) !== -1) {\n          return circularValue\n        }\n\n        let res = ''\n        let join = ','\n        const originalIndentation = indentation\n\n        if (Array.isArray(value)) {\n          if (value.length === 0) {\n            return '[]'\n          }\n          if (maximumDepth < stack.length + 1) {\n            return '\"[Array]\"'\n          }\n          stack.push(value)\n          if (spacer !== '') {\n            indentation += spacer\n            res += `\\n${indentation}`\n            join = `,\\n${indentation}`\n          }\n          const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n          let i = 0\n          for (; i < maximumValuesToStringify - 1; i++) {\n            const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n            res += tmp !== undefined ? tmp : 'null'\n            res += join\n          }\n          const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n          res += tmp !== undefined ? tmp : 'null'\n          if (value.length - 1 > maximumBreadth) {\n            const removedKeys = value.length - maximumBreadth - 1\n            res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n          }\n          if (spacer !== '') {\n            res += `\\n${originalIndentation}`\n          }\n          stack.pop()\n          return `[${res}]`\n        }\n\n        let keys = Object.keys(value)\n        const keyLength = keys.length\n        if (keyLength === 0) {\n          return '{}'\n        }\n        if (maximumDepth < stack.length + 1) {\n          return '\"[Object]\"'\n        }\n        let whitespace = ''\n        let separator = ''\n        if (spacer !== '') {\n          indentation += spacer\n          join = `,\\n${indentation}`\n          whitespace = ' '\n        }\n        const maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n        if (deterministic && !isTypedArrayWithEntries(value)) {\n          keys = sort(keys, comparator)\n        }\n        stack.push(value)\n        for (let i = 0; i < maximumPropertiesToStringify; i++) {\n          const key = keys[i]\n          const tmp = stringifyFnReplacer(key, value, stack, replacer, spacer, indentation)\n          if (tmp !== undefined) {\n            res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n            separator = join\n          }\n        }\n        if (keyLength > maximumBreadth) {\n          const removedKeys = keyLength - maximumBreadth\n          res += `${separator}\"...\":${whitespace}\"${getItemCount(removedKeys)} not stringified\"`\n          separator = join\n        }\n        if (spacer !== '' && separator.length > 1) {\n          res = `\\n${indentation}${res}\\n${originalIndentation}`\n        }\n        stack.pop()\n        return `{${res}}`\n      }\n      case 'number':\n        return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n      case 'boolean':\n        return value === true ? 'true' : 'false'\n      case 'undefined':\n        return undefined\n      case 'bigint':\n        if (bigint) {\n          return String(value)\n        }\n        // fallthrough\n      default:\n        return fail ? fail(value) : undefined\n    }\n  }\n\n  function stringifyArrayReplacer (key, value, stack, replacer, spacer, indentation) {\n    if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n      value = value.toJSON(key)\n    }\n\n    switch (typeof value) {\n      case 'string':\n        return strEscape(value)\n      case 'object': {\n        if (value === null) {\n          return 'null'\n        }\n        if (stack.indexOf(value) !== -1) {\n          return circularValue\n        }\n\n        const originalIndentation = indentation\n        let res = ''\n        let join = ','\n\n        if (Array.isArray(value)) {\n          if (value.length === 0) {\n            return '[]'\n          }\n          if (maximumDepth < stack.length + 1) {\n            return '\"[Array]\"'\n          }\n          stack.push(value)\n          if (spacer !== '') {\n            indentation += spacer\n            res += `\\n${indentation}`\n            join = `,\\n${indentation}`\n          }\n          const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n          let i = 0\n          for (; i < maximumValuesToStringify - 1; i++) {\n            const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n            res += tmp !== undefined ? tmp : 'null'\n            res += join\n          }\n          const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n          res += tmp !== undefined ? tmp : 'null'\n          if (value.length - 1 > maximumBreadth) {\n            const removedKeys = value.length - maximumBreadth - 1\n            res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n          }\n          if (spacer !== '') {\n            res += `\\n${originalIndentation}`\n          }\n          stack.pop()\n          return `[${res}]`\n        }\n        stack.push(value)\n        let whitespace = ''\n        if (spacer !== '') {\n          indentation += spacer\n          join = `,\\n${indentation}`\n          whitespace = ' '\n        }\n        let separator = ''\n        for (const key of replacer) {\n          const tmp = stringifyArrayReplacer(key, value[key], stack, replacer, spacer, indentation)\n          if (tmp !== undefined) {\n            res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n            separator = join\n          }\n        }\n        if (spacer !== '' && separator.length > 1) {\n          res = `\\n${indentation}${res}\\n${originalIndentation}`\n        }\n        stack.pop()\n        return `{${res}}`\n      }\n      case 'number':\n        return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n      case 'boolean':\n        return value === true ? 'true' : 'false'\n      case 'undefined':\n        return undefined\n      case 'bigint':\n        if (bigint) {\n          return String(value)\n        }\n        // fallthrough\n      default:\n        return fail ? fail(value) : undefined\n    }\n  }\n\n  function stringifyIndent (key, value, stack, spacer, indentation) {\n    switch (typeof value) {\n      case 'string':\n        return strEscape(value)\n      case 'object': {\n        if (value === null) {\n          return 'null'\n        }\n        if (typeof value.toJSON === 'function') {\n          value = value.toJSON(key)\n          // Prevent calling `toJSON` again.\n          if (typeof value !== 'object') {\n            return stringifyIndent(key, value, stack, spacer, indentation)\n          }\n          if (value === null) {\n            return 'null'\n          }\n        }\n        if (stack.indexOf(value) !== -1) {\n          return circularValue\n        }\n        const originalIndentation = indentation\n\n        if (Array.isArray(value)) {\n          if (value.length === 0) {\n            return '[]'\n          }\n          if (maximumDepth < stack.length + 1) {\n            return '\"[Array]\"'\n          }\n          stack.push(value)\n          indentation += spacer\n          let res = `\\n${indentation}`\n          const join = `,\\n${indentation}`\n          const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n          let i = 0\n          for (; i < maximumValuesToStringify - 1; i++) {\n            const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n            res += tmp !== undefined ? tmp : 'null'\n            res += join\n          }\n          const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n          res += tmp !== undefined ? tmp : 'null'\n          if (value.length - 1 > maximumBreadth) {\n            const removedKeys = value.length - maximumBreadth - 1\n            res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n          }\n          res += `\\n${originalIndentation}`\n          stack.pop()\n          return `[${res}]`\n        }\n\n        let keys = Object.keys(value)\n        const keyLength = keys.length\n        if (keyLength === 0) {\n          return '{}'\n        }\n        if (maximumDepth < stack.length + 1) {\n          return '\"[Object]\"'\n        }\n        indentation += spacer\n        const join = `,\\n${indentation}`\n        let res = ''\n        let separator = ''\n        let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n        if (isTypedArrayWithEntries(value)) {\n          res += stringifyTypedArray(value, join, maximumBreadth)\n          keys = keys.slice(value.length)\n          maximumPropertiesToStringify -= value.length\n          separator = join\n        }\n        if (deterministic) {\n          keys = sort(keys, comparator)\n        }\n        stack.push(value)\n        for (let i = 0; i < maximumPropertiesToStringify; i++) {\n          const key = keys[i]\n          const tmp = stringifyIndent(key, value[key], stack, spacer, indentation)\n          if (tmp !== undefined) {\n            res += `${separator}${strEscape(key)}: ${tmp}`\n            separator = join\n          }\n        }\n        if (keyLength > maximumBreadth) {\n          const removedKeys = keyLength - maximumBreadth\n          res += `${separator}\"...\": \"${getItemCount(removedKeys)} not stringified\"`\n          separator = join\n        }\n        if (separator !== '') {\n          res = `\\n${indentation}${res}\\n${originalIndentation}`\n        }\n        stack.pop()\n        return `{${res}}`\n      }\n      case 'number':\n        return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n      case 'boolean':\n        return value === true ? 'true' : 'false'\n      case 'undefined':\n        return undefined\n      case 'bigint':\n        if (bigint) {\n          return String(value)\n        }\n        // fallthrough\n      default:\n        return fail ? fail(value) : undefined\n    }\n  }\n\n  function stringifySimple (key, value, stack) {\n    switch (typeof value) {\n      case 'string':\n        return strEscape(value)\n      case 'object': {\n        if (value === null) {\n          return 'null'\n        }\n        if (typeof value.toJSON === 'function') {\n          value = value.toJSON(key)\n          // Prevent calling `toJSON` again\n          if (typeof value !== 'object') {\n            return stringifySimple(key, value, stack)\n          }\n          if (value === null) {\n            return 'null'\n          }\n        }\n        if (stack.indexOf(value) !== -1) {\n          return circularValue\n        }\n\n        let res = ''\n\n        const hasLength = value.length !== undefined\n        if (hasLength && Array.isArray(value)) {\n          if (value.length === 0) {\n            return '[]'\n          }\n          if (maximumDepth < stack.length + 1) {\n            return '\"[Array]\"'\n          }\n          stack.push(value)\n          const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n          let i = 0\n          for (; i < maximumValuesToStringify - 1; i++) {\n            const tmp = stringifySimple(String(i), value[i], stack)\n            res += tmp !== undefined ? tmp : 'null'\n            res += ','\n          }\n          const tmp = stringifySimple(String(i), value[i], stack)\n          res += tmp !== undefined ? tmp : 'null'\n          if (value.length - 1 > maximumBreadth) {\n            const removedKeys = value.length - maximumBreadth - 1\n            res += `,\"... ${getItemCount(removedKeys)} not stringified\"`\n          }\n          stack.pop()\n          return `[${res}]`\n        }\n\n        let keys = Object.keys(value)\n        const keyLength = keys.length\n        if (keyLength === 0) {\n          return '{}'\n        }\n        if (maximumDepth < stack.length + 1) {\n          return '\"[Object]\"'\n        }\n        let separator = ''\n        let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n        if (hasLength && isTypedArrayWithEntries(value)) {\n          res += stringifyTypedArray(value, ',', maximumBreadth)\n          keys = keys.slice(value.length)\n          maximumPropertiesToStringify -= value.length\n          separator = ','\n        }\n        if (deterministic) {\n          keys = sort(keys, comparator)\n        }\n        stack.push(value)\n        for (let i = 0; i < maximumPropertiesToStringify; i++) {\n          const key = keys[i]\n          const tmp = stringifySimple(key, value[key], stack)\n          if (tmp !== undefined) {\n            res += `${separator}${strEscape(key)}:${tmp}`\n            separator = ','\n          }\n        }\n        if (keyLength > maximumBreadth) {\n          const removedKeys = keyLength - maximumBreadth\n          res += `${separator}\"...\":\"${getItemCount(removedKeys)} not stringified\"`\n        }\n        stack.pop()\n        return `{${res}}`\n      }\n      case 'number':\n        return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n      case 'boolean':\n        return value === true ? 'true' : 'false'\n      case 'undefined':\n        return undefined\n      case 'bigint':\n        if (bigint) {\n          return String(value)\n        }\n        // fallthrough\n      default:\n        return fail ? fail(value) : undefined\n    }\n  }\n\n  function stringify (value, replacer, space) {\n    if (arguments.length > 1) {\n      let spacer = ''\n      if (typeof space === 'number') {\n        spacer = ' '.repeat(Math.min(space, 10))\n      } else if (typeof space === 'string') {\n        spacer = space.slice(0, 10)\n      }\n      if (replacer != null) {\n        if (typeof replacer === 'function') {\n          return stringifyFnReplacer('', { '': value }, [], replacer, spacer, '')\n        }\n        if (Array.isArray(replacer)) {\n          return stringifyArrayReplacer('', value, [], getUniqueReplacerSet(replacer), spacer, '')\n        }\n      }\n      if (spacer.length !== 0) {\n        return stringifyIndent('', value, [], spacer, '')\n      }\n    }\n    return stringifySimple('', value, [])\n  }\n\n  return stringify\n}\n","'use strict'\n\nconst metadata = Symbol.for('pino.metadata')\nconst { DEFAULT_LEVELS } = require('./constants')\n\nconst DEFAULT_INFO_LEVEL = DEFAULT_LEVELS.info\n\nfunction multistream (streamsArray, opts) {\n  streamsArray = streamsArray || []\n  opts = opts || { dedupe: false }\n\n  const streamLevels = Object.create(DEFAULT_LEVELS)\n  streamLevels.silent = Infinity\n  if (opts.levels && typeof opts.levels === 'object') {\n    Object.keys(opts.levels).forEach(i => {\n      streamLevels[i] = opts.levels[i]\n    })\n  }\n\n  const res = {\n    write,\n    add,\n    remove,\n    emit,\n    flushSync,\n    end,\n    minLevel: 0,\n    lastId: 0,\n    streams: [],\n    clone,\n    [metadata]: true,\n    streamLevels\n  }\n\n  if (Array.isArray(streamsArray)) {\n    streamsArray.forEach(add, res)\n  } else {\n    add.call(res, streamsArray)\n  }\n\n  // clean this object up\n  // or it will stay allocated forever\n  // as it is closed on the following closures\n  streamsArray = null\n\n  return res\n\n  // we can exit early because the streams are ordered by level\n  function write (data) {\n    let dest\n    const level = this.lastLevel\n    const { streams } = this\n    // for handling situation when several streams has the same level\n    let recordedLevel = 0\n    let stream\n\n    // if dedupe set to true we send logs to the stream with the highest level\n    // therefore, we have to change sorting order\n    for (let i = initLoopVar(streams.length, opts.dedupe); checkLoopVar(i, streams.length, opts.dedupe); i = adjustLoopVar(i, opts.dedupe)) {\n      dest = streams[i]\n      if (dest.level <= level) {\n        if (recordedLevel !== 0 && recordedLevel !== dest.level) {\n          break\n        }\n        stream = dest.stream\n        if (stream[metadata]) {\n          const { lastTime, lastMsg, lastObj, lastLogger } = this\n          stream.lastLevel = level\n          stream.lastTime = lastTime\n          stream.lastMsg = lastMsg\n          stream.lastObj = lastObj\n          stream.lastLogger = lastLogger\n        }\n        stream.write(data)\n        if (opts.dedupe) {\n          recordedLevel = dest.level\n        }\n      } else if (!opts.dedupe) {\n        break\n      }\n    }\n  }\n\n  function emit (...args) {\n    for (const { stream } of this.streams) {\n      if (typeof stream.emit === 'function') {\n        stream.emit(...args)\n      }\n    }\n  }\n\n  function flushSync () {\n    for (const { stream } of this.streams) {\n      if (typeof stream.flushSync === 'function') {\n        stream.flushSync()\n      }\n    }\n  }\n\n  function add (dest) {\n    if (!dest) {\n      return res\n    }\n\n    // Check that dest implements either StreamEntry or DestinationStream\n    const isStream = typeof dest.write === 'function' || dest.stream\n    const stream_ = dest.write ? dest : dest.stream\n    // This is necessary to provide a meaningful error message, otherwise it throws somewhere inside write()\n    if (!isStream) {\n      throw Error('stream object needs to implement either StreamEntry or DestinationStream interface')\n    }\n\n    const { streams, streamLevels } = this\n\n    let level\n    if (typeof dest.levelVal === 'number') {\n      level = dest.levelVal\n    } else if (typeof dest.level === 'string') {\n      level = streamLevels[dest.level]\n    } else if (typeof dest.level === 'number') {\n      level = dest.level\n    } else {\n      level = DEFAULT_INFO_LEVEL\n    }\n\n    const dest_ = {\n      stream: stream_,\n      level,\n      levelVal: undefined,\n      id: ++res.lastId\n    }\n\n    streams.unshift(dest_)\n    streams.sort(compareByLevel)\n\n    this.minLevel = streams[0].level\n\n    return res\n  }\n\n  function remove (id) {\n    const { streams } = this\n    const index = streams.findIndex(s => s.id === id)\n\n    if (index >= 0) {\n      streams.splice(index, 1)\n      streams.sort(compareByLevel)\n      this.minLevel = streams.length > 0 ? streams[0].level : -1\n    }\n\n    return res\n  }\n\n  function end () {\n    for (const { stream } of this.streams) {\n      if (typeof stream.flushSync === 'function') {\n        stream.flushSync()\n      }\n      stream.end()\n    }\n  }\n\n  function clone (level) {\n    const streams = new Array(this.streams.length)\n\n    for (let i = 0; i < streams.length; i++) {\n      streams[i] = {\n        level,\n        stream: this.streams[i].stream\n      }\n    }\n\n    return {\n      write,\n      add,\n      remove,\n      minLevel: level,\n      streams,\n      clone,\n      emit,\n      flushSync,\n      [metadata]: true\n    }\n  }\n}\n\nfunction compareByLevel (a, b) {\n  return a.level - b.level\n}\n\nfunction initLoopVar (length, dedupe) {\n  return dedupe ? length - 1 : 0\n}\n\nfunction adjustLoopVar (i, dedupe) {\n  return dedupe ? i - 1 : i + 1\n}\n\nfunction checkLoopVar (i, length, dedupe) {\n  return dedupe ? i >= 0 : i < length\n}\n\nmodule.exports = multistream\n","'use strict'\n\nconst os = require('node:os')\nconst stdSerializers = require('pino-std-serializers')\nconst caller = require('./lib/caller')\nconst redaction = require('./lib/redaction')\nconst time = require('./lib/time')\nconst proto = require('./lib/proto')\nconst symbols = require('./lib/symbols')\nconst { configure } = require('safe-stable-stringify')\nconst { assertDefaultLevelFound, mappings, genLsCache, genLevelComparison, assertLevelComparison } = require('./lib/levels')\nconst { DEFAULT_LEVELS, SORTING_ORDER } = require('./lib/constants')\nconst {\n  createArgsNormalizer,\n  asChindings,\n  buildSafeSonicBoom,\n  buildFormatters,\n  stringify,\n  normalizeDestFileDescriptor,\n  noop\n} = require('./lib/tools')\nconst { version } = require('./lib/meta')\nconst {\n  chindingsSym,\n  redactFmtSym,\n  serializersSym,\n  timeSym,\n  timeSliceIndexSym,\n  streamSym,\n  stringifySym,\n  stringifySafeSym,\n  stringifiersSym,\n  setLevelSym,\n  endSym,\n  formatOptsSym,\n  messageKeySym,\n  errorKeySym,\n  nestedKeySym,\n  mixinSym,\n  levelCompSym,\n  useOnlyCustomLevelsSym,\n  formattersSym,\n  hooksSym,\n  nestedKeyStrSym,\n  mixinMergeStrategySym,\n  msgPrefixSym\n} = symbols\nconst { epochTime, nullTime } = time\nconst { pid } = process\nconst hostname = os.hostname()\nconst defaultErrorSerializer = stdSerializers.err\nconst defaultOptions = {\n  level: 'info',\n  levelComparison: SORTING_ORDER.ASC,\n  levels: DEFAULT_LEVELS,\n  messageKey: 'msg',\n  errorKey: 'err',\n  nestedKey: null,\n  enabled: true,\n  base: { pid, hostname },\n  serializers: Object.assign(Object.create(null), {\n    err: defaultErrorSerializer\n  }),\n  formatters: Object.assign(Object.create(null), {\n    bindings (bindings) {\n      return bindings\n    },\n    level (label, number) {\n      return { level: number }\n    }\n  }),\n  hooks: {\n    logMethod: undefined,\n    streamWrite: undefined\n  },\n  timestamp: epochTime,\n  name: undefined,\n  redact: null,\n  customLevels: null,\n  useOnlyCustomLevels: false,\n  depthLimit: 5,\n  edgeLimit: 100\n}\n\nconst normalize = createArgsNormalizer(defaultOptions)\n\nconst serializers = Object.assign(Object.create(null), stdSerializers)\n\nfunction pino (...args) {\n  const instance = {}\n  const { opts, stream } = normalize(instance, caller(), ...args)\n\n  if (opts.level && typeof opts.level === 'string' && DEFAULT_LEVELS[opts.level.toLowerCase()] !== undefined) opts.level = opts.level.toLowerCase()\n\n  const {\n    redact,\n    crlf,\n    serializers,\n    timestamp,\n    messageKey,\n    errorKey,\n    nestedKey,\n    base,\n    name,\n    level,\n    customLevels,\n    levelComparison,\n    mixin,\n    mixinMergeStrategy,\n    useOnlyCustomLevels,\n    formatters,\n    hooks,\n    depthLimit,\n    edgeLimit,\n    onChild,\n    msgPrefix\n  } = opts\n\n  const stringifySafe = configure({\n    maximumDepth: depthLimit,\n    maximumBreadth: edgeLimit\n  })\n\n  const allFormatters = buildFormatters(\n    formatters.level,\n    formatters.bindings,\n    formatters.log\n  )\n\n  const stringifyFn = stringify.bind({\n    [stringifySafeSym]: stringifySafe\n  })\n  const stringifiers = redact ? redaction(redact, stringifyFn) : {}\n  const formatOpts = redact\n    ? { stringify: stringifiers[redactFmtSym] }\n    : { stringify: stringifyFn }\n  const end = '}' + (crlf ? '\\r\\n' : '\\n')\n  const coreChindings = asChindings.bind(null, {\n    [chindingsSym]: '',\n    [serializersSym]: serializers,\n    [stringifiersSym]: stringifiers,\n    [stringifySym]: stringify,\n    [stringifySafeSym]: stringifySafe,\n    [formattersSym]: allFormatters\n  })\n\n  let chindings = ''\n  if (base !== null) {\n    if (name === undefined) {\n      chindings = coreChindings(base)\n    } else {\n      chindings = coreChindings(Object.assign({}, base, { name }))\n    }\n  }\n\n  const time = (timestamp instanceof Function)\n    ? timestamp\n    : (timestamp ? epochTime : nullTime)\n  const timeSliceIndex = time().indexOf(':') + 1\n\n  if (useOnlyCustomLevels && !customLevels) throw Error('customLevels is required if useOnlyCustomLevels is set true')\n  if (mixin && typeof mixin !== 'function') throw Error(`Unknown mixin type \"${typeof mixin}\" - expected \"function\"`)\n  if (msgPrefix && typeof msgPrefix !== 'string') throw Error(`Unknown msgPrefix type \"${typeof msgPrefix}\" - expected \"string\"`)\n\n  assertDefaultLevelFound(level, customLevels, useOnlyCustomLevels)\n  const levels = mappings(customLevels, useOnlyCustomLevels)\n\n  if (typeof stream.emit === 'function') {\n    stream.emit('message', { code: 'PINO_CONFIG', config: { levels, messageKey, errorKey } })\n  }\n\n  assertLevelComparison(levelComparison)\n  const levelCompFunc = genLevelComparison(levelComparison)\n\n  Object.assign(instance, {\n    levels,\n    [levelCompSym]: levelCompFunc,\n    [useOnlyCustomLevelsSym]: useOnlyCustomLevels,\n    [streamSym]: stream,\n    [timeSym]: time,\n    [timeSliceIndexSym]: timeSliceIndex,\n    [stringifySym]: stringify,\n    [stringifySafeSym]: stringifySafe,\n    [stringifiersSym]: stringifiers,\n    [endSym]: end,\n    [formatOptsSym]: formatOpts,\n    [messageKeySym]: messageKey,\n    [errorKeySym]: errorKey,\n    [nestedKeySym]: nestedKey,\n    // protect against injection\n    [nestedKeyStrSym]: nestedKey ? `,${JSON.stringify(nestedKey)}:{` : '',\n    [serializersSym]: serializers,\n    [mixinSym]: mixin,\n    [mixinMergeStrategySym]: mixinMergeStrategy,\n    [chindingsSym]: chindings,\n    [formattersSym]: allFormatters,\n    [hooksSym]: hooks,\n    silent: noop,\n    onChild,\n    [msgPrefixSym]: msgPrefix\n  })\n\n  Object.setPrototypeOf(instance, proto())\n\n  genLsCache(instance)\n\n  instance[setLevelSym](level)\n\n  return instance\n}\n\nmodule.exports = pino\n\nmodule.exports.destination = (dest = process.stdout.fd) => {\n  if (typeof dest === 'object') {\n    dest.dest = normalizeDestFileDescriptor(dest.dest || process.stdout.fd)\n    return buildSafeSonicBoom(dest)\n  } else {\n    return buildSafeSonicBoom({ dest: normalizeDestFileDescriptor(dest), minLength: 0 })\n  }\n}\n\nmodule.exports.transport = require('./lib/transport')\nmodule.exports.multistream = require('./lib/multistream')\n\nmodule.exports.levels = mappings()\nmodule.exports.stdSerializers = serializers\nmodule.exports.stdTimeFunctions = Object.assign({}, time)\nmodule.exports.symbols = symbols\nmodule.exports.version = version\n\n// Enables default and name export with TypeScript and Babel\nmodule.exports.default = pino\nmodule.exports.pino = pino\n","import pino, { type Logger as PinoLogger } from \"pino\";\n\nexport type LogDest = \"console\" | \"pino\" | \"both\";\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nconst baseLogger: PinoLogger = pino({\n  level: process.env.LOG_LEVEL ?? \"info\",\n  base: { service: \"tb-streamer\" },\n  timestamp: pino.stdTimeFunctions.isoTime,\n  redact: {\n    paths: [\"req.headers.authorization\", \"req.headers.cookie\", 'req.headers[\"x-api-key\"]'],\n    censor: \"[redacted]\",\n  },\n});\n\nexport interface Logger {\n  debug(msg: string, fields?: Record<string, unknown>, dest?: LogDest): void;\n  info(msg: string, fields?: Record<string, unknown>, dest?: LogDest): void;\n  warn(msg: string, fields?: Record<string, unknown>, dest?: LogDest): void;\n  error(msg: string, fields?: Record<string, unknown>, dest?: LogDest): void;\n  log(level: LogLevel, msg: string, fields?: Record<string, unknown>, dest?: LogDest): void;\n  pino: PinoLogger;\n}\n\nfunction emit(\n  pinoChild: PinoLogger,\n  level: LogLevel,\n  msg: string,\n  fields: Record<string, unknown> | undefined,\n  dest: LogDest,\n): void {\n  if (dest === \"pino\" || dest === \"both\") {\n    if (fields && Object.keys(fields).length > 0) pinoChild[level](fields, msg);\n    else pinoChild[level](msg);\n  }\n  if (dest === \"console\" || dest === \"both\") {\n    const consoleMethod: \"log\" | \"warn\" | \"error\" =\n      level === \"error\" ? \"error\" : level === \"warn\" ? \"warn\" : \"log\";\n    console[consoleMethod](msg);\n  }\n}\n\nfunction build(pinoChild: PinoLogger): Logger {\n  return {\n    debug: (m, f, d = \"both\") => emit(pinoChild, \"debug\", m, f, d),\n    info: (m, f, d = \"both\") => emit(pinoChild, \"info\", m, f, d),\n    warn: (m, f, d = \"both\") => emit(pinoChild, \"warn\", m, f, d),\n    error: (m, f, d = \"both\") => emit(pinoChild, \"error\", m, f, d),\n    log: (lvl, m, f, d = \"both\") => emit(pinoChild, lvl, m, f, d),\n    pino: pinoChild,\n  };\n}\n\nexport function getLogger(component?: string): Logger {\n  return build(component ? baseLogger.child({ component }) : baseLogger);\n}\n\nexport const logger: Logger = build(baseLogger);\n","'use strict';\n\nconst BINARY_TYPES = ['nodebuffer', 'arraybuffer', 'fragments'];\nconst hasBlob = typeof Blob !== 'undefined';\n\nif (hasBlob) BINARY_TYPES.push('blob');\n\nmodule.exports = {\n  BINARY_TYPES,\n  CLOSE_TIMEOUT: 30000,\n  EMPTY_BUFFER: Buffer.alloc(0),\n  GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',\n  hasBlob,\n  kForOnEventAttribute: Symbol('kIsForOnEventAttribute'),\n  kListener: Symbol('kListener'),\n  kStatusCode: Symbol('status-code'),\n  kWebSocket: Symbol('websocket'),\n  NOOP: () => {}\n};\n","'use strict';\n\nconst { EMPTY_BUFFER } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\n\n/**\n * Merges an array of buffers into a new buffer.\n *\n * @param {Buffer[]} list The array of buffers to concat\n * @param {Number} totalLength The total length of buffers in the list\n * @return {Buffer} The resulting buffer\n * @public\n */\nfunction concat(list, totalLength) {\n  if (list.length === 0) return EMPTY_BUFFER;\n  if (list.length === 1) return list[0];\n\n  const target = Buffer.allocUnsafe(totalLength);\n  let offset = 0;\n\n  for (let i = 0; i < list.length; i++) {\n    const buf = list[i];\n    target.set(buf, offset);\n    offset += buf.length;\n  }\n\n  if (offset < totalLength) {\n    return new FastBuffer(target.buffer, target.byteOffset, offset);\n  }\n\n  return target;\n}\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nfunction _mask(source, mask, output, offset, length) {\n  for (let i = 0; i < length; i++) {\n    output[offset + i] = source[i] ^ mask[i & 3];\n  }\n}\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nfunction _unmask(buffer, mask) {\n  for (let i = 0; i < buffer.length; i++) {\n    buffer[i] ^= mask[i & 3];\n  }\n}\n\n/**\n * Converts a buffer to an `ArrayBuffer`.\n *\n * @param {Buffer} buf The buffer to convert\n * @return {ArrayBuffer} Converted buffer\n * @public\n */\nfunction toArrayBuffer(buf) {\n  if (buf.length === buf.buffer.byteLength) {\n    return buf.buffer;\n  }\n\n  return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length);\n}\n\n/**\n * Converts `data` to a `Buffer`.\n *\n * @param {*} data The data to convert\n * @return {Buffer} The buffer\n * @throws {TypeError}\n * @public\n */\nfunction toBuffer(data) {\n  toBuffer.readOnly = true;\n\n  if (Buffer.isBuffer(data)) return data;\n\n  let buf;\n\n  if (data instanceof ArrayBuffer) {\n    buf = new FastBuffer(data);\n  } else if (ArrayBuffer.isView(data)) {\n    buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength);\n  } else {\n    buf = Buffer.from(data);\n    toBuffer.readOnly = false;\n  }\n\n  return buf;\n}\n\nmodule.exports = {\n  concat,\n  mask: _mask,\n  toArrayBuffer,\n  toBuffer,\n  unmask: _unmask\n};\n\n/* istanbul ignore else  */\nif (!process.env.WS_NO_BUFFER_UTIL) {\n  try {\n    const bufferUtil = require('bufferutil');\n\n    module.exports.mask = function (source, mask, output, offset, length) {\n      if (length < 48) _mask(source, mask, output, offset, length);\n      else bufferUtil.mask(source, mask, output, offset, length);\n    };\n\n    module.exports.unmask = function (buffer, mask) {\n      if (buffer.length < 32) _unmask(buffer, mask);\n      else bufferUtil.unmask(buffer, mask);\n    };\n  } catch (e) {\n    // Continue regardless of the error.\n  }\n}\n","'use strict';\n\nconst kDone = Symbol('kDone');\nconst kRun = Symbol('kRun');\n\n/**\n * A very simple job queue with adjustable concurrency. Adapted from\n * https://github.com/STRML/async-limiter\n */\nclass Limiter {\n  /**\n   * Creates a new `Limiter`.\n   *\n   * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed\n   *     to run concurrently\n   */\n  constructor(concurrency) {\n    this[kDone] = () => {\n      this.pending--;\n      this[kRun]();\n    };\n    this.concurrency = concurrency || Infinity;\n    this.jobs = [];\n    this.pending = 0;\n  }\n\n  /**\n   * Adds a job to the queue.\n   *\n   * @param {Function} job The job to run\n   * @public\n   */\n  add(job) {\n    this.jobs.push(job);\n    this[kRun]();\n  }\n\n  /**\n   * Removes a job from the queue and runs it if possible.\n   *\n   * @private\n   */\n  [kRun]() {\n    if (this.pending === this.concurrency) return;\n\n    if (this.jobs.length) {\n      const job = this.jobs.shift();\n\n      this.pending++;\n      job(this[kDone]);\n    }\n  }\n}\n\nmodule.exports = Limiter;\n","'use strict';\n\nconst zlib = require('zlib');\n\nconst bufferUtil = require('./buffer-util');\nconst Limiter = require('./limiter');\nconst { kStatusCode } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\nconst TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);\nconst kPerMessageDeflate = Symbol('permessage-deflate');\nconst kTotalLength = Symbol('total-length');\nconst kCallback = Symbol('callback');\nconst kBuffers = Symbol('buffers');\nconst kError = Symbol('error');\n\n//\n// We limit zlib concurrency, which prevents severe memory fragmentation\n// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913\n// and https://github.com/websockets/ws/issues/1202\n//\n// Intentionally global; it's the global thread pool that's an issue.\n//\nlet zlibLimiter;\n\n/**\n * permessage-deflate implementation.\n */\nclass PerMessageDeflate {\n  /**\n   * Creates a PerMessageDeflate instance.\n   *\n   * @param {Object} [options] Configuration options\n   * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support\n   *     for, or request, a custom client window size\n   * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/\n   *     acknowledge disabling of client context takeover\n   * @param {Number} [options.concurrencyLimit=10] The number of concurrent\n   *     calls to zlib\n   * @param {Boolean} [options.isServer=false] Create the instance in either\n   *     server or client mode\n   * @param {Number} [options.maxPayload=0] The maximum allowed message length\n   * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the\n   *     use of a custom server window size\n   * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept\n   *     disabling of server context takeover\n   * @param {Number} [options.threshold=1024] Size (in bytes) below which\n   *     messages should not be compressed if context takeover is disabled\n   * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on\n   *     deflate\n   * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on\n   *     inflate\n   */\n  constructor(options) {\n    this._options = options || {};\n    this._threshold =\n      this._options.threshold !== undefined ? this._options.threshold : 1024;\n    this._maxPayload = this._options.maxPayload | 0;\n    this._isServer = !!this._options.isServer;\n    this._deflate = null;\n    this._inflate = null;\n\n    this.params = null;\n\n    if (!zlibLimiter) {\n      const concurrency =\n        this._options.concurrencyLimit !== undefined\n          ? this._options.concurrencyLimit\n          : 10;\n      zlibLimiter = new Limiter(concurrency);\n    }\n  }\n\n  /**\n   * @type {String}\n   */\n  static get extensionName() {\n    return 'permessage-deflate';\n  }\n\n  /**\n   * Create an extension negotiation offer.\n   *\n   * @return {Object} Extension parameters\n   * @public\n   */\n  offer() {\n    const params = {};\n\n    if (this._options.serverNoContextTakeover) {\n      params.server_no_context_takeover = true;\n    }\n    if (this._options.clientNoContextTakeover) {\n      params.client_no_context_takeover = true;\n    }\n    if (this._options.serverMaxWindowBits) {\n      params.server_max_window_bits = this._options.serverMaxWindowBits;\n    }\n    if (this._options.clientMaxWindowBits) {\n      params.client_max_window_bits = this._options.clientMaxWindowBits;\n    } else if (this._options.clientMaxWindowBits == null) {\n      params.client_max_window_bits = true;\n    }\n\n    return params;\n  }\n\n  /**\n   * Accept an extension negotiation offer/response.\n   *\n   * @param {Array} configurations The extension negotiation offers/reponse\n   * @return {Object} Accepted configuration\n   * @public\n   */\n  accept(configurations) {\n    configurations = this.normalizeParams(configurations);\n\n    this.params = this._isServer\n      ? this.acceptAsServer(configurations)\n      : this.acceptAsClient(configurations);\n\n    return this.params;\n  }\n\n  /**\n   * Releases all resources used by the extension.\n   *\n   * @public\n   */\n  cleanup() {\n    if (this._inflate) {\n      this._inflate.close();\n      this._inflate = null;\n    }\n\n    if (this._deflate) {\n      const callback = this._deflate[kCallback];\n\n      this._deflate.close();\n      this._deflate = null;\n\n      if (callback) {\n        callback(\n          new Error(\n            'The deflate stream was closed while data was being processed'\n          )\n        );\n      }\n    }\n  }\n\n  /**\n   *  Accept an extension negotiation offer.\n   *\n   * @param {Array} offers The extension negotiation offers\n   * @return {Object} Accepted configuration\n   * @private\n   */\n  acceptAsServer(offers) {\n    const opts = this._options;\n    const accepted = offers.find((params) => {\n      if (\n        (opts.serverNoContextTakeover === false &&\n          params.server_no_context_takeover) ||\n        (params.server_max_window_bits &&\n          (opts.serverMaxWindowBits === false ||\n            (typeof opts.serverMaxWindowBits === 'number' &&\n              opts.serverMaxWindowBits > params.server_max_window_bits))) ||\n        (typeof opts.clientMaxWindowBits === 'number' &&\n          !params.client_max_window_bits)\n      ) {\n        return false;\n      }\n\n      return true;\n    });\n\n    if (!accepted) {\n      throw new Error('None of the extension offers can be accepted');\n    }\n\n    if (opts.serverNoContextTakeover) {\n      accepted.server_no_context_takeover = true;\n    }\n    if (opts.clientNoContextTakeover) {\n      accepted.client_no_context_takeover = true;\n    }\n    if (typeof opts.serverMaxWindowBits === 'number') {\n      accepted.server_max_window_bits = opts.serverMaxWindowBits;\n    }\n    if (typeof opts.clientMaxWindowBits === 'number') {\n      accepted.client_max_window_bits = opts.clientMaxWindowBits;\n    } else if (\n      accepted.client_max_window_bits === true ||\n      opts.clientMaxWindowBits === false\n    ) {\n      delete accepted.client_max_window_bits;\n    }\n\n    return accepted;\n  }\n\n  /**\n   * Accept the extension negotiation response.\n   *\n   * @param {Array} response The extension negotiation response\n   * @return {Object} Accepted configuration\n   * @private\n   */\n  acceptAsClient(response) {\n    const params = response[0];\n\n    if (\n      this._options.clientNoContextTakeover === false &&\n      params.client_no_context_takeover\n    ) {\n      throw new Error('Unexpected parameter \"client_no_context_takeover\"');\n    }\n\n    if (!params.client_max_window_bits) {\n      if (typeof this._options.clientMaxWindowBits === 'number') {\n        params.client_max_window_bits = this._options.clientMaxWindowBits;\n      }\n    } else if (\n      this._options.clientMaxWindowBits === false ||\n      (typeof this._options.clientMaxWindowBits === 'number' &&\n        params.client_max_window_bits > this._options.clientMaxWindowBits)\n    ) {\n      throw new Error(\n        'Unexpected or invalid parameter \"client_max_window_bits\"'\n      );\n    }\n\n    return params;\n  }\n\n  /**\n   * Normalize parameters.\n   *\n   * @param {Array} configurations The extension negotiation offers/reponse\n   * @return {Array} The offers/response with normalized parameters\n   * @private\n   */\n  normalizeParams(configurations) {\n    configurations.forEach((params) => {\n      Object.keys(params).forEach((key) => {\n        let value = params[key];\n\n        if (value.length > 1) {\n          throw new Error(`Parameter \"${key}\" must have only a single value`);\n        }\n\n        value = value[0];\n\n        if (key === 'client_max_window_bits') {\n          if (value !== true) {\n            const num = +value;\n            if (!Number.isInteger(num) || num < 8 || num > 15) {\n              throw new TypeError(\n                `Invalid value for parameter \"${key}\": ${value}`\n              );\n            }\n            value = num;\n          } else if (!this._isServer) {\n            throw new TypeError(\n              `Invalid value for parameter \"${key}\": ${value}`\n            );\n          }\n        } else if (key === 'server_max_window_bits') {\n          const num = +value;\n          if (!Number.isInteger(num) || num < 8 || num > 15) {\n            throw new TypeError(\n              `Invalid value for parameter \"${key}\": ${value}`\n            );\n          }\n          value = num;\n        } else if (\n          key === 'client_no_context_takeover' ||\n          key === 'server_no_context_takeover'\n        ) {\n          if (value !== true) {\n            throw new TypeError(\n              `Invalid value for parameter \"${key}\": ${value}`\n            );\n          }\n        } else {\n          throw new Error(`Unknown parameter \"${key}\"`);\n        }\n\n        params[key] = value;\n      });\n    });\n\n    return configurations;\n  }\n\n  /**\n   * Decompress data. Concurrency limited.\n   *\n   * @param {Buffer} data Compressed data\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @public\n   */\n  decompress(data, fin, callback) {\n    zlibLimiter.add((done) => {\n      this._decompress(data, fin, (err, result) => {\n        done();\n        callback(err, result);\n      });\n    });\n  }\n\n  /**\n   * Compress data. Concurrency limited.\n   *\n   * @param {(Buffer|String)} data Data to compress\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @public\n   */\n  compress(data, fin, callback) {\n    zlibLimiter.add((done) => {\n      this._compress(data, fin, (err, result) => {\n        done();\n        callback(err, result);\n      });\n    });\n  }\n\n  /**\n   * Decompress data.\n   *\n   * @param {Buffer} data Compressed data\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @private\n   */\n  _decompress(data, fin, callback) {\n    const endpoint = this._isServer ? 'client' : 'server';\n\n    if (!this._inflate) {\n      const key = `${endpoint}_max_window_bits`;\n      const windowBits =\n        typeof this.params[key] !== 'number'\n          ? zlib.Z_DEFAULT_WINDOWBITS\n          : this.params[key];\n\n      this._inflate = zlib.createInflateRaw({\n        ...this._options.zlibInflateOptions,\n        windowBits\n      });\n      this._inflate[kPerMessageDeflate] = this;\n      this._inflate[kTotalLength] = 0;\n      this._inflate[kBuffers] = [];\n      this._inflate.on('error', inflateOnError);\n      this._inflate.on('data', inflateOnData);\n    }\n\n    this._inflate[kCallback] = callback;\n\n    this._inflate.write(data);\n    if (fin) this._inflate.write(TRAILER);\n\n    this._inflate.flush(() => {\n      const err = this._inflate[kError];\n\n      if (err) {\n        this._inflate.close();\n        this._inflate = null;\n        callback(err);\n        return;\n      }\n\n      const data = bufferUtil.concat(\n        this._inflate[kBuffers],\n        this._inflate[kTotalLength]\n      );\n\n      if (this._inflate._readableState.endEmitted) {\n        this._inflate.close();\n        this._inflate = null;\n      } else {\n        this._inflate[kTotalLength] = 0;\n        this._inflate[kBuffers] = [];\n\n        if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n          this._inflate.reset();\n        }\n      }\n\n      callback(null, data);\n    });\n  }\n\n  /**\n   * Compress data.\n   *\n   * @param {(Buffer|String)} data Data to compress\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @private\n   */\n  _compress(data, fin, callback) {\n    const endpoint = this._isServer ? 'server' : 'client';\n\n    if (!this._deflate) {\n      const key = `${endpoint}_max_window_bits`;\n      const windowBits =\n        typeof this.params[key] !== 'number'\n          ? zlib.Z_DEFAULT_WINDOWBITS\n          : this.params[key];\n\n      this._deflate = zlib.createDeflateRaw({\n        ...this._options.zlibDeflateOptions,\n        windowBits\n      });\n\n      this._deflate[kTotalLength] = 0;\n      this._deflate[kBuffers] = [];\n\n      this._deflate.on('data', deflateOnData);\n    }\n\n    this._deflate[kCallback] = callback;\n\n    this._deflate.write(data);\n    this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {\n      if (!this._deflate) {\n        //\n        // The deflate stream was closed while data was being processed.\n        //\n        return;\n      }\n\n      let data = bufferUtil.concat(\n        this._deflate[kBuffers],\n        this._deflate[kTotalLength]\n      );\n\n      if (fin) {\n        data = new FastBuffer(data.buffer, data.byteOffset, data.length - 4);\n      }\n\n      //\n      // Ensure that the callback will not be called again in\n      // `PerMessageDeflate#cleanup()`.\n      //\n      this._deflate[kCallback] = null;\n\n      this._deflate[kTotalLength] = 0;\n      this._deflate[kBuffers] = [];\n\n      if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n        this._deflate.reset();\n      }\n\n      callback(null, data);\n    });\n  }\n}\n\nmodule.exports = PerMessageDeflate;\n\n/**\n * The listener of the `zlib.DeflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction deflateOnData(chunk) {\n  this[kBuffers].push(chunk);\n  this[kTotalLength] += chunk.length;\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction inflateOnData(chunk) {\n  this[kTotalLength] += chunk.length;\n\n  if (\n    this[kPerMessageDeflate]._maxPayload < 1 ||\n    this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload\n  ) {\n    this[kBuffers].push(chunk);\n    return;\n  }\n\n  this[kError] = new RangeError('Max payload size exceeded');\n  this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';\n  this[kError][kStatusCode] = 1009;\n  this.removeListener('data', inflateOnData);\n\n  //\n  // The choice to employ `zlib.reset()` over `zlib.close()` is dictated by the\n  // fact that in Node.js versions prior to 13.10.0, the callback for\n  // `zlib.flush()` is not called if `zlib.close()` is used. Utilizing\n  // `zlib.reset()` ensures that either the callback is invoked or an error is\n  // emitted.\n  //\n  this.reset();\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'error'` event.\n *\n * @param {Error} err The emitted error\n * @private\n */\nfunction inflateOnError(err) {\n  //\n  // There is no need to call `Zlib#close()` as the handle is automatically\n  // closed when an error is emitted.\n  //\n  this[kPerMessageDeflate]._inflate = null;\n\n  if (this[kError]) {\n    this[kCallback](this[kError]);\n    return;\n  }\n\n  err[kStatusCode] = 1007;\n  this[kCallback](err);\n}\n","'use strict';\n\nconst { isUtf8 } = require('buffer');\n\nconst { hasBlob } = require('./constants');\n\n//\n// Allowed token characters:\n//\n// '!', '#', '$', '%', '&', ''', '*', '+', '-',\n// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'\n//\n// tokenChars[32] === 0 // ' '\n// tokenChars[33] === 1 // '!'\n// tokenChars[34] === 0 // '\"'\n// ...\n//\n// prettier-ignore\nconst tokenChars = [\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31\n  0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127\n];\n\n/**\n * Checks if a status code is allowed in a close frame.\n *\n * @param {Number} code The status code\n * @return {Boolean} `true` if the status code is valid, else `false`\n * @public\n */\nfunction isValidStatusCode(code) {\n  return (\n    (code >= 1000 &&\n      code <= 1014 &&\n      code !== 1004 &&\n      code !== 1005 &&\n      code !== 1006) ||\n    (code >= 3000 && code <= 4999)\n  );\n}\n\n/**\n * Checks if a given buffer contains only correct UTF-8.\n * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by\n * Markus Kuhn.\n *\n * @param {Buffer} buf The buffer to check\n * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`\n * @public\n */\nfunction _isValidUTF8(buf) {\n  const len = buf.length;\n  let i = 0;\n\n  while (i < len) {\n    if ((buf[i] & 0x80) === 0) {\n      // 0xxxxxxx\n      i++;\n    } else if ((buf[i] & 0xe0) === 0xc0) {\n      // 110xxxxx 10xxxxxx\n      if (\n        i + 1 === len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i] & 0xfe) === 0xc0 // Overlong\n      ) {\n        return false;\n      }\n\n      i += 2;\n    } else if ((buf[i] & 0xf0) === 0xe0) {\n      // 1110xxxx 10xxxxxx 10xxxxxx\n      if (\n        i + 2 >= len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i + 2] & 0xc0) !== 0x80 ||\n        (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong\n        (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF)\n      ) {\n        return false;\n      }\n\n      i += 3;\n    } else if ((buf[i] & 0xf8) === 0xf0) {\n      // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n      if (\n        i + 3 >= len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i + 2] & 0xc0) !== 0x80 ||\n        (buf[i + 3] & 0xc0) !== 0x80 ||\n        (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong\n        (buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||\n        buf[i] > 0xf4 // > U+10FFFF\n      ) {\n        return false;\n      }\n\n      i += 4;\n    } else {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Determines whether a value is a `Blob`.\n *\n * @param {*} value The value to be tested\n * @return {Boolean} `true` if `value` is a `Blob`, else `false`\n * @private\n */\nfunction isBlob(value) {\n  return (\n    hasBlob &&\n    typeof value === 'object' &&\n    typeof value.arrayBuffer === 'function' &&\n    typeof value.type === 'string' &&\n    typeof value.stream === 'function' &&\n    (value[Symbol.toStringTag] === 'Blob' ||\n      value[Symbol.toStringTag] === 'File')\n  );\n}\n\nmodule.exports = {\n  isBlob,\n  isValidStatusCode,\n  isValidUTF8: _isValidUTF8,\n  tokenChars\n};\n\nif (isUtf8) {\n  module.exports.isValidUTF8 = function (buf) {\n    return buf.length < 24 ? _isValidUTF8(buf) : isUtf8(buf);\n  };\n} /* istanbul ignore else  */ else if (!process.env.WS_NO_UTF_8_VALIDATE) {\n  try {\n    const isValidUTF8 = require('utf-8-validate');\n\n    module.exports.isValidUTF8 = function (buf) {\n      return buf.length < 32 ? _isValidUTF8(buf) : isValidUTF8(buf);\n    };\n  } catch (e) {\n    // Continue regardless of the error.\n  }\n}\n","'use strict';\n\nconst { Writable } = require('stream');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst {\n  BINARY_TYPES,\n  EMPTY_BUFFER,\n  kStatusCode,\n  kWebSocket\n} = require('./constants');\nconst { concat, toArrayBuffer, unmask } = require('./buffer-util');\nconst { isValidStatusCode, isValidUTF8 } = require('./validation');\n\nconst FastBuffer = Buffer[Symbol.species];\n\nconst GET_INFO = 0;\nconst GET_PAYLOAD_LENGTH_16 = 1;\nconst GET_PAYLOAD_LENGTH_64 = 2;\nconst GET_MASK = 3;\nconst GET_DATA = 4;\nconst INFLATING = 5;\nconst DEFER_EVENT = 6;\n\n/**\n * HyBi Receiver implementation.\n *\n * @extends Writable\n */\nclass Receiver extends Writable {\n  /**\n   * Creates a Receiver instance.\n   *\n   * @param {Object} [options] Options object\n   * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n   *     any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n   *     multiple times in the same tick\n   * @param {String} [options.binaryType=nodebuffer] The type for binary data\n   * @param {Object} [options.extensions] An object containing the negotiated\n   *     extensions\n   * @param {Boolean} [options.isServer=false] Specifies whether to operate in\n   *     client or server mode\n   * @param {Number} [options.maxBufferedChunks=0] The maximum number of\n   *     buffered data chunks\n   * @param {Number} [options.maxFragments=0] The maximum number of message\n   *     fragments\n   * @param {Number} [options.maxPayload=0] The maximum allowed message length\n   * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n   *     not to skip UTF-8 validation for text and close messages\n   */\n  constructor(options = {}) {\n    super();\n\n    this._allowSynchronousEvents =\n      options.allowSynchronousEvents !== undefined\n        ? options.allowSynchronousEvents\n        : true;\n    this._binaryType = options.binaryType || BINARY_TYPES[0];\n    this._extensions = options.extensions || {};\n    this._isServer = !!options.isServer;\n    this._maxBufferedChunks = options.maxBufferedChunks | 0;\n    this._maxFragments = options.maxFragments | 0;\n    this._maxPayload = options.maxPayload | 0;\n    this._skipUTF8Validation = !!options.skipUTF8Validation;\n    this[kWebSocket] = undefined;\n\n    this._bufferedBytes = 0;\n    this._buffers = [];\n\n    this._compressed = false;\n    this._payloadLength = 0;\n    this._mask = undefined;\n    this._fragmented = 0;\n    this._masked = false;\n    this._fin = false;\n    this._opcode = 0;\n\n    this._totalPayloadLength = 0;\n    this._messageLength = 0;\n    this._fragments = [];\n\n    this._errored = false;\n    this._loop = false;\n    this._state = GET_INFO;\n  }\n\n  /**\n   * Implements `Writable.prototype._write()`.\n   *\n   * @param {Buffer} chunk The chunk of data to write\n   * @param {String} encoding The character encoding of `chunk`\n   * @param {Function} cb Callback\n   * @private\n   */\n  _write(chunk, encoding, cb) {\n    if (this._opcode === 0x08 && this._state == GET_INFO) return cb();\n\n    if (\n      this._maxBufferedChunks > 0 &&\n      this._buffers.length >= this._maxBufferedChunks\n    ) {\n      cb(\n        this.createError(\n          RangeError,\n          'Too many buffered chunks',\n          false,\n          1008,\n          'WS_ERR_TOO_MANY_BUFFERED_PARTS'\n        )\n      );\n      return;\n    }\n\n    this._bufferedBytes += chunk.length;\n    this._buffers.push(chunk);\n    this.startLoop(cb);\n  }\n\n  /**\n   * Consumes `n` bytes from the buffered data.\n   *\n   * @param {Number} n The number of bytes to consume\n   * @return {Buffer} The consumed bytes\n   * @private\n   */\n  consume(n) {\n    this._bufferedBytes -= n;\n\n    if (n === this._buffers[0].length) return this._buffers.shift();\n\n    if (n < this._buffers[0].length) {\n      const buf = this._buffers[0];\n      this._buffers[0] = new FastBuffer(\n        buf.buffer,\n        buf.byteOffset + n,\n        buf.length - n\n      );\n\n      return new FastBuffer(buf.buffer, buf.byteOffset, n);\n    }\n\n    const dst = Buffer.allocUnsafe(n);\n\n    do {\n      const buf = this._buffers[0];\n      const offset = dst.length - n;\n\n      if (n >= buf.length) {\n        dst.set(this._buffers.shift(), offset);\n      } else {\n        dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);\n        this._buffers[0] = new FastBuffer(\n          buf.buffer,\n          buf.byteOffset + n,\n          buf.length - n\n        );\n      }\n\n      n -= buf.length;\n    } while (n > 0);\n\n    return dst;\n  }\n\n  /**\n   * Starts the parsing loop.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  startLoop(cb) {\n    this._loop = true;\n\n    do {\n      switch (this._state) {\n        case GET_INFO:\n          this.getInfo(cb);\n          break;\n        case GET_PAYLOAD_LENGTH_16:\n          this.getPayloadLength16(cb);\n          break;\n        case GET_PAYLOAD_LENGTH_64:\n          this.getPayloadLength64(cb);\n          break;\n        case GET_MASK:\n          this.getMask();\n          break;\n        case GET_DATA:\n          this.getData(cb);\n          break;\n        case INFLATING:\n        case DEFER_EVENT:\n          this._loop = false;\n          return;\n      }\n    } while (this._loop);\n\n    if (!this._errored) cb();\n  }\n\n  /**\n   * Reads the first two bytes of a frame.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getInfo(cb) {\n    if (this._bufferedBytes < 2) {\n      this._loop = false;\n      return;\n    }\n\n    const buf = this.consume(2);\n\n    if ((buf[0] & 0x30) !== 0x00) {\n      const error = this.createError(\n        RangeError,\n        'RSV2 and RSV3 must be clear',\n        true,\n        1002,\n        'WS_ERR_UNEXPECTED_RSV_2_3'\n      );\n\n      cb(error);\n      return;\n    }\n\n    const compressed = (buf[0] & 0x40) === 0x40;\n\n    if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {\n      const error = this.createError(\n        RangeError,\n        'RSV1 must be clear',\n        true,\n        1002,\n        'WS_ERR_UNEXPECTED_RSV_1'\n      );\n\n      cb(error);\n      return;\n    }\n\n    this._fin = (buf[0] & 0x80) === 0x80;\n    this._opcode = buf[0] & 0x0f;\n    this._payloadLength = buf[1] & 0x7f;\n\n    if (this._opcode === 0x00) {\n      if (compressed) {\n        const error = this.createError(\n          RangeError,\n          'RSV1 must be clear',\n          true,\n          1002,\n          'WS_ERR_UNEXPECTED_RSV_1'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (!this._fragmented) {\n        const error = this.createError(\n          RangeError,\n          'invalid opcode 0',\n          true,\n          1002,\n          'WS_ERR_INVALID_OPCODE'\n        );\n\n        cb(error);\n        return;\n      }\n\n      this._opcode = this._fragmented;\n    } else if (this._opcode === 0x01 || this._opcode === 0x02) {\n      if (this._fragmented) {\n        const error = this.createError(\n          RangeError,\n          `invalid opcode ${this._opcode}`,\n          true,\n          1002,\n          'WS_ERR_INVALID_OPCODE'\n        );\n\n        cb(error);\n        return;\n      }\n\n      this._compressed = compressed;\n    } else if (this._opcode > 0x07 && this._opcode < 0x0b) {\n      if (!this._fin) {\n        const error = this.createError(\n          RangeError,\n          'FIN must be set',\n          true,\n          1002,\n          'WS_ERR_EXPECTED_FIN'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (compressed) {\n        const error = this.createError(\n          RangeError,\n          'RSV1 must be clear',\n          true,\n          1002,\n          'WS_ERR_UNEXPECTED_RSV_1'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (\n        this._payloadLength > 0x7d ||\n        (this._opcode === 0x08 && this._payloadLength === 1)\n      ) {\n        const error = this.createError(\n          RangeError,\n          `invalid payload length ${this._payloadLength}`,\n          true,\n          1002,\n          'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n        );\n\n        cb(error);\n        return;\n      }\n    } else {\n      const error = this.createError(\n        RangeError,\n        `invalid opcode ${this._opcode}`,\n        true,\n        1002,\n        'WS_ERR_INVALID_OPCODE'\n      );\n\n      cb(error);\n      return;\n    }\n\n    if (!this._fin && !this._fragmented) this._fragmented = this._opcode;\n    this._masked = (buf[1] & 0x80) === 0x80;\n\n    if (this._isServer) {\n      if (!this._masked) {\n        const error = this.createError(\n          RangeError,\n          'MASK must be set',\n          true,\n          1002,\n          'WS_ERR_EXPECTED_MASK'\n        );\n\n        cb(error);\n        return;\n      }\n    } else if (this._masked) {\n      const error = this.createError(\n        RangeError,\n        'MASK must be clear',\n        true,\n        1002,\n        'WS_ERR_UNEXPECTED_MASK'\n      );\n\n      cb(error);\n      return;\n    }\n\n    if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;\n    else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;\n    else this.haveLength(cb);\n  }\n\n  /**\n   * Gets extended payload length (7+16).\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getPayloadLength16(cb) {\n    if (this._bufferedBytes < 2) {\n      this._loop = false;\n      return;\n    }\n\n    this._payloadLength = this.consume(2).readUInt16BE(0);\n    this.haveLength(cb);\n  }\n\n  /**\n   * Gets extended payload length (7+64).\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getPayloadLength64(cb) {\n    if (this._bufferedBytes < 8) {\n      this._loop = false;\n      return;\n    }\n\n    const buf = this.consume(8);\n    const num = buf.readUInt32BE(0);\n\n    //\n    // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned\n    // if payload length is greater than this number.\n    //\n    if (num > Math.pow(2, 53 - 32) - 1) {\n      const error = this.createError(\n        RangeError,\n        'Unsupported WebSocket frame: payload length > 2^53 - 1',\n        false,\n        1009,\n        'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH'\n      );\n\n      cb(error);\n      return;\n    }\n\n    this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);\n    this.haveLength(cb);\n  }\n\n  /**\n   * Payload length has been read.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  haveLength(cb) {\n    if (this._payloadLength && this._opcode < 0x08) {\n      this._totalPayloadLength += this._payloadLength;\n      if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {\n        const error = this.createError(\n          RangeError,\n          'Max payload size exceeded',\n          false,\n          1009,\n          'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n        );\n\n        cb(error);\n        return;\n      }\n    }\n\n    if (this._masked) this._state = GET_MASK;\n    else this._state = GET_DATA;\n  }\n\n  /**\n   * Reads mask bytes.\n   *\n   * @private\n   */\n  getMask() {\n    if (this._bufferedBytes < 4) {\n      this._loop = false;\n      return;\n    }\n\n    this._mask = this.consume(4);\n    this._state = GET_DATA;\n  }\n\n  /**\n   * Reads data bytes.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getData(cb) {\n    let data = EMPTY_BUFFER;\n\n    if (this._payloadLength) {\n      if (this._bufferedBytes < this._payloadLength) {\n        this._loop = false;\n        return;\n      }\n\n      data = this.consume(this._payloadLength);\n\n      if (\n        this._masked &&\n        (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0\n      ) {\n        unmask(data, this._mask);\n      }\n    }\n\n    if (this._opcode > 0x07) {\n      this.controlMessage(data, cb);\n      return;\n    }\n\n    if (this._compressed) {\n      this._state = INFLATING;\n      this.decompress(data, cb);\n      return;\n    }\n\n    if (data.length) {\n      if (\n        this._maxFragments > 0 &&\n        this._fragments.length >= this._maxFragments\n      ) {\n        const error = this.createError(\n          RangeError,\n          'Too many message fragments',\n          false,\n          1008,\n          'WS_ERR_TOO_MANY_BUFFERED_PARTS'\n        );\n\n        cb(error);\n        return;\n      }\n\n      //\n      // This message is not compressed so its length is the sum of the payload\n      // length of all fragments.\n      //\n      this._messageLength = this._totalPayloadLength;\n      this._fragments.push(data);\n    }\n\n    this.dataMessage(cb);\n  }\n\n  /**\n   * Decompresses data.\n   *\n   * @param {Buffer} data Compressed data\n   * @param {Function} cb Callback\n   * @private\n   */\n  decompress(data, cb) {\n    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n    perMessageDeflate.decompress(data, this._fin, (err, buf) => {\n      if (err) return cb(err);\n\n      if (buf.length) {\n        this._messageLength += buf.length;\n        if (this._messageLength > this._maxPayload && this._maxPayload > 0) {\n          const error = this.createError(\n            RangeError,\n            'Max payload size exceeded',\n            false,\n            1009,\n            'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n          );\n\n          cb(error);\n          return;\n        }\n\n        if (\n          this._maxFragments > 0 &&\n          this._fragments.length >= this._maxFragments\n        ) {\n          const error = this.createError(\n            RangeError,\n            'Too many message fragments',\n            false,\n            1008,\n            'WS_ERR_TOO_MANY_BUFFERED_PARTS'\n          );\n\n          cb(error);\n          return;\n        }\n\n        this._fragments.push(buf);\n      }\n\n      this.dataMessage(cb);\n      if (this._state === GET_INFO) this.startLoop(cb);\n    });\n  }\n\n  /**\n   * Handles a data message.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  dataMessage(cb) {\n    if (!this._fin) {\n      this._state = GET_INFO;\n      return;\n    }\n\n    const messageLength = this._messageLength;\n    const fragments = this._fragments;\n\n    this._totalPayloadLength = 0;\n    this._messageLength = 0;\n    this._fragmented = 0;\n    this._fragments = [];\n\n    if (this._opcode === 2) {\n      let data;\n\n      if (this._binaryType === 'nodebuffer') {\n        data = concat(fragments, messageLength);\n      } else if (this._binaryType === 'arraybuffer') {\n        data = toArrayBuffer(concat(fragments, messageLength));\n      } else if (this._binaryType === 'blob') {\n        data = new Blob(fragments);\n      } else {\n        data = fragments;\n      }\n\n      if (this._allowSynchronousEvents) {\n        this.emit('message', data, true);\n        this._state = GET_INFO;\n      } else {\n        this._state = DEFER_EVENT;\n        setImmediate(() => {\n          this.emit('message', data, true);\n          this._state = GET_INFO;\n          this.startLoop(cb);\n        });\n      }\n    } else {\n      const buf = concat(fragments, messageLength);\n\n      if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n        const error = this.createError(\n          Error,\n          'invalid UTF-8 sequence',\n          true,\n          1007,\n          'WS_ERR_INVALID_UTF8'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (this._state === INFLATING || this._allowSynchronousEvents) {\n        this.emit('message', buf, false);\n        this._state = GET_INFO;\n      } else {\n        this._state = DEFER_EVENT;\n        setImmediate(() => {\n          this.emit('message', buf, false);\n          this._state = GET_INFO;\n          this.startLoop(cb);\n        });\n      }\n    }\n  }\n\n  /**\n   * Handles a control message.\n   *\n   * @param {Buffer} data Data to handle\n   * @return {(Error|RangeError|undefined)} A possible error\n   * @private\n   */\n  controlMessage(data, cb) {\n    if (this._opcode === 0x08) {\n      if (data.length === 0) {\n        this._loop = false;\n        this.emit('conclude', 1005, EMPTY_BUFFER);\n        this.end();\n      } else {\n        const code = data.readUInt16BE(0);\n\n        if (!isValidStatusCode(code)) {\n          const error = this.createError(\n            RangeError,\n            `invalid status code ${code}`,\n            true,\n            1002,\n            'WS_ERR_INVALID_CLOSE_CODE'\n          );\n\n          cb(error);\n          return;\n        }\n\n        const buf = new FastBuffer(\n          data.buffer,\n          data.byteOffset + 2,\n          data.length - 2\n        );\n\n        if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n          const error = this.createError(\n            Error,\n            'invalid UTF-8 sequence',\n            true,\n            1007,\n            'WS_ERR_INVALID_UTF8'\n          );\n\n          cb(error);\n          return;\n        }\n\n        this._loop = false;\n        this.emit('conclude', code, buf);\n        this.end();\n      }\n\n      this._state = GET_INFO;\n      return;\n    }\n\n    if (this._allowSynchronousEvents) {\n      this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n      this._state = GET_INFO;\n    } else {\n      this._state = DEFER_EVENT;\n      setImmediate(() => {\n        this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n        this._state = GET_INFO;\n        this.startLoop(cb);\n      });\n    }\n  }\n\n  /**\n   * Builds an error object.\n   *\n   * @param {function(new:Error|RangeError)} ErrorCtor The error constructor\n   * @param {String} message The error message\n   * @param {Boolean} prefix Specifies whether or not to add a default prefix to\n   *     `message`\n   * @param {Number} statusCode The status code\n   * @param {String} errorCode The exposed error code\n   * @return {(Error|RangeError)} The error\n   * @private\n   */\n  createError(ErrorCtor, message, prefix, statusCode, errorCode) {\n    this._loop = false;\n    this._errored = true;\n\n    const err = new ErrorCtor(\n      prefix ? `Invalid WebSocket frame: ${message}` : message\n    );\n\n    Error.captureStackTrace(err, this.createError);\n    err.code = errorCode;\n    err[kStatusCode] = statusCode;\n    return err;\n  }\n}\n\nmodule.exports = Receiver;\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex\" }] */\n\n'use strict';\n\nconst { Duplex } = require('stream');\nconst { randomFillSync } = require('crypto');\nconst {\n  types: { isUint8Array }\n} = require('util');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst { EMPTY_BUFFER, kWebSocket, NOOP } = require('./constants');\nconst { isBlob, isValidStatusCode } = require('./validation');\nconst { mask: applyMask, toBuffer } = require('./buffer-util');\n\nconst kByteLength = Symbol('kByteLength');\nconst maskBuffer = Buffer.alloc(4);\nconst RANDOM_POOL_SIZE = 8 * 1024;\nlet randomPool;\nlet randomPoolPointer = RANDOM_POOL_SIZE;\n\nconst DEFAULT = 0;\nconst DEFLATING = 1;\nconst GET_BLOB_DATA = 2;\n\n/**\n * HyBi Sender implementation.\n */\nclass Sender {\n  /**\n   * Creates a Sender instance.\n   *\n   * @param {Duplex} socket The connection socket\n   * @param {Object} [extensions] An object containing the negotiated extensions\n   * @param {Function} [generateMask] The function used to generate the masking\n   *     key\n   */\n  constructor(socket, extensions, generateMask) {\n    this._extensions = extensions || {};\n\n    if (generateMask) {\n      this._generateMask = generateMask;\n      this._maskBuffer = Buffer.alloc(4);\n    }\n\n    this._socket = socket;\n\n    this._firstFragment = true;\n    this._compress = false;\n\n    this._bufferedBytes = 0;\n    this._queue = [];\n    this._state = DEFAULT;\n    this.onerror = NOOP;\n    this[kWebSocket] = undefined;\n  }\n\n  /**\n   * Frames a piece of data according to the HyBi WebSocket protocol.\n   *\n   * @param {(Buffer|String)} data The data to frame\n   * @param {Object} options Options object\n   * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n   *     FIN bit\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n   *     key\n   * @param {Number} options.opcode The opcode\n   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n   *     modified\n   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n   *     RSV1 bit\n   * @return {(Buffer|String)[]} The framed data\n   * @public\n   */\n  static frame(data, options) {\n    let mask;\n    let merge = false;\n    let offset = 2;\n    let skipMasking = false;\n\n    if (options.mask) {\n      mask = options.maskBuffer || maskBuffer;\n\n      if (options.generateMask) {\n        options.generateMask(mask);\n      } else {\n        if (randomPoolPointer === RANDOM_POOL_SIZE) {\n          /* istanbul ignore else  */\n          if (randomPool === undefined) {\n            //\n            // This is lazily initialized because server-sent frames must not\n            // be masked so it may never be used.\n            //\n            randomPool = Buffer.alloc(RANDOM_POOL_SIZE);\n          }\n\n          randomFillSync(randomPool, 0, RANDOM_POOL_SIZE);\n          randomPoolPointer = 0;\n        }\n\n        mask[0] = randomPool[randomPoolPointer++];\n        mask[1] = randomPool[randomPoolPointer++];\n        mask[2] = randomPool[randomPoolPointer++];\n        mask[3] = randomPool[randomPoolPointer++];\n      }\n\n      skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0;\n      offset = 6;\n    }\n\n    let dataLength;\n\n    if (typeof data === 'string') {\n      if (\n        (!options.mask || skipMasking) &&\n        options[kByteLength] !== undefined\n      ) {\n        dataLength = options[kByteLength];\n      } else {\n        data = Buffer.from(data);\n        dataLength = data.length;\n      }\n    } else {\n      dataLength = data.length;\n      merge = options.mask && options.readOnly && !skipMasking;\n    }\n\n    let payloadLength = dataLength;\n\n    if (dataLength >= 65536) {\n      offset += 8;\n      payloadLength = 127;\n    } else if (dataLength > 125) {\n      offset += 2;\n      payloadLength = 126;\n    }\n\n    const target = Buffer.allocUnsafe(merge ? dataLength + offset : offset);\n\n    target[0] = options.fin ? options.opcode | 0x80 : options.opcode;\n    if (options.rsv1) target[0] |= 0x40;\n\n    target[1] = payloadLength;\n\n    if (payloadLength === 126) {\n      target.writeUInt16BE(dataLength, 2);\n    } else if (payloadLength === 127) {\n      target[2] = target[3] = 0;\n      target.writeUIntBE(dataLength, 4, 6);\n    }\n\n    if (!options.mask) return [target, data];\n\n    target[1] |= 0x80;\n    target[offset - 4] = mask[0];\n    target[offset - 3] = mask[1];\n    target[offset - 2] = mask[2];\n    target[offset - 1] = mask[3];\n\n    if (skipMasking) return [target, data];\n\n    if (merge) {\n      applyMask(data, mask, target, offset, dataLength);\n      return [target];\n    }\n\n    applyMask(data, mask, data, 0, dataLength);\n    return [target, data];\n  }\n\n  /**\n   * Sends a close message to the other peer.\n   *\n   * @param {Number} [code] The status code component of the body\n   * @param {(String|Buffer)} [data] The message component of the body\n   * @param {Boolean} [mask=false] Specifies whether or not to mask the message\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  close(code, data, mask, cb) {\n    let buf;\n\n    if (code === undefined) {\n      buf = EMPTY_BUFFER;\n    } else if (typeof code !== 'number' || !isValidStatusCode(code)) {\n      throw new TypeError('First argument must be a valid error code number');\n    } else if (data === undefined || !data.length) {\n      buf = Buffer.allocUnsafe(2);\n      buf.writeUInt16BE(code, 0);\n    } else {\n      const length = Buffer.byteLength(data);\n\n      if (length > 123) {\n        throw new RangeError('The message must not be greater than 123 bytes');\n      }\n\n      buf = Buffer.allocUnsafe(2 + length);\n      buf.writeUInt16BE(code, 0);\n\n      if (typeof data === 'string') {\n        buf.write(data, 2);\n      } else if (isUint8Array(data)) {\n        buf.set(data, 2);\n      } else {\n        throw new TypeError('Second argument must be a string or a Uint8Array');\n      }\n    }\n\n    const options = {\n      [kByteLength]: buf.length,\n      fin: true,\n      generateMask: this._generateMask,\n      mask,\n      maskBuffer: this._maskBuffer,\n      opcode: 0x08,\n      readOnly: false,\n      rsv1: false\n    };\n\n    if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, buf, false, options, cb]);\n    } else {\n      this.sendFrame(Sender.frame(buf, options), cb);\n    }\n  }\n\n  /**\n   * Sends a ping message to the other peer.\n   *\n   * @param {*} data The message to send\n   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  ping(data, mask, cb) {\n    let byteLength;\n    let readOnly;\n\n    if (typeof data === 'string') {\n      byteLength = Buffer.byteLength(data);\n      readOnly = false;\n    } else if (isBlob(data)) {\n      byteLength = data.size;\n      readOnly = false;\n    } else {\n      data = toBuffer(data);\n      byteLength = data.length;\n      readOnly = toBuffer.readOnly;\n    }\n\n    if (byteLength > 125) {\n      throw new RangeError('The data size must not be greater than 125 bytes');\n    }\n\n    const options = {\n      [kByteLength]: byteLength,\n      fin: true,\n      generateMask: this._generateMask,\n      mask,\n      maskBuffer: this._maskBuffer,\n      opcode: 0x09,\n      readOnly,\n      rsv1: false\n    };\n\n    if (isBlob(data)) {\n      if (this._state !== DEFAULT) {\n        this.enqueue([this.getBlobData, data, false, options, cb]);\n      } else {\n        this.getBlobData(data, false, options, cb);\n      }\n    } else if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, data, false, options, cb]);\n    } else {\n      this.sendFrame(Sender.frame(data, options), cb);\n    }\n  }\n\n  /**\n   * Sends a pong message to the other peer.\n   *\n   * @param {*} data The message to send\n   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  pong(data, mask, cb) {\n    let byteLength;\n    let readOnly;\n\n    if (typeof data === 'string') {\n      byteLength = Buffer.byteLength(data);\n      readOnly = false;\n    } else if (isBlob(data)) {\n      byteLength = data.size;\n      readOnly = false;\n    } else {\n      data = toBuffer(data);\n      byteLength = data.length;\n      readOnly = toBuffer.readOnly;\n    }\n\n    if (byteLength > 125) {\n      throw new RangeError('The data size must not be greater than 125 bytes');\n    }\n\n    const options = {\n      [kByteLength]: byteLength,\n      fin: true,\n      generateMask: this._generateMask,\n      mask,\n      maskBuffer: this._maskBuffer,\n      opcode: 0x0a,\n      readOnly,\n      rsv1: false\n    };\n\n    if (isBlob(data)) {\n      if (this._state !== DEFAULT) {\n        this.enqueue([this.getBlobData, data, false, options, cb]);\n      } else {\n        this.getBlobData(data, false, options, cb);\n      }\n    } else if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, data, false, options, cb]);\n    } else {\n      this.sendFrame(Sender.frame(data, options), cb);\n    }\n  }\n\n  /**\n   * Sends a data message to the other peer.\n   *\n   * @param {*} data The message to send\n   * @param {Object} options Options object\n   * @param {Boolean} [options.binary=false] Specifies whether `data` is binary\n   *     or text\n   * @param {Boolean} [options.compress=false] Specifies whether or not to\n   *     compress `data`\n   * @param {Boolean} [options.fin=false] Specifies whether the fragment is the\n   *     last one\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  send(data, options, cb) {\n    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n    let opcode = options.binary ? 2 : 1;\n    let rsv1 = options.compress;\n\n    let byteLength;\n    let readOnly;\n\n    if (typeof data === 'string') {\n      byteLength = Buffer.byteLength(data);\n      readOnly = false;\n    } else if (isBlob(data)) {\n      byteLength = data.size;\n      readOnly = false;\n    } else {\n      data = toBuffer(data);\n      byteLength = data.length;\n      readOnly = toBuffer.readOnly;\n    }\n\n    if (this._firstFragment) {\n      this._firstFragment = false;\n      if (\n        rsv1 &&\n        perMessageDeflate &&\n        perMessageDeflate.params[\n          perMessageDeflate._isServer\n            ? 'server_no_context_takeover'\n            : 'client_no_context_takeover'\n        ]\n      ) {\n        rsv1 = byteLength >= perMessageDeflate._threshold;\n      }\n      this._compress = rsv1;\n    } else {\n      rsv1 = false;\n      opcode = 0;\n    }\n\n    if (options.fin) this._firstFragment = true;\n\n    const opts = {\n      [kByteLength]: byteLength,\n      fin: options.fin,\n      generateMask: this._generateMask,\n      mask: options.mask,\n      maskBuffer: this._maskBuffer,\n      opcode,\n      readOnly,\n      rsv1\n    };\n\n    if (isBlob(data)) {\n      if (this._state !== DEFAULT) {\n        this.enqueue([this.getBlobData, data, this._compress, opts, cb]);\n      } else {\n        this.getBlobData(data, this._compress, opts, cb);\n      }\n    } else if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, data, this._compress, opts, cb]);\n    } else {\n      this.dispatch(data, this._compress, opts, cb);\n    }\n  }\n\n  /**\n   * Gets the contents of a blob as binary data.\n   *\n   * @param {Blob} blob The blob\n   * @param {Boolean} [compress=false] Specifies whether or not to compress\n   *     the data\n   * @param {Object} options Options object\n   * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n   *     FIN bit\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n   *     key\n   * @param {Number} options.opcode The opcode\n   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n   *     modified\n   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n   *     RSV1 bit\n   * @param {Function} [cb] Callback\n   * @private\n   */\n  getBlobData(blob, compress, options, cb) {\n    this._bufferedBytes += options[kByteLength];\n    this._state = GET_BLOB_DATA;\n\n    blob\n      .arrayBuffer()\n      .then((arrayBuffer) => {\n        if (this._socket.destroyed) {\n          const err = new Error(\n            'The socket was closed while the blob was being read'\n          );\n\n          //\n          // `callCallbacks` is called in the next tick to ensure that errors\n          // that might be thrown in the callbacks behave like errors thrown\n          // outside the promise chain.\n          //\n          process.nextTick(callCallbacks, this, err, cb);\n          return;\n        }\n\n        this._bufferedBytes -= options[kByteLength];\n        const data = toBuffer(arrayBuffer);\n\n        if (!compress) {\n          this._state = DEFAULT;\n          this.sendFrame(Sender.frame(data, options), cb);\n          this.dequeue();\n        } else {\n          this.dispatch(data, compress, options, cb);\n        }\n      })\n      .catch((err) => {\n        //\n        // `onError` is called in the next tick for the same reason that\n        // `callCallbacks` above is.\n        //\n        process.nextTick(onError, this, err, cb);\n      });\n  }\n\n  /**\n   * Dispatches a message.\n   *\n   * @param {(Buffer|String)} data The message to send\n   * @param {Boolean} [compress=false] Specifies whether or not to compress\n   *     `data`\n   * @param {Object} options Options object\n   * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n   *     FIN bit\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n   *     key\n   * @param {Number} options.opcode The opcode\n   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n   *     modified\n   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n   *     RSV1 bit\n   * @param {Function} [cb] Callback\n   * @private\n   */\n  dispatch(data, compress, options, cb) {\n    if (!compress) {\n      this.sendFrame(Sender.frame(data, options), cb);\n      return;\n    }\n\n    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n    this._bufferedBytes += options[kByteLength];\n    this._state = DEFLATING;\n    perMessageDeflate.compress(data, options.fin, (_, buf) => {\n      if (this._socket.destroyed) {\n        const err = new Error(\n          'The socket was closed while data was being compressed'\n        );\n\n        callCallbacks(this, err, cb);\n        return;\n      }\n\n      this._bufferedBytes -= options[kByteLength];\n      this._state = DEFAULT;\n      options.readOnly = false;\n      this.sendFrame(Sender.frame(buf, options), cb);\n      this.dequeue();\n    });\n  }\n\n  /**\n   * Executes queued send operations.\n   *\n   * @private\n   */\n  dequeue() {\n    while (this._state === DEFAULT && this._queue.length) {\n      const params = this._queue.shift();\n\n      this._bufferedBytes -= params[3][kByteLength];\n      Reflect.apply(params[0], this, params.slice(1));\n    }\n  }\n\n  /**\n   * Enqueues a send operation.\n   *\n   * @param {Array} params Send operation parameters.\n   * @private\n   */\n  enqueue(params) {\n    this._bufferedBytes += params[3][kByteLength];\n    this._queue.push(params);\n  }\n\n  /**\n   * Sends a frame.\n   *\n   * @param {(Buffer | String)[]} list The frame to send\n   * @param {Function} [cb] Callback\n   * @private\n   */\n  sendFrame(list, cb) {\n    if (list.length === 2) {\n      this._socket.cork();\n      this._socket.write(list[0]);\n      this._socket.write(list[1], cb);\n      this._socket.uncork();\n    } else {\n      this._socket.write(list[0], cb);\n    }\n  }\n}\n\nmodule.exports = Sender;\n\n/**\n * Calls queued callbacks with an error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error to call the callbacks with\n * @param {Function} [cb] The first callback\n * @private\n */\nfunction callCallbacks(sender, err, cb) {\n  if (typeof cb === 'function') cb(err);\n\n  for (let i = 0; i < sender._queue.length; i++) {\n    const params = sender._queue[i];\n    const callback = params[params.length - 1];\n\n    if (typeof callback === 'function') callback(err);\n  }\n}\n\n/**\n * Handles a `Sender` error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error\n * @param {Function} [cb] The first pending callback\n * @private\n */\nfunction onError(sender, err, cb) {\n  callCallbacks(sender, err, cb);\n  sender.onerror(err);\n}\n","'use strict';\n\nconst { kForOnEventAttribute, kListener } = require('./constants');\n\nconst kCode = Symbol('kCode');\nconst kData = Symbol('kData');\nconst kError = Symbol('kError');\nconst kMessage = Symbol('kMessage');\nconst kReason = Symbol('kReason');\nconst kTarget = Symbol('kTarget');\nconst kType = Symbol('kType');\nconst kWasClean = Symbol('kWasClean');\n\n/**\n * Class representing an event.\n */\nclass Event {\n  /**\n   * Create a new `Event`.\n   *\n   * @param {String} type The name of the event\n   * @throws {TypeError} If the `type` argument is not specified\n   */\n  constructor(type) {\n    this[kTarget] = null;\n    this[kType] = type;\n  }\n\n  /**\n   * @type {*}\n   */\n  get target() {\n    return this[kTarget];\n  }\n\n  /**\n   * @type {String}\n   */\n  get type() {\n    return this[kType];\n  }\n}\n\nObject.defineProperty(Event.prototype, 'target', { enumerable: true });\nObject.defineProperty(Event.prototype, 'type', { enumerable: true });\n\n/**\n * Class representing a close event.\n *\n * @extends Event\n */\nclass CloseEvent extends Event {\n  /**\n   * Create a new `CloseEvent`.\n   *\n   * @param {String} type The name of the event\n   * @param {Object} [options] A dictionary object that allows for setting\n   *     attributes via object members of the same name\n   * @param {Number} [options.code=0] The status code explaining why the\n   *     connection was closed\n   * @param {String} [options.reason=''] A human-readable string explaining why\n   *     the connection was closed\n   * @param {Boolean} [options.wasClean=false] Indicates whether or not the\n   *     connection was cleanly closed\n   */\n  constructor(type, options = {}) {\n    super(type);\n\n    this[kCode] = options.code === undefined ? 0 : options.code;\n    this[kReason] = options.reason === undefined ? '' : options.reason;\n    this[kWasClean] = options.wasClean === undefined ? false : options.wasClean;\n  }\n\n  /**\n   * @type {Number}\n   */\n  get code() {\n    return this[kCode];\n  }\n\n  /**\n   * @type {String}\n   */\n  get reason() {\n    return this[kReason];\n  }\n\n  /**\n   * @type {Boolean}\n   */\n  get wasClean() {\n    return this[kWasClean];\n  }\n}\n\nObject.defineProperty(CloseEvent.prototype, 'code', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'reason', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'wasClean', { enumerable: true });\n\n/**\n * Class representing an error event.\n *\n * @extends Event\n */\nclass ErrorEvent extends Event {\n  /**\n   * Create a new `ErrorEvent`.\n   *\n   * @param {String} type The name of the event\n   * @param {Object} [options] A dictionary object that allows for setting\n   *     attributes via object members of the same name\n   * @param {*} [options.error=null] The error that generated this event\n   * @param {String} [options.message=''] The error message\n   */\n  constructor(type, options = {}) {\n    super(type);\n\n    this[kError] = options.error === undefined ? null : options.error;\n    this[kMessage] = options.message === undefined ? '' : options.message;\n  }\n\n  /**\n   * @type {*}\n   */\n  get error() {\n    return this[kError];\n  }\n\n  /**\n   * @type {String}\n   */\n  get message() {\n    return this[kMessage];\n  }\n}\n\nObject.defineProperty(ErrorEvent.prototype, 'error', { enumerable: true });\nObject.defineProperty(ErrorEvent.prototype, 'message', { enumerable: true });\n\n/**\n * Class representing a message event.\n *\n * @extends Event\n */\nclass MessageEvent extends Event {\n  /**\n   * Create a new `MessageEvent`.\n   *\n   * @param {String} type The name of the event\n   * @param {Object} [options] A dictionary object that allows for setting\n   *     attributes via object members of the same name\n   * @param {*} [options.data=null] The message content\n   */\n  constructor(type, options = {}) {\n    super(type);\n\n    this[kData] = options.data === undefined ? null : options.data;\n  }\n\n  /**\n   * @type {*}\n   */\n  get data() {\n    return this[kData];\n  }\n}\n\nObject.defineProperty(MessageEvent.prototype, 'data', { enumerable: true });\n\n/**\n * This provides methods for emulating the `EventTarget` interface. It's not\n * meant to be used directly.\n *\n * @mixin\n */\nconst EventTarget = {\n  /**\n   * Register an event listener.\n   *\n   * @param {String} type A string representing the event type to listen for\n   * @param {(Function|Object)} handler The listener to add\n   * @param {Object} [options] An options object specifies characteristics about\n   *     the event listener\n   * @param {Boolean} [options.once=false] A `Boolean` indicating that the\n   *     listener should be invoked at most once after being added. If `true`,\n   *     the listener would be automatically removed when invoked.\n   * @public\n   */\n  addEventListener(type, handler, options = {}) {\n    for (const listener of this.listeners(type)) {\n      if (\n        !options[kForOnEventAttribute] &&\n        listener[kListener] === handler &&\n        !listener[kForOnEventAttribute]\n      ) {\n        return;\n      }\n    }\n\n    let wrapper;\n\n    if (type === 'message') {\n      wrapper = function onMessage(data, isBinary) {\n        const event = new MessageEvent('message', {\n          data: isBinary ? data : data.toString()\n        });\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else if (type === 'close') {\n      wrapper = function onClose(code, message) {\n        const event = new CloseEvent('close', {\n          code,\n          reason: message.toString(),\n          wasClean: this._closeFrameReceived && this._closeFrameSent\n        });\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else if (type === 'error') {\n      wrapper = function onError(error) {\n        const event = new ErrorEvent('error', {\n          error,\n          message: error.message\n        });\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else if (type === 'open') {\n      wrapper = function onOpen() {\n        const event = new Event('open');\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else {\n      return;\n    }\n\n    wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute];\n    wrapper[kListener] = handler;\n\n    if (options.once) {\n      this.once(type, wrapper);\n    } else {\n      this.on(type, wrapper);\n    }\n  },\n\n  /**\n   * Remove an event listener.\n   *\n   * @param {String} type A string representing the event type to remove\n   * @param {(Function|Object)} handler The listener to remove\n   * @public\n   */\n  removeEventListener(type, handler) {\n    for (const listener of this.listeners(type)) {\n      if (listener[kListener] === handler && !listener[kForOnEventAttribute]) {\n        this.removeListener(type, listener);\n        break;\n      }\n    }\n  }\n};\n\nmodule.exports = {\n  CloseEvent,\n  ErrorEvent,\n  Event,\n  EventTarget,\n  MessageEvent\n};\n\n/**\n * Call an event listener\n *\n * @param {(Function|Object)} listener The listener to call\n * @param {*} thisArg The value to use as `this`` when calling the listener\n * @param {Event} event The event to pass to the listener\n * @private\n */\nfunction callListener(listener, thisArg, event) {\n  if (typeof listener === 'object' && listener.handleEvent) {\n    listener.handleEvent.call(listener, event);\n  } else {\n    listener.call(thisArg, event);\n  }\n}\n","'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Adds an offer to the map of extension offers or a parameter to the map of\n * parameters.\n *\n * @param {Object} dest The map of extension offers or parameters\n * @param {String} name The extension or parameter name\n * @param {(Object|Boolean|String)} elem The extension parameters or the\n *     parameter value\n * @private\n */\nfunction push(dest, name, elem) {\n  if (dest[name] === undefined) dest[name] = [elem];\n  else dest[name].push(elem);\n}\n\n/**\n * Parses the `Sec-WebSocket-Extensions` header into an object.\n *\n * @param {String} header The field value of the header\n * @return {Object} The parsed object\n * @public\n */\nfunction parse(header) {\n  const offers = Object.create(null);\n  let params = Object.create(null);\n  let mustUnescape = false;\n  let isEscaping = false;\n  let inQuotes = false;\n  let extensionName;\n  let paramName;\n  let start = -1;\n  let code = -1;\n  let end = -1;\n  let i = 0;\n\n  for (; i < header.length; i++) {\n    code = header.charCodeAt(i);\n\n    if (extensionName === undefined) {\n      if (end === -1 && tokenChars[code] === 1) {\n        if (start === -1) start = i;\n      } else if (\n        i !== 0 &&\n        (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n      ) {\n        if (end === -1 && start !== -1) end = i;\n      } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {\n        if (start === -1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n\n        if (end === -1) end = i;\n        const name = header.slice(start, end);\n        if (code === 0x2c) {\n          push(offers, name, params);\n          params = Object.create(null);\n        } else {\n          extensionName = name;\n        }\n\n        start = end = -1;\n      } else {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n    } else if (paramName === undefined) {\n      if (end === -1 && tokenChars[code] === 1) {\n        if (start === -1) start = i;\n      } else if (code === 0x20 || code === 0x09) {\n        if (end === -1 && start !== -1) end = i;\n      } else if (code === 0x3b || code === 0x2c) {\n        if (start === -1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n\n        if (end === -1) end = i;\n        push(params, header.slice(start, end), true);\n        if (code === 0x2c) {\n          push(offers, extensionName, params);\n          params = Object.create(null);\n          extensionName = undefined;\n        }\n\n        start = end = -1;\n      } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {\n        paramName = header.slice(start, i);\n        start = end = -1;\n      } else {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n    } else {\n      //\n      // The value of a quoted-string after unescaping must conform to the\n      // token ABNF, so only token characters are valid.\n      // Ref: https://tools.ietf.org/html/rfc6455#section-9.1\n      //\n      if (isEscaping) {\n        if (tokenChars[code] !== 1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n        if (start === -1) start = i;\n        else if (!mustUnescape) mustUnescape = true;\n        isEscaping = false;\n      } else if (inQuotes) {\n        if (tokenChars[code] === 1) {\n          if (start === -1) start = i;\n        } else if (code === 0x22 /* '\"' */ && start !== -1) {\n          inQuotes = false;\n          end = i;\n        } else if (code === 0x5c /* '\\' */) {\n          isEscaping = true;\n        } else {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n      } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {\n        inQuotes = true;\n      } else if (end === -1 && tokenChars[code] === 1) {\n        if (start === -1) start = i;\n      } else if (start !== -1 && (code === 0x20 || code === 0x09)) {\n        if (end === -1) end = i;\n      } else if (code === 0x3b || code === 0x2c) {\n        if (start === -1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n\n        if (end === -1) end = i;\n        let value = header.slice(start, end);\n        if (mustUnescape) {\n          value = value.replace(/\\\\/g, '');\n          mustUnescape = false;\n        }\n        push(params, paramName, value);\n        if (code === 0x2c) {\n          push(offers, extensionName, params);\n          params = Object.create(null);\n          extensionName = undefined;\n        }\n\n        paramName = undefined;\n        start = end = -1;\n      } else {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n    }\n  }\n\n  if (start === -1 || inQuotes || code === 0x20 || code === 0x09) {\n    throw new SyntaxError('Unexpected end of input');\n  }\n\n  if (end === -1) end = i;\n  const token = header.slice(start, end);\n  if (extensionName === undefined) {\n    push(offers, token, params);\n  } else {\n    if (paramName === undefined) {\n      push(params, token, true);\n    } else if (mustUnescape) {\n      push(params, paramName, token.replace(/\\\\/g, ''));\n    } else {\n      push(params, paramName, token);\n    }\n    push(offers, extensionName, params);\n  }\n\n  return offers;\n}\n\n/**\n * Builds the `Sec-WebSocket-Extensions` header field value.\n *\n * @param {Object} extensions The map of extensions and parameters to format\n * @return {String} A string representing the given object\n * @public\n */\nfunction format(extensions) {\n  return Object.keys(extensions)\n    .map((extension) => {\n      let configurations = extensions[extension];\n      if (!Array.isArray(configurations)) configurations = [configurations];\n      return configurations\n        .map((params) => {\n          return [extension]\n            .concat(\n              Object.keys(params).map((k) => {\n                let values = params[k];\n                if (!Array.isArray(values)) values = [values];\n                return values\n                  .map((v) => (v === true ? k : `${k}=${v}`))\n                  .join('; ');\n              })\n            )\n            .join('; ');\n        })\n        .join(', ');\n    })\n    .join(', ');\n}\n\nmodule.exports = { format, parse };\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex|Readable$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst https = require('https');\nconst http = require('http');\nconst net = require('net');\nconst tls = require('tls');\nconst { randomBytes, createHash } = require('crypto');\nconst { Duplex, Readable } = require('stream');\nconst { URL } = require('url');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst Receiver = require('./receiver');\nconst Sender = require('./sender');\nconst { isBlob } = require('./validation');\n\nconst {\n  BINARY_TYPES,\n  CLOSE_TIMEOUT,\n  EMPTY_BUFFER,\n  GUID,\n  kForOnEventAttribute,\n  kListener,\n  kStatusCode,\n  kWebSocket,\n  NOOP\n} = require('./constants');\nconst {\n  EventTarget: { addEventListener, removeEventListener }\n} = require('./event-target');\nconst { format, parse } = require('./extension');\nconst { toBuffer } = require('./buffer-util');\n\nconst kAborted = Symbol('kAborted');\nconst protocolVersions = [8, 13];\nconst readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];\nconst subprotocolRegex = /^[!#$%&'*+\\-.0-9A-Z^_`|a-z~]+$/;\n\n/**\n * Class representing a WebSocket.\n *\n * @extends EventEmitter\n */\nclass WebSocket extends EventEmitter {\n  /**\n   * Create a new `WebSocket`.\n   *\n   * @param {(String|URL)} address The URL to which to connect\n   * @param {(String|String[])} [protocols] The subprotocols\n   * @param {Object} [options] Connection options\n   */\n  constructor(address, protocols, options) {\n    super();\n\n    this._binaryType = BINARY_TYPES[0];\n    this._closeCode = 1006;\n    this._closeFrameReceived = false;\n    this._closeFrameSent = false;\n    this._closeMessage = EMPTY_BUFFER;\n    this._closeTimer = null;\n    this._errorEmitted = false;\n    this._extensions = {};\n    this._paused = false;\n    this._protocol = '';\n    this._readyState = WebSocket.CONNECTING;\n    this._receiver = null;\n    this._sender = null;\n    this._socket = null;\n\n    if (address !== null) {\n      this._bufferedAmount = 0;\n      this._isServer = false;\n      this._redirects = 0;\n\n      if (protocols === undefined) {\n        protocols = [];\n      } else if (!Array.isArray(protocols)) {\n        if (typeof protocols === 'object' && protocols !== null) {\n          options = protocols;\n          protocols = [];\n        } else {\n          protocols = [protocols];\n        }\n      }\n\n      initAsClient(this, address, protocols, options);\n    } else {\n      this._autoPong = options.autoPong;\n      this._closeTimeout = options.closeTimeout;\n      this._isServer = true;\n    }\n  }\n\n  /**\n   * For historical reasons, the custom \"nodebuffer\" type is used by the default\n   * instead of \"blob\".\n   *\n   * @type {String}\n   */\n  get binaryType() {\n    return this._binaryType;\n  }\n\n  set binaryType(type) {\n    if (!BINARY_TYPES.includes(type)) return;\n\n    this._binaryType = type;\n\n    //\n    // Allow to change `binaryType` on the fly.\n    //\n    if (this._receiver) this._receiver._binaryType = type;\n  }\n\n  /**\n   * @type {Number}\n   */\n  get bufferedAmount() {\n    if (!this._socket) return this._bufferedAmount;\n\n    return this._socket._writableState.length + this._sender._bufferedBytes;\n  }\n\n  /**\n   * @type {String}\n   */\n  get extensions() {\n    return Object.keys(this._extensions).join();\n  }\n\n  /**\n   * @type {Boolean}\n   */\n  get isPaused() {\n    return this._paused;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onclose() {\n    return null;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onerror() {\n    return null;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onopen() {\n    return null;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onmessage() {\n    return null;\n  }\n\n  /**\n   * @type {String}\n   */\n  get protocol() {\n    return this._protocol;\n  }\n\n  /**\n   * @type {Number}\n   */\n  get readyState() {\n    return this._readyState;\n  }\n\n  /**\n   * @type {String}\n   */\n  get url() {\n    return this._url;\n  }\n\n  /**\n   * Set up the socket and the internal resources.\n   *\n   * @param {Duplex} socket The network socket between the server and client\n   * @param {Buffer} head The first packet of the upgraded stream\n   * @param {Object} options Options object\n   * @param {Boolean} [options.allowSynchronousEvents=false] Specifies whether\n   *     any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n   *     multiple times in the same tick\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Number} [options.maxBufferedChunks=0] The maximum number of\n   *     buffered data chunks\n   * @param {Number} [options.maxFragments=0] The maximum number of message\n   *     fragments\n   * @param {Number} [options.maxPayload=0] The maximum allowed message size\n   * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n   *     not to skip UTF-8 validation for text and close messages\n   * @private\n   */\n  setSocket(socket, head, options) {\n    const receiver = new Receiver({\n      allowSynchronousEvents: options.allowSynchronousEvents,\n      binaryType: this.binaryType,\n      extensions: this._extensions,\n      isServer: this._isServer,\n      maxBufferedChunks: options.maxBufferedChunks,\n      maxFragments: options.maxFragments,\n      maxPayload: options.maxPayload,\n      skipUTF8Validation: options.skipUTF8Validation\n    });\n\n    const sender = new Sender(socket, this._extensions, options.generateMask);\n\n    this._receiver = receiver;\n    this._sender = sender;\n    this._socket = socket;\n\n    receiver[kWebSocket] = this;\n    sender[kWebSocket] = this;\n    socket[kWebSocket] = this;\n\n    receiver.on('conclude', receiverOnConclude);\n    receiver.on('drain', receiverOnDrain);\n    receiver.on('error', receiverOnError);\n    receiver.on('message', receiverOnMessage);\n    receiver.on('ping', receiverOnPing);\n    receiver.on('pong', receiverOnPong);\n\n    sender.onerror = senderOnError;\n\n    //\n    // These methods may not be available if `socket` is just a `Duplex`.\n    //\n    if (socket.setTimeout) socket.setTimeout(0);\n    if (socket.setNoDelay) socket.setNoDelay();\n\n    if (head.length > 0) socket.unshift(head);\n\n    socket.on('close', socketOnClose);\n    socket.on('data', socketOnData);\n    socket.on('end', socketOnEnd);\n    socket.on('error', socketOnError);\n\n    this._readyState = WebSocket.OPEN;\n    this.emit('open');\n  }\n\n  /**\n   * Emit the `'close'` event.\n   *\n   * @private\n   */\n  emitClose() {\n    if (!this._socket) {\n      this._readyState = WebSocket.CLOSED;\n      this.emit('close', this._closeCode, this._closeMessage);\n      return;\n    }\n\n    if (this._extensions[PerMessageDeflate.extensionName]) {\n      this._extensions[PerMessageDeflate.extensionName].cleanup();\n    }\n\n    this._receiver.removeAllListeners();\n    this._readyState = WebSocket.CLOSED;\n    this.emit('close', this._closeCode, this._closeMessage);\n  }\n\n  /**\n   * Start a closing handshake.\n   *\n   *          +----------+   +-----------+   +----------+\n   *     - - -|ws.close()|-->|close frame|-->|ws.close()|- - -\n   *    |     +----------+   +-----------+   +----------+     |\n   *          +----------+   +-----------+         |\n   * CLOSING  |ws.close()|<--|close frame|<--+-----+       CLOSING\n   *          +----------+   +-----------+   |\n   *    |           |                        |   +---+        |\n   *                +------------------------+-->|fin| - - - -\n   *    |         +---+                      |   +---+\n   *     - - - - -|fin|<---------------------+\n   *              +---+\n   *\n   * @param {Number} [code] Status code explaining why the connection is closing\n   * @param {(String|Buffer)} [data] The reason why the connection is\n   *     closing\n   * @public\n   */\n  close(code, data) {\n    if (this.readyState === WebSocket.CLOSED) return;\n    if (this.readyState === WebSocket.CONNECTING) {\n      const msg = 'WebSocket was closed before the connection was established';\n      abortHandshake(this, this._req, msg);\n      return;\n    }\n\n    if (this.readyState === WebSocket.CLOSING) {\n      if (\n        this._closeFrameSent &&\n        (this._closeFrameReceived || this._receiver._writableState.errorEmitted)\n      ) {\n        this._socket.end();\n      }\n\n      return;\n    }\n\n    this._readyState = WebSocket.CLOSING;\n    this._sender.close(code, data, !this._isServer, (err) => {\n      //\n      // This error is handled by the `'error'` listener on the socket. We only\n      // want to know if the close frame has been sent here.\n      //\n      if (err) return;\n\n      this._closeFrameSent = true;\n\n      if (\n        this._closeFrameReceived ||\n        this._receiver._writableState.errorEmitted\n      ) {\n        this._socket.end();\n      }\n    });\n\n    setCloseTimer(this);\n  }\n\n  /**\n   * Pause the socket.\n   *\n   * @public\n   */\n  pause() {\n    if (\n      this.readyState === WebSocket.CONNECTING ||\n      this.readyState === WebSocket.CLOSED\n    ) {\n      return;\n    }\n\n    this._paused = true;\n    this._socket.pause();\n  }\n\n  /**\n   * Send a ping.\n   *\n   * @param {*} [data] The data to send\n   * @param {Boolean} [mask] Indicates whether or not to mask `data`\n   * @param {Function} [cb] Callback which is executed when the ping is sent\n   * @public\n   */\n  ping(data, mask, cb) {\n    if (this.readyState === WebSocket.CONNECTING) {\n      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n    }\n\n    if (typeof data === 'function') {\n      cb = data;\n      data = mask = undefined;\n    } else if (typeof mask === 'function') {\n      cb = mask;\n      mask = undefined;\n    }\n\n    if (typeof data === 'number') data = data.toString();\n\n    if (this.readyState !== WebSocket.OPEN) {\n      sendAfterClose(this, data, cb);\n      return;\n    }\n\n    if (mask === undefined) mask = !this._isServer;\n    this._sender.ping(data || EMPTY_BUFFER, mask, cb);\n  }\n\n  /**\n   * Send a pong.\n   *\n   * @param {*} [data] The data to send\n   * @param {Boolean} [mask] Indicates whether or not to mask `data`\n   * @param {Function} [cb] Callback which is executed when the pong is sent\n   * @public\n   */\n  pong(data, mask, cb) {\n    if (this.readyState === WebSocket.CONNECTING) {\n      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n    }\n\n    if (typeof data === 'function') {\n      cb = data;\n      data = mask = undefined;\n    } else if (typeof mask === 'function') {\n      cb = mask;\n      mask = undefined;\n    }\n\n    if (typeof data === 'number') data = data.toString();\n\n    if (this.readyState !== WebSocket.OPEN) {\n      sendAfterClose(this, data, cb);\n      return;\n    }\n\n    if (mask === undefined) mask = !this._isServer;\n    this._sender.pong(data || EMPTY_BUFFER, mask, cb);\n  }\n\n  /**\n   * Resume the socket.\n   *\n   * @public\n   */\n  resume() {\n    if (\n      this.readyState === WebSocket.CONNECTING ||\n      this.readyState === WebSocket.CLOSED\n    ) {\n      return;\n    }\n\n    this._paused = false;\n    if (!this._receiver._writableState.needDrain) this._socket.resume();\n  }\n\n  /**\n   * Send a data message.\n   *\n   * @param {*} data The message to send\n   * @param {Object} [options] Options object\n   * @param {Boolean} [options.binary] Specifies whether `data` is binary or\n   *     text\n   * @param {Boolean} [options.compress] Specifies whether or not to compress\n   *     `data`\n   * @param {Boolean} [options.fin=true] Specifies whether the fragment is the\n   *     last one\n   * @param {Boolean} [options.mask] Specifies whether or not to mask `data`\n   * @param {Function} [cb] Callback which is executed when data is written out\n   * @public\n   */\n  send(data, options, cb) {\n    if (this.readyState === WebSocket.CONNECTING) {\n      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n    }\n\n    if (typeof options === 'function') {\n      cb = options;\n      options = {};\n    }\n\n    if (typeof data === 'number') data = data.toString();\n\n    if (this.readyState !== WebSocket.OPEN) {\n      sendAfterClose(this, data, cb);\n      return;\n    }\n\n    const opts = {\n      binary: typeof data !== 'string',\n      mask: !this._isServer,\n      compress: true,\n      fin: true,\n      ...options\n    };\n\n    if (!this._extensions[PerMessageDeflate.extensionName]) {\n      opts.compress = false;\n    }\n\n    this._sender.send(data || EMPTY_BUFFER, opts, cb);\n  }\n\n  /**\n   * Forcibly close the connection.\n   *\n   * @public\n   */\n  terminate() {\n    if (this.readyState === WebSocket.CLOSED) return;\n    if (this.readyState === WebSocket.CONNECTING) {\n      const msg = 'WebSocket was closed before the connection was established';\n      abortHandshake(this, this._req, msg);\n      return;\n    }\n\n    if (this._socket) {\n      this._readyState = WebSocket.CLOSING;\n      this._socket.destroy();\n    }\n  }\n}\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CONNECTING', {\n  enumerable: true,\n  value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CONNECTING', {\n  enumerable: true,\n  value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'OPEN', {\n  enumerable: true,\n  value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'OPEN', {\n  enumerable: true,\n  value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSING', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSING', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSED', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSED')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSED', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSED')\n});\n\n[\n  'binaryType',\n  'bufferedAmount',\n  'extensions',\n  'isPaused',\n  'protocol',\n  'readyState',\n  'url'\n].forEach((property) => {\n  Object.defineProperty(WebSocket.prototype, property, { enumerable: true });\n});\n\n//\n// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.\n// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface\n//\n['open', 'error', 'close', 'message'].forEach((method) => {\n  Object.defineProperty(WebSocket.prototype, `on${method}`, {\n    enumerable: true,\n    get() {\n      for (const listener of this.listeners(method)) {\n        if (listener[kForOnEventAttribute]) return listener[kListener];\n      }\n\n      return null;\n    },\n    set(handler) {\n      for (const listener of this.listeners(method)) {\n        if (listener[kForOnEventAttribute]) {\n          this.removeListener(method, listener);\n          break;\n        }\n      }\n\n      if (typeof handler !== 'function') return;\n\n      this.addEventListener(method, handler, {\n        [kForOnEventAttribute]: true\n      });\n    }\n  });\n});\n\nWebSocket.prototype.addEventListener = addEventListener;\nWebSocket.prototype.removeEventListener = removeEventListener;\n\nmodule.exports = WebSocket;\n\n/**\n * Initialize a WebSocket client.\n *\n * @param {WebSocket} websocket The client to initialize\n * @param {(String|URL)} address The URL to which to connect\n * @param {Array} protocols The subprotocols\n * @param {Object} [options] Connection options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether any\n *     of the `'message'`, `'ping'`, and `'pong'` events can be emitted multiple\n *     times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n *     automatically send a pong in response to a ping\n * @param {Number} [options.closeTimeout=30000] Duration in milliseconds to wait\n *     for the closing handshake to finish after `websocket.close()` is called\n * @param {Function} [options.finishRequest] A function which can be used to\n *     customize the headers of each http request before it is sent\n * @param {Boolean} [options.followRedirects=false] Whether or not to follow\n *     redirects\n * @param {Function} [options.generateMask] The function used to generate the\n *     masking key\n * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the\n *     handshake request\n * @param {Number} [options.maxBufferedChunks=1048576] The maximum number of\n *     buffered data chunks\n * @param {Number} [options.maxFragments=131072] The maximum number of message\n *     fragments\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n *     size\n * @param {Number} [options.maxRedirects=10] The maximum number of redirects\n *     allowed\n * @param {String} [options.origin] Value of the `Origin` or\n *     `Sec-WebSocket-Origin` header\n * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable\n *     permessage-deflate\n * @param {Number} [options.protocolVersion=13] Value of the\n *     `Sec-WebSocket-Version` header\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n *     not to skip UTF-8 validation for text and close messages\n * @private\n */\nfunction initAsClient(websocket, address, protocols, options) {\n  const opts = {\n    allowSynchronousEvents: true,\n    autoPong: true,\n    closeTimeout: CLOSE_TIMEOUT,\n    protocolVersion: protocolVersions[1],\n    maxBufferedChunks: 1024 * 1024,\n    maxFragments: 128 * 1024,\n    maxPayload: 100 * 1024 * 1024,\n    skipUTF8Validation: false,\n    perMessageDeflate: true,\n    followRedirects: false,\n    maxRedirects: 10,\n    ...options,\n    socketPath: undefined,\n    hostname: undefined,\n    protocol: undefined,\n    timeout: undefined,\n    method: 'GET',\n    host: undefined,\n    path: undefined,\n    port: undefined\n  };\n\n  websocket._autoPong = opts.autoPong;\n  websocket._closeTimeout = opts.closeTimeout;\n\n  if (!protocolVersions.includes(opts.protocolVersion)) {\n    throw new RangeError(\n      `Unsupported protocol version: ${opts.protocolVersion} ` +\n        `(supported versions: ${protocolVersions.join(', ')})`\n    );\n  }\n\n  let parsedUrl;\n\n  if (address instanceof URL) {\n    parsedUrl = address;\n  } else {\n    try {\n      parsedUrl = new URL(address);\n    } catch {\n      throw new SyntaxError(`Invalid URL: ${address}`);\n    }\n  }\n\n  if (parsedUrl.protocol === 'http:') {\n    parsedUrl.protocol = 'ws:';\n  } else if (parsedUrl.protocol === 'https:') {\n    parsedUrl.protocol = 'wss:';\n  }\n\n  websocket._url = parsedUrl.href;\n\n  const isSecure = parsedUrl.protocol === 'wss:';\n  const isIpcUrl = parsedUrl.protocol === 'ws+unix:';\n  let invalidUrlMessage;\n\n  if (parsedUrl.protocol !== 'ws:' && !isSecure && !isIpcUrl) {\n    invalidUrlMessage =\n      'The URL\\'s protocol must be one of \"ws:\", \"wss:\", ' +\n      '\"http:\", \"https:\", or \"ws+unix:\"';\n  } else if (isIpcUrl && !parsedUrl.pathname) {\n    invalidUrlMessage = \"The URL's pathname is empty\";\n  } else if (parsedUrl.hash) {\n    invalidUrlMessage = 'The URL contains a fragment identifier';\n  }\n\n  if (invalidUrlMessage) {\n    const err = new SyntaxError(invalidUrlMessage);\n\n    if (websocket._redirects === 0) {\n      throw err;\n    } else {\n      emitErrorAndClose(websocket, err);\n      return;\n    }\n  }\n\n  const defaultPort = isSecure ? 443 : 80;\n  const key = randomBytes(16).toString('base64');\n  const request = isSecure ? https.request : http.request;\n  const protocolSet = new Set();\n  let perMessageDeflate;\n\n  opts.createConnection =\n    opts.createConnection || (isSecure ? tlsConnect : netConnect);\n  opts.defaultPort = opts.defaultPort || defaultPort;\n  opts.port = parsedUrl.port || defaultPort;\n  opts.host = parsedUrl.hostname.startsWith('[')\n    ? parsedUrl.hostname.slice(1, -1)\n    : parsedUrl.hostname;\n  opts.headers = {\n    ...opts.headers,\n    'Sec-WebSocket-Version': opts.protocolVersion,\n    'Sec-WebSocket-Key': key,\n    Connection: 'Upgrade',\n    Upgrade: 'websocket'\n  };\n  opts.path = parsedUrl.pathname + parsedUrl.search;\n  opts.timeout = opts.handshakeTimeout;\n\n  if (opts.perMessageDeflate) {\n    perMessageDeflate = new PerMessageDeflate({\n      ...opts.perMessageDeflate,\n      isServer: false,\n      maxPayload: opts.maxPayload\n    });\n    opts.headers['Sec-WebSocket-Extensions'] = format({\n      [PerMessageDeflate.extensionName]: perMessageDeflate.offer()\n    });\n  }\n  if (protocols.length) {\n    for (const protocol of protocols) {\n      if (\n        typeof protocol !== 'string' ||\n        !subprotocolRegex.test(protocol) ||\n        protocolSet.has(protocol)\n      ) {\n        throw new SyntaxError(\n          'An invalid or duplicated subprotocol was specified'\n        );\n      }\n\n      protocolSet.add(protocol);\n    }\n\n    opts.headers['Sec-WebSocket-Protocol'] = protocols.join(',');\n  }\n  if (opts.origin) {\n    if (opts.protocolVersion < 13) {\n      opts.headers['Sec-WebSocket-Origin'] = opts.origin;\n    } else {\n      opts.headers.Origin = opts.origin;\n    }\n  }\n  if (parsedUrl.username || parsedUrl.password) {\n    opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;\n  }\n\n  if (isIpcUrl) {\n    const parts = opts.path.split(':');\n\n    opts.socketPath = parts[0];\n    opts.path = parts[1];\n  }\n\n  let req;\n\n  if (opts.followRedirects) {\n    if (websocket._redirects === 0) {\n      websocket._originalIpc = isIpcUrl;\n      websocket._originalSecure = isSecure;\n      websocket._originalHostOrSocketPath = isIpcUrl\n        ? opts.socketPath\n        : parsedUrl.host;\n\n      const headers = options && options.headers;\n\n      //\n      // Shallow copy the user provided options so that headers can be changed\n      // without mutating the original object.\n      //\n      options = { ...options, headers: {} };\n\n      if (headers) {\n        for (const [key, value] of Object.entries(headers)) {\n          options.headers[key.toLowerCase()] = value;\n        }\n      }\n    } else if (websocket.listenerCount('redirect') === 0) {\n      const isSameHost = isIpcUrl\n        ? websocket._originalIpc\n          ? opts.socketPath === websocket._originalHostOrSocketPath\n          : false\n        : websocket._originalIpc\n          ? false\n          : parsedUrl.host === websocket._originalHostOrSocketPath;\n\n      if (!isSameHost || (websocket._originalSecure && !isSecure)) {\n        //\n        // Match curl 7.77.0 behavior and drop the following headers. These\n        // headers are also dropped when following a redirect to a subdomain.\n        //\n        delete opts.headers.authorization;\n        delete opts.headers.cookie;\n\n        if (!isSameHost) delete opts.headers.host;\n\n        opts.auth = undefined;\n      }\n    }\n\n    //\n    // Match curl 7.77.0 behavior and make the first `Authorization` header win.\n    // If the `Authorization` header is set, then there is nothing to do as it\n    // will take precedence.\n    //\n    if (opts.auth && !options.headers.authorization) {\n      options.headers.authorization =\n        'Basic ' + Buffer.from(opts.auth).toString('base64');\n    }\n\n    req = websocket._req = request(opts);\n\n    if (websocket._redirects) {\n      //\n      // Unlike what is done for the `'upgrade'` event, no early exit is\n      // triggered here if the user calls `websocket.close()` or\n      // `websocket.terminate()` from a listener of the `'redirect'` event. This\n      // is because the user can also call `request.destroy()` with an error\n      // before calling `websocket.close()` or `websocket.terminate()` and this\n      // would result in an error being emitted on the `request` object with no\n      // `'error'` event listeners attached.\n      //\n      websocket.emit('redirect', websocket.url, req);\n    }\n  } else {\n    req = websocket._req = request(opts);\n  }\n\n  if (opts.timeout) {\n    req.on('timeout', () => {\n      abortHandshake(websocket, req, 'Opening handshake has timed out');\n    });\n  }\n\n  req.on('error', (err) => {\n    if (req === null || req[kAborted]) return;\n\n    req = websocket._req = null;\n    emitErrorAndClose(websocket, err);\n  });\n\n  req.on('response', (res) => {\n    const location = res.headers.location;\n    const statusCode = res.statusCode;\n\n    if (\n      location &&\n      opts.followRedirects &&\n      statusCode >= 300 &&\n      statusCode < 400\n    ) {\n      if (++websocket._redirects > opts.maxRedirects) {\n        abortHandshake(websocket, req, 'Maximum redirects exceeded');\n        return;\n      }\n\n      req.abort();\n\n      let addr;\n\n      try {\n        addr = new URL(location, address);\n      } catch (e) {\n        const err = new SyntaxError(`Invalid URL: ${location}`);\n        emitErrorAndClose(websocket, err);\n        return;\n      }\n\n      initAsClient(websocket, addr, protocols, options);\n    } else if (!websocket.emit('unexpected-response', req, res)) {\n      abortHandshake(\n        websocket,\n        req,\n        `Unexpected server response: ${res.statusCode}`\n      );\n    }\n  });\n\n  req.on('upgrade', (res, socket, head) => {\n    websocket.emit('upgrade', res);\n\n    //\n    // The user may have closed the connection from a listener of the\n    // `'upgrade'` event.\n    //\n    if (websocket.readyState !== WebSocket.CONNECTING) return;\n\n    req = websocket._req = null;\n\n    const upgrade = res.headers.upgrade;\n\n    if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n      abortHandshake(websocket, socket, 'Invalid Upgrade header');\n      return;\n    }\n\n    const digest = createHash('sha1')\n      .update(key + GUID)\n      .digest('base64');\n\n    if (res.headers['sec-websocket-accept'] !== digest) {\n      abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header');\n      return;\n    }\n\n    const serverProt = res.headers['sec-websocket-protocol'];\n    let protError;\n\n    if (serverProt !== undefined) {\n      if (!protocolSet.size) {\n        protError = 'Server sent a subprotocol but none was requested';\n      } else if (!protocolSet.has(serverProt)) {\n        protError = 'Server sent an invalid subprotocol';\n      }\n    } else if (protocolSet.size) {\n      protError = 'Server sent no subprotocol';\n    }\n\n    if (protError) {\n      abortHandshake(websocket, socket, protError);\n      return;\n    }\n\n    if (serverProt) websocket._protocol = serverProt;\n\n    const secWebSocketExtensions = res.headers['sec-websocket-extensions'];\n\n    if (secWebSocketExtensions !== undefined) {\n      if (!perMessageDeflate) {\n        const message =\n          'Server sent a Sec-WebSocket-Extensions header but no extension ' +\n          'was requested';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      let extensions;\n\n      try {\n        extensions = parse(secWebSocketExtensions);\n      } catch (err) {\n        const message = 'Invalid Sec-WebSocket-Extensions header';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      const extensionNames = Object.keys(extensions);\n\n      if (\n        extensionNames.length !== 1 ||\n        extensionNames[0] !== PerMessageDeflate.extensionName\n      ) {\n        const message = 'Server indicated an extension that was not requested';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      try {\n        perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);\n      } catch (err) {\n        const message = 'Invalid Sec-WebSocket-Extensions header';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      websocket._extensions[PerMessageDeflate.extensionName] =\n        perMessageDeflate;\n    }\n\n    websocket.setSocket(socket, head, {\n      allowSynchronousEvents: opts.allowSynchronousEvents,\n      generateMask: opts.generateMask,\n      maxBufferedChunks: opts.maxBufferedChunks,\n      maxFragments: opts.maxFragments,\n      maxPayload: opts.maxPayload,\n      skipUTF8Validation: opts.skipUTF8Validation\n    });\n  });\n\n  if (opts.finishRequest) {\n    opts.finishRequest(req, websocket);\n  } else {\n    req.end();\n  }\n}\n\n/**\n * Emit the `'error'` and `'close'` events.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {Error} The error to emit\n * @private\n */\nfunction emitErrorAndClose(websocket, err) {\n  websocket._readyState = WebSocket.CLOSING;\n  //\n  // The following assignment is practically useless and is done only for\n  // consistency.\n  //\n  websocket._errorEmitted = true;\n  websocket.emit('error', err);\n  websocket.emitClose();\n}\n\n/**\n * Create a `net.Socket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {net.Socket} The newly created socket used to start the connection\n * @private\n */\nfunction netConnect(options) {\n  options.path = options.socketPath;\n  return net.connect(options);\n}\n\n/**\n * Create a `tls.TLSSocket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {tls.TLSSocket} The newly created socket used to start the connection\n * @private\n */\nfunction tlsConnect(options) {\n  options.path = undefined;\n\n  if (!options.servername && options.servername !== '') {\n    options.servername = net.isIP(options.host) ? '' : options.host;\n  }\n\n  return tls.connect(options);\n}\n\n/**\n * Abort the handshake and emit an error.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to\n *     abort or the socket to destroy\n * @param {String} message The error message\n * @private\n */\nfunction abortHandshake(websocket, stream, message) {\n  websocket._readyState = WebSocket.CLOSING;\n\n  const err = new Error(message);\n  Error.captureStackTrace(err, abortHandshake);\n\n  if (stream.setHeader) {\n    stream[kAborted] = true;\n    stream.abort();\n\n    if (stream.socket && !stream.socket.destroyed) {\n      //\n      // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if\n      // called after the request completed. See\n      // https://github.com/websockets/ws/issues/1869.\n      //\n      stream.socket.destroy();\n    }\n\n    process.nextTick(emitErrorAndClose, websocket, err);\n  } else {\n    stream.destroy(err);\n    stream.once('error', websocket.emit.bind(websocket, 'error'));\n    stream.once('close', websocket.emitClose.bind(websocket));\n  }\n}\n\n/**\n * Handle cases where the `ping()`, `pong()`, or `send()` methods are called\n * when the `readyState` attribute is `CLOSING` or `CLOSED`.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {*} [data] The data to send\n * @param {Function} [cb] Callback\n * @private\n */\nfunction sendAfterClose(websocket, data, cb) {\n  if (data) {\n    const length = isBlob(data) ? data.size : toBuffer(data).length;\n\n    //\n    // The `_bufferedAmount` property is used only when the peer is a client and\n    // the opening handshake fails. Under these circumstances, in fact, the\n    // `setSocket()` method is not called, so the `_socket` and `_sender`\n    // properties are set to `null`.\n    //\n    if (websocket._socket) websocket._sender._bufferedBytes += length;\n    else websocket._bufferedAmount += length;\n  }\n\n  if (cb) {\n    const err = new Error(\n      `WebSocket is not open: readyState ${websocket.readyState} ` +\n        `(${readyStates[websocket.readyState]})`\n    );\n    process.nextTick(cb, err);\n  }\n}\n\n/**\n * The listener of the `Receiver` `'conclude'` event.\n *\n * @param {Number} code The status code\n * @param {Buffer} reason The reason for closing\n * @private\n */\nfunction receiverOnConclude(code, reason) {\n  const websocket = this[kWebSocket];\n\n  websocket._closeFrameReceived = true;\n  websocket._closeMessage = reason;\n  websocket._closeCode = code;\n\n  if (websocket._socket[kWebSocket] === undefined) return;\n\n  websocket._socket.removeListener('data', socketOnData);\n  process.nextTick(resume, websocket._socket);\n\n  if (code === 1005) websocket.close();\n  else websocket.close(code, reason);\n}\n\n/**\n * The listener of the `Receiver` `'drain'` event.\n *\n * @private\n */\nfunction receiverOnDrain() {\n  const websocket = this[kWebSocket];\n\n  if (!websocket.isPaused) websocket._socket.resume();\n}\n\n/**\n * The listener of the `Receiver` `'error'` event.\n *\n * @param {(RangeError|Error)} err The emitted error\n * @private\n */\nfunction receiverOnError(err) {\n  const websocket = this[kWebSocket];\n\n  if (websocket._socket[kWebSocket] !== undefined) {\n    websocket._socket.removeListener('data', socketOnData);\n\n    //\n    // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See\n    // https://github.com/websockets/ws/issues/1940.\n    //\n    process.nextTick(resume, websocket._socket);\n\n    websocket.close(err[kStatusCode]);\n  }\n\n  if (!websocket._errorEmitted) {\n    websocket._errorEmitted = true;\n    websocket.emit('error', err);\n  }\n}\n\n/**\n * The listener of the `Receiver` `'finish'` event.\n *\n * @private\n */\nfunction receiverOnFinish() {\n  this[kWebSocket].emitClose();\n}\n\n/**\n * The listener of the `Receiver` `'message'` event.\n *\n * @param {Buffer|ArrayBuffer|Buffer[])} data The message\n * @param {Boolean} isBinary Specifies whether the message is binary or not\n * @private\n */\nfunction receiverOnMessage(data, isBinary) {\n  this[kWebSocket].emit('message', data, isBinary);\n}\n\n/**\n * The listener of the `Receiver` `'ping'` event.\n *\n * @param {Buffer} data The data included in the ping frame\n * @private\n */\nfunction receiverOnPing(data) {\n  const websocket = this[kWebSocket];\n\n  if (websocket._autoPong) websocket.pong(data, !this._isServer, NOOP);\n  websocket.emit('ping', data);\n}\n\n/**\n * The listener of the `Receiver` `'pong'` event.\n *\n * @param {Buffer} data The data included in the pong frame\n * @private\n */\nfunction receiverOnPong(data) {\n  this[kWebSocket].emit('pong', data);\n}\n\n/**\n * Resume a readable stream\n *\n * @param {Readable} stream The readable stream\n * @private\n */\nfunction resume(stream) {\n  stream.resume();\n}\n\n/**\n * The `Sender` error event handler.\n *\n * @param {Error} The error\n * @private\n */\nfunction senderOnError(err) {\n  const websocket = this[kWebSocket];\n\n  if (websocket.readyState === WebSocket.CLOSED) return;\n  if (websocket.readyState === WebSocket.OPEN) {\n    websocket._readyState = WebSocket.CLOSING;\n    setCloseTimer(websocket);\n  }\n\n  //\n  // `socket.end()` is used instead of `socket.destroy()` to allow the other\n  // peer to finish sending queued data. There is no need to set a timer here\n  // because `CLOSING` means that it is already set or not needed.\n  //\n  this._socket.end();\n\n  if (!websocket._errorEmitted) {\n    websocket._errorEmitted = true;\n    websocket.emit('error', err);\n  }\n}\n\n/**\n * Set a timer to destroy the underlying raw socket of a WebSocket.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @private\n */\nfunction setCloseTimer(websocket) {\n  websocket._closeTimer = setTimeout(\n    websocket._socket.destroy.bind(websocket._socket),\n    websocket._closeTimeout\n  );\n}\n\n/**\n * The listener of the socket `'close'` event.\n *\n * @private\n */\nfunction socketOnClose() {\n  const websocket = this[kWebSocket];\n\n  this.removeListener('close', socketOnClose);\n  this.removeListener('data', socketOnData);\n  this.removeListener('end', socketOnEnd);\n\n  websocket._readyState = WebSocket.CLOSING;\n\n  //\n  // The close frame might not have been received or the `'end'` event emitted,\n  // for example, if the socket was destroyed due to an error. Ensure that the\n  // `receiver` stream is closed after writing any remaining buffered data to\n  // it. If the readable side of the socket is in flowing mode then there is no\n  // buffered data as everything has been already written. If instead, the\n  // socket is paused, any possible buffered data will be read as a single\n  // chunk.\n  //\n  if (\n    !this._readableState.endEmitted &&\n    !websocket._closeFrameReceived &&\n    !websocket._receiver._writableState.errorEmitted &&\n    this._readableState.length !== 0\n  ) {\n    const chunk = this.read(this._readableState.length);\n\n    websocket._receiver.write(chunk);\n  }\n\n  websocket._receiver.end();\n\n  this[kWebSocket] = undefined;\n\n  clearTimeout(websocket._closeTimer);\n\n  if (\n    websocket._receiver._writableState.finished ||\n    websocket._receiver._writableState.errorEmitted\n  ) {\n    websocket.emitClose();\n  } else {\n    websocket._receiver.on('error', receiverOnFinish);\n    websocket._receiver.on('finish', receiverOnFinish);\n  }\n}\n\n/**\n * The listener of the socket `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction socketOnData(chunk) {\n  if (!this[kWebSocket]._receiver.write(chunk)) {\n    this.pause();\n  }\n}\n\n/**\n * The listener of the socket `'end'` event.\n *\n * @private\n */\nfunction socketOnEnd() {\n  const websocket = this[kWebSocket];\n\n  websocket._readyState = WebSocket.CLOSING;\n  websocket._receiver.end();\n  this.end();\n}\n\n/**\n * The listener of the socket `'error'` event.\n *\n * @private\n */\nfunction socketOnError() {\n  const websocket = this[kWebSocket];\n\n  this.removeListener('error', socketOnError);\n  this.on('error', NOOP);\n\n  if (websocket) {\n    websocket._readyState = WebSocket.CLOSING;\n    this.destroy();\n  }\n}\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^WebSocket$\" }] */\n'use strict';\n\nconst WebSocket = require('./websocket');\nconst { Duplex } = require('stream');\n\n/**\n * Emits the `'close'` event on a stream.\n *\n * @param {Duplex} stream The stream.\n * @private\n */\nfunction emitClose(stream) {\n  stream.emit('close');\n}\n\n/**\n * The listener of the `'end'` event.\n *\n * @private\n */\nfunction duplexOnEnd() {\n  if (!this.destroyed && this._writableState.finished) {\n    this.destroy();\n  }\n}\n\n/**\n * The listener of the `'error'` event.\n *\n * @param {Error} err The error\n * @private\n */\nfunction duplexOnError(err) {\n  this.removeListener('error', duplexOnError);\n  this.destroy();\n  if (this.listenerCount('error') === 0) {\n    // Do not suppress the throwing behavior.\n    this.emit('error', err);\n  }\n}\n\n/**\n * Wraps a `WebSocket` in a duplex stream.\n *\n * @param {WebSocket} ws The `WebSocket` to wrap\n * @param {Object} [options] The options for the `Duplex` constructor\n * @return {Duplex} The duplex stream\n * @public\n */\nfunction createWebSocketStream(ws, options) {\n  let terminateOnDestroy = true;\n\n  const duplex = new Duplex({\n    ...options,\n    autoDestroy: false,\n    emitClose: false,\n    objectMode: false,\n    writableObjectMode: false\n  });\n\n  ws.on('message', function message(msg, isBinary) {\n    const data =\n      !isBinary && duplex._readableState.objectMode ? msg.toString() : msg;\n\n    if (!duplex.push(data)) ws.pause();\n  });\n\n  ws.once('error', function error(err) {\n    if (duplex.destroyed) return;\n\n    // Prevent `ws.terminate()` from being called by `duplex._destroy()`.\n    //\n    // - If the `'error'` event is emitted before the `'open'` event, then\n    //   `ws.terminate()` is a noop as no socket is assigned.\n    // - Otherwise, the error is re-emitted by the listener of the `'error'`\n    //   event of the `Receiver` object. The listener already closes the\n    //   connection by calling `ws.close()`. This allows a close frame to be\n    //   sent to the other peer. If `ws.terminate()` is called right after this,\n    //   then the close frame might not be sent.\n    terminateOnDestroy = false;\n    duplex.destroy(err);\n  });\n\n  ws.once('close', function close() {\n    if (duplex.destroyed) return;\n\n    duplex.push(null);\n  });\n\n  duplex._destroy = function (err, callback) {\n    if (ws.readyState === ws.CLOSED) {\n      callback(err);\n      process.nextTick(emitClose, duplex);\n      return;\n    }\n\n    let called = false;\n\n    ws.once('error', function error(err) {\n      called = true;\n      callback(err);\n    });\n\n    ws.once('close', function close() {\n      if (!called) callback(err);\n      process.nextTick(emitClose, duplex);\n    });\n\n    if (terminateOnDestroy) ws.terminate();\n  };\n\n  duplex._final = function (callback) {\n    if (ws.readyState === ws.CONNECTING) {\n      ws.once('open', function open() {\n        duplex._final(callback);\n      });\n      return;\n    }\n\n    // If the value of the `_socket` property is `null` it means that `ws` is a\n    // client websocket and the handshake failed. In fact, when this happens, a\n    // socket is never assigned to the websocket. Wait for the `'error'` event\n    // that will be emitted by the websocket.\n    if (ws._socket === null) return;\n\n    if (ws._socket._writableState.finished) {\n      callback();\n      if (duplex._readableState.endEmitted) duplex.destroy();\n    } else {\n      ws._socket.once('finish', function finish() {\n        // `duplex` is not destroyed here because the `'end'` event will be\n        // emitted on `duplex` after this `'finish'` event. The EOF signaling\n        // `null` chunk is, in fact, pushed when the websocket emits `'close'`.\n        callback();\n      });\n      ws.close();\n    }\n  };\n\n  duplex._read = function () {\n    if (ws.isPaused) ws.resume();\n  };\n\n  duplex._write = function (chunk, encoding, callback) {\n    if (ws.readyState === ws.CONNECTING) {\n      ws.once('open', function open() {\n        duplex._write(chunk, encoding, callback);\n      });\n      return;\n    }\n\n    ws.send(chunk, callback);\n  };\n\n  duplex.on('end', duplexOnEnd);\n  duplex.on('error', duplexOnError);\n  return duplex;\n}\n\nmodule.exports = createWebSocketStream;\n","'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names.\n *\n * @param {String} header The field value of the header\n * @return {Set} The subprotocol names\n * @public\n */\nfunction parse(header) {\n  const protocols = new Set();\n  let start = -1;\n  let end = -1;\n  let i = 0;\n\n  for (i; i < header.length; i++) {\n    const code = header.charCodeAt(i);\n\n    if (end === -1 && tokenChars[code] === 1) {\n      if (start === -1) start = i;\n    } else if (\n      i !== 0 &&\n      (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n    ) {\n      if (end === -1 && start !== -1) end = i;\n    } else if (code === 0x2c /* ',' */) {\n      if (start === -1) {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n\n      if (end === -1) end = i;\n\n      const protocol = header.slice(start, end);\n\n      if (protocols.has(protocol)) {\n        throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n      }\n\n      protocols.add(protocol);\n      start = end = -1;\n    } else {\n      throw new SyntaxError(`Unexpected character at index ${i}`);\n    }\n  }\n\n  if (start === -1 || end !== -1) {\n    throw new SyntaxError('Unexpected end of input');\n  }\n\n  const protocol = header.slice(start, i);\n\n  if (protocols.has(protocol)) {\n    throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n  }\n\n  protocols.add(protocol);\n  return protocols;\n}\n\nmodule.exports = { parse };\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst http = require('http');\nconst { Duplex } = require('stream');\nconst { createHash } = require('crypto');\n\nconst extension = require('./extension');\nconst PerMessageDeflate = require('./permessage-deflate');\nconst subprotocol = require('./subprotocol');\nconst WebSocket = require('./websocket');\nconst { CLOSE_TIMEOUT, GUID, kWebSocket } = require('./constants');\n\nconst keyRegex = /^[+/0-9A-Za-z]{22}==$/;\n\nconst RUNNING = 0;\nconst CLOSING = 1;\nconst CLOSED = 2;\n\n/**\n * Class representing a WebSocket server.\n *\n * @extends EventEmitter\n */\nclass WebSocketServer extends EventEmitter {\n  /**\n   * Create a `WebSocketServer` instance.\n   *\n   * @param {Object} options Configuration options\n   * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n   *     any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n   *     multiple times in the same tick\n   * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n   *     automatically send a pong in response to a ping\n   * @param {Number} [options.backlog=511] The maximum length of the queue of\n   *     pending connections\n   * @param {Boolean} [options.clientTracking=true] Specifies whether or not to\n   *     track clients\n   * @param {Number} [options.closeTimeout=30000] Duration in milliseconds to\n   *     wait for the closing handshake to finish after `websocket.close()` is\n   *     called\n   * @param {Function} [options.handleProtocols] A hook to handle protocols\n   * @param {String} [options.host] The hostname where to bind the server\n   * @param {Number} [options.maxBufferedChunks=1048576] The maximum number of\n   *     buffered data chunks\n   * @param {Number} [options.maxFragments=131072] The maximum number of message\n   *     fragments\n   * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n   *     size\n   * @param {Boolean} [options.noServer=false] Enable no server mode\n   * @param {String} [options.path] Accept only connections matching this path\n   * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable\n   *     permessage-deflate\n   * @param {Number} [options.port] The port where to bind the server\n   * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S\n   *     server to use\n   * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n   *     not to skip UTF-8 validation for text and close messages\n   * @param {Function} [options.verifyClient] A hook to reject connections\n   * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket`\n   *     class to use. It must be the `WebSocket` class or class that extends it\n   * @param {Function} [callback] A listener for the `listening` event\n   */\n  constructor(options, callback) {\n    super();\n\n    options = {\n      allowSynchronousEvents: true,\n      autoPong: true,\n      maxBufferedChunks: 1024 * 1024,\n      maxFragments: 128 * 1024,\n      maxPayload: 100 * 1024 * 1024,\n      skipUTF8Validation: false,\n      perMessageDeflate: false,\n      handleProtocols: null,\n      clientTracking: true,\n      closeTimeout: CLOSE_TIMEOUT,\n      verifyClient: null,\n      noServer: false,\n      backlog: null, // use default (511 as implemented in net.js)\n      server: null,\n      host: null,\n      path: null,\n      port: null,\n      WebSocket,\n      ...options\n    };\n\n    if (\n      (options.port == null && !options.server && !options.noServer) ||\n      (options.port != null && (options.server || options.noServer)) ||\n      (options.server && options.noServer)\n    ) {\n      throw new TypeError(\n        'One and only one of the \"port\", \"server\", or \"noServer\" options ' +\n          'must be specified'\n      );\n    }\n\n    if (options.port != null) {\n      this._server = http.createServer((req, res) => {\n        const body = http.STATUS_CODES[426];\n\n        res.writeHead(426, {\n          'Content-Length': body.length,\n          'Content-Type': 'text/plain'\n        });\n        res.end(body);\n      });\n      this._server.listen(\n        options.port,\n        options.host,\n        options.backlog,\n        callback\n      );\n    } else if (options.server) {\n      this._server = options.server;\n    }\n\n    if (this._server) {\n      const emitConnection = this.emit.bind(this, 'connection');\n\n      this._removeListeners = addListeners(this._server, {\n        listening: this.emit.bind(this, 'listening'),\n        error: this.emit.bind(this, 'error'),\n        upgrade: (req, socket, head) => {\n          this.handleUpgrade(req, socket, head, emitConnection);\n        }\n      });\n    }\n\n    if (options.perMessageDeflate === true) options.perMessageDeflate = {};\n    if (options.clientTracking) {\n      this.clients = new Set();\n      this._shouldEmitClose = false;\n    }\n\n    this.options = options;\n    this._state = RUNNING;\n  }\n\n  /**\n   * Returns the bound address, the address family name, and port of the server\n   * as reported by the operating system if listening on an IP socket.\n   * If the server is listening on a pipe or UNIX domain socket, the name is\n   * returned as a string.\n   *\n   * @return {(Object|String|null)} The address of the server\n   * @public\n   */\n  address() {\n    if (this.options.noServer) {\n      throw new Error('The server is operating in \"noServer\" mode');\n    }\n\n    if (!this._server) return null;\n    return this._server.address();\n  }\n\n  /**\n   * Stop the server from accepting new connections and emit the `'close'` event\n   * when all existing connections are closed.\n   *\n   * @param {Function} [cb] A one-time listener for the `'close'` event\n   * @public\n   */\n  close(cb) {\n    if (this._state === CLOSED) {\n      if (cb) {\n        this.once('close', () => {\n          cb(new Error('The server is not running'));\n        });\n      }\n\n      process.nextTick(emitClose, this);\n      return;\n    }\n\n    if (cb) this.once('close', cb);\n\n    if (this._state === CLOSING) return;\n    this._state = CLOSING;\n\n    if (this.options.noServer || this.options.server) {\n      if (this._server) {\n        this._removeListeners();\n        this._removeListeners = this._server = null;\n      }\n\n      if (this.clients) {\n        if (!this.clients.size) {\n          process.nextTick(emitClose, this);\n        } else {\n          this._shouldEmitClose = true;\n        }\n      } else {\n        process.nextTick(emitClose, this);\n      }\n    } else {\n      const server = this._server;\n\n      this._removeListeners();\n      this._removeListeners = this._server = null;\n\n      //\n      // The HTTP/S server was created internally. Close it, and rely on its\n      // `'close'` event.\n      //\n      server.close(() => {\n        emitClose(this);\n      });\n    }\n  }\n\n  /**\n   * See if a given request should be handled by this server instance.\n   *\n   * @param {http.IncomingMessage} req Request object to inspect\n   * @return {Boolean} `true` if the request is valid, else `false`\n   * @public\n   */\n  shouldHandle(req) {\n    if (this.options.path) {\n      const index = req.url.indexOf('?');\n      const pathname = index !== -1 ? req.url.slice(0, index) : req.url;\n\n      if (pathname !== this.options.path) return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Handle a HTTP Upgrade request.\n   *\n   * @param {http.IncomingMessage} req The request object\n   * @param {Duplex} socket The network socket between the server and client\n   * @param {Buffer} head The first packet of the upgraded stream\n   * @param {Function} cb Callback\n   * @public\n   */\n  handleUpgrade(req, socket, head, cb) {\n    socket.on('error', socketOnError);\n\n    const key = req.headers['sec-websocket-key'];\n    const upgrade = req.headers.upgrade;\n    const version = +req.headers['sec-websocket-version'];\n\n    if (req.method !== 'GET') {\n      const message = 'Invalid HTTP method';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 405, message);\n      return;\n    }\n\n    if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n      const message = 'Invalid Upgrade header';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n      return;\n    }\n\n    if (key === undefined || !keyRegex.test(key)) {\n      const message = 'Missing or invalid Sec-WebSocket-Key header';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n      return;\n    }\n\n    if (version !== 13 && version !== 8) {\n      const message = 'Missing or invalid Sec-WebSocket-Version header';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 400, message, {\n        'Sec-WebSocket-Version': '13, 8'\n      });\n      return;\n    }\n\n    if (!this.shouldHandle(req)) {\n      abortHandshake(socket, 400);\n      return;\n    }\n\n    const secWebSocketProtocol = req.headers['sec-websocket-protocol'];\n    let protocols = new Set();\n\n    if (secWebSocketProtocol !== undefined) {\n      try {\n        protocols = subprotocol.parse(secWebSocketProtocol);\n      } catch (err) {\n        const message = 'Invalid Sec-WebSocket-Protocol header';\n        abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n        return;\n      }\n    }\n\n    const secWebSocketExtensions = req.headers['sec-websocket-extensions'];\n    const extensions = {};\n\n    if (\n      this.options.perMessageDeflate &&\n      secWebSocketExtensions !== undefined\n    ) {\n      const perMessageDeflate = new PerMessageDeflate({\n        ...this.options.perMessageDeflate,\n        isServer: true,\n        maxPayload: this.options.maxPayload\n      });\n\n      try {\n        const offers = extension.parse(secWebSocketExtensions);\n\n        if (offers[PerMessageDeflate.extensionName]) {\n          perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);\n          extensions[PerMessageDeflate.extensionName] = perMessageDeflate;\n        }\n      } catch (err) {\n        const message =\n          'Invalid or unacceptable Sec-WebSocket-Extensions header';\n        abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n        return;\n      }\n    }\n\n    //\n    // Optionally call external client verification handler.\n    //\n    if (this.options.verifyClient) {\n      const info = {\n        origin:\n          req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],\n        secure: !!(req.socket.authorized || req.socket.encrypted),\n        req\n      };\n\n      if (this.options.verifyClient.length === 2) {\n        this.options.verifyClient(info, (verified, code, message, headers) => {\n          if (!verified) {\n            return abortHandshake(socket, code || 401, message, headers);\n          }\n\n          this.completeUpgrade(\n            extensions,\n            key,\n            protocols,\n            req,\n            socket,\n            head,\n            cb\n          );\n        });\n        return;\n      }\n\n      if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);\n    }\n\n    this.completeUpgrade(extensions, key, protocols, req, socket, head, cb);\n  }\n\n  /**\n   * Upgrade the connection to WebSocket.\n   *\n   * @param {Object} extensions The accepted extensions\n   * @param {String} key The value of the `Sec-WebSocket-Key` header\n   * @param {Set} protocols The subprotocols\n   * @param {http.IncomingMessage} req The request object\n   * @param {Duplex} socket The network socket between the server and client\n   * @param {Buffer} head The first packet of the upgraded stream\n   * @param {Function} cb Callback\n   * @throws {Error} If called more than once with the same socket\n   * @private\n   */\n  completeUpgrade(extensions, key, protocols, req, socket, head, cb) {\n    //\n    // Destroy the socket if the client has already sent a FIN packet.\n    //\n    if (!socket.readable || !socket.writable) return socket.destroy();\n\n    if (socket[kWebSocket]) {\n      throw new Error(\n        'server.handleUpgrade() was called more than once with the same ' +\n          'socket, possibly due to a misconfiguration'\n      );\n    }\n\n    if (this._state > RUNNING) return abortHandshake(socket, 503);\n\n    const digest = createHash('sha1')\n      .update(key + GUID)\n      .digest('base64');\n\n    const headers = [\n      'HTTP/1.1 101 Switching Protocols',\n      'Upgrade: websocket',\n      'Connection: Upgrade',\n      `Sec-WebSocket-Accept: ${digest}`\n    ];\n\n    const ws = new this.options.WebSocket(null, undefined, this.options);\n\n    if (protocols.size) {\n      //\n      // Optionally call external protocol selection handler.\n      //\n      const protocol = this.options.handleProtocols\n        ? this.options.handleProtocols(protocols, req)\n        : protocols.values().next().value;\n\n      if (protocol) {\n        headers.push(`Sec-WebSocket-Protocol: ${protocol}`);\n        ws._protocol = protocol;\n      }\n    }\n\n    if (extensions[PerMessageDeflate.extensionName]) {\n      const params = extensions[PerMessageDeflate.extensionName].params;\n      const value = extension.format({\n        [PerMessageDeflate.extensionName]: [params]\n      });\n      headers.push(`Sec-WebSocket-Extensions: ${value}`);\n      ws._extensions = extensions;\n    }\n\n    //\n    // Allow external modification/inspection of handshake headers.\n    //\n    this.emit('headers', headers, req);\n\n    socket.write(headers.concat('\\r\\n').join('\\r\\n'));\n    socket.removeListener('error', socketOnError);\n\n    ws.setSocket(socket, head, {\n      allowSynchronousEvents: this.options.allowSynchronousEvents,\n      maxBufferedChunks: this.options.maxBufferedChunks,\n      maxFragments: this.options.maxFragments,\n      maxPayload: this.options.maxPayload,\n      skipUTF8Validation: this.options.skipUTF8Validation\n    });\n\n    if (this.clients) {\n      this.clients.add(ws);\n      ws.on('close', () => {\n        this.clients.delete(ws);\n\n        if (this._shouldEmitClose && !this.clients.size) {\n          process.nextTick(emitClose, this);\n        }\n      });\n    }\n\n    cb(ws, req);\n  }\n}\n\nmodule.exports = WebSocketServer;\n\n/**\n * Add event listeners on an `EventEmitter` using a map of <event, listener>\n * pairs.\n *\n * @param {EventEmitter} server The event emitter\n * @param {Object.<String, Function>} map The listeners to add\n * @return {Function} A function that will remove the added listeners when\n *     called\n * @private\n */\nfunction addListeners(server, map) {\n  for (const event of Object.keys(map)) server.on(event, map[event]);\n\n  return function removeListeners() {\n    for (const event of Object.keys(map)) {\n      server.removeListener(event, map[event]);\n    }\n  };\n}\n\n/**\n * Emit a `'close'` event on an `EventEmitter`.\n *\n * @param {EventEmitter} server The event emitter\n * @private\n */\nfunction emitClose(server) {\n  server._state = CLOSED;\n  server.emit('close');\n}\n\n/**\n * Handle socket errors.\n *\n * @private\n */\nfunction socketOnError() {\n  this.destroy();\n}\n\n/**\n * Close the connection when preconditions are not fulfilled.\n *\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} [message] The HTTP response body\n * @param {Object} [headers] Additional HTTP response headers\n * @private\n */\nfunction abortHandshake(socket, code, message, headers) {\n  //\n  // The socket is writable unless the user destroyed or ended it before calling\n  // `server.handleUpgrade()` or in the `verifyClient` function, which is a user\n  // error. Handling this does not make much sense as the worst that can happen\n  // is that some of the data written by the user might be discarded due to the\n  // call to `socket.end()` below, which triggers an `'error'` event that in\n  // turn causes the socket to be destroyed.\n  //\n  message = message || http.STATUS_CODES[code];\n  headers = {\n    Connection: 'close',\n    'Content-Type': 'text/html',\n    'Content-Length': Buffer.byteLength(message),\n    ...headers\n  };\n\n  socket.once('finish', socket.destroy);\n\n  socket.end(\n    `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\\r\\n` +\n      Object.keys(headers)\n        .map((h) => `${h}: ${headers[h]}`)\n        .join('\\r\\n') +\n      '\\r\\n\\r\\n' +\n      message\n  );\n}\n\n/**\n * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least\n * one listener for it, otherwise call `abortHandshake()`.\n *\n * @param {WebSocketServer} server The WebSocket server\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} message The HTTP response body\n * @param {Object} [headers] The HTTP response headers\n * @private\n */\nfunction abortHandshakeOrEmitwsClientError(\n  server,\n  req,\n  socket,\n  code,\n  message,\n  headers\n) {\n  if (server.listenerCount('wsClientError')) {\n    const err = new Error(message);\n    Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError);\n\n    server.emit('wsClientError', err, socket, req);\n  } else {\n    abortHandshake(socket, code, message, headers);\n  }\n}\n","// Pasted with modifications from: https://raw.githubusercontent.com/anonyco/FastestSmallestTextEncoderDecoder/master/EncoderDecoderTogether.src.js\n/* eslint no-fallthrough: 0 */\n\nconst fromCharCode = String.fromCharCode;\nconst encoderRegexp = /[\\x80-\\uD7ff\\uDC00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]?/g;\nconst tmpBufferU16 = new Uint16Array(32);\n\nexport class TextDecoder {\n  decode(inputArrayOrBuffer: Uint8Array | ArrayBuffer | SharedArrayBuffer): string {\n    const inputAs8 = inputArrayOrBuffer instanceof Uint8Array ? inputArrayOrBuffer : new Uint8Array(inputArrayOrBuffer);\n\n    let resultingString = '',\n      tmpStr = '',\n      index = 0,\n      nextEnd = 0,\n      cp0 = 0,\n      codePoint = 0,\n      minBits = 0,\n      cp1 = 0,\n      pos = 0,\n      tmp = -1;\n    const len = inputAs8.length | 0;\n    const lenMinus32 = (len - 32) | 0;\n    // Note that tmp represents the 2nd half of a surrogate pair incase a surrogate gets divided between blocks\n    for (; index < len; ) {\n      nextEnd = index <= lenMinus32 ? 32 : (len - index) | 0;\n      for (; pos < nextEnd; index = (index + 1) | 0, pos = (pos + 1) | 0) {\n        // @ts-expect-error ignoring unchecked index\n        cp0 = inputAs8[index] & 0xff;\n        switch (cp0 >> 4) {\n          case 15:\n            // @ts-expect-error ignoring unchecked index\n            cp1 = inputAs8[(index = (index + 1) | 0)] & 0xff;\n            if (cp1 >> 6 !== 0b10 || 0b11110111 < cp0) {\n              index = (index - 1) | 0;\n              break;\n            }\n            codePoint = ((cp0 & 0b111) << 6) | (cp1 & 0b00111111);\n            minBits = 5; // 20 ensures it never passes -> all invalid replacements\n            cp0 = 0x100; //  keep track of th bit size\n          case 14:\n            // @ts-expect-error ignoring unchecked index\n            cp1 = inputAs8[(index = (index + 1) | 0)] & 0xff;\n            codePoint <<= 6;\n            codePoint |= ((cp0 & 0b1111) << 6) | (cp1 & 0b00111111);\n            minBits = cp1 >> 6 === 0b10 ? (minBits + 4) | 0 : 24; // 24 ensures it never passes -> all invalid replacements\n            cp0 = (cp0 + 0x100) & 0x300; // keep track of th bit size\n          case 13:\n          case 12:\n            // @ts-expect-error ignoring unchecked index\n            cp1 = inputAs8[(index = (index + 1) | 0)] & 0xff;\n            codePoint <<= 6;\n            codePoint |= ((cp0 & 0b11111) << 6) | (cp1 & 0b00111111);\n            minBits = (minBits + 7) | 0;\n\n            // Now, process the code point\n            if (index < len && cp1 >> 6 === 0b10 && codePoint >> minBits && codePoint < 0x110000) {\n              cp0 = codePoint;\n              codePoint = (codePoint - 0x10000) | 0;\n              if (0 <= codePoint /*0xffff < codePoint*/) {\n                // BMP code point\n                //nextEnd = nextEnd - 1|0;\n\n                tmp = ((codePoint >> 10) + 0xd800) | 0; // highSurrogate\n                cp0 = ((codePoint & 0x3ff) + 0xdc00) | 0; // lowSurrogate (will be inserted later in the switch-statement)\n\n                if (pos < 31) {\n                  // notice 31 instead of 32\n                  tmpBufferU16[pos] = tmp;\n                  pos = (pos + 1) | 0;\n                  tmp = -1;\n                } else {\n                  // else, we are at the end of the inputAs8 and let tmp0 be filled in later on\n                  // NOTE that cp1 is being used as a temporary variable for the swapping of tmp with cp0\n                  cp1 = tmp;\n                  tmp = cp0;\n                  cp0 = cp1;\n                }\n              } else nextEnd = (nextEnd + 1) | 0; // because we are advancing i without advancing pos\n            } else {\n              // invalid code point means replacing the whole thing with null replacement characters\n              cp0 >>= 8;\n              index = (index - cp0 - 1) | 0; // reset index  back to what it was before\n              cp0 = 0xfffd;\n            }\n\n            // Finally, reset the variables for the next go-around\n            minBits = 0;\n            codePoint = 0;\n            nextEnd = index <= lenMinus32 ? 32 : (len - index) | 0;\n          /*case 11:\n        case 10:\n        case 9:\n        case 8:\n          codePoint ? codePoint = 0 : cp0 = 0xfffd; // fill with invalid replacement character\n        case 7:\n        case 6:\n        case 5:\n        case 4:\n        case 3:\n        case 2:\n        case 1:\n        case 0:\n          tmpBufferU16[pos] = cp0;\n          continue;*/\n          default: // fill with invalid replacement character\n            tmpBufferU16[pos] = cp0;\n            continue;\n          case 11:\n          case 10:\n          case 9:\n          case 8:\n        }\n        tmpBufferU16[pos] = 0xfffd; // fill with invalid replacement character\n      }\n      tmpStr += fromCharCode(\n        // @ts-expect-error ignoring unchecked index\n        tmpBufferU16[0],\n        tmpBufferU16[1],\n        tmpBufferU16[2],\n        tmpBufferU16[3],\n        tmpBufferU16[4],\n        tmpBufferU16[5],\n        tmpBufferU16[6],\n        tmpBufferU16[7],\n        tmpBufferU16[8],\n        tmpBufferU16[9],\n        tmpBufferU16[10],\n        tmpBufferU16[11],\n        tmpBufferU16[12],\n        tmpBufferU16[13],\n        tmpBufferU16[14],\n        tmpBufferU16[15],\n        tmpBufferU16[16],\n        tmpBufferU16[17],\n        tmpBufferU16[18],\n        tmpBufferU16[19],\n        tmpBufferU16[20],\n        tmpBufferU16[21],\n        tmpBufferU16[22],\n        tmpBufferU16[23],\n        tmpBufferU16[24],\n        tmpBufferU16[25],\n        tmpBufferU16[26],\n        tmpBufferU16[27],\n        tmpBufferU16[28],\n        tmpBufferU16[29],\n        tmpBufferU16[30],\n        tmpBufferU16[31]\n      );\n      if (pos < 32) tmpStr = tmpStr.slice(0, (pos - 32) | 0); //-(32-pos));\n      if (index < len) {\n        //fromCharCode.apply(0, tmpBufferU16 : Uint8Array ?  tmpBufferU16.subarray(0,pos) : tmpBufferU16.slice(0,pos));\n        tmpBufferU16[0] = tmp;\n        pos = ~tmp >>> 31; //tmp !== -1 ? 1 : 0;\n        tmp = -1;\n\n        if (tmpStr.length < resultingString.length) continue;\n      } else if (tmp !== -1) {\n        tmpStr += fromCharCode(tmp);\n      }\n\n      resultingString += tmpStr;\n      tmpStr = '';\n    }\n\n    return resultingString;\n  }\n}\n\n//////////////////////////////////////////////////////////////////////////////////////\nfunction encoderReplacer(nonAsciiChars: string) {\n  // make the UTF string into a binary UTF-8 encoded string\n  let point = nonAsciiChars.charCodeAt(0) | 0;\n  if (0xd800 <= point) {\n    if (point <= 0xdbff) {\n      const nextcode = nonAsciiChars.charCodeAt(1) | 0; // defaults to 0 when NaN, causing null replacement character\n\n      if (0xdc00 <= nextcode && nextcode <= 0xdfff) {\n        //point = ((point - 0xD800)<<10) + nextcode - 0xDC00 + 0x10000|0;\n        point = ((point << 10) + nextcode - 0x35fdc00) | 0;\n        if (point > 0xffff)\n          return fromCharCode(\n            (0x1e /*0b11110*/ << 3) | (point >> 18),\n            (0x2 /*0b10*/ << 6) | ((point >> 12) & 0x3f) /*0b00111111*/,\n            (0x2 /*0b10*/ << 6) | ((point >> 6) & 0x3f) /*0b00111111*/,\n            (0x2 /*0b10*/ << 6) | (point & 0x3f) /*0b00111111*/\n          );\n      } else point = 65533 /*0b1111111111111101*/; //return '\\xEF\\xBF\\xBD';//fromCharCode(0xef, 0xbf, 0xbd);\n    } else if (point <= 0xdfff) {\n      point = 65533 /*0b1111111111111101*/; //return '\\xEF\\xBF\\xBD';//fromCharCode(0xef, 0xbf, 0xbd);\n    }\n  }\n  /*if (point <= 0x007f) return nonAsciiChars;\n  else */ if (point <= 0x07ff) {\n    return fromCharCode((0x6 << 5) | (point >> 6), (0x2 << 6) | (point & 0x3f));\n  } else\n    return fromCharCode(\n      (0xe /*0b1110*/ << 4) | (point >> 12),\n      (0x2 /*0b10*/ << 6) | ((point >> 6) & 0x3f) /*0b00111111*/,\n      (0x2 /*0b10*/ << 6) | (point & 0x3f) /*0b00111111*/\n    );\n}\n\nexport class TextEncoder {\n  public encode(inputString: string): Uint8Array {\n    // 0xc0 => 0b11000000; 0xff => 0b11111111; 0xc0-0xff => 0b11xxxxxx\n    // 0x80 => 0b10000000; 0xbf => 0b10111111; 0x80-0xbf => 0b10xxxxxx\n    const encodedString = inputString === void 0 ? '' : '' + inputString,\n      len = encodedString.length | 0;\n    let result = new Uint8Array(((len << 1) + 8) | 0);\n    let tmpResult: Uint8Array;\n    let i = 0,\n      pos = 0,\n      point = 0,\n      nextcode = 0;\n    let upgradededArraySize = !Uint8Array; // normal arrays are auto-expanding\n    for (i = 0; i < len; i = (i + 1) | 0, pos = (pos + 1) | 0) {\n      point = encodedString.charCodeAt(i) | 0;\n      if (point <= 0x007f) {\n        result[pos] = point;\n      } else if (point <= 0x07ff) {\n        result[pos] = (0x6 << 5) | (point >> 6);\n        result[(pos = (pos + 1) | 0)] = (0x2 << 6) | (point & 0x3f);\n      } else {\n        widenCheck: {\n          if (0xd800 <= point) {\n            if (point <= 0xdbff) {\n              nextcode = encodedString.charCodeAt((i = (i + 1) | 0)) | 0; // defaults to 0 when NaN, causing null replacement character\n\n              if (0xdc00 <= nextcode && nextcode <= 0xdfff) {\n                //point = ((point - 0xD800)<<10) + nextcode - 0xDC00 + 0x10000|0;\n                point = ((point << 10) + nextcode - 0x35fdc00) | 0;\n                if (point > 0xffff) {\n                  result[pos] = (0x1e /*0b11110*/ << 3) | (point >> 18);\n                  result[(pos = (pos + 1) | 0)] = (0x2 /*0b10*/ << 6) | ((point >> 12) & 0x3f) /*0b00111111*/;\n                  result[(pos = (pos + 1) | 0)] = (0x2 /*0b10*/ << 6) | ((point >> 6) & 0x3f) /*0b00111111*/;\n                  result[(pos = (pos + 1) | 0)] = (0x2 /*0b10*/ << 6) | (point & 0x3f) /*0b00111111*/;\n                  continue;\n                }\n                break widenCheck;\n              }\n              point = 65533 /*0b1111111111111101*/; //return '\\xEF\\xBF\\xBD';//fromCharCode(0xef, 0xbf, 0xbd);\n            } else if (point <= 0xdfff) {\n              point = 65533 /*0b1111111111111101*/; //return '\\xEF\\xBF\\xBD';//fromCharCode(0xef, 0xbf, 0xbd);\n            }\n          }\n          if (!upgradededArraySize && i << 1 < pos && i << 1 < ((pos - 7) | 0)) {\n            upgradededArraySize = true;\n            tmpResult = new Uint8Array(len * 3);\n            tmpResult.set(result);\n            result = tmpResult;\n          }\n        }\n        result[pos] = (0xe /*0b1110*/ << 4) | (point >> 12);\n        result[(pos = (pos + 1) | 0)] = (0x2 /*0b10*/ << 6) | ((point >> 6) & 0x3f) /*0b00111111*/;\n        result[(pos = (pos + 1) | 0)] = (0x2 /*0b10*/ << 6) | (point & 0x3f) /*0b00111111*/;\n      }\n    }\n    return Uint8Array ? result.subarray(0, pos) : result.slice(0, pos);\n  }\n\n  public encodeInto(inputString: string, u8Arr: Uint8Array): { written: number; read: number } {\n    const encodedString = inputString === void 0 ? '' : ('' + inputString).replace(encoderRegexp, encoderReplacer);\n    let len = encodedString.length | 0,\n      i = 0,\n      char = 0,\n      read = 0;\n    const u8ArrLen = u8Arr.length | 0;\n    const inputLength = inputString.length | 0;\n    if (u8ArrLen < len) len = u8ArrLen;\n    putChars: {\n      for (; i < len; i = (i + 1) | 0) {\n        char = encodedString.charCodeAt(i) | 0;\n        switch (char >> 4) {\n          case 0:\n          case 1:\n          case 2:\n          case 3:\n          case 4:\n          case 5:\n          case 6:\n          case 7:\n            read = (read + 1) | 0;\n          // extension points:\n          case 8:\n          case 9:\n          case 10:\n          case 11:\n            break;\n          case 12:\n          case 13:\n            if (((i + 1) | 0) < u8ArrLen) {\n              read = (read + 1) | 0;\n              break;\n            }\n          case 14:\n            if (((i + 2) | 0) < u8ArrLen) {\n              //if (!(char === 0xEF && encodedString.substr(i+1|0,2) === \"\\xBF\\xBD\"))\n              read = (read + 1) | 0;\n              break;\n            }\n          case 15:\n            if (((i + 3) | 0) < u8ArrLen) {\n              read = (read + 1) | 0;\n              break;\n            }\n          default:\n            break putChars;\n        }\n        //read = read + ((char >> 6) !== 2) |0;\n        u8Arr[i] = char;\n      }\n    }\n    return { written: i, read: inputLength < read ? inputLength : read };\n  }\n}\n\n/**\n * Encode a UTF-8 string into a Uint8Array\n */\nexport function encode(s: string): Uint8Array {\n  return TextEncoder.prototype.encode(s);\n}\n\n/**\n * Decode a Uint8Array into a UTF-8 string\n */\nexport function decode(a: Uint8Array): string {\n  return TextDecoder.prototype.decode(a);\n}\n","export type NonNullableObject<T> = { [P in keyof T]-?: NonNullable<T[P]> };\n\n/** Shorthand alias */\nexport type AnyFunc = (...args: any[]) => any;\n\n/** A tuple without its last element */\nexport type OmitLast<T> = T extends [...infer REST, any] ? REST : never;\n\n/** F with all arguments but the last */\nexport type OmitLastParam<F extends AnyFunc> = (...args: OmitLast<Parameters<F>>) => ReturnType<F>;\n\nexport type OmitFirst<T> = T extends [any, ...infer REST] ? REST : never;\n\nexport type OmitFirstParam<T> = T extends (...args: any[]) => any\n  ? (...args: OmitFirst<Parameters<T>>) => ReturnType<T>\n  : never;\n\n/** Require that T has at least one of the provided properties defined */\nexport type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> &\n  {\n    [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;\n  }[Keys];\n\n/** Verify that an type _Copy extends _Orig */\nexport function checkExtends<_Orig, _Copy extends _Orig>(): void {\n  // noop, just type check\n}\n\nexport type Replace<Base, New> = Omit<Base, keyof New> & New;\n\n// From https://github.com/sindresorhus/type-fest/blob/main/source/union-to-intersection.d.ts\n// MIT or CC0-1.0 — It is meant to be copied into your codebase rather than being used as a dependency.\nexport type UnionToIntersection<Union> =\n  // `extends unknown` is always going to be the case and is used to convert the `Union` into a\n  // [distributive conditional type](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html#distributive-conditional-types).\n  (\n    Union extends unknown\n      ? // The union type is used as the only argument to a function since the union\n        // of function arguments is an intersection.\n        (distributedUnion: Union) => void\n      : // This won't happen.\n        never\n  ) extends // Infer the `Intersection` type since TypeScript represents the positional\n  // arguments of unions of functions as an intersection of the union.\n  (mergedIntersection: infer Intersection) => void\n    ? // The `& Union` is to allow indexing by the resulting type\n      Intersection & Union\n    : never;\n\ntype IsEqual<A, B> = (<G>() => G extends A ? 1 : 2) extends <G>() => G extends B ? 1 : 2 ? true : false;\n\ntype Primitive = null | undefined | string | number | boolean | symbol | bigint;\n\ntype IsNull<T> = [T] extends [null] ? true : false;\n\ntype IsUnknown<T> = unknown extends T // `T` can be `unknown` or `any`\n  ? IsNull<T> extends false // `any` can be `null`, but `unknown` can't be\n    ? true\n    : false\n  : false;\n\ntype ObjectValue<T, K> = K extends keyof T\n  ? T[K]\n  : ToString<K> extends keyof T\n    ? T[ToString<K>]\n    : K extends `${infer NumberK extends number}`\n      ? NumberK extends keyof T\n        ? T[NumberK]\n        : never\n      : never;\n\ntype ToString<T> = T extends string | number ? `${T}` : never;\n\ntype KeysOfUnion<ObjectType> = ObjectType extends unknown ? keyof ObjectType : never;\n\ntype ArrayElement<T> = T extends readonly unknown[] ? T[0] : never;\n\ntype ExactObject<ParameterType, InputType> = {\n  [Key in keyof ParameterType]: Exact<ParameterType[Key], ObjectValue<InputType, Key>>;\n} & Record<Exclude<keyof InputType, KeysOfUnion<ParameterType>>, never>;\n\nexport type Exact<ParameterType, InputType> =\n  // Before distributing, check if the two types are equal and if so, return the parameter type immediately\n  IsEqual<ParameterType, InputType> extends true\n    ? ParameterType\n    : // If the parameter is a primitive, return it as is immediately to avoid it being converted to a complex type\n      ParameterType extends Primitive\n      ? ParameterType\n      : // If the parameter is an unknown, return it as is immediately to avoid it being converted to a complex type\n        IsUnknown<ParameterType> extends true\n        ? unknown\n        : // If the parameter is a Function, return it as is because this type is not capable of handling function, leave it to TypeScript\n          // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n          ParameterType extends Function\n          ? ParameterType\n          : // Convert union of array to array of union: A[] & B[] => (A & B)[]\n            ParameterType extends unknown[]\n            ? Array<Exact<ArrayElement<ParameterType>, ArrayElement<InputType>>>\n            : // In TypeScript, Array is a subtype of ReadonlyArray, so always test Array before ReadonlyArray.\n              ParameterType extends readonly unknown[]\n              ? ReadonlyArray<Exact<ArrayElement<ParameterType>, ArrayElement<InputType>>>\n              : ExactObject<ParameterType, InputType>;\n// End of borrow from  https://github.com/sindresorhus/type-fest/blob/main/source/union-to-intersection.d.ts\n\nexport type RemovePrefix<Prefix extends string, Keys extends string> = {\n  [k in Keys]: k extends `${Prefix}${infer Suffix}` ? Suffix : never;\n}[Keys];\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null;\n}\n\nexport function hasOwnProperty<X extends Record<string, unknown>, Y extends PropertyKey>(\n  record: X,\n  prop: Y\n): record is X & Record<Y, unknown> {\n  return prop in record;\n}\n\nexport function hasOwnProperties<X extends Record<string, unknown>, Y extends PropertyKey>(\n  record: X,\n  props: Y[]\n): record is X & Record<Y, unknown> {\n  return props.every((prop) => prop in record);\n}\n\nexport function isError(error: unknown): error is Error {\n  return (\n    isRecord(error) &&\n    typeof error.name === 'string' &&\n    typeof error.message === 'string' &&\n    (error.stack == null || typeof error.stack === 'string')\n  );\n}\n\nexport function isAbortError(error: unknown): error is Error & { name: 'AbortError' } {\n  return isError(error) && error.name === 'AbortError';\n}\n\n/**\n * Get `error.message` (or `undefined` if not present)\n */\nexport function errorMessage(error: unknown): string | undefined {\n  if (isError(error)) {\n    return error.message;\n  } else if (typeof error === 'string') {\n    return error;\n  }\n  return undefined;\n}\n\ninterface ErrorWithCode {\n  code: string;\n}\n\nfunction isErrorWithCode(error: unknown): error is ErrorWithCode {\n  return isRecord(error) && typeof error.code === 'string';\n}\n\n/**\n * Get `error.code` (or `undefined` if not present)\n */\nexport function errorCode(error: unknown): string | undefined {\n  if (isErrorWithCode(error)) {\n    return error.code;\n  }\n\n  return undefined;\n}\n\n/**\n * Asserts that some type is the never type\n */\nexport function assertNever(msg: string, x: never): never {\n  throw new TypeError(msg + ': ' + x);\n}\n\nexport type Class<E extends Error> = {\n  new (...args: any[]): E;\n  prototype: E;\n};\n\n/**\n * A decorator to be used on error classes. It adds the 'name' property AND provides a custom\n * 'instanceof' handler that works correctly across execution contexts.\n *\n * ### Details ###\n *\n * According to the EcmaScript's spec, the default behavior of JavaScript's `x instanceof Y` operator is to walk up the\n * prototype chain of object 'x', checking if any constructor in that hierarchy is _exactly the same object_ as the\n * constructor function 'Y'.\n *\n * Unfortunately, it happens in various situations that different constructor function objects get created for what\n * appears to be the very same class. This leads to surprising behavior where `instanceof` returns false though it is\n * known that the object is indeed an instance of that class. One particular case where this happens is when constructor\n * 'Y' belongs to a different realm than the constuctor with which 'x' was instantiated. Another case is when two copies\n * of the same library gets loaded in the same realm.\n *\n * In practice, this tends to cause issues when crossing the workflow-sandboxing boundary (since Node's vm module\n * really creates new execution realms), as well as when running tests using Jest (see https://github.com/jestjs/jest/issues/2549\n * for some details on that one).\n *\n * This function injects a custom 'instanceof' handler into the prototype of 'clazz', which is both cross-realm safe and\n * cross-copies-of-the-same-lib safe. It works by adding a special symbol property to the prototype of 'clazz', and then\n * checking for the presence of that symbol.\n */\nexport function SymbolBasedInstanceOfError<E extends Error>(markerName: string): (clazz: Class<E>) => void {\n  return (clazz: Class<E>): void => {\n    const marker = Symbol.for(`__temporal_is${markerName}`);\n\n    Object.defineProperty(clazz.prototype, 'name', { value: markerName, enumerable: true });\n    Object.defineProperty(clazz.prototype, marker, { value: true, enumerable: false });\n    Object.defineProperty(clazz, Symbol.hasInstance, {\n      // eslint-disable-next-line object-shorthand\n      value: function (this: any, error: object): boolean {\n        if (this === clazz) {\n          return isRecord(error) && (error as any)[marker] === true;\n        } else {\n          // 'this' must be a _subclass_ of clazz that doesn't redefined [Symbol.hasInstance], so that it inherited\n          // from clazz's [Symbol.hasInstance]. If we don't handle this particular situation, then\n          // `x instanceof SubclassOfParent` would return true for any instance of 'Parent', which is clearly wrong.\n          //\n          // Ideally, it'd be preferable to avoid this case entirely, by making sure that all subclasses of 'clazz'\n          // redefine [Symbol.hasInstance], but we can't enforce that. We therefore fallback to the default instanceof\n          // behavior (which is NOT cross-realm safe).\n          return this.prototype.isPrototypeOf(error); // eslint-disable-line no-prototype-builtins\n        }\n      },\n    });\n  };\n}\n","import { SymbolBasedInstanceOfError } from './type-helpers';\n\n/**\n * Thrown from code that receives a value that is unexpected or that it's unable to handle.\n */\n@SymbolBasedInstanceOfError('ValueError')\nexport class ValueError extends Error {\n  constructor(\n    message: string | undefined,\n    public readonly cause?: unknown\n  ) {\n    super(message ?? undefined);\n  }\n}\n\n/**\n * Thrown when a Payload Converter is misconfigured.\n */\n@SymbolBasedInstanceOfError('PayloadConverterError')\nexport class PayloadConverterError extends ValueError {}\n\n/**\n * Signals that a requested operation can't be completed because it is illegal given the\n * current state of the object; e.g. trying to use a resource after it has been closed.\n */\n@SymbolBasedInstanceOfError('IllegalStateError')\nexport class IllegalStateError extends Error {}\n\n/**\n * Thrown when a Workflow with the given Id is not known to Temporal Server.\n * It could be because:\n * - Id passed is incorrect\n * - Workflow is closed (for some calls, e.g. `terminate`)\n * - Workflow was deleted from the Server after reaching its retention limit\n */\n@SymbolBasedInstanceOfError('WorkflowNotFoundError')\nexport class WorkflowNotFoundError extends Error {\n  constructor(\n    message: string,\n    public readonly workflowId: string,\n    public readonly runId: string | undefined\n  ) {\n    super(message);\n  }\n}\n\n/**\n * Thrown when the specified namespace is not known to Temporal Server.\n */\n@SymbolBasedInstanceOfError('NamespaceNotFoundError')\nexport class NamespaceNotFoundError extends Error {\n  constructor(public readonly namespace: string) {\n    super(`Namespace not found: '${namespace}'`);\n  }\n}\n\n/**\n * Throw this error from an Activity in order to make the Worker forget about this Activity.\n *\n * The Activity can then be completed asynchronously (from anywhere—usually outside the Worker) using\n * the Client's activity handle.\n *\n * @example\n *\n * ```ts\n *import { CompleteAsyncError } from '@temporalio/activity';\n *\n *export async function myActivity(): Promise<never> {\n *  // ...\n *  throw new CompleteAsyncError();\n *}\n * ```\n */\n@SymbolBasedInstanceOfError('CompleteAsyncError')\nexport class CompleteAsyncError extends Error {}\n","import { ValueError } from '../errors';\nimport type { Exact, RemovePrefix, UnionToIntersection } from '../type-helpers';\n\n/**\n * Create encoding and decoding functions to convert between the numeric `enum` types produced by our\n * Protobuf compiler and \"const object of strings\" enum values that we expose in our public APIs.\n *\n * ### Usage\n *\n * Newly introduced enums should follow the following pattern:\n *\n * ```ts\n *     const ParentClosePolicy = {\n *       TERMINATE: 'TERMINATE',\n *       ABANDON: 'ABANDON',\n *       REQUEST_CANCEL: 'REQUEST_CANCEL',\n *     } as const;\n *     type ParentClosePolicy = (typeof ParentClosePolicy)[keyof typeof ParentClosePolicy];\n *\n *     const [encodeParentClosePolicy, decodeParentClosePolicy] = //\n *       makeProtoEnumConverters<\n *         coresdk.child_workflow.ParentClosePolicy,\n *         typeof coresdk.child_workflow.ParentClosePolicy,\n *         keyof typeof coresdk.child_workflow.ParentClosePolicy,\n *         typeof ParentClosePolicy,\n *         'PARENT_CLOSE_POLICY_'  // This may be an empty string if the proto enum doesn't add a repeated prefix on values\n *       >(\n *         {\n *           [ParentClosePolicy.TERMINATE]: 1, // These numbers must match the ones in the proto enum\n *           [ParentClosePolicy.ABANDON]: 2,\n *           [ParentClosePolicy.REQUEST_CANCEL]: 3,\n *\n *           UNSPECIFIED: 0,\n *         } as const,\n *         'PARENT_CLOSE_POLICY_'\n *       );\n * ```\n *\n * `makeProtoEnumConverters` supports other usage patterns, but they are only meant for\n * backward compatibility with former enum definitions and should not be used for new enums.\n *\n * ### Context\n *\n * Temporal's Protobuf APIs define several `enum` types; our Protobuf compiler transforms these to\n * traditional (i.e. non-const) [TypeScript numeric `enum`s](https://www.typescriptlang.org/docs/handbook/enums.html#numeric-enums).\n *\n * For various reasons, this is far from ideal:\n *\n *  - Due to the dual nature of non-const TypeScript `enum`s (they are both a type and a value),\n *    it is not possible to refer to an enum value from code without a \"real\" import of the enum type\n *    (i.e. can't simply do `import type ...`). In Workflow code, such an import would result in\n *    loading our entire Protobuf definitions into the workflow sandbox, adding several megabytes to\n *    the per-workflow memory footprint, which is unacceptable; to avoid that, we need to maintain\n *    a mirror copy of each enum types used by in-workflow APIs, and export these from either\n *    `@temporalio/common` or `@temporalio/workflow`.\n *  - It is not desirable for users to need an explicit dependency on `@temporalio/proto` just to\n *    get access to these enum types; we therefore made it a common practice to reexport these enums\n *    from our public facing packages. However, experience demontrated that these reexports effectively\n *    resulted in poor and inconsistent documentation coverage compared to mirrored enums types.\n *  - Our Protobuf enum types tend to follow a verbose and redundant naming convention, which feels\n *    unatural and excessive according to most TypeScript style guides; e.g. instead of\n *    `workflowIdReusePolicy: WorkflowIdReusePolicy.WORKFLOW_ID_REUSE_POLICY_REJECT_DUPLICATE`,\n *    a TypeScript developer would generally expect to be able to write something similar to\n *    `workflowIdReusePolicy: 'REJECT_DUPLICATE'`.\n *  - Because of the way Protobuf works, many of our enum types contain an `UNSPECIFIED` value, which\n *    is used to explicitly identify a value that is unset. In TypeScript code, the `undefined` value\n *    already serves that purpose, and is definitely more idiomatic to TS developers, whereas these\n *    `UNSPECIFIED` values create noise and confusion in our APIs.\n *  - TypeScript editors generally do a very bad job at providing autocompletion that implies reaching\n *    for values of a TypeScript enum type, forcing developers to explicitly type in at least part\n *    of the name of the enum type before they can get autocompletion for its values. On the other\n *    hand, all TS editors immediately provide autocompletion for string union types.\n *  - The [TypeScript's official documentation](https://www.typescriptlang.org/docs/handbook/enums.html#objects-vs-enums)\n *    itself suggests that, in modern TypeScript, the use of `as const` objects may generally suffice\n *    and may be advantageous over the use of `enum` types.\n *\n * A const object of strings, combined with a union type of possible string values, provides a much\n * more idiomatic syntax and a better DX for TypeScript developers. This however requires a way to\n * convert back and forth between the `enum` values produced by the Protobuf compiler and the\n * equivalent string values.\n *\n * This helper dynamically creates these conversion functions for a given Protobuf enum type,\n * strongly building upon specific conventions that we have adopted in our Protobuf definitions.\n *\n * ### Validations\n *\n * The complex type signature of this helper is there to prevent most potential incoherencies\n * that could result from having to manually synchronize the const object of strings enum and the\n * conversion table with the proto enum, while not requiring a regular import on the Protobuf enum\n * itself (so it can be used safely for enums meant to be used from workflow code).\n *\n * In particular, failing any of the following invariants will result in build time errors:\n *\n * - For every key of the form `PREFIX_KEY: number` in the proto enum, excluding the `UNSPECIFIED` key:\n *   - There MUST be a corresponding `KEY: 'KEY'` entry in the const object of strings enum;\n *   - There MAY be a corresponding `PREFIX_KEY: 'KEY'` in the const object of strings enum\n *     (this is meant to preserve backward compatibility with the former syntax; such aliases should\n *     not be added for new enums and enum entries introduced going forward);\n *   - There MUST be a corresponding `KEY: number` in the mapping table.\n * - If the proto enum contains a `PREFIX_UNSPECIFIED` entry, then:\n *   - There MAY be a corresponding `PREFIX_UNSPECIFIED: undefined` and/or `UNSPECIFIED: undefined`\n *     entries in the const object of strings enum — this is meant to preserve backward compatibility\n *     with the former syntax; this alias should not be added for new enums introduced going forward;\n *   - There MUST be an `UNSPECIFIED: 0` in the mapping table.\n * - The const object of strings enum MUST NOT contain any other keys than the ones mandated or\n *   optionally allowed be the preceeding rules.\n * - The mapping table MUST NOT contain any other keys than the ones mandated above.\n *\n * These rules notably ensure that whenever a new value is added to an existing Proto enum, the code\n * will fail to compile until the corresponding entry is added on the const object of strings enum\n * and the mapping table.\n *\n * @internal\n */\nexport function makeProtoEnumConverters<\n  ProtoEnumValue extends number,\n  ProtoEnum extends { [k in ProtoEnumKey]: ProtoEnumValue },\n  ProtoEnumKey extends `${Prefix}${string}`,\n  StringEnumTypeActual extends Exact<StringEnumType, StringEnumTypeActual>,\n  Prefix extends string,\n  //\n  // Parameters after this point will be inferred; they're not meant not to be specified by developers\n  Unspecified = ProtoEnumKey extends `${Prefix}UNSPECIFIED` ? 'UNSPECIFIED' : never,\n  ShortStringEnumKey extends RemovePrefix<Prefix, ProtoEnumKey> = Exclude<\n    RemovePrefix<Prefix, ProtoEnumKey>,\n    Unspecified\n  >,\n  StringEnumType extends ProtoConstObjectOfStringsEnum<\n    ShortStringEnumKey,\n    Prefix,\n    Unspecified\n  > = ProtoConstObjectOfStringsEnum<ShortStringEnumKey, Prefix, Unspecified>,\n  MapTable extends ProtoEnumToConstObjectOfStringMapTable<\n    StringEnumType,\n    ProtoEnumValue,\n    ProtoEnum,\n    ProtoEnumKey,\n    Prefix,\n    Unspecified,\n    ShortStringEnumKey\n  > = ProtoEnumToConstObjectOfStringMapTable<\n    StringEnumType,\n    ProtoEnumValue,\n    ProtoEnum,\n    ProtoEnumKey,\n    Prefix,\n    Unspecified,\n    ShortStringEnumKey\n  >,\n>(\n  mapTable: MapTable,\n  prefix: Prefix\n): [\n  (\n    input: ShortStringEnumKey | `${Prefix}${ShortStringEnumKey}` | ProtoEnumValue | null | undefined\n  ) => ProtoEnumValue | undefined, //\n  (input: ProtoEnumValue | null | undefined) => ShortStringEnumKey | undefined, //\n] {\n  const reverseTable: Record<ProtoEnumValue, ShortStringEnumKey> = Object.fromEntries(\n    Object.entries(mapTable).map(([k, v]) => [v, k])\n  );\n  const hasUnspecified = (mapTable as any)['UNSPECIFIED'] === 0 || (mapTable as any)[`${prefix}UNSPECIFIED`] === 0;\n\n  function isShortStringEnumKeys(x: unknown): x is ShortStringEnumKey {\n    return typeof x === 'string' && x in mapTable;\n  }\n\n  function isNumericEnumValue(x: unknown): x is ProtoEnum[keyof ProtoEnum] {\n    return typeof x === 'number' && x in reverseTable;\n  }\n\n  function encode(\n    input: ShortStringEnumKey | `${Prefix}${ShortStringEnumKey}` | ProtoEnumValue | null | undefined\n  ): ProtoEnumValue | undefined {\n    if (input == null) {\n      return undefined;\n    } else if (typeof input === 'string') {\n      let shorten: string = input;\n      if (shorten.startsWith(prefix)) {\n        shorten = shorten.slice(prefix.length);\n      }\n      if (isShortStringEnumKeys(shorten)) {\n        return mapTable[shorten];\n      }\n      throw new ValueError(`Invalid enum value: '${input}'`);\n    } else if (typeof input === 'number') {\n      return input;\n    } else {\n      throw new ValueError(`Invalid enum value: '${input}' of type ${typeof input}`);\n    }\n  }\n\n  function decode(input: ProtoEnumValue | null | undefined): ShortStringEnumKey | undefined {\n    if (input == null) {\n      return undefined;\n    } else if (typeof input === 'number') {\n      if (hasUnspecified && input === 0) {\n        return undefined;\n      }\n\n      if (isNumericEnumValue(input)) {\n        return reverseTable[input];\n      }\n\n      // We got a proto enum value that we don't yet know about (i.e. it didn't exist when this code\n      // was compiled). This is certainly a possibility, but given how our APIs evolve, this is is\n      // unlikely to be a terribly bad thing by itself (we avoid adding new enum values in places\n      // that would break backward compatibility with existing deployed code). Therefore, throwing\n      // on \"unexpected\" values is likely to end up causing more problems than it might avoid,\n      // especially given that the decoded value may actually never get read anwyay.\n      //\n      // Therefore, we instead cheat on type constraints and return a string of the form \"unknown_23\".\n      // That somewhat mirrors the behavior we'd get with the pure numerical approach.\n      return `unknown_${input}` as ShortStringEnumKey;\n    }\n\n    throw new ValueError(`Invalid proto enum value: '${input}' of type ${typeof input}`);\n  }\n\n  return [encode, decode] as const;\n}\n\n/**\n * Given the exploded parameters of a proto enum (i.e. short keys, prefix, and short key of the\n * unspecified value), make a type that _exactly_ corresponds to the const object of strings enum,\n * e.g. the type that the developer is expected to write.\n *\n * For example, for coresdk.child_workflow.ParentClosePolicy, this evaluates to:\n *\n * {\n *   TERMINATE: \"TERMINATE\";\n *   ABANDON: \"ABANDON\";\n *   REQUEST_CANCEL: \"REQUEST_CANCEL\";\n *\n *   PARENT_CLOSE_POLICY_TERMINATE?: \"TERMINATE\";\n *   PARENT_CLOSE_POLICY_ABANDON?: \"ABANDON\";\n *   PARENT_CLOSE_POLICY_REQUEST_CANCEL?: \"REQUEST_CANCEL\";\n *\n *   PARENT_CLOSE_POLICY_UNSPECIFIED?: undefined;\n * }\n */\ntype ProtoConstObjectOfStringsEnum<\n  ShortStringEnumKey extends string,\n  Prefix extends string,\n  Unspecified, // e.g. 'UNSPECIFIED'\n> = UnionToIntersection<\n  | {\n      // e.g.: \"TERMINATE\": \"TERMINATE\"\n      readonly [k in ShortStringEnumKey]: k;\n    }\n  | {\n      [k in ShortStringEnumKey]: Prefix extends ''\n        ? object\n        : {\n            // e.g.: \"PARENT_CLOSE_POLICY_TERMINATE\"?: \"TERMINATE\"\n            readonly [kk in `${Prefix}${k}`]?: k;\n          };\n    }[ShortStringEnumKey]\n  | (Unspecified extends string\n      ? {\n          // e.g.: \"PARENT_CLOSE_POLICY_UNSPECIFIED\"?: undefined\n          [k in `${Prefix}${Unspecified}`]?: undefined;\n        }\n      : object)\n  | (Unspecified extends string\n      ? {\n          // e.g.: \"UNSPECIFIED\"?: undefined\n          [k in `${Unspecified}`]?: undefined;\n        }\n      : object)\n>;\n\n/**\n * Given the exploded parameters of a proto enum (i.e. short keys, prefix, and short key of the\n * unspecified value), make a type that _exactly_ corresponds to the mapping table that the user is\n * expected to provide.\n *\n * For example, for coresdk.child_workflow.ParentClosePolicy, this evaluates to:\n *\n * {\n *  UNSPECIFIED: 0,\n *  TERMINATE: 1,\n *  ABANDON: 2,\n *  REQUEST_CANCEL: 3,\n * }\n */\ntype ProtoEnumToConstObjectOfStringMapTable<\n  _StringEnum extends ProtoConstObjectOfStringsEnum<ShortStringEnumKey, Prefix, Unspecified>,\n  ProtoEnumValue extends number,\n  ProtoEnum extends { [k in ProtoEnumKey]: ProtoEnumValue },\n  ProtoEnumKey extends `${Prefix}${string}`,\n  Prefix extends string,\n  Unspecified,\n  ShortStringEnumKey extends RemovePrefix<Prefix, ProtoEnumKey>,\n> = UnionToIntersection<\n  {\n    [k in ProtoEnumKey]: {\n      [kk in RemovePrefix<Prefix, k>]: ProtoEnum[k] extends number ? ProtoEnum[k] : never;\n    };\n  }[ProtoEnumKey]\n>;\n","/**\n * Helper to prevent `undefined` and `null` values overriding defaults when merging maps.\n */\nexport function filterNullAndUndefined<T extends Record<string, any>>(obj: T): T {\n  return Object.fromEntries(Object.entries(obj).filter(([_k, v]) => v != null)) as any;\n}\n\n/**\n * Merge two objects, possibly removing keys.\n *\n * More specifically:\n * - Any key/value pair in `delta` overrides the corresponding key/value pair in `original`;\n * - A key present in `delta` with value `undefined` removes the key from the resulting object;\n * - If `original` is `undefined` or empty, return `delta`;\n * - If `delta` is `undefined` or empty, return `original` (or undefined if `original` is also undefined);\n * - If there are no changes, then return `original`.\n */\nexport function mergeObjects<T extends Record<string, any>>(original: T, delta: T | undefined): T;\nexport function mergeObjects<T extends Record<string, any>>(\n  original: T | undefined,\n  delta: T | undefined\n): T | undefined {\n  if (original == null) return delta;\n  if (delta == null) return original;\n\n  const merged: Record<string, any> = { ...original };\n  let changed = false;\n  for (const [k, v] of Object.entries(delta)) {\n    if (v !== merged[k]) {\n      if (v == null) delete merged[k];\n      else merged[k] = v;\n      changed = true;\n    }\n  }\n\n  return changed ? (merged as T) : original;\n}\n\nfunction isObject(item: any): item is Record<string, any> {\n  return item && typeof item === 'object' && !Array.isArray(item);\n}\n\n/**\n * Recursively merges two objects, returning a new object.\n *\n * Properties from `source` will overwrite properties on `target`.\n * Nested objects are merged recursively.\n *\n * Object fields in the returned object are references, as in,\n * the returned object is not completely fresh.\n */\nexport function deepMerge<T extends Record<string, any>>(target: T, source: Partial<T>): T {\n  const output = { ...target };\n\n  if (isObject(target) && isObject(source)) {\n    for (const key of Object.keys(source)) {\n      const sourceValue = source[key];\n      if (isObject(sourceValue) && key in target && isObject(target[key] as any)) {\n        output[key as keyof T] = deepMerge(target[key], sourceValue);\n      } else {\n        (output as any)[key] = sourceValue;\n      }\n    }\n  }\n\n  return output;\n}\n","export * from './enums-helpers';\nexport {\n  filterNullAndUndefined,\n  mergeObjects,\n  // ts-prune-ignore-next\n  deepMerge,\n} from './objects-helpers';\n","import type { coresdk } from '@temporalio/proto';\nimport type { RetryPolicy } from './retry-policy';\nimport type { Duration } from './time';\nimport type { VersioningIntent } from './versioning-intent';\nimport { makeProtoEnumConverters } from './internal-workflow';\nimport type { Priority } from './priority';\n\n// Note: The types defined in this file are here for legacy reasons. They should have been defined\n// in the 'workflow' package, instead of 'common'. They are now reexported from the 'workflow'\n// package, which is the preferred way to import them, but we unfortunately can't remove them from\n// here as that would be a breaking change.\n\n/**\n * Determines:\n * - whether cancellation requests should be propagated from the current Workflow to the Activity; and\n * - when should the Activity cancellation be reported to Workflow (i.e. at which moment should the\n *   Activity call's promise fail with an `ActivityFailure`, with `cause` set to a `CancelledFailure`).\n *\n * Note that this setting only applies to cancellation originating from cancellation being\n * externally requested on the Workflow itself, or from internal cancellation of the\n * `CancellationScope` in which the Activity call was made. Termination of a Workflow Execution\n * always results in cancellation of its outstanding Activity executions, regardless of those\n * Activities' {@link ActivityCancellationType} settings.\n *\n * @default ActivityCancellationType.WAIT_CANCELLATION_COMPLETED\n */\n// MAINTENANCE: Keep this typedoc in sync with the `ActivityOptions.cancellationType` and\n//              `LocalActivityOptions.cancellationType` fields later in this file.\nexport const ActivityCancellationType = {\n  /**\n   * Do not propagate cancellation requests to the Activity, and immediately report cancellation\n   * to the caller.\n   */\n  ABANDON: 'ABANDON',\n\n  /**\n   * Propagate cancellation request from the Workflow to the Activity, yet _immediately_ report\n   * cancellation to the caller, i.e. without waiting for the server to confirm the cancellation\n   * request.\n   *\n   * Note that this cancellation type provides no guarantee, from the Workflow-side, that the\n   * cancellation request will actually be delivered to the Activity; e.g. the calling Workflow\n   * may exit before the delivery is completed, or the Activity may complete (either successfully\n   * or uncessfully) before the cancellation is delivered, resulting in a situation where the\n   * workflow thinks the activity was cancelled, but the activity actually completed successfully.\n   *\n   * To ensure that the Workflow is properly informed of the Activity's final state (i.e. either\n   * completion or cancellation), use {@link WAIT_CANCELLATION_COMPLETED}.\n   */\n  TRY_CANCEL: 'TRY_CANCEL',\n\n  /**\n   * Propagate cancellation request from the Workflow to the Activity, and wait for the activity\n   * to complete its execution (either successfully, uncessfully, or as cancelled).\n   *\n   * Note that the Activity must heartbeat to receive a cancellation notification. This can block\n   * the Workflow's cancellation for a long time if the Activity doesn't heartbeat or chooses to\n   * ignore the cancellation request.\n   */\n  WAIT_CANCELLATION_COMPLETED: 'WAIT_CANCELLATION_COMPLETED',\n} as const;\nexport type ActivityCancellationType = (typeof ActivityCancellationType)[keyof typeof ActivityCancellationType];\n\nexport const [encodeActivityCancellationType, decodeActivityCancellationType] = makeProtoEnumConverters<\n  coresdk.workflow_commands.ActivityCancellationType,\n  typeof coresdk.workflow_commands.ActivityCancellationType,\n  keyof typeof coresdk.workflow_commands.ActivityCancellationType,\n  typeof ActivityCancellationType,\n  ''\n>(\n  {\n    [ActivityCancellationType.TRY_CANCEL]: 0,\n    [ActivityCancellationType.WAIT_CANCELLATION_COMPLETED]: 1,\n    [ActivityCancellationType.ABANDON]: 2,\n  } as const,\n  ''\n);\n\n/**\n * Options for non-local activity invocation inside a workflow\n */\nexport interface ActivityOptions {\n  /**\n   * Identifier to use for tracking the activity in Workflow history.\n   * The `activityId` can be accessed by the activity function.\n   * Does not need to be unique.\n   *\n   * @default an incremental sequence number\n   */\n  activityId?: string;\n\n  /**\n   * Task queue name.\n   *\n   * @default current worker task queue\n   */\n  taskQueue?: string;\n\n  /**\n   * Heartbeat interval. Activity must heartbeat before this interval passes after a last heartbeat or activity start.\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  heartbeatTimeout?: Duration;\n\n  /**\n   * RetryPolicy that define how activity is retried in case of failure. If this is not set, then the server-defined default activity retry policy will be used. To ensure zero retries, set maximum attempts to 1.\n   */\n  retry?: RetryPolicy;\n\n  /**\n   * Maximum time of a single Activity execution attempt. Note that the Temporal Server doesn't detect Worker process\n   * failures directly: instead, it relies on this timeout to detect that an Activity didn't complete on time. Therefore, this\n   * timeout should be as short as the longest possible execution of the Activity body. Potentially long-running\n   * Activities must specify {@link heartbeatTimeout} and call {@link activity.Context.heartbeat} periodically for\n   * timely failure detection.\n   *\n   * Either this option or {@link scheduleToCloseTimeout} is required.\n   *\n   * @default `scheduleToCloseTimeout` or unlimited\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  startToCloseTimeout?: Duration;\n\n  /**\n   * Time that the Activity Task can stay in the Task Queue before it is picked up by a Worker. Do not specify this timeout unless using host-specific Task Queues for Activity Tasks are being used for routing.\n   * `scheduleToStartTimeout` is always non-retryable. Retrying after this timeout doesn't make sense as it would just put the Activity Task back into the same Task Queue.\n   *\n   * @default `scheduleToCloseTimeout` or unlimited\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  scheduleToStartTimeout?: Duration;\n\n  /**\n   * Total time that a workflow is willing to wait for the Activity to complete.\n   * `scheduleToCloseTimeout` limits the total time of an Activity's execution including retries (use {@link startToCloseTimeout} to limit the time of a single attempt).\n   *\n   * Either this option or {@link startToCloseTimeout} is required.\n   *\n   * @default unlimited\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  scheduleToCloseTimeout?: Duration;\n\n  /**\n   * Determines:\n   * - whether cancellation requests should be propagated from the current Workflow to the Activity; and\n   * - when should the Activity cancellation be reported to Workflow (i.e. at which moment should the\n   *   Activity call's promise fail with an `ActivityFailure`, with `cause` set to a `CancelledFailure`).\n   *\n   * Note that this setting only applies to cancellation originating from cancellation being\n   * externally requested on the Workflow itself, or from internal cancellation of the\n   * `CancellationScope` in which the Activity call was made. Termination of a Workflow Execution\n   * always results in cancellation of its outstanding Activity executions, regardless of those\n   * Activities' {@link ActivityCancellationType} settings.\n   *\n   * @default ActivityCancellationType.WAIT_CANCELLATION_COMPLETED\n   */\n  // MAINTENANCE: Keep this typedoc in sync with the `ActivityCancellationType` enum\n  cancellationType?: ActivityCancellationType;\n\n  /**\n   * Eager dispatch is an optimization that improves the throughput and load on the server for scheduling Activities.\n   * When used, the server will hand out Activity tasks back to the Worker when it completes a Workflow task.\n   * It is available from server version 1.17 behind the `system.enableActivityEagerExecution` feature flag.\n   *\n   * Eager dispatch will only be used if `allowEagerDispatch` is enabled (the default) and {@link taskQueue} is either\n   * omitted or the same as the current Workflow.\n   *\n   * @default true\n   */\n  allowEagerDispatch?: boolean;\n\n  /**\n   * When using the Worker Versioning feature, specifies whether this Activity should run on a\n   * worker with a compatible Build Id or not. See {@link VersioningIntent}.\n   *\n   * @default 'COMPATIBLE'\n   *\n   * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n   */\n  versioningIntent?: VersioningIntent;\n\n  /**\n   * A fixed, single-line summary for this workflow execution that may appear in the UI/CLI.\n   * This can be in single-line Temporal markdown format.\n   *\n   * @experimental User metadata is a new API and susceptible to change.\n   */\n  summary?: string;\n\n  /**\n   * Priority of this activity\n   */\n  priority?: Priority;\n}\n\n/**\n * Options for local activity invocation\n */\nexport interface LocalActivityOptions {\n  /**\n   * RetryPolicy that defines how an activity is retried in case of failure. If this is not set, then the SDK-defined default activity retry policy will be used.\n   * Note that local activities are always executed at least once, even if maximum attempts is set to 1 due to Workflow task retries.\n   */\n  retry?: RetryPolicy;\n\n  /**\n   * Maximum time the local activity is allowed to execute after the task is dispatched. This\n   * timeout is always retryable.\n   *\n   * Either this option or {@link scheduleToCloseTimeout} is required.\n   * If set, this must be <= {@link scheduleToCloseTimeout}, otherwise, it will be clamped down.\n   *\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  startToCloseTimeout?: Duration;\n\n  /**\n   * Limits time the local activity can idle internally before being executed. That can happen if\n   * the worker is currently at max concurrent local activity executions. This timeout is always\n   * non retryable as all a retry would achieve is to put it back into the same queue. Defaults\n   * to {@link scheduleToCloseTimeout} if not specified and that is set. Must be <=\n   * {@link scheduleToCloseTimeout} when set, otherwise, it will be clamped down.\n   *\n   * @default unlimited\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  scheduleToStartTimeout?: Duration;\n\n  /**\n   * Indicates how long the caller is willing to wait for local activity completion. Limits how\n   * long retries will be attempted.\n   *\n   * Either this option or {@link startToCloseTimeout} is required.\n   *\n   * @default unlimited\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  scheduleToCloseTimeout?: Duration;\n\n  /**\n   * If the activity is retrying and backoff would exceed this value, a server side timer will be scheduled for the next attempt.\n   * Otherwise, backoff will happen internally in the SDK.\n   *\n   * @default 1 minute\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   **/\n  localRetryThreshold?: Duration;\n\n  /**\n   * Determines:\n   * - whether cancellation requests should be propagated from the current Workflow to the Activity; and\n   * - when should the Activity cancellation be reported to Workflow (i.e. at which moment should the\n   *   Activity call's promise fail with an `ActivityFailure`, with `cause` set to a `CancelledFailure`).\n   *\n   * Note that this setting only applies to cancellation originating from cancellation being\n   * externally requested on the Workflow itself, or from internal cancellation of the\n   * `CancellationScope` in which the Activity call was made. Termination of a Workflow Execution\n   * always results in cancellation of its outstanding Activity executions, regardless of those\n   * Activities' {@link ActivityCancellationType} settings.\n   *\n   * @default ActivityCancellationType.WAIT_CANCELLATION_COMPLETED\n   */\n  // MAINTENANCE: Keep this typedoc in sync with the `ActivityCancellationType` enum\n  cancellationType?: ActivityCancellationType;\n\n  /**\n   * A fixed, single-line summary for this workflow execution that may appear in the UI/CLI.\n   * This can be in single-line Temporal markdown format.\n   *\n   * @experimental User metadata is a new API and susceptible to change.\n   */\n  summary?: string;\n}\n","import type { coresdk } from '@temporalio/proto';\n\n// ts-prune-ignore-next\nexport interface ActivityCancellationDetailsHolder {\n  details?: ActivityCancellationDetails;\n}\n\nexport interface ActivityCancellationDetailsOptions {\n  notFound?: boolean;\n  cancelRequested?: boolean;\n  paused?: boolean;\n  timedOut?: boolean;\n  workerShutdown?: boolean;\n  reset?: boolean;\n}\n\n/**\n * Provides the reasons for the activity's cancellation. Cancellation details are set once and do not change once set.\n */\nexport class ActivityCancellationDetails {\n  readonly notFound: boolean;\n  readonly cancelRequested: boolean;\n  readonly paused: boolean;\n  readonly timedOut: boolean;\n  readonly workerShutdown: boolean;\n  readonly reset: boolean;\n\n  public constructor(options: ActivityCancellationDetailsOptions = {}) {\n    this.notFound = options.notFound ?? false;\n    this.cancelRequested = options.cancelRequested ?? false;\n    this.paused = options.paused ?? false;\n    this.timedOut = options.timedOut ?? false;\n    this.workerShutdown = options.workerShutdown ?? false;\n    this.reset = options.reset ?? false;\n  }\n\n  static fromProto(\n    proto: coresdk.activity_task.IActivityCancellationDetails | null | undefined\n  ): ActivityCancellationDetails {\n    if (proto == null) {\n      return new ActivityCancellationDetails();\n    }\n    return new ActivityCancellationDetails({\n      notFound: proto.isNotFound ?? false,\n      cancelRequested: proto.isCancelled ?? false,\n      paused: proto.isPaused ?? false,\n      timedOut: proto.isTimedOut ?? false,\n      workerShutdown: proto.isWorkerShutdown ?? false,\n      reset: proto.isReset ?? false,\n    });\n  }\n}\n","import type { temporal } from '@temporalio/proto';\nimport { makeProtoEnumConverters } from './internal-workflow';\n\n/**\n * Reason(s) why continue as new is suggested. Can potentially be multiple reasons.\n *\n * @experimental May be removed or changed in the future.\n */\nexport const SuggestContinueAsNewReason = {\n  HISTORY_SIZE_TOO_LARGE: 'HISTORY_SIZE_TOO_LARGE',\n  TOO_MANY_HISTORY_EVENTS: 'TOO_MANY_HISTORY_EVENTS',\n  TOO_MANY_UPDATES: 'TOO_MANY_UPDATES',\n} as const;\nexport type SuggestContinueAsNewReason = (typeof SuggestContinueAsNewReason)[keyof typeof SuggestContinueAsNewReason];\n\n// ts-prune-ignore-next\nexport const [encodeSuggestContinueAsNewReason, decodeSuggestContinueAsNewReason] = makeProtoEnumConverters<\n  temporal.api.enums.v1.SuggestContinueAsNewReason,\n  typeof temporal.api.enums.v1.SuggestContinueAsNewReason,\n  keyof typeof temporal.api.enums.v1.SuggestContinueAsNewReason,\n  typeof SuggestContinueAsNewReason,\n  'SUGGEST_CONTINUE_AS_NEW_REASON_'\n>(\n  {\n    [SuggestContinueAsNewReason.HISTORY_SIZE_TOO_LARGE]: 1,\n    [SuggestContinueAsNewReason.TOO_MANY_HISTORY_EVENTS]: 2,\n    [SuggestContinueAsNewReason.TOO_MANY_UPDATES]: 3,\n    UNSPECIFIED: 0,\n  } as const,\n  'SUGGEST_CONTINUE_AS_NEW_REASON_'\n);\n\n// ts-prune-ignore-next\nexport function suggestContinueAsNewReasonsFromProto(\n  reasons: temporal.api.enums.v1.SuggestContinueAsNewReason[] | null | undefined\n): SuggestContinueAsNewReason[] | undefined {\n  if (reasons == null) {\n    return undefined;\n  }\n\n  const res: SuggestContinueAsNewReason[] = [];\n  for (const r of reasons) {\n    const decoded = decodeSuggestContinueAsNewReason(r);\n    if (decoded !== undefined) {\n      res.push(decoded);\n    }\n  }\n  if (res.length === 0) {\n    return undefined;\n  }\n  return res;\n}\n","/**\n * Inject a custom 'instanceof' handler on the given class, that works correctly across execution contexts.\n *\n * ### Details ###\n *\n * According to the EcmaScript's spec, the default behavior of JavaScript's `x instanceof Y` operator is to walk up the\n * prototype chain of object 'x', checking if any constructor in that hierarchy is _exactly the same object_ as the\n * constructor function 'Y'.\n *\n * Unfortunately, it happens in various situations that different constructor function objects get created for what\n * appears to be the very same class. This leads to surprising behavior where `instanceof` returns false though it is\n * known that the object is indeed an instance of that class. One particular case where this happens is when constructor\n * 'Y' belongs to a different realm than the constuctor with which 'x' was instantiated. Another case is when two copies\n * of the same library gets loaded in the same realm.\n *\n * In practice, this tends to cause issues when crossing the workflow-sandboxing boundary (since Node's vm module\n * really creates new execution realms), as well as when running tests using Jest (see https://github.com/jestjs/jest/issues/2549\n * for some details on that one).\n *\n * This function injects a custom 'instanceof' handler into the prototype of 'clazz', which is both cross-realm safe and\n * cross-copies-of-the-same-lib safe. It works by adding a special symbol property to the prototype of 'clazz', and then\n * checking for the presence of that symbol.\n *\n * @internal\n * @hidden\n */\nexport function injectSymbolBasedInstanceOf<E>(clazz: Class<E>, markerName: string): void {\n  // It may seem redundant to have an explicit markerName argument here. Can't we simply use the class\n  // function name for that? Unfortunately, no, as the class name may get mangled if the file gets minified.\n  const marker = Symbol.for(`__nexus_is${markerName}`);\n\n  Object.defineProperty(clazz.prototype, \"name\", { value: markerName, enumerable: true });\n  Object.defineProperty(clazz.prototype, marker, { value: true, enumerable: false });\n  Object.defineProperty(clazz, Symbol.hasInstance, {\n    value: function (this: any, value: object): boolean {\n      if (this === clazz) {\n        return typeof value === \"object\" && value !== null && (value as any)[marker] === true;\n      } else {\n        // 'this' must be a _subclass_ of clazz that doesn't redefined [Symbol.hasInstance], so that it inherited\n        // from clazz's [Symbol.hasInstance]. If we don't handle this particular situation, then\n        // `x instanceof SubclassOfParent` would return true for any instance of 'Parent', which is clearly wrong.\n        //\n        // Ideally, it'd be preferable to avoid this case entirely, by making sure that all subclasses of 'clazz'\n        // redefine [Symbol.hasInstance], but we can't enforce that. We therefore fallback to the default instanceof\n        // behavior (which is NOT cross-realm safe).\n        return this.prototype.isPrototypeOf(value); // eslint-disable-line no-prototype-builtins\n      }\n    },\n  });\n}\n\n/**\n * Type definition for a class.\n *\n * @internal\n */\nexport interface Class<E> {\n  new (...args: any[]): E;\n  prototype: E;\n}\n","import { injectSymbolBasedInstanceOf } from \"../internal/symbol-instanceof\";\nimport type { Failure } from \"./failure\";\n\n/**\n * A Nexus handler error.\n *\n * This error class represents an error that occurred during the handling of a\n * Nexus operation that should be reported to the caller as a handler error.\n *\n * Example:\n *\n * ```ts\n *     import { HandlerError } from \"nexus-rpc\";\n *\n *     // Throw a bad request error\n *     throw new HandlerError(\"BAD_REQUEST\", \"Invalid input provided\");\n *\n *     // Throw a bad request error, with a cause\n *     throw new HandlerError(\"BAD_REQUEST\", \"Invalid input provided\", { cause });\n *\n *     // Throw a retryable internal error\n *     throw new HandlerError(\"INTERNAL\", \"Database unavailable\", { retryableOverride: true });\n *\n * ```\n *\n * @experimental\n */\nexport class HandlerError extends Error {\n  /**\n   * One of the predefined error types.\n   *\n   * If the constructor received an unknown string, this will be `\"UNKNOWN\"`.\n   * Use {@link rawErrorType} to access the original string.\n   *\n   * @see {@link HandlerErrorType}\n   */\n  public readonly type: HandlerErrorType;\n\n  /**\n   * The raw error type string.\n   *\n   * For known types, this equals {@link type}. For unknown types, this preserves\n   * the original wire string while {@link type} is set to `\"UNKNOWN\"`.\n   */\n  public readonly rawErrorType: string;\n\n  /**\n   * Whether this error should be considered retryable.\n   *\n   * By default, the retry behavior is determined from the error type.\n   * For example, by default, `INTERNAL` is retryable, but `UNAVAILABLE` is non-retryable.\n   *\n   * If specified, `retryableOverride` overrides the default retry behavior determined based on\n   * the error type. Use {@link retryable} to determine the effective retry behavior.\n   *\n   * @see {@link retryable}.\n   */\n  public readonly retryableOverride?: boolean;\n\n  /**\n   * Set if this error was constructed from a {@link Failure} object.\n   *\n   * Preserves the original failure for round-tripping through the wire format.\n   */\n  public readonly originalFailure?: Failure;\n\n  /**\n   * Constructs a new {@link HandlerError}.\n   *\n   * @param type - The type of the error. Must be a known {@link HandlerErrorType}.\n   * @param message - The message of the error.\n   * @param options - Extra options for the error, including the cause and retryable override.\n   *\n   * @experimental\n   */\n  constructor(type: HandlerErrorType, message?: string | undefined, options?: HandlerErrorOptions) {\n    const actualMessage = message || `Handler error: ${type}`;\n\n    super(actualMessage, { cause: options?.cause });\n\n    if (!Object.hasOwn(HandlerErrorType, type)) {\n      throw new TypeError(`Invalid HandlerErrorType: ${type}`);\n    }\n    this.type = type;\n    this.rawErrorType = type === \"UNKNOWN\" ? (options?.rawErrorType ?? type) : type;\n    this.retryableOverride = options?.retryableOverride;\n    this.originalFailure = options?.originalFailure;\n    if (options?.stackTrace !== undefined) {\n      this.stack = options.stackTrace;\n    }\n  }\n\n  /**\n   * Whether this error is retryable.\n   *\n   * This differs from the {@link retryableOverride} property in that `retryable` takes into\n   * account the default behavior resulting from the error type, if no override is provided.\n   *\n   * @see {@link retryableOverride}.\n   */\n  public get retryable(): boolean {\n    if (typeof this.retryableOverride === \"boolean\") return this.retryableOverride;\n\n    switch (this.type) {\n      case \"BAD_REQUEST\":\n      case \"UNAUTHENTICATED\":\n      case \"UNAUTHORIZED\":\n      case \"NOT_FOUND\":\n      case \"NOT_IMPLEMENTED\":\n      case \"CONFLICT\":\n        return false;\n\n      case \"UNAVAILABLE\":\n      case \"UPSTREAM_TIMEOUT\":\n      case \"RESOURCE_EXHAUSTED\":\n      case \"INTERNAL\":\n      case \"REQUEST_TIMEOUT\":\n      case \"UNKNOWN\":\n        return true;\n\n      default: {\n        // Force a compile time error if missing a case\n        const _noMissingCase: never = this.type;\n        return true;\n      }\n    }\n  }\n}\n\ninjectSymbolBasedInstanceOf(HandlerError, \"HandlerError\");\n\n/**\n * Options for constructing a {@link HandlerError}.\n *\n * @experimental\n * @inline\n */\nexport interface HandlerErrorOptions {\n  /**\n   * Underlying cause of the error.\n   */\n  cause?: unknown;\n\n  /**\n   * Whether this error should be considered retryable.\n   *\n   * If not set, the retry behavior is determined from the error type.\n   * For example, by default, `INTERNAL` is retryable, but `UNAVAILABLE` is non-retryable.\n   */\n  retryableOverride?: boolean | undefined;\n\n  /**\n   * An optional stack trace string associated with this error.\n   *\n   * When provided, this overrides the native `stack` property on the error.\n   * This is typically used for remote stack traces received over the wire,\n   * which may originate from a different language runtime.\n   */\n  stackTrace?: string;\n\n  /**\n   * An optional {@link Failure} object from which this error was constructed.\n   *\n   * Preserves the original failure for round-tripping through the wire format.\n   */\n  originalFailure?: Failure;\n\n  /**\n   * The original error type string, preserving the raw wire value.\n   *\n   * For known types, this option is ignored.\n   * When the error's type is set to `\"UNKNOWN\"`, this option is used to preserve the original wire string.\n   */\n  rawErrorType?: string;\n}\n\n/**\n * An error type associated with a {@link HandlerError}, defined according to the Nexus specification.\n *\n * @experimental\n */\nexport type HandlerErrorType = (typeof HandlerErrorType)[keyof typeof HandlerErrorType];\nexport const HandlerErrorType = {\n  /**\n   * The error type is unknown.\n   *\n   * Subsequent requests by the client are permissible.\n   */\n  UNKNOWN: \"UNKNOWN\",\n\n  /**\n   * The handler cannot or will not process the request due to an apparent client error.\n   *\n   * Clients should not retry this request unless advised otherwise.\n   */\n  BAD_REQUEST: \"BAD_REQUEST\",\n\n  /**\n   * The client did not supply valid authentication credentials for this request.\n   *\n   * Clients should not retry this request unless advised otherwise.\n   */\n  UNAUTHENTICATED: \"UNAUTHENTICATED\",\n\n  /**\n   * The caller does not have permission to execute the specified operation.\n   *\n   * Clients should not retry this request unless advised otherwise.\n   */\n  UNAUTHORIZED: \"UNAUTHORIZED\",\n\n  /**\n   * The requested resource could not be found but may be available in the future.\n   */\n  NOT_FOUND: \"NOT_FOUND\",\n\n  /**\n   * Returned by the server when it has given up handling a request. This may occur by enforcing\n   * a client provided `Request-Timeout` or for any arbitrary reason such as enforcing some\n   * configurable limit.\n   *\n   * Subsequent requests by the client are permissible.\n   */\n  REQUEST_TIMEOUT: \"REQUEST_TIMEOUT\",\n\n  /**\n   * The request could not be made due to a conflict. This may happen when trying to create an\n   * operation that has already been started.\n   *\n   * Clients should not retry this request unless advised otherwise.\n   */\n  CONFLICT: \"CONFLICT\",\n\n  /**\n   * Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system\n   * is out of space.\n   *\n   * Subsequent requests by the client are permissible.\n   */\n  RESOURCE_EXHAUSTED: \"RESOURCE_EXHAUSTED\",\n\n  /**\n   * An internal error occurred.\n   *\n   * Subsequent requests by the client are permissible.\n   */\n  INTERNAL: \"INTERNAL\",\n\n  /**\n   * The server either does not recognize the request method, or it lacks the ability to fulfill the\n   * request. Clients should not retry this request unless advised otherwise.\n   */\n  NOT_IMPLEMENTED: \"NOT_IMPLEMENTED\",\n\n  /**\n   * The service is currently unavailable.\n   *\n   * Subsequent requests by the client are permissible.\n   */\n  UNAVAILABLE: \"UNAVAILABLE\",\n\n  /**\n   * Used by gateways to report that a request to an upstream server has timed out.\n   *\n   * Subsequent requests by the client are permissible.\n   */\n  UPSTREAM_TIMEOUT: \"UPSTREAM_TIMEOUT\",\n} as const;\n","import { injectSymbolBasedInstanceOf } from \"../internal/symbol-instanceof\";\nimport type { Failure } from \"./failure\";\n\n/**\n * A Nexus operation error.\n *\n * This error class represents the abnormal completion of a Nexus operation,\n * that should be reported to the caller as an operation error.\n *\n * Example:\n *\n * ```ts\n *     import { OperationError } from \"nexus-rpc\";\n *\n *     // Throw a failed operation error\n *     throw new OperationError(\"failed\", \"Not enough inventory\");\n *\n *     // Throw a failed operation error, with a cause\n *     throw new OperationError(\"failed\", \"Not enough inventory\", { cause });\n *\n *     // Throw a canceled operation error\n *     throw new OperationError(\"canceled\", \"User canceled the operation\");\n * ```\n *\n * @experimental\n */\nexport class OperationError extends Error {\n  /**\n   * State of the operation.\n   */\n  public readonly state: OperationErrorState;\n\n  /**\n   * The error that resulted in this operation error.\n   */\n  declare public readonly cause: Error;\n\n  /**\n   * Set if this error was constructed from a {@link Failure} object.\n   *\n   * Preserves the original failure for round-tripping through the wire format.\n   */\n  public readonly originalFailure?: Failure;\n\n  /**\n   * Constructs a new {@link OperationError}.\n   *\n   * @param state - The state of the operation.\n   * @param message - The message of the error.\n   * @param options - Extra options for the error, e.g. the cause.\n   *\n   * @experimental\n   */\n  constructor(\n    state: OperationErrorState,\n    message?: string | undefined,\n    options?: OperationErrorOptions,\n  ) {\n    const defaultMessage = state === \"canceled\" ? `Operation canceled` : `Operation failed`;\n    const actualMessage = message || defaultMessage;\n\n    super(actualMessage, { cause: options?.cause });\n    this.state = state;\n    this.originalFailure = options?.originalFailure;\n    if (options?.stackTrace !== undefined) {\n      this.stack = options.stackTrace;\n    }\n  }\n}\n\ninjectSymbolBasedInstanceOf(OperationError, \"OperationError\");\n\n/**\n * Options for constructing an {@link OperationError}.\n *\n * @experimental\n * @inline\n */\nexport interface OperationErrorOptions {\n  /**\n   * Underlying cause of the error.\n   */\n  cause?: Error | undefined;\n\n  /**\n   * An optional stack trace string associated with this error.\n   *\n   * When provided, this overrides the native `stack` property on the error.\n   * This is typically used for remote stack traces received over the wire,\n   * which may originate from a different language runtime.\n   */\n  stackTrace?: string;\n\n  /**\n   * An optional {@link Failure} object from which this error was constructed.\n   *\n   * Preserves the original failure for round-tripping through the wire format.\n   */\n  originalFailure?: Failure;\n}\n\n/**\n * Describes state of an operation that did not complete successfully.\n *\n * @experimental\n * @inline\n */\nexport type OperationErrorState = \"failed\" | \"canceled\";\n","export { type Failure } from \"./failure\";\nexport { HandlerError, HandlerErrorType, type HandlerErrorOptions } from \"./handler-error\";\nexport { type Link } from \"./link\";\nexport {\n  OperationError,\n  type OperationErrorState,\n  type OperationErrorOptions,\n} from \"./operation-error\";\n","/**\n * Creates a new object by mapping all string properties (keys and values) of an existing object\n * through a mapper function.\n *\n * @param obj - The source object, whose properties will be mapped.\n * @param fn - The mapper function.\n *\n * @returns A new object with the properties mapped to the new type.\n *\n * @internal\n * @hidden\n */\nexport function mapKeyValues<T extends Record<string, any>, U>(\n  obj: T,\n  fn: (key: keyof T & string, value: T[keyof T & string]) => U,\n): Record<keyof T, U> {\n  return Object.fromEntries(\n    Object.entries(obj).map(([key, value]) => [key, fn(key, value)]),\n  ) as Record<keyof T, U>;\n}\n","export declare const inputBrand: unique symbol;\nexport declare const outputBrand: unique symbol;\n\n/**\n * Definition of a Nexus service contract, including its name and operations.\n *\n * Can only be constructed by the {@link service} function.\n *\n * @experimental\n */\nexport interface ServiceDefinition<Ops extends OperationMap = OperationMap> {\n  name: string;\n  operations: Ops;\n}\n\n/**\n * An operation contract that describes the name, and input and output types of an operation.\n *\n * @experimental\n */\nexport interface OperationDefinition<I, O> {\n  name: string;\n  [inputBrand]: I;\n  [outputBrand]: O;\n}\n\n/**\n * A named collection of operations, as defined by a {@link ServiceDefinition}.\n *\n * @experimental\n */\nexport type OperationMap = Record<string, OperationDefinition<any, any>>;\n\n/**\n * A mapped type that extracts the input type from an operation in a service.\n *\n * @experimental\n */\nexport type OperationInput<T> = T extends OperationDefinition<infer I, any> ? I : any;\n\n/**\n * A mapped type that extracts the output type from an operation in a service.\n *\n * @experimental\n */\nexport type OperationOutput<T> = T extends OperationDefinition<any, infer O> ? O : any;\n\n/**\n * A mapped type that extracts all operation names from a service.\n *\n * @experimental\n */\nexport type OperationKey<T> = {\n  [K in keyof T & string]: T[K] extends OperationDefinition<any, any> ? K : never;\n}[keyof T & string];\n\n/**\n * Confirm that a service definition is valid.\n *\n * @param service - The service definition to validate.\n *\n * @throws {TypeError} If the service definition is invalid.\n *\n * @experimental\n */\nexport function validateServiceDefinition(service: ServiceDefinition) {\n  if (typeof service.name !== \"string\" || !service.name) {\n    throw new TypeError(\"Service name must be a non-empty string\");\n  }\n\n  const operationNames = new Set<string>();\n  for (const [propName, operation] of Object.entries(service.operations)) {\n    const operationName = operation.name;\n    if (typeof operationName !== \"string\" || !operationName) {\n      throw new TypeError(`Operation name must be a non-empty string, for property '${propName}'`);\n    }\n    if (operationNames.has(operationName)) {\n      throw new TypeError(`Duplicate operation definition for name: '${operationName}'`);\n    }\n    operationNames.add(operationName);\n  }\n}\n","import { mapKeyValues } from \"../internal/object-utils\";\nimport { Simplify } from \"../internal/types\";\nimport { inputBrand, outputBrand, validateServiceDefinition } from \"./service-definition\";\nimport { OperationDefinition, ServiceDefinition } from \"./service-definition\";\n\n/**\n * Construct a service definition for a collection of operations.\n *\n * @experimental\n */\nexport function service<Ops extends PartialOperationMap>(\n  name: string,\n  operations: Ops,\n): ServiceDefinition<Simplify<OperationMapFromPartial<Ops>>> {\n  const service = {\n    name,\n    operations: mapKeyValues(operations, (key, op: PartialOperation<any, any>) => ({\n      ...op,\n      name: op.name || key,\n    })),\n  } as ServiceDefinition<OperationMapFromPartial<Ops>>;\n\n  validateServiceDefinition(service);\n  return service;\n}\n\n/**\n * Construct an operation definition as part of a service contract.\n *\n * @experimental\n */\nexport function operation<I, O>(op?: OperationOptions<I, O>): PartialOperation<I, O> {\n  return { ...op } as PartialOperation<I, O>;\n}\n\n/**\n * Options for the {@link operation} function.\n *\n * @experimental\n */\nexport interface OperationOptions<_I, _O> {\n  name?: string;\n}\n\n/**\n * A named collection of partial operation handlers. Input for the {@link service} function.\n *\n * @experimental\n */\nexport type PartialOperationMap = Record<string, PartialOperation<any, any>>;\n\n/**\n * A type that transforms a {@link PartialOperationMap} into an {@link OperationMap}.\n *\n * @experimental\n */\nexport type OperationMapFromPartial<T extends PartialOperationMap> = {\n  [K in keyof T & string]: T[K] extends PartialOperation<infer I, infer O>\n    ? OperationDefinition<I, O>\n    : never;\n};\n\n/**\n * A partial {@link OperationDefinition} that is used to define an operation in a {@link ServiceDefinition}.\n *\n * The difference between this and {@link OperationDefinition} is that the name is optional.\n *\n * @experimental\n */\nexport interface PartialOperation<I, O> {\n  name?: string;\n  [inputBrand]: I;\n  [outputBrand]: O;\n}\n","export {\n  type ServiceDefinition,\n  type OperationDefinition,\n  type OperationMap,\n  type OperationInput,\n  type OperationOutput,\n  type OperationKey,\n} from \"./service-definition\";\n\nexport {\n  service,\n  operation,\n  type OperationOptions,\n  type PartialOperationMap,\n  type OperationMapFromPartial,\n  type PartialOperation,\n} from \"./helpers\";\n","/** @import { OperationHandler } from \"./operation-handler\" */\n\n/**\n * An internal symbol, used to prevent direct implementation of interfaces.\n *\n * @hidden\n * @internal\n */\nconst isHandlerStartOperationResultSymbol = Symbol(\"__nexus_isHandlerStartOperationResult\");\n\n/**\n * The return type from the {@link OperationHandler.start} method.\n *\n * Use either {@link HandlerStartOperationResult.sync} or {@link HandlerStartOperationResult.async}\n * to create a result object. Do not implement this interface directly.\n *\n * @experimental\n */\nexport type HandlerStartOperationResult<T = unknown> =\n  | HandlerStartOperationResultSync<T>\n  | HandlerStartOperationResultAsync;\n\n/**\n * The return type from the {@link OperationHandler.start} method.\n *\n * Use either {@link HandlerStartOperationResult.sync} or {@link HandlerStartOperationResult.async}\n * to create a result object. Do not implement this interface directly.\n *\n * @experimental\n */\nexport const HandlerStartOperationResult = {\n  /**\n   * Create a result that indicates that an operation has been accepted and will complete asynchronously.\n   */\n  async(token: string): HandlerStartOperationResultAsync {\n    return {\n      isAsync: true,\n      token,\n      [isHandlerStartOperationResultSymbol]: true,\n    };\n  },\n\n  /**\n   * Create a result that indicates that an operation completed successfully.\n   */\n  sync<T>(value: T): HandlerStartOperationResultSync<T> {\n    return {\n      isAsync: false,\n      value,\n      [isHandlerStartOperationResultSymbol]: true,\n    };\n  },\n\n  [Symbol.hasInstance]: function (this: any, value: object): boolean {\n    return (\n      typeof value === \"object\" &&\n      value !== null &&\n      (value as any)[isHandlerStartOperationResultSymbol] === true\n    );\n  },\n};\n\n/**\n * A result that indicates that an operation completed successfully.\n *\n * Use {@link HandlerStartOperationResult.sync} to create a sync result object.\n * Do not implement this interface directly.\n *\n * @example\n * ```typescript\n *   return HandlerStartOperationResult.sync(42);\n * ```\n *\n * @experimental\n */\nexport interface HandlerStartOperationResultSync<T = unknown> {\n  /**\n   * Indicate whether the operation completed synchronously (false) or will complete\n   * asynchronously (true).\n   */\n  isAsync: false;\n\n  /**\n   * The return value of the operation.\n   */\n  value: T;\n\n  /**\n   * Prevents direct implementation of this interface.\n   *\n   * @hidden\n   * @internal\n   */\n  [isHandlerStartOperationResultSymbol]: true;\n}\n\n/**\n * A result that indicates that an operation has been accepted and will complete asynchronously.\n *\n * Use {@link HandlerStartOperationResult.async} to create an async result object.\n * Do not implement this interface directly.\n *\n * @example\n * ```typescript\n *   return HandlerStartOperationResult.async(\"unique token\");\n * ```\n *\n * @experimental\n */\nexport interface HandlerStartOperationResultAsync {\n  /**\n   * Indicate whether the operation completed synchronously (false) or will complete\n   * asynchronously (true).\n   */\n  isAsync: true;\n\n  /**\n   * A token to identify the operation in followup handler methods such as {@link OperationHandler.getResult}\n   * and {@link OperationHandler.cancel}.\n   */\n  token: string;\n\n  /**\n   * Prevents direct implementation of this interface.\n   *\n   * @hidden\n   * @internal\n   */\n  [isHandlerStartOperationResultSymbol]: true;\n}\n","import { HandlerError } from \"../common\";\nimport { HandlerStartOperationResult } from \"./start-operation-result\";\nimport { CancelOperationContext, StartOperationContext } from \"./operation-context\";\nimport {\n  OperationDefinition,\n  OperationInput,\n  OperationKey,\n  OperationMap,\n  OperationOutput,\n} from \"../service\";\n\n/**\n * A handler for a Nexus operation.\n *\n * This interface is meant to be implemented by Nexus service implementors.\n *\n * @experimental\n */\nexport interface OperationHandler<I, O> {\n  /**\n   * Handle requests to start an operation.\n   *\n   * Return {@link HandlerStartOperationResultSync} to respond successfully inline, or\n   * {@link HandlerStartOperationResultAsync} to indicate that an asynchronous operation was started.\n   * Throw an {@link OperationError} to indicate that an operation completed as failed or canceled.\n   */\n  start(ctx: StartOperationContext, input: I): Promise<HandlerStartOperationResult<O>>;\n\n  /**\n   * Handle requests to cancel an asynchronous operation.\n   *\n   * Cancelation of a Nexus operation is:\n   * 1. _asynchronous_ - returning from this method only confirms that cancelation was notified;\n   *    the implementation may however choose to process the cancellation at a later time, or to\n   *    ignore it entirely.\n   * 2. _idempotent_ - implementations must ignore duplicate cancelations for the same operation.\n   */\n  cancel(ctx: CancelOperationContext, token: string): Promise<void>;\n}\n\n/**\n * A shortcut for defining an operation handler that only implements the {@link OperationHandler.start}\n * method and always returns a {@link HandlerStartOperationResultSync}.\n *\n * @experimental\n */\nexport type SyncOperationHandler<I, O> = (ctx: StartOperationContext, input: I) => Promise<O>;\n\n/**\n * Compiles an operation handler into a {@link CompiledOperationHandler}. A compiled operation\n * handler is a single object that is both an operation definition and a full-fledged operation\n * handler for that operation.\n *\n * @hidden\n * @internal\n */\nexport function compileOperationHandler<I, O>(\n  definition: OperationDefinition<I, O>,\n  handler: OperationHandler<I, O> | SyncOperationHandler<I, O> | undefined,\n): CompiledOperationHandler<I, O> {\n  if (handler == null) {\n    throw new TypeError(\n      `No handler registered for operation '${definition.name}' (expected property name '${definition.name}')`,\n    );\n  }\n\n  if (typeof handler === \"function\") {\n    // Operation handler is declared using the shortcut syntax. Wrap it into a full-fledged handler.\n    return {\n      ...definition,\n\n      start: async (ctx, input) => {\n        return HandlerStartOperationResult.sync(await handler(ctx, input));\n      },\n      cancel: notImplemented,\n    };\n  }\n\n  if (typeof handler.start !== \"function\") {\n    throw new TypeError(`Handler for operation '${definition.name}' has no start method`);\n  }\n\n  return {\n    ...definition,\n\n    // Defensively ensure that the handler has all the required methods,\n    // defaulting to throwing a not implemented error if some methods are missing.\n    start: handler.start.bind(handler),\n    cancel: handler.cancel?.bind(handler) ?? notImplemented,\n  };\n}\n\n/**\n * A compiled operation handler is a single object that is both an operation definition and a\n * full-fledged operation handler for that operation.\n *\n * @hidden\n * @internal\n * @experimental\n */\nexport type CompiledOperationHandler<I, O> = OperationDefinition<I, O> & OperationHandler<I, O>;\n\n/**\n * @internal\n * @hidden\n */\nexport type CompiledOperationHandlerFor<Ops extends OperationMap> = CompiledOperationHandler<\n  OperationInput<Ops[OperationKey<Ops>]>,\n  OperationOutput<Ops[OperationKey<Ops>]>\n>;\n\n/**\n * @internal\n * @hidden\n */\nfunction notImplemented(): never {\n  throw new HandlerError(\"NOT_IMPLEMENTED\", \"Not implemented\");\n}\n","import { HandlerError } from \"../common\";\nimport { OperationDefinition, OperationKey, OperationMap, ServiceDefinition } from \"../service\";\nimport {\n  CompiledOperationHandlerFor,\n  compileOperationHandler,\n  OperationHandler,\n  SyncOperationHandler,\n} from \"./operation-handler\";\n\n/**\n * A Nexus Service implementation, that provides handlers for each of its operations.\n *\n * @experimental\n */\nexport class ServiceHandler<Ops extends OperationMap = OperationMap> {\n  /**\n   * Build a `ServiceHandler` from a service definition and a collection of operation handlers.\n   *\n   * There must be an operation handler for every operation in the service definition.\n   *\n   * @param service The service definition\n   * @param handlers The collection of handlers\n   * @returns The compiled service handler\n   *\n   * @internal\n   * @hidden\n   */\n  static build<Ops extends OperationMap>(\n    service: ServiceDefinition<Ops>,\n    handlers: ServiceHandlerFor<Ops>,\n  ): ServiceHandler<Ops> {\n    const operations = new Map<OperationKey<Ops>, CompiledOperationHandlerFor<Ops>>();\n\n    for (const [propName, definition] of Object.entries(service.operations)) {\n      const compiledOpHandler = compileOperationHandler(definition, handlers[propName]);\n      const operationName = compiledOpHandler.name as OperationKey<Ops>;\n\n      if (operations.has(operationName)) {\n        throw new TypeError(\n          `Operation with name '${operationName}' already registered for service '${service.name}'`,\n        );\n      }\n\n      operations.set(operationName, compiledOpHandler);\n    }\n\n    return new ServiceHandler(service, handlers, operations);\n  }\n\n  private constructor(\n    public readonly definition: ServiceDefinition<Ops>,\n    public readonly handlers: ServiceHandlerFor<Ops>,\n    private readonly operationsMap: Map<OperationKey<Ops>, CompiledOperationHandlerFor<Ops>>,\n  ) {}\n\n  /**\n   * Returns the definition and handler for a given operation.\n   *\n   * @param operationName\n   */\n  public getOperationHandler<K extends OperationKey<Ops>>(\n    operationName: K,\n  ): CompiledOperationHandlerFor<Ops> {\n    const entry = this.operationsMap.get(operationName);\n    if (entry == null) {\n      throw new HandlerError(\n        \"NOT_FOUND\",\n        `Operation handler not registered for operation '${operationName}' in service '${this.definition.name}'`,\n      );\n    }\n    return entry;\n  }\n}\n\n/**\n * Constructs a service handler for a given service contract.\n *\n * @experimental\n */\nexport function serviceHandler<Ops extends OperationMap>(\n  service: ServiceDefinition<Ops>,\n  handlers: ServiceHandlerFor<Ops>,\n): ServiceHandler<Ops> {\n  return ServiceHandler.build(service, handlers);\n}\n\n/**\n * A type that defines a handler for a given operation.\n *\n * @experimental\n */\nexport type OperationHandlerFor<T> =\n  T extends OperationDefinition<infer I, infer O>\n    ? OperationHandler<I, O> | SyncOperationHandler<I, O>\n    : never;\n\n/**\n * A type that defines a collection of handlers for a given collection of operation interfaces.\n *\n * @experimental\n */\nexport type ServiceHandlerFor<T extends OperationMap = OperationMap> = {\n  [K in keyof T & string]: OperationHandlerFor<T[K]>;\n};\n","export {\n  type OperationContext,\n  type StartOperationContext,\n  type CancelOperationContext,\n} from \"./operation-context\";\n\nexport {\n  HandlerStartOperationResult,\n  type HandlerStartOperationResultSync,\n  type HandlerStartOperationResultAsync,\n} from \"./start-operation-result\";\n\nexport {\n  //\n  type OperationHandler,\n  type SyncOperationHandler,\n} from \"./operation-handler\";\n\nexport {\n  ServiceHandler,\n  serviceHandler,\n  type OperationHandlerFor,\n  type ServiceHandlerFor,\n} from \"./service-handler\";\n","export * from \"./common\";\nexport * from \"./service\";\nexport * from \"./handler\";\n","// GENERATED FILE. DO NOT EDIT.\n(function (global, factory) {\n  function preferDefault(exports) {\n    return exports.default || exports;\n  }\n  if (typeof define === \"function\" && define.amd) {\n    define([], function () {\n      var exports = {};\n      factory(exports);\n      return preferDefault(exports);\n    });\n  } else if (typeof exports === \"object\") {\n    factory(exports);\n    if (typeof module === \"object\") module.exports = preferDefault(exports);\n  } else {\n    (function () {\n      var exports = {};\n      factory(exports);\n      global.Long = preferDefault(exports);\n    })();\n  }\n})(\n  typeof globalThis !== \"undefined\"\n    ? globalThis\n    : typeof self !== \"undefined\"\n      ? self\n      : this,\n  function (_exports) {\n    \"use strict\";\n\n    Object.defineProperty(_exports, \"__esModule\", {\n      value: true,\n    });\n    _exports.default = void 0;\n    /**\n     * @license\n     * Copyright 2009 The Closure Library Authors\n     * Copyright 2020 Daniel Wirtz / The long.js Authors.\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     * SPDX-License-Identifier: Apache-2.0\n     */\n\n    // WebAssembly optimizations to do native i64 multiplication and divide\n    var wasm = null;\n    try {\n      wasm = new WebAssembly.Instance(\n        new WebAssembly.Module(\n          new Uint8Array([\n            // \\0asm\n            0, 97, 115, 109,\n            // version 1\n            1, 0, 0, 0,\n            // section \"type\"\n            1, 13, 2,\n            // 0, () => i32\n            96, 0, 1, 127,\n            // 1, (i32, i32, i32, i32) => i32\n            96, 4, 127, 127, 127, 127, 1, 127,\n            // section \"function\"\n            3, 7, 6,\n            // 0, type 0\n            0,\n            // 1, type 1\n            1,\n            // 2, type 1\n            1,\n            // 3, type 1\n            1,\n            // 4, type 1\n            1,\n            // 5, type 1\n            1,\n            // section \"global\"\n            6, 6, 1,\n            // 0, \"high\", mutable i32\n            127, 1, 65, 0, 11,\n            // section \"export\"\n            7, 50, 6,\n            // 0, \"mul\"\n            3, 109, 117, 108, 0, 1,\n            // 1, \"div_s\"\n            5, 100, 105, 118, 95, 115, 0, 2,\n            // 2, \"div_u\"\n            5, 100, 105, 118, 95, 117, 0, 3,\n            // 3, \"rem_s\"\n            5, 114, 101, 109, 95, 115, 0, 4,\n            // 4, \"rem_u\"\n            5, 114, 101, 109, 95, 117, 0, 5,\n            // 5, \"get_high\"\n            8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0,\n            // section \"code\"\n            10, 191, 1, 6,\n            // 0, \"get_high\"\n            4, 0, 35, 0, 11,\n            // 1, \"mul\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 2, \"div_s\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 3, \"div_u\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 4, \"rem_s\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 5, \"rem_u\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n          ]),\n        ),\n        {},\n      ).exports;\n    } catch {\n      // no wasm support :(\n    }\n\n    /**\n     * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\n     *  See the from* functions below for more convenient ways of constructing Longs.\n     * @exports Long\n     * @class A Long class for representing a 64 bit two's-complement integer value.\n     * @param {number} low The low (signed) 32 bits of the long\n     * @param {number} high The high (signed) 32 bits of the long\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @constructor\n     */\n    function Long(low, high, unsigned) {\n      /**\n       * The low 32 bits as a signed value.\n       * @type {number}\n       */\n      this.low = low | 0;\n\n      /**\n       * The high 32 bits as a signed value.\n       * @type {number}\n       */\n      this.high = high | 0;\n\n      /**\n       * Whether unsigned or not.\n       * @type {boolean}\n       */\n      this.unsigned = !!unsigned;\n    }\n\n    // The internal representation of a long is the two given signed, 32-bit values.\n    // We use 32-bit pieces because these are the size of integers on which\n    // Javascript performs bit-operations.  For operations like addition and\n    // multiplication, we split each number into 16 bit pieces, which can easily be\n    // multiplied within Javascript's floating-point representation without overflow\n    // or change in sign.\n    //\n    // In the algorithms below, we frequently reduce the negative case to the\n    // positive case by negating the input(s) and then post-processing the result.\n    // Note that we must ALWAYS check specially whether those values are MIN_VALUE\n    // (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\n    // a positive number, it overflows back into a negative).  Not handling this\n    // case would often result in infinite recursion.\n    //\n    // Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\n    // methods on which they depend.\n\n    /**\n     * An indicator used to reliably determine if an object is a Long or not.\n     * @type {boolean}\n     * @const\n     * @private\n     */\n    Long.prototype.__isLong__;\n    Object.defineProperty(Long.prototype, \"__isLong__\", {\n      value: true,\n    });\n\n    /**\n     * @function\n     * @param {*} obj Object\n     * @returns {boolean}\n     * @inner\n     */\n    function isLong(obj) {\n      return (obj && obj[\"__isLong__\"]) === true;\n    }\n\n    /**\n     * @function\n     * @param {*} value number\n     * @returns {number}\n     * @inner\n     */\n    function ctz32(value) {\n      var c = Math.clz32(value & -value);\n      return value ? 31 - c : c;\n    }\n\n    /**\n     * Tests if the specified object is a Long.\n     * @function\n     * @param {*} obj Object\n     * @returns {boolean}\n     */\n    Long.isLong = isLong;\n\n    /**\n     * A cache of the Long representations of small integer values.\n     * @type {!Object}\n     * @inner\n     */\n    var INT_CACHE = {};\n\n    /**\n     * A cache of the Long representations of small unsigned integer values.\n     * @type {!Object}\n     * @inner\n     */\n    var UINT_CACHE = {};\n\n    /**\n     * @param {number} value\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromInt(value, unsigned) {\n      var obj, cachedObj, cache;\n      if (unsigned) {\n        value >>>= 0;\n        if ((cache = 0 <= value && value < 256)) {\n          cachedObj = UINT_CACHE[value];\n          if (cachedObj) return cachedObj;\n        }\n        obj = fromBits(value, 0, true);\n        if (cache) UINT_CACHE[value] = obj;\n        return obj;\n      } else {\n        value |= 0;\n        if ((cache = -128 <= value && value < 128)) {\n          cachedObj = INT_CACHE[value];\n          if (cachedObj) return cachedObj;\n        }\n        obj = fromBits(value, value < 0 ? -1 : 0, false);\n        if (cache) INT_CACHE[value] = obj;\n        return obj;\n      }\n    }\n\n    /**\n     * Returns a Long representing the given 32 bit integer value.\n     * @function\n     * @param {number} value The 32 bit integer in question\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromInt = fromInt;\n\n    /**\n     * @param {number} value\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromNumber(value, unsigned) {\n      if (isNaN(value)) return unsigned ? UZERO : ZERO;\n      if (unsigned) {\n        if (value < 0) return UZERO;\n        if (value >= TWO_PWR_64_DBL) return MAX_UNSIGNED_VALUE;\n      } else {\n        if (value <= -TWO_PWR_63_DBL) return MIN_VALUE;\n        if (value + 1 >= TWO_PWR_63_DBL) return MAX_VALUE;\n      }\n      if (value < 0) return fromNumber(-value, unsigned).neg();\n      return fromBits(\n        value % TWO_PWR_32_DBL | 0,\n        (value / TWO_PWR_32_DBL) | 0,\n        unsigned,\n      );\n    }\n\n    /**\n     * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\n     * @function\n     * @param {number} value The number in question\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromNumber = fromNumber;\n\n    /**\n     * @param {number} lowBits\n     * @param {number} highBits\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromBits(lowBits, highBits, unsigned) {\n      return new Long(lowBits, highBits, unsigned);\n    }\n\n    /**\n     * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\n     *  assumed to use 32 bits.\n     * @function\n     * @param {number} lowBits The low 32 bits\n     * @param {number} highBits The high 32 bits\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromBits = fromBits;\n\n    /**\n     * @function\n     * @param {number} base\n     * @param {number} exponent\n     * @returns {number}\n     * @inner\n     */\n    var pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\n\n    /**\n     * @param {string} str\n     * @param {(boolean|number)=} unsigned\n     * @param {number=} radix\n     * @returns {!Long}\n     * @inner\n     */\n    function fromString(str, unsigned, radix) {\n      if (str.length === 0) throw Error(\"empty string\");\n      if (typeof unsigned === \"number\") {\n        // For goog.math.long compatibility\n        radix = unsigned;\n        unsigned = false;\n      } else {\n        unsigned = !!unsigned;\n      }\n      if (\n        str === \"NaN\" ||\n        str === \"Infinity\" ||\n        str === \"+Infinity\" ||\n        str === \"-Infinity\"\n      )\n        return unsigned ? UZERO : ZERO;\n      radix = radix || 10;\n      if (radix < 2 || 36 < radix) throw RangeError(\"radix\");\n      var p;\n      if ((p = str.indexOf(\"-\")) > 0) throw Error(\"interior hyphen\");\n      else if (p === 0) {\n        return fromString(str.substring(1), unsigned, radix).neg();\n      }\n\n      // Do several (8) digits each time through the loop, so as to\n      // minimize the calls to the very expensive emulated div.\n      var radixToPower = fromNumber(pow_dbl(radix, 8));\n      var result = ZERO;\n      for (var i = 0; i < str.length; i += 8) {\n        var size = Math.min(8, str.length - i),\n          value = parseInt(str.substring(i, i + size), radix);\n        if (size < 8) {\n          var power = fromNumber(pow_dbl(radix, size));\n          result = result.mul(power).add(fromNumber(value));\n        } else {\n          result = result.mul(radixToPower);\n          result = result.add(fromNumber(value));\n        }\n      }\n      result.unsigned = unsigned;\n      return result;\n    }\n\n    /**\n     * Returns a Long representation of the given string, written using the specified radix.\n     * @function\n     * @param {string} str The textual representation of the Long\n     * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\n     * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromString = fromString;\n\n    /**\n     * @function\n     * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromValue(val, unsigned) {\n      if (typeof val === \"number\") return fromNumber(val, unsigned);\n      if (typeof val === \"string\") return fromString(val, unsigned);\n      // Throws for non-objects, converts non-instanceof Long:\n      return fromBits(\n        val.low,\n        val.high,\n        typeof unsigned === \"boolean\" ? unsigned : val.unsigned,\n      );\n    }\n\n    /**\n     * Converts the specified value to a Long using the appropriate from* function for its type.\n     * @function\n     * @param {!Long|number|bigint|string|!{low: number, high: number, unsigned: boolean}} val Value\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long}\n     */\n    Long.fromValue = fromValue;\n\n    // NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\n    // no runtime penalty for these.\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_16_DBL = 1 << 16;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_24_DBL = 1 << 24;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\n\n    /**\n     * @type {!Long}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var ZERO = fromInt(0);\n\n    /**\n     * Signed zero.\n     * @type {!Long}\n     */\n    Long.ZERO = ZERO;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var UZERO = fromInt(0, true);\n\n    /**\n     * Unsigned zero.\n     * @type {!Long}\n     */\n    Long.UZERO = UZERO;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var ONE = fromInt(1);\n\n    /**\n     * Signed one.\n     * @type {!Long}\n     */\n    Long.ONE = ONE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var UONE = fromInt(1, true);\n\n    /**\n     * Unsigned one.\n     * @type {!Long}\n     */\n    Long.UONE = UONE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var NEG_ONE = fromInt(-1);\n\n    /**\n     * Signed negative one.\n     * @type {!Long}\n     */\n    Long.NEG_ONE = NEG_ONE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var MAX_VALUE = fromBits(0xffffffff | 0, 0x7fffffff | 0, false);\n\n    /**\n     * Maximum signed value.\n     * @type {!Long}\n     */\n    Long.MAX_VALUE = MAX_VALUE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var MAX_UNSIGNED_VALUE = fromBits(0xffffffff | 0, 0xffffffff | 0, true);\n\n    /**\n     * Maximum unsigned value.\n     * @type {!Long}\n     */\n    Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var MIN_VALUE = fromBits(0, 0x80000000 | 0, false);\n\n    /**\n     * Minimum signed value.\n     * @type {!Long}\n     */\n    Long.MIN_VALUE = MIN_VALUE;\n\n    /**\n     * @alias Long.prototype\n     * @inner\n     */\n    var LongPrototype = Long.prototype;\n\n    /**\n     * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\n     * @this {!Long}\n     * @returns {number}\n     */\n    LongPrototype.toInt = function toInt() {\n      return this.unsigned ? this.low >>> 0 : this.low;\n    };\n\n    /**\n     * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\n     * @this {!Long}\n     * @returns {number}\n     */\n    LongPrototype.toNumber = function toNumber() {\n      if (this.unsigned)\n        return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0);\n      return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\n    };\n\n    /**\n     * Converts the Long to a string written in the specified radix.\n     * @this {!Long}\n     * @param {number=} radix Radix (2-36), defaults to 10\n     * @returns {string}\n     * @override\n     * @throws {RangeError} If `radix` is out of range\n     */\n    LongPrototype.toString = function toString(radix) {\n      radix = radix || 10;\n      if (radix < 2 || 36 < radix) throw RangeError(\"radix\");\n      if (this.isZero()) return \"0\";\n      if (this.isNegative()) {\n        // Unsigned Longs are never negative\n        if (this.eq(MIN_VALUE)) {\n          // We need to change the Long value before it can be negated, so we remove\n          // the bottom-most digit in this base and then recurse to do the rest.\n          var radixLong = fromNumber(radix),\n            div = this.div(radixLong),\n            rem1 = div.mul(radixLong).sub(this);\n          return div.toString(radix) + rem1.toInt().toString(radix);\n        } else return \"-\" + this.neg().toString(radix);\n      }\n\n      // Do several (6) digits each time through the loop, so as to\n      // minimize the calls to the very expensive emulated div.\n      var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\n        rem = this;\n      var result = \"\";\n      while (true) {\n        var remDiv = rem.div(radixToPower),\n          intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\n          digits = intval.toString(radix);\n        rem = remDiv;\n        if (rem.isZero()) return digits + result;\n        else {\n          while (digits.length < 6) digits = \"0\" + digits;\n          result = \"\" + digits + result;\n        }\n      }\n    };\n\n    /**\n     * Gets the high 32 bits as a signed integer.\n     * @this {!Long}\n     * @returns {number} Signed high bits\n     */\n    LongPrototype.getHighBits = function getHighBits() {\n      return this.high;\n    };\n\n    /**\n     * Gets the high 32 bits as an unsigned integer.\n     * @this {!Long}\n     * @returns {number} Unsigned high bits\n     */\n    LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\n      return this.high >>> 0;\n    };\n\n    /**\n     * Gets the low 32 bits as a signed integer.\n     * @this {!Long}\n     * @returns {number} Signed low bits\n     */\n    LongPrototype.getLowBits = function getLowBits() {\n      return this.low;\n    };\n\n    /**\n     * Gets the low 32 bits as an unsigned integer.\n     * @this {!Long}\n     * @returns {number} Unsigned low bits\n     */\n    LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\n      return this.low >>> 0;\n    };\n\n    /**\n     * Gets the number of bits needed to represent the absolute value of this Long.\n     * @this {!Long}\n     * @returns {number}\n     */\n    LongPrototype.getNumBitsAbs = function getNumBitsAbs() {\n      if (this.isNegative())\n        // Unsigned Longs are never negative\n        return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\n      var val = this.high != 0 ? this.high : this.low;\n      for (var bit = 31; bit > 0; bit--) if ((val & (1 << bit)) != 0) break;\n      return this.high != 0 ? bit + 33 : bit + 1;\n    };\n\n    /**\n     * Tests if this Long can be safely represented as a JavaScript number.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isSafeInteger = function isSafeInteger() {\n      // 2^53-1 is the maximum safe value\n      var top11Bits = this.high >> 21;\n      // [0, 2^53-1]\n      if (!top11Bits) return true;\n      // > 2^53-1\n      if (this.unsigned) return false;\n      // [-2^53, -1] except -2^53\n      return top11Bits === -1 && !(this.low === 0 && this.high === -0x200000);\n    };\n\n    /**\n     * Tests if this Long's value equals zero.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isZero = function isZero() {\n      return this.high === 0 && this.low === 0;\n    };\n\n    /**\n     * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\n     * @returns {boolean}\n     */\n    LongPrototype.eqz = LongPrototype.isZero;\n\n    /**\n     * Tests if this Long's value is negative.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isNegative = function isNegative() {\n      return !this.unsigned && this.high < 0;\n    };\n\n    /**\n     * Tests if this Long's value is positive or zero.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isPositive = function isPositive() {\n      return this.unsigned || this.high >= 0;\n    };\n\n    /**\n     * Tests if this Long's value is odd.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isOdd = function isOdd() {\n      return (this.low & 1) === 1;\n    };\n\n    /**\n     * Tests if this Long's value is even.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isEven = function isEven() {\n      return (this.low & 1) === 0;\n    };\n\n    /**\n     * Tests if this Long's value equals the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.equals = function equals(other) {\n      if (!isLong(other)) other = fromValue(other);\n      if (\n        this.unsigned !== other.unsigned &&\n        this.high >>> 31 === 1 &&\n        other.high >>> 31 === 1\n      )\n        return false;\n      return this.high === other.high && this.low === other.low;\n    };\n\n    /**\n     * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.eq = LongPrototype.equals;\n\n    /**\n     * Tests if this Long's value differs from the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.notEquals = function notEquals(other) {\n      return !this.eq(/* validates */ other);\n    };\n\n    /**\n     * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.neq = LongPrototype.notEquals;\n\n    /**\n     * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.ne = LongPrototype.notEquals;\n\n    /**\n     * Tests if this Long's value is less than the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lessThan = function lessThan(other) {\n      return this.comp(/* validates */ other) < 0;\n    };\n\n    /**\n     * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lt = LongPrototype.lessThan;\n\n    /**\n     * Tests if this Long's value is less than or equal the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\n      return this.comp(/* validates */ other) <= 0;\n    };\n\n    /**\n     * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lte = LongPrototype.lessThanOrEqual;\n\n    /**\n     * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.le = LongPrototype.lessThanOrEqual;\n\n    /**\n     * Tests if this Long's value is greater than the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.greaterThan = function greaterThan(other) {\n      return this.comp(/* validates */ other) > 0;\n    };\n\n    /**\n     * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.gt = LongPrototype.greaterThan;\n\n    /**\n     * Tests if this Long's value is greater than or equal the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\n      return this.comp(/* validates */ other) >= 0;\n    };\n\n    /**\n     * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.gte = LongPrototype.greaterThanOrEqual;\n\n    /**\n     * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.ge = LongPrototype.greaterThanOrEqual;\n\n    /**\n     * Compares this Long's value with the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {number} 0 if they are the same, 1 if the this is greater and -1\n     *  if the given one is greater\n     */\n    LongPrototype.compare = function compare(other) {\n      if (!isLong(other)) other = fromValue(other);\n      if (this.eq(other)) return 0;\n      var thisNeg = this.isNegative(),\n        otherNeg = other.isNegative();\n      if (thisNeg && !otherNeg) return -1;\n      if (!thisNeg && otherNeg) return 1;\n      // At this point the sign bits are the same\n      if (!this.unsigned) return this.sub(other).isNegative() ? -1 : 1;\n      // Both are positive if at least one is unsigned\n      return other.high >>> 0 > this.high >>> 0 ||\n        (other.high === this.high && other.low >>> 0 > this.low >>> 0)\n        ? -1\n        : 1;\n    };\n\n    /**\n     * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {number} 0 if they are the same, 1 if the this is greater and -1\n     *  if the given one is greater\n     */\n    LongPrototype.comp = LongPrototype.compare;\n\n    /**\n     * Negates this Long's value.\n     * @this {!Long}\n     * @returns {!Long} Negated Long\n     */\n    LongPrototype.negate = function negate() {\n      if (!this.unsigned && this.eq(MIN_VALUE)) return MIN_VALUE;\n      return this.not().add(ONE);\n    };\n\n    /**\n     * Negates this Long's value. This is an alias of {@link Long#negate}.\n     * @function\n     * @returns {!Long} Negated Long\n     */\n    LongPrototype.neg = LongPrototype.negate;\n\n    /**\n     * Returns the sum of this and the specified Long.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} addend Addend\n     * @returns {!Long} Sum\n     */\n    LongPrototype.add = function add(addend) {\n      if (!isLong(addend)) addend = fromValue(addend);\n\n      // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\n\n      var a48 = this.high >>> 16;\n      var a32 = this.high & 0xffff;\n      var a16 = this.low >>> 16;\n      var a00 = this.low & 0xffff;\n      var b48 = addend.high >>> 16;\n      var b32 = addend.high & 0xffff;\n      var b16 = addend.low >>> 16;\n      var b00 = addend.low & 0xffff;\n      var c48 = 0,\n        c32 = 0,\n        c16 = 0,\n        c00 = 0;\n      c00 += a00 + b00;\n      c16 += c00 >>> 16;\n      c00 &= 0xffff;\n      c16 += a16 + b16;\n      c32 += c16 >>> 16;\n      c16 &= 0xffff;\n      c32 += a32 + b32;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c48 += a48 + b48;\n      c48 &= 0xffff;\n      return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\n    };\n\n    /**\n     * Returns the difference of this and the specified Long.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} subtrahend Subtrahend\n     * @returns {!Long} Difference\n     */\n    LongPrototype.subtract = function subtract(subtrahend) {\n      if (!isLong(subtrahend)) subtrahend = fromValue(subtrahend);\n      return this.add(subtrahend.neg());\n    };\n\n    /**\n     * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\n     * @function\n     * @param {!Long|number|bigint|string} subtrahend Subtrahend\n     * @returns {!Long} Difference\n     */\n    LongPrototype.sub = LongPrototype.subtract;\n\n    /**\n     * Returns the product of this and the specified Long.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} multiplier Multiplier\n     * @returns {!Long} Product\n     */\n    LongPrototype.multiply = function multiply(multiplier) {\n      if (this.isZero()) return this;\n      if (!isLong(multiplier)) multiplier = fromValue(multiplier);\n\n      // use wasm support if present\n      if (wasm) {\n        var low = wasm[\"mul\"](\n          this.low,\n          this.high,\n          multiplier.low,\n          multiplier.high,\n        );\n        return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n      }\n      if (multiplier.isZero()) return this.unsigned ? UZERO : ZERO;\n      if (this.eq(MIN_VALUE)) return multiplier.isOdd() ? MIN_VALUE : ZERO;\n      if (multiplier.eq(MIN_VALUE)) return this.isOdd() ? MIN_VALUE : ZERO;\n      if (this.isNegative()) {\n        if (multiplier.isNegative()) return this.neg().mul(multiplier.neg());\n        else return this.neg().mul(multiplier).neg();\n      } else if (multiplier.isNegative())\n        return this.mul(multiplier.neg()).neg();\n\n      // If both longs are small, use float multiplication\n      if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\n        return fromNumber(\n          this.toNumber() * multiplier.toNumber(),\n          this.unsigned,\n        );\n\n      // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\n      // We can skip products that would overflow.\n\n      var a48 = this.high >>> 16;\n      var a32 = this.high & 0xffff;\n      var a16 = this.low >>> 16;\n      var a00 = this.low & 0xffff;\n      var b48 = multiplier.high >>> 16;\n      var b32 = multiplier.high & 0xffff;\n      var b16 = multiplier.low >>> 16;\n      var b00 = multiplier.low & 0xffff;\n      var c48 = 0,\n        c32 = 0,\n        c16 = 0,\n        c00 = 0;\n      c00 += a00 * b00;\n      c16 += c00 >>> 16;\n      c00 &= 0xffff;\n      c16 += a16 * b00;\n      c32 += c16 >>> 16;\n      c16 &= 0xffff;\n      c16 += a00 * b16;\n      c32 += c16 >>> 16;\n      c16 &= 0xffff;\n      c32 += a32 * b00;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c32 += a16 * b16;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c32 += a00 * b32;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\n      c48 &= 0xffff;\n      return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\n    };\n\n    /**\n     * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\n     * @function\n     * @param {!Long|number|bigint|string} multiplier Multiplier\n     * @returns {!Long} Product\n     */\n    LongPrototype.mul = LongPrototype.multiply;\n\n    /**\n     * Returns this Long divided by the specified. The result is signed if this Long is signed or\n     *  unsigned if this Long is unsigned.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Quotient\n     */\n    LongPrototype.divide = function divide(divisor) {\n      if (!isLong(divisor)) divisor = fromValue(divisor);\n      if (divisor.isZero()) throw Error(\"division by zero\");\n\n      // use wasm support if present\n      if (wasm) {\n        // guard against signed division overflow: the largest\n        // negative number / -1 would be 1 larger than the largest\n        // positive number, due to two's complement.\n        if (\n          !this.unsigned &&\n          this.high === -0x80000000 &&\n          divisor.low === -1 &&\n          divisor.high === -1\n        ) {\n          // be consistent with non-wasm code path\n          return this;\n        }\n        var low = (this.unsigned ? wasm[\"div_u\"] : wasm[\"div_s\"])(\n          this.low,\n          this.high,\n          divisor.low,\n          divisor.high,\n        );\n        return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n      }\n      if (this.isZero()) return this.unsigned ? UZERO : ZERO;\n      var approx, rem, res;\n      if (!this.unsigned) {\n        // This section is only relevant for signed longs and is derived from the\n        // closure library as a whole.\n        if (this.eq(MIN_VALUE)) {\n          if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\n            return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\n          else if (divisor.eq(MIN_VALUE)) return ONE;\n          else {\n            // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\n            var halfThis = this.shr(1);\n            approx = halfThis.div(divisor).shl(1);\n            if (approx.eq(ZERO)) {\n              return divisor.isNegative() ? ONE : NEG_ONE;\n            } else {\n              rem = this.sub(divisor.mul(approx));\n              res = approx.add(rem.div(divisor));\n              return res;\n            }\n          }\n        } else if (divisor.eq(MIN_VALUE)) return this.unsigned ? UZERO : ZERO;\n        if (this.isNegative()) {\n          if (divisor.isNegative()) return this.neg().div(divisor.neg());\n          return this.neg().div(divisor).neg();\n        } else if (divisor.isNegative()) return this.div(divisor.neg()).neg();\n        res = ZERO;\n      } else {\n        // The algorithm below has not been made for unsigned longs. It's therefore\n        // required to take special care of the MSB prior to running it.\n        if (!divisor.unsigned) divisor = divisor.toUnsigned();\n        if (divisor.gt(this)) return UZERO;\n        if (divisor.gt(this.shru(1)))\n          // 15 >>> 1 = 7 ; with divisor = 8 ; true\n          return UONE;\n        res = UZERO;\n      }\n\n      // Repeat the following until the remainder is less than other:  find a\n      // floating-point that approximates remainder / other *from below*, add this\n      // into the result, and subtract it from the remainder.  It is critical that\n      // the approximate value is less than or equal to the real value so that the\n      // remainder never becomes negative.\n      rem = this;\n      while (rem.gte(divisor)) {\n        // Approximate the result of division. This may be a little greater or\n        // smaller than the actual value.\n        approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\n\n        // We will tweak the approximate result by changing it in the 48-th digit or\n        // the smallest non-fractional digit, whichever is larger.\n        var log2 = Math.ceil(Math.log(approx) / Math.LN2),\n          delta = log2 <= 48 ? 1 : pow_dbl(2, log2 - 48),\n          // Decrease the approximation until it is smaller than the remainder.  Note\n          // that if it is too large, the product overflows and is negative.\n          approxRes = fromNumber(approx),\n          approxRem = approxRes.mul(divisor);\n        while (approxRem.isNegative() || approxRem.gt(rem)) {\n          approx -= delta;\n          approxRes = fromNumber(approx, this.unsigned);\n          approxRem = approxRes.mul(divisor);\n        }\n\n        // We know the answer can't be zero... and actually, zero would cause\n        // infinite recursion since we would make no progress.\n        if (approxRes.isZero()) approxRes = ONE;\n        res = res.add(approxRes);\n        rem = rem.sub(approxRem);\n      }\n      return res;\n    };\n\n    /**\n     * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\n     * @function\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Quotient\n     */\n    LongPrototype.div = LongPrototype.divide;\n\n    /**\n     * Returns this Long modulo the specified.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Remainder\n     */\n    LongPrototype.modulo = function modulo(divisor) {\n      if (!isLong(divisor)) divisor = fromValue(divisor);\n\n      // use wasm support if present\n      if (wasm) {\n        var low = (this.unsigned ? wasm[\"rem_u\"] : wasm[\"rem_s\"])(\n          this.low,\n          this.high,\n          divisor.low,\n          divisor.high,\n        );\n        return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n      }\n      return this.sub(this.div(divisor).mul(divisor));\n    };\n\n    /**\n     * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n     * @function\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Remainder\n     */\n    LongPrototype.mod = LongPrototype.modulo;\n\n    /**\n     * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n     * @function\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Remainder\n     */\n    LongPrototype.rem = LongPrototype.modulo;\n\n    /**\n     * Returns the bitwise NOT of this Long.\n     * @this {!Long}\n     * @returns {!Long}\n     */\n    LongPrototype.not = function not() {\n      return fromBits(~this.low, ~this.high, this.unsigned);\n    };\n\n    /**\n     * Returns count leading zeros of this Long.\n     * @this {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.countLeadingZeros = function countLeadingZeros() {\n      return this.high ? Math.clz32(this.high) : Math.clz32(this.low) + 32;\n    };\n\n    /**\n     * Returns count leading zeros. This is an alias of {@link Long#countLeadingZeros}.\n     * @function\n     * @param {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.clz = LongPrototype.countLeadingZeros;\n\n    /**\n     * Returns count trailing zeros of this Long.\n     * @this {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.countTrailingZeros = function countTrailingZeros() {\n      return this.low ? ctz32(this.low) : ctz32(this.high) + 32;\n    };\n\n    /**\n     * Returns count trailing zeros. This is an alias of {@link Long#countTrailingZeros}.\n     * @function\n     * @param {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.ctz = LongPrototype.countTrailingZeros;\n\n    /**\n     * Returns the bitwise AND of this Long and the specified.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other Long\n     * @returns {!Long}\n     */\n    LongPrototype.and = function and(other) {\n      if (!isLong(other)) other = fromValue(other);\n      return fromBits(\n        this.low & other.low,\n        this.high & other.high,\n        this.unsigned,\n      );\n    };\n\n    /**\n     * Returns the bitwise OR of this Long and the specified.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other Long\n     * @returns {!Long}\n     */\n    LongPrototype.or = function or(other) {\n      if (!isLong(other)) other = fromValue(other);\n      return fromBits(\n        this.low | other.low,\n        this.high | other.high,\n        this.unsigned,\n      );\n    };\n\n    /**\n     * Returns the bitwise XOR of this Long and the given one.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other Long\n     * @returns {!Long}\n     */\n    LongPrototype.xor = function xor(other) {\n      if (!isLong(other)) other = fromValue(other);\n      return fromBits(\n        this.low ^ other.low,\n        this.high ^ other.high,\n        this.unsigned,\n      );\n    };\n\n    /**\n     * Returns this Long with bits shifted to the left by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shiftLeft = function shiftLeft(numBits) {\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      else if (numBits < 32)\n        return fromBits(\n          this.low << numBits,\n          (this.high << numBits) | (this.low >>> (32 - numBits)),\n          this.unsigned,\n        );\n      else return fromBits(0, this.low << (numBits - 32), this.unsigned);\n    };\n\n    /**\n     * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shl = LongPrototype.shiftLeft;\n\n    /**\n     * Returns this Long with bits arithmetically shifted to the right by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shiftRight = function shiftRight(numBits) {\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      else if (numBits < 32)\n        return fromBits(\n          (this.low >>> numBits) | (this.high << (32 - numBits)),\n          this.high >> numBits,\n          this.unsigned,\n        );\n      else\n        return fromBits(\n          this.high >> (numBits - 32),\n          this.high >= 0 ? 0 : -1,\n          this.unsigned,\n        );\n    };\n\n    /**\n     * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shr = LongPrototype.shiftRight;\n\n    /**\n     * Returns this Long with bits logically shifted to the right by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      if (numBits < 32)\n        return fromBits(\n          (this.low >>> numBits) | (this.high << (32 - numBits)),\n          this.high >>> numBits,\n          this.unsigned,\n        );\n      if (numBits === 32) return fromBits(this.high, 0, this.unsigned);\n      return fromBits(this.high >>> (numBits - 32), 0, this.unsigned);\n    };\n\n    /**\n     * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shru = LongPrototype.shiftRightUnsigned;\n\n    /**\n     * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\n\n    /**\n     * Returns this Long with bits rotated to the left by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotateLeft = function rotateLeft(numBits) {\n      var b;\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);\n      if (numBits < 32) {\n        b = 32 - numBits;\n        return fromBits(\n          (this.low << numBits) | (this.high >>> b),\n          (this.high << numBits) | (this.low >>> b),\n          this.unsigned,\n        );\n      }\n      numBits -= 32;\n      b = 32 - numBits;\n      return fromBits(\n        (this.high << numBits) | (this.low >>> b),\n        (this.low << numBits) | (this.high >>> b),\n        this.unsigned,\n      );\n    };\n    /**\n     * Returns this Long with bits rotated to the left by the given amount. This is an alias of {@link Long#rotateLeft}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotl = LongPrototype.rotateLeft;\n\n    /**\n     * Returns this Long with bits rotated to the right by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotateRight = function rotateRight(numBits) {\n      var b;\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);\n      if (numBits < 32) {\n        b = 32 - numBits;\n        return fromBits(\n          (this.high << b) | (this.low >>> numBits),\n          (this.low << b) | (this.high >>> numBits),\n          this.unsigned,\n        );\n      }\n      numBits -= 32;\n      b = 32 - numBits;\n      return fromBits(\n        (this.low << b) | (this.high >>> numBits),\n        (this.high << b) | (this.low >>> numBits),\n        this.unsigned,\n      );\n    };\n    /**\n     * Returns this Long with bits rotated to the right by the given amount. This is an alias of {@link Long#rotateRight}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotr = LongPrototype.rotateRight;\n\n    /**\n     * Converts this Long to signed.\n     * @this {!Long}\n     * @returns {!Long} Signed long\n     */\n    LongPrototype.toSigned = function toSigned() {\n      if (!this.unsigned) return this;\n      return fromBits(this.low, this.high, false);\n    };\n\n    /**\n     * Converts this Long to unsigned.\n     * @this {!Long}\n     * @returns {!Long} Unsigned long\n     */\n    LongPrototype.toUnsigned = function toUnsigned() {\n      if (this.unsigned) return this;\n      return fromBits(this.low, this.high, true);\n    };\n\n    /**\n     * Converts this Long to its byte representation.\n     * @param {boolean=} le Whether little or big endian, defaults to big endian\n     * @this {!Long}\n     * @returns {!Array.<number>} Byte representation\n     */\n    LongPrototype.toBytes = function toBytes(le) {\n      return le ? this.toBytesLE() : this.toBytesBE();\n    };\n\n    /**\n     * Converts this Long to its little endian byte representation.\n     * @this {!Long}\n     * @returns {!Array.<number>} Little endian byte representation\n     */\n    LongPrototype.toBytesLE = function toBytesLE() {\n      var hi = this.high,\n        lo = this.low;\n      return [\n        lo & 0xff,\n        (lo >>> 8) & 0xff,\n        (lo >>> 16) & 0xff,\n        lo >>> 24,\n        hi & 0xff,\n        (hi >>> 8) & 0xff,\n        (hi >>> 16) & 0xff,\n        hi >>> 24,\n      ];\n    };\n\n    /**\n     * Converts this Long to its big endian byte representation.\n     * @this {!Long}\n     * @returns {!Array.<number>} Big endian byte representation\n     */\n    LongPrototype.toBytesBE = function toBytesBE() {\n      var hi = this.high,\n        lo = this.low;\n      return [\n        hi >>> 24,\n        (hi >>> 16) & 0xff,\n        (hi >>> 8) & 0xff,\n        hi & 0xff,\n        lo >>> 24,\n        (lo >>> 16) & 0xff,\n        (lo >>> 8) & 0xff,\n        lo & 0xff,\n      ];\n    };\n\n    /**\n     * Creates a Long from its byte representation.\n     * @param {!Array.<number>} bytes Byte representation\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @param {boolean=} le Whether little or big endian, defaults to big endian\n     * @returns {Long} The corresponding Long value\n     */\n    Long.fromBytes = function fromBytes(bytes, unsigned, le) {\n      return le\n        ? Long.fromBytesLE(bytes, unsigned)\n        : Long.fromBytesBE(bytes, unsigned);\n    };\n\n    /**\n     * Creates a Long from its little endian byte representation.\n     * @param {!Array.<number>} bytes Little endian byte representation\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {Long} The corresponding Long value\n     */\n    Long.fromBytesLE = function fromBytesLE(bytes, unsigned) {\n      return new Long(\n        bytes[0] | (bytes[1] << 8) | (bytes[2] << 16) | (bytes[3] << 24),\n        bytes[4] | (bytes[5] << 8) | (bytes[6] << 16) | (bytes[7] << 24),\n        unsigned,\n      );\n    };\n\n    /**\n     * Creates a Long from its big endian byte representation.\n     * @param {!Array.<number>} bytes Big endian byte representation\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {Long} The corresponding Long value\n     */\n    Long.fromBytesBE = function fromBytesBE(bytes, unsigned) {\n      return new Long(\n        (bytes[4] << 24) | (bytes[5] << 16) | (bytes[6] << 8) | bytes[7],\n        (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3],\n        unsigned,\n      );\n    };\n\n    // Support conversion to/from BigInt where available\n    if (typeof BigInt === \"function\") {\n      /**\n       * Returns a Long representing the given big integer.\n       * @function\n       * @param {number} value The big integer value\n       * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n       * @returns {!Long} The corresponding Long value\n       */\n      Long.fromBigInt = function fromBigInt(value, unsigned) {\n        var lowBits = Number(BigInt.asIntN(32, value));\n        var highBits = Number(BigInt.asIntN(32, value >> BigInt(32)));\n        return fromBits(lowBits, highBits, unsigned);\n      };\n\n      // Override\n      Long.fromValue = function fromValueWithBigInt(value, unsigned) {\n        if (typeof value === \"bigint\") return Long.fromBigInt(value, unsigned);\n        return fromValue(value, unsigned);\n      };\n\n      /**\n       * Converts the Long to its big integer representation.\n       * @this {!Long}\n       * @returns {bigint}\n       */\n      LongPrototype.toBigInt = function toBigInt() {\n        var lowBigInt = BigInt(this.low >>> 0);\n        var highBigInt = BigInt(this.unsigned ? this.high >>> 0 : this.high);\n        return (highBigInt << BigInt(32)) | lowBigInt;\n      };\n    }\n    var _default = (_exports.default = Long);\n  },\n);\n","import type { temporal } from '@temporalio/proto';\nimport { errorMessage, isRecord, SymbolBasedInstanceOfError } from './type-helpers';\nimport type { Duration } from './time';\nimport { makeProtoEnumConverters } from './internal-workflow';\n\nexport const FAILURE_SOURCE = 'TypeScriptSDK';\nexport type ProtoFailure = temporal.api.failure.v1.IFailure;\n\nexport const TimeoutType = {\n  START_TO_CLOSE: 'START_TO_CLOSE',\n  SCHEDULE_TO_START: 'SCHEDULE_TO_START',\n  SCHEDULE_TO_CLOSE: 'SCHEDULE_TO_CLOSE',\n  HEARTBEAT: 'HEARTBEAT',\n\n  /** @deprecated Use {@link START_TO_CLOSE} instead. */\n  TIMEOUT_TYPE_START_TO_CLOSE: 'START_TO_CLOSE',\n\n  /** @deprecated Use {@link SCHEDULE_TO_START} instead. */\n  TIMEOUT_TYPE_SCHEDULE_TO_START: 'SCHEDULE_TO_START',\n\n  /** @deprecated Use {@link SCHEDULE_TO_CLOSE} instead. */\n  TIMEOUT_TYPE_SCHEDULE_TO_CLOSE: 'SCHEDULE_TO_CLOSE',\n\n  /** @deprecated Use {@link HEARTBEAT} instead. */\n  TIMEOUT_TYPE_HEARTBEAT: 'HEARTBEAT',\n\n  /** @deprecated Use `undefined` instead. */\n  TIMEOUT_TYPE_UNSPECIFIED: undefined,\n} as const;\nexport type TimeoutType = (typeof TimeoutType)[keyof typeof TimeoutType];\n\nexport const [encodeTimeoutType, decodeTimeoutType] = makeProtoEnumConverters<\n  temporal.api.enums.v1.TimeoutType,\n  typeof temporal.api.enums.v1.TimeoutType,\n  keyof typeof temporal.api.enums.v1.TimeoutType,\n  typeof TimeoutType,\n  'TIMEOUT_TYPE_'\n>(\n  {\n    [TimeoutType.START_TO_CLOSE]: 1,\n    [TimeoutType.SCHEDULE_TO_START]: 2,\n    [TimeoutType.SCHEDULE_TO_CLOSE]: 3,\n    [TimeoutType.HEARTBEAT]: 4,\n    UNSPECIFIED: 0,\n  } as const,\n  'TIMEOUT_TYPE_'\n);\n\nexport const RetryState = {\n  IN_PROGRESS: 'IN_PROGRESS',\n  NON_RETRYABLE_FAILURE: 'NON_RETRYABLE_FAILURE',\n  TIMEOUT: 'TIMEOUT',\n  MAXIMUM_ATTEMPTS_REACHED: 'MAXIMUM_ATTEMPTS_REACHED',\n  RETRY_POLICY_NOT_SET: 'RETRY_POLICY_NOT_SET',\n  INTERNAL_SERVER_ERROR: 'INTERNAL_SERVER_ERROR',\n  CANCEL_REQUESTED: 'CANCEL_REQUESTED',\n\n  /** @deprecated Use {@link IN_PROGRESS} instead. */\n  RETRY_STATE_IN_PROGRESS: 'IN_PROGRESS',\n\n  /** @deprecated Use {@link NON_RETRYABLE_FAILURE} instead. */\n  RETRY_STATE_NON_RETRYABLE_FAILURE: 'NON_RETRYABLE_FAILURE',\n\n  /** @deprecated Use {@link TIMEOUT} instead. */\n  RETRY_STATE_TIMEOUT: 'TIMEOUT',\n\n  /** @deprecated Use {@link MAXIMUM_ATTEMPTS_REACHED} instead. */\n  RETRY_STATE_MAXIMUM_ATTEMPTS_REACHED: 'MAXIMUM_ATTEMPTS_REACHED',\n\n  /** @deprecated Use {@link RETRY_POLICY_NOT_SET} instead. */\n  RETRY_STATE_RETRY_POLICY_NOT_SET: 'RETRY_POLICY_NOT_SET',\n\n  /** @deprecated Use {@link INTERNAL_SERVER_ERROR} instead. */\n  RETRY_STATE_INTERNAL_SERVER_ERROR: 'INTERNAL_SERVER_ERROR',\n\n  /** @deprecated Use {@link CANCEL_REQUESTED} instead. */\n  RETRY_STATE_CANCEL_REQUESTED: 'CANCEL_REQUESTED',\n\n  /** @deprecated Use `undefined` instead. */\n  RETRY_STATE_UNSPECIFIED: undefined,\n} as const;\nexport type RetryState = (typeof RetryState)[keyof typeof RetryState];\n\nexport const [encodeRetryState, decodeRetryState] = makeProtoEnumConverters<\n  temporal.api.enums.v1.RetryState,\n  typeof temporal.api.enums.v1.RetryState,\n  keyof typeof temporal.api.enums.v1.RetryState,\n  typeof RetryState,\n  'RETRY_STATE_'\n>(\n  {\n    [RetryState.IN_PROGRESS]: 1,\n    [RetryState.NON_RETRYABLE_FAILURE]: 2,\n    [RetryState.TIMEOUT]: 3,\n    [RetryState.MAXIMUM_ATTEMPTS_REACHED]: 4,\n    [RetryState.RETRY_POLICY_NOT_SET]: 5,\n    [RetryState.INTERNAL_SERVER_ERROR]: 6,\n    [RetryState.CANCEL_REQUESTED]: 7,\n    UNSPECIFIED: 0,\n  } as const,\n  'RETRY_STATE_'\n);\n\n/**\n * A category to describe the severity and change the observability behavior of an application failure.\n *\n * Currently, observability behavior changes are limited to:\n * - activities that fail due to a BENIGN application failure emit DEBUG level logs and do not record metrics\n *\n * @experimental Category is a new feature and may be subject to change.\n */\nexport const ApplicationFailureCategory = {\n  BENIGN: 'BENIGN',\n} as const;\nexport type ApplicationFailureCategory = (typeof ApplicationFailureCategory)[keyof typeof ApplicationFailureCategory];\n\nexport const [encodeApplicationFailureCategory, decodeApplicationFailureCategory] = makeProtoEnumConverters<\n  temporal.api.enums.v1.ApplicationErrorCategory,\n  typeof temporal.api.enums.v1.ApplicationErrorCategory,\n  keyof typeof temporal.api.enums.v1.ApplicationErrorCategory,\n  typeof ApplicationFailureCategory,\n  'APPLICATION_ERROR_CATEGORY_'\n>(\n  {\n    [ApplicationFailureCategory.BENIGN]: 1,\n    UNSPECIFIED: 0,\n  } as const,\n  'APPLICATION_ERROR_CATEGORY_'\n);\n\nexport type WorkflowExecution = temporal.api.common.v1.IWorkflowExecution;\n\n/**\n * Represents failures that can cross Workflow and Activity boundaries.\n *\n * **Never extend this class or any of its children.**\n *\n * The only child class you should ever throw from your code is {@link ApplicationFailure}.\n */\n@SymbolBasedInstanceOfError('TemporalFailure')\nexport class TemporalFailure extends Error {\n  /**\n   * The original failure that constructed this error.\n   *\n   * Only present if this error was generated from an external operation.\n   */\n  public failure?: ProtoFailure;\n\n  constructor(\n    message?: string | undefined | null,\n    public readonly cause?: Error\n  ) {\n    super(message ?? undefined);\n  }\n}\n\n/** Exceptions originated at the Temporal service. */\n@SymbolBasedInstanceOfError('ServerFailure')\nexport class ServerFailure extends TemporalFailure {\n  constructor(\n    message: string | undefined,\n    public readonly nonRetryable: boolean,\n    cause?: Error\n  ) {\n    super(message, cause);\n  }\n}\n\n/**\n * `ApplicationFailure`s are used to communicate application-specific failures in Workflows and Activities.\n *\n * The {@link type} property is matched against {@link RetryPolicy.nonRetryableErrorTypes} to determine if an instance\n * of this error is retryable. Another way to avoid retrying is by setting the {@link nonRetryable} flag to `true`.\n *\n * In Workflows, if you throw a non-`ApplicationFailure`, the Workflow Task will fail and be retried. If you throw an\n * `ApplicationFailure`, the Workflow Execution will fail.\n *\n * In Activities, you can either throw an `ApplicationFailure` or another `Error` to fail the Activity Task. In the\n * latter case, the `Error` will be converted to an `ApplicationFailure`. The conversion is done as following:\n *\n * - `type` is set to `error.constructor?.name ?? error.name`\n * - `message` is set to `error.message`\n * - `nonRetryable` is set to false\n * - `details` are set to null\n * - stack trace is copied from the original error\n *\n * When an {@link https://docs.temporal.io/activity-execution#activity-execution | Activity Execution} fails, the\n * `ApplicationFailure` from the last Activity Task will be the `cause` of the {@link ActivityFailure} thrown in the\n * Workflow.\n */\n@SymbolBasedInstanceOfError('ApplicationFailure')\nexport class ApplicationFailure extends TemporalFailure {\n  /**\n   * Alternatively, use {@link fromError} or {@link create}.\n   */\n  constructor(\n    message?: string | undefined | null,\n    public readonly type?: string | undefined | null,\n    public readonly nonRetryable?: boolean | undefined | null,\n    public readonly details?: unknown[] | undefined | null,\n    cause?: Error,\n    public readonly nextRetryDelay?: Duration | undefined | null,\n    public readonly category?: ApplicationFailureCategory | undefined | null\n  ) {\n    super(message, cause);\n  }\n\n  /**\n   * Create a new `ApplicationFailure` from an Error object.\n   *\n   * First calls {@link ensureApplicationFailure | `ensureApplicationFailure(error)`} and then overrides any fields\n   * provided in `overrides`.\n   */\n  public static fromError(error: Error | unknown, overrides?: ApplicationFailureOptions): ApplicationFailure {\n    const failure = ensureApplicationFailure(error);\n    Object.assign(failure, overrides);\n    return failure;\n  }\n\n  /**\n   * Create a new `ApplicationFailure`.\n   *\n   * By default, will be retryable (unless its `type` is included in {@link RetryPolicy.nonRetryableErrorTypes}).\n   */\n  public static create(options: ApplicationFailureOptions): ApplicationFailure {\n    const { message, type, nonRetryable = false, details, nextRetryDelay, cause, category } = options;\n    return new this(message, type, nonRetryable, details, cause, nextRetryDelay, category);\n  }\n\n  /**\n   * Get a new `ApplicationFailure` with the {@link nonRetryable} flag set to false. Note that this error will still\n   * not be retried if its `type` is included in {@link RetryPolicy.nonRetryableErrorTypes}.\n   *\n   * @param message Optional error message\n   * @param type Optional error type (used by {@link RetryPolicy.nonRetryableErrorTypes})\n   * @param details Optional details about the failure. Serialized by the Worker's {@link PayloadConverter}.\n   */\n  public static retryable(message?: string | null, type?: string | null, ...details: unknown[]): ApplicationFailure {\n    return new this(message, type ?? 'Error', false, details);\n  }\n\n  /**\n   * Get a new `ApplicationFailure` with the {@link nonRetryable} flag set to true.\n   *\n   * When thrown from an Activity or Workflow, the Activity or Workflow will not be retried (even if `type` is not\n   * listed in {@link RetryPolicy.nonRetryableErrorTypes}).\n   *\n   * @param message Optional error message\n   * @param type Optional error type\n   * @param details Optional details about the failure. Serialized by the Worker's {@link PayloadConverter}.\n   */\n  public static nonRetryable(message?: string | null, type?: string | null, ...details: unknown[]): ApplicationFailure {\n    return new this(message, type ?? 'Error', true, details);\n  }\n}\n\nexport interface ApplicationFailureOptions {\n  /**\n   * Error message\n   */\n  message?: string;\n\n  /**\n   * Error type (used by {@link RetryPolicy.nonRetryableErrorTypes})\n   */\n  type?: string;\n\n  /**\n   * Whether the current Activity or Workflow can be retried\n   *\n   * @default false\n   */\n  nonRetryable?: boolean;\n\n  /**\n   * Details about the failure. Serialized by the Worker's {@link PayloadConverter}.\n   */\n  details?: unknown[];\n\n  /**\n   * If set, overrides the delay until the next retry of this Activity / Workflow Task.\n   *\n   * Retry attempts will still be subject to the maximum retries limit and total time limit defined\n   * by the policy.\n   */\n  nextRetryDelay?: Duration;\n\n  /**\n   * Cause of the failure\n   */\n  cause?: Error;\n\n  /**\n   * Severity category of the application error.\n   * Affects worker-side logging and metrics behavior of this failure.\n   */\n  category?: ApplicationFailureCategory;\n}\n\n/**\n * This error is thrown when Cancellation has been requested. To allow Cancellation to happen, let it propagate. To\n * ignore Cancellation, catch it and continue executing. Note that Cancellation can only be requested a single time, so\n * your Workflow/Activity Execution will not receive further Cancellation requests.\n *\n * When a Workflow or Activity has been successfully cancelled, a `CancelledFailure` will be the `cause`.\n */\n@SymbolBasedInstanceOfError('CancelledFailure')\nexport class CancelledFailure extends TemporalFailure {\n  constructor(\n    message: string | undefined,\n    public readonly details: unknown[] = [],\n    cause?: Error\n  ) {\n    super(message, cause);\n  }\n}\n\n/**\n * Used as the `cause` when a Workflow has been terminated\n */\n@SymbolBasedInstanceOfError('TerminatedFailure')\nexport class TerminatedFailure extends TemporalFailure {\n  constructor(message: string | undefined, cause?: Error) {\n    super(message, cause);\n  }\n}\n\n/**\n * Used to represent timeouts of Activities and Workflows\n */\n@SymbolBasedInstanceOfError('TimeoutFailure')\nexport class TimeoutFailure extends TemporalFailure {\n  constructor(\n    message: string | undefined,\n    public readonly lastHeartbeatDetails: unknown,\n    public readonly timeoutType: TimeoutType\n  ) {\n    super(message);\n  }\n}\n\n/**\n * Contains information about an Activity failure. Always contains the original reason for the failure as its `cause`.\n * For example, if an Activity timed out, the cause will be a {@link TimeoutFailure}.\n *\n * This exception is expected to be thrown only by the framework code.\n */\n@SymbolBasedInstanceOfError('ActivityFailure')\nexport class ActivityFailure extends TemporalFailure {\n  public constructor(\n    message: string | undefined,\n    public readonly activityType: string,\n    public readonly activityId: string | undefined,\n    public readonly retryState: RetryState,\n    public readonly identity: string | undefined,\n    cause?: Error\n  ) {\n    super(message, cause);\n  }\n}\n\n/**\n * Contains information about a Child Workflow failure. Always contains the reason for the failure as its {@link cause}.\n * For example, if the Child was Terminated, the `cause` is a {@link TerminatedFailure}.\n *\n * This exception is expected to be thrown only by the framework code.\n */\n@SymbolBasedInstanceOfError('ChildWorkflowFailure')\nexport class ChildWorkflowFailure extends TemporalFailure {\n  public constructor(\n    public readonly namespace: string | undefined,\n    public readonly execution: WorkflowExecution,\n    public readonly workflowType: string,\n    public readonly retryState: RetryState,\n    cause?: Error\n  ) {\n    super('Child Workflow execution failed', cause);\n  }\n}\n\n/**\n * Thrown when a Nexus Operation executed inside a Workflow fails.\n *\n * @experimental Nexus support in Temporal SDK is experimental.\n */\n@SymbolBasedInstanceOfError('NexusOperationFailure')\nexport class NexusOperationFailure extends TemporalFailure {\n  public constructor(\n    message: string | undefined,\n    public readonly scheduledEventId: number | undefined,\n    public readonly endpoint: string,\n    public readonly service: string,\n    public readonly operation: string,\n    public readonly operationToken: string | undefined,\n    cause?: Error\n  ) {\n    super(message, cause);\n  }\n}\n\n// TODO(nexus/error): Maybe add a NexusHandlerFailure class here, once we've decided on error handling.\n\n/**\n * This exception is thrown in the following cases:\n *  - Workflow with the same Workflow ID is currently running and the {@link WorkflowOptions.workflowIdConflictPolicy} is `WORKFLOW_ID_CONFLICT_POLICY_FAIL`\n *  - There is a closed Workflow with the same Workflow Id and the {@link WorkflowOptions.workflowIdReusePolicy}\n *    is `WORKFLOW_ID_REUSE_POLICY_REJECT_DUPLICATE`\n *  - There is closed Workflow in the `Completed` state with the same Workflow Id and the {@link WorkflowOptions.workflowIdReusePolicy}\n *    is `WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE_FAILED_ONLY`\n */\n@SymbolBasedInstanceOfError('WorkflowExecutionAlreadyStartedError')\nexport class WorkflowExecutionAlreadyStartedError extends TemporalFailure {\n  constructor(\n    message: string,\n    public readonly workflowId: string,\n    public readonly workflowType: string\n  ) {\n    super(message);\n  }\n}\n\n/**\n * If `error` is already an `ApplicationFailure`, returns `error`.\n *\n * Otherwise, converts `error` into an `ApplicationFailure` with:\n *\n * - `message`: `error.message` or `String(error)`\n * - `type`: `error.constructor.name` or `error.name`\n * - `stack`: `error.stack` or `''`\n */\nexport function ensureApplicationFailure(error: unknown): ApplicationFailure {\n  if (error instanceof ApplicationFailure) {\n    return error;\n  }\n\n  const message = (isRecord(error) && String(error.message)) || String(error);\n  const type = (isRecord(error) && (error.constructor?.name ?? error.name)) || undefined;\n  const failure = ApplicationFailure.create({ message, type, nonRetryable: false });\n  failure.stack = (isRecord(error) && String(error.stack)) || '';\n  return failure;\n}\n\n/**\n * If `err` is an Error it is turned into an `ApplicationFailure`.\n *\n * If `err` was already a `TemporalFailure`, returns the original error.\n *\n * Otherwise returns an `ApplicationFailure` with `String(err)` as the message.\n */\nexport function ensureTemporalFailure(err: unknown): TemporalFailure {\n  if (err instanceof TemporalFailure) {\n    return err;\n  }\n  return ensureApplicationFailure(err);\n}\n\n/**\n * Get the root cause message of given `error`.\n *\n * In case `error` is a {@link TemporalFailure}, recurse the `cause` chain and return the root `cause.message`.\n * Otherwise, return `error.message`.\n */\nexport function rootCause(error: unknown): string | undefined {\n  if (error instanceof TemporalFailure) {\n    return error.cause ? rootCause(error.cause) : error.message;\n  }\n  return errorMessage(error);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Helpers.\nconst s = 1000;\nconst m = s * 60;\nconst h = m * 60;\nconst d = h * 24;\nconst w = d * 7;\nconst y = d * 365.25;\nfunction ms(value, options) {\n    try {\n        if (typeof value === 'string' && value.length > 0) {\n            return parse(value);\n        }\n        else if (typeof value === 'number' && isFinite(value)) {\n            return options?.long ? fmtLong(value) : fmtShort(value);\n        }\n        throw new Error('Value is not a string or number.');\n    }\n    catch (error) {\n        const message = isError(error)\n            ? `${error.message}. value=${JSON.stringify(value)}`\n            : 'An unknown error has occured.';\n        throw new Error(message);\n    }\n}\n/**\n * Parse the given `str` and return milliseconds.\n */\nfunction parse(str) {\n    str = String(str);\n    if (str.length > 100) {\n        throw new Error('Value exceeds the maximum length of 100 characters.');\n    }\n    const match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str);\n    if (!match) {\n        return NaN;\n    }\n    const n = parseFloat(match[1]);\n    const type = (match[2] || 'ms').toLowerCase();\n    switch (type) {\n        case 'years':\n        case 'year':\n        case 'yrs':\n        case 'yr':\n        case 'y':\n            return n * y;\n        case 'weeks':\n        case 'week':\n        case 'w':\n            return n * w;\n        case 'days':\n        case 'day':\n        case 'd':\n            return n * d;\n        case 'hours':\n        case 'hour':\n        case 'hrs':\n        case 'hr':\n        case 'h':\n            return n * h;\n        case 'minutes':\n        case 'minute':\n        case 'mins':\n        case 'min':\n        case 'm':\n            return n * m;\n        case 'seconds':\n        case 'second':\n        case 'secs':\n        case 'sec':\n        case 's':\n            return n * s;\n        case 'milliseconds':\n        case 'millisecond':\n        case 'msecs':\n        case 'msec':\n        case 'ms':\n            return n;\n        default:\n            // This should never occur.\n            throw new Error(`The unit ${type} was matched, but no matching case exists.`);\n    }\n}\nexports.default = ms;\n/**\n * Short format for `ms`.\n */\nfunction fmtShort(ms) {\n    const msAbs = Math.abs(ms);\n    if (msAbs >= d) {\n        return `${Math.round(ms / d)}d`;\n    }\n    if (msAbs >= h) {\n        return `${Math.round(ms / h)}h`;\n    }\n    if (msAbs >= m) {\n        return `${Math.round(ms / m)}m`;\n    }\n    if (msAbs >= s) {\n        return `${Math.round(ms / s)}s`;\n    }\n    return `${ms}ms`;\n}\n/**\n * Long format for `ms`.\n */\nfunction fmtLong(ms) {\n    const msAbs = Math.abs(ms);\n    if (msAbs >= d) {\n        return plural(ms, msAbs, d, 'day');\n    }\n    if (msAbs >= h) {\n        return plural(ms, msAbs, h, 'hour');\n    }\n    if (msAbs >= m) {\n        return plural(ms, msAbs, m, 'minute');\n    }\n    if (msAbs >= s) {\n        return plural(ms, msAbs, s, 'second');\n    }\n    return `${ms} ms`;\n}\n/**\n * Pluralization helper.\n */\nfunction plural(ms, msAbs, n, name) {\n    const isPlural = msAbs >= n * 1.5;\n    return `${Math.round(ms / n)} ${name}${isPlural ? 's' : ''}`;\n}\n/**\n * A type guard for errors.\n */\nfunction isError(error) {\n    return typeof error === 'object' && error !== null && 'message' in error;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;\n","import Long from 'long';\nimport type { StringValue } from 'ms';\nimport ms from 'ms';\nimport type { google } from '@temporalio/proto';\nimport { ValueError } from './errors';\n\n// NOTE: these are the same interface in JS\n// google.protobuf.IDuration;\n// google.protobuf.ITimestamp;\n// The conversion functions below should work for both\n\nexport type Timestamp = google.protobuf.ITimestamp;\n\n/**\n * A duration, expressed either as a number of milliseconds, or as a {@link https://www.npmjs.com/package/ms | ms-formatted string}.\n */\nexport type Duration = StringValue | number;\n\nexport type { StringValue } from 'ms';\n\n/**\n * Lossy conversion function from Timestamp to number due to possible overflow.\n * If ts is null or undefined returns undefined.\n */\nexport function optionalTsToMs(ts: Timestamp | null | undefined): number | undefined {\n  if (ts === undefined || ts === null) {\n    return undefined;\n  }\n  return tsToMs(ts);\n}\n\n/**\n * Lossy conversion function from Timestamp to number due to possible overflow.\n * If ts is null or undefined, throws a TypeError, with error message including the name of the field.\n */\nexport function requiredTsToMs(ts: Timestamp | null | undefined, fieldName: string): number {\n  if (ts === undefined || ts === null) {\n    throw new TypeError(`Expected ${fieldName} to be a timestamp, got ${ts}`);\n  }\n  return tsToMs(ts);\n}\n\n/**\n * Lossy conversion function from Timestamp to number due to possible overflow\n */\nexport function tsToMs(ts: Timestamp | null | undefined): number {\n  if (ts === undefined || ts === null) {\n    throw new Error(`Expected timestamp, got ${ts}`);\n  }\n  const { seconds, nanos } = ts;\n  return (seconds || Long.UZERO)\n    .mul(1000)\n    .add(Math.floor((nanos || 0) / 1000000))\n    .toNumber();\n}\n\nexport function msNumberToTs(millis: number): Timestamp {\n  const seconds = Math.floor(millis / 1000);\n  const nanos = (millis % 1000) * 1000000;\n  if (Number.isNaN(seconds) || Number.isNaN(nanos)) {\n    throw new ValueError(`Invalid millis ${millis}`);\n  }\n  return { seconds: Long.fromNumber(seconds), nanos };\n}\n\nexport function msToTs(str: Duration): Timestamp {\n  return msNumberToTs(msToNumber(str));\n}\n\nexport function msOptionalToTs(str: Duration | undefined | null): Timestamp | undefined {\n  return str ? msToTs(str) : undefined;\n}\n\nexport function msOptionalToNumber(val: Duration | undefined): number | undefined {\n  if (val === undefined) return undefined;\n  return msToNumber(val);\n}\n\nexport function msToNumber(val: Duration): number {\n  if (typeof val === 'number') {\n    return val;\n  }\n  return msWithValidation(val);\n}\n\nfunction msWithValidation(str: StringValue): number {\n  const millis = ms(str);\n  if (millis == null || isNaN(millis)) {\n    throw new TypeError(`Invalid duration string: '${str}'`);\n  }\n  return millis;\n}\n\nexport function tsToDate(ts: Timestamp): Date {\n  return new Date(tsToMs(ts));\n}\n\n// ts-prune-ignore-next\nexport function requiredTsToDate(ts: Timestamp | null | undefined, fieldName: string): Date {\n  return new Date(requiredTsToMs(ts, fieldName));\n}\n\nexport function optionalTsToDate(ts: Timestamp | null | undefined): Date | undefined {\n  if (ts === undefined || ts === null) {\n    return undefined;\n  }\n  return new Date(tsToMs(ts));\n}\n\n// ts-prune-ignore-next (imported via schedule-helpers.ts)\nexport function optionalDateToTs(date: Date | null | undefined): Timestamp | undefined {\n  if (date === undefined || date === null) {\n    return undefined;\n  }\n  return msToTs(date.getTime());\n}\n","import { encode } from '../encoding';\n\nexport const METADATA_ENCODING_KEY = 'encoding';\nexport const encodingTypes = {\n  METADATA_ENCODING_NULL: 'binary/null',\n  METADATA_ENCODING_RAW: 'binary/plain',\n  METADATA_ENCODING_JSON: 'json/plain',\n  METADATA_ENCODING_PROTOBUF_JSON: 'json/protobuf',\n  METADATA_ENCODING_PROTOBUF: 'binary/protobuf',\n} as const;\nexport type EncodingType = (typeof encodingTypes)[keyof typeof encodingTypes];\n\nexport const encodingKeys = {\n  METADATA_ENCODING_NULL: encode(encodingTypes.METADATA_ENCODING_NULL),\n  METADATA_ENCODING_RAW: encode(encodingTypes.METADATA_ENCODING_RAW),\n  METADATA_ENCODING_JSON: encode(encodingTypes.METADATA_ENCODING_JSON),\n  METADATA_ENCODING_PROTOBUF_JSON: encode(encodingTypes.METADATA_ENCODING_PROTOBUF_JSON),\n  METADATA_ENCODING_PROTOBUF: encode(encodingTypes.METADATA_ENCODING_PROTOBUF),\n} as const;\n\nexport const METADATA_MESSAGE_TYPE_KEY = 'messageType';\n","import { decode, encode } from '../encoding';\nimport { PayloadConverterError, ValueError } from '../errors';\nimport type { Payload } from '../interfaces';\nimport type { SerializationContext } from './serialization-context';\nimport { encodingKeys, encodingTypes, METADATA_ENCODING_KEY } from './types';\n\n/**\n * Used by the framework to serialize/deserialize data like parameters and return values.\n *\n * This is called inside the {@link https://docs.temporal.io/typescript/determinism | Workflow isolate}.\n * To write async code or use Node APIs (or use packages that use Node APIs), use a {@link PayloadCodec}.\n */\nexport interface PayloadConverter {\n  /**\n   * Converts a value to a {@link Payload}.\n   *\n   * @param value The value to convert. Example values include the Workflow args sent from the Client and the values returned by a Workflow or Activity.\n   *\n   * @returns The {@link Payload}.\n   *\n   * Should throw {@link ValueError} if unable to convert.\n   */\n  toPayload<T>(value: T, context?: SerializationContext): Payload;\n\n  /**\n   * Converts a {@link Payload} back to a value.\n   */\n  fromPayload<T>(payload: Payload, context?: SerializationContext): T;\n}\n\n/**\n * Implements conversion of a list of values.\n *\n * @param converter\n * @param values JS values to convert to Payloads\n * @return list of {@link Payload}s\n * @throws {@link ValueError} if conversion of the value passed as parameter failed for any\n *     reason.\n */\nexport function toPayloads(converter: PayloadConverter, ...values: unknown[]): Payload[] | undefined {\n  return toPayloadsWithContext(converter, undefined, values);\n}\n\n/**\n * Implements conversion of a list of values with an optional serialization context.\n *\n * @hidden\n */\nexport function toPayloadsWithContext(\n  converter: PayloadConverter,\n  context: SerializationContext | undefined,\n  values: unknown[]\n): Payload[] | undefined {\n  if (values.length === 0) {\n    return undefined;\n  }\n\n  return values.map((value) => converter.toPayload(value, context));\n}\n\n/**\n * Run {@link PayloadConverter.toPayload} on an optional value, and then encode it.\n */\nexport function convertOptionalToPayload(\n  payloadConverter: PayloadConverter,\n  value: unknown,\n  context?: SerializationContext\n): Payload | null | undefined {\n  if (value == null) return value;\n\n  return payloadConverter.toPayload(value, context);\n}\n\n/**\n * Run {@link PayloadConverter.toPayload} on each value in the map.\n *\n * @throws {@link ValueError} if conversion of any value in the map fails\n */\nexport function mapToPayloads<K extends string, T = any>(\n  converter: PayloadConverter,\n  map: Record<K, T>,\n  context?: SerializationContext\n): Record<K, Payload> {\n  return Object.fromEntries(\n    Object.entries(map).map(([k, v]): [K, Payload] => [k as K, converter.toPayload(v, context)])\n  ) as Record<K, Payload>;\n}\n\n/**\n * Implements conversion of an array of values of different types. Useful for deserializing\n * arguments of function invocations.\n *\n * @param converter\n * @param index index of the value in the payloads\n * @param payloads serialized value to convert to JS values.\n * @return converted JS value\n * @throws {@link PayloadConverterError} if conversion of the data passed as parameter failed for any\n *     reason.\n */\nexport function fromPayloadsAtIndex<T>(\n  converter: PayloadConverter,\n  index: number,\n  payloads?: Payload[] | null,\n  context?: SerializationContext\n): T {\n  // To make adding arguments a backwards compatible change\n  if (payloads === undefined || payloads === null || index >= payloads.length) {\n    return undefined as any;\n  }\n  const payload = payloads?.[index];\n  if (!payload) {\n    return undefined as any;\n  }\n  return converter.fromPayload(payload, context);\n}\n\n/**\n * Run {@link PayloadConverter.fromPayload} on each value in the array.\n */\nexport function arrayFromPayloads(\n  converter: PayloadConverter,\n  payloads?: Payload[] | null,\n  context?: SerializationContext\n): unknown[] {\n  if (!payloads) {\n    return [];\n  }\n  return payloads.map((payload: Payload) => converter.fromPayload(payload, context));\n}\n\nexport function mapFromPayloads<K extends string, T = unknown>(\n  converter: PayloadConverter,\n  map?: Record<K, Payload> | null | undefined,\n  context?: SerializationContext\n): Record<K, T> | undefined {\n  if (map == null) return undefined;\n  return Object.fromEntries(\n    Object.entries(map).map(([k, payload]): [K, unknown] => {\n      const value = converter.fromPayload(payload as Payload, context);\n      return [k as K, value];\n    })\n  ) as Record<K, T>;\n}\n\nexport declare const rawPayloadTypeBrand: unique symbol;\n/**\n * RawValue is a wrapper over a payload.\n * A payload that belongs to a RawValue is special in that it bypasses user-defined payload converters,\n * instead using the default payload converter. The payload still undergoes codec conversion.\n */\nexport class RawValue<T = unknown> {\n  private readonly _payload: Payload;\n  private readonly [rawPayloadTypeBrand]: T = undefined as T;\n\n  constructor(value: T, payloadConverter: PayloadConverter = defaultPayloadConverter, context?: SerializationContext) {\n    this._payload = payloadConverter.toPayload(value, context);\n  }\n\n  static fromPayload(p: Payload): RawValue {\n    return new RawValue(p, identityPayloadConverter);\n  }\n\n  get payload(): Payload {\n    return this._payload;\n  }\n}\n\nexport interface PayloadConverterWithEncoding {\n  /**\n   * Converts a value to a {@link Payload}.\n   *\n   * @param value The value to convert. Example values include the Workflow args sent from the Client and the values returned by a Workflow or Activity.\n   * @returns The {@link Payload}, or `undefined` if unable to convert.\n   */\n  toPayload<T>(value: T, context?: SerializationContext): Payload | undefined;\n\n  /**\n   * Converts a {@link Payload} back to a value.\n   */\n  fromPayload<T>(payload: Payload, context?: SerializationContext): T;\n\n  readonly encodingType: string;\n}\n\n/**\n * Tries to convert values to {@link Payload}s using the {@link PayloadConverterWithEncoding}s provided to the constructor, in the order provided.\n *\n * Converts Payloads to values based on the `Payload.metadata.encoding` field, which matches the {@link PayloadConverterWithEncoding.encodingType}\n * of the converter that created the Payload.\n */\nexport class CompositePayloadConverter implements PayloadConverter {\n  readonly converters: PayloadConverterWithEncoding[];\n  readonly converterByEncoding: Map<string, PayloadConverterWithEncoding> = new Map();\n\n  constructor(...converters: PayloadConverterWithEncoding[]) {\n    if (converters.length === 0) {\n      throw new PayloadConverterError('Must provide at least one PayloadConverterWithEncoding');\n    }\n\n    this.converters = converters;\n    for (const converter of converters) {\n      this.converterByEncoding.set(converter.encodingType, converter);\n    }\n  }\n\n  /**\n   * Tries to run `.toPayload(value)` on each converter in the order provided at construction.\n   * Returns the first successful result, throws {@link ValueError} if there is no converter that can handle the value.\n   */\n  public toPayload<T>(value: T, context?: SerializationContext): Payload {\n    if (value instanceof RawValue) {\n      return value.payload;\n    }\n    for (const converter of this.converters) {\n      const result = converter.toPayload(value, context);\n      if (result !== undefined) {\n        return result;\n      }\n    }\n\n    throw new ValueError(`Unable to convert ${value} to payload`);\n  }\n\n  /**\n   * Run {@link PayloadConverterWithEncoding.fromPayload} based on the `encoding` metadata of the {@link Payload}.\n   */\n  public fromPayload<T>(payload: Payload, context?: SerializationContext): T {\n    if (payload.metadata === undefined || payload.metadata === null) {\n      throw new ValueError('Missing payload metadata');\n    }\n\n    const encoding = decode(payload.metadata[METADATA_ENCODING_KEY]!);\n    const converter = this.converterByEncoding.get(encoding);\n    if (converter === undefined) {\n      throw new ValueError(`Unknown encoding: ${encoding}`);\n    }\n    return converter.fromPayload(payload, context);\n  }\n}\n\n/**\n * Converts between JS undefined and NULL Payload\n */\nexport class UndefinedPayloadConverter implements PayloadConverterWithEncoding {\n  public encodingType = encodingTypes.METADATA_ENCODING_NULL;\n\n  public toPayload(value: unknown): Payload | undefined {\n    if (value !== undefined) {\n      return undefined;\n    }\n\n    return {\n      metadata: {\n        [METADATA_ENCODING_KEY]: encodingKeys.METADATA_ENCODING_NULL,\n      },\n    };\n  }\n\n  public fromPayload<T>(_content: Payload): T {\n    return undefined as any; // Just return undefined\n  }\n}\n\n/**\n * Converts between binary data types and RAW Payload\n */\nexport class BinaryPayloadConverter implements PayloadConverterWithEncoding {\n  public encodingType = encodingTypes.METADATA_ENCODING_RAW;\n\n  public toPayload(value: unknown): Payload | undefined {\n    if (!(value instanceof Uint8Array)) {\n      return undefined;\n    }\n\n    return {\n      metadata: {\n        [METADATA_ENCODING_KEY]: encodingKeys.METADATA_ENCODING_RAW,\n      },\n      data: value,\n    };\n  }\n\n  public fromPayload<T>(content: Payload): T {\n    return (\n      // Wrap with Uint8Array from this context to ensure `instanceof` works\n      (\n        content.data ? new Uint8Array(content.data.buffer, content.data.byteOffset, content.data.length) : content.data\n      ) as any\n    );\n  }\n}\n\n/**\n * Converts between non-undefined values and serialized JSON Payload\n */\nexport class JsonPayloadConverter implements PayloadConverterWithEncoding {\n  public encodingType = encodingTypes.METADATA_ENCODING_JSON;\n\n  public toPayload(value: unknown): Payload | undefined {\n    if (value === undefined) {\n      return undefined;\n    }\n\n    let json;\n    try {\n      json = JSON.stringify(value);\n    } catch (_err) {\n      return undefined;\n    }\n\n    return {\n      metadata: {\n        [METADATA_ENCODING_KEY]: encodingKeys.METADATA_ENCODING_JSON,\n      },\n      data: encode(json),\n    };\n  }\n\n  public fromPayload<T>(content: Payload): T {\n    if (content.data === undefined || content.data === null) {\n      throw new ValueError('Got payload with no data');\n    }\n    return JSON.parse(decode(content.data));\n  }\n}\n\nexport class DefaultPayloadConverter extends CompositePayloadConverter {\n  // Match the order used in other SDKs, but exclude Protobuf converters so that the code, including\n  // `proto3-json-serializer`, doesn't take space in Workflow bundles that don't use Protobufs. To use Protobufs, use\n  // {@link DefaultPayloadConverterWithProtobufs}.\n  //\n  // Go SDK:\n  // https://github.com/temporalio/sdk-go/blob/5e5645f0c550dcf717c095ae32c76a7087d2e985/converter/default_data_converter.go#L28\n  constructor() {\n    super(new UndefinedPayloadConverter(), new BinaryPayloadConverter(), new JsonPayloadConverter());\n  }\n}\n\n/**\n * The default {@link PayloadConverter} used by the SDK. Supports `Uint8Array` and JSON serializables (so if\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#description | `JSON.stringify(yourArgOrRetval)`}\n * works, the default payload converter will work).\n *\n * To also support Protobufs, create a custom payload converter with {@link DefaultPayloadConverter}:\n *\n * `const myConverter = new DefaultPayloadConverter({ protobufRoot })`\n */\nexport const defaultPayloadConverter = new DefaultPayloadConverter();\n\n/**\n * The identity payload converter returns the inputs it was given.\n */\nclass IdentityPayloadConverter implements PayloadConverter {\n  toPayload<T>(value: T): Payload {\n    return value as Payload;\n  }\n\n  fromPayload<T>(payload: Payload): T {\n    return payload as T;\n  }\n}\n\nconst identityPayloadConverter = new IdentityPayloadConverter();\n","import * as nexus from 'nexus-rpc';\nimport Long from 'long';\nimport type { temporal } from '@temporalio/proto';\nimport type { ProtoFailure } from '../failure';\nimport {\n  ActivityFailure,\n  ApplicationFailure,\n  CancelledFailure,\n  ChildWorkflowFailure,\n  decodeApplicationFailureCategory,\n  decodeRetryState,\n  decodeTimeoutType,\n  encodeApplicationFailureCategory,\n  encodeRetryState,\n  encodeTimeoutType,\n  FAILURE_SOURCE,\n  NexusOperationFailure,\n  ServerFailure,\n  TemporalFailure,\n  TerminatedFailure,\n  TimeoutFailure,\n} from '../failure';\nimport { makeProtoEnumConverters } from '../internal-workflow';\nimport { isError } from '../type-helpers';\nimport { msOptionalToTs } from '../time';\nimport { encode } from '../encoding';\nimport type { PayloadConverter } from './payload-converter';\nimport { arrayFromPayloads, fromPayloadsAtIndex, toPayloadsWithContext } from './payload-converter';\nimport type { SerializationContext } from './serialization-context';\n\n// Can't import proto enums into the workflow sandbox, use this helper type and enum converter instead.\nconst NexusHandlerErrorRetryBehavior = {\n  RETRYABLE: 'RETRYABLE',\n  NON_RETRYABLE: 'NON_RETRYABLE',\n} as const;\ntype NexusHandlerErrorRetryBehavior =\n  (typeof NexusHandlerErrorRetryBehavior)[keyof typeof NexusHandlerErrorRetryBehavior];\n\nconst [encodeNexusHandlerErrorRetryBehavior, decodeNexusHandlerErrorRetryBehavior] = makeProtoEnumConverters<\n  temporal.api.enums.v1.NexusHandlerErrorRetryBehavior,\n  typeof temporal.api.enums.v1.NexusHandlerErrorRetryBehavior,\n  keyof typeof temporal.api.enums.v1.NexusHandlerErrorRetryBehavior,\n  typeof NexusHandlerErrorRetryBehavior,\n  'NEXUS_HANDLER_ERROR_RETRY_BEHAVIOR_'\n>(\n  {\n    UNSPECIFIED: 0,\n    [NexusHandlerErrorRetryBehavior.RETRYABLE]: 1,\n    [NexusHandlerErrorRetryBehavior.NON_RETRYABLE]: 2,\n  } as const,\n  'NEXUS_HANDLER_ERROR_RETRY_BEHAVIOR_'\n);\n\nfunction combineRegExp(...regexps: RegExp[]): RegExp {\n  return new RegExp(regexps.map((x) => `(?:${x.source})`).join('|'));\n}\n\n/**\n * Stack traces will be cutoff when on of these patterns is matched\n */\nconst CUTOFF_STACK_PATTERNS = combineRegExp(\n  /** Activity execution */\n  /\\s+at (Activity\\.)?execute \\(.*[\\\\/]worker[\\\\/](?:src|lib)[\\\\/]activity\\.[jt]s:\\d+:\\d+\\)/,\n  /** Nexus execution */\n  /\\s+at( async)? (NexusHandler\\.)?invokeUserCode \\(.*[\\\\/]worker[\\\\/](?:src|lib)[\\\\/]nexus[\\\\/]index\\.[jt]s:\\d+:\\d+\\)/,\n  /** Workflow activation (inbound handlers only) */\n  /\\s+at( async)? (Activator\\.)?(startWorkflow|queryWorkflow|signalWorkflow|update|validateUpdate)NextHandler \\(.*\\.[jt]s:\\d+:\\d+\\)/,\n  /** Workflow run anything in context */\n  /\\s+at (Script\\.)?runInContext \\(native|unknown|(?:(?:node:vm|vm\\.js):\\d+:\\d+)\\)/\n);\n\n/**\n * Any stack trace frames that match any of those wil be dopped.\n * The \"null.\" prefix on some cases is to avoid https://github.com/nodejs/node/issues/42417\n */\nconst DROPPED_STACK_FRAMES_PATTERNS = combineRegExp(\n  /** Internal functions used to recursively chain interceptors */\n  /\\s+at (null\\.)?next \\(.*[\\\\/]common[\\\\/](?:src|lib)[\\\\/]interceptors\\.[jt]s:\\d+:\\d+\\)/,\n  /** Internal functions used to recursively chain interceptors */\n  /\\s+at (null\\.)?executeNextHandler \\(.*[\\\\/]worker[\\\\/](?:src|lib)[\\\\/]activity\\.[jt]s:\\d+:\\d+\\)/\n);\n\n/**\n * Cuts out the framework part of a stack trace, leaving only user code entries\n */\nexport function cutoffStackTrace(stack?: string): string {\n  const lines = (stack ?? '').split(/\\r?\\n/);\n  const acc = Array<string>();\n  for (const line of lines) {\n    if (CUTOFF_STACK_PATTERNS.test(line)) break;\n    if (!DROPPED_STACK_FRAMES_PATTERNS.test(line)) acc.push(line);\n  }\n  return acc.join('\\n');\n}\n\n/**\n * A `FailureConverter` is responsible for converting from proto `Failure` instances to JS `Errors` and back.\n *\n * We recommended using the {@link DefaultFailureConverter} instead of customizing the default implementation in order\n * to maintain cross-language Failure serialization compatibility.\n */\nexport interface FailureConverter {\n  /**\n   * Converts a caught error to a Failure proto message.\n   */\n  errorToFailure(err: unknown, payloadConverter: PayloadConverter, context?: SerializationContext): ProtoFailure;\n\n  /**\n   * Converts a Failure proto message to a JS Error object.\n   *\n   * The returned error must be an instance of `TemporalFailure`.\n   */\n  failureToError(err: ProtoFailure, payloadConverter: PayloadConverter, context?: SerializationContext): Error;\n}\n\n/**\n * The \"shape\" of the attributes set as the {@link ProtoFailure.encodedAttributes} payload in case\n * {@link DefaultEncodedFailureAttributes.encodeCommonAttributes} is set to `true`.\n */\nexport interface DefaultEncodedFailureAttributes {\n  message: string;\n  stack_trace: string;\n}\n\n/**\n * Options for the {@link DefaultFailureConverter} constructor.\n */\nexport interface DefaultFailureConverterOptions {\n  /**\n   * Whether to encode error messages and stack traces (for encrypting these attributes use a {@link PayloadCodec}).\n   */\n  encodeCommonAttributes: boolean;\n}\n\n/**\n * Default, cross-language-compatible Failure converter.\n *\n * By default, it will leave error messages and stack traces as plain text. In order to encrypt them, set\n * `encodeCommonAttributes` to `true` in the constructor options and use a {@link PayloadCodec} that can encrypt /\n * decrypt Payloads in your {@link WorkerOptions.dataConverter | Worker} and\n * {@link ClientOptions.dataConverter | Client options}.\n */\nexport class DefaultFailureConverter implements FailureConverter {\n  public readonly options: DefaultFailureConverterOptions;\n\n  constructor(options?: Partial<DefaultFailureConverterOptions>) {\n    const { encodeCommonAttributes } = options ?? {};\n    this.options = {\n      encodeCommonAttributes: encodeCommonAttributes ?? false,\n    };\n  }\n\n  /**\n   * Converts a Failure proto message to a JS Error object.\n   *\n   * Does not set common properties, that is done in {@link failureToError}.\n   */\n  failureToErrorInner(\n    failure: ProtoFailure,\n    payloadConverter: PayloadConverter,\n    context?: SerializationContext\n  ): Error {\n    if (failure.applicationFailureInfo) {\n      return new ApplicationFailure(\n        failure.message ?? undefined,\n        failure.applicationFailureInfo.type,\n        Boolean(failure.applicationFailureInfo.nonRetryable),\n        arrayFromPayloads(payloadConverter, failure.applicationFailureInfo.details?.payloads, context),\n        this.optionalFailureToOptionalError(failure.cause, payloadConverter, context),\n        undefined,\n        decodeApplicationFailureCategory(failure.applicationFailureInfo.category)\n      );\n    }\n    if (failure.serverFailureInfo) {\n      return new ServerFailure(\n        failure.message ?? undefined,\n        Boolean(failure.serverFailureInfo.nonRetryable),\n        this.optionalFailureToOptionalError(failure.cause, payloadConverter, context)\n      );\n    }\n    if (failure.timeoutFailureInfo) {\n      return new TimeoutFailure(\n        failure.message ?? undefined,\n        fromPayloadsAtIndex(payloadConverter, 0, failure.timeoutFailureInfo.lastHeartbeatDetails?.payloads, context),\n        decodeTimeoutType(failure.timeoutFailureInfo.timeoutType)\n      );\n    }\n    if (failure.terminatedFailureInfo) {\n      return new TerminatedFailure(\n        failure.message ?? undefined,\n        this.optionalFailureToOptionalError(failure.cause, payloadConverter, context)\n      );\n    }\n    if (failure.canceledFailureInfo) {\n      return new CancelledFailure(\n        failure.message ?? undefined,\n        arrayFromPayloads(payloadConverter, failure.canceledFailureInfo.details?.payloads, context),\n        this.optionalFailureToOptionalError(failure.cause, payloadConverter, context)\n      );\n    }\n    if (failure.resetWorkflowFailureInfo) {\n      return new ApplicationFailure(\n        failure.message ?? undefined,\n        'ResetWorkflow',\n        false,\n        arrayFromPayloads(payloadConverter, failure.resetWorkflowFailureInfo.lastHeartbeatDetails?.payloads, context),\n        this.optionalFailureToOptionalError(failure.cause, payloadConverter, context)\n      );\n    }\n    if (failure.childWorkflowExecutionFailureInfo) {\n      const { namespace, workflowType, workflowExecution, retryState } = failure.childWorkflowExecutionFailureInfo;\n      if (!(workflowType?.name && workflowExecution)) {\n        throw new TypeError('Missing attributes on childWorkflowExecutionFailureInfo');\n      }\n      return new ChildWorkflowFailure(\n        namespace ?? undefined,\n        workflowExecution,\n        workflowType.name,\n        decodeRetryState(retryState),\n        this.optionalFailureToOptionalError(failure.cause, payloadConverter, context)\n      );\n    }\n    if (failure.activityFailureInfo) {\n      if (!failure.activityFailureInfo.activityType?.name) {\n        throw new TypeError('Missing activityType?.name on activityFailureInfo');\n      }\n      return new ActivityFailure(\n        failure.message ?? undefined,\n        failure.activityFailureInfo.activityType.name,\n        failure.activityFailureInfo.activityId ?? undefined,\n        decodeRetryState(failure.activityFailureInfo.retryState),\n        failure.activityFailureInfo.identity ?? undefined,\n        this.optionalFailureToOptionalError(failure.cause, payloadConverter, context)\n      );\n    }\n    if (failure.nexusHandlerFailureInfo) {\n      let retryableOverride: boolean | undefined = undefined;\n      const retryBehavior = decodeNexusHandlerErrorRetryBehavior(failure.nexusHandlerFailureInfo.retryBehavior);\n      switch (retryBehavior) {\n        case 'RETRYABLE':\n          retryableOverride = true;\n          break;\n        case 'NON_RETRYABLE':\n          retryableOverride = false;\n          break;\n      }\n\n      const rawErrorType = failure.nexusHandlerFailureInfo.type || '';\n      const resolvedType: nexus.HandlerErrorType = Object.hasOwn(nexus.HandlerErrorType, rawErrorType)\n        ? nexus.HandlerErrorType[rawErrorType as keyof typeof nexus.HandlerErrorType]\n        : 'UNKNOWN';\n\n      return new nexus.HandlerError(resolvedType, failure.message ?? 'Nexus handler error', {\n        cause: this.optionalFailureToOptionalError(failure.cause, payloadConverter, context),\n        retryableOverride,\n        rawErrorType,\n        originalFailure: this.temporalFailureToNexusFailure(failure),\n      });\n    }\n    if (failure.nexusOperationExecutionFailureInfo) {\n      return new NexusOperationFailure(\n        // TODO(nexus/error): Maybe set a default message here, once we've decided on error handling.\n        failure.message ?? undefined,\n        failure.nexusOperationExecutionFailureInfo.scheduledEventId?.toNumber(),\n        // We assume these will always be set or gracefully set to empty strings.\n        failure.nexusOperationExecutionFailureInfo.endpoint ?? '',\n        failure.nexusOperationExecutionFailureInfo.service ?? '',\n        failure.nexusOperationExecutionFailureInfo.operation ?? '',\n        failure.nexusOperationExecutionFailureInfo.operationToken ?? undefined,\n        this.optionalFailureToOptionalError(failure.cause, payloadConverter, context)\n      );\n    }\n    return new TemporalFailure(\n      failure.message ?? undefined,\n      this.optionalFailureToOptionalError(failure.cause, payloadConverter, context)\n    );\n  }\n\n  failureToError(failure: ProtoFailure, payloadConverter: PayloadConverter, context?: SerializationContext): Error {\n    if (failure.encodedAttributes) {\n      const attrs = payloadConverter.fromPayload<DefaultEncodedFailureAttributes>(failure.encodedAttributes, context);\n      // Don't apply encodedAttributes unless they conform to an expected schema\n      if (typeof attrs === 'object' && attrs !== null) {\n        const { message, stack_trace } = attrs;\n        // Avoid mutating the argument\n        failure = { ...failure };\n        if (typeof message === 'string') {\n          failure.message = message;\n        }\n        if (typeof stack_trace === 'string') {\n          failure.stackTrace = stack_trace;\n        }\n      }\n    }\n    const err = this.failureToErrorInner(failure, payloadConverter, context);\n    err.stack = failure.stackTrace ?? '';\n    if (err instanceof TemporalFailure) {\n      err.failure = failure;\n    }\n    return err;\n  }\n\n  errorToFailure(err: unknown, payloadConverter: PayloadConverter, context?: SerializationContext): ProtoFailure {\n    const failure = this.errorToFailureInner(err, payloadConverter, context);\n    if (this.options.encodeCommonAttributes) {\n      const { message, stackTrace } = failure;\n      failure.message = 'Encoded failure';\n      failure.stackTrace = '';\n      failure.encodedAttributes = payloadConverter.toPayload({ message, stack_trace: stackTrace }, context);\n    }\n    return failure;\n  }\n\n  errorToFailureInner(err: unknown, payloadConverter: PayloadConverter, context?: SerializationContext): ProtoFailure {\n    if (err instanceof TemporalFailure || err instanceof nexus.HandlerError) {\n      if (err instanceof TemporalFailure && err.failure) return err.failure;\n      const base = {\n        message: err.message,\n        stackTrace: cutoffStackTrace(err.stack),\n        cause: this.optionalErrorToOptionalFailure(err.cause, payloadConverter, context),\n        source: FAILURE_SOURCE,\n      };\n\n      if (err instanceof ActivityFailure) {\n        return {\n          ...base,\n          activityFailureInfo: {\n            ...err,\n            retryState: encodeRetryState(err.retryState),\n            activityType: { name: err.activityType },\n          },\n        };\n      }\n      if (err instanceof ChildWorkflowFailure) {\n        return {\n          ...base,\n          childWorkflowExecutionFailureInfo: {\n            ...err,\n            retryState: encodeRetryState(err.retryState),\n            workflowExecution: err.execution,\n            workflowType: { name: err.workflowType },\n          },\n        };\n      }\n      if (err instanceof ApplicationFailure) {\n        return {\n          ...base,\n          applicationFailureInfo: {\n            type: err.type,\n            nonRetryable: err.nonRetryable,\n            details:\n              err.details && err.details.length\n                ? { payloads: toPayloadsWithContext(payloadConverter, context, err.details) }\n                : undefined,\n            nextRetryDelay: msOptionalToTs(err.nextRetryDelay),\n            category: encodeApplicationFailureCategory(err.category),\n          },\n        };\n      }\n      if (err instanceof CancelledFailure) {\n        return {\n          ...base,\n          canceledFailureInfo: {\n            details:\n              err.details && err.details.length\n                ? { payloads: toPayloadsWithContext(payloadConverter, context, err.details) }\n                : undefined,\n          },\n        };\n      }\n      if (err instanceof TimeoutFailure) {\n        return {\n          ...base,\n          timeoutFailureInfo: {\n            timeoutType: encodeTimeoutType(err.timeoutType),\n            lastHeartbeatDetails: err.lastHeartbeatDetails\n              ? { payloads: toPayloadsWithContext(payloadConverter, context, [err.lastHeartbeatDetails]) }\n              : undefined,\n          },\n        };\n      }\n      if (err instanceof ServerFailure) {\n        return {\n          ...base,\n          serverFailureInfo: { nonRetryable: err.nonRetryable },\n        };\n      }\n      if (err instanceof TerminatedFailure) {\n        return {\n          ...base,\n          terminatedFailureInfo: {},\n        };\n      }\n      if (err instanceof nexus.HandlerError) {\n        if (err.originalFailure) {\n          return this.nexusFailureToTemporalFailure(err.originalFailure, err.retryable);\n        } else {\n          let retryBehavior: temporal.api.enums.v1.NexusHandlerErrorRetryBehavior | undefined = undefined;\n          switch (err.retryableOverride) {\n            case true:\n              retryBehavior = encodeNexusHandlerErrorRetryBehavior('RETRYABLE');\n              break;\n            case false:\n              retryBehavior = encodeNexusHandlerErrorRetryBehavior('NON_RETRYABLE');\n              break;\n          }\n\n          return {\n            ...base,\n            nexusHandlerFailureInfo: {\n              type: err.type,\n              retryBehavior,\n            },\n          };\n        }\n      }\n      if (err instanceof NexusOperationFailure) {\n        return {\n          ...base,\n          nexusOperationExecutionFailureInfo: {\n            scheduledEventId: err.scheduledEventId ? Long.fromNumber(err.scheduledEventId) : undefined,\n            endpoint: err.endpoint,\n            service: err.service,\n            operation: err.operation,\n            operationToken: err.operationToken,\n          },\n        };\n      }\n      // Just a TemporalFailure\n      return base;\n    }\n\n    const base = {\n      source: FAILURE_SOURCE,\n    };\n\n    if (isError(err)) {\n      return {\n        ...base,\n        message: String(err.message ?? ''),\n        stackTrace: cutoffStackTrace(err.stack),\n        cause: this.optionalErrorToOptionalFailure((err as any).cause, payloadConverter, context),\n      };\n    }\n\n    const recommendation = ` [A non-Error value was thrown from your code. We recommend throwing Error objects so that we can provide a stack trace]`;\n\n    if (typeof err === 'string') {\n      return { ...base, message: err + recommendation };\n    }\n    if (typeof err === 'object') {\n      let message = '';\n      try {\n        message = JSON.stringify(err);\n      } catch (_err) {\n        message = String(err);\n      }\n      return { ...base, message: message + recommendation };\n    }\n\n    return { ...base, message: String(err) + recommendation };\n  }\n\n  /**\n   * Converts a Failure proto message to a JS Error object if defined or returns undefined.\n   */\n  optionalFailureToOptionalError(\n    failure: ProtoFailure | undefined | null,\n    payloadConverter: PayloadConverter,\n    context?: SerializationContext\n  ): Error | undefined {\n    return failure ? this.failureToError(failure, payloadConverter, context) : undefined;\n  }\n\n  /**\n   * Converts an error to a Failure proto message if defined or returns undefined\n   */\n  optionalErrorToOptionalFailure(\n    err: unknown,\n    payloadConverter: PayloadConverter,\n    context?: SerializationContext\n  ): ProtoFailure | undefined {\n    return err ? this.errorToFailure(err, payloadConverter, context) : undefined;\n  }\n\n  private nexusFailureToTemporalFailure(failure: nexus.Failure, retryable: boolean): ProtoFailure {\n    if (failure.metadata?.type === 'temporal.api.failure.v1.Failure') {\n      if (failure.details == null) {\n        throw new TypeError(\"missing details for Nexus Failure of type 'temporal.api.failure.v1.Failure'\");\n      }\n      return failure.details;\n    } else {\n      const temporalFailure: ProtoFailure = {};\n      temporalFailure.applicationFailureInfo = {\n        type: 'NexusFailure',\n        nonRetryable: !retryable,\n        details: {\n          payloads: [\n            {\n              metadata: { encoding: encode('json/plain') },\n              data: encode(JSON.stringify({ ...failure, message: '' })),\n            },\n          ],\n        },\n      };\n      temporalFailure.message = failure.message;\n      temporalFailure.stackTrace = failure.stackTrace ?? '';\n      return temporalFailure;\n    }\n  }\n\n  private temporalFailureToNexusFailure(failure: ProtoFailure): nexus.Failure {\n    return {\n      message: failure.message ?? '',\n      metadata: { type: 'temporal.api.failure.v1.Failure' },\n      // Store the full ProtoFailure as the Nexus failure details so it can be round-tripped\n      // losslessly back to a ProtoFailure via nexusFailureToTemporalFailure.\n      details: { ...failure },\n    };\n  }\n}\n","import type { FailureConverter } from './failure-converter';\nimport { DefaultFailureConverter } from './failure-converter';\nimport type { PayloadCodec } from './payload-codec';\nimport type { PayloadConverter } from './payload-converter';\nimport { defaultPayloadConverter } from './payload-converter';\n\n/**\n * When your data (arguments and return values) is sent over the wire and stored by Temporal Server, it is encoded in\n * binary in a {@link Payload} Protobuf message.\n *\n * The default `DataConverter` supports `undefined`, `Uint8Array`, and JSON serializables (so if\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#description | `JSON.stringify(yourArgOrRetval)`}\n * works, the default data converter will work). Protobufs are supported via\n * {@link https://docs.temporal.io/typescript/data-converters#protobufs | this API}.\n *\n * Use a custom `DataConverter` to control the contents of your {@link Payload}s. Common reasons for using a custom\n * `DataConverter` are:\n * - Converting values that are not supported by the default `DataConverter` (for example, `JSON.stringify()` doesn't\n *   handle `BigInt`s, so if you want to return `{ total: 1000n }` from a Workflow, Signal, or Activity, you need your\n *   own `DataConverter`).\n * - Encrypting values that may contain private information that you don't want stored in plaintext in Temporal Server's\n *   database.\n * - Compressing values to reduce disk or network usage.\n *\n * To use your custom `DataConverter`, provide it to the {@link WorkflowClient}, {@link Worker}, and\n * {@link bundleWorkflowCode} (if you use it):\n * - `new WorkflowClient({ ..., dataConverter })`\n * - `Worker.create({ ..., dataConverter })`\n * - `bundleWorkflowCode({ ..., payloadConverterPath })`\n */\nexport interface DataConverter {\n  /**\n   * Path of a file that has a `payloadConverter` named export.\n   * `payloadConverter` should be an object that implements {@link PayloadConverter}.\n   * If no path is provided, {@link defaultPayloadConverter} is used.\n   */\n  payloadConverterPath?: string;\n\n  /**\n   * Path of a file that has a `failureConverter` named export.\n   * `failureConverter` should be an object that implements {@link FailureConverter}.\n   * If no path is provided, {@link defaultFailureConverter} is used.\n   */\n  failureConverterPath?: string;\n\n  /**\n   * An array of {@link PayloadCodec} instances.\n   *\n   * Payloads are encoded in the order of the array and decoded in the opposite order. For example, if you have a\n   * compression codec and an encryption codec, then you want data to be encoded with the compression codec first, so\n   * you'd do `payloadCodecs: [compressionCodec, encryptionCodec]`.\n   */\n  payloadCodecs?: PayloadCodec[];\n}\n\n/**\n * A {@link DataConverter} that has been loaded via {@link loadDataConverter}.\n */\nexport interface LoadedDataConverter {\n  payloadConverter: PayloadConverter;\n  failureConverter: FailureConverter;\n  payloadCodecs: PayloadCodec[];\n}\n\n/**\n * The default {@link FailureConverter} used by the SDK.\n *\n * Error messages and stack traces are serizalized as plain text.\n */\nexport const defaultFailureConverter: FailureConverter = new DefaultFailureConverter();\n\n/**\n * A \"loaded\" data converter that uses the default set of failure and payload converters.\n */\nexport const defaultDataConverter: LoadedDataConverter = {\n  payloadConverter: defaultPayloadConverter,\n  failureConverter: defaultFailureConverter,\n  payloadCodecs: [],\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=payload-codec.js.map","import * as time from './time';\nimport type { Duration } from './time';\nimport { type Timestamp } from './time';\n\n/**\n * Lossy conversion function from Timestamp to number due to possible overflow.\n * If ts is null or undefined returns undefined.\n *\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function optionalTsToMs(ts: Timestamp | null | undefined): number | undefined {\n  return time.optionalTsToMs(ts);\n}\n\n/**\n * Lossy conversion function from Timestamp to number due to possible overflow\n *\n * @hidden\n * @deprecated - meant for internal use only\n * @deprecated - meant for internal use only\n */\nexport function tsToMs(ts: Timestamp | null | undefined): number {\n  return time.tsToMs(ts);\n}\n\n/**\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function msNumberToTs(millis: number): Timestamp {\n  return time.msNumberToTs(millis);\n}\n\n/**\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function msToTs(str: Duration): Timestamp {\n  return time.msToTs(str);\n}\n\n/**\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function msOptionalToTs(str: Duration | undefined): Timestamp | undefined {\n  return time.msOptionalToTs(str);\n}\n\n/**\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function msOptionalToNumber(val: Duration | undefined): number | undefined {\n  return time.msOptionalToNumber(val);\n}\n\n/**\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function msToNumber(val: Duration): number {\n  return time.msToNumber(val);\n}\n\n/**\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function tsToDate(ts: Timestamp): Date {\n  return time.tsToDate(ts);\n}\n\n/**\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function optionalTsToDate(ts: Timestamp | null | undefined): Date | undefined {\n  return time.optionalTsToDate(ts);\n}\n","import type { temporal } from '@temporalio/proto';\n\nexport type Payload = temporal.api.common.v1.IPayload;\n\n/** Type that can be returned from a Workflow `execute` function */\nexport type WorkflowReturnType = Promise<any>;\nexport type WorkflowUpdateType = (...args: any[]) => Promise<any> | any;\nexport type WorkflowUpdateValidatorType = (...args: any[]) => void;\nexport type WorkflowUpdateAnnotatedType = {\n  handler: WorkflowUpdateType;\n  unfinishedPolicy: HandlerUnfinishedPolicy;\n  validator?: WorkflowUpdateValidatorType;\n  description?: string;\n};\nexport type WorkflowSignalType = (...args: any[]) => Promise<void> | void;\nexport type WorkflowSignalAnnotatedType = {\n  handler: WorkflowSignalType;\n  unfinishedPolicy: HandlerUnfinishedPolicy;\n  description?: string;\n};\nexport type WorkflowQueryType = (...args: any[]) => any;\nexport type WorkflowQueryAnnotatedType = { handler: WorkflowQueryType; description?: string };\n\n/**\n * Broad Workflow function definition, specific Workflows will typically use a narrower type definition, e.g:\n * ```ts\n * export async function myWorkflow(arg1: number, arg2: string): Promise<string>;\n * ```\n */\nexport type Workflow = (...args: any[]) => WorkflowReturnType;\n\ndeclare const argsBrand: unique symbol;\ndeclare const retBrand: unique symbol;\n\n/**\n * An interface representing a Workflow update definition, as returned from {@link defineUpdate}\n *\n * @remarks `Args` can be used for parameter type inference in handler functions and WorkflowHandle methods.\n * `Name` can optionally be specified with a string literal type to preserve type-level knowledge of the update name.\n */\nexport interface UpdateDefinition<Ret, Args extends any[] = [], Name extends string = string> {\n  type: 'update';\n  name: Name;\n  /**\n   * Virtual type brand to maintain a distinction between {@link UpdateDefinition} types with different args.\n   * This field is not present at run-time.\n   */\n  [argsBrand]: Args;\n  /**\n   * Virtual type brand to maintain a distinction between {@link UpdateDefinition} types with different return types.\n   * This field is not present at run-time.\n   */\n  [retBrand]: Ret;\n}\n\n/**\n * An interface representing a Workflow signal definition, as returned from {@link defineSignal}\n *\n * @remarks `Args` can be used for parameter type inference in handler functions and WorkflowHandle methods.\n * `Name` can optionally be specified with a string literal type to preserve type-level knowledge of the signal name.\n */\nexport interface SignalDefinition<Args extends any[] = [], Name extends string = string> {\n  type: 'signal';\n  name: Name;\n  /**\n   * Virtual type brand to maintain a distinction between {@link SignalDefinition} types with different args.\n   * This field is not present at run-time.\n   */\n  [argsBrand]: Args;\n}\n\n/**\n * An interface representing a Workflow query definition as returned from {@link defineQuery}\n *\n * @remarks `Args` and `Ret` can be used for parameter type inference in handler functions and WorkflowHandle methods.\n * `Name` can optionally be specified with a string literal type to preserve type-level knowledge of the query name.\n */\nexport interface QueryDefinition<Ret, Args extends any[] = [], Name extends string = string> {\n  type: 'query';\n  name: Name;\n  /**\n   * Virtual type brand to maintain a distinction between {@link QueryDefinition} types with different args.\n   * This field is not present at run-time.\n   */\n  [argsBrand]: Args;\n  /**\n   * Virtual type brand to maintain a distinction between {@link QueryDefinition} types with different return types.\n   * This field is not present at run-time.\n   */\n  [retBrand]: Ret;\n}\n\n/** Get the \"unwrapped\" return type (without Promise) of the execute handler from Workflow type `W` */\nexport type WorkflowResultType<W extends Workflow> = ReturnType<W> extends Promise<infer R> ? R : never;\n\nexport interface ActivityFunction<P extends any[] = any[], R = any> {\n  (...args: P): Promise<R>;\n}\n\n/**\n * Mapping of Activity name to function\n * @deprecated not required anymore, for untyped activities use {@link UntypedActivities}\n */\nexport type ActivityInterface = Record<string, ActivityFunction>;\n\n/**\n * Mapping of Activity name to function\n */\nexport type UntypedActivities = Record<string, ActivityFunction>;\n\n/**\n * A workflow's history and ID. Useful for replay.\n */\nexport interface HistoryAndWorkflowId {\n  workflowId: string;\n  history: temporal.api.history.v1.History | unknown | undefined;\n}\n\n/**\n * Policy defining actions taken when a workflow exits while update or signal handlers are running.\n * The workflow exit may be due to successful return, failure, cancellation, or continue-as-new.\n */\nexport const HandlerUnfinishedPolicy = {\n  /**\n   * Issue a warning in addition to abandoning the handler execution. The warning will not be issued if the workflow fails.\n   */\n  WARN_AND_ABANDON: 'WARN_AND_ABANDON',\n\n  /**\n   * Abandon the handler execution.\n   *\n   * In the case of an update handler this means that the client will receive an error rather than\n   * the update result.\n   */\n  ABANDON: 'ABANDON',\n} as const;\nexport type HandlerUnfinishedPolicy = (typeof HandlerUnfinishedPolicy)[keyof typeof HandlerUnfinishedPolicy];\n","import { filterNullAndUndefined, mergeObjects } from './internal-workflow';\n\nexport type LogLevel = 'TRACE' | 'DEBUG' | 'INFO' | 'WARN' | 'ERROR';\n\nexport type LogMetadata = Record<string | symbol, any>;\n\n/**\n * Implement this interface in order to customize worker logging\n */\nexport interface Logger {\n  log(level: LogLevel, message: string, meta?: LogMetadata): any;\n  trace(message: string, meta?: LogMetadata): any;\n  debug(message: string, meta?: LogMetadata): any;\n  info(message: string, meta?: LogMetadata): any;\n  warn(message: string, meta?: LogMetadata): any;\n  error(message: string, meta?: LogMetadata): any;\n}\n\n/**\n * Possible values of the `sdkComponent` meta attributes on log messages. This\n * attribute indicates which subsystem emitted the log message; this may for\n * example be used to implement fine-grained filtering of log messages.\n *\n * Note that there is no guarantee that this list will remain stable in the\n * future; values may be added or removed, and messages that are currently\n * emitted with some `sdkComponent` value may use a different value in the future.\n */\nexport enum SdkComponent {\n  /**\n   * Component name for messages emited from Workflow code, using the {@link Workflow context logger|workflow.log}.\n   * The SDK itself never publishes messages with this component name.\n   */\n  workflow = 'workflow',\n\n  /**\n   * Component name for messages emited from an activity, using the {@link activity context logger|Context.log}.\n   * The SDK itself never publishes messages with this component name.\n   */\n  activity = 'activity',\n\n  /**\n   * Component name for messages emited from a Nexus Operation Handler, using the Nexus context logger.\n   * The SDK itself never publishes messages with this component name.\n   */\n  nexus = 'nexus',\n\n  /**\n   * Component name for messages emited from a Temporal Worker instance.\n   *\n   * This notably includes:\n   * - Issues with Worker or runtime configuration, or the JS execution environment;\n   * - Worker's, Activity's, and Workflow's lifecycle events;\n   * - Workflow Activation and Activity Task processing events;\n   * - Workflow bundling messages;\n   * - Sink processing issues.\n   */\n  worker = 'worker',\n\n  /**\n   * Component name for all messages emitted by the Rust Core SDK library.\n   */\n  core = 'core',\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @internal\n * @hidden\n */\nexport type LogMetaOrFunc = LogMetadata | (() => LogMetadata);\n\n/**\n * A logger implementation that adds metadata before delegating calls to a parent logger.\n *\n * @internal\n * @hidden\n */\nexport class LoggerWithComposedMetadata implements Logger {\n  /**\n   * Return a {@link Logger} that adds metadata before delegating calls to a parent logger.\n   *\n   * New metadata may either be specified statically as a delta object, or as a function evaluated\n   * every time a log is emitted that will return a delta object.\n   *\n   * Some optimizations are performed to avoid creating unnecessary objects and to keep runtime\n   * overhead associated with resolving metadata as low as possible.\n   */\n  public static compose(logger: Logger, metaOrFunc: LogMetaOrFunc): Logger {\n    // Flatten recursive LoggerWithComposedMetadata instances\n    if (logger instanceof LoggerWithComposedMetadata) {\n      const contributors = appendToChain(logger.contributors, metaOrFunc);\n      // If the new contributor results in no actual change to the chain, then we don't need a new logger\n      if (contributors === undefined) return logger;\n      return new LoggerWithComposedMetadata(logger.parentLogger, contributors);\n    } else {\n      const contributors = appendToChain(undefined, metaOrFunc);\n      if (contributors === undefined) return logger;\n      return new LoggerWithComposedMetadata(logger, contributors);\n    }\n  }\n\n  constructor(\n    private readonly parentLogger: Logger,\n    private readonly contributors: LogMetaOrFunc[]\n  ) {}\n\n  log(level: LogLevel, message: string, extraMeta?: LogMetadata): void {\n    this.parentLogger.log(level, message, resolveMetadata(this.contributors, extraMeta));\n  }\n\n  trace(message: string, extraMeta?: LogMetadata): void {\n    this.parentLogger.trace(message, resolveMetadata(this.contributors, extraMeta));\n  }\n\n  debug(message: string, extraMeta?: LogMetadata): void {\n    this.parentLogger.debug(message, resolveMetadata(this.contributors, extraMeta));\n  }\n\n  info(message: string, extraMeta?: LogMetadata): void {\n    this.parentLogger.info(message, resolveMetadata(this.contributors, extraMeta));\n  }\n\n  warn(message: string, extraMeta?: LogMetadata): void {\n    this.parentLogger.warn(message, resolveMetadata(this.contributors, extraMeta));\n  }\n\n  error(message: string, extraMeta?: LogMetadata): void {\n    this.parentLogger.error(message, resolveMetadata(this.contributors, extraMeta));\n  }\n}\n\nfunction resolveMetadata(contributors: LogMetaOrFunc[], extraMeta?: LogMetadata): LogMetadata {\n  const resolved = {};\n  for (const contributor of contributors) {\n    Object.assign(resolved, typeof contributor === 'function' ? contributor() : contributor);\n  }\n  Object.assign(resolved, extraMeta);\n  return filterNullAndUndefined(resolved);\n}\n\n/**\n * Append a metadata contributor to the chain, merging it with the former last contributor if both are plain objects\n */\nfunction appendToChain(\n  existingContributors: LogMetaOrFunc[] | undefined,\n  newContributor: LogMetaOrFunc\n): LogMetaOrFunc[] | undefined {\n  // If the new contributor is an empty object, then it results in no actual change to the chain\n  if (typeof newContributor === 'object' && Object.keys(newContributor).length === 0) {\n    return existingContributors;\n  }\n\n  // If existing chain is empty, then the new contributor is the chain\n  if (existingContributors == null || existingContributors.length === 0) {\n    return [newContributor];\n  }\n\n  // If both last contributor and new contributor are plain objects, merge them to a single object.\n  const last = existingContributors[existingContributors.length - 1];\n  if (typeof last === 'object' && typeof newContributor === 'object') {\n    const merged = mergeObjects(last, newContributor);\n    if (merged === last) return existingContributors;\n    return [...existingContributors.slice(0, -1), merged];\n  }\n\n  // Otherwise, just append the new contributor to the chain.\n  return [...existingContributors, newContributor];\n}\n","import type { temporal } from '@temporalio/proto';\n\n/**\n * Priority contains metadata that controls relative ordering of task processing when tasks are\n * backlogged in a queue. Initially, Priority will be used in activity and workflow task queues,\n * which are typically where backlogs exist.\n * Priority is (for now) attached to workflows and activities. Activities and child workflows\n * inherit Priority from the workflow that created them, but may override fields when they are\n * started or modified. For each field of a Priority on an activity/workflow, not present or equal\n * to zero/empty string means to inherit the value from the calling workflow, or if there is no\n * calling workflow, then use the default (documented on the field).\n * The overall semantics of Priority are:\n * 1. First, consider \"priority_key\": lower number goes first.\n * 2. Then, consider fairness: the fairness mechanism attempts to dispatch tasks for a given key in\n *    proportion to its weight.\n */\nexport interface Priority {\n  /**\n   * Priority key is a positive integer from 1 to n, where smaller integers\n   * correspond to higher priorities (tasks run sooner). In general, tasks in\n   * a queue should be processed in close to priority order, although small\n   * deviations are possible.\n   *\n   * The maximum priority value (minimum priority) is determined by server configuration, and\n   * defaults to 5.\n   *\n   * The default priority is (min+max)/2. With the default max of 5 and min of 1, that comes out to 3.\n   */\n  priorityKey?: number;\n\n  /**\n   * FairnessKey is a short string that's used as a key for a fairness\n   * balancing mechanism. It may correspond to a tenant id, or to a fixed\n   * string like \"high\" or \"low\". The default is the empty string.\n   *\n   * The fairness mechanism attempts to dispatch tasks for a given key in\n   * proportion to its weight. For example, using a thousand distinct tenant\n   * ids, each with a weight of 1.0 (the default) will result in each tenant\n   * getting a roughly equal share of task dispatch throughput.\n   *\n   * Fairness keys are limited to 64 bytes.\n   */\n  fairnessKey?: string;\n\n  /**\n   * FairnessWeight for a task can come from multiple sources for\n   * flexibility. From highest to lowest precedence:\n   * 1. Weights for a small set of keys can be overridden in task queue\n   *    configuration with an API.\n   * 2. It can be attached to the workflow/activity in this field.\n   * 3. The default weight of 1.0 will be used.\n   *\n   * Weight values are clamped to the range [0.001, 1000].\n   */\n  fairnessWeight?: number;\n}\n\n/**\n * Turn a proto compatible Priority into a TS Priority\n */\nexport function decodePriority(priority?: temporal.api.common.v1.IPriority | null): Priority {\n  return {\n    priorityKey: priority?.priorityKey ?? undefined,\n    fairnessKey: priority?.fairnessKey ?? undefined,\n    fairnessWeight: priority?.fairnessWeight ?? undefined,\n  };\n}\n\n/**\n * Turn a TS Priority into a proto compatible Priority\n */\nexport function compilePriority(priority: Priority): temporal.api.common.v1.IPriority {\n  if (priority.priorityKey !== undefined && priority.priorityKey !== null) {\n    if (!Number.isInteger(priority.priorityKey)) {\n      throw new TypeError('priorityKey must be an integer');\n    }\n    if (priority.priorityKey < 0) {\n      throw new RangeError('priorityKey must be a positive integer');\n    }\n  }\n\n  return {\n    priorityKey: priority.priorityKey ?? 0,\n    fairnessKey: priority.fairnessKey ?? '',\n    fairnessWeight: priority.fairnessWeight ?? 0,\n  };\n}\n","import { filterNullAndUndefined, mergeObjects } from './internal-workflow';\n\n/**\n * A meter for creating metrics to record values on.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nexport interface MetricMeter {\n  /**\n   * Create a new counter metric that supports adding values.\n   *\n   * @param name Name for the counter metric.\n   * @param unit Unit for the counter metric. Optional.\n   * @param description Description for the counter metric. Optional.\n   */\n  createCounter(name: string, unit?: string, description?: string): MetricCounter;\n\n  /**\n   * Create a new histogram metric that supports recording values.\n   *\n   * @param name Name for the histogram metric.\n   * @param valueType Type of value to record. Defaults to `int`.\n   * @param unit Unit for the histogram metric. Optional.\n   * @param description Description for the histogram metric. Optional.\n   */\n  createHistogram(\n    name: string,\n    valueType?: NumericMetricValueType,\n    unit?: string,\n    description?: string\n  ): MetricHistogram;\n\n  /**\n   * Create a new gauge metric that supports setting values.\n   *\n   * @param name Name for the gauge metric.\n   * @param valueType Type of value to set. Defaults to `int`.\n   * @param unit Unit for the gauge metric. Optional.\n   * @param description Description for the gauge metric. Optional.\n   */\n  createGauge(name: string, valueType?: NumericMetricValueType, unit?: string, description?: string): MetricGauge;\n\n  /**\n   * Create a new up-down counter metric that supports adding signed values.\n   *\n   * @param name Name for the up-down counter metric.\n   * @param unit Unit for the up-down counter metric. Optional.\n   * @param description Description for the up-down counter metric. Optional.\n   */\n  createUpDownCounter?(name: string, unit?: string, description?: string): MetricUpDownCounter;\n\n  /**\n   * Return a clone of this meter, with additional tags. All metrics created off the meter will\n   * have the tags.\n   *\n   * @param tags Tags to append.\n   */\n  withTags(tags: MetricTags): MetricMeter;\n}\n\n/**\n * Base interface for all metrics.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nexport interface Metric {\n  /**\n   * The name of the metric.\n   */\n  name: string;\n\n  /**\n   * The unit of the metric, if any.\n   */\n  unit?: string;\n\n  /**\n   * The description of the metric, if any.\n   */\n  description?: string;\n\n  /**\n   * The kind of the metric (e.g. `counter`, `histogram`, `gauge`).\n   */\n  kind: MetricKind;\n\n  /**\n   * The type of value recorded by the metric. Either `int` or `float`.\n   */\n  valueType: NumericMetricValueType;\n}\n\n/**\n * Tags to be attached to some metrics.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nexport type MetricTags = Record<string, string | number | boolean>;\n\n/**\n * Type of numerical values recorded by a metric.\n *\n * Note that this represents the _configuration_ of the metric; however, since JavaScript doesn't\n * have different runtime representation for integers and floats, the actual value type is always\n * a JS 'number'.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nexport type NumericMetricValueType = 'int' | 'float';\n\n/**\n * The kind of a metric.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nexport type MetricKind = 'counter' | 'histogram' | 'gauge' | 'up-down-counter';\n\n/**\n * A metric that supports adding values as a counter.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nexport interface MetricCounter extends Metric {\n  /**\n   * Add the given value to the counter.\n   *\n   * @param value Value to add.\n   * @param extraTags Extra tags if any.\n   */\n  add(value: number, extraTags?: MetricTags): void;\n\n  /**\n   * Return a clone of this counter, with additional tags.\n   *\n   * @param tags Tags to append to existing tags.\n   */\n  withTags(tags: MetricTags): MetricCounter;\n\n  kind: 'counter';\n  valueType: 'int';\n}\n\n/**\n * A metric that supports recording values on a histogram.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nexport interface MetricHistogram extends Metric {\n  /**\n   * Record the given value on the histogram.\n   *\n   * @param value Value to record. Must be a non-negative number. Value will be casted to the given\n   *              {@link valueType}. Loss of precision may occur if the value is not already of the\n   *              correct type.\n   * @param extraTags Extra tags if any.\n   */\n  record(value: number, extraTags?: MetricTags): void;\n\n  /**\n   * Return a clone of this histogram, with additional tags.\n   *\n   * @param tags Tags to append to existing tags.\n   */\n  withTags(tags: MetricTags): MetricHistogram;\n\n  kind: 'histogram';\n}\n\n/**\n * A metric that supports setting values.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nexport interface MetricGauge extends Metric {\n  /**\n   * Set the given value on the gauge.\n   *\n   * @param value Value to set.\n   * @param extraTags Extra tags if any.\n   */\n  set(value: number, extraTags?: MetricTags): void;\n\n  /**\n   * Return a clone of this gauge, with additional tags.\n   *\n   * @param tags Tags to append to existing tags.\n   */\n  withTags(tags: MetricTags): MetricGauge;\n\n  kind: 'gauge';\n}\n\n/**\n * A metric that supports adding signed values as an up-down counter.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nexport interface MetricUpDownCounter extends Metric {\n  /**\n   * Add the given value to the up-down counter. Value may be negative.\n   *\n   * @param value Value to add (can be positive or negative).\n   * @param extraTags Extra tags if any.\n   */\n  add(value: number, extraTags?: MetricTags): void;\n\n  /**\n   * Return a clone of this up-down counter, with additional tags.\n   *\n   * @param tags Tags to append to existing tags.\n   */\n  withTags(tags: MetricTags): MetricUpDownCounter;\n\n  kind: 'up-down-counter';\n  valueType: 'int';\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A meter implementation that does nothing.\n */\nclass NoopMetricMeter implements MetricMeter {\n  createCounter(name: string, unit?: string, description?: string): MetricCounter {\n    return {\n      name,\n      unit,\n      description,\n\n      kind: 'counter',\n      valueType: 'int',\n\n      add(_value, _extraTags) {},\n\n      withTags(_extraTags) {\n        return this;\n      },\n    };\n  }\n\n  createHistogram(\n    name: string,\n    valueType: NumericMetricValueType = 'int',\n    unit?: string,\n    description?: string\n  ): MetricHistogram {\n    return {\n      name,\n      unit,\n      description,\n\n      kind: 'histogram',\n      valueType,\n\n      record(_value, _extraTags) {},\n\n      withTags(_extraTags) {\n        return this;\n      },\n    };\n  }\n\n  createGauge(\n    name: string,\n    valueType: NumericMetricValueType = 'int',\n    unit?: string,\n    description?: string\n  ): MetricGauge {\n    return {\n      name,\n      unit,\n      description,\n\n      kind: 'gauge',\n      valueType,\n\n      set(_value, _extraTags) {},\n\n      withTags(_extraTags) {\n        return this;\n      },\n    };\n  }\n\n  createUpDownCounter(name: string, unit?: string, description?: string): MetricUpDownCounter {\n    return {\n      name,\n      unit,\n      description,\n\n      kind: 'up-down-counter',\n      valueType: 'int',\n\n      add(_value, _extraTags) {},\n\n      withTags(_extraTags) {\n        return this;\n      },\n    };\n  }\n\n  withTags(_extraTags: MetricTags): MetricMeter {\n    return this;\n  }\n}\n\nexport const noopMetricMeter = new NoopMetricMeter();\n\n////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport type MetricTagsOrFunc = MetricTags | (() => MetricTags);\n\n/**\n * A meter implementation that adds tags before delegating calls to a parent meter.\n *\n * @experimental The Metric API is an experimental feature and may be subject to change.\n * @internal\n * @hidden\n */\nexport class MetricMeterWithComposedTags implements MetricMeter {\n  /**\n   * Return a {@link MetricMeter} that adds tags before delegating calls to a parent meter.\n   *\n   * New tags may either be specified statically as a delta object, or as a function evaluated\n   * every time a metric is recorded that will return a delta object.\n   *\n   * Some optimizations are performed to avoid creating unnecessary objects and to keep runtime\n   * overhead associated with resolving tags as low as possible.\n   *\n   * @param meter The parent meter to delegate calls to.\n   * @param tagsOrFunc New tags may either be specified statically as a delta object, or as a function\n   *                   evaluated every time a metric is recorded that will return a delta object.\n   * @param force if `true`, then a `MetricMeterWithComposedTags` will be created even if there\n   *              is no tags to add. This is useful to add tags support to an underlying meter\n   *              implementation that does not support tags directly.\n   */\n  public static compose(meter: MetricMeter, tagsOrFunc: MetricTagsOrFunc, force: boolean = false): MetricMeter {\n    if (meter instanceof MetricMeterWithComposedTags) {\n      const contributors = appendToChain(meter.contributors, tagsOrFunc);\n      // If the new contributor results in no actual change to the chain, then we don't need a new meter\n      if (contributors === undefined && !force) return meter;\n      return new MetricMeterWithComposedTags(meter.parentMeter, contributors ?? []);\n    } else {\n      const contributors = appendToChain(undefined, tagsOrFunc);\n      if (contributors === undefined && !force) return meter;\n      return new MetricMeterWithComposedTags(meter, contributors ?? []);\n    }\n  }\n\n  private constructor(\n    private readonly parentMeter: MetricMeter,\n    private readonly contributors: MetricTagsOrFunc[]\n  ) {}\n\n  createCounter(name: string, unit?: string, description?: string): MetricCounter {\n    const parentCounter = this.parentMeter.createCounter(name, unit, description);\n    return new MetricCounterWithComposedTags(parentCounter, this.contributors);\n  }\n\n  createHistogram(\n    name: string,\n    valueType: NumericMetricValueType = 'int',\n    unit?: string,\n    description?: string\n  ): MetricHistogram {\n    const parentHistogram = this.parentMeter.createHistogram(name, valueType, unit, description);\n    return new MetricHistogramWithComposedTags(parentHistogram, this.contributors);\n  }\n\n  createGauge(\n    name: string,\n    valueType: NumericMetricValueType = 'int',\n    unit?: string,\n    description?: string\n  ): MetricGauge {\n    const parentGauge = this.parentMeter.createGauge(name, valueType, unit, description);\n    return new MetricGaugeWithComposedTags(parentGauge, this.contributors);\n  }\n\n  createUpDownCounter(name: string, unit?: string, description?: string): MetricUpDownCounter {\n    // FIXME: Remove this guard once up-down-counter support is complete on all MetricMeter\n    // implementations and `createUpDownCounter` is no longer optional on MetricMeter.\n    if (!this.parentMeter.createUpDownCounter) {\n      throw new Error('createUpDownCounter is not supported by the underlying meter');\n    }\n    const parentCounter = this.parentMeter.createUpDownCounter(name, unit, description);\n    return new MetricUpDownCounterWithComposedTags(parentCounter, this.contributors);\n  }\n\n  withTags(tags: MetricTags): MetricMeter {\n    return MetricMeterWithComposedTags.compose(this, tags);\n  }\n}\n\n/**\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nclass MetricCounterWithComposedTags implements MetricCounter {\n  public readonly kind = 'counter';\n  public readonly valueType = 'int';\n\n  constructor(\n    private parentCounter: MetricCounter,\n    private contributors: MetricTagsOrFunc[]\n  ) {}\n\n  add(value: number, extraTags?: MetricTags | undefined): void {\n    this.parentCounter.add(value, resolveTags(this.contributors, extraTags));\n  }\n\n  withTags(extraTags: MetricTags): MetricCounter {\n    const contributors = appendToChain(this.contributors, extraTags);\n    if (contributors === undefined) return this;\n    return new MetricCounterWithComposedTags(this.parentCounter, contributors);\n  }\n\n  get name(): string {\n    return this.parentCounter.name;\n  }\n\n  get unit(): string | undefined {\n    return this.parentCounter.unit;\n  }\n\n  get description(): string | undefined {\n    return this.parentCounter.description;\n  }\n}\n\n/**\n * @experimental The Metric API is an experimental feature and may be subject to change.\n */\nclass MetricHistogramWithComposedTags implements MetricHistogram {\n  public readonly kind = 'histogram';\n\n  constructor(\n    private parentHistogram: MetricHistogram,\n    private contributors: MetricTagsOrFunc[]\n  ) {}\n\n  record(value: number, extraTags?: MetricTags): void {\n    this.parentHistogram.record(value, resolveTags(this.contributors, extraTags));\n  }\n\n  withTags(extraTags: MetricTags): MetricHistogram {\n    const contributors = appendToChain(this.contributors, extraTags);\n    if (contributors === undefined) return this;\n    return new MetricHistogramWithComposedTags(this.parentHistogram, contributors);\n  }\n\n  get name(): string {\n    return this.parentHistogram.name;\n  }\n\n  get valueType(): NumericMetricValueType {\n    return this.parentHistogram.valueType;\n  }\n\n  get unit(): string | undefined {\n    return this.parentHistogram.unit;\n  }\n\n  get description(): string | undefined {\n    return this.parentHistogram.description;\n  }\n}\n\n/**\n * @internal\n * @hidden\n */\nclass MetricGaugeWithComposedTags implements MetricGauge {\n  public readonly kind = 'gauge';\n\n  constructor(\n    private parentGauge: MetricGauge,\n    private contributors: MetricTagsOrFunc[]\n  ) {}\n\n  set(value: number, extraTags?: MetricTags): void {\n    this.parentGauge.set(value, resolveTags(this.contributors, extraTags));\n  }\n\n  withTags(extraTags: MetricTags): MetricGauge {\n    const contributors = appendToChain(this.contributors, extraTags);\n    if (contributors === undefined) return this;\n    return new MetricGaugeWithComposedTags(this.parentGauge, contributors);\n  }\n\n  get name(): string {\n    return this.parentGauge.name;\n  }\n\n  get valueType(): NumericMetricValueType {\n    return this.parentGauge.valueType;\n  }\n\n  get unit(): string | undefined {\n    return this.parentGauge.unit;\n  }\n\n  get description(): string | undefined {\n    return this.parentGauge.description;\n  }\n}\n\n/**\n * @internal\n * @hidden\n */\nclass MetricUpDownCounterWithComposedTags implements MetricUpDownCounter {\n  public readonly kind = 'up-down-counter';\n  public readonly valueType = 'int';\n\n  constructor(\n    private parentCounter: MetricUpDownCounter,\n    private contributors: MetricTagsOrFunc[]\n  ) {}\n\n  add(value: number, extraTags?: MetricTags | undefined): void {\n    this.parentCounter.add(value, resolveTags(this.contributors, extraTags));\n  }\n\n  withTags(extraTags: MetricTags): MetricUpDownCounter {\n    const contributors = appendToChain(this.contributors, extraTags);\n    if (contributors === undefined) return this;\n    return new MetricUpDownCounterWithComposedTags(this.parentCounter, contributors);\n  }\n\n  get name(): string {\n    return this.parentCounter.name;\n  }\n\n  get unit(): string | undefined {\n    return this.parentCounter.unit;\n  }\n\n  get description(): string | undefined {\n    return this.parentCounter.description;\n  }\n}\n\nfunction resolveTags(contributors: MetricTagsOrFunc[], extraTags?: MetricTags): MetricTags {\n  const resolved = {};\n  for (const contributor of contributors) {\n    Object.assign(resolved, typeof contributor === 'function' ? contributor() : contributor);\n  }\n  Object.assign(resolved, extraTags);\n  return filterNullAndUndefined(resolved);\n}\n\n/**\n * Append a tags contributor to the chain, merging it with the former last contributor if possible.\n *\n * If appending the new contributor results in no actual change to the chain of contributors, return\n * `existingContributors`; in that case, the caller should avoid creating a new object if possible.\n */\nfunction appendToChain(\n  existingContributors: MetricTagsOrFunc[] | undefined,\n  newContributor: MetricTagsOrFunc\n): MetricTagsOrFunc[] | undefined {\n  // If the new contributor is an empty object, then it results in no actual change to the chain\n  if (typeof newContributor === 'object' && Object.keys(newContributor).length === 0) {\n    return existingContributors;\n  }\n\n  // If existing chain is empty, then the new contributor is the chain\n  if (existingContributors == null || existingContributors.length === 0) {\n    return [newContributor];\n  }\n\n  // If both last contributor and new contributor are plain objects, merge them to a single object.\n  const last = existingContributors[existingContributors.length - 1];\n  if (typeof last === 'object' && typeof newContributor === 'object') {\n    const merged = mergeObjects(last, newContributor);\n    if (merged === last) return existingContributors;\n    return [...existingContributors.slice(0, -1), merged!];\n  }\n\n  // Otherwise, just append the new contributor to the chain.\n  return [...existingContributors, newContributor];\n}\n","import type { temporal } from '@temporalio/proto';\nimport { ValueError } from './errors';\nimport type { Duration } from './time';\nimport { msOptionalToNumber, msOptionalToTs, msToNumber, msToTs, optionalTsToMs } from './time';\n\n/**\n * Options for retrying Workflows and Activities\n */\nexport interface RetryPolicy {\n  /**\n   * Coefficient used to calculate the next retry interval.\n   * The next retry interval is previous interval multiplied by this coefficient.\n   * @minimum 1\n   * @default 2\n   */\n  backoffCoefficient?: number;\n  /**\n   * Interval of the first retry.\n   * If coefficient is 1 then it is used for all retries\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   * @default 1 second\n   */\n  initialInterval?: Duration;\n  /**\n   * Maximum number of attempts. When exceeded, retries stop (even if {@link ActivityOptions.scheduleToCloseTimeout}\n   * hasn't been reached).\n   *\n   * @default Infinity\n   */\n  maximumAttempts?: number;\n  /**\n   * Maximum interval between retries.\n   * Exponential backoff leads to interval increase.\n   * This value is the cap of the increase.\n   *\n   * @default 100x of {@link initialInterval}\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  maximumInterval?: Duration;\n\n  /**\n   * List of application failures types to not retry.\n   */\n  nonRetryableErrorTypes?: string[];\n}\n\n/**\n * Turn a TS RetryPolicy into a proto compatible RetryPolicy\n */\nexport function compileRetryPolicy(retryPolicy: RetryPolicy): temporal.api.common.v1.IRetryPolicy {\n  if (retryPolicy.backoffCoefficient != null && retryPolicy.backoffCoefficient <= 0) {\n    throw new ValueError('RetryPolicy.backoffCoefficient must be greater than 0');\n  }\n  if (retryPolicy.maximumAttempts != null) {\n    if (retryPolicy.maximumAttempts === Number.POSITIVE_INFINITY) {\n      // drop field (Infinity is the default)\n      const { maximumAttempts: _, ...without } = retryPolicy;\n      retryPolicy = without;\n    } else if (retryPolicy.maximumAttempts <= 0) {\n      throw new ValueError('RetryPolicy.maximumAttempts must be a positive integer');\n    } else if (!Number.isInteger(retryPolicy.maximumAttempts)) {\n      throw new ValueError('RetryPolicy.maximumAttempts must be an integer');\n    }\n  }\n  const maximumInterval = msOptionalToNumber(retryPolicy.maximumInterval);\n  const initialInterval = msToNumber(retryPolicy.initialInterval ?? 1000);\n  if (maximumInterval === 0) {\n    throw new ValueError('RetryPolicy.maximumInterval cannot be 0');\n  }\n  if (initialInterval === 0) {\n    throw new ValueError('RetryPolicy.initialInterval cannot be 0');\n  }\n  if (maximumInterval != null && maximumInterval < initialInterval) {\n    throw new ValueError('RetryPolicy.maximumInterval cannot be less than its initialInterval');\n  }\n  return {\n    maximumAttempts: retryPolicy.maximumAttempts,\n    initialInterval: msToTs(initialInterval),\n    maximumInterval: msOptionalToTs(maximumInterval),\n    backoffCoefficient: retryPolicy.backoffCoefficient,\n    nonRetryableErrorTypes: retryPolicy.nonRetryableErrorTypes,\n  };\n}\n\n/**\n * Turn a proto compatible RetryPolicy into a TS RetryPolicy\n */\nexport function decompileRetryPolicy(\n  retryPolicy?: temporal.api.common.v1.IRetryPolicy | null\n): RetryPolicy | undefined {\n  if (!retryPolicy) {\n    return undefined;\n  }\n\n  return {\n    backoffCoefficient: retryPolicy.backoffCoefficient ?? undefined,\n    maximumAttempts: retryPolicy.maximumAttempts ?? undefined,\n    maximumInterval: optionalTsToMs(retryPolicy.maximumInterval),\n    initialInterval: optionalTsToMs(retryPolicy.initialInterval),\n    nonRetryableErrorTypes: retryPolicy.nonRetryableErrorTypes ?? undefined,\n  };\n}\n","import type { coresdk, temporal } from '@temporalio/proto';\nimport { makeProtoEnumConverters } from './internal-workflow';\n\n/**\n * Represents the version of a specific worker deployment.\n */\nexport interface WorkerDeploymentVersion {\n  readonly buildId: string;\n  readonly deploymentName: string;\n}\n\n/**\n * @returns The canonical representation of a deployment version, which is a string in the format\n * `deploymentName.buildId`.\n */\nexport function toCanonicalString(version: WorkerDeploymentVersion): string {\n  return `${version.deploymentName}.${version.buildId}`;\n}\n\n/**\n * Specifies when a workflow might move from a worker of one Build Id to another.\n *\n * * 'PINNED' - The workflow will be pinned to the current Build ID unless manually moved.\n * * 'AUTO_UPGRADE' - The workflow will automatically move to the latest version (default Build ID\n *    of the task queue) when the next task is dispatched.\n */\nexport const VersioningBehavior = {\n  PINNED: 'PINNED',\n  AUTO_UPGRADE: 'AUTO_UPGRADE',\n} as const;\nexport type VersioningBehavior = (typeof VersioningBehavior)[keyof typeof VersioningBehavior];\n\nexport const [encodeVersioningBehavior, decodeVersioningBehavior] = makeProtoEnumConverters<\n  temporal.api.enums.v1.VersioningBehavior,\n  typeof temporal.api.enums.v1.VersioningBehavior,\n  keyof typeof temporal.api.enums.v1.VersioningBehavior,\n  typeof VersioningBehavior,\n  'VERSIONING_BEHAVIOR_'\n>(\n  {\n    [VersioningBehavior.PINNED]: 1,\n    [VersioningBehavior.AUTO_UPGRADE]: 2,\n    UNSPECIFIED: 0,\n  } as const,\n  'VERSIONING_BEHAVIOR_'\n);\n\n/**\n * Represents versioning overrides. For example, when starting workflows.\n */\nexport type VersioningOverride = PinnedVersioningOverride | 'AUTO_UPGRADE';\n\n/**\n * Workflow will be pinned to a specific deployment version.\n */\nexport interface PinnedVersioningOverride {\n  /**\n   * The worker deployment version to pin the workflow to.\n   */\n  pinnedTo: WorkerDeploymentVersion;\n}\n\n/**\n * The workflow will auto-upgrade to the current deployment version on the next workflow task.\n */\nexport type AutoUpgradeVersioningOverride = 'AUTO_UPGRADE';\n\n/**\n * Defines the versioning behavior to be used by the first task of a new workflow run in a continue-as-new chain.\n *\n * AUTO_UPGRADE - Start the new run with AutoUpgrade behavior. Use the Target Version of the workflow's task queue at\n *   start-time, as AutoUpgrade workflows do. After the first workflow task completes, use whatever\n *   Versioning Behavior the workflow is annotated with in the workflow code.\n *\n *   Note that if the previous workflow had a Pinned override, that override will be inherited by the\n *   new workflow run regardless of the ContinueAsNewVersioningBehavior specified in the continue-as-new\n *   command. If a Pinned override is inherited by the new run, and the new run starts with AutoUpgrade\n *   behavior, the base version of the new run will be the Target Version as described above, but the\n *   effective version will be whatever is specified by the Versioning Override until the override is removed.\n *\n * USE_RAMPING_VERSION - Use the Ramping Version of the workflow's task queue at start time, regardless of the workflow's\n *   Target Version (according to f(workflow_id, ramp_percentage)). After the first workflow task completes,\n *   the workflow will use whatever Versioning Behavior it is annotated with. If there is no Ramping\n *   Version by the time that the first workflow task is dispatched, it will be sent to the Current Version.\n *\n *   It is highly discouraged to use this if the workflow is annotated with AutoUpgrade behavior, because\n *   this setting ONLY applies to the first task of the workflow. If, after the first task, the workflow\n *   is AutoUpgrade, it will behave like a normal AutoUpgrade workflow and go to the Target Version, which\n *   may be the Current Version instead of the Ramping Version.\n *\n *   Note that if the workflow being continued has a Pinned override, that override will be inherited by the\n *   new workflow run regardless of the ContinueAsNewVersioningBehavior specified in the continue-as-new\n *   command. Versioning Override always takes precedence until it's removed manually via UpdateWorkflowExecutionOptions.\n *\n * @experimental Versioning semantics with continue-as-new are experimental and may change in the future.\n */\nexport const InitialVersioningBehavior = {\n  AUTO_UPGRADE: 'AUTO_UPGRADE',\n  USE_RAMPING_VERSION: 'USE_RAMPING_VERSION',\n} as const;\nexport type InitialVersioningBehavior = (typeof InitialVersioningBehavior)[keyof typeof InitialVersioningBehavior];\n\nexport const [encodeInitialVersioningBehavior, decodeInitialVersioningBehavior] = makeProtoEnumConverters<\n  temporal.api.enums.v1.ContinueAsNewVersioningBehavior,\n  typeof temporal.api.enums.v1.ContinueAsNewVersioningBehavior,\n  keyof typeof temporal.api.enums.v1.ContinueAsNewVersioningBehavior,\n  typeof InitialVersioningBehavior,\n  'CONTINUE_AS_NEW_VERSIONING_BEHAVIOR_'\n>(\n  {\n    [InitialVersioningBehavior.AUTO_UPGRADE]: 1,\n    [InitialVersioningBehavior.USE_RAMPING_VERSION]: 2,\n    UNSPECIFIED: 0,\n  } as const,\n  'CONTINUE_AS_NEW_VERSIONING_BEHAVIOR_'\n);\n\n/**\n * @internal\n */\nexport function convertDeploymentVersion(\n  v: coresdk.common.IWorkerDeploymentVersion | null | undefined\n): WorkerDeploymentVersion | undefined {\n  if (!v || !v.buildId) {\n    return undefined;\n  }\n\n  return {\n    buildId: v.buildId,\n    deploymentName: v.deploymentName ?? '',\n  };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=workflow-definition-options.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=workflow-handle.js.map","import type { temporal } from '@temporalio/proto';\nimport type { Workflow } from './interfaces';\nimport type { RetryPolicy } from './retry-policy';\nimport type { Duration } from './time';\nimport { makeProtoEnumConverters } from './internal-workflow';\nimport type { SearchAttributePair, SearchAttributes, TypedSearchAttributes } from './search-attributes';\nimport type { Priority } from './priority';\nimport type { WorkflowFunctionWithOptions } from './workflow-definition-options';\n\n/**\n * Defines what happens when trying to start a Workflow with the same ID as a *Closed* Workflow.\n *\n * See {@link WorkflowOptions.workflowIdConflictPolicy} for what happens when trying to start a\n * Workflow with the same ID as a *Running* Workflow.\n *\n * Concept: {@link https://docs.temporal.io/workflow-execution/workflowid-runid#workflow-id-reuse-policy | Workflow Id Reuse Policy}\n *\n * *Note: It is not possible to have two actively running Workflows with the same ID.*\n *\n */\nexport const WorkflowIdReusePolicy = {\n  /**\n   * The Workflow can be started if the previous Workflow is in a Closed state.\n   * @default\n   */\n  ALLOW_DUPLICATE: 'ALLOW_DUPLICATE',\n\n  /**\n   * The Workflow can be started if the previous Workflow is in a Closed state that is not Completed.\n   */\n  ALLOW_DUPLICATE_FAILED_ONLY: 'ALLOW_DUPLICATE_FAILED_ONLY',\n\n  /**\n   * The Workflow cannot be started.\n   */\n  REJECT_DUPLICATE: 'REJECT_DUPLICATE',\n\n  /**\n   * Terminate the current Workflow if one is already running; otherwise allow reusing the Workflow ID.\n   *\n   * @deprecated Use {@link WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE} instead, and\n   *             set `WorkflowOptions.workflowIdConflictPolicy` to\n   *             {@link WorkflowIdConflictPolicy.WORKFLOW_ID_CONFLICT_POLICY_TERMINATE_EXISTING}.\n   *             When using this option, `WorkflowOptions.workflowIdConflictPolicy` must be left unspecified.\n   */\n  TERMINATE_IF_RUNNING: 'TERMINATE_IF_RUNNING',\n\n  /// Anything below this line has been deprecated\n\n  /**\n   * No need to use this. If a `WorkflowIdReusePolicy` is set to this, or is not set at all, the default value will be used.\n   *\n   * @deprecated Either leave property `undefined`, or use {@link ALLOW_DUPLICATE} instead.\n   */\n  WORKFLOW_ID_REUSE_POLICY_UNSPECIFIED: undefined,\n\n  /** @deprecated Use {@link ALLOW_DUPLICATE} instead. */\n  WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE: 'ALLOW_DUPLICATE',\n\n  /** @deprecated Use {@link ALLOW_DUPLICATE_FAILED_ONLY} instead. */\n  WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE_FAILED_ONLY: 'ALLOW_DUPLICATE_FAILED_ONLY',\n\n  /** @deprecated Use {@link REJECT_DUPLICATE} instead. */\n  WORKFLOW_ID_REUSE_POLICY_REJECT_DUPLICATE: 'REJECT_DUPLICATE',\n\n  /** @deprecated Use {@link TERMINATE_IF_RUNNING} instead. */\n  WORKFLOW_ID_REUSE_POLICY_TERMINATE_IF_RUNNING: 'TERMINATE_IF_RUNNING',\n} as const;\nexport type WorkflowIdReusePolicy = (typeof WorkflowIdReusePolicy)[keyof typeof WorkflowIdReusePolicy];\n\nexport const [encodeWorkflowIdReusePolicy, decodeWorkflowIdReusePolicy] = makeProtoEnumConverters<\n  temporal.api.enums.v1.WorkflowIdReusePolicy,\n  typeof temporal.api.enums.v1.WorkflowIdReusePolicy,\n  keyof typeof temporal.api.enums.v1.WorkflowIdReusePolicy,\n  typeof WorkflowIdReusePolicy,\n  'WORKFLOW_ID_REUSE_POLICY_'\n>(\n  {\n    [WorkflowIdReusePolicy.ALLOW_DUPLICATE]: 1,\n    [WorkflowIdReusePolicy.ALLOW_DUPLICATE_FAILED_ONLY]: 2,\n    [WorkflowIdReusePolicy.REJECT_DUPLICATE]: 3,\n    [WorkflowIdReusePolicy.TERMINATE_IF_RUNNING]: 4, // eslint-disable-line @typescript-eslint/no-deprecated\n    UNSPECIFIED: 0,\n  } as const,\n  'WORKFLOW_ID_REUSE_POLICY_'\n);\n\n/**\n * Defines what happens when trying to start a Workflow with the same ID as a *Running* Workflow.\n *\n * See {@link WorkflowOptions.workflowIdReusePolicy} for what happens when trying to start a Workflow\n * with the same ID as a *Closed* Workflow.\n *\n * *Note: It is never possible to have two _actively running_ Workflows with the same ID.*\n */\nexport const WorkflowIdConflictPolicy = {\n  /**\n   * Do not start a new Workflow. Instead raise a `WorkflowExecutionAlreadyStartedError`.\n   */\n  FAIL: 'FAIL',\n\n  /**\n   * Do not start a new Workflow. Instead return a Workflow Handle for the already Running Workflow.\n   */\n  USE_EXISTING: 'USE_EXISTING',\n\n  /**\n   * Start a new Workflow, terminating the current workflow if one is already running.\n   */\n  TERMINATE_EXISTING: 'TERMINATE_EXISTING',\n} as const;\nexport type WorkflowIdConflictPolicy = (typeof WorkflowIdConflictPolicy)[keyof typeof WorkflowIdConflictPolicy];\n\nexport const [encodeWorkflowIdConflictPolicy, decodeWorkflowIdConflictPolicy] = makeProtoEnumConverters<\n  temporal.api.enums.v1.WorkflowIdConflictPolicy,\n  typeof temporal.api.enums.v1.WorkflowIdConflictPolicy,\n  keyof typeof temporal.api.enums.v1.WorkflowIdConflictPolicy,\n  typeof WorkflowIdConflictPolicy,\n  'WORKFLOW_ID_CONFLICT_POLICY_'\n>(\n  {\n    [WorkflowIdConflictPolicy.FAIL]: 1,\n    [WorkflowIdConflictPolicy.USE_EXISTING]: 2,\n    [WorkflowIdConflictPolicy.TERMINATE_EXISTING]: 3,\n    UNSPECIFIED: 0,\n  } as const,\n  'WORKFLOW_ID_CONFLICT_POLICY_'\n);\n\nexport interface BaseWorkflowOptions {\n  /**\n   * Defines what happens when trying to start a Workflow with the same ID as a *Closed* Workflow.\n   *\n   * *Note: It is not possible to have two actively running Workflows with the same ID.*\n   *\n   * @default WorkflowIdReusePolicy.WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE\n   */\n  workflowIdReusePolicy?: WorkflowIdReusePolicy;\n\n  /**\n   * Defines what happens when trying to start a Workflow with the same ID as a *Running* Workflow.\n   *\n   * *Note: It is not possible to have two actively running Workflows with the same ID.*\n   *\n   * @default WorkflowIdConflictPolicy.WORKFLOW_ID_CONFLICT_POLICY_UNSPECIFIED\n   */\n  workflowIdConflictPolicy?: WorkflowIdConflictPolicy;\n\n  /**\n   * Controls how a Workflow Execution is retried.\n   *\n   * By default, Workflow Executions are not retried. Do not override this behavior unless you know what you're doing.\n   * {@link https://docs.temporal.io/encyclopedia/retry-policies | More information}.\n   */\n  retry?: RetryPolicy;\n\n  /**\n   * Optional cron schedule for Workflow. If a cron schedule is specified, the Workflow will run as a cron based on the\n   * schedule. The scheduling will be based on UTC time. The schedule for the next run only happens after the current\n   * run is completed/failed/timeout. If a RetryPolicy is also supplied, and the Workflow failed or timed out, the\n   * Workflow will be retried based on the retry policy. While the Workflow is retrying, it won't schedule its next run.\n   * If the next schedule is due while the Workflow is running (or retrying), then it will skip that schedule. Cron\n   * Workflow will not stop until it is terminated or cancelled (by returning temporal.CanceledError).\n   * https://crontab.guru/ is useful for testing your cron expressions.\n   */\n  cronSchedule?: string;\n\n  /**\n   * Specifies additional non-indexed information to attach to the Workflow Execution. The values can be anything that\n   * is serializable by {@link DataConverter}.\n   */\n  memo?: Record<string, unknown>;\n\n  /**\n   * Specifies additional indexed information to attach to the Workflow Execution. More info:\n   * https://docs.temporal.io/docs/typescript/search-attributes\n   *\n   * Values are always converted using {@link JsonPayloadConverter}, even when a custom data converter is provided.\n   *\n   * @deprecated Use {@link typedSearchAttributes} instead.\n   */\n  searchAttributes?: SearchAttributes;\n\n  /**\n   * Specifies additional indexed information to attach to the Workflow Execution. More info:\n   * https://docs.temporal.io/docs/typescript/search-attributes\n   *\n   * Values are always converted using {@link JsonPayloadConverter}, even when a custom data converter is provided.\n   * Note that search attributes are not encoded, as such, do not include any sensitive information.\n   *\n   * If both {@link searchAttributes} and {@link typedSearchAttributes} are provided, conflicting keys will be overwritten\n   * by {@link typedSearchAttributes}.\n   */\n  typedSearchAttributes?: SearchAttributePair[] | TypedSearchAttributes;\n\n  /**\n   * General fixed details for this workflow execution that may appear in UI/CLI.\n   * This can be in Temporal markdown format and can span multiple lines.\n   *\n   * @experimental User metadata is a new API and susceptible to change.\n   */\n  staticDetails?: string;\n  /**\n   * A single-line fixed summary for this workflow execution that may appear in the UI/CLI.\n   * This can be in single-line Temporal markdown format.\n   *\n   * @experimental User metadata is a new API and susceptible to change.\n   */\n  staticSummary?: string;\n\n  /**\n   * Priority of a workflow\n   */\n  priority?: Priority;\n}\n\nexport type WithWorkflowArgs<W extends Workflow, T> = T &\n  (Parameters<W> extends [any, ...any[]]\n    ? {\n        /**\n         * Arguments to pass to the Workflow\n         */\n        args: Parameters<W> | Readonly<Parameters<W>>;\n      }\n    : {\n        /**\n         * Arguments to pass to the Workflow\n         */\n        args?: Parameters<W> | Readonly<Parameters<W>>;\n      });\n\nexport interface WorkflowDurationOptions {\n  /**\n   * The time after which workflow run is automatically terminated by Temporal service. Do not\n   * rely on run timeout for business level timeouts. It is preferred to use in workflow timers\n   * for this purpose.\n   *\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  workflowRunTimeout?: Duration;\n\n  /**\n   *\n   * The time after which workflow execution (which includes run retries and continue as new) is\n   * automatically terminated by Temporal service. Do not rely on execution timeout for business\n   * level timeouts. It is preferred to use in workflow timers for this purpose.\n   *\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  workflowExecutionTimeout?: Duration;\n\n  /**\n   * Maximum execution time of a single workflow task. Default is 10 seconds.\n   *\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  workflowTaskTimeout?: Duration;\n}\n\nexport type CommonWorkflowOptions = BaseWorkflowOptions & WorkflowDurationOptions;\n\nexport function extractWorkflowType<T extends Workflow>(\n  workflowTypeOrFunc: string | T | WorkflowFunctionWithOptions<any[], any>\n): string {\n  if (typeof workflowTypeOrFunc === 'string') return workflowTypeOrFunc as string;\n  if (typeof workflowTypeOrFunc === 'function') {\n    if (workflowTypeOrFunc?.name) return workflowTypeOrFunc.name;\n    throw new TypeError('Invalid workflow type: the workflow function is anonymous');\n  }\n  throw new TypeError(\n    `Invalid workflow type: expected either a string or a function, got '${typeof workflowTypeOrFunc}'`\n  );\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=versioning-intent.js.map","import type { temporal } from '@temporalio/proto';\nimport { makeProtoEnumConverters } from './internal-workflow';\n\n/** @deprecated: Use {@link TypedSearchAttributes} instead */\nexport type SearchAttributeValueOrReadonly = SearchAttributeValue | Readonly<SearchAttributeValue> | undefined;\n/** @deprecated: Use {@link TypedSearchAttributes} instead */\nexport type SearchAttributes = Record<string, SearchAttributeValueOrReadonly>;\n/** @deprecated: Use {@link TypedSearchAttributes} instead */\nexport type SearchAttributeValue = string[] | number[] | boolean[] | Date[];\n\nexport const SearchAttributeType = {\n  TEXT: 'TEXT',\n  KEYWORD: 'KEYWORD',\n  INT: 'INT',\n  DOUBLE: 'DOUBLE',\n  BOOL: 'BOOL',\n  DATETIME: 'DATETIME',\n  KEYWORD_LIST: 'KEYWORD_LIST',\n} as const;\nexport type SearchAttributeType = (typeof SearchAttributeType)[keyof typeof SearchAttributeType];\n\n// Note: encodeSearchAttributeIndexedValueType exported for use in tests to register search attributes\n// ts-prune-ignore-next\nexport const [encodeSearchAttributeIndexedValueType, _] = makeProtoEnumConverters<\n  temporal.api.enums.v1.IndexedValueType,\n  typeof temporal.api.enums.v1.IndexedValueType,\n  keyof typeof temporal.api.enums.v1.IndexedValueType,\n  typeof SearchAttributeType,\n  'INDEXED_VALUE_TYPE_'\n>(\n  {\n    [SearchAttributeType.TEXT]: 1,\n    [SearchAttributeType.KEYWORD]: 2,\n    [SearchAttributeType.INT]: 3,\n    [SearchAttributeType.DOUBLE]: 4,\n    [SearchAttributeType.BOOL]: 5,\n    [SearchAttributeType.DATETIME]: 6,\n    [SearchAttributeType.KEYWORD_LIST]: 7,\n    UNSPECIFIED: 0,\n  } as const,\n  'INDEXED_VALUE_TYPE_'\n);\n\ninterface IndexedValueTypeMapping {\n  TEXT: string;\n  KEYWORD: string;\n  INT: number;\n  DOUBLE: number;\n  BOOL: boolean;\n  DATETIME: Date;\n  KEYWORD_LIST: string[];\n}\n\nexport function isValidValueForType<T extends SearchAttributeType>(\n  type: T,\n  value: unknown\n): value is IndexedValueTypeMapping[T] {\n  switch (type) {\n    case SearchAttributeType.TEXT:\n    case SearchAttributeType.KEYWORD:\n      return typeof value === 'string';\n    case SearchAttributeType.INT:\n      return Number.isInteger(value);\n    case SearchAttributeType.DOUBLE:\n      return typeof value === 'number';\n    case SearchAttributeType.BOOL:\n      return typeof value === 'boolean';\n    case SearchAttributeType.DATETIME:\n      return value instanceof Date;\n    case SearchAttributeType.KEYWORD_LIST:\n      return Array.isArray(value) && value.every((item) => typeof item === 'string');\n    default:\n      return false;\n  }\n}\n\nexport interface SearchAttributeKey<T extends SearchAttributeType> {\n  name: string;\n  type: T;\n}\n\nexport function defineSearchAttributeKey<T extends SearchAttributeType>(name: string, type: T): SearchAttributeKey<T> {\n  return { name, type };\n}\n\nclass BaseSearchAttributeValue<T extends SearchAttributeType, V = IndexedValueTypeMapping[T]> {\n  private readonly _type: T;\n  private readonly _value: V;\n\n  constructor(type: T, value: V) {\n    this._type = type;\n    this._value = value;\n  }\n\n  get type(): T {\n    return this._type;\n  }\n\n  get value(): V {\n    return this._value;\n  }\n}\n\n// Internal type for class private data.\n// Exported for use in payload conversion.\nexport class TypedSearchAttributeValue<T extends SearchAttributeType> extends BaseSearchAttributeValue<T> {}\n// ts-prune-ignore-next\nexport class TypedSearchAttributeUpdateValue<T extends SearchAttributeType> extends BaseSearchAttributeValue<\n  T,\n  IndexedValueTypeMapping[T] | null\n> {}\n\nexport type SearchAttributePair = {\n  [T in SearchAttributeType]: { key: SearchAttributeKey<T>; value: IndexedValueTypeMapping[T] };\n}[SearchAttributeType];\n\nexport type SearchAttributeUpdatePair = {\n  [T in SearchAttributeType]: { key: SearchAttributeKey<T>; value: IndexedValueTypeMapping[T] | null };\n}[SearchAttributeType];\n\nexport class TypedSearchAttributes {\n  private searchAttributes: Record<string, TypedSearchAttributeValue<SearchAttributeType>> = {};\n\n  constructor(initialAttributes?: SearchAttributePair[]) {\n    if (initialAttributes === undefined) return;\n    for (const pair of initialAttributes) {\n      if (pair.key.name in this.searchAttributes) {\n        throw new Error(`Duplicate search attribute key: ${pair.key.name}`);\n      }\n      this.searchAttributes[pair.key.name] = new TypedSearchAttributeValue(pair.key.type, pair.value);\n    }\n  }\n\n  get<T extends SearchAttributeType>(key: SearchAttributeKey<T>): IndexedValueTypeMapping[T] | undefined {\n    const attr = this.searchAttributes[key.name];\n    // Key not found or type mismatch.\n    if (attr === undefined || !isValidValueForType(key.type, attr.value)) {\n      return undefined;\n    }\n    return attr.value;\n  }\n\n  /** Returns a deep copy of the given TypedSearchAttributes instance */\n  copy(): TypedSearchAttributes {\n    const state: Record<string, TypedSearchAttributeValue<SearchAttributeType>> = {};\n\n    for (const [key, attr] of Object.entries(this.searchAttributes)) {\n      // Create a new instance with the same properties\n      let value = attr.value;\n      // For non-primitive types, create a deep copy\n      if (attr.value instanceof Date) {\n        value = new Date(attr.value);\n      } else if (Array.isArray(attr.value)) {\n        value = [...attr.value];\n      }\n      state[key] = new TypedSearchAttributeValue(attr.type, value);\n    }\n\n    // Create return value with manually assigned state.\n    const res = new TypedSearchAttributes();\n    res.searchAttributes = state;\n    return res;\n  }\n\n  /**\n   * @hidden\n   * Return JSON representation of this class as SearchAttributePair[]\n   * Default toJSON method is not used because it's JSON representation includes private state.\n   */\n  toJSON(): SearchAttributePair[] {\n    return this.getAll();\n  }\n\n  /** Returns a copy of the current TypedSearchAttributes instance with the updated attributes. */\n  updateCopy(updates: SearchAttributeUpdatePair[]): TypedSearchAttributes {\n    // Create a deep copy of the current instance.\n    const res = this.copy();\n    // Apply updates.\n    res.update(updates);\n    return res;\n  }\n\n  // Performs direct mutation on the current instance.\n  private update(updates: SearchAttributeUpdatePair[]) {\n    // Apply updates.\n    for (const pair of updates) {\n      // Delete attribute.\n      if (pair.value === null) {\n        // Delete only if the update matches a key and type.\n        const attrVal = this.searchAttributes[pair.key.name];\n        if (attrVal && attrVal.type === pair.key.type) {\n          delete this.searchAttributes[pair.key.name];\n        }\n        continue;\n      }\n      // Add or update attribute.\n      this.searchAttributes[pair.key.name] = new TypedSearchAttributeValue(pair.key.type, pair.value);\n    }\n  }\n\n  getAll(): SearchAttributePair[] {\n    const res: SearchAttributePair[] = [];\n    for (const [key, attr] of Object.entries(this.searchAttributes)) {\n      const attrKey = { name: key, type: attr.type };\n      // Sanity check, should always be legal.\n      if (isValidValueForType(attrKey.type, attr.value)) {\n        res.push({ key: attrKey, value: attr.value } as SearchAttributePair);\n      }\n    }\n    return res;\n  }\n\n  static getKeyFromUntyped(\n    key: string,\n    value: SearchAttributeValueOrReadonly\n  ): SearchAttributeKey<SearchAttributeType> | undefined {\n    if (value == null) {\n      return;\n    }\n\n    // Unpack single-element arrays.\n    const val = value.length === 1 ? value[0] : value;\n    switch (typeof val) {\n      case 'string':\n        // Check if val is an ISO string, if so, return a DATETIME key.\n        if (!isNaN(Date.parse(val)) && Date.parse(val) === new Date(val).getTime()) {\n          return { name: key, type: SearchAttributeType.DATETIME };\n        }\n        return { name: key, type: SearchAttributeType.TEXT };\n      case 'number':\n        return {\n          name: key,\n          type: Number.isInteger(val) ? SearchAttributeType.INT : SearchAttributeType.DOUBLE,\n        };\n      case 'boolean':\n        return { name: key, type: SearchAttributeType.BOOL };\n      case 'object':\n        if (val instanceof Date) {\n          return { name: key, type: SearchAttributeType.DATETIME };\n        }\n        if (Array.isArray(val) && val.every((item) => typeof item === 'string')) {\n          return { name: key, type: SearchAttributeType.KEYWORD_LIST };\n        }\n        return;\n      default:\n        return;\n    }\n  }\n\n  static toMetadataType(type: SearchAttributeType): string {\n    switch (type) {\n      case SearchAttributeType.TEXT:\n        return 'Text';\n      case SearchAttributeType.KEYWORD:\n        return 'Keyword';\n      case SearchAttributeType.INT:\n        return 'Int';\n      case SearchAttributeType.DOUBLE:\n        return 'Double';\n      case SearchAttributeType.BOOL:\n        return 'Bool';\n      case SearchAttributeType.DATETIME:\n        return 'Datetime';\n      case SearchAttributeType.KEYWORD_LIST:\n        return 'KeywordList';\n      default:\n        throw new Error(`Unknown search attribute type: ${type}`);\n    }\n  }\n\n  static toSearchAttributeType(type: string): SearchAttributeType | undefined {\n    // The type metadata is usually in PascalCase (e.g. \"KeywordList\") but in\n    // rare cases may be in SCREAMING_SNAKE_CASE (e.g. \"INDEXED_VALUE_TYPE_KEYWORD_LIST\").\n    switch (type) {\n      case 'Text':\n      case 'INDEXED_VALUE_TYPE_TEXT':\n        return SearchAttributeType.TEXT;\n      case 'Keyword':\n      case 'INDEXED_VALUE_TYPE_KEYWORD':\n        return SearchAttributeType.KEYWORD;\n      case 'Int':\n      case 'INDEXED_VALUE_TYPE_INT':\n        return SearchAttributeType.INT;\n      case 'Double':\n      case 'INDEXED_VALUE_TYPE_DOUBLE':\n        return SearchAttributeType.DOUBLE;\n      case 'Bool':\n      case 'INDEXED_VALUE_TYPE_BOOL':\n        return SearchAttributeType.BOOL;\n      case 'Datetime':\n      case 'INDEXED_VALUE_TYPE_DATETIME':\n        return SearchAttributeType.DATETIME;\n      case 'KeywordList':\n      case 'INDEXED_VALUE_TYPE_KEYWORD_LIST':\n        return SearchAttributeType.KEYWORD_LIST;\n      default:\n        return;\n    }\n  }\n}\n","/**\n * Common library for code that's used across the Client, Worker, and/or Workflow\n *\n * @module\n */\n\nimport * as encoding from './encoding';\nimport * as helpers from './type-helpers';\n\nexport * from './activity-options';\nexport { ActivityCancellationDetailsOptions, ActivityCancellationDetails } from './activity-cancellation-details';\nexport { SuggestContinueAsNewReason } from './continue-as-new';\nexport * from './converter/data-converter';\nexport * from './converter/failure-converter';\nexport * from './converter/payload-codec';\nexport * from './converter/payload-converter';\nexport type {\n  ActivitySerializationContext,\n  SerializationContext,\n  WorkflowSerializationContext,\n} from './converter/serialization-context';\nexport * from './converter/types';\nexport * from './deprecated-time';\nexport * from './errors';\nexport * from './failure';\nexport { Headers, Next } from './interceptors';\nexport * from './interfaces';\nexport * from './logger';\nexport * from './priority';\nexport * from './metrics';\nexport * from './retry-policy';\nexport type { Timestamp, Duration, StringValue } from './time';\nexport * from './worker-deployments';\nexport * from './workflow-definition-options';\nexport * from './workflow-handle';\nexport * from './workflow-options';\nexport * from './versioning-intent';\nexport {\n  SearchAttributes,\n  SearchAttributeValue,\n  SearchAttributeType,\n  SearchAttributePair,\n  SearchAttributeUpdatePair,\n  TypedSearchAttributes,\n  defineSearchAttributeKey,\n} from './search-attributes';\n\n/**\n * Encode a UTF-8 string into a Uint8Array\n *\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function u8(s: string): Uint8Array {\n  return encoding.encode(s);\n}\n\n/**\n * Decode a Uint8Array into a UTF-8 string\n *\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function str(arr: Uint8Array): string {\n  return encoding.decode(arr);\n}\n\n/**\n * Get `error.message` (or `undefined` if not present)\n *\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function errorMessage(error: unknown): string | undefined {\n  return helpers.errorMessage(error);\n}\n\n/**\n * Get `error.code` (or `undefined` if not present)\n *\n * @hidden\n * @deprecated - meant for internal use only\n */\nexport function errorCode(error: unknown): string | undefined {\n  return helpers.errorCode(error);\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nexport enum Status {\n  OK = 0,\n  CANCELLED,\n  UNKNOWN,\n  INVALID_ARGUMENT,\n  DEADLINE_EXCEEDED,\n  NOT_FOUND,\n  ALREADY_EXISTS,\n  PERMISSION_DENIED,\n  RESOURCE_EXHAUSTED,\n  FAILED_PRECONDITION,\n  ABORTED,\n  OUT_OF_RANGE,\n  UNIMPLEMENTED,\n  INTERNAL,\n  UNAVAILABLE,\n  DATA_LOSS,\n  UNAUTHENTICATED,\n}\n\nexport enum LogVerbosity {\n  DEBUG = 0,\n  INFO,\n  ERROR,\n  NONE,\n}\n\n/**\n * NOTE: This enum is not currently used in any implemented API in this\n * library. It is included only for type parity with the other implementation.\n */\nexport enum Propagate {\n  DEADLINE = 1,\n  CENSUS_STATS_CONTEXT = 2,\n  CENSUS_TRACING_CONTEXT = 4,\n  CANCELLATION = 8,\n  // https://github.com/grpc/grpc/blob/master/include/grpc/impl/codegen/propagation_bits.h#L43\n  DEFAULTS = 0xffff |\n    Propagate.DEADLINE |\n    Propagate.CENSUS_STATS_CONTEXT |\n    Propagate.CENSUS_TRACING_CONTEXT |\n    Propagate.CANCELLATION,\n}\n\n// -1 means unlimited\nexport const DEFAULT_MAX_SEND_MESSAGE_LENGTH = -1;\n\n// 4 MB default\nexport const DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH = 4 * 1024 * 1024;\n","{\n  \"name\": \"@grpc/grpc-js\",\n  \"version\": \"1.14.4\",\n  \"description\": \"gRPC Library for Node - pure JS implementation\",\n  \"homepage\": \"https://grpc.io/\",\n  \"repository\": \"https://github.com/grpc/grpc-node/tree/master/packages/grpc-js\",\n  \"main\": \"build/src/index.js\",\n  \"engines\": {\n    \"node\": \">=12.10.0\"\n  },\n  \"keywords\": [],\n  \"author\": {\n    \"name\": \"Google Inc.\"\n  },\n  \"types\": \"build/src/index.d.ts\",\n  \"license\": \"Apache-2.0\",\n  \"devDependencies\": {\n    \"@grpc/proto-loader\": \"file:../proto-loader\",\n    \"@types/gulp\": \"^4.0.17\",\n    \"@types/gulp-mocha\": \"0.0.37\",\n    \"@types/lodash\": \"^4.14.202\",\n    \"@types/mocha\": \"^10.0.6\",\n    \"@types/ncp\": \"^2.0.8\",\n    \"@types/node\": \">=20.11.20\",\n    \"@types/pify\": \"^5.0.4\",\n    \"@types/semver\": \"^7.5.8\",\n    \"@typescript-eslint/eslint-plugin\": \"^7.1.0\",\n    \"@typescript-eslint/parser\": \"^7.1.0\",\n    \"@typescript-eslint/typescript-estree\": \"^7.1.0\",\n    \"clang-format\": \"^1.8.0\",\n    \"eslint\": \"^8.42.0\",\n    \"eslint-config-prettier\": \"^8.8.0\",\n    \"eslint-plugin-node\": \"^11.1.0\",\n    \"eslint-plugin-prettier\": \"^4.2.1\",\n    \"execa\": \"^2.0.3\",\n    \"gulp\": \"^4.0.2\",\n    \"gulp-mocha\": \"^6.0.0\",\n    \"lodash\": \"^4.17.21\",\n    \"madge\": \"^5.0.1\",\n    \"mocha-jenkins-reporter\": \"^0.4.1\",\n    \"ncp\": \"^2.0.0\",\n    \"pify\": \"^4.0.1\",\n    \"prettier\": \"^2.8.8\",\n    \"rimraf\": \"^3.0.2\",\n    \"semver\": \"^7.6.0\",\n    \"ts-node\": \"^10.9.2\",\n    \"typescript\": \"^5.3.3\"\n  },\n  \"contributors\": [\n    {\n      \"name\": \"Google Inc.\"\n    }\n  ],\n  \"scripts\": {\n    \"build\": \"npm run compile\",\n    \"clean\": \"rimraf ./build\",\n    \"compile\": \"tsc -p .\",\n    \"format\": \"clang-format -i -style=\\\"{Language: JavaScript, BasedOnStyle: Google, ColumnLimit: 80}\\\" src/*.ts test/*.ts\",\n    \"lint\": \"eslint src/*.ts test/*.ts\",\n    \"prepare\": \"npm run copy-protos && npm run generate-types && npm run generate-test-types && npm run compile\",\n    \"test\": \"gulp test\",\n    \"check\": \"npm run lint\",\n    \"fix\": \"eslint --fix src/*.ts test/*.ts\",\n    \"pretest\": \"npm run generate-types && npm run generate-test-types && npm run compile\",\n    \"posttest\": \"npm run check && madge -c ./build/src\",\n    \"generate-types\": \"proto-loader-gen-types --keepCase --longs String --enums String --defaults --oneofs --includeComments --includeDirs proto/ --include-dirs proto/ proto/xds/ proto/protoc-gen-validate/ -O src/generated/ --grpcLib ../index channelz.proto xds/service/orca/v3/orca.proto\",\n    \"generate-test-types\": \"proto-loader-gen-types --keepCase --longs String --enums String --defaults --oneofs --includeComments --include-dirs test/fixtures/ -O test/generated/ --grpcLib ../../src/index test_service.proto echo_service.proto\",\n    \"copy-protos\": \"node ./copy-protos\"\n  },\n  \"dependencies\": {\n    \"@grpc/proto-loader\": \"^0.8.0\",\n    \"@js-sdsl/ordered-map\": \"^4.4.2\"\n  },\n  \"files\": [\n    \"src/**/*.ts\",\n    \"build/src/**/*.{js,d.ts,js.map}\",\n    \"proto/**/*.proto\",\n    \"proto/**/LICENSE\",\n    \"LICENSE\",\n    \"deps/envoy-api/envoy/api/v2/**/*.proto\",\n    \"deps/envoy-api/envoy/config/**/*.proto\",\n    \"deps/envoy-api/envoy/service/**/*.proto\",\n    \"deps/envoy-api/envoy/type/**/*.proto\",\n    \"deps/udpa/udpa/**/*.proto\",\n    \"deps/googleapis/google/api/*.proto\",\n    \"deps/googleapis/google/rpc/*.proto\",\n    \"deps/protoc-gen-validate/validate/**/*.proto\"\n  ]\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { LogVerbosity } from './constants';\nimport { pid } from 'process';\n\nconst clientVersion = require('../../package.json').version;\n\nconst DEFAULT_LOGGER: Partial<Console> = {\n  error: (message?: any, ...optionalParams: any[]) => {\n    console.error('E ' + message, ...optionalParams);\n  },\n  info: (message?: any, ...optionalParams: any[]) => {\n    console.error('I ' + message, ...optionalParams);\n  },\n  debug: (message?: any, ...optionalParams: any[]) => {\n    console.error('D ' + message, ...optionalParams);\n  },\n};\n\nlet _logger: Partial<Console> = DEFAULT_LOGGER;\nlet _logVerbosity: LogVerbosity = LogVerbosity.ERROR;\n\nconst verbosityString =\n  process.env.GRPC_NODE_VERBOSITY ?? process.env.GRPC_VERBOSITY ?? '';\n\nswitch (verbosityString.toUpperCase()) {\n  case 'DEBUG':\n    _logVerbosity = LogVerbosity.DEBUG;\n    break;\n  case 'INFO':\n    _logVerbosity = LogVerbosity.INFO;\n    break;\n  case 'ERROR':\n    _logVerbosity = LogVerbosity.ERROR;\n    break;\n  case 'NONE':\n    _logVerbosity = LogVerbosity.NONE;\n    break;\n  default:\n  // Ignore any other values\n}\n\nexport const getLogger = (): Partial<Console> => {\n  return _logger;\n};\n\nexport const setLogger = (logger: Partial<Console>): void => {\n  _logger = logger;\n};\n\nexport const setLoggerVerbosity = (verbosity: LogVerbosity): void => {\n  _logVerbosity = verbosity;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const log = (severity: LogVerbosity, ...args: any[]): void => {\n  let logFunction: typeof DEFAULT_LOGGER.error;\n  if (severity >= _logVerbosity) {\n    switch (severity) {\n      case LogVerbosity.DEBUG:\n        logFunction = _logger.debug;\n        break;\n      case LogVerbosity.INFO:\n        logFunction = _logger.info;\n        break;\n      case LogVerbosity.ERROR:\n        logFunction = _logger.error;\n        break;\n    }\n    /* Fall back to _logger.error when other methods are not available for\n     * compatiblity with older behavior that always logged to _logger.error */\n    if (!logFunction) {\n      logFunction = _logger.error;\n    }\n    if (logFunction) {\n      logFunction.bind(_logger)(...args);\n    }\n  }\n};\n\nconst tracersString =\n  process.env.GRPC_NODE_TRACE ?? process.env.GRPC_TRACE ?? '';\nconst enabledTracers = new Set<string>();\nconst disabledTracers = new Set<string>();\nfor (const tracerName of tracersString.split(',')) {\n  if (tracerName.startsWith('-')) {\n    disabledTracers.add(tracerName.substring(1));\n  } else {\n    enabledTracers.add(tracerName);\n  }\n}\nconst allEnabled = enabledTracers.has('all');\n\nexport function trace(\n  severity: LogVerbosity,\n  tracer: string,\n  text: string\n): void {\n  if (isTracerEnabled(tracer)) {\n    log(\n      severity,\n      new Date().toISOString() +\n        ' | v' +\n        clientVersion +\n        ' ' +\n        pid +\n        ' | ' +\n        tracer +\n        ' | ' +\n        text\n    );\n  }\n}\n\nexport function isTracerEnabled(tracer: string): boolean {\n  return (\n    !disabledTracers.has(tracer) && (allEnabled || enabledTracers.has(tracer))\n  );\n}\n","/*\n * Copyright 2022 gRPC authors.\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 */\n\nexport function getErrorMessage(error: unknown): string {\n  if (error instanceof Error) {\n    return error.message;\n  } else {\n    return String(error);\n  }\n}\n\nexport function getErrorCode(error: unknown): number | null {\n  if (\n    typeof error === 'object' &&\n    error !== null &&\n    'code' in error &&\n    typeof (error as Record<string, unknown>).code === 'number'\n  ) {\n    return (error as Record<string, number>).code;\n  } else {\n    return null;\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport * as http2 from 'http2';\nimport { log } from './logging';\nimport { LogVerbosity } from './constants';\nimport { getErrorMessage } from './error';\nconst LEGAL_KEY_REGEX = /^[:0-9a-z_.-]+$/;\nconst LEGAL_NON_BINARY_VALUE_REGEX = /^[ -~]*$/;\n\nexport type MetadataValue = string | Buffer;\nexport type MetadataObject = Map<string, MetadataValue[]>;\n\nfunction isLegalKey(key: string): boolean {\n  return LEGAL_KEY_REGEX.test(key);\n}\n\nfunction isLegalNonBinaryValue(value: string): boolean {\n  return LEGAL_NON_BINARY_VALUE_REGEX.test(value);\n}\n\nfunction isBinaryKey(key: string): boolean {\n  return key.endsWith('-bin');\n}\n\nfunction isCustomMetadata(key: string): boolean {\n  return !key.startsWith('grpc-');\n}\n\nfunction normalizeKey(key: string): string {\n  return key.toLowerCase();\n}\n\nfunction validate(key: string, value?: MetadataValue): void {\n  if (!isLegalKey(key)) {\n    throw new Error('Metadata key \"' + key + '\" contains illegal characters');\n  }\n\n  if (value !== null && value !== undefined) {\n    if (isBinaryKey(key)) {\n      if (!Buffer.isBuffer(value)) {\n        throw new Error(\"keys that end with '-bin' must have Buffer values\");\n      }\n    } else {\n      if (Buffer.isBuffer(value)) {\n        throw new Error(\n          \"keys that don't end with '-bin' must have String values\"\n        );\n      }\n      if (!isLegalNonBinaryValue(value)) {\n        throw new Error(\n          'Metadata string value \"' + value + '\" contains illegal characters'\n        );\n      }\n    }\n  }\n}\n\nexport interface MetadataOptions {\n  /* Signal that the request is idempotent. Defaults to false */\n  idempotentRequest?: boolean;\n  /* Signal that the call should not return UNAVAILABLE before it has\n   * started. Defaults to false. */\n  waitForReady?: boolean;\n  /* Signal that the call is cacheable. GRPC is free to use GET verb.\n   * Defaults to false */\n  cacheableRequest?: boolean;\n  /* Signal that the initial metadata should be corked. Defaults to false. */\n  corked?: boolean;\n}\n\n/**\n * A class for storing metadata. Keys are normalized to lowercase ASCII.\n */\nexport class Metadata {\n  protected internalRepr: MetadataObject = new Map<string, MetadataValue[]>();\n  private options: MetadataOptions;\n  private opaqueData: Map<string, unknown> = new Map();\n\n  constructor(options: MetadataOptions = {}) {\n    this.options = options;\n  }\n\n  /**\n   * Sets the given value for the given key by replacing any other values\n   * associated with that key. Normalizes the key.\n   * @param key The key to whose value should be set.\n   * @param value The value to set. Must be a buffer if and only\n   *   if the normalized key ends with '-bin'.\n   */\n  set(key: string, value: MetadataValue): void {\n    key = normalizeKey(key);\n    validate(key, value);\n    this.internalRepr.set(key, [value]);\n  }\n\n  /**\n   * Adds the given value for the given key by appending to a list of previous\n   * values associated with that key. Normalizes the key.\n   * @param key The key for which a new value should be appended.\n   * @param value The value to add. Must be a buffer if and only\n   *   if the normalized key ends with '-bin'.\n   */\n  add(key: string, value: MetadataValue): void {\n    key = normalizeKey(key);\n    validate(key, value);\n\n    const existingValue: MetadataValue[] | undefined =\n      this.internalRepr.get(key);\n\n    if (existingValue === undefined) {\n      this.internalRepr.set(key, [value]);\n    } else {\n      existingValue.push(value);\n    }\n  }\n\n  /**\n   * Removes the given key and any associated values. Normalizes the key.\n   * @param key The key whose values should be removed.\n   */\n  remove(key: string): void {\n    key = normalizeKey(key);\n    // validate(key);\n    this.internalRepr.delete(key);\n  }\n\n  /**\n   * Gets a list of all values associated with the key. Normalizes the key.\n   * @param key The key whose value should be retrieved.\n   * @return A list of values associated with the given key.\n   */\n  get(key: string): MetadataValue[] {\n    key = normalizeKey(key);\n    // validate(key);\n    return this.internalRepr.get(key) || [];\n  }\n\n  /**\n   * Gets a plain object mapping each key to the first value associated with it.\n   * This reflects the most common way that people will want to see metadata.\n   * @return A key/value mapping of the metadata.\n   */\n  getMap(): { [key: string]: MetadataValue } {\n    const result: { [key: string]: MetadataValue } = {};\n\n    for (const [key, values] of this.internalRepr) {\n      if (values.length > 0) {\n        const v = values[0];\n        result[key] = Buffer.isBuffer(v) ? Buffer.from(v) : v;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Clones the metadata object.\n   * @return The newly cloned object.\n   */\n  clone(): Metadata {\n    const newMetadata = new Metadata(this.options);\n    const newInternalRepr = newMetadata.internalRepr;\n\n    for (const [key, value] of this.internalRepr) {\n      const clonedValue: MetadataValue[] = value.map(v => {\n        if (Buffer.isBuffer(v)) {\n          return Buffer.from(v);\n        } else {\n          return v;\n        }\n      });\n\n      newInternalRepr.set(key, clonedValue);\n    }\n\n    return newMetadata;\n  }\n\n  /**\n   * Merges all key-value pairs from a given Metadata object into this one.\n   * If both this object and the given object have values in the same key,\n   * values from the other Metadata object will be appended to this object's\n   * values.\n   * @param other A Metadata object.\n   */\n  merge(other: Metadata): void {\n    for (const [key, values] of other.internalRepr) {\n      const mergedValue: MetadataValue[] = (\n        this.internalRepr.get(key) || []\n      ).concat(values);\n\n      this.internalRepr.set(key, mergedValue);\n    }\n  }\n\n  setOptions(options: MetadataOptions) {\n    this.options = options;\n  }\n\n  getOptions(): MetadataOptions {\n    return this.options;\n  }\n\n  /**\n   * Creates an OutgoingHttpHeaders object that can be used with the http2 API.\n   */\n  toHttp2Headers(): http2.OutgoingHttpHeaders {\n    // NOTE: Node <8.9 formats http2 headers incorrectly.\n    const result: http2.OutgoingHttpHeaders = {};\n\n    for (const [key, values] of this.internalRepr) {\n      if (key.startsWith(':')) {\n        continue;\n      }\n      // We assume that the user's interaction with this object is limited to\n      // through its public API (i.e. keys and values are already validated).\n      result[key] = values.map(bufToString);\n    }\n\n    return result;\n  }\n\n  /**\n   * This modifies the behavior of JSON.stringify to show an object\n   * representation of the metadata map.\n   */\n  toJSON() {\n    const result: { [key: string]: MetadataValue[] } = {};\n    for (const [key, values] of this.internalRepr) {\n      result[key] = values;\n    }\n    return result;\n  }\n\n  /**\n   * Attach additional data of any type to the metadata object, which will not\n   * be included when sending headers. The data can later be retrieved with\n   * `getOpaque`. Keys with the prefix `grpc` are reserved for use by this\n   * library.\n   * @param key\n   * @param value\n   */\n  setOpaque(key: string, value: unknown) {\n    this.opaqueData.set(key, value);\n  }\n\n  /**\n   * Retrieve data previously added with `setOpaque`.\n   * @param key\n   * @returns\n   */\n  getOpaque(key: string) {\n    return this.opaqueData.get(key);\n  }\n\n  /**\n   * Returns a new Metadata object based fields in a given IncomingHttpHeaders\n   * object.\n   * @param headers An IncomingHttpHeaders object.\n   */\n  static fromHttp2Headers(headers: http2.IncomingHttpHeaders): Metadata {\n    const result = new Metadata();\n    for (const key of Object.keys(headers)) {\n      // Reserved headers (beginning with `:`) are not valid keys.\n      if (key.charAt(0) === ':') {\n        continue;\n      }\n\n      const values = headers[key];\n\n      try {\n        if (isBinaryKey(key)) {\n          if (Array.isArray(values)) {\n            values.forEach(value => {\n              result.add(key, Buffer.from(value, 'base64'));\n            });\n          } else if (values !== undefined) {\n            if (isCustomMetadata(key)) {\n              values.split(',').forEach(v => {\n                result.add(key, Buffer.from(v.trim(), 'base64'));\n              });\n            } else {\n              result.add(key, Buffer.from(values, 'base64'));\n            }\n          }\n        } else {\n          if (Array.isArray(values)) {\n            values.forEach(value => {\n              result.add(key, value);\n            });\n          } else if (values !== undefined) {\n            result.add(key, values);\n          }\n        }\n      } catch (error) {\n        const message = `Failed to add metadata entry ${key}: ${values}. ${getErrorMessage(\n          error\n        )}. For more information see https://github.com/grpc/grpc-node/issues/1173`;\n        log(LogVerbosity.ERROR, message);\n      }\n    }\n\n    return result;\n  }\n}\n\nconst bufToString = (val: string | Buffer): string => {\n  return Buffer.isBuffer(val) ? val.toString('base64') : val;\n};\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { Metadata } from './metadata';\n\nexport interface CallMetadataOptions {\n  method_name: string;\n  service_url: string;\n}\n\nexport type CallMetadataGenerator = (\n  options: CallMetadataOptions,\n  cb: (err: Error | null, metadata?: Metadata) => void\n) => void;\n\n// google-auth-library pre-v2.0.0 does not have getRequestHeaders\n// but has getRequestMetadata, which is deprecated in v2.0.0\nexport interface OldOAuth2Client {\n  getRequestMetadata: (\n    url: string,\n    callback: (\n      err: Error | null,\n      headers?: {\n        [index: string]: string;\n      }\n    ) => void\n  ) => void;\n}\n\nexport interface CurrentOAuth2Client {\n  getRequestHeaders: (url?: string) => Promise<{ [index: string]: string }>;\n}\n\nexport type OAuth2Client = OldOAuth2Client | CurrentOAuth2Client;\n\nfunction isCurrentOauth2Client(\n  client: OAuth2Client\n): client is CurrentOAuth2Client {\n  return (\n    'getRequestHeaders' in client &&\n    typeof client.getRequestHeaders === 'function'\n  );\n}\n\n/**\n * A class that represents a generic method of adding authentication-related\n * metadata on a per-request basis.\n */\nexport abstract class CallCredentials {\n  /**\n   * Asynchronously generates a new Metadata object.\n   * @param options Options used in generating the Metadata object.\n   */\n  abstract generateMetadata(options: CallMetadataOptions): Promise<Metadata>;\n  /**\n   * Creates a new CallCredentials object from properties of both this and\n   * another CallCredentials object. This object's metadata generator will be\n   * called first.\n   * @param callCredentials The other CallCredentials object.\n   */\n  abstract compose(callCredentials: CallCredentials): CallCredentials;\n\n  /**\n   * Check whether two call credentials objects are equal. Separate\n   * SingleCallCredentials with identical metadata generator functions are\n   * equal.\n   * @param other The other CallCredentials object to compare with.\n   */\n  abstract _equals(other: CallCredentials): boolean;\n\n  /**\n   * Creates a new CallCredentials object from a given function that generates\n   * Metadata objects.\n   * @param metadataGenerator A function that accepts a set of options, and\n   * generates a Metadata object based on these options, which is passed back\n   * to the caller via a supplied (err, metadata) callback.\n   */\n  static createFromMetadataGenerator(\n    metadataGenerator: CallMetadataGenerator\n  ): CallCredentials {\n    return new SingleCallCredentials(metadataGenerator);\n  }\n\n  /**\n   * Create a gRPC credential from a Google credential object.\n   * @param googleCredentials The authentication client to use.\n   * @return The resulting CallCredentials object.\n   */\n  static createFromGoogleCredential(\n    googleCredentials: OAuth2Client\n  ): CallCredentials {\n    return CallCredentials.createFromMetadataGenerator((options, callback) => {\n      let getHeaders: Promise<{ [index: string]: string }>;\n      if (isCurrentOauth2Client(googleCredentials)) {\n        getHeaders = googleCredentials.getRequestHeaders(options.service_url);\n      } else {\n        getHeaders = new Promise((resolve, reject) => {\n          googleCredentials.getRequestMetadata(\n            options.service_url,\n            (err, headers) => {\n              if (err) {\n                reject(err);\n                return;\n              }\n              if (!headers) {\n                reject(new Error('Headers not set by metadata plugin'));\n                return;\n              }\n              resolve(headers);\n            }\n          );\n        });\n      }\n      getHeaders.then(\n        headers => {\n          const metadata = new Metadata();\n          for (const key of Object.keys(headers)) {\n            metadata.add(key, headers[key]);\n          }\n          callback(null, metadata);\n        },\n        err => {\n          callback(err);\n        }\n      );\n    });\n  }\n\n  static createEmpty(): CallCredentials {\n    return new EmptyCallCredentials();\n  }\n}\n\nclass ComposedCallCredentials extends CallCredentials {\n  constructor(private creds: CallCredentials[]) {\n    super();\n  }\n\n  async generateMetadata(options: CallMetadataOptions): Promise<Metadata> {\n    const base: Metadata = new Metadata();\n    const generated: Metadata[] = await Promise.all(\n      this.creds.map(cred => cred.generateMetadata(options))\n    );\n    for (const gen of generated) {\n      base.merge(gen);\n    }\n    return base;\n  }\n\n  compose(other: CallCredentials): CallCredentials {\n    return new ComposedCallCredentials(this.creds.concat([other]));\n  }\n\n  _equals(other: CallCredentials): boolean {\n    if (this === other) {\n      return true;\n    }\n    if (other instanceof ComposedCallCredentials) {\n      return this.creds.every((value, index) =>\n        value._equals(other.creds[index])\n      );\n    } else {\n      return false;\n    }\n  }\n}\n\nclass SingleCallCredentials extends CallCredentials {\n  constructor(private metadataGenerator: CallMetadataGenerator) {\n    super();\n  }\n\n  generateMetadata(options: CallMetadataOptions): Promise<Metadata> {\n    return new Promise<Metadata>((resolve, reject) => {\n      this.metadataGenerator(options, (err, metadata) => {\n        if (metadata !== undefined) {\n          resolve(metadata);\n        } else {\n          reject(err);\n        }\n      });\n    });\n  }\n\n  compose(other: CallCredentials): CallCredentials {\n    return new ComposedCallCredentials([this, other]);\n  }\n\n  _equals(other: CallCredentials): boolean {\n    if (this === other) {\n      return true;\n    }\n    if (other instanceof SingleCallCredentials) {\n      return this.metadataGenerator === other.metadataGenerator;\n    } else {\n      return false;\n    }\n  }\n}\n\nclass EmptyCallCredentials extends CallCredentials {\n  generateMetadata(options: CallMetadataOptions): Promise<Metadata> {\n    return Promise.resolve(new Metadata());\n  }\n\n  compose(other: CallCredentials): CallCredentials {\n    return other;\n  }\n\n  _equals(other: CallCredentials): boolean {\n    return other instanceof EmptyCallCredentials;\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport * as fs from 'fs';\n\nexport const CIPHER_SUITES: string | undefined =\n  process.env.GRPC_SSL_CIPHER_SUITES;\n\nconst DEFAULT_ROOTS_FILE_PATH = process.env.GRPC_DEFAULT_SSL_ROOTS_FILE_PATH;\n\nlet defaultRootsData: Buffer | null = null;\n\nexport function getDefaultRootsData(): Buffer | null {\n  if (DEFAULT_ROOTS_FILE_PATH) {\n    if (defaultRootsData === null) {\n      defaultRootsData = fs.readFileSync(DEFAULT_ROOTS_FILE_PATH);\n    }\n    return defaultRootsData;\n  }\n  return null;\n}\n","/*\n * Copyright 2020 gRPC authors.\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 */\n\nexport interface GrpcUri {\n  scheme?: string;\n  authority?: string;\n  path: string;\n}\n\n/*\n * The groups correspond to URI parts as follows:\n * 1. scheme\n * 2. authority\n * 3. path\n */\nconst URI_REGEX = /^(?:([A-Za-z0-9+.-]+):)?(?:\\/\\/([^/]*)\\/)?(.+)$/;\n\nexport function parseUri(uriString: string): GrpcUri | null {\n  const parsedUri = URI_REGEX.exec(uriString);\n  if (parsedUri === null) {\n    return null;\n  }\n  return {\n    scheme: parsedUri[1],\n    authority: parsedUri[2],\n    path: parsedUri[3],\n  };\n}\n\nexport interface HostPort {\n  host: string;\n  port?: number;\n}\n\nconst NUMBER_REGEX = /^\\d+$/;\n\nexport function splitHostPort(path: string): HostPort | null {\n  if (path.startsWith('[')) {\n    const hostEnd = path.indexOf(']');\n    if (hostEnd === -1) {\n      return null;\n    }\n    const host = path.substring(1, hostEnd);\n    /* Only an IPv6 address should be in bracketed notation, and an IPv6\n     * address should have at least one colon */\n    if (host.indexOf(':') === -1) {\n      return null;\n    }\n    if (path.length > hostEnd + 1) {\n      if (path[hostEnd + 1] === ':') {\n        const portString = path.substring(hostEnd + 2);\n        if (NUMBER_REGEX.test(portString)) {\n          return {\n            host: host,\n            port: +portString,\n          };\n        } else {\n          return null;\n        }\n      } else {\n        return null;\n      }\n    } else {\n      return {\n        host,\n      };\n    }\n  } else {\n    const splitPath = path.split(':');\n    /* Exactly one colon means that this is host:port. Zero colons means that\n     * there is no port. And multiple colons means that this is a bare IPv6\n     * address with no port */\n    if (splitPath.length === 2) {\n      if (NUMBER_REGEX.test(splitPath[1])) {\n        return {\n          host: splitPath[0],\n          port: +splitPath[1],\n        };\n      } else {\n        return null;\n      }\n    } else {\n      return {\n        host: path,\n      };\n    }\n  }\n}\n\nexport function combineHostPort(hostPort: HostPort): string {\n  if (hostPort.port === undefined) {\n    return hostPort.host;\n  } else {\n    // Only an IPv6 host should include a colon\n    if (hostPort.host.includes(':')) {\n      return `[${hostPort.host}]:${hostPort.port}`;\n    } else {\n      return `${hostPort.host}:${hostPort.port}`;\n    }\n  }\n}\n\nexport function uriToString(uri: GrpcUri): string {\n  let result = '';\n  if (uri.scheme !== undefined) {\n    result += uri.scheme + ':';\n  }\n  if (uri.authority !== undefined) {\n    result += '//' + uri.authority + '/';\n  }\n  result += uri.path;\n  return result;\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { MethodConfig, ServiceConfig } from './service-config';\nimport { StatusOr } from './call-interface';\nimport { Endpoint } from './subchannel-address';\nimport { GrpcUri, uriToString } from './uri-parser';\nimport { ChannelOptions } from './channel-options';\nimport { Metadata } from './metadata';\nimport { Status } from './constants';\nimport { Filter, FilterFactory } from './filter';\n\nexport const CHANNEL_ARGS_CONFIG_SELECTOR_KEY = 'grpc.internal.config_selector';\n\nexport interface CallConfig {\n  methodConfig: MethodConfig;\n  onCommitted?: () => void;\n  pickInformation: { [key: string]: string };\n  status: Status;\n  dynamicFilterFactories: FilterFactory<Filter>[];\n}\n\n/**\n * Selects a configuration for a method given the name and metadata. Defined in\n * https://github.com/grpc/proposal/blob/master/A31-xds-timeout-support-and-config-selector.md#new-functionality-in-grpc\n */\nexport interface ConfigSelector {\n  invoke(methodName: string, metadata: Metadata, channelId: number): CallConfig;\n  unref(): void;\n}\n\nexport interface ResolverListener {\n  /**\n   * Called whenever the resolver has new name resolution results or an error to\n   * report.\n   * @param endpointList The list of endpoints, or an error if resolution failed\n   * @param attributes Arbitrary key/value pairs to pass along to load balancing\n   *     policies\n   * @param serviceConfig The service service config for the endpoint list, or an\n   *     error if the retrieved service config is invalid, or null if there is no\n   *     service config\n   * @param resolutionNote Provides additional context to RPC failure status\n   *     messages generated by the load balancing policy.\n   * @returns Whether or not the load balancing policy accepted the result.\n   */\n  (\n    endpointList: StatusOr<Endpoint[]>,\n    attributes: { [key: string]: unknown },\n    serviceConfig: StatusOr<ServiceConfig> | null,\n    resolutionNote: string\n  ): boolean;\n}\n/**\n * A resolver class that handles one or more of the name syntax schemes defined\n * in the [gRPC Name Resolution document](https://github.com/grpc/grpc/blob/master/doc/naming.md)\n */\nexport interface Resolver {\n  /**\n   * Indicates that the caller wants new name resolution data. Calling this\n   * function may eventually result in calling one of the `ResolverListener`\n   * functions, but that is not guaranteed. Those functions will never be\n   * called synchronously with the constructor or updateResolution.\n   */\n  updateResolution(): void;\n\n  /**\n   * Discard all resources owned by the resolver. A later call to\n   * `updateResolution` should reinitialize those resources.  No\n   * `ResolverListener` callbacks should be called after `destroy` is called\n   * until `updateResolution` is called again.\n   */\n  destroy(): void;\n}\n\nexport interface ResolverConstructor {\n  new (\n    target: GrpcUri,\n    listener: ResolverListener,\n    channelOptions: ChannelOptions\n  ): Resolver;\n  /**\n   * Get the default authority for a target. This loosely corresponds to that\n   * target's hostname. Throws an error if this resolver class cannot parse the\n   * `target`.\n   * @param target\n   */\n  getDefaultAuthority(target: GrpcUri): string;\n}\n\nconst registeredResolvers: { [scheme: string]: ResolverConstructor } = {};\nlet defaultScheme: string | null = null;\n\n/**\n * Register a resolver class to handle target names prefixed with the `prefix`\n * string. This prefix should correspond to a URI scheme name listed in the\n * [gRPC Name Resolution document](https://github.com/grpc/grpc/blob/master/doc/naming.md)\n * @param prefix\n * @param resolverClass\n */\nexport function registerResolver(\n  scheme: string,\n  resolverClass: ResolverConstructor\n) {\n  registeredResolvers[scheme] = resolverClass;\n}\n\n/**\n * Register a default resolver to handle target names that do not start with\n * any registered prefix.\n * @param resolverClass\n */\nexport function registerDefaultScheme(scheme: string) {\n  defaultScheme = scheme;\n}\n\n/**\n * Create a name resolver for the specified target, if possible. Throws an\n * error if no such name resolver can be created.\n * @param target\n * @param listener\n */\nexport function createResolver(\n  target: GrpcUri,\n  listener: ResolverListener,\n  options: ChannelOptions\n): Resolver {\n  if (target.scheme !== undefined && target.scheme in registeredResolvers) {\n    return new registeredResolvers[target.scheme](target, listener, options);\n  } else {\n    throw new Error(\n      `No resolver could be created for target ${uriToString(target)}`\n    );\n  }\n}\n\n/**\n * Get the default authority for the specified target, if possible. Throws an\n * error if no registered name resolver can parse that target string.\n * @param target\n */\nexport function getDefaultAuthority(target: GrpcUri): string {\n  if (target.scheme !== undefined && target.scheme in registeredResolvers) {\n    return registeredResolvers[target.scheme].getDefaultAuthority(target);\n  } else {\n    throw new Error(`Invalid target ${uriToString(target)}`);\n  }\n}\n\nexport function mapUriDefaultScheme(target: GrpcUri): GrpcUri | null {\n  if (target.scheme === undefined || !(target.scheme in registeredResolvers)) {\n    if (defaultScheme !== null) {\n      return {\n        scheme: defaultScheme,\n        authority: undefined,\n        path: uriToString(target),\n      };\n    } else {\n      return null;\n    }\n  }\n  return target;\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport {\n  ConnectionOptions,\n  createSecureContext,\n  PeerCertificate,\n  SecureContext,\n  checkServerIdentity,\n  connect as tlsConnect\n} from 'tls';\n\nimport { CallCredentials } from './call-credentials';\nimport { CIPHER_SUITES, getDefaultRootsData } from './tls-helpers';\nimport { CaCertificateUpdate, CaCertificateUpdateListener, CertificateProvider, IdentityCertificateUpdate, IdentityCertificateUpdateListener } from './certificate-provider';\nimport { Socket } from 'net';\nimport { ChannelOptions } from './channel-options';\nimport { GrpcUri, parseUri, splitHostPort } from './uri-parser';\nimport { getDefaultAuthority } from './resolver';\nimport { log } from './logging';\nimport { LogVerbosity } from './constants';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction verifyIsBufferOrNull(obj: any, friendlyName: string): void {\n  if (obj && !(obj instanceof Buffer)) {\n    throw new TypeError(`${friendlyName}, if provided, must be a Buffer.`);\n  }\n}\n\n/**\n * A callback that will receive the expected hostname and presented peer\n * certificate as parameters. The callback should return an error to\n * indicate that the presented certificate is considered invalid and\n * otherwise returned undefined.\n */\nexport type CheckServerIdentityCallback = (\n  hostname: string,\n  cert: PeerCertificate\n) => Error | undefined;\n\n/**\n * Additional peer verification options that can be set when creating\n * SSL credentials.\n */\nexport interface VerifyOptions {\n  /**\n   * If set, this callback will be invoked after the usual hostname verification\n   * has been performed on the peer certificate.\n   */\n  checkServerIdentity?: CheckServerIdentityCallback;\n  rejectUnauthorized?: boolean;\n}\n\nexport interface SecureConnectResult {\n  socket: Socket;\n  secure: boolean;\n}\n\nexport interface SecureConnector {\n  connect(socket: Socket): Promise<SecureConnectResult>;\n  waitForReady(): Promise<void>;\n  getCallCredentials(): CallCredentials;\n  destroy(): void;\n}\n\n/**\n * A class that contains credentials for communicating over a channel, as well\n * as a set of per-call credentials, which are applied to every method call made\n * over a channel initialized with an instance of this class.\n */\nexport abstract class ChannelCredentials {\n  /**\n   * Returns a copy of this object with the included set of per-call credentials\n   * expanded to include callCredentials.\n   * @param callCredentials A CallCredentials object to associate with this\n   * instance.\n   */\n  compose(callCredentials: CallCredentials): ChannelCredentials {\n    return new ComposedChannelCredentialsImpl(this, callCredentials);\n  }\n\n  /**\n   * Indicates whether this credentials object creates a secure channel.\n   */\n  abstract _isSecure(): boolean;\n\n  /**\n   * Check whether two channel credentials objects are equal. Two secure\n   * credentials are equal if they were constructed with the same parameters.\n   * @param other The other ChannelCredentials Object\n   */\n  abstract _equals(other: ChannelCredentials): boolean;\n\n  abstract _createSecureConnector(channelTarget: GrpcUri, options: ChannelOptions, callCredentials?: CallCredentials): SecureConnector;\n\n  /**\n   * Return a new ChannelCredentials instance with a given set of credentials.\n   * The resulting instance can be used to construct a Channel that communicates\n   * over TLS.\n   * @param rootCerts The root certificate data.\n   * @param privateKey The client certificate private key, if available.\n   * @param certChain The client certificate key chain, if available.\n   * @param verifyOptions Additional options to modify certificate verification\n   */\n  static createSsl(\n    rootCerts?: Buffer | null,\n    privateKey?: Buffer | null,\n    certChain?: Buffer | null,\n    verifyOptions?: VerifyOptions\n  ): ChannelCredentials {\n    verifyIsBufferOrNull(rootCerts, 'Root certificate');\n    verifyIsBufferOrNull(privateKey, 'Private key');\n    verifyIsBufferOrNull(certChain, 'Certificate chain');\n    if (privateKey && !certChain) {\n      throw new Error(\n        'Private key must be given with accompanying certificate chain'\n      );\n    }\n    if (!privateKey && certChain) {\n      throw new Error(\n        'Certificate chain must be given with accompanying private key'\n      );\n    }\n    const secureContext = createSecureContext({\n      ca: rootCerts ?? getDefaultRootsData() ?? undefined,\n      key: privateKey ?? undefined,\n      cert: certChain ?? undefined,\n      ciphers: CIPHER_SUITES,\n    });\n    return new SecureChannelCredentialsImpl(secureContext, verifyOptions ?? {});\n  }\n\n  /**\n   * Return a new ChannelCredentials instance with credentials created using\n   * the provided secureContext. The resulting instances can be used to\n   * construct a Channel that communicates over TLS. gRPC will not override\n   * anything in the provided secureContext, so the environment variables\n   * GRPC_SSL_CIPHER_SUITES and GRPC_DEFAULT_SSL_ROOTS_FILE_PATH will\n   * not be applied.\n   * @param secureContext The return value of tls.createSecureContext()\n   * @param verifyOptions Additional options to modify certificate verification\n   */\n  static createFromSecureContext(\n    secureContext: SecureContext,\n    verifyOptions?: VerifyOptions\n  ): ChannelCredentials {\n    return new SecureChannelCredentialsImpl(secureContext, verifyOptions ?? {});\n  }\n\n  /**\n   * Return a new ChannelCredentials instance with no credentials.\n   */\n  static createInsecure(): ChannelCredentials {\n    return new InsecureChannelCredentialsImpl();\n  }\n}\n\nclass InsecureChannelCredentialsImpl extends ChannelCredentials {\n  constructor() {\n    super();\n  }\n\n  override compose(callCredentials: CallCredentials): never {\n    throw new Error('Cannot compose insecure credentials');\n  }\n  _isSecure(): boolean {\n    return false;\n  }\n  _equals(other: ChannelCredentials): boolean {\n    return other instanceof InsecureChannelCredentialsImpl;\n  }\n  _createSecureConnector(channelTarget: GrpcUri, options: ChannelOptions, callCredentials?: CallCredentials): SecureConnector {\n    return {\n      connect(socket) {\n        return Promise.resolve({\n          socket,\n          secure: false\n        });\n      },\n      waitForReady: () => {\n        return Promise.resolve();\n      },\n      getCallCredentials: () => {\n        return callCredentials ?? CallCredentials.createEmpty();\n      },\n      destroy() {}\n    }\n  }\n}\n\nfunction getConnectionOptions(secureContext: SecureContext, verifyOptions: VerifyOptions, channelTarget: GrpcUri, options: ChannelOptions): ConnectionOptions {\n  const connectionOptions: ConnectionOptions = {\n    secureContext: secureContext\n  };\n  let realTarget: GrpcUri = channelTarget;\n  if ('grpc.http_connect_target' in options) {\n    const parsedTarget = parseUri(options['grpc.http_connect_target']!);\n    if (parsedTarget) {\n      realTarget = parsedTarget;\n    }\n  }\n  const targetPath = getDefaultAuthority(realTarget);\n  const hostPort = splitHostPort(targetPath);\n  const remoteHost = hostPort?.host ?? targetPath;\n  connectionOptions.host = remoteHost;\n\n  if (verifyOptions.checkServerIdentity) {\n    connectionOptions.checkServerIdentity = verifyOptions.checkServerIdentity;\n  }\n  if (verifyOptions.rejectUnauthorized !== undefined) {\n    connectionOptions.rejectUnauthorized = verifyOptions.rejectUnauthorized;\n  }\n  connectionOptions.ALPNProtocols = ['h2'];\n  if (options['grpc.ssl_target_name_override']) {\n    const sslTargetNameOverride = options['grpc.ssl_target_name_override']!;\n    const originalCheckServerIdentity =\n      connectionOptions.checkServerIdentity ?? checkServerIdentity;\n    connectionOptions.checkServerIdentity = (\n      host: string,\n      cert: PeerCertificate\n    ): Error | undefined => {\n      return originalCheckServerIdentity(sslTargetNameOverride, cert);\n    };\n    connectionOptions.servername = sslTargetNameOverride;\n  } else {\n    connectionOptions.servername = remoteHost;\n  }\n  if (options['grpc-node.tls_enable_trace']) {\n    connectionOptions.enableTrace = true;\n  }\n  return connectionOptions;\n}\n\nclass SecureConnectorImpl implements SecureConnector {\n  constructor(private connectionOptions: ConnectionOptions, private callCredentials: CallCredentials) {\n  }\n  connect(socket: Socket): Promise<SecureConnectResult> {\n    const tlsConnectOptions: ConnectionOptions = {\n      socket: socket,\n      ...this.connectionOptions\n    };\n    return new Promise<SecureConnectResult>((resolve, reject) => {\n      const tlsSocket = tlsConnect(tlsConnectOptions, () => {\n        if ((this.connectionOptions.rejectUnauthorized ?? true) && !tlsSocket.authorized) {\n          reject(tlsSocket.authorizationError);\n          return;\n        }\n        resolve({\n          socket: tlsSocket,\n          secure: true\n        })\n      });\n      tlsSocket.on('error', (error: Error) => {\n        reject(error);\n      });\n    });\n  }\n  waitForReady(): Promise<void> {\n    return Promise.resolve();\n  }\n  getCallCredentials(): CallCredentials {\n    return this.callCredentials;\n  }\n  destroy() {}\n}\n\nclass SecureChannelCredentialsImpl extends ChannelCredentials {\n  constructor(\n    private secureContext: SecureContext,\n    private verifyOptions: VerifyOptions\n  ) {\n    super();\n  }\n\n  _isSecure(): boolean {\n    return true;\n  }\n  _equals(other: ChannelCredentials): boolean {\n    if (this === other) {\n      return true;\n    }\n    if (other instanceof SecureChannelCredentialsImpl) {\n      return (\n        this.secureContext === other.secureContext &&\n        this.verifyOptions.checkServerIdentity ===\n          other.verifyOptions.checkServerIdentity\n      );\n    } else {\n      return false;\n    }\n  }\n  _createSecureConnector(channelTarget: GrpcUri, options: ChannelOptions, callCredentials?: CallCredentials): SecureConnector {\n    const connectionOptions = getConnectionOptions(this.secureContext, this.verifyOptions, channelTarget, options);\n    return new SecureConnectorImpl(connectionOptions, callCredentials ?? CallCredentials.createEmpty());\n  }\n}\n\nclass CertificateProviderChannelCredentialsImpl extends ChannelCredentials {\n  private refcount: number = 0;\n  /**\n   * `undefined` means that the certificates have not yet been loaded. `null`\n   * means that an attempt to load them has completed, and has failed.\n   */\n  private latestCaUpdate: CaCertificateUpdate | null | undefined = undefined;\n  /**\n   * `undefined` means that the certificates have not yet been loaded. `null`\n   * means that an attempt to load them has completed, and has failed.\n   */\n  private latestIdentityUpdate: IdentityCertificateUpdate | null | undefined = undefined;\n  private caCertificateUpdateListener: CaCertificateUpdateListener = this.handleCaCertificateUpdate.bind(this);\n  private identityCertificateUpdateListener: IdentityCertificateUpdateListener = this.handleIdentityCertitificateUpdate.bind(this);\n  private secureContextWatchers: ((context: SecureContext | null) => void)[] = [];\n  private static SecureConnectorImpl = class implements SecureConnector {\n    constructor(private parent: CertificateProviderChannelCredentialsImpl, private channelTarget: GrpcUri, private options: ChannelOptions, private callCredentials: CallCredentials) {}\n\n    connect(socket: Socket): Promise<SecureConnectResult> {\n      return new Promise((resolve, reject) => {\n        const secureContext = this.parent.getLatestSecureContext();\n        if (!secureContext) {\n          reject(new Error('Failed to load credentials'));\n          return;\n        }\n        if (socket.closed) {\n          reject(new Error('Socket closed while loading credentials'));\n        }\n        const connnectionOptions = getConnectionOptions(secureContext, this.parent.verifyOptions, this.channelTarget, this.options);\n        const tlsConnectOptions: ConnectionOptions = {\n          socket: socket,\n          ...connnectionOptions\n        }\n        const closeCallback = () => {\n          reject(new Error('Socket closed'));\n        };\n        const errorCallback = (error: Error) => {\n          reject(error);\n        }\n        const tlsSocket = tlsConnect(tlsConnectOptions, () => {\n          tlsSocket.removeListener('close', closeCallback);\n          tlsSocket.removeListener('error', errorCallback);\n          if ((this.parent.verifyOptions.rejectUnauthorized ?? true) && !tlsSocket.authorized) {\n            reject(tlsSocket.authorizationError);\n            return;\n          }\n          resolve({\n            socket: tlsSocket,\n            secure: true\n          });\n        });\n        tlsSocket.once('close', closeCallback);\n        tlsSocket.once('error', errorCallback);\n      });\n    }\n\n    async waitForReady(): Promise<void> {\n      await this.parent.getSecureContext();\n    }\n\n    getCallCredentials(): CallCredentials {\n      return this.callCredentials;\n    }\n\n    destroy() {\n      this.parent.unref();\n    }\n  }\n  constructor(\n    private caCertificateProvider: CertificateProvider,\n    private identityCertificateProvider: CertificateProvider | null,\n    private verifyOptions: VerifyOptions\n  ) {\n    super();\n  }\n  _isSecure(): boolean {\n    return true;\n  }\n  _equals(other: ChannelCredentials): boolean {\n    if (this === other) {\n      return true;\n    }\n    if (other instanceof CertificateProviderChannelCredentialsImpl) {\n      return this.caCertificateProvider === other.caCertificateProvider &&\n        this.identityCertificateProvider === other.identityCertificateProvider &&\n        this.verifyOptions?.checkServerIdentity === other.verifyOptions?.checkServerIdentity;\n    } else {\n      return false;\n    }\n  }\n  private ref(): void {\n    if (this.refcount === 0) {\n      this.caCertificateProvider.addCaCertificateListener(this.caCertificateUpdateListener);\n      this.identityCertificateProvider?.addIdentityCertificateListener(this.identityCertificateUpdateListener);\n    }\n    this.refcount += 1;\n  }\n  private unref(): void {\n    this.refcount -= 1;\n    if (this.refcount === 0) {\n      this.caCertificateProvider.removeCaCertificateListener(this.caCertificateUpdateListener);\n      this.identityCertificateProvider?.removeIdentityCertificateListener(this.identityCertificateUpdateListener);\n    }\n  }\n  _createSecureConnector(channelTarget: GrpcUri, options: ChannelOptions, callCredentials?: CallCredentials): SecureConnector {\n    this.ref();\n    return new CertificateProviderChannelCredentialsImpl.SecureConnectorImpl(this, channelTarget, options, callCredentials ?? CallCredentials.createEmpty());\n  }\n\n  private maybeUpdateWatchers() {\n    if (this.hasReceivedUpdates()) {\n      for (const watcher of this.secureContextWatchers) {\n        watcher(this.getLatestSecureContext());\n      }\n      this.secureContextWatchers = [];\n    }\n  }\n\n  private handleCaCertificateUpdate(update: CaCertificateUpdate | null) {\n    this.latestCaUpdate = update;\n    this.maybeUpdateWatchers();\n  }\n\n  private handleIdentityCertitificateUpdate(update: IdentityCertificateUpdate | null) {\n    this.latestIdentityUpdate = update;\n    this.maybeUpdateWatchers();\n  }\n\n  private hasReceivedUpdates(): boolean {\n    if (this.latestCaUpdate === undefined) {\n      return false;\n    }\n    if (this.identityCertificateProvider && this.latestIdentityUpdate === undefined) {\n      return false;\n    }\n    return true;\n  }\n\n  private getSecureContext(): Promise<SecureContext | null> {\n    if (this.hasReceivedUpdates()) {\n      return Promise.resolve(this.getLatestSecureContext());\n    } else {\n      return new Promise(resolve => {\n        this.secureContextWatchers.push(resolve);\n      });\n    }\n  }\n\n  private getLatestSecureContext(): SecureContext | null {\n    if (!this.latestCaUpdate) {\n      return null;\n    }\n    if (this.identityCertificateProvider !== null && !this.latestIdentityUpdate) {\n      return null;\n    }\n    try {\n      return createSecureContext({\n        ca: this.latestCaUpdate.caCertificate,\n        key: this.latestIdentityUpdate?.privateKey,\n        cert: this.latestIdentityUpdate?.certificate,\n        ciphers: CIPHER_SUITES\n      });\n    } catch (e) {\n      log(LogVerbosity.ERROR, 'Failed to createSecureContext with error ' + (e as Error).message);\n      return null;\n    }\n  }\n}\n\nexport function createCertificateProviderChannelCredentials(caCertificateProvider: CertificateProvider, identityCertificateProvider: CertificateProvider | null, verifyOptions?: VerifyOptions) {\n  return new CertificateProviderChannelCredentialsImpl(caCertificateProvider, identityCertificateProvider, verifyOptions ?? {});\n}\n\nclass ComposedChannelCredentialsImpl extends ChannelCredentials {\n  constructor(\n    private channelCredentials: ChannelCredentials,\n    private callCredentials: CallCredentials\n  ) {\n    super();\n    if (!channelCredentials._isSecure()) {\n      throw new Error('Cannot compose insecure credentials');\n    }\n  }\n  compose(callCredentials: CallCredentials) {\n    const combinedCallCredentials =\n      this.callCredentials.compose(callCredentials);\n    return new ComposedChannelCredentialsImpl(\n      this.channelCredentials,\n      combinedCallCredentials\n    );\n  }\n  _isSecure(): boolean {\n    return true;\n  }\n  _equals(other: ChannelCredentials): boolean {\n    if (this === other) {\n      return true;\n    }\n    if (other instanceof ComposedChannelCredentialsImpl) {\n      return (\n        this.channelCredentials._equals(other.channelCredentials) &&\n        this.callCredentials._equals(other.callCredentials)\n      );\n    } else {\n      return false;\n    }\n  }\n  _createSecureConnector(channelTarget: GrpcUri, options: ChannelOptions, callCredentials?: CallCredentials): SecureConnector {\n    const combinedCallCredentials = this.callCredentials.compose(callCredentials ?? CallCredentials.createEmpty());\n    return this.channelCredentials._createSecureConnector(channelTarget, options, combinedCallCredentials);\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { ChannelOptions } from './channel-options';\nimport { Endpoint, SubchannelAddress } from './subchannel-address';\nimport { ConnectivityState } from './connectivity-state';\nimport { Picker } from './picker';\nimport type { ChannelRef, SubchannelRef } from './channelz';\nimport { SubchannelInterface } from './subchannel-interface';\nimport { LoadBalancingConfig } from './service-config';\nimport { log } from './logging';\nimport { LogVerbosity } from './constants';\nimport { StatusOr } from './call-interface';\n\n/**\n * A collection of functions associated with a channel that a load balancer\n * can call as necessary.\n */\nexport interface ChannelControlHelper {\n  /**\n   * Returns a subchannel connected to the specified address.\n   * @param subchannelAddress The address to connect to\n   * @param subchannelArgs Channel arguments to use to construct the subchannel\n   */\n  createSubchannel(\n    subchannelAddress: SubchannelAddress,\n    subchannelArgs: ChannelOptions\n  ): SubchannelInterface;\n  /**\n   * Passes a new subchannel picker up to the channel. This is called if either\n   * the connectivity state changes or if a different picker is needed for any\n   * other reason.\n   * @param connectivityState New connectivity state\n   * @param picker New picker\n   */\n  updateState(\n    connectivityState: ConnectivityState,\n    picker: Picker,\n    errorMessage: string | null\n  ): void;\n  /**\n   * Request new data from the resolver.\n   */\n  requestReresolution(): void;\n  addChannelzChild(child: ChannelRef | SubchannelRef): void;\n  removeChannelzChild(child: ChannelRef | SubchannelRef): void;\n}\n\n/**\n * Create a child ChannelControlHelper that overrides some methods of the\n * parent while letting others pass through to the parent unmodified. This\n * allows other code to create these children without needing to know about\n * all of the methods to be passed through.\n * @param parent\n * @param overrides\n */\nexport function createChildChannelControlHelper(\n  parent: ChannelControlHelper,\n  overrides: Partial<ChannelControlHelper>\n): ChannelControlHelper {\n  return {\n    createSubchannel:\n      overrides.createSubchannel?.bind(overrides) ??\n      parent.createSubchannel.bind(parent),\n    updateState:\n      overrides.updateState?.bind(overrides) ?? parent.updateState.bind(parent),\n    requestReresolution:\n      overrides.requestReresolution?.bind(overrides) ??\n      parent.requestReresolution.bind(parent),\n    addChannelzChild:\n      overrides.addChannelzChild?.bind(overrides) ??\n      parent.addChannelzChild.bind(parent),\n    removeChannelzChild:\n      overrides.removeChannelzChild?.bind(overrides) ??\n      parent.removeChannelzChild.bind(parent),\n  };\n}\n\n/**\n * Tracks one or more connected subchannels and determines which subchannel\n * each request should use.\n */\nexport interface LoadBalancer {\n  /**\n   * Gives the load balancer a new list of addresses to start connecting to.\n   * The load balancer will start establishing connections with the new list,\n   * but will continue using any existing connections until the new connections\n   * are established\n   * @param endpointList The new list of addresses to connect to\n   * @param lbConfig The load balancing config object from the service config,\n   *     if one was provided\n   * @param channelOptions Channel options from the channel, plus resolver\n   *     attributes\n   * @param resolutionNote A not from the resolver to include in errors\n   */\n  updateAddressList(\n    endpointList: StatusOr<Endpoint[]>,\n    lbConfig: TypedLoadBalancingConfig,\n    channelOptions: ChannelOptions,\n    resolutionNote: string\n  ): boolean;\n  /**\n   * If the load balancer is currently in the IDLE state, start connecting.\n   */\n  exitIdle(): void;\n  /**\n   * If the load balancer is currently in the CONNECTING or TRANSIENT_FAILURE\n   * state, reset the current connection backoff timeout to its base value and\n   * transition to CONNECTING if in TRANSIENT_FAILURE.\n   */\n  resetBackoff(): void;\n  /**\n   * The load balancer unrefs all of its subchannels and stops calling methods\n   * of its channel control helper.\n   */\n  destroy(): void;\n  /**\n   * Get the type name for this load balancer type. Must be constant across an\n   * entire load balancer implementation class and must match the name that the\n   * balancer implementation class was registered with.\n   */\n  getTypeName(): string;\n}\n\nexport interface LoadBalancerConstructor {\n  new (\n    channelControlHelper: ChannelControlHelper\n  ): LoadBalancer;\n}\n\nexport interface TypedLoadBalancingConfig {\n  getLoadBalancerName(): string;\n  toJsonObject(): object;\n}\n\nexport interface TypedLoadBalancingConfigConstructor {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  new (...args: any): TypedLoadBalancingConfig;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  createFromJson(obj: any): TypedLoadBalancingConfig;\n}\n\nconst registeredLoadBalancerTypes: {\n  [name: string]: {\n    LoadBalancer: LoadBalancerConstructor;\n    LoadBalancingConfig: TypedLoadBalancingConfigConstructor;\n  };\n} = {};\n\nlet defaultLoadBalancerType: string | null = null;\n\nexport function registerLoadBalancerType(\n  typeName: string,\n  loadBalancerType: LoadBalancerConstructor,\n  loadBalancingConfigType: TypedLoadBalancingConfigConstructor\n) {\n  registeredLoadBalancerTypes[typeName] = {\n    LoadBalancer: loadBalancerType,\n    LoadBalancingConfig: loadBalancingConfigType,\n  };\n}\n\nexport function registerDefaultLoadBalancerType(typeName: string) {\n  defaultLoadBalancerType = typeName;\n}\n\nexport function createLoadBalancer(\n  config: TypedLoadBalancingConfig,\n  channelControlHelper: ChannelControlHelper\n): LoadBalancer | null {\n  const typeName = config.getLoadBalancerName();\n  if (typeName in registeredLoadBalancerTypes) {\n    return new registeredLoadBalancerTypes[typeName].LoadBalancer(\n      channelControlHelper\n    );\n  } else {\n    return null;\n  }\n}\n\nexport function isLoadBalancerNameRegistered(typeName: string): boolean {\n  return typeName in registeredLoadBalancerTypes;\n}\n\nexport function parseLoadBalancingConfig(\n  rawConfig: LoadBalancingConfig\n): TypedLoadBalancingConfig {\n  const keys = Object.keys(rawConfig);\n  if (keys.length !== 1) {\n    throw new Error(\n      'Provided load balancing config has multiple conflicting entries'\n    );\n  }\n  const typeName = keys[0];\n  if (typeName in registeredLoadBalancerTypes) {\n    try {\n      return registeredLoadBalancerTypes[\n        typeName\n      ].LoadBalancingConfig.createFromJson(rawConfig[typeName]);\n    } catch (e) {\n      throw new Error(`${typeName}: ${(e as Error).message}`);\n    }\n  } else {\n    throw new Error(`Unrecognized load balancing config name ${typeName}`);\n  }\n}\n\nexport function getDefaultConfig() {\n  if (!defaultLoadBalancerType) {\n    throw new Error('No default load balancer type registered');\n  }\n  return new registeredLoadBalancerTypes[\n    defaultLoadBalancerType\n  ]!.LoadBalancingConfig();\n}\n\nexport function selectLbConfigFromList(\n  configs: LoadBalancingConfig[],\n  fallbackTodefault = false\n): TypedLoadBalancingConfig | null {\n  for (const config of configs) {\n    try {\n      return parseLoadBalancingConfig(config);\n    } catch (e) {\n      log(\n        LogVerbosity.DEBUG,\n        'Config parsing failed with error',\n        (e as Error).message\n      );\n      continue;\n    }\n  }\n  if (fallbackTodefault) {\n    if (defaultLoadBalancerType) {\n      return new registeredLoadBalancerTypes[\n        defaultLoadBalancerType\n      ]!.LoadBalancingConfig();\n    } else {\n      return null;\n    }\n  } else {\n    return null;\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\n/* This file implements gRFC A2 and the service config spec:\n * https://github.com/grpc/proposal/blob/master/A2-service-configs-in-dns.md\n * https://github.com/grpc/grpc/blob/master/doc/service_config.md. Each\n * function here takes an object with unknown structure and returns its\n * specific object type if the input has the right structure, and throws an\n * error otherwise. */\n\n/* The any type is purposely used here. All functions validate their input at\n * runtime */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport * as os from 'os';\nimport { Status } from './constants';\nimport { Duration } from './duration';\n\nexport interface MethodConfigName {\n  service?: string;\n  method?: string;\n}\n\nexport interface RetryPolicy {\n  maxAttempts: number;\n  initialBackoff: string;\n  maxBackoff: string;\n  backoffMultiplier: number;\n  retryableStatusCodes: (Status | string)[];\n}\n\nexport interface HedgingPolicy {\n  maxAttempts: number;\n  hedgingDelay?: string;\n  nonFatalStatusCodes?: (Status | string)[];\n}\n\nexport interface MethodConfig {\n  name: MethodConfigName[];\n  waitForReady?: boolean;\n  timeout?: Duration;\n  maxRequestBytes?: number;\n  maxResponseBytes?: number;\n  retryPolicy?: RetryPolicy;\n  hedgingPolicy?: HedgingPolicy;\n}\n\nexport interface RetryThrottling {\n  maxTokens: number;\n  tokenRatio: number;\n}\n\nexport interface LoadBalancingConfig {\n  [key: string]: object;\n}\n\nexport interface ServiceConfig {\n  loadBalancingPolicy?: string;\n  loadBalancingConfig: LoadBalancingConfig[];\n  methodConfig: MethodConfig[];\n  retryThrottling?: RetryThrottling;\n}\n\nexport interface ServiceConfigCanaryConfig {\n  clientLanguage?: string[];\n  percentage?: number;\n  clientHostname?: string[];\n  serviceConfig: ServiceConfig;\n}\n\n/**\n * Recognizes a number with up to 9 digits after the decimal point, followed by\n * an \"s\", representing a number of seconds.\n */\nconst DURATION_REGEX = /^\\d+(\\.\\d{1,9})?s$/;\n\n/**\n * Client language name used for determining whether this client matches a\n * `ServiceConfigCanaryConfig`'s `clientLanguage` list.\n */\nconst CLIENT_LANGUAGE_STRING = 'node';\n\nfunction validateName(obj: any): MethodConfigName {\n  // In this context, and unset field and '' are considered the same\n  if ('service' in obj && obj.service !== '') {\n    if (typeof obj.service !== 'string') {\n      throw new Error(\n        `Invalid method config name: invalid service: expected type string, got ${typeof obj.service}`\n      );\n    }\n    if ('method' in obj && obj.method !== '') {\n      if (typeof obj.method !== 'string') {\n        throw new Error(\n          `Invalid method config name: invalid method: expected type string, got ${typeof obj.service}`\n        );\n      }\n      return {\n        service: obj.service,\n        method: obj.method,\n      };\n    } else {\n      return {\n        service: obj.service,\n      };\n    }\n  } else {\n    if ('method' in obj && obj.method !== undefined) {\n      throw new Error(\n        `Invalid method config name: method set with empty or unset service`\n      );\n    }\n    return {};\n  }\n}\n\nfunction validateRetryPolicy(obj: any): RetryPolicy {\n  if (\n    !('maxAttempts' in obj) ||\n    !Number.isInteger(obj.maxAttempts) ||\n    obj.maxAttempts < 2\n  ) {\n    throw new Error(\n      'Invalid method config retry policy: maxAttempts must be an integer at least 2'\n    );\n  }\n  if (\n    !('initialBackoff' in obj) ||\n    typeof obj.initialBackoff !== 'string' ||\n    !DURATION_REGEX.test(obj.initialBackoff)\n  ) {\n    throw new Error(\n      'Invalid method config retry policy: initialBackoff must be a string consisting of a positive integer or decimal followed by s'\n    );\n  }\n  if (\n    !('maxBackoff' in obj) ||\n    typeof obj.maxBackoff !== 'string' ||\n    !DURATION_REGEX.test(obj.maxBackoff)\n  ) {\n    throw new Error(\n      'Invalid method config retry policy: maxBackoff must be a string consisting of a positive integer or decimal followed by s'\n    );\n  }\n  if (\n    !('backoffMultiplier' in obj) ||\n    typeof obj.backoffMultiplier !== 'number' ||\n    obj.backoffMultiplier <= 0\n  ) {\n    throw new Error(\n      'Invalid method config retry policy: backoffMultiplier must be a number greater than 0'\n    );\n  }\n  if (\n    !('retryableStatusCodes' in obj && Array.isArray(obj.retryableStatusCodes))\n  ) {\n    throw new Error(\n      'Invalid method config retry policy: retryableStatusCodes is required'\n    );\n  }\n  if (obj.retryableStatusCodes.length === 0) {\n    throw new Error(\n      'Invalid method config retry policy: retryableStatusCodes must be non-empty'\n    );\n  }\n  for (const value of obj.retryableStatusCodes) {\n    if (typeof value === 'number') {\n      if (!Object.values(Status).includes(value)) {\n        throw new Error(\n          'Invalid method config retry policy: retryableStatusCodes value not in status code range'\n        );\n      }\n    } else if (typeof value === 'string') {\n      if (!Object.values(Status).includes(value.toUpperCase())) {\n        throw new Error(\n          'Invalid method config retry policy: retryableStatusCodes value not a status code name'\n        );\n      }\n    } else {\n      throw new Error(\n        'Invalid method config retry policy: retryableStatusCodes value must be a string or number'\n      );\n    }\n  }\n  return {\n    maxAttempts: obj.maxAttempts,\n    initialBackoff: obj.initialBackoff,\n    maxBackoff: obj.maxBackoff,\n    backoffMultiplier: obj.backoffMultiplier,\n    retryableStatusCodes: obj.retryableStatusCodes,\n  };\n}\n\nfunction validateHedgingPolicy(obj: any): HedgingPolicy {\n  if (\n    !('maxAttempts' in obj) ||\n    !Number.isInteger(obj.maxAttempts) ||\n    obj.maxAttempts < 2\n  ) {\n    throw new Error(\n      'Invalid method config hedging policy: maxAttempts must be an integer at least 2'\n    );\n  }\n  if (\n    'hedgingDelay' in obj &&\n    (typeof obj.hedgingDelay !== 'string' ||\n      !DURATION_REGEX.test(obj.hedgingDelay))\n  ) {\n    throw new Error(\n      'Invalid method config hedging policy: hedgingDelay must be a string consisting of a positive integer followed by s'\n    );\n  }\n  if ('nonFatalStatusCodes' in obj && Array.isArray(obj.nonFatalStatusCodes)) {\n    for (const value of obj.nonFatalStatusCodes) {\n      if (typeof value === 'number') {\n        if (!Object.values(Status).includes(value)) {\n          throw new Error(\n            'Invalid method config hedging policy: nonFatalStatusCodes value not in status code range'\n          );\n        }\n      } else if (typeof value === 'string') {\n        if (!Object.values(Status).includes(value.toUpperCase())) {\n          throw new Error(\n            'Invalid method config hedging policy: nonFatalStatusCodes value not a status code name'\n          );\n        }\n      } else {\n        throw new Error(\n          'Invalid method config hedging policy: nonFatalStatusCodes value must be a string or number'\n        );\n      }\n    }\n  }\n  const result: HedgingPolicy = {\n    maxAttempts: obj.maxAttempts,\n  };\n  if (obj.hedgingDelay) {\n    result.hedgingDelay = obj.hedgingDelay;\n  }\n  if (obj.nonFatalStatusCodes) {\n    result.nonFatalStatusCodes = obj.nonFatalStatusCodes;\n  }\n  return result;\n}\n\nfunction validateMethodConfig(obj: any): MethodConfig {\n  const result: MethodConfig = {\n    name: [],\n  };\n  if (!('name' in obj) || !Array.isArray(obj.name)) {\n    throw new Error('Invalid method config: invalid name array');\n  }\n  for (const name of obj.name) {\n    result.name.push(validateName(name));\n  }\n  if ('waitForReady' in obj) {\n    if (typeof obj.waitForReady !== 'boolean') {\n      throw new Error('Invalid method config: invalid waitForReady');\n    }\n    result.waitForReady = obj.waitForReady;\n  }\n  if ('timeout' in obj) {\n    if (typeof obj.timeout === 'object') {\n      if (\n        !('seconds' in obj.timeout) ||\n        !(typeof obj.timeout.seconds === 'number')\n      ) {\n        throw new Error('Invalid method config: invalid timeout.seconds');\n      }\n      if (\n        !('nanos' in obj.timeout) ||\n        !(typeof obj.timeout.nanos === 'number')\n      ) {\n        throw new Error('Invalid method config: invalid timeout.nanos');\n      }\n      result.timeout = obj.timeout;\n    } else if (\n      typeof obj.timeout === 'string' &&\n      DURATION_REGEX.test(obj.timeout)\n    ) {\n      const timeoutParts = obj.timeout\n        .substring(0, obj.timeout.length - 1)\n        .split('.');\n      result.timeout = {\n        seconds: timeoutParts[0] | 0,\n        nanos: (timeoutParts[1] ?? 0) | 0,\n      };\n    } else {\n      throw new Error('Invalid method config: invalid timeout');\n    }\n  }\n  if ('maxRequestBytes' in obj) {\n    if (typeof obj.maxRequestBytes !== 'number') {\n      throw new Error('Invalid method config: invalid maxRequestBytes');\n    }\n    result.maxRequestBytes = obj.maxRequestBytes;\n  }\n  if ('maxResponseBytes' in obj) {\n    if (typeof obj.maxResponseBytes !== 'number') {\n      throw new Error('Invalid method config: invalid maxRequestBytes');\n    }\n    result.maxResponseBytes = obj.maxResponseBytes;\n  }\n  if ('retryPolicy' in obj) {\n    if ('hedgingPolicy' in obj) {\n      throw new Error(\n        'Invalid method config: retryPolicy and hedgingPolicy cannot both be specified'\n      );\n    } else {\n      result.retryPolicy = validateRetryPolicy(obj.retryPolicy);\n    }\n  } else if ('hedgingPolicy' in obj) {\n    result.hedgingPolicy = validateHedgingPolicy(obj.hedgingPolicy);\n  }\n  return result;\n}\n\nexport function validateRetryThrottling(obj: any): RetryThrottling {\n  if (\n    !('maxTokens' in obj) ||\n    typeof obj.maxTokens !== 'number' ||\n    obj.maxTokens <= 0 ||\n    obj.maxTokens > 1000\n  ) {\n    throw new Error(\n      'Invalid retryThrottling: maxTokens must be a number in (0, 1000]'\n    );\n  }\n  if (\n    !('tokenRatio' in obj) ||\n    typeof obj.tokenRatio !== 'number' ||\n    obj.tokenRatio <= 0\n  ) {\n    throw new Error(\n      'Invalid retryThrottling: tokenRatio must be a number greater than 0'\n    );\n  }\n  return {\n    maxTokens: +(obj.maxTokens as number).toFixed(3),\n    tokenRatio: +(obj.tokenRatio as number).toFixed(3),\n  };\n}\n\nfunction validateLoadBalancingConfig(obj: any): LoadBalancingConfig {\n  if (!(typeof obj === 'object' && obj !== null)) {\n    throw new Error(\n      `Invalid loadBalancingConfig: unexpected type ${typeof obj}`\n    );\n  }\n  const keys = Object.keys(obj);\n  if (keys.length > 1) {\n    throw new Error(\n      `Invalid loadBalancingConfig: unexpected multiple keys ${keys}`\n    );\n  }\n  if (keys.length === 0) {\n    throw new Error(\n      'Invalid loadBalancingConfig: load balancing policy name required'\n    );\n  }\n  return {\n    [keys[0]]: obj[keys[0]],\n  };\n}\n\nexport function validateServiceConfig(obj: any): ServiceConfig {\n  const result: ServiceConfig = {\n    loadBalancingConfig: [],\n    methodConfig: [],\n  };\n  if ('loadBalancingPolicy' in obj) {\n    if (typeof obj.loadBalancingPolicy === 'string') {\n      result.loadBalancingPolicy = obj.loadBalancingPolicy;\n    } else {\n      throw new Error('Invalid service config: invalid loadBalancingPolicy');\n    }\n  }\n  if ('loadBalancingConfig' in obj) {\n    if (Array.isArray(obj.loadBalancingConfig)) {\n      for (const config of obj.loadBalancingConfig) {\n        result.loadBalancingConfig.push(validateLoadBalancingConfig(config));\n      }\n    } else {\n      throw new Error('Invalid service config: invalid loadBalancingConfig');\n    }\n  }\n  if ('methodConfig' in obj) {\n    if (Array.isArray(obj.methodConfig)) {\n      for (const methodConfig of obj.methodConfig) {\n        result.methodConfig.push(validateMethodConfig(methodConfig));\n      }\n    }\n  }\n  if ('retryThrottling' in obj) {\n    result.retryThrottling = validateRetryThrottling(obj.retryThrottling);\n  }\n  // Validate method name uniqueness\n  const seenMethodNames: MethodConfigName[] = [];\n  for (const methodConfig of result.methodConfig) {\n    for (const name of methodConfig.name) {\n      for (const seenName of seenMethodNames) {\n        if (\n          name.service === seenName.service &&\n          name.method === seenName.method\n        ) {\n          throw new Error(\n            `Invalid service config: duplicate name ${name.service}/${name.method}`\n          );\n        }\n      }\n      seenMethodNames.push(name);\n    }\n  }\n  return result;\n}\n\nfunction validateCanaryConfig(obj: any): ServiceConfigCanaryConfig {\n  if (!('serviceConfig' in obj)) {\n    throw new Error('Invalid service config choice: missing service config');\n  }\n  const result: ServiceConfigCanaryConfig = {\n    serviceConfig: validateServiceConfig(obj.serviceConfig),\n  };\n  if ('clientLanguage' in obj) {\n    if (Array.isArray(obj.clientLanguage)) {\n      result.clientLanguage = [];\n      for (const lang of obj.clientLanguage) {\n        if (typeof lang === 'string') {\n          result.clientLanguage.push(lang);\n        } else {\n          throw new Error(\n            'Invalid service config choice: invalid clientLanguage'\n          );\n        }\n      }\n    } else {\n      throw new Error('Invalid service config choice: invalid clientLanguage');\n    }\n  }\n  if ('clientHostname' in obj) {\n    if (Array.isArray(obj.clientHostname)) {\n      result.clientHostname = [];\n      for (const lang of obj.clientHostname) {\n        if (typeof lang === 'string') {\n          result.clientHostname.push(lang);\n        } else {\n          throw new Error(\n            'Invalid service config choice: invalid clientHostname'\n          );\n        }\n      }\n    } else {\n      throw new Error('Invalid service config choice: invalid clientHostname');\n    }\n  }\n  if ('percentage' in obj) {\n    if (\n      typeof obj.percentage === 'number' &&\n      0 <= obj.percentage &&\n      obj.percentage <= 100\n    ) {\n      result.percentage = obj.percentage;\n    } else {\n      throw new Error('Invalid service config choice: invalid percentage');\n    }\n  }\n  // Validate that no unexpected fields are present\n  const allowedFields = [\n    'clientLanguage',\n    'percentage',\n    'clientHostname',\n    'serviceConfig',\n  ];\n  for (const field in obj) {\n    if (!allowedFields.includes(field)) {\n      throw new Error(\n        `Invalid service config choice: unexpected field ${field}`\n      );\n    }\n  }\n  return result;\n}\n\nfunction validateAndSelectCanaryConfig(\n  obj: any,\n  percentage: number\n): ServiceConfig {\n  if (!Array.isArray(obj)) {\n    throw new Error('Invalid service config list');\n  }\n  for (const config of obj) {\n    const validatedConfig = validateCanaryConfig(config);\n    /* For each field, we check if it is present, then only discard the\n     * config if the field value does not match the current client */\n    if (\n      typeof validatedConfig.percentage === 'number' &&\n      percentage > validatedConfig.percentage\n    ) {\n      continue;\n    }\n    if (Array.isArray(validatedConfig.clientHostname)) {\n      let hostnameMatched = false;\n      for (const hostname of validatedConfig.clientHostname) {\n        if (hostname === os.hostname()) {\n          hostnameMatched = true;\n        }\n      }\n      if (!hostnameMatched) {\n        continue;\n      }\n    }\n    if (Array.isArray(validatedConfig.clientLanguage)) {\n      let languageMatched = false;\n      for (const language of validatedConfig.clientLanguage) {\n        if (language === CLIENT_LANGUAGE_STRING) {\n          languageMatched = true;\n        }\n      }\n      if (!languageMatched) {\n        continue;\n      }\n    }\n    return validatedConfig.serviceConfig;\n  }\n  throw new Error('No matching service config found');\n}\n\n/**\n * Find the \"grpc_config\" record among the TXT records, parse its value as JSON, validate its contents,\n * and select a service config with selection fields that all match this client. Most of these steps\n * can fail with an error; the caller must handle any errors thrown this way.\n * @param txtRecord The TXT record array that is output from a successful call to dns.resolveTxt\n * @param percentage A number chosen from the range [0, 100) that is used to select which config to use\n * @return The service configuration to use, given the percentage value, or null if the service config\n *     data has a valid format but none of the options match the current client.\n */\nexport function extractAndSelectServiceConfig(\n  txtRecord: string[][],\n  percentage: number\n): ServiceConfig | null {\n  for (const record of txtRecord) {\n    if (record.length > 0 && record[0].startsWith('grpc_config=')) {\n      /* Treat the list of strings in this record as a single string and remove\n       * \"grpc_config=\" from the beginning. The rest should be a JSON string */\n      const recordString = record.join('').substring('grpc_config='.length);\n      const recordJson: any = JSON.parse(recordString);\n      return validateAndSelectCanaryConfig(recordJson, percentage);\n    }\n  }\n  return null;\n}\n","/*\n * Copyright 2021 gRPC authors.\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 */\n\nexport enum ConnectivityState {\n  IDLE,\n  CONNECTING,\n  READY,\n  TRANSIENT_FAILURE,\n  SHUTDOWN,\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { StatusObject } from './call-interface';\nimport { Metadata } from './metadata';\nimport { Status } from './constants';\nimport { LoadBalancer } from './load-balancer';\nimport { SubchannelInterface } from './subchannel-interface';\n\nexport enum PickResultType {\n  COMPLETE,\n  QUEUE,\n  TRANSIENT_FAILURE,\n  DROP,\n}\n\nexport type OnCallEnded = (statusCode: Status, details: string, metadata: Metadata) => void;\n\nexport interface PickResult {\n  pickResultType: PickResultType;\n  /**\n   * The subchannel to use as the transport for the call. Only meaningful if\n   * `pickResultType` is COMPLETE. If null, indicates that the call should be\n   * dropped.\n   */\n  subchannel: SubchannelInterface | null;\n  /**\n   * The status object to end the call with. Populated if and only if\n   * `pickResultType` is TRANSIENT_FAILURE.\n   */\n  status: StatusObject | null;\n  onCallStarted: (() => void) | null;\n  onCallEnded: OnCallEnded | null;\n}\n\nexport interface CompletePickResult extends PickResult {\n  pickResultType: PickResultType.COMPLETE;\n  subchannel: SubchannelInterface | null;\n  status: null;\n  onCallStarted: (() => void) | null;\n  onCallEnded: OnCallEnded | null;\n}\n\nexport interface QueuePickResult extends PickResult {\n  pickResultType: PickResultType.QUEUE;\n  subchannel: null;\n  status: null;\n  onCallStarted: null;\n  onCallEnded: null;\n}\n\nexport interface TransientFailurePickResult extends PickResult {\n  pickResultType: PickResultType.TRANSIENT_FAILURE;\n  subchannel: null;\n  status: StatusObject;\n  onCallStarted: null;\n  onCallEnded: null;\n}\n\nexport interface DropCallPickResult extends PickResult {\n  pickResultType: PickResultType.DROP;\n  subchannel: null;\n  status: StatusObject;\n  onCallStarted: null;\n  onCallEnded: null;\n}\n\nexport interface PickArgs {\n  metadata: Metadata;\n  extraPickInfo: { [key: string]: string };\n}\n\n/**\n * A proxy object representing the momentary state of a load balancer. Picks\n * subchannels or returns other information based on that state. Should be\n * replaced every time the load balancer changes state.\n */\nexport interface Picker {\n  pick(pickArgs: PickArgs): PickResult;\n}\n\n/**\n * A standard picker representing a load balancer in the TRANSIENT_FAILURE\n * state. Always responds to every pick request with an UNAVAILABLE status.\n */\nexport class UnavailablePicker implements Picker {\n  private status: StatusObject;\n  constructor(status?: Partial<StatusObject>) {\n    this.status = {\n      code: Status.UNAVAILABLE,\n      details: 'No connection established',\n      metadata: new Metadata(),\n      ...status,\n    };\n  }\n  pick(pickArgs: PickArgs): TransientFailurePickResult {\n    return {\n      pickResultType: PickResultType.TRANSIENT_FAILURE,\n      subchannel: null,\n      status: this.status,\n      onCallStarted: null,\n      onCallEnded: null,\n    };\n  }\n}\n\n/**\n * A standard picker representing a load balancer in the IDLE or CONNECTING\n * state. Always responds to every pick request with a QUEUE pick result\n * indicating that the pick should be tried again with the next `Picker`. Also\n * reports back to the load balancer that a connection should be established\n * once any pick is attempted.\n * If the childPicker is provided, delegate to it instead of returning the\n * hardcoded QUEUE pick result, but still calls exitIdle.\n */\nexport class QueuePicker {\n  private calledExitIdle = false;\n  // Constructed with a load balancer. Calls exitIdle on it the first time pick is called\n  constructor(\n    private loadBalancer: LoadBalancer,\n    private childPicker?: Picker\n  ) {}\n\n  pick(pickArgs: PickArgs): PickResult {\n    if (!this.calledExitIdle) {\n      process.nextTick(() => {\n        this.loadBalancer.exitIdle();\n      });\n      this.calledExitIdle = true;\n    }\n    if (this.childPicker) {\n      return this.childPicker.pick(pickArgs);\n    } else {\n      return {\n        pickResultType: PickResultType.QUEUE,\n        subchannel: null,\n        status: null,\n        onCallStarted: null,\n        onCallEnded: null,\n      };\n    }\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { LogVerbosity } from './constants';\nimport * as logging from './logging';\n\nconst TRACER_NAME = 'backoff';\n\nconst INITIAL_BACKOFF_MS = 1000;\nconst BACKOFF_MULTIPLIER = 1.6;\nconst MAX_BACKOFF_MS = 120000;\nconst BACKOFF_JITTER = 0.2;\n\n/**\n * Get a number uniformly at random in the range [min, max)\n * @param min\n * @param max\n */\nfunction uniformRandom(min: number, max: number) {\n  return Math.random() * (max - min) + min;\n}\n\nexport interface BackoffOptions {\n  initialDelay?: number;\n  multiplier?: number;\n  jitter?: number;\n  maxDelay?: number;\n}\n\nexport class BackoffTimeout {\n  /**\n   * The delay time at the start, and after each reset.\n   */\n  private readonly initialDelay: number = INITIAL_BACKOFF_MS;\n  /**\n   * The exponential backoff multiplier.\n   */\n  private readonly multiplier: number = BACKOFF_MULTIPLIER;\n  /**\n   * The maximum delay time\n   */\n  private readonly maxDelay: number = MAX_BACKOFF_MS;\n  /**\n   * The maximum fraction by which the delay time can randomly vary after\n   * applying the multiplier.\n   */\n  private readonly jitter: number = BACKOFF_JITTER;\n  /**\n   * The delay time for the next time the timer runs.\n   */\n  private nextDelay: number;\n  /**\n   * The handle of the underlying timer. If running is false, this value refers\n   * to an object representing a timer that has ended, but it can still be\n   * interacted with without error.\n   */\n  private timerId: NodeJS.Timeout;\n  /**\n   * Indicates whether the timer is currently running.\n   */\n  private running = false;\n  /**\n   * Indicates whether the timer should keep the Node process running if no\n   * other async operation is doing so.\n   */\n  private hasRef = true;\n  /**\n   * The time that the currently running timer was started. Only valid if\n   * running is true.\n   */\n  private startTime: Date = new Date();\n  /**\n   * The approximate time that the currently running timer will end. Only valid\n   * if running is true.\n   */\n  private endTime: Date = new Date();\n\n  private id: number;\n\n  private static nextId = 0;\n\n  constructor(private callback: () => void, options?: BackoffOptions) {\n    this.id = BackoffTimeout.getNextId();\n    if (options) {\n      if (options.initialDelay) {\n        this.initialDelay = options.initialDelay;\n      }\n      if (options.multiplier) {\n        this.multiplier = options.multiplier;\n      }\n      if (options.jitter) {\n        this.jitter = options.jitter;\n      }\n      if (options.maxDelay) {\n        this.maxDelay = options.maxDelay;\n      }\n    }\n    this.trace('constructed initialDelay=' + this.initialDelay + ' multiplier=' + this.multiplier + ' jitter=' + this.jitter + ' maxDelay=' + this.maxDelay);\n    this.nextDelay = this.initialDelay;\n    this.timerId = setTimeout(() => {}, 0);\n    clearTimeout(this.timerId);\n  }\n\n  private static getNextId() {\n    return this.nextId++;\n  }\n\n  private trace(text: string) {\n    logging.trace(LogVerbosity.DEBUG, TRACER_NAME, '{' + this.id + '} ' + text);\n  }\n\n  private runTimer(delay: number) {\n    this.trace('runTimer(delay=' + delay + ')');\n    this.endTime = this.startTime;\n    this.endTime.setMilliseconds(\n      this.endTime.getMilliseconds() + delay\n    );\n    clearTimeout(this.timerId);\n    this.timerId = setTimeout(() => {\n      this.trace('timer fired');\n      this.running = false;\n      this.callback();\n    }, delay);\n    if (!this.hasRef) {\n      this.timerId.unref?.();\n    }\n  }\n\n  /**\n   * Call the callback after the current amount of delay time\n   */\n  runOnce() {\n    this.trace('runOnce()');\n    this.running = true;\n    this.startTime = new Date();\n    this.runTimer(this.nextDelay);\n    const nextBackoff = Math.min(\n      this.nextDelay * this.multiplier,\n      this.maxDelay\n    );\n    const jitterMagnitude = nextBackoff * this.jitter;\n    this.nextDelay =\n      nextBackoff + uniformRandom(-jitterMagnitude, jitterMagnitude);\n  }\n\n  /**\n   * Stop the timer. The callback will not be called until `runOnce` is called\n   * again.\n   */\n  stop() {\n    this.trace('stop()');\n    clearTimeout(this.timerId);\n    this.running = false;\n  }\n\n  /**\n   * Reset the delay time to its initial value. If the timer is still running,\n   * retroactively apply that reset to the current timer.\n   */\n  reset() {\n    this.trace('reset() running=' + this.running);\n    this.nextDelay = this.initialDelay;\n    if (this.running) {\n      const now = new Date();\n      const newEndTime = this.startTime;\n      newEndTime.setMilliseconds(newEndTime.getMilliseconds() + this.nextDelay);\n      clearTimeout(this.timerId);\n      if (now < newEndTime) {\n        this.runTimer(newEndTime.getTime() - now.getTime());\n      } else {\n        this.running = false;\n      }\n    }\n  }\n\n  /**\n   * Check whether the timer is currently running.\n   */\n  isRunning() {\n    return this.running;\n  }\n\n  /**\n   * Set that while the timer is running, it should keep the Node process\n   * running.\n   */\n  ref() {\n    this.hasRef = true;\n    this.timerId.ref?.();\n  }\n\n  /**\n   * Set that while the timer is running, it should not keep the Node process\n   * running.\n   */\n  unref() {\n    this.hasRef = false;\n    this.timerId.unref?.();\n  }\n\n  /**\n   * Get the approximate timestamp of when the timer will fire. Only valid if\n   * this.isRunning() is true.\n   */\n  getEndTime() {\n    return this.endTime;\n  }\n}\n","/*\n * Copyright 2020 gRPC authors.\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 */\n\nimport {\n  LoadBalancer,\n  ChannelControlHelper,\n  TypedLoadBalancingConfig,\n  createLoadBalancer,\n} from './load-balancer';\nimport { Endpoint, SubchannelAddress } from './subchannel-address';\nimport { ChannelOptions } from './channel-options';\nimport { ConnectivityState } from './connectivity-state';\nimport { Picker } from './picker';\nimport type { ChannelRef, SubchannelRef } from './channelz';\nimport { SubchannelInterface } from './subchannel-interface';\nimport { StatusOr } from './call-interface';\n\nconst TYPE_NAME = 'child_load_balancer_helper';\n\nexport class ChildLoadBalancerHandler {\n  private currentChild: LoadBalancer | null = null;\n  private pendingChild: LoadBalancer | null = null;\n  private latestConfig: TypedLoadBalancingConfig | null = null;\n\n  private ChildPolicyHelper = class {\n    private child: LoadBalancer | null = null;\n    constructor(private parent: ChildLoadBalancerHandler) {}\n    createSubchannel(\n      subchannelAddress: SubchannelAddress,\n      subchannelArgs: ChannelOptions\n    ): SubchannelInterface {\n      return this.parent.channelControlHelper.createSubchannel(\n        subchannelAddress,\n        subchannelArgs\n      );\n    }\n    updateState(connectivityState: ConnectivityState, picker: Picker, errorMessage: string | null): void {\n      if (this.calledByPendingChild()) {\n        if (connectivityState === ConnectivityState.CONNECTING) {\n          return;\n        }\n        this.parent.currentChild?.destroy();\n        this.parent.currentChild = this.parent.pendingChild;\n        this.parent.pendingChild = null;\n      } else if (!this.calledByCurrentChild()) {\n        return;\n      }\n      this.parent.channelControlHelper.updateState(connectivityState, picker, errorMessage);\n    }\n    requestReresolution(): void {\n      const latestChild = this.parent.pendingChild ?? this.parent.currentChild;\n      if (this.child === latestChild) {\n        this.parent.channelControlHelper.requestReresolution();\n      }\n    }\n    setChild(newChild: LoadBalancer) {\n      this.child = newChild;\n    }\n    addChannelzChild(child: ChannelRef | SubchannelRef) {\n      this.parent.channelControlHelper.addChannelzChild(child);\n    }\n    removeChannelzChild(child: ChannelRef | SubchannelRef) {\n      this.parent.channelControlHelper.removeChannelzChild(child);\n    }\n\n    private calledByPendingChild(): boolean {\n      return this.child === this.parent.pendingChild;\n    }\n    private calledByCurrentChild(): boolean {\n      return this.child === this.parent.currentChild;\n    }\n  };\n\n  constructor(\n    private readonly channelControlHelper: ChannelControlHelper\n  ) {}\n\n  protected configUpdateRequiresNewPolicyInstance(\n    oldConfig: TypedLoadBalancingConfig,\n    newConfig: TypedLoadBalancingConfig\n  ): boolean {\n    return oldConfig.getLoadBalancerName() !== newConfig.getLoadBalancerName();\n  }\n\n  /**\n   * Prerequisites: lbConfig !== null and lbConfig.name is registered\n   * @param endpointList\n   * @param lbConfig\n   * @param attributes\n   */\n  updateAddressList(\n    endpointList: StatusOr<Endpoint[]>,\n    lbConfig: TypedLoadBalancingConfig,\n    options: ChannelOptions,\n    resolutionNote: string\n  ): boolean {\n    let childToUpdate: LoadBalancer;\n    if (\n      this.currentChild === null ||\n      this.latestConfig === null ||\n      this.configUpdateRequiresNewPolicyInstance(this.latestConfig, lbConfig)\n    ) {\n      const newHelper = new this.ChildPolicyHelper(this);\n      const newChild = createLoadBalancer(lbConfig, newHelper)!;\n      newHelper.setChild(newChild);\n      if (this.currentChild === null) {\n        this.currentChild = newChild;\n        childToUpdate = this.currentChild;\n      } else {\n        if (this.pendingChild) {\n          this.pendingChild.destroy();\n        }\n        this.pendingChild = newChild;\n        childToUpdate = this.pendingChild;\n      }\n    } else {\n      if (this.pendingChild === null) {\n        childToUpdate = this.currentChild;\n      } else {\n        childToUpdate = this.pendingChild;\n      }\n    }\n    this.latestConfig = lbConfig;\n    return childToUpdate.updateAddressList(endpointList, lbConfig, options, resolutionNote);\n  }\n  exitIdle(): void {\n    if (this.currentChild) {\n      this.currentChild.exitIdle();\n      if (this.pendingChild) {\n        this.pendingChild.exitIdle();\n      }\n    }\n  }\n  resetBackoff(): void {\n    if (this.currentChild) {\n      this.currentChild.resetBackoff();\n      if (this.pendingChild) {\n        this.pendingChild.resetBackoff();\n      }\n    }\n  }\n  destroy(): void {\n    /* Note: state updates are only propagated from the child balancer if that\n     * object is equal to this.currentChild or this.pendingChild. Since this\n     * function sets both of those to null, no further state updates will\n     * occur after this function returns. */\n    if (this.currentChild) {\n      this.currentChild.destroy();\n      this.currentChild = null;\n    }\n    if (this.pendingChild) {\n      this.pendingChild.destroy();\n      this.pendingChild = null;\n    }\n  }\n  getTypeName(): string {\n    return TYPE_NAME;\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport {\n  ChannelControlHelper,\n  LoadBalancer,\n  TypedLoadBalancingConfig,\n  selectLbConfigFromList,\n} from './load-balancer';\nimport {\n  MethodConfig,\n  ServiceConfig,\n  validateServiceConfig,\n} from './service-config';\nimport { ConnectivityState } from './connectivity-state';\nimport { CHANNEL_ARGS_CONFIG_SELECTOR_KEY, ConfigSelector, createResolver, Resolver } from './resolver';\nimport { Picker, UnavailablePicker, QueuePicker } from './picker';\nimport { BackoffOptions, BackoffTimeout } from './backoff-timeout';\nimport { Status } from './constants';\nimport { StatusObject, StatusOr } from './call-interface';\nimport { Metadata } from './metadata';\nimport * as logging from './logging';\nimport { LogVerbosity } from './constants';\nimport { Endpoint } from './subchannel-address';\nimport { GrpcUri, uriToString } from './uri-parser';\nimport { ChildLoadBalancerHandler } from './load-balancer-child-handler';\nimport { ChannelOptions } from './channel-options';\n\nconst TRACER_NAME = 'resolving_load_balancer';\n\nfunction trace(text: string): void {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\ntype NameMatchLevel = 'EMPTY' | 'SERVICE' | 'SERVICE_AND_METHOD';\n\n/**\n * Name match levels in order from most to least specific. This is the order in\n * which searches will be performed.\n */\nconst NAME_MATCH_LEVEL_ORDER: NameMatchLevel[] = [\n  'SERVICE_AND_METHOD',\n  'SERVICE',\n  'EMPTY',\n];\n\nfunction hasMatchingName(\n  service: string,\n  method: string,\n  methodConfig: MethodConfig,\n  matchLevel: NameMatchLevel\n): boolean {\n  for (const name of methodConfig.name) {\n    switch (matchLevel) {\n      case 'EMPTY':\n        if (!name.service && !name.method) {\n          return true;\n        }\n        break;\n      case 'SERVICE':\n        if (name.service === service && !name.method) {\n          return true;\n        }\n        break;\n      case 'SERVICE_AND_METHOD':\n        if (name.service === service && name.method === method) {\n          return true;\n        }\n    }\n  }\n  return false;\n}\n\nfunction findMatchingConfig(\n  service: string,\n  method: string,\n  methodConfigs: MethodConfig[],\n  matchLevel: NameMatchLevel\n): MethodConfig | null {\n  for (const config of methodConfigs) {\n    if (hasMatchingName(service, method, config, matchLevel)) {\n      return config;\n    }\n  }\n  return null;\n}\n\nfunction getDefaultConfigSelector(\n  serviceConfig: ServiceConfig | null\n): ConfigSelector {\n  return {\n      invoke(\n      methodName: string,\n      metadata: Metadata\n    ) {\n      const splitName = methodName.split('/').filter(x => x.length > 0);\n      const service = splitName[0] ?? '';\n      const method = splitName[1] ?? '';\n      if (serviceConfig && serviceConfig.methodConfig) {\n        /* Check for the following in order, and return the first method\n        * config that matches:\n        * 1. A name that exactly matches the service and method\n        * 2. A name with no method set that matches the service\n        * 3. An empty name\n        */\n        for (const matchLevel of NAME_MATCH_LEVEL_ORDER) {\n          const matchingConfig = findMatchingConfig(\n            service,\n            method,\n            serviceConfig.methodConfig,\n            matchLevel\n          );\n          if (matchingConfig) {\n            return {\n              methodConfig: matchingConfig,\n              pickInformation: {},\n              status: Status.OK,\n              dynamicFilterFactories: [],\n            };\n          }\n        }\n      }\n      return {\n        methodConfig: { name: [] },\n        pickInformation: {},\n        status: Status.OK,\n        dynamicFilterFactories: [],\n      };\n    },\n    unref() {}\n  };\n}\n\nexport interface ResolutionCallback {\n  (serviceConfig: ServiceConfig, configSelector: ConfigSelector): void;\n}\n\nexport interface ResolutionFailureCallback {\n  (status: StatusObject): void;\n}\n\nexport class ResolvingLoadBalancer implements LoadBalancer {\n  /**\n   * The resolver class constructed for the target address.\n   */\n  private readonly innerResolver: Resolver;\n\n  private readonly childLoadBalancer: ChildLoadBalancerHandler;\n  private latestChildState: ConnectivityState = ConnectivityState.IDLE;\n  private latestChildPicker: Picker = new QueuePicker(this);\n  private latestChildErrorMessage: string | null = null;\n  /**\n   * This resolving load balancer's current connectivity state.\n   */\n  private currentState: ConnectivityState = ConnectivityState.IDLE;\n  private readonly defaultServiceConfig: ServiceConfig;\n  /**\n   * The service config object from the last successful resolution, if\n   * available. A value of null indicates that we have not yet received a valid\n   * service config from the resolver.\n   */\n  private previousServiceConfig: ServiceConfig | null = null;\n\n  /**\n   * The backoff timer for handling name resolution failures.\n   */\n  private readonly backoffTimeout: BackoffTimeout;\n\n  /**\n   * Indicates whether we should attempt to resolve again after the backoff\n   * timer runs out.\n   */\n  private continueResolving = false;\n\n  /**\n   * Wrapper class that behaves like a `LoadBalancer` and also handles name\n   * resolution internally.\n   * @param target The address of the backend to connect to.\n   * @param channelControlHelper `ChannelControlHelper` instance provided by\n   *     this load balancer's owner.\n   * @param defaultServiceConfig The default service configuration to be used\n   *     if none is provided by the name resolver. A `null` value indicates\n   *     that the default behavior should be the default unconfigured behavior.\n   *     In practice, that means using the \"pick first\" load balancer\n   *     implmentation\n   */\n  constructor(\n    private readonly target: GrpcUri,\n    private readonly channelControlHelper: ChannelControlHelper,\n    private readonly channelOptions: ChannelOptions,\n    private readonly onSuccessfulResolution: ResolutionCallback,\n    private readonly onFailedResolution: ResolutionFailureCallback\n  ) {\n    if (channelOptions['grpc.service_config']) {\n      this.defaultServiceConfig = validateServiceConfig(\n        JSON.parse(channelOptions['grpc.service_config']!)\n      );\n    } else {\n      this.defaultServiceConfig = {\n        loadBalancingConfig: [],\n        methodConfig: [],\n      };\n    }\n\n    this.updateState(ConnectivityState.IDLE, new QueuePicker(this), null);\n    this.childLoadBalancer = new ChildLoadBalancerHandler(\n      {\n        createSubchannel:\n          channelControlHelper.createSubchannel.bind(channelControlHelper),\n        requestReresolution: () => {\n          /* If the backoffTimeout is running, we're still backing off from\n           * making resolve requests, so we shouldn't make another one here.\n           * In that case, the backoff timer callback will call\n           * updateResolution */\n          if (this.backoffTimeout.isRunning()) {\n            trace(\n              'requestReresolution delayed by backoff timer until ' +\n                this.backoffTimeout.getEndTime().toISOString()\n            );\n            this.continueResolving = true;\n          } else {\n            this.updateResolution();\n          }\n        },\n        updateState: (newState: ConnectivityState, picker: Picker, errorMessage: string | null) => {\n          this.latestChildState = newState;\n          this.latestChildPicker = picker;\n          this.latestChildErrorMessage = errorMessage;\n          this.updateState(newState, picker, errorMessage);\n        },\n        addChannelzChild:\n          channelControlHelper.addChannelzChild.bind(channelControlHelper),\n        removeChannelzChild:\n          channelControlHelper.removeChannelzChild.bind(channelControlHelper),\n      }\n    );\n    this.innerResolver = createResolver(\n      target,\n      this.handleResolverResult.bind(this),\n      channelOptions\n    );\n    const backoffOptions: BackoffOptions = {\n      initialDelay: channelOptions['grpc.initial_reconnect_backoff_ms'],\n      maxDelay: channelOptions['grpc.max_reconnect_backoff_ms'],\n    };\n    this.backoffTimeout = new BackoffTimeout(() => {\n      if (this.continueResolving) {\n        this.updateResolution();\n        this.continueResolving = false;\n      } else {\n        this.updateState(this.latestChildState, this.latestChildPicker, this.latestChildErrorMessage);\n      }\n    }, backoffOptions);\n    this.backoffTimeout.unref();\n  }\n\n  private handleResolverResult(\n    endpointList: StatusOr<Endpoint[]>,\n    attributes: { [key: string]: unknown },\n    serviceConfig: StatusOr<ServiceConfig> | null,\n    resolutionNote: string\n  ): boolean {\n    this.backoffTimeout.stop();\n    this.backoffTimeout.reset();\n    let resultAccepted = true;\n    let workingServiceConfig: ServiceConfig | null = null;\n    if (serviceConfig === null) {\n      workingServiceConfig = this.defaultServiceConfig;\n    } else if (serviceConfig.ok) {\n      workingServiceConfig = serviceConfig.value;\n    } else {\n      if (this.previousServiceConfig !== null) {\n        workingServiceConfig = this.previousServiceConfig;\n      } else {\n        resultAccepted = false;\n        this.handleResolutionFailure(serviceConfig.error);\n      }\n    }\n\n    if (workingServiceConfig !== null) {\n      const workingConfigList =\n        workingServiceConfig?.loadBalancingConfig ?? [];\n      const loadBalancingConfig = selectLbConfigFromList(\n        workingConfigList,\n        true\n      );\n      if (loadBalancingConfig === null) {\n        resultAccepted = false;\n        this.handleResolutionFailure({\n          code: Status.UNAVAILABLE,\n          details:\n            'All load balancer options in service config are not compatible',\n          metadata: new Metadata(),\n        });\n      } else {\n        resultAccepted = this.childLoadBalancer.updateAddressList(\n          endpointList,\n          loadBalancingConfig,\n          {...this.channelOptions, ...attributes},\n          resolutionNote\n        );\n      }\n    }\n    if (resultAccepted) {\n      this.onSuccessfulResolution(\n        workingServiceConfig!,\n        attributes[CHANNEL_ARGS_CONFIG_SELECTOR_KEY] as ConfigSelector ?? getDefaultConfigSelector(workingServiceConfig!)\n      );\n    }\n    return resultAccepted;\n  }\n\n  private updateResolution() {\n    this.innerResolver.updateResolution();\n    if (this.currentState === ConnectivityState.IDLE) {\n      /* this.latestChildPicker is initialized as new QueuePicker(this), which\n       * is an appropriate value here if the child LB policy is unset.\n       * Otherwise, we want to delegate to the child here, in case that\n       * triggers something. */\n      this.updateState(ConnectivityState.CONNECTING, this.latestChildPicker, this.latestChildErrorMessage);\n    }\n    this.backoffTimeout.runOnce();\n  }\n\n  private updateState(connectivityState: ConnectivityState, picker: Picker, errorMessage: string | null) {\n    trace(\n      uriToString(this.target) +\n        ' ' +\n        ConnectivityState[this.currentState] +\n        ' -> ' +\n        ConnectivityState[connectivityState]\n    );\n    // Ensure that this.exitIdle() is called by the picker\n    if (connectivityState === ConnectivityState.IDLE) {\n      picker = new QueuePicker(this, picker);\n    }\n    this.currentState = connectivityState;\n    this.channelControlHelper.updateState(connectivityState, picker, errorMessage);\n  }\n\n  private handleResolutionFailure(error: StatusObject) {\n    if (this.latestChildState === ConnectivityState.IDLE) {\n      this.updateState(\n        ConnectivityState.TRANSIENT_FAILURE,\n        new UnavailablePicker(error),\n        error.details\n      );\n      this.onFailedResolution(error);\n    }\n  }\n\n  exitIdle() {\n    if (\n      this.currentState === ConnectivityState.IDLE ||\n      this.currentState === ConnectivityState.TRANSIENT_FAILURE\n    ) {\n      if (this.backoffTimeout.isRunning()) {\n        this.continueResolving = true;\n      } else {\n        this.updateResolution();\n      }\n    }\n    this.childLoadBalancer.exitIdle();\n  }\n\n  updateAddressList(\n    endpointList: StatusOr<Endpoint[]>,\n    lbConfig: TypedLoadBalancingConfig | null\n  ): never {\n    throw new Error('updateAddressList not supported on ResolvingLoadBalancer');\n  }\n\n  resetBackoff() {\n    this.backoffTimeout.reset();\n    this.childLoadBalancer.resetBackoff();\n  }\n\n  destroy() {\n    this.childLoadBalancer.destroy();\n    this.innerResolver.destroy();\n    this.backoffTimeout.reset();\n    this.backoffTimeout.stop();\n    this.latestChildState = ConnectivityState.IDLE;\n    this.latestChildPicker = new QueuePicker(this);\n    this.currentState = ConnectivityState.IDLE;\n    this.previousServiceConfig = null;\n    this.continueResolving = false;\n  }\n\n  getTypeName() {\n    return 'resolving_load_balancer';\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { CompressionAlgorithms } from './compression-algorithms';\n\n/**\n * An interface that contains options used when initializing a Channel instance.\n */\nexport interface ChannelOptions {\n  'grpc.ssl_target_name_override'?: string;\n  'grpc.primary_user_agent'?: string;\n  'grpc.secondary_user_agent'?: string;\n  'grpc.default_authority'?: string;\n  'grpc.keepalive_time_ms'?: number;\n  'grpc.keepalive_timeout_ms'?: number;\n  'grpc.keepalive_permit_without_calls'?: number;\n  'grpc.service_config'?: string;\n  'grpc.max_concurrent_streams'?: number;\n  'grpc.initial_reconnect_backoff_ms'?: number;\n  'grpc.max_reconnect_backoff_ms'?: number;\n  'grpc.use_local_subchannel_pool'?: number;\n  'grpc.max_send_message_length'?: number;\n  'grpc.max_receive_message_length'?: number;\n  'grpc.enable_http_proxy'?: number;\n  /* http_connect_target and http_connect_creds are used for passing data\n   * around internally, and should not be documented as public-facing options\n   */\n  'grpc.http_connect_target'?: string;\n  'grpc.http_connect_creds'?: string;\n  'grpc.default_compression_algorithm'?: CompressionAlgorithms;\n  'grpc.enable_channelz'?: number;\n  'grpc.dns_min_time_between_resolutions_ms'?: number;\n  'grpc.enable_retries'?: number;\n  'grpc.per_rpc_retry_buffer_size'?: number;\n  /* This option is pattered like a core option, but the core does not have\n   * this option. It is closely related to the option\n   * grpc.per_rpc_retry_buffer_size, which is in the core. The core will likely\n   * implement this functionality using the ResourceQuota mechanism, so there\n   * will probably not be any collision or other inconsistency. */\n  'grpc.retry_buffer_size'?: number;\n  'grpc.max_connection_age_ms'?: number;\n  'grpc.max_connection_age_grace_ms'?: number;\n  'grpc.max_connection_idle_ms'?: number;\n  'grpc-node.max_session_memory'?: number;\n  'grpc.service_config_disable_resolution'?: number;\n  'grpc.client_idle_timeout_ms'?: number;\n  /**\n   * Set the enableTrace option in TLS clients and servers\n   */\n  'grpc-node.tls_enable_trace'?: number;\n  'grpc.lb.ring_hash.ring_size_cap'?: number;\n  'grpc-node.retry_max_attempts_limit'?: number;\n  'grpc-node.flow_control_window'?: number;\n  'grpc.server_call_metric_recording'?: number;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  [key: string]: any;\n}\n\n/**\n * This is for checking provided options at runtime. This is an object for\n * easier membership checking.\n */\nexport const recognizedOptions = {\n  'grpc.ssl_target_name_override': true,\n  'grpc.primary_user_agent': true,\n  'grpc.secondary_user_agent': true,\n  'grpc.default_authority': true,\n  'grpc.keepalive_time_ms': true,\n  'grpc.keepalive_timeout_ms': true,\n  'grpc.keepalive_permit_without_calls': true,\n  'grpc.service_config': true,\n  'grpc.max_concurrent_streams': true,\n  'grpc.initial_reconnect_backoff_ms': true,\n  'grpc.max_reconnect_backoff_ms': true,\n  'grpc.use_local_subchannel_pool': true,\n  'grpc.max_send_message_length': true,\n  'grpc.max_receive_message_length': true,\n  'grpc.enable_http_proxy': true,\n  'grpc.enable_channelz': true,\n  'grpc.dns_min_time_between_resolutions_ms': true,\n  'grpc.enable_retries': true,\n  'grpc.per_rpc_retry_buffer_size': true,\n  'grpc.retry_buffer_size': true,\n  'grpc.max_connection_age_ms': true,\n  'grpc.max_connection_age_grace_ms': true,\n  'grpc-node.max_session_memory': true,\n  'grpc.service_config_disable_resolution': true,\n  'grpc.client_idle_timeout_ms': true,\n  'grpc-node.tls_enable_trace': true,\n  'grpc.lb.ring_hash.ring_size_cap': true,\n  'grpc-node.retry_max_attempts_limit': true,\n  'grpc-node.flow_control_window': true,\n  'grpc.server_call_metric_recording': true\n};\n\nexport function channelOptionsEqual(\n  options1: ChannelOptions,\n  options2: ChannelOptions\n) {\n  const keys1 = Object.keys(options1).sort();\n  const keys2 = Object.keys(options2).sort();\n  if (keys1.length !== keys2.length) {\n    return false;\n  }\n  for (let i = 0; i < keys1.length; i += 1) {\n    if (keys1[i] !== keys2[i]) {\n      return false;\n    }\n    if (options1[keys1[i]] !== options2[keys2[i]]) {\n      return false;\n    }\n  }\n  return true;\n}\n","/*\n * Copyright 2021 gRPC authors.\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 */\n\nimport { isIP, isIPv6 } from 'net';\n\nexport interface TcpSubchannelAddress {\n  port: number;\n  host: string;\n}\n\nexport interface IpcSubchannelAddress {\n  path: string;\n}\n/**\n * This represents a single backend address to connect to. This interface is a\n * subset of net.SocketConnectOpts, i.e. the options described at\n * https://nodejs.org/api/net.html#net_socket_connect_options_connectlistener.\n * Those are in turn a subset of the options that can be passed to http2.connect.\n */\n\nexport type SubchannelAddress = TcpSubchannelAddress | IpcSubchannelAddress;\n\nexport function isTcpSubchannelAddress(\n  address: SubchannelAddress\n): address is TcpSubchannelAddress {\n  return 'port' in address;\n}\n\nexport function subchannelAddressEqual(\n  address1?: SubchannelAddress,\n  address2?: SubchannelAddress\n): boolean {\n  if (!address1 && !address2) {\n    return true;\n  }\n  if (!address1 || !address2) {\n    return false;\n  }\n  if (isTcpSubchannelAddress(address1)) {\n    return (\n      isTcpSubchannelAddress(address2) &&\n      address1.host === address2.host &&\n      address1.port === address2.port\n    );\n  } else {\n    return !isTcpSubchannelAddress(address2) && address1.path === address2.path;\n  }\n}\n\nexport function subchannelAddressToString(address: SubchannelAddress): string {\n  if (isTcpSubchannelAddress(address)) {\n    if (isIPv6(address.host)) {\n      return '[' + address.host + ']:' + address.port;\n    } else {\n      return address.host + ':' + address.port;\n    }\n  } else {\n    return address.path;\n  }\n}\n\nconst DEFAULT_PORT = 443;\n\nexport function stringToSubchannelAddress(\n  addressString: string,\n  port?: number\n): SubchannelAddress {\n  if (isIP(addressString)) {\n    return {\n      host: addressString,\n      port: port ?? DEFAULT_PORT,\n    };\n  } else {\n    return {\n      path: addressString,\n    };\n  }\n}\n\nexport interface Endpoint {\n  addresses: SubchannelAddress[];\n}\n\nexport function endpointEqual(endpoint1: Endpoint, endpoint2: Endpoint) {\n  if (endpoint1.addresses.length !== endpoint2.addresses.length) {\n    return false;\n  }\n  for (let i = 0; i < endpoint1.addresses.length; i++) {\n    if (\n      !subchannelAddressEqual(endpoint1.addresses[i], endpoint2.addresses[i])\n    ) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function endpointToString(endpoint: Endpoint): string {\n  return (\n    '[' + endpoint.addresses.map(subchannelAddressToString).join(', ') + ']'\n  );\n}\n\nexport function endpointHasAddress(\n  endpoint: Endpoint,\n  expectedAddress: SubchannelAddress\n): boolean {\n  for (const address of endpoint.addresses) {\n    if (subchannelAddressEqual(address, expectedAddress)) {\n      return true;\n    }\n  }\n  return false;\n}\n\ninterface EndpointMapEntry<ValueType> {\n  key: Endpoint;\n  value: ValueType;\n}\n\nfunction endpointEqualUnordered(\n  endpoint1: Endpoint,\n  endpoint2: Endpoint\n): boolean {\n  if (endpoint1.addresses.length !== endpoint2.addresses.length) {\n    return false;\n  }\n  for (const address1 of endpoint1.addresses) {\n    let matchFound = false;\n    for (const address2 of endpoint2.addresses) {\n      if (subchannelAddressEqual(address1, address2)) {\n        matchFound = true;\n        break;\n      }\n    }\n    if (!matchFound) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport class EndpointMap<ValueType> {\n  private map: Set<EndpointMapEntry<ValueType>> = new Set();\n\n  get size() {\n    return this.map.size;\n  }\n\n  getForSubchannelAddress(address: SubchannelAddress): ValueType | undefined {\n    for (const entry of this.map) {\n      if (endpointHasAddress(entry.key, address)) {\n        return entry.value;\n      }\n    }\n    return undefined;\n  }\n\n  /**\n   * Delete any entries in this map with keys that are not in endpoints\n   * @param endpoints\n   */\n  deleteMissing(endpoints: Endpoint[]): ValueType[] {\n    const removedValues: ValueType[] = [];\n    for (const entry of this.map) {\n      let foundEntry = false;\n      for (const endpoint of endpoints) {\n        if (endpointEqualUnordered(endpoint, entry.key)) {\n          foundEntry = true;\n        }\n      }\n      if (!foundEntry) {\n        removedValues.push(entry.value);\n        this.map.delete(entry);\n      }\n    }\n    return removedValues;\n  }\n\n  get(endpoint: Endpoint): ValueType | undefined {\n    for (const entry of this.map) {\n      if (endpointEqualUnordered(endpoint, entry.key)) {\n        return entry.value;\n      }\n    }\n    return undefined;\n  }\n\n  set(endpoint: Endpoint, mapEntry: ValueType) {\n    for (const entry of this.map) {\n      if (endpointEqualUnordered(endpoint, entry.key)) {\n        entry.value = mapEntry;\n        return;\n      }\n    }\n    this.map.add({ key: endpoint, value: mapEntry });\n  }\n\n  delete(endpoint: Endpoint) {\n    for (const entry of this.map) {\n      if (endpointEqualUnordered(endpoint, entry.key)) {\n        this.map.delete(entry);\n        return;\n      }\n    }\n  }\n\n  has(endpoint: Endpoint): boolean {\n    for (const entry of this.map) {\n      if (endpointEqualUnordered(endpoint, entry.key)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  clear() {\n    this.map.clear();\n  }\n\n  *keys(): IterableIterator<Endpoint> {\n    for (const entry of this.map) {\n      yield entry.key;\n    }\n  }\n\n  *values(): IterableIterator<ValueType> {\n    for (const entry of this.map) {\n      yield entry.value;\n    }\n  }\n\n  *entries(): IterableIterator<[Endpoint, ValueType]> {\n    for (const entry of this.map) {\n      yield [entry.key, entry.value];\n    }\n  }\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n    function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n    var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n    var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n    var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n    var _, done = false;\r\n    for (var i = decorators.length - 1; i >= 0; i--) {\r\n        var context = {};\r\n        for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n        for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n        context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n        var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n        if (kind === \"accessor\") {\r\n            if (result === void 0) continue;\r\n            if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n            if (_ = accept(result.get)) descriptor.get = _;\r\n            if (_ = accept(result.set)) descriptor.set = _;\r\n            if (_ = accept(result.init)) initializers.unshift(_);\r\n        }\r\n        else if (_ = accept(result)) {\r\n            if (kind === \"field\") initializers.unshift(_);\r\n            else descriptor[key] = _;\r\n        }\r\n    }\r\n    if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n    done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n    var useValue = arguments.length > 2;\r\n    for (var i = 0; i < initializers.length; i++) {\r\n        value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n    }\r\n    return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n    return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n    if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n    return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    var desc = Object.getOwnPropertyDescriptor(m, k);\r\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n        desc = { enumerable: true, get: function() { return m[k]; } };\r\n    }\r\n    Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n    if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n    return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n    if (value !== null && value !== void 0) {\r\n        if (typeof value !== \"object\") throw new TypeError(\"Object expected.\");\r\n        var dispose;\r\n        if (async) {\r\n            if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n            dispose = value[Symbol.asyncDispose];\r\n        }\r\n        if (dispose === void 0) {\r\n            if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n            dispose = value[Symbol.dispose];\r\n        }\r\n        if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n        env.stack.push({ value: value, dispose: dispose, async: async });\r\n    }\r\n    else if (async) {\r\n        env.stack.push({ async: true });\r\n    }\r\n    return value;\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n    function fail(e) {\r\n        env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n        env.hasError = true;\r\n    }\r\n    function next() {\r\n        while (env.stack.length) {\r\n            var rec = env.stack.pop();\r\n            try {\r\n                var result = rec.dispose && rec.dispose.call(rec.value);\r\n                if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n            }\r\n            catch (e) {\r\n                fail(e);\r\n            }\r\n        }\r\n        if (env.hasError) throw env.error;\r\n    }\r\n    return next();\r\n}\r\n\r\nexport default {\r\n    __extends,\r\n    __assign,\r\n    __rest,\r\n    __decorate,\r\n    __param,\r\n    __metadata,\r\n    __awaiter,\r\n    __generator,\r\n    __createBinding,\r\n    __exportStar,\r\n    __values,\r\n    __read,\r\n    __spread,\r\n    __spreadArrays,\r\n    __spreadArray,\r\n    __await,\r\n    __asyncGenerator,\r\n    __asyncDelegator,\r\n    __asyncValues,\r\n    __makeTemplateObject,\r\n    __importStar,\r\n    __importDefault,\r\n    __classPrivateFieldGet,\r\n    __classPrivateFieldSet,\r\n    __classPrivateFieldIn,\r\n    __addDisposableResource,\r\n    __disposeResources,\r\n};\r\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function (d, b) {\n  extendStatics = Object.setPrototypeOf || {\n    __proto__: []\n  } instanceof Array && function (d, b) {\n    d.__proto__ = b;\n  } || function (d, b) {\n    for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n  };\n  return extendStatics(d, b);\n};\nfunction __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() {\n    this.constructor = d;\n  }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nfunction __generator(thisArg, body) {\n  var _ = {\n      label: 0,\n      sent: function () {\n        if (t[0] & 1) throw t[1];\n        return t[1];\n      },\n      trys: [],\n      ops: []\n    },\n    f,\n    y,\n    t,\n    g;\n  return g = {\n    next: verb(0),\n    \"throw\": verb(1),\n    \"return\": verb(2)\n  }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n    return this;\n  }), g;\n  function verb(n) {\n    return function (v) {\n      return step([n, v]);\n    };\n  }\n  function step(op) {\n    if (f) throw new TypeError(\"Generator is already executing.\");\n    while (g && (g = 0, op[0] && (_ = 0)), _) try {\n      if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n      if (y = 0, t) op = [op[0] & 2, t.value];\n      switch (op[0]) {\n        case 0:\n        case 1:\n          t = op;\n          break;\n        case 4:\n          _.label++;\n          return {\n            value: op[1],\n            done: false\n          };\n        case 5:\n          _.label++;\n          y = op[1];\n          op = [0];\n          continue;\n        case 7:\n          op = _.ops.pop();\n          _.trys.pop();\n          continue;\n        default:\n          if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n            _ = 0;\n            continue;\n          }\n          if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n            _.label = op[1];\n            break;\n          }\n          if (op[0] === 6 && _.label < t[1]) {\n            _.label = t[1];\n            t = op;\n            break;\n          }\n          if (t && _.label < t[2]) {\n            _.label = t[2];\n            _.ops.push(op);\n            break;\n          }\n          if (t[2]) _.ops.pop();\n          _.trys.pop();\n          continue;\n      }\n      op = body.call(thisArg, _);\n    } catch (e) {\n      op = [6, e];\n      y = 0;\n    } finally {\n      f = t = 0;\n    }\n    if (op[0] & 5) throw op[1];\n    return {\n      value: op[0] ? op[1] : void 0,\n      done: true\n    };\n  }\n}\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nvar TreeNode = /** @class */function () {\n  function TreeNode(key, value, color) {\n    if (color === void 0) {\n      color = 1 /* TreeNodeColor.RED */;\n    }\n    this._left = undefined;\n    this._right = undefined;\n    this._parent = undefined;\n    this._key = key;\n    this._value = value;\n    this._color = color;\n  }\n  /**\n   * @description Get the pre node.\n   * @returns TreeNode about the pre node.\n   */\n  TreeNode.prototype._pre = function () {\n    var preNode = this;\n    var isRootOrHeader = preNode._parent._parent === preNode;\n    if (isRootOrHeader && preNode._color === 1 /* TreeNodeColor.RED */) {\n      preNode = preNode._right;\n    } else if (preNode._left) {\n      preNode = preNode._left;\n      while (preNode._right) {\n        preNode = preNode._right;\n      }\n    } else {\n      // Must be root and left is null\n      if (isRootOrHeader) {\n        return preNode._parent;\n      }\n      var pre = preNode._parent;\n      while (pre._left === preNode) {\n        preNode = pre;\n        pre = preNode._parent;\n      }\n      preNode = pre;\n    }\n    return preNode;\n  };\n  /**\n   * @description Get the next node.\n   * @returns TreeNode about the next node.\n   */\n  TreeNode.prototype._next = function () {\n    var nextNode = this;\n    if (nextNode._right) {\n      nextNode = nextNode._right;\n      while (nextNode._left) {\n        nextNode = nextNode._left;\n      }\n      return nextNode;\n    } else {\n      var pre = nextNode._parent;\n      while (pre._right === nextNode) {\n        nextNode = pre;\n        pre = nextNode._parent;\n      }\n      if (nextNode._right !== pre) {\n        return pre;\n      } else return nextNode;\n    }\n  };\n  /**\n   * @description Rotate left.\n   * @returns TreeNode about moved to original position after rotation.\n   */\n  TreeNode.prototype._rotateLeft = function () {\n    var PP = this._parent;\n    var V = this._right;\n    var R = V._left;\n    if (PP._parent === this) PP._parent = V;else if (PP._left === this) PP._left = V;else PP._right = V;\n    V._parent = PP;\n    V._left = this;\n    this._parent = V;\n    this._right = R;\n    if (R) R._parent = this;\n    return V;\n  };\n  /**\n   * @description Rotate right.\n   * @returns TreeNode about moved to original position after rotation.\n   */\n  TreeNode.prototype._rotateRight = function () {\n    var PP = this._parent;\n    var F = this._left;\n    var K = F._right;\n    if (PP._parent === this) PP._parent = F;else if (PP._left === this) PP._left = F;else PP._right = F;\n    F._parent = PP;\n    F._right = this;\n    this._parent = F;\n    this._left = K;\n    if (K) K._parent = this;\n    return F;\n  };\n  return TreeNode;\n}();\nvar TreeNodeEnableIndex = /** @class */function (_super) {\n  __extends(TreeNodeEnableIndex, _super);\n  function TreeNodeEnableIndex() {\n    var _this = _super !== null && _super.apply(this, arguments) || this;\n    _this._subTreeSize = 1;\n    return _this;\n  }\n  /**\n   * @description Rotate left and do recount.\n   * @returns TreeNode about moved to original position after rotation.\n   */\n  TreeNodeEnableIndex.prototype._rotateLeft = function () {\n    var parent = _super.prototype._rotateLeft.call(this);\n    this._recount();\n    parent._recount();\n    return parent;\n  };\n  /**\n   * @description Rotate right and do recount.\n   * @returns TreeNode about moved to original position after rotation.\n   */\n  TreeNodeEnableIndex.prototype._rotateRight = function () {\n    var parent = _super.prototype._rotateRight.call(this);\n    this._recount();\n    parent._recount();\n    return parent;\n  };\n  TreeNodeEnableIndex.prototype._recount = function () {\n    this._subTreeSize = 1;\n    if (this._left) {\n      this._subTreeSize += this._left._subTreeSize;\n    }\n    if (this._right) {\n      this._subTreeSize += this._right._subTreeSize;\n    }\n  };\n  return TreeNodeEnableIndex;\n}(TreeNode);\n\nvar ContainerIterator = /** @class */function () {\n  /**\n   * @internal\n   */\n  function ContainerIterator(iteratorType) {\n    if (iteratorType === void 0) {\n      iteratorType = 0 /* IteratorType.NORMAL */;\n    }\n    this.iteratorType = iteratorType;\n  }\n  /**\n   * @param iter - The other iterator you want to compare.\n   * @returns Whether this equals to obj.\n   * @example\n   * container.find(1).equals(container.end());\n   */\n  ContainerIterator.prototype.equals = function (iter) {\n    return this._node === iter._node;\n  };\n  return ContainerIterator;\n}();\nvar Base = /** @class */function () {\n  function Base() {\n    /**\n     * @description Container's size.\n     * @internal\n     */\n    this._length = 0;\n  }\n  Object.defineProperty(Base.prototype, \"length\", {\n    /**\n     * @returns The size of the container.\n     * @example\n     * const container = new Vector([1, 2]);\n     * console.log(container.length); // 2\n     */\n    get: function () {\n      return this._length;\n    },\n    enumerable: false,\n    configurable: true\n  });\n  /**\n   * @returns The size of the container.\n   * @example\n   * const container = new Vector([1, 2]);\n   * console.log(container.size()); // 2\n   */\n  Base.prototype.size = function () {\n    return this._length;\n  };\n  /**\n   * @returns Whether the container is empty.\n   * @example\n   * container.clear();\n   * console.log(container.empty());  // true\n   */\n  Base.prototype.empty = function () {\n    return this._length === 0;\n  };\n  return Base;\n}();\nvar Container = /** @class */function (_super) {\n  __extends(Container, _super);\n  function Container() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n  return Container;\n}(Base);\n\n/**\n * @description Throw an iterator access error.\n * @internal\n */\nfunction throwIteratorAccessError() {\n  throw new RangeError('Iterator access denied!');\n}\n\nvar TreeContainer = /** @class */function (_super) {\n  __extends(TreeContainer, _super);\n  /**\n   * @internal\n   */\n  function TreeContainer(cmp, enableIndex) {\n    if (cmp === void 0) {\n      cmp = function (x, y) {\n        if (x < y) return -1;\n        if (x > y) return 1;\n        return 0;\n      };\n    }\n    if (enableIndex === void 0) {\n      enableIndex = false;\n    }\n    var _this = _super.call(this) || this;\n    /**\n     * @internal\n     */\n    _this._root = undefined;\n    _this._cmp = cmp;\n    _this.enableIndex = enableIndex;\n    _this._TreeNodeClass = enableIndex ? TreeNodeEnableIndex : TreeNode;\n    _this._header = new _this._TreeNodeClass();\n    return _this;\n  }\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._lowerBound = function (curNode, key) {\n    var resNode = this._header;\n    while (curNode) {\n      var cmpResult = this._cmp(curNode._key, key);\n      if (cmpResult < 0) {\n        curNode = curNode._right;\n      } else if (cmpResult > 0) {\n        resNode = curNode;\n        curNode = curNode._left;\n      } else return curNode;\n    }\n    return resNode;\n  };\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._upperBound = function (curNode, key) {\n    var resNode = this._header;\n    while (curNode) {\n      var cmpResult = this._cmp(curNode._key, key);\n      if (cmpResult <= 0) {\n        curNode = curNode._right;\n      } else {\n        resNode = curNode;\n        curNode = curNode._left;\n      }\n    }\n    return resNode;\n  };\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._reverseLowerBound = function (curNode, key) {\n    var resNode = this._header;\n    while (curNode) {\n      var cmpResult = this._cmp(curNode._key, key);\n      if (cmpResult < 0) {\n        resNode = curNode;\n        curNode = curNode._right;\n      } else if (cmpResult > 0) {\n        curNode = curNode._left;\n      } else return curNode;\n    }\n    return resNode;\n  };\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._reverseUpperBound = function (curNode, key) {\n    var resNode = this._header;\n    while (curNode) {\n      var cmpResult = this._cmp(curNode._key, key);\n      if (cmpResult < 0) {\n        resNode = curNode;\n        curNode = curNode._right;\n      } else {\n        curNode = curNode._left;\n      }\n    }\n    return resNode;\n  };\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._eraseNodeSelfBalance = function (curNode) {\n    while (true) {\n      var parentNode = curNode._parent;\n      if (parentNode === this._header) return;\n      if (curNode._color === 1 /* TreeNodeColor.RED */) {\n        curNode._color = 0 /* TreeNodeColor.BLACK */;\n        return;\n      }\n      if (curNode === parentNode._left) {\n        var brother = parentNode._right;\n        if (brother._color === 1 /* TreeNodeColor.RED */) {\n          brother._color = 0 /* TreeNodeColor.BLACK */;\n          parentNode._color = 1 /* TreeNodeColor.RED */;\n          if (parentNode === this._root) {\n            this._root = parentNode._rotateLeft();\n          } else parentNode._rotateLeft();\n        } else {\n          if (brother._right && brother._right._color === 1 /* TreeNodeColor.RED */) {\n            brother._color = parentNode._color;\n            parentNode._color = 0 /* TreeNodeColor.BLACK */;\n            brother._right._color = 0 /* TreeNodeColor.BLACK */;\n            if (parentNode === this._root) {\n              this._root = parentNode._rotateLeft();\n            } else parentNode._rotateLeft();\n            return;\n          } else if (brother._left && brother._left._color === 1 /* TreeNodeColor.RED */) {\n            brother._color = 1 /* TreeNodeColor.RED */;\n            brother._left._color = 0 /* TreeNodeColor.BLACK */;\n            brother._rotateRight();\n          } else {\n            brother._color = 1 /* TreeNodeColor.RED */;\n            curNode = parentNode;\n          }\n        }\n      } else {\n        var brother = parentNode._left;\n        if (brother._color === 1 /* TreeNodeColor.RED */) {\n          brother._color = 0 /* TreeNodeColor.BLACK */;\n          parentNode._color = 1 /* TreeNodeColor.RED */;\n          if (parentNode === this._root) {\n            this._root = parentNode._rotateRight();\n          } else parentNode._rotateRight();\n        } else {\n          if (brother._left && brother._left._color === 1 /* TreeNodeColor.RED */) {\n            brother._color = parentNode._color;\n            parentNode._color = 0 /* TreeNodeColor.BLACK */;\n            brother._left._color = 0 /* TreeNodeColor.BLACK */;\n            if (parentNode === this._root) {\n              this._root = parentNode._rotateRight();\n            } else parentNode._rotateRight();\n            return;\n          } else if (brother._right && brother._right._color === 1 /* TreeNodeColor.RED */) {\n            brother._color = 1 /* TreeNodeColor.RED */;\n            brother._right._color = 0 /* TreeNodeColor.BLACK */;\n            brother._rotateLeft();\n          } else {\n            brother._color = 1 /* TreeNodeColor.RED */;\n            curNode = parentNode;\n          }\n        }\n      }\n    }\n  };\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._eraseNode = function (curNode) {\n    if (this._length === 1) {\n      this.clear();\n      return;\n    }\n    var swapNode = curNode;\n    while (swapNode._left || swapNode._right) {\n      if (swapNode._right) {\n        swapNode = swapNode._right;\n        while (swapNode._left) swapNode = swapNode._left;\n      } else {\n        swapNode = swapNode._left;\n      }\n      var key = curNode._key;\n      curNode._key = swapNode._key;\n      swapNode._key = key;\n      var value = curNode._value;\n      curNode._value = swapNode._value;\n      swapNode._value = value;\n      curNode = swapNode;\n    }\n    if (this._header._left === swapNode) {\n      this._header._left = swapNode._parent;\n    } else if (this._header._right === swapNode) {\n      this._header._right = swapNode._parent;\n    }\n    this._eraseNodeSelfBalance(swapNode);\n    var _parent = swapNode._parent;\n    if (swapNode === _parent._left) {\n      _parent._left = undefined;\n    } else _parent._right = undefined;\n    this._length -= 1;\n    this._root._color = 0 /* TreeNodeColor.BLACK */;\n    if (this.enableIndex) {\n      while (_parent !== this._header) {\n        _parent._subTreeSize -= 1;\n        _parent = _parent._parent;\n      }\n    }\n  };\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._inOrderTraversal = function (param) {\n    var pos = typeof param === 'number' ? param : undefined;\n    var callback = typeof param === 'function' ? param : undefined;\n    var nodeList = typeof param === 'undefined' ? [] : undefined;\n    var index = 0;\n    var curNode = this._root;\n    var stack = [];\n    while (stack.length || curNode) {\n      if (curNode) {\n        stack.push(curNode);\n        curNode = curNode._left;\n      } else {\n        curNode = stack.pop();\n        if (index === pos) return curNode;\n        nodeList && nodeList.push(curNode);\n        callback && callback(curNode, index, this);\n        index += 1;\n        curNode = curNode._right;\n      }\n    }\n    return nodeList;\n  };\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._insertNodeSelfBalance = function (curNode) {\n    while (true) {\n      var parentNode = curNode._parent;\n      if (parentNode._color === 0 /* TreeNodeColor.BLACK */) return;\n      var grandParent = parentNode._parent;\n      if (parentNode === grandParent._left) {\n        var uncle = grandParent._right;\n        if (uncle && uncle._color === 1 /* TreeNodeColor.RED */) {\n          uncle._color = parentNode._color = 0 /* TreeNodeColor.BLACK */;\n          if (grandParent === this._root) return;\n          grandParent._color = 1 /* TreeNodeColor.RED */;\n          curNode = grandParent;\n          continue;\n        } else if (curNode === parentNode._right) {\n          curNode._color = 0 /* TreeNodeColor.BLACK */;\n          if (curNode._left) {\n            curNode._left._parent = parentNode;\n          }\n          if (curNode._right) {\n            curNode._right._parent = grandParent;\n          }\n          parentNode._right = curNode._left;\n          grandParent._left = curNode._right;\n          curNode._left = parentNode;\n          curNode._right = grandParent;\n          if (grandParent === this._root) {\n            this._root = curNode;\n            this._header._parent = curNode;\n          } else {\n            var GP = grandParent._parent;\n            if (GP._left === grandParent) {\n              GP._left = curNode;\n            } else GP._right = curNode;\n          }\n          curNode._parent = grandParent._parent;\n          parentNode._parent = curNode;\n          grandParent._parent = curNode;\n          grandParent._color = 1 /* TreeNodeColor.RED */;\n        } else {\n          parentNode._color = 0 /* TreeNodeColor.BLACK */;\n          if (grandParent === this._root) {\n            this._root = grandParent._rotateRight();\n          } else grandParent._rotateRight();\n          grandParent._color = 1 /* TreeNodeColor.RED */;\n          return;\n        }\n      } else {\n        var uncle = grandParent._left;\n        if (uncle && uncle._color === 1 /* TreeNodeColor.RED */) {\n          uncle._color = parentNode._color = 0 /* TreeNodeColor.BLACK */;\n          if (grandParent === this._root) return;\n          grandParent._color = 1 /* TreeNodeColor.RED */;\n          curNode = grandParent;\n          continue;\n        } else if (curNode === parentNode._left) {\n          curNode._color = 0 /* TreeNodeColor.BLACK */;\n          if (curNode._left) {\n            curNode._left._parent = grandParent;\n          }\n          if (curNode._right) {\n            curNode._right._parent = parentNode;\n          }\n          grandParent._right = curNode._left;\n          parentNode._left = curNode._right;\n          curNode._left = grandParent;\n          curNode._right = parentNode;\n          if (grandParent === this._root) {\n            this._root = curNode;\n            this._header._parent = curNode;\n          } else {\n            var GP = grandParent._parent;\n            if (GP._left === grandParent) {\n              GP._left = curNode;\n            } else GP._right = curNode;\n          }\n          curNode._parent = grandParent._parent;\n          parentNode._parent = curNode;\n          grandParent._parent = curNode;\n          grandParent._color = 1 /* TreeNodeColor.RED */;\n        } else {\n          parentNode._color = 0 /* TreeNodeColor.BLACK */;\n          if (grandParent === this._root) {\n            this._root = grandParent._rotateLeft();\n          } else grandParent._rotateLeft();\n          grandParent._color = 1 /* TreeNodeColor.RED */;\n          return;\n        }\n      }\n      if (this.enableIndex) {\n        parentNode._recount();\n        grandParent._recount();\n        curNode._recount();\n      }\n      return;\n    }\n  };\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._set = function (key, value, hint) {\n    if (this._root === undefined) {\n      this._length += 1;\n      this._root = new this._TreeNodeClass(key, value, 0 /* TreeNodeColor.BLACK */);\n      this._root._parent = this._header;\n      this._header._parent = this._header._left = this._header._right = this._root;\n      return this._length;\n    }\n    var curNode;\n    var minNode = this._header._left;\n    var compareToMin = this._cmp(minNode._key, key);\n    if (compareToMin === 0) {\n      minNode._value = value;\n      return this._length;\n    } else if (compareToMin > 0) {\n      minNode._left = new this._TreeNodeClass(key, value);\n      minNode._left._parent = minNode;\n      curNode = minNode._left;\n      this._header._left = curNode;\n    } else {\n      var maxNode = this._header._right;\n      var compareToMax = this._cmp(maxNode._key, key);\n      if (compareToMax === 0) {\n        maxNode._value = value;\n        return this._length;\n      } else if (compareToMax < 0) {\n        maxNode._right = new this._TreeNodeClass(key, value);\n        maxNode._right._parent = maxNode;\n        curNode = maxNode._right;\n        this._header._right = curNode;\n      } else {\n        if (hint !== undefined) {\n          var iterNode = hint._node;\n          if (iterNode !== this._header) {\n            var iterCmpRes = this._cmp(iterNode._key, key);\n            if (iterCmpRes === 0) {\n              iterNode._value = value;\n              return this._length;\n            } else /* istanbul ignore else */if (iterCmpRes > 0) {\n                var preNode = iterNode._pre();\n                var preCmpRes = this._cmp(preNode._key, key);\n                if (preCmpRes === 0) {\n                  preNode._value = value;\n                  return this._length;\n                } else if (preCmpRes < 0) {\n                  curNode = new this._TreeNodeClass(key, value);\n                  if (preNode._right === undefined) {\n                    preNode._right = curNode;\n                    curNode._parent = preNode;\n                  } else {\n                    iterNode._left = curNode;\n                    curNode._parent = iterNode;\n                  }\n                }\n              }\n          }\n        }\n        if (curNode === undefined) {\n          curNode = this._root;\n          while (true) {\n            var cmpResult = this._cmp(curNode._key, key);\n            if (cmpResult > 0) {\n              if (curNode._left === undefined) {\n                curNode._left = new this._TreeNodeClass(key, value);\n                curNode._left._parent = curNode;\n                curNode = curNode._left;\n                break;\n              }\n              curNode = curNode._left;\n            } else if (cmpResult < 0) {\n              if (curNode._right === undefined) {\n                curNode._right = new this._TreeNodeClass(key, value);\n                curNode._right._parent = curNode;\n                curNode = curNode._right;\n                break;\n              }\n              curNode = curNode._right;\n            } else {\n              curNode._value = value;\n              return this._length;\n            }\n          }\n        }\n      }\n    }\n    if (this.enableIndex) {\n      var parent_1 = curNode._parent;\n      while (parent_1 !== this._header) {\n        parent_1._subTreeSize += 1;\n        parent_1 = parent_1._parent;\n      }\n    }\n    this._insertNodeSelfBalance(curNode);\n    this._length += 1;\n    return this._length;\n  };\n  /**\n   * @internal\n   */\n  TreeContainer.prototype._getTreeNodeByKey = function (curNode, key) {\n    while (curNode) {\n      var cmpResult = this._cmp(curNode._key, key);\n      if (cmpResult < 0) {\n        curNode = curNode._right;\n      } else if (cmpResult > 0) {\n        curNode = curNode._left;\n      } else return curNode;\n    }\n    return curNode || this._header;\n  };\n  TreeContainer.prototype.clear = function () {\n    this._length = 0;\n    this._root = undefined;\n    this._header._parent = undefined;\n    this._header._left = this._header._right = undefined;\n  };\n  /**\n   * @description Update node's key by iterator.\n   * @param iter - The iterator you want to change.\n   * @param key - The key you want to update.\n   * @returns Whether the modification is successful.\n   * @example\n   * const st = new orderedSet([1, 2, 5]);\n   * const iter = st.find(2);\n   * st.updateKeyByIterator(iter, 3); // then st will become [1, 3, 5]\n   */\n  TreeContainer.prototype.updateKeyByIterator = function (iter, key) {\n    var node = iter._node;\n    if (node === this._header) {\n      throwIteratorAccessError();\n    }\n    if (this._length === 1) {\n      node._key = key;\n      return true;\n    }\n    var nextKey = node._next()._key;\n    if (node === this._header._left) {\n      if (this._cmp(nextKey, key) > 0) {\n        node._key = key;\n        return true;\n      }\n      return false;\n    }\n    var preKey = node._pre()._key;\n    if (node === this._header._right) {\n      if (this._cmp(preKey, key) < 0) {\n        node._key = key;\n        return true;\n      }\n      return false;\n    }\n    if (this._cmp(preKey, key) >= 0 || this._cmp(nextKey, key) <= 0) return false;\n    node._key = key;\n    return true;\n  };\n  TreeContainer.prototype.eraseElementByPos = function (pos) {\n    if (pos < 0 || pos > this._length - 1) {\n      throw new RangeError();\n    }\n    var node = this._inOrderTraversal(pos);\n    this._eraseNode(node);\n    return this._length;\n  };\n  /**\n   * @description Remove the element of the specified key.\n   * @param key - The key you want to remove.\n   * @returns Whether erase successfully.\n   */\n  TreeContainer.prototype.eraseElementByKey = function (key) {\n    if (this._length === 0) return false;\n    var curNode = this._getTreeNodeByKey(this._root, key);\n    if (curNode === this._header) return false;\n    this._eraseNode(curNode);\n    return true;\n  };\n  TreeContainer.prototype.eraseElementByIterator = function (iter) {\n    var node = iter._node;\n    if (node === this._header) {\n      throwIteratorAccessError();\n    }\n    var hasNoRight = node._right === undefined;\n    var isNormal = iter.iteratorType === 0 /* IteratorType.NORMAL */;\n    // For the normal iterator, the `next` node will be swapped to `this` node when has right.\n    if (isNormal) {\n      // So we should move it to next when it's right is null.\n      if (hasNoRight) iter.next();\n    } else {\n      // For the reverse iterator, only when it doesn't have right and has left the `next` node will be swapped.\n      // So when it has right, or it is a leaf node we should move it to `next`.\n      if (!hasNoRight || node._left === undefined) iter.next();\n    }\n    this._eraseNode(node);\n    return iter;\n  };\n  /**\n   * @description Get the height of the tree.\n   * @returns Number about the height of the RB-tree.\n   */\n  TreeContainer.prototype.getHeight = function () {\n    if (this._length === 0) return 0;\n    function traversal(curNode) {\n      if (!curNode) return 0;\n      return Math.max(traversal(curNode._left), traversal(curNode._right)) + 1;\n    }\n    return traversal(this._root);\n  };\n  return TreeContainer;\n}(Container);\n\nvar TreeIterator = /** @class */function (_super) {\n  __extends(TreeIterator, _super);\n  /**\n   * @internal\n   */\n  function TreeIterator(node, header, iteratorType) {\n    var _this = _super.call(this, iteratorType) || this;\n    _this._node = node;\n    _this._header = header;\n    if (_this.iteratorType === 0 /* IteratorType.NORMAL */) {\n      _this.pre = function () {\n        if (this._node === this._header._left) {\n          throwIteratorAccessError();\n        }\n        this._node = this._node._pre();\n        return this;\n      };\n      _this.next = function () {\n        if (this._node === this._header) {\n          throwIteratorAccessError();\n        }\n        this._node = this._node._next();\n        return this;\n      };\n    } else {\n      _this.pre = function () {\n        if (this._node === this._header._right) {\n          throwIteratorAccessError();\n        }\n        this._node = this._node._next();\n        return this;\n      };\n      _this.next = function () {\n        if (this._node === this._header) {\n          throwIteratorAccessError();\n        }\n        this._node = this._node._pre();\n        return this;\n      };\n    }\n    return _this;\n  }\n  Object.defineProperty(TreeIterator.prototype, \"index\", {\n    /**\n     * @description Get the sequential index of the iterator in the tree container.<br/>\n     *              <strong>Note:</strong>\n     *              This function only takes effect when the specified tree container `enableIndex = true`.\n     * @returns The index subscript of the node in the tree.\n     * @example\n     * const st = new OrderedSet([1, 2, 3], true);\n     * console.log(st.begin().next().index);  // 1\n     */\n    get: function () {\n      var _node = this._node;\n      var root = this._header._parent;\n      if (_node === this._header) {\n        if (root) {\n          return root._subTreeSize - 1;\n        }\n        return 0;\n      }\n      var index = 0;\n      if (_node._left) {\n        index += _node._left._subTreeSize;\n      }\n      while (_node !== root) {\n        var _parent = _node._parent;\n        if (_node === _parent._right) {\n          index += 1;\n          if (_parent._left) {\n            index += _parent._left._subTreeSize;\n          }\n        }\n        _node = _parent;\n      }\n      return index;\n    },\n    enumerable: false,\n    configurable: true\n  });\n  TreeIterator.prototype.isAccessible = function () {\n    return this._node !== this._header;\n  };\n  return TreeIterator;\n}(ContainerIterator);\n\nvar OrderedMapIterator = /** @class */function (_super) {\n  __extends(OrderedMapIterator, _super);\n  function OrderedMapIterator(node, header, container, iteratorType) {\n    var _this = _super.call(this, node, header, iteratorType) || this;\n    _this.container = container;\n    return _this;\n  }\n  Object.defineProperty(OrderedMapIterator.prototype, \"pointer\", {\n    get: function () {\n      if (this._node === this._header) {\n        throwIteratorAccessError();\n      }\n      var self = this;\n      return new Proxy([], {\n        get: function (target, prop) {\n          if (prop === '0') return self._node._key;else if (prop === '1') return self._node._value;\n          target[0] = self._node._key;\n          target[1] = self._node._value;\n          return target[prop];\n        },\n        set: function (_, prop, newValue) {\n          if (prop !== '1') {\n            throw new TypeError('prop must be 1');\n          }\n          self._node._value = newValue;\n          return true;\n        }\n      });\n    },\n    enumerable: false,\n    configurable: true\n  });\n  OrderedMapIterator.prototype.copy = function () {\n    return new OrderedMapIterator(this._node, this._header, this.container, this.iteratorType);\n  };\n  return OrderedMapIterator;\n}(TreeIterator);\nvar OrderedMap = /** @class */function (_super) {\n  __extends(OrderedMap, _super);\n  /**\n   * @param container - The initialization container.\n   * @param cmp - The compare function.\n   * @param enableIndex - Whether to enable iterator indexing function.\n   * @example\n   * new OrderedMap();\n   * new OrderedMap([[0, 1], [2, 1]]);\n   * new OrderedMap([[0, 1], [2, 1]], (x, y) => x - y);\n   * new OrderedMap([[0, 1], [2, 1]], (x, y) => x - y, true);\n   */\n  function OrderedMap(container, cmp, enableIndex) {\n    if (container === void 0) {\n      container = [];\n    }\n    var _this = _super.call(this, cmp, enableIndex) || this;\n    var self = _this;\n    container.forEach(function (el) {\n      self.setElement(el[0], el[1]);\n    });\n    return _this;\n  }\n  OrderedMap.prototype.begin = function () {\n    return new OrderedMapIterator(this._header._left || this._header, this._header, this);\n  };\n  OrderedMap.prototype.end = function () {\n    return new OrderedMapIterator(this._header, this._header, this);\n  };\n  OrderedMap.prototype.rBegin = function () {\n    return new OrderedMapIterator(this._header._right || this._header, this._header, this, 1 /* IteratorType.REVERSE */);\n  };\n\n  OrderedMap.prototype.rEnd = function () {\n    return new OrderedMapIterator(this._header, this._header, this, 1 /* IteratorType.REVERSE */);\n  };\n\n  OrderedMap.prototype.front = function () {\n    if (this._length === 0) return;\n    var minNode = this._header._left;\n    return [minNode._key, minNode._value];\n  };\n  OrderedMap.prototype.back = function () {\n    if (this._length === 0) return;\n    var maxNode = this._header._right;\n    return [maxNode._key, maxNode._value];\n  };\n  OrderedMap.prototype.lowerBound = function (key) {\n    var resNode = this._lowerBound(this._root, key);\n    return new OrderedMapIterator(resNode, this._header, this);\n  };\n  OrderedMap.prototype.upperBound = function (key) {\n    var resNode = this._upperBound(this._root, key);\n    return new OrderedMapIterator(resNode, this._header, this);\n  };\n  OrderedMap.prototype.reverseLowerBound = function (key) {\n    var resNode = this._reverseLowerBound(this._root, key);\n    return new OrderedMapIterator(resNode, this._header, this);\n  };\n  OrderedMap.prototype.reverseUpperBound = function (key) {\n    var resNode = this._reverseUpperBound(this._root, key);\n    return new OrderedMapIterator(resNode, this._header, this);\n  };\n  OrderedMap.prototype.forEach = function (callback) {\n    this._inOrderTraversal(function (node, index, map) {\n      callback([node._key, node._value], index, map);\n    });\n  };\n  /**\n   * @description Insert a key-value pair or set value by the given key.\n   * @param key - The key want to insert.\n   * @param value - The value want to set.\n   * @param hint - You can give an iterator hint to improve insertion efficiency.\n   * @return The size of container after setting.\n   * @example\n   * const mp = new OrderedMap([[2, 0], [4, 0], [5, 0]]);\n   * const iter = mp.begin();\n   * mp.setElement(1, 0);\n   * mp.setElement(3, 0, iter);  // give a hint will be faster.\n   */\n  OrderedMap.prototype.setElement = function (key, value, hint) {\n    return this._set(key, value, hint);\n  };\n  OrderedMap.prototype.getElementByPos = function (pos) {\n    if (pos < 0 || pos > this._length - 1) {\n      throw new RangeError();\n    }\n    var node = this._inOrderTraversal(pos);\n    return [node._key, node._value];\n  };\n  OrderedMap.prototype.find = function (key) {\n    var curNode = this._getTreeNodeByKey(this._root, key);\n    return new OrderedMapIterator(curNode, this._header, this);\n  };\n  /**\n   * @description Get the value of the element of the specified key.\n   * @param key - The specified key you want to get.\n   * @example\n   * const val = container.getElementByKey(1);\n   */\n  OrderedMap.prototype.getElementByKey = function (key) {\n    var curNode = this._getTreeNodeByKey(this._root, key);\n    return curNode._value;\n  };\n  OrderedMap.prototype.union = function (other) {\n    var self = this;\n    other.forEach(function (el) {\n      self.setElement(el[0], el[1]);\n    });\n    return this._length;\n  };\n  OrderedMap.prototype[Symbol.iterator] = function () {\n    var length, nodeList, i, node;\n    return __generator(this, function (_a) {\n      switch (_a.label) {\n        case 0:\n          length = this._length;\n          nodeList = this._inOrderTraversal();\n          i = 0;\n          _a.label = 1;\n        case 1:\n          if (!(i < length)) return [3 /*break*/, 4];\n          node = nodeList[i];\n          return [4 /*yield*/, [node._key, node._value]];\n        case 2:\n          _a.sent();\n          _a.label = 3;\n        case 3:\n          ++i;\n          return [3 /*break*/, 1];\n        case 4:\n          return [2 /*return*/];\n      }\n    });\n  };\n\n  return OrderedMap;\n}(TreeContainer);\n\nexport { OrderedMap };\n//# sourceMappingURL=index.js.map\n","export const enum TreeNodeColor {\n  RED = 1,\n  BLACK = 0\n}\n\nexport class TreeNode<K, V> {\n  _color: TreeNodeColor;\n  _key: K | undefined;\n  _value: V | undefined;\n  _left: TreeNode<K, V> | undefined = undefined;\n  _right: TreeNode<K, V> | undefined = undefined;\n  _parent: TreeNode<K, V> | undefined = undefined;\n  constructor(\n    key?: K,\n    value?: V,\n    color: TreeNodeColor = TreeNodeColor.RED\n  ) {\n    this._key = key;\n    this._value = value;\n    this._color = color;\n  }\n  /**\n   * @description Get the pre node.\n   * @returns TreeNode about the pre node.\n   */\n  _pre() {\n    let preNode: TreeNode<K, V> = this;\n    const isRootOrHeader = preNode._parent!._parent === preNode;\n    if (isRootOrHeader && preNode._color === TreeNodeColor.RED) {\n      preNode = preNode._right!;\n    } else if (preNode._left) {\n      preNode = preNode._left;\n      while (preNode._right) {\n        preNode = preNode._right;\n      }\n    } else {\n      // Must be root and left is null\n      if (isRootOrHeader) {\n        return preNode._parent!;\n      }\n      let pre = preNode._parent!;\n      while (pre._left === preNode) {\n        preNode = pre;\n        pre = preNode._parent!;\n      }\n      preNode = pre;\n    }\n    return preNode;\n  }\n  /**\n   * @description Get the next node.\n   * @returns TreeNode about the next node.\n   */\n  _next() {\n    let nextNode: TreeNode<K, V> = this;\n    if (nextNode._right) {\n      nextNode = nextNode._right;\n      while (nextNode._left) {\n        nextNode = nextNode._left;\n      }\n      return nextNode;\n    } else {\n      let pre = nextNode._parent!;\n      while (pre._right === nextNode) {\n        nextNode = pre;\n        pre = nextNode._parent!;\n      }\n      if (nextNode._right !== pre) {\n        return pre;\n      } else return nextNode;\n    }\n  }\n  /**\n   * @description Rotate left.\n   * @returns TreeNode about moved to original position after rotation.\n   */\n  _rotateLeft() {\n    const PP = this._parent!;\n    const V = this._right!;\n    const R = V._left;\n\n    if (PP._parent === this) PP._parent = V;\n    else if (PP._left === this) PP._left = V;\n    else PP._right = V;\n\n    V._parent = PP;\n    V._left = this;\n\n    this._parent = V;\n    this._right = R;\n\n    if (R) R._parent = this;\n\n    return V;\n  }\n  /**\n   * @description Rotate right.\n   * @returns TreeNode about moved to original position after rotation.\n   */\n  _rotateRight() {\n    const PP = this._parent!;\n    const F = this._left!;\n    const K = F._right;\n\n    if (PP._parent === this) PP._parent = F;\n    else if (PP._left === this) PP._left = F;\n    else PP._right = F;\n\n    F._parent = PP;\n    F._right = this;\n\n    this._parent = F;\n    this._left = K;\n\n    if (K) K._parent = this;\n\n    return F;\n  }\n}\n\nexport class TreeNodeEnableIndex<K, V> extends TreeNode<K, V> {\n  _subTreeSize = 1;\n  /**\n   * @description Rotate left and do recount.\n   * @returns TreeNode about moved to original position after rotation.\n   */\n  _rotateLeft() {\n    const parent = super._rotateLeft() as TreeNodeEnableIndex<K, V>;\n    this._recount();\n    parent._recount();\n    return parent;\n  }\n  /**\n   * @description Rotate right and do recount.\n   * @returns TreeNode about moved to original position after rotation.\n   */\n  _rotateRight() {\n    const parent = super._rotateRight() as TreeNodeEnableIndex<K, V>;\n    this._recount();\n    parent._recount();\n    return parent;\n  }\n  _recount() {\n    this._subTreeSize = 1;\n    if (this._left) {\n      this._subTreeSize += (this._left as TreeNodeEnableIndex<K, V>)._subTreeSize;\n    }\n    if (this._right) {\n      this._subTreeSize += (this._right as TreeNodeEnableIndex<K, V>)._subTreeSize;\n    }\n  }\n}\n","/**\n * @description The iterator type including `NORMAL` and `REVERSE`.\n */\nexport const enum IteratorType {\n  NORMAL = 0,\n  REVERSE = 1\n}\n\nexport abstract class ContainerIterator<T> {\n  /**\n   * @description The container pointed to by the iterator.\n   */\n  abstract readonly container: Container<T>;\n  /**\n   * @internal\n   */\n  abstract _node: unknown;\n  /**\n   * @description Iterator's type.\n   * @example\n   * console.log(container.end().iteratorType === IteratorType.NORMAL);  // true\n   */\n  readonly iteratorType: IteratorType;\n  /**\n   * @internal\n   */\n  protected constructor(iteratorType = IteratorType.NORMAL) {\n    this.iteratorType = iteratorType;\n  }\n  /**\n   * @param iter - The other iterator you want to compare.\n   * @returns Whether this equals to obj.\n   * @example\n   * container.find(1).equals(container.end());\n   */\n  equals(iter: ContainerIterator<T>) {\n    return this._node === iter._node;\n  }\n  /**\n   * @description Pointers to element.\n   * @returns The value of the pointer's element.\n   * @example\n   * const val = container.begin().pointer;\n   */\n  abstract get pointer(): T;\n  /**\n   * @description Set pointer's value (some containers are unavailable).\n   * @param newValue - The new value you want to set.\n   * @example\n   * (<LinkList<number>>container).begin().pointer = 1;\n   */\n  abstract set pointer(newValue: T);\n  /**\n   * @description Move `this` iterator to pre.\n   * @returns The iterator's self.\n   * @example\n   * const iter = container.find(1);  // container = [0, 1]\n   * const pre = iter.pre();\n   * console.log(pre === iter);  // true\n   * console.log(pre.equals(iter));  // true\n   * console.log(pre.pointer, iter.pointer); // 0, 0\n   */\n  abstract pre(): this;\n  /**\n   * @description Move `this` iterator to next.\n   * @returns The iterator's self.\n   * @example\n   * const iter = container.find(1);  // container = [1, 2]\n   * const next = iter.next();\n   * console.log(next === iter);  // true\n   * console.log(next.equals(iter));  // true\n   * console.log(next.pointer, iter.pointer); // 2, 2\n   */\n  abstract next(): this;\n  /**\n   * @description Get a copy of itself.\n   * @returns The copy of self.\n   * @example\n   * const iter = container.find(1);  // container = [1, 2]\n   * const next = iter.copy().next();\n   * console.log(next === iter);  // false\n   * console.log(next.equals(iter));  // false\n   * console.log(next.pointer, iter.pointer); // 2, 1\n   */\n  abstract copy(): ContainerIterator<T>;\n  abstract isAccessible(): boolean;\n}\n\nexport abstract class Base {\n  /**\n   * @description Container's size.\n   * @internal\n   */\n  protected _length = 0;\n  /**\n   * @returns The size of the container.\n   * @example\n   * const container = new Vector([1, 2]);\n   * console.log(container.length); // 2\n   */\n  get length() {\n    return this._length;\n  }\n  /**\n   * @returns The size of the container.\n   * @example\n   * const container = new Vector([1, 2]);\n   * console.log(container.size()); // 2\n   */\n  size() {\n    return this._length;\n  }\n  /**\n   * @returns Whether the container is empty.\n   * @example\n   * container.clear();\n   * console.log(container.empty());  // true\n   */\n  empty() {\n    return this._length === 0;\n  }\n  /**\n   * @description Clear the container.\n   * @example\n   * container.clear();\n   * console.log(container.empty());  // true\n   */\n  abstract clear(): void;\n}\n\nexport abstract class Container<T> extends Base {\n  /**\n   * @returns Iterator pointing to the beginning element.\n   * @example\n   * const begin = container.begin();\n   * const end = container.end();\n   * for (const it = begin; !it.equals(end); it.next()) {\n   *   doSomething(it.pointer);\n   * }\n   */\n  abstract begin(): ContainerIterator<T>;\n  /**\n   * @returns Iterator pointing to the super end like c++.\n   * @example\n   * const begin = container.begin();\n   * const end = container.end();\n   * for (const it = begin; !it.equals(end); it.next()) {\n   *   doSomething(it.pointer);\n   * }\n   */\n  abstract end(): ContainerIterator<T>;\n  /**\n   * @returns Iterator pointing to the end element.\n   * @example\n   * const rBegin = container.rBegin();\n   * const rEnd = container.rEnd();\n   * for (const it = rBegin; !it.equals(rEnd); it.next()) {\n   *   doSomething(it.pointer);\n   * }\n   */\n  abstract rBegin(): ContainerIterator<T>;\n  /**\n   * @returns Iterator pointing to the super begin like c++.\n   * @example\n   * const rBegin = container.rBegin();\n   * const rEnd = container.rEnd();\n   * for (const it = rBegin; !it.equals(rEnd); it.next()) {\n   *   doSomething(it.pointer);\n   * }\n   */\n  abstract rEnd(): ContainerIterator<T>;\n  /**\n   * @returns The first element of the container.\n   */\n  abstract front(): T | undefined;\n  /**\n   * @returns The last element of the container.\n   */\n  abstract back(): T | undefined;\n  /**\n   * @param element - The element you want to find.\n   * @returns An iterator pointing to the element if found, or super end if not found.\n   * @example\n   * container.find(1).equals(container.end());\n   */\n  abstract find(element: T): ContainerIterator<T>;\n  /**\n   * @description Iterate over all elements in the container.\n   * @param callback - Callback function like Array.forEach.\n   * @example\n   * container.forEach((element, index) => console.log(element, index));\n   */\n  abstract forEach(callback: (element: T, index: number, container: Container<T>) => void): void;\n  /**\n   * @description Gets the value of the element at the specified position.\n   * @example\n   * const val = container.getElementByPos(-1); // throw a RangeError\n   */\n  abstract getElementByPos(pos: number): T;\n  /**\n   * @description Removes the element at the specified position.\n   * @param pos - The element's position you want to remove.\n   * @returns The container length after erasing.\n   * @example\n   * container.eraseElementByPos(-1); // throw a RangeError\n   */\n  abstract eraseElementByPos(pos: number): number;\n  /**\n   * @description Removes element by iterator and move `iter` to next.\n   * @param iter - The iterator you want to erase.\n   * @returns The next iterator.\n   * @example\n   * container.eraseElementByIterator(container.begin());\n   * container.eraseElementByIterator(container.end()); // throw a RangeError\n   */\n  abstract eraseElementByIterator(\n    iter: ContainerIterator<T>\n  ): ContainerIterator<T>;\n  /**\n   * @description Using for `for...of` syntax like Array.\n   * @example\n   * for (const element of container) {\n   *   console.log(element);\n   * }\n   */\n  abstract [Symbol.iterator](): Generator<T, void>;\n}\n\n/**\n * @description The initial data type passed in when initializing the container.\n */\nexport type initContainer<T> = {\n  size?: number | (() => number);\n  length?: number;\n  forEach: (callback: (el: T) => void) => void;\n}\n","/**\n * @description Throw an iterator access error.\n * @internal\n */\nexport function throwIteratorAccessError() {\n  throw new RangeError('Iterator access denied!');\n}\n","import type TreeIterator from './TreeIterator';\nimport { TreeNode, TreeNodeColor, TreeNodeEnableIndex } from './TreeNode';\nimport { Container, IteratorType } from '@/container/ContainerBase';\nimport $checkWithinAccessParams from '@/utils/checkParams.macro';\nimport { throwIteratorAccessError } from '@/utils/throwError';\n\nabstract class TreeContainer<K, V> extends Container<K | [K, V]> {\n  enableIndex: boolean;\n  /**\n   * @internal\n   */\n  protected _header: TreeNode<K, V>;\n  /**\n   * @internal\n   */\n  protected _root: TreeNode<K, V> | undefined = undefined;\n  /**\n   * @internal\n   */\n  protected readonly _cmp: (x: K, y: K) => number;\n  /**\n   * @internal\n   */\n  protected readonly _TreeNodeClass: typeof TreeNode | typeof TreeNodeEnableIndex;\n  /**\n   * @internal\n   */\n  protected constructor(\n    cmp: (x: K, y: K) => number =\n    function (x: K, y: K) {\n      if (x < y) return -1;\n      if (x > y) return 1;\n      return 0;\n    },\n    enableIndex = false\n  ) {\n    super();\n    this._cmp = cmp;\n    this.enableIndex = enableIndex;\n    this._TreeNodeClass = enableIndex ? TreeNodeEnableIndex : TreeNode;\n    this._header = new this._TreeNodeClass();\n  }\n  /**\n   * @internal\n   */\n  protected _lowerBound(curNode: TreeNode<K, V> | undefined, key: K) {\n    let resNode = this._header;\n    while (curNode) {\n      const cmpResult = this._cmp(curNode._key!, key);\n      if (cmpResult < 0) {\n        curNode = curNode._right;\n      } else if (cmpResult > 0) {\n        resNode = curNode;\n        curNode = curNode._left;\n      } else return curNode;\n    }\n    return resNode;\n  }\n  /**\n   * @internal\n   */\n  protected _upperBound(curNode: TreeNode<K, V> | undefined, key: K) {\n    let resNode = this._header;\n    while (curNode) {\n      const cmpResult = this._cmp(curNode._key!, key);\n      if (cmpResult <= 0) {\n        curNode = curNode._right;\n      } else {\n        resNode = curNode;\n        curNode = curNode._left;\n      }\n    }\n    return resNode;\n  }\n  /**\n   * @internal\n   */\n  protected _reverseLowerBound(curNode: TreeNode<K, V> | undefined, key: K) {\n    let resNode = this._header;\n    while (curNode) {\n      const cmpResult = this._cmp(curNode._key!, key);\n      if (cmpResult < 0) {\n        resNode = curNode;\n        curNode = curNode._right;\n      } else if (cmpResult > 0) {\n        curNode = curNode._left;\n      } else return curNode;\n    }\n    return resNode;\n  }\n  /**\n   * @internal\n   */\n  protected _reverseUpperBound(curNode: TreeNode<K, V> | undefined, key: K) {\n    let resNode = this._header;\n    while (curNode) {\n      const cmpResult = this._cmp(curNode._key!, key);\n      if (cmpResult < 0) {\n        resNode = curNode;\n        curNode = curNode._right;\n      } else {\n        curNode = curNode._left;\n      }\n    }\n    return resNode;\n  }\n  /**\n   * @internal\n   */\n  protected _eraseNodeSelfBalance(curNode: TreeNode<K, V>) {\n    while (true) {\n      const parentNode = curNode._parent!;\n      if (parentNode === this._header) return;\n      if (curNode._color === TreeNodeColor.RED) {\n        curNode._color = TreeNodeColor.BLACK;\n        return;\n      }\n      if (curNode === parentNode._left) {\n        const brother = parentNode._right!;\n        if (brother._color === TreeNodeColor.RED) {\n          brother._color = TreeNodeColor.BLACK;\n          parentNode._color = TreeNodeColor.RED;\n          if (parentNode === this._root) {\n            this._root = parentNode._rotateLeft();\n          } else parentNode._rotateLeft();\n        } else {\n          if (brother._right && brother._right._color === TreeNodeColor.RED) {\n            brother._color = parentNode._color;\n            parentNode._color = TreeNodeColor.BLACK;\n            brother._right._color = TreeNodeColor.BLACK;\n            if (parentNode === this._root) {\n              this._root = parentNode._rotateLeft();\n            } else parentNode._rotateLeft();\n            return;\n          } else if (brother._left && brother._left._color === TreeNodeColor.RED) {\n            brother._color = TreeNodeColor.RED;\n            brother._left._color = TreeNodeColor.BLACK;\n            brother._rotateRight();\n          } else {\n            brother._color = TreeNodeColor.RED;\n            curNode = parentNode;\n          }\n        }\n      } else {\n        const brother = parentNode._left!;\n        if (brother._color === TreeNodeColor.RED) {\n          brother._color = TreeNodeColor.BLACK;\n          parentNode._color = TreeNodeColor.RED;\n          if (parentNode === this._root) {\n            this._root = parentNode._rotateRight();\n          } else parentNode._rotateRight();\n        } else {\n          if (brother._left && brother._left._color === TreeNodeColor.RED) {\n            brother._color = parentNode._color;\n            parentNode._color = TreeNodeColor.BLACK;\n            brother._left._color = TreeNodeColor.BLACK;\n            if (parentNode === this._root) {\n              this._root = parentNode._rotateRight();\n            } else parentNode._rotateRight();\n            return;\n          } else if (brother._right && brother._right._color === TreeNodeColor.RED) {\n            brother._color = TreeNodeColor.RED;\n            brother._right._color = TreeNodeColor.BLACK;\n            brother._rotateLeft();\n          } else {\n            brother._color = TreeNodeColor.RED;\n            curNode = parentNode;\n          }\n        }\n      }\n    }\n  }\n  /**\n   * @internal\n   */\n  protected _eraseNode(curNode: TreeNode<K, V>) {\n    if (this._length === 1) {\n      this.clear();\n      return;\n    }\n    let swapNode = curNode;\n    while (swapNode._left || swapNode._right) {\n      if (swapNode._right) {\n        swapNode = swapNode._right;\n        while (swapNode._left) swapNode = swapNode._left;\n      } else {\n        swapNode = swapNode._left!;\n      }\n      const key = curNode._key;\n      curNode._key = swapNode._key;\n      swapNode._key = key;\n      const value = curNode._value;\n      curNode._value = swapNode._value;\n      swapNode._value = value;\n      curNode = swapNode;\n    }\n    if (this._header._left === swapNode) {\n      this._header._left = swapNode._parent;\n    } else if (this._header._right === swapNode) {\n      this._header._right = swapNode._parent;\n    }\n    this._eraseNodeSelfBalance(swapNode);\n    let _parent = swapNode._parent as TreeNodeEnableIndex<K, V>;\n    if (swapNode === _parent._left) {\n      _parent._left = undefined;\n    } else _parent._right = undefined;\n    this._length -= 1;\n    this._root!._color = TreeNodeColor.BLACK;\n    if (this.enableIndex) {\n      while (_parent !== this._header) {\n        _parent._subTreeSize -= 1;\n        _parent = _parent._parent as TreeNodeEnableIndex<K, V>;\n      }\n    }\n  }\n  protected _inOrderTraversal(): TreeNode<K, V>[];\n  protected _inOrderTraversal(pos: number): TreeNode<K, V>;\n  protected _inOrderTraversal(\n    callback: (node: TreeNode<K, V>, index: number, map: this) => void\n  ): TreeNode<K, V>;\n  /**\n   * @internal\n   */\n  protected _inOrderTraversal(\n    param?: number | ((node: TreeNode<K, V>, index: number, map: this) => void)\n  ) {\n    const pos = typeof param === 'number' ? param : undefined;\n    const callback = typeof param === 'function' ? param : undefined;\n    const nodeList = typeof param === 'undefined' ? <TreeNode<K, V>[]>[] : undefined;\n    let index = 0;\n    let curNode = this._root;\n    const stack: TreeNode<K, V>[] = [];\n    while (stack.length || curNode) {\n      if (curNode) {\n        stack.push(curNode);\n        curNode = curNode._left;\n      } else {\n        curNode = stack.pop()!;\n        if (index === pos) return curNode;\n        nodeList && nodeList.push(curNode);\n        callback && callback(curNode, index, this);\n        index += 1;\n        curNode = curNode._right;\n      }\n    }\n    return nodeList;\n  }\n  /**\n   * @internal\n   */\n  protected _insertNodeSelfBalance(curNode: TreeNode<K, V>) {\n    while (true) {\n      const parentNode = curNode._parent!;\n      if (parentNode._color === TreeNodeColor.BLACK) return;\n      const grandParent = parentNode._parent!;\n      if (parentNode === grandParent._left) {\n        const uncle = grandParent._right;\n        if (uncle && uncle._color === TreeNodeColor.RED) {\n          uncle._color = parentNode._color = TreeNodeColor.BLACK;\n          if (grandParent === this._root) return;\n          grandParent._color = TreeNodeColor.RED;\n          curNode = grandParent;\n          continue;\n        } else if (curNode === parentNode._right) {\n          curNode._color = TreeNodeColor.BLACK;\n          if (curNode._left) {\n            curNode._left._parent = parentNode;\n          }\n          if (curNode._right) {\n            curNode._right._parent = grandParent;\n          }\n          parentNode._right = curNode._left;\n          grandParent._left = curNode._right;\n          curNode._left = parentNode;\n          curNode._right = grandParent;\n          if (grandParent === this._root) {\n            this._root = curNode;\n            this._header._parent = curNode;\n          } else {\n            const GP = grandParent._parent!;\n            if (GP._left === grandParent) {\n              GP._left = curNode;\n            } else GP._right = curNode;\n          }\n          curNode._parent = grandParent._parent;\n          parentNode._parent = curNode;\n          grandParent._parent = curNode;\n          grandParent._color = TreeNodeColor.RED;\n        } else {\n          parentNode._color = TreeNodeColor.BLACK;\n          if (grandParent === this._root) {\n            this._root = grandParent._rotateRight();\n          } else grandParent._rotateRight();\n          grandParent._color = TreeNodeColor.RED;\n          return;\n        }\n      } else {\n        const uncle = grandParent._left;\n        if (uncle && uncle._color === TreeNodeColor.RED) {\n          uncle._color = parentNode._color = TreeNodeColor.BLACK;\n          if (grandParent === this._root) return;\n          grandParent._color = TreeNodeColor.RED;\n          curNode = grandParent;\n          continue;\n        } else if (curNode === parentNode._left) {\n          curNode._color = TreeNodeColor.BLACK;\n          if (curNode._left) {\n            curNode._left._parent = grandParent;\n          }\n          if (curNode._right) {\n            curNode._right._parent = parentNode;\n          }\n          grandParent._right = curNode._left;\n          parentNode._left = curNode._right;\n          curNode._left = grandParent;\n          curNode._right = parentNode;\n          if (grandParent === this._root) {\n            this._root = curNode;\n            this._header._parent = curNode;\n          } else {\n            const GP = grandParent._parent!;\n            if (GP._left === grandParent) {\n              GP._left = curNode;\n            } else GP._right = curNode;\n          }\n          curNode._parent = grandParent._parent;\n          parentNode._parent = curNode;\n          grandParent._parent = curNode;\n          grandParent._color = TreeNodeColor.RED;\n        } else {\n          parentNode._color = TreeNodeColor.BLACK;\n          if (grandParent === this._root) {\n            this._root = grandParent._rotateLeft();\n          } else grandParent._rotateLeft();\n          grandParent._color = TreeNodeColor.RED;\n          return;\n        }\n      }\n      if (this.enableIndex) {\n        (<TreeNodeEnableIndex<K, V>>parentNode)._recount();\n        (<TreeNodeEnableIndex<K, V>>grandParent)._recount();\n        (<TreeNodeEnableIndex<K, V>>curNode)._recount();\n      }\n      return;\n    }\n  }\n  /**\n   * @internal\n   */\n  protected _set(key: K, value?: V, hint?: TreeIterator<K, V>) {\n    if (this._root === undefined) {\n      this._length += 1;\n      this._root = new this._TreeNodeClass(key, value, TreeNodeColor.BLACK);\n      this._root._parent = this._header;\n      this._header._parent = this._header._left = this._header._right = this._root;\n      return this._length;\n    }\n    let curNode;\n    const minNode = this._header._left!;\n    const compareToMin = this._cmp(minNode._key!, key);\n    if (compareToMin === 0) {\n      minNode._value = value;\n      return this._length;\n    } else if (compareToMin > 0) {\n      minNode._left = new this._TreeNodeClass(key, value);\n      minNode._left._parent = minNode;\n      curNode = minNode._left;\n      this._header._left = curNode;\n    } else {\n      const maxNode = this._header._right!;\n      const compareToMax = this._cmp(maxNode._key!, key);\n      if (compareToMax === 0) {\n        maxNode._value = value;\n        return this._length;\n      } else if (compareToMax < 0) {\n        maxNode._right = new this._TreeNodeClass(key, value);\n        maxNode._right._parent = maxNode;\n        curNode = maxNode._right;\n        this._header._right = curNode;\n      } else {\n        if (hint !== undefined) {\n          const iterNode = hint._node;\n          if (iterNode !== this._header) {\n            const iterCmpRes = this._cmp(iterNode._key!, key);\n            if (iterCmpRes === 0) {\n              iterNode._value = value;\n              return this._length;\n            } else /* istanbul ignore else */ if (iterCmpRes > 0) {\n              const preNode = iterNode._pre();\n              const preCmpRes = this._cmp(preNode._key!, key);\n              if (preCmpRes === 0) {\n                preNode._value = value;\n                return this._length;\n              } else if (preCmpRes < 0) {\n                curNode = new this._TreeNodeClass(key, value);\n                if (preNode._right === undefined) {\n                  preNode._right = curNode;\n                  curNode._parent = preNode;\n                } else {\n                  iterNode._left = curNode;\n                  curNode._parent = iterNode;\n                }\n              }\n            }\n          }\n        }\n        if (curNode === undefined) {\n          curNode = this._root;\n          while (true) {\n            const cmpResult = this._cmp(curNode._key!, key);\n            if (cmpResult > 0) {\n              if (curNode._left === undefined) {\n                curNode._left = new this._TreeNodeClass(key, value);\n                curNode._left._parent = curNode;\n                curNode = curNode._left;\n                break;\n              }\n              curNode = curNode._left;\n            } else if (cmpResult < 0) {\n              if (curNode._right === undefined) {\n                curNode._right = new this._TreeNodeClass(key, value);\n                curNode._right._parent = curNode;\n                curNode = curNode._right;\n                break;\n              }\n              curNode = curNode._right;\n            } else {\n              curNode._value = value;\n              return this._length;\n            }\n          }\n        }\n      }\n    }\n    if (this.enableIndex) {\n      let parent = curNode._parent as TreeNodeEnableIndex<K, V>;\n      while (parent !== this._header) {\n        parent._subTreeSize += 1;\n        parent = parent._parent as TreeNodeEnableIndex<K, V>;\n      }\n    }\n    this._insertNodeSelfBalance(curNode);\n    this._length += 1;\n    return this._length;\n  }\n  /**\n   * @internal\n   */\n  protected _getTreeNodeByKey(curNode: TreeNode<K, V> | undefined, key: K) {\n    while (curNode) {\n      const cmpResult = this._cmp(curNode._key!, key);\n      if (cmpResult < 0) {\n        curNode = curNode._right;\n      } else if (cmpResult > 0) {\n        curNode = curNode._left;\n      } else return curNode;\n    }\n    return curNode || this._header;\n  }\n  clear() {\n    this._length = 0;\n    this._root = undefined;\n    this._header._parent = undefined;\n    this._header._left = this._header._right = undefined;\n  }\n  /**\n   * @description Update node's key by iterator.\n   * @param iter - The iterator you want to change.\n   * @param key - The key you want to update.\n   * @returns Whether the modification is successful.\n   * @example\n   * const st = new orderedSet([1, 2, 5]);\n   * const iter = st.find(2);\n   * st.updateKeyByIterator(iter, 3); // then st will become [1, 3, 5]\n   */\n  updateKeyByIterator(iter: TreeIterator<K, V>, key: K): boolean {\n    const node = iter._node;\n    if (node === this._header) {\n      throwIteratorAccessError();\n    }\n    if (this._length === 1) {\n      node._key = key;\n      return true;\n    }\n    const nextKey = node._next()._key!;\n    if (node === this._header._left) {\n      if (this._cmp(nextKey, key) > 0) {\n        node._key = key;\n        return true;\n      }\n      return false;\n    }\n    const preKey = node._pre()._key!;\n    if (node === this._header._right) {\n      if (this._cmp(preKey, key) < 0) {\n        node._key = key;\n        return true;\n      }\n      return false;\n    }\n    if (\n      this._cmp(preKey, key) >= 0 ||\n      this._cmp(nextKey, key) <= 0\n    ) return false;\n    node._key = key;\n    return true;\n  }\n  eraseElementByPos(pos: number) {\n    $checkWithinAccessParams!(pos, 0, this._length - 1);\n    const node = this._inOrderTraversal(pos);\n    this._eraseNode(node);\n    return this._length;\n  }\n  /**\n   * @description Remove the element of the specified key.\n   * @param key - The key you want to remove.\n   * @returns Whether erase successfully.\n   */\n  eraseElementByKey(key: K) {\n    if (this._length === 0) return false;\n    const curNode = this._getTreeNodeByKey(this._root, key);\n    if (curNode === this._header) return false;\n    this._eraseNode(curNode);\n    return true;\n  }\n  eraseElementByIterator(iter: TreeIterator<K, V>) {\n    const node = iter._node;\n    if (node === this._header) {\n      throwIteratorAccessError();\n    }\n    const hasNoRight = node._right === undefined;\n    const isNormal = iter.iteratorType === IteratorType.NORMAL;\n    // For the normal iterator, the `next` node will be swapped to `this` node when has right.\n    if (isNormal) {\n      // So we should move it to next when it's right is null.\n      if (hasNoRight) iter.next();\n    } else {\n      // For the reverse iterator, only when it doesn't have right and has left the `next` node will be swapped.\n      // So when it has right, or it is a leaf node we should move it to `next`.\n      if (!hasNoRight || node._left === undefined) iter.next();\n    }\n    this._eraseNode(node);\n    return iter;\n  }\n  /**\n   * @description Get the height of the tree.\n   * @returns Number about the height of the RB-tree.\n   */\n  getHeight() {\n    if (this._length === 0) return 0;\n    function traversal(curNode: TreeNode<K, V> | undefined): number {\n      if (!curNode) return 0;\n      return Math.max(traversal(curNode._left), traversal(curNode._right)) + 1;\n    }\n    return traversal(this._root);\n  }\n  /**\n   * @param key - The given key you want to compare.\n   * @returns An iterator to the first element less than the given key.\n   */\n  abstract reverseUpperBound(key: K): TreeIterator<K, V>;\n  /**\n   * @description Union the other tree to self.\n   * @param other - The other tree container you want to merge.\n   * @returns The size of the tree after union.\n   */\n  abstract union(other: TreeContainer<K, V>): number;\n  /**\n   * @param key - The given key you want to compare.\n   * @returns An iterator to the first element not greater than the given key.\n   */\n  abstract reverseLowerBound(key: K): TreeIterator<K, V>;\n  /**\n   * @param key - The given key you want to compare.\n   * @returns An iterator to the first element not less than the given key.\n   */\n  abstract lowerBound(key: K): TreeIterator<K, V>;\n  /**\n   * @param key - The given key you want to compare.\n   * @returns An iterator to the first element greater than the given key.\n   */\n  abstract upperBound(key: K): TreeIterator<K, V>;\n}\n\nexport default TreeContainer;\n","import { TreeNode } from './TreeNode';\nimport type { TreeNodeEnableIndex } from './TreeNode';\nimport { ContainerIterator, IteratorType } from '@/container/ContainerBase';\nimport TreeContainer from '@/container/TreeContainer/Base/index';\nimport { throwIteratorAccessError } from '@/utils/throwError';\n\nabstract class TreeIterator<K, V> extends ContainerIterator<K | [K, V]> {\n  abstract readonly container: TreeContainer<K, V>;\n  /**\n   * @internal\n   */\n  _node: TreeNode<K, V>;\n  /**\n   * @internal\n   */\n  protected _header: TreeNode<K, V>;\n  /**\n   * @internal\n   */\n  protected constructor(\n    node: TreeNode<K, V>,\n    header: TreeNode<K, V>,\n    iteratorType?: IteratorType\n  ) {\n    super(iteratorType);\n    this._node = node;\n    this._header = header;\n    if (this.iteratorType === IteratorType.NORMAL) {\n      this.pre = function () {\n        if (this._node === this._header._left) {\n          throwIteratorAccessError();\n        }\n        this._node = this._node._pre();\n        return this;\n      };\n\n      this.next = function () {\n        if (this._node === this._header) {\n          throwIteratorAccessError();\n        }\n        this._node = this._node._next();\n        return this;\n      };\n    } else {\n      this.pre = function () {\n        if (this._node === this._header._right) {\n          throwIteratorAccessError();\n        }\n        this._node = this._node._next();\n        return this;\n      };\n\n      this.next = function () {\n        if (this._node === this._header) {\n          throwIteratorAccessError();\n        }\n        this._node = this._node._pre();\n        return this;\n      };\n    }\n  }\n  /**\n   * @description Get the sequential index of the iterator in the tree container.<br/>\n   *              <strong>Note:</strong>\n   *              This function only takes effect when the specified tree container `enableIndex = true`.\n   * @returns The index subscript of the node in the tree.\n   * @example\n   * const st = new OrderedSet([1, 2, 3], true);\n   * console.log(st.begin().next().index);  // 1\n   */\n  get index() {\n    let _node = this._node as TreeNodeEnableIndex<K, V>;\n    const root = this._header._parent as TreeNodeEnableIndex<K, V>;\n    if (_node === this._header) {\n      if (root) {\n        return root._subTreeSize - 1;\n      }\n      return 0;\n    }\n    let index = 0;\n    if (_node._left) {\n      index += (_node._left as TreeNodeEnableIndex<K, V>)._subTreeSize;\n    }\n    while (_node !== root) {\n      const _parent = _node._parent as TreeNodeEnableIndex<K, V>;\n      if (_node === _parent._right) {\n        index += 1;\n        if (_parent._left) {\n          index += (_parent._left as TreeNodeEnableIndex<K, V>)._subTreeSize;\n        }\n      }\n      _node = _parent;\n    }\n    return index;\n  }\n  isAccessible() {\n    return this._node !== this._header;\n  }\n  // @ts-ignore\n  pre(): this;\n  // @ts-ignore\n  next(): this;\n}\n\nexport default TreeIterator;\n","import TreeContainer from './Base';\nimport TreeIterator from './Base/TreeIterator';\nimport { TreeNode } from './Base/TreeNode';\nimport { initContainer, IteratorType } from '@/container/ContainerBase';\nimport $checkWithinAccessParams from '@/utils/checkParams.macro';\nimport { throwIteratorAccessError } from '@/utils/throwError';\n\nclass OrderedMapIterator<K, V> extends TreeIterator<K, V> {\n  container: OrderedMap<K, V>;\n  constructor(\n    node: TreeNode<K, V>,\n    header: TreeNode<K, V>,\n    container: OrderedMap<K, V>,\n    iteratorType?: IteratorType\n  ) {\n    super(node, header, iteratorType);\n    this.container = container;\n  }\n  get pointer() {\n    if (this._node === this._header) {\n      throwIteratorAccessError();\n    }\n    const self = this;\n    return new Proxy(<[K, V]><unknown>[], {\n      get(target, prop: '0' | '1') {\n        if (prop === '0') return self._node._key!;\n        else if (prop === '1') return self._node._value!;\n        target[0] = self._node._key!;\n        target[1] = self._node._value!;\n        return target[prop];\n      },\n      set(_, prop: '1', newValue: V) {\n        if (prop !== '1') {\n          throw new TypeError('prop must be 1');\n        }\n        self._node._value = newValue;\n        return true;\n      }\n    });\n  }\n  copy() {\n    return new OrderedMapIterator<K, V>(\n      this._node,\n      this._header,\n      this.container,\n      this.iteratorType\n    );\n  }\n  // @ts-ignore\n  equals(iter: OrderedMapIterator<K, V>): boolean;\n}\n\nexport type { OrderedMapIterator };\n\nclass OrderedMap<K, V> extends TreeContainer<K, V> {\n  /**\n   * @param container - The initialization container.\n   * @param cmp - The compare function.\n   * @param enableIndex - Whether to enable iterator indexing function.\n   * @example\n   * new OrderedMap();\n   * new OrderedMap([[0, 1], [2, 1]]);\n   * new OrderedMap([[0, 1], [2, 1]], (x, y) => x - y);\n   * new OrderedMap([[0, 1], [2, 1]], (x, y) => x - y, true);\n   */\n  constructor(\n    container: initContainer<[K, V]> = [],\n    cmp?: (x: K, y: K) => number,\n    enableIndex?: boolean\n  ) {\n    super(cmp, enableIndex);\n    const self = this;\n    container.forEach(function (el) {\n      self.setElement(el[0], el[1]);\n    });\n  }\n  begin() {\n    return new OrderedMapIterator<K, V>(this._header._left || this._header, this._header, this);\n  }\n  end() {\n    return new OrderedMapIterator<K, V>(this._header, this._header, this);\n  }\n  rBegin() {\n    return new OrderedMapIterator<K, V>(\n      this._header._right || this._header,\n      this._header,\n      this,\n      IteratorType.REVERSE\n    );\n  }\n  rEnd() {\n    return new OrderedMapIterator<K, V>(this._header, this._header, this, IteratorType.REVERSE);\n  }\n  front() {\n    if (this._length === 0) return;\n    const minNode = this._header._left!;\n    return <[K, V]>[minNode._key, minNode._value];\n  }\n  back() {\n    if (this._length === 0) return;\n    const maxNode = this._header._right!;\n    return <[K, V]>[maxNode._key, maxNode._value];\n  }\n  lowerBound(key: K) {\n    const resNode = this._lowerBound(this._root, key);\n    return new OrderedMapIterator<K, V>(resNode, this._header, this);\n  }\n  upperBound(key: K) {\n    const resNode = this._upperBound(this._root, key);\n    return new OrderedMapIterator<K, V>(resNode, this._header, this);\n  }\n  reverseLowerBound(key: K) {\n    const resNode = this._reverseLowerBound(this._root, key);\n    return new OrderedMapIterator<K, V>(resNode, this._header, this);\n  }\n  reverseUpperBound(key: K) {\n    const resNode = this._reverseUpperBound(this._root, key);\n    return new OrderedMapIterator<K, V>(resNode, this._header, this);\n  }\n  forEach(callback: (element: [K, V], index: number, map: OrderedMap<K, V>) => void) {\n    this._inOrderTraversal(function (node, index, map) {\n      callback(<[K, V]>[node._key, node._value], index, map);\n    });\n  }\n  /**\n   * @description Insert a key-value pair or set value by the given key.\n   * @param key - The key want to insert.\n   * @param value - The value want to set.\n   * @param hint - You can give an iterator hint to improve insertion efficiency.\n   * @return The size of container after setting.\n   * @example\n   * const mp = new OrderedMap([[2, 0], [4, 0], [5, 0]]);\n   * const iter = mp.begin();\n   * mp.setElement(1, 0);\n   * mp.setElement(3, 0, iter);  // give a hint will be faster.\n   */\n  setElement(key: K, value: V, hint?: OrderedMapIterator<K, V>) {\n    return this._set(key, value, hint);\n  }\n  getElementByPos(pos: number) {\n    $checkWithinAccessParams!(pos, 0, this._length - 1);\n    const node = this._inOrderTraversal(pos);\n    return <[K, V]>[node._key, node._value];\n  }\n  find(key: K) {\n    const curNode = this._getTreeNodeByKey(this._root, key);\n    return new OrderedMapIterator<K, V>(curNode, this._header, this);\n  }\n  /**\n   * @description Get the value of the element of the specified key.\n   * @param key - The specified key you want to get.\n   * @example\n   * const val = container.getElementByKey(1);\n   */\n  getElementByKey(key: K) {\n    const curNode = this._getTreeNodeByKey(this._root, key);\n    return curNode._value;\n  }\n  union(other: OrderedMap<K, V>) {\n    const self = this;\n    other.forEach(function (el) {\n      self.setElement(el[0], el[1]);\n    });\n    return this._length;\n  }\n  * [Symbol.iterator]() {\n    const length = this._length;\n    const nodeList = this._inOrderTraversal();\n    for (let i = 0; i < length; ++i) {\n      const node = nodeList[i];\n      yield <[K, V]>[node._key, node._value];\n    }\n  }\n  // @ts-ignore\n  eraseElementByIterator(iter: OrderedMapIterator<K, V>): OrderedMapIterator<K, V>;\n}\n\nexport default OrderedMap;\n","/*\n * Copyright 2021 gRPC authors.\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 */\n\nimport { ServiceDefinition } from './make-client';\nimport { Server, UntypedServiceImplementation } from './server';\n\ninterface GetServiceDefinition {\n  (): ServiceDefinition;\n}\n\ninterface GetHandlers {\n  (): UntypedServiceImplementation;\n}\n\nconst registeredAdminServices: {\n  getServiceDefinition: GetServiceDefinition;\n  getHandlers: GetHandlers;\n}[] = [];\n\nexport function registerAdminService(\n  getServiceDefinition: GetServiceDefinition,\n  getHandlers: GetHandlers\n) {\n  registeredAdminServices.push({ getServiceDefinition, getHandlers });\n}\n\nexport function addAdminServicesToServer(server: Server): void {\n  for (const { getServiceDefinition, getHandlers } of registeredAdminServices) {\n    server.addService(getServiceDefinition(), getHandlers());\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { EventEmitter } from 'events';\nimport { Duplex, Readable, Writable } from 'stream';\n\nimport { StatusObject, MessageContext } from './call-interface';\nimport { Status } from './constants';\nimport { EmitterAugmentation1 } from './events';\nimport { Metadata } from './metadata';\nimport { ObjectReadable, ObjectWritable, WriteCallback } from './object-stream';\nimport { InterceptingCallInterface } from './client-interceptors';\nimport { AuthContext } from './auth-context';\n\n/**\n * A type extending the built-in Error object with additional fields.\n */\nexport type ServiceError = StatusObject & Error;\n\n/**\n * A base type for all user-facing values returned by client-side method calls.\n */\nexport type SurfaceCall = {\n  call?: InterceptingCallInterface;\n  cancel(): void;\n  getPeer(): string;\n  getAuthContext(): AuthContext | null;\n} & EmitterAugmentation1<'metadata', Metadata> &\n  EmitterAugmentation1<'status', StatusObject> &\n  EventEmitter;\n\n/**\n * A type representing the return value of a unary method call.\n */\nexport type ClientUnaryCall = SurfaceCall;\n\n/**\n * A type representing the return value of a server stream method call.\n */\nexport type ClientReadableStream<ResponseType> = {\n  deserialize: (chunk: Buffer) => ResponseType;\n} & SurfaceCall &\n  ObjectReadable<ResponseType>;\n\n/**\n * A type representing the return value of a client stream method call.\n */\nexport type ClientWritableStream<RequestType> = {\n  serialize: (value: RequestType) => Buffer;\n} & SurfaceCall &\n  ObjectWritable<RequestType>;\n\n/**\n * A type representing the return value of a bidirectional stream method call.\n */\nexport type ClientDuplexStream<RequestType, ResponseType> =\n  ClientWritableStream<RequestType> & ClientReadableStream<ResponseType>;\n\n/**\n * Construct a ServiceError from a StatusObject. This function exists primarily\n * as an attempt to make the error stack trace clearly communicate that the\n * error is not necessarily a problem in gRPC itself.\n * @param status\n */\nexport function callErrorFromStatus(\n  status: StatusObject,\n  callerStack: string\n): ServiceError {\n  const message = `${status.code} ${Status[status.code]}: ${status.details}`;\n  const error = new Error(message);\n  const stack = `${error.stack}\\nfor call at\\n${callerStack}`;\n  return Object.assign(new Error(message), status, { stack });\n}\n\nexport class ClientUnaryCallImpl\n  extends EventEmitter\n  implements ClientUnaryCall\n{\n  public call?: InterceptingCallInterface;\n  constructor() {\n    super();\n  }\n\n  cancel(): void {\n    this.call?.cancelWithStatus(Status.CANCELLED, 'Cancelled on client');\n  }\n\n  getPeer(): string {\n    return this.call?.getPeer() ?? 'unknown';\n  }\n\n  getAuthContext(): AuthContext | null {\n    return this.call?.getAuthContext() ?? null;\n  }\n}\n\nexport class ClientReadableStreamImpl<ResponseType>\n  extends Readable\n  implements ClientReadableStream<ResponseType>\n{\n  public call?: InterceptingCallInterface;\n  constructor(readonly deserialize: (chunk: Buffer) => ResponseType) {\n    super({ objectMode: true });\n  }\n\n  cancel(): void {\n    this.call?.cancelWithStatus(Status.CANCELLED, 'Cancelled on client');\n  }\n\n  getPeer(): string {\n    return this.call?.getPeer() ?? 'unknown';\n  }\n\n  getAuthContext(): AuthContext | null {\n    return this.call?.getAuthContext() ?? null;\n  }\n\n  _read(_size: number): void {\n    this.call?.startRead();\n  }\n}\n\nexport class ClientWritableStreamImpl<RequestType>\n  extends Writable\n  implements ClientWritableStream<RequestType>\n{\n  public call?: InterceptingCallInterface;\n  constructor(readonly serialize: (value: RequestType) => Buffer) {\n    super({ objectMode: true });\n  }\n\n  cancel(): void {\n    this.call?.cancelWithStatus(Status.CANCELLED, 'Cancelled on client');\n  }\n\n  getPeer(): string {\n    return this.call?.getPeer() ?? 'unknown';\n  }\n\n  getAuthContext(): AuthContext | null {\n    return this.call?.getAuthContext() ?? null;\n  }\n\n  _write(chunk: RequestType, encoding: string, cb: WriteCallback) {\n    const context: MessageContext = {\n      callback: cb,\n    };\n    const flags = Number(encoding);\n    if (!Number.isNaN(flags)) {\n      context.flags = flags;\n    }\n    this.call?.sendMessageWithContext(context, chunk);\n  }\n\n  _final(cb: Function) {\n    this.call?.halfClose();\n    cb();\n  }\n}\n\nexport class ClientDuplexStreamImpl<RequestType, ResponseType>\n  extends Duplex\n  implements ClientDuplexStream<RequestType, ResponseType>\n{\n  public call?: InterceptingCallInterface;\n  constructor(\n    readonly serialize: (value: RequestType) => Buffer,\n    readonly deserialize: (chunk: Buffer) => ResponseType\n  ) {\n    super({ objectMode: true });\n  }\n\n  cancel(): void {\n    this.call?.cancelWithStatus(Status.CANCELLED, 'Cancelled on client');\n  }\n\n  getPeer(): string {\n    return this.call?.getPeer() ?? 'unknown';\n  }\n\n  getAuthContext(): AuthContext | null {\n    return this.call?.getAuthContext() ?? null;\n  }\n\n  _read(_size: number): void {\n    this.call?.startRead();\n  }\n\n  _write(chunk: RequestType, encoding: string, cb: WriteCallback) {\n    const context: MessageContext = {\n      callback: cb,\n    };\n    const flags = Number(encoding);\n    if (!Number.isNaN(flags)) {\n      context.flags = flags;\n    }\n    this.call?.sendMessageWithContext(context, chunk);\n  }\n\n  _final(cb: Function) {\n    this.call?.halfClose();\n    cb();\n  }\n}\n","/*\n * Copyright 2022 gRPC authors.\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 */\n\nimport { AuthContext } from './auth-context';\nimport { CallCredentials } from './call-credentials';\nimport { Status } from './constants';\nimport { Deadline } from './deadline';\nimport { Metadata } from './metadata';\nimport { ServerSurfaceCall } from './server-call';\n\nexport interface CallStreamOptions {\n  deadline: Deadline;\n  flags: number;\n  host: string;\n  parentCall: ServerSurfaceCall | null;\n}\n\nexport type PartialCallStreamOptions = Partial<CallStreamOptions>;\n\nexport interface StatusObject {\n  code: Status;\n  details: string;\n  metadata: Metadata;\n}\n\nexport type PartialStatusObject = Pick<StatusObject, 'code' | 'details'> & {\n  metadata?: Metadata | null | undefined;\n};\n\nexport interface StatusOrOk<T> {\n  ok: true;\n  value: T;\n}\n\nexport interface StatusOrError {\n  ok: false;\n  error: StatusObject;\n}\n\nexport type StatusOr<T> = StatusOrOk<T> | StatusOrError;\n\nexport function statusOrFromValue<T>(value: T): StatusOr<T> {\n  return {\n    ok: true,\n    value: value\n  };\n}\n\nexport function statusOrFromError<T>(error: PartialStatusObject): StatusOr<T> {\n  return {\n    ok: false,\n    error: {\n      ...error,\n      metadata: error.metadata ?? new Metadata()\n    }\n  };\n}\n\nexport const enum WriteFlags {\n  BufferHint = 1,\n  NoCompress = 2,\n  WriteThrough = 4,\n}\n\nexport interface WriteObject {\n  message: Buffer;\n  flags?: number;\n}\n\nexport interface MetadataListener {\n  (metadata: Metadata, next: (metadata: Metadata) => void): void;\n}\n\nexport interface MessageListener {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  (message: any, next: (message: any) => void): void;\n}\n\nexport interface StatusListener {\n  (status: StatusObject, next: (status: StatusObject) => void): void;\n}\n\nexport interface FullListener {\n  onReceiveMetadata: MetadataListener;\n  onReceiveMessage: MessageListener;\n  onReceiveStatus: StatusListener;\n}\n\nexport type Listener = Partial<FullListener>;\n\n/**\n * An object with methods for handling the responses to a call.\n */\nexport interface InterceptingListener {\n  onReceiveMetadata(metadata: Metadata): void;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  onReceiveMessage(message: any): void;\n  onReceiveStatus(status: StatusObject): void;\n}\n\nexport function isInterceptingListener(\n  listener: Listener | InterceptingListener\n): listener is InterceptingListener {\n  return (\n    listener.onReceiveMetadata !== undefined &&\n    listener.onReceiveMetadata.length === 1\n  );\n}\n\nexport class InterceptingListenerImpl implements InterceptingListener {\n  private processingMetadata = false;\n  private hasPendingMessage = false;\n  private pendingMessage: any;\n  private processingMessage = false;\n  private pendingStatus: StatusObject | null = null;\n  constructor(\n    private listener: FullListener,\n    private nextListener: InterceptingListener\n  ) {}\n\n  private processPendingMessage() {\n    if (this.hasPendingMessage) {\n      this.nextListener.onReceiveMessage(this.pendingMessage);\n      this.pendingMessage = null;\n      this.hasPendingMessage = false;\n    }\n  }\n\n  private processPendingStatus() {\n    if (this.pendingStatus) {\n      this.nextListener.onReceiveStatus(this.pendingStatus);\n    }\n  }\n\n  onReceiveMetadata(metadata: Metadata): void {\n    this.processingMetadata = true;\n    this.listener.onReceiveMetadata(metadata, metadata => {\n      this.processingMetadata = false;\n      this.nextListener.onReceiveMetadata(metadata);\n      this.processPendingMessage();\n      this.processPendingStatus();\n    });\n  }\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  onReceiveMessage(message: any): void {\n    /* If this listener processes messages asynchronously, the last message may\n     * be reordered with respect to the status */\n    this.processingMessage = true;\n    this.listener.onReceiveMessage(message, msg => {\n      this.processingMessage = false;\n      if (this.processingMetadata) {\n        this.pendingMessage = msg;\n        this.hasPendingMessage = true;\n      } else {\n        this.nextListener.onReceiveMessage(msg);\n        this.processPendingStatus();\n      }\n    });\n  }\n  onReceiveStatus(status: StatusObject): void {\n    this.listener.onReceiveStatus(status, processedStatus => {\n      if (this.processingMetadata || this.processingMessage) {\n        this.pendingStatus = processedStatus;\n      } else {\n        this.nextListener.onReceiveStatus(processedStatus);\n      }\n    });\n  }\n}\n\nexport interface WriteCallback {\n  (error?: Error | null): void;\n}\n\nexport interface MessageContext {\n  callback?: WriteCallback;\n  flags?: number;\n}\n\nexport interface Call {\n  cancelWithStatus(status: Status, details: string): void;\n  getPeer(): string;\n  start(metadata: Metadata, listener: InterceptingListener): void;\n  sendMessageWithContext(context: MessageContext, message: Buffer): void;\n  startRead(): void;\n  halfClose(): void;\n  getCallNumber(): number;\n  setCredentials(credentials: CallCredentials): void;\n  getAuthContext(): AuthContext | null;\n}\n\nexport interface DeadlineInfoProvider {\n  getDeadlineInfo(): string[];\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { Metadata } from './metadata';\nimport {\n  StatusObject,\n  Listener,\n  MetadataListener,\n  MessageListener,\n  StatusListener,\n  FullListener,\n  InterceptingListener,\n  InterceptingListenerImpl,\n  isInterceptingListener,\n  MessageContext,\n  Call,\n} from './call-interface';\nimport { Status } from './constants';\nimport { Channel } from './channel';\nimport { CallOptions } from './client';\nimport { ClientMethodDefinition } from './make-client';\nimport { getErrorMessage } from './error';\nimport { AuthContext } from './auth-context';\n\n/**\n * Error class associated with passing both interceptors and interceptor\n * providers to a client constructor or as call options.\n */\nexport class InterceptorConfigurationError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = 'InterceptorConfigurationError';\n    Error.captureStackTrace(this, InterceptorConfigurationError);\n  }\n}\n\nexport interface MetadataRequester {\n  (\n    metadata: Metadata,\n    listener: InterceptingListener,\n    next: (\n      metadata: Metadata,\n      listener: InterceptingListener | Listener\n    ) => void\n  ): void;\n}\n\nexport interface MessageRequester {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  (message: any, next: (message: any) => void): void;\n}\n\nexport interface CloseRequester {\n  (next: () => void): void;\n}\n\nexport interface CancelRequester {\n  (next: () => void): void;\n}\n\n/**\n * An object with methods for intercepting and modifying outgoing call operations.\n */\nexport interface FullRequester {\n  start: MetadataRequester;\n  sendMessage: MessageRequester;\n  halfClose: CloseRequester;\n  cancel: CancelRequester;\n}\n\nexport type Requester = Partial<FullRequester>;\n\nexport class ListenerBuilder {\n  private metadata: MetadataListener | undefined = undefined;\n  private message: MessageListener | undefined = undefined;\n  private status: StatusListener | undefined = undefined;\n\n  withOnReceiveMetadata(onReceiveMetadata: MetadataListener): this {\n    this.metadata = onReceiveMetadata;\n    return this;\n  }\n\n  withOnReceiveMessage(onReceiveMessage: MessageListener): this {\n    this.message = onReceiveMessage;\n    return this;\n  }\n\n  withOnReceiveStatus(onReceiveStatus: StatusListener): this {\n    this.status = onReceiveStatus;\n    return this;\n  }\n\n  build(): Listener {\n    return {\n      onReceiveMetadata: this.metadata,\n      onReceiveMessage: this.message,\n      onReceiveStatus: this.status,\n    };\n  }\n}\n\nexport class RequesterBuilder {\n  private start: MetadataRequester | undefined = undefined;\n  private message: MessageRequester | undefined = undefined;\n  private halfClose: CloseRequester | undefined = undefined;\n  private cancel: CancelRequester | undefined = undefined;\n\n  withStart(start: MetadataRequester): this {\n    this.start = start;\n    return this;\n  }\n\n  withSendMessage(sendMessage: MessageRequester): this {\n    this.message = sendMessage;\n    return this;\n  }\n\n  withHalfClose(halfClose: CloseRequester): this {\n    this.halfClose = halfClose;\n    return this;\n  }\n\n  withCancel(cancel: CancelRequester): this {\n    this.cancel = cancel;\n    return this;\n  }\n\n  build(): Requester {\n    return {\n      start: this.start,\n      sendMessage: this.message,\n      halfClose: this.halfClose,\n      cancel: this.cancel,\n    };\n  }\n}\n\n/**\n * A Listener with a default pass-through implementation of each method. Used\n * for filling out Listeners with some methods omitted.\n */\nconst defaultListener: FullListener = {\n  onReceiveMetadata: (metadata, next) => {\n    next(metadata);\n  },\n  onReceiveMessage: (message, next) => {\n    next(message);\n  },\n  onReceiveStatus: (status, next) => {\n    next(status);\n  },\n};\n\n/**\n * A Requester with a default pass-through implementation of each method. Used\n * for filling out Requesters with some methods omitted.\n */\nconst defaultRequester: FullRequester = {\n  start: (metadata, listener, next) => {\n    next(metadata, listener);\n  },\n  sendMessage: (message, next) => {\n    next(message);\n  },\n  halfClose: next => {\n    next();\n  },\n  cancel: next => {\n    next();\n  },\n};\n\nexport interface InterceptorOptions extends CallOptions {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  method_definition: ClientMethodDefinition<any, any>;\n}\n\nexport interface InterceptingCallInterface {\n  cancelWithStatus(status: Status, details: string): void;\n  getPeer(): string;\n  start(metadata: Metadata, listener?: Partial<InterceptingListener>): void;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  sendMessageWithContext(context: MessageContext, message: any): void;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  sendMessage(message: any): void;\n  startRead(): void;\n  halfClose(): void;\n  getAuthContext(): AuthContext | null;\n}\n\nexport class InterceptingCall implements InterceptingCallInterface {\n  /**\n   * The requester that this InterceptingCall uses to modify outgoing operations\n   */\n  private requester: FullRequester;\n  /**\n   * Indicates that metadata has been passed to the requester's start\n   * method but it has not been passed to the corresponding next callback\n   */\n  private processingMetadata = false;\n  /**\n   * Message context for a pending message that is waiting for\n   */\n  private pendingMessageContext: MessageContext | null = null;\n  private pendingMessage: any;\n  /**\n   * Indicates that a message has been passed to the requester's sendMessage\n   * method but it has not been passed to the corresponding next callback\n   */\n  private processingMessage = false;\n  /**\n   * Indicates that a status was received but could not be propagated because\n   * a message was still being processed.\n   */\n  private pendingHalfClose = false;\n  constructor(\n    private nextCall: InterceptingCallInterface,\n    requester?: Requester\n  ) {\n    if (requester) {\n      this.requester = {\n        start: requester.start ?? defaultRequester.start,\n        sendMessage: requester.sendMessage ?? defaultRequester.sendMessage,\n        halfClose: requester.halfClose ?? defaultRequester.halfClose,\n        cancel: requester.cancel ?? defaultRequester.cancel,\n      };\n    } else {\n      this.requester = defaultRequester;\n    }\n  }\n\n  cancelWithStatus(status: Status, details: string) {\n    this.requester.cancel(() => {\n      this.nextCall.cancelWithStatus(status, details);\n    });\n  }\n\n  getPeer() {\n    return this.nextCall.getPeer();\n  }\n\n  private processPendingMessage() {\n    if (this.pendingMessageContext) {\n      this.nextCall.sendMessageWithContext(\n        this.pendingMessageContext,\n        this.pendingMessage\n      );\n      this.pendingMessageContext = null;\n      this.pendingMessage = null;\n    }\n  }\n\n  private processPendingHalfClose() {\n    if (this.pendingHalfClose) {\n      this.nextCall.halfClose();\n    }\n  }\n\n  start(\n    metadata: Metadata,\n    interceptingListener?: Partial<InterceptingListener>\n  ): void {\n    const fullInterceptingListener: InterceptingListener = {\n      onReceiveMetadata:\n        interceptingListener?.onReceiveMetadata?.bind(interceptingListener) ??\n        (metadata => {}),\n      onReceiveMessage:\n        interceptingListener?.onReceiveMessage?.bind(interceptingListener) ??\n        (message => {}),\n      onReceiveStatus:\n        interceptingListener?.onReceiveStatus?.bind(interceptingListener) ??\n        (status => {}),\n    };\n    this.processingMetadata = true;\n    this.requester.start(metadata, fullInterceptingListener, (md, listener) => {\n      this.processingMetadata = false;\n      let finalInterceptingListener: InterceptingListener;\n      if (isInterceptingListener(listener)) {\n        finalInterceptingListener = listener;\n      } else {\n        const fullListener: FullListener = {\n          onReceiveMetadata:\n            listener.onReceiveMetadata ?? defaultListener.onReceiveMetadata,\n          onReceiveMessage:\n            listener.onReceiveMessage ?? defaultListener.onReceiveMessage,\n          onReceiveStatus:\n            listener.onReceiveStatus ?? defaultListener.onReceiveStatus,\n        };\n        finalInterceptingListener = new InterceptingListenerImpl(\n          fullListener,\n          fullInterceptingListener\n        );\n      }\n      this.nextCall.start(md, finalInterceptingListener);\n      this.processPendingMessage();\n      this.processPendingHalfClose();\n    });\n  }\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  sendMessageWithContext(context: MessageContext, message: any): void {\n    this.processingMessage = true;\n    this.requester.sendMessage(message, finalMessage => {\n      this.processingMessage = false;\n      if (this.processingMetadata) {\n        this.pendingMessageContext = context;\n        this.pendingMessage = message;\n      } else {\n        this.nextCall.sendMessageWithContext(context, finalMessage);\n        this.processPendingHalfClose();\n      }\n    });\n  }\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  sendMessage(message: any): void {\n    this.sendMessageWithContext({}, message);\n  }\n  startRead(): void {\n    this.nextCall.startRead();\n  }\n  halfClose(): void {\n    this.requester.halfClose(() => {\n      if (this.processingMetadata || this.processingMessage) {\n        this.pendingHalfClose = true;\n      } else {\n        this.nextCall.halfClose();\n      }\n    });\n  }\n  getAuthContext(): AuthContext | null {\n    return this.nextCall.getAuthContext();\n  }\n}\n\nfunction getCall(channel: Channel, path: string, options: CallOptions): Call {\n  const deadline = options.deadline ?? Infinity;\n  const host = options.host;\n  const parent = options.parent ?? null;\n  const propagateFlags = options.propagate_flags;\n  const credentials = options.credentials;\n  const call = channel.createCall(path, deadline, host, parent, propagateFlags);\n  if (credentials) {\n    call.setCredentials(credentials);\n  }\n  return call;\n}\n\n/**\n * InterceptingCall implementation that directly owns the underlying Call\n * object and handles serialization and deseraizliation.\n */\nclass BaseInterceptingCall implements InterceptingCallInterface {\n  constructor(\n    protected call: Call,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    protected methodDefinition: ClientMethodDefinition<any, any>\n  ) {}\n  cancelWithStatus(status: Status, details: string): void {\n    this.call.cancelWithStatus(status, details);\n  }\n  getPeer(): string {\n    return this.call.getPeer();\n  }\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  sendMessageWithContext(context: MessageContext, message: any): void {\n    let serialized: Buffer;\n    try {\n      serialized = this.methodDefinition.requestSerialize(message);\n    } catch (e) {\n      this.call.cancelWithStatus(\n        Status.INTERNAL,\n        `Request message serialization failure: ${getErrorMessage(e)}`\n      );\n      return;\n    }\n    this.call.sendMessageWithContext(context, serialized);\n  }\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  sendMessage(message: any) {\n    this.sendMessageWithContext({}, message);\n  }\n  start(\n    metadata: Metadata,\n    interceptingListener?: Partial<InterceptingListener>\n  ): void {\n    let readError: StatusObject | null = null;\n    this.call.start(metadata, {\n      onReceiveMetadata: metadata => {\n        interceptingListener?.onReceiveMetadata?.(metadata);\n      },\n      onReceiveMessage: message => {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        let deserialized: any;\n        try {\n          deserialized = this.methodDefinition.responseDeserialize(message);\n        } catch (e) {\n          readError = {\n            code: Status.INTERNAL,\n            details: `Response message parsing error: ${getErrorMessage(e)}`,\n            metadata: new Metadata(),\n          };\n          this.call.cancelWithStatus(readError.code, readError.details);\n          return;\n        }\n        interceptingListener?.onReceiveMessage?.(deserialized);\n      },\n      onReceiveStatus: status => {\n        if (readError) {\n          interceptingListener?.onReceiveStatus?.(readError);\n        } else {\n          interceptingListener?.onReceiveStatus?.(status);\n        }\n      },\n    });\n  }\n  startRead() {\n    this.call.startRead();\n  }\n  halfClose(): void {\n    this.call.halfClose();\n  }\n  getAuthContext(): AuthContext | null {\n    return this.call.getAuthContext();\n  }\n}\n\n/**\n * BaseInterceptingCall with special-cased behavior for methods with unary\n * responses.\n */\nclass BaseUnaryInterceptingCall\n  extends BaseInterceptingCall\n  implements InterceptingCallInterface\n{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  constructor(call: Call, methodDefinition: ClientMethodDefinition<any, any>) {\n    super(call, methodDefinition);\n  }\n  start(metadata: Metadata, listener?: Partial<InterceptingListener>): void {\n    let receivedMessage = false;\n    const wrapperListener: InterceptingListener = {\n      onReceiveMetadata:\n        listener?.onReceiveMetadata?.bind(listener) ?? (metadata => {}),\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      onReceiveMessage: (message: any) => {\n        receivedMessage = true;\n        listener?.onReceiveMessage?.(message);\n      },\n      onReceiveStatus: (status: StatusObject) => {\n        if (!receivedMessage) {\n          listener?.onReceiveMessage?.(null);\n        }\n        listener?.onReceiveStatus?.(status);\n      },\n    };\n    super.start(metadata, wrapperListener);\n    this.call.startRead();\n  }\n}\n\n/**\n * BaseInterceptingCall with special-cased behavior for methods with streaming\n * responses.\n */\nclass BaseStreamingInterceptingCall\n  extends BaseInterceptingCall\n  implements InterceptingCallInterface {}\n\nfunction getBottomInterceptingCall(\n  channel: Channel,\n  options: InterceptorOptions,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  methodDefinition: ClientMethodDefinition<any, any>\n) {\n  const call = getCall(channel, methodDefinition.path, options);\n  if (methodDefinition.responseStream) {\n    return new BaseStreamingInterceptingCall(call, methodDefinition);\n  } else {\n    return new BaseUnaryInterceptingCall(call, methodDefinition);\n  }\n}\n\nexport interface NextCall {\n  (options: InterceptorOptions): InterceptingCallInterface;\n}\n\nexport interface Interceptor {\n  (options: InterceptorOptions, nextCall: NextCall): InterceptingCall;\n}\n\nexport interface InterceptorProvider {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  (methodDefinition: ClientMethodDefinition<any, any>): Interceptor;\n}\n\nexport interface InterceptorArguments {\n  clientInterceptors: Interceptor[];\n  clientInterceptorProviders: InterceptorProvider[];\n  callInterceptors: Interceptor[];\n  callInterceptorProviders: InterceptorProvider[];\n}\n\nexport function getInterceptingCall(\n  interceptorArgs: InterceptorArguments,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  methodDefinition: ClientMethodDefinition<any, any>,\n  options: CallOptions,\n  channel: Channel\n): InterceptingCallInterface {\n  if (\n    interceptorArgs.clientInterceptors.length > 0 &&\n    interceptorArgs.clientInterceptorProviders.length > 0\n  ) {\n    throw new InterceptorConfigurationError(\n      'Both interceptors and interceptor_providers were passed as options ' +\n        'to the client constructor. Only one of these is allowed.'\n    );\n  }\n  if (\n    interceptorArgs.callInterceptors.length > 0 &&\n    interceptorArgs.callInterceptorProviders.length > 0\n  ) {\n    throw new InterceptorConfigurationError(\n      'Both interceptors and interceptor_providers were passed as call ' +\n        'options. Only one of these is allowed.'\n    );\n  }\n  let interceptors: Interceptor[] = [];\n  // Interceptors passed to the call override interceptors passed to the client constructor\n  if (\n    interceptorArgs.callInterceptors.length > 0 ||\n    interceptorArgs.callInterceptorProviders.length > 0\n  ) {\n    interceptors = ([] as Interceptor[])\n      .concat(\n        interceptorArgs.callInterceptors,\n        interceptorArgs.callInterceptorProviders.map(provider =>\n          provider(methodDefinition)\n        )\n      )\n      .filter(interceptor => interceptor);\n    // Filter out falsy values when providers return nothing\n  } else {\n    interceptors = ([] as Interceptor[])\n      .concat(\n        interceptorArgs.clientInterceptors,\n        interceptorArgs.clientInterceptorProviders.map(provider =>\n          provider(methodDefinition)\n        )\n      )\n      .filter(interceptor => interceptor);\n    // Filter out falsy values when providers return nothing\n  }\n  const interceptorOptions = Object.assign({}, options, {\n    method_definition: methodDefinition,\n  });\n  /* For each interceptor in the list, the nextCall function passed to it is\n   * based on the next interceptor in the list, using a nextCall function\n   * constructed with the following interceptor in the list, and so on. The\n   * initialValue, which is effectively at the end of the list, is a nextCall\n   * function that invokes getBottomInterceptingCall, the result of which\n   * handles (de)serialization and also gets the underlying call from the\n   * channel. */\n  const getCall: NextCall = interceptors.reduceRight<NextCall>(\n    (nextCall: NextCall, nextInterceptor: Interceptor) => {\n      return currentOptions => nextInterceptor(currentOptions, nextCall);\n    },\n    (finalOptions: InterceptorOptions) =>\n      getBottomInterceptingCall(channel, finalOptions, methodDefinition)\n  );\n  return getCall(interceptorOptions);\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport {\n  ClientDuplexStream,\n  ClientDuplexStreamImpl,\n  ClientReadableStream,\n  ClientReadableStreamImpl,\n  ClientUnaryCall,\n  ClientUnaryCallImpl,\n  ClientWritableStream,\n  ClientWritableStreamImpl,\n  ServiceError,\n  callErrorFromStatus,\n  SurfaceCall,\n} from './call';\nimport { CallCredentials } from './call-credentials';\nimport { StatusObject } from './call-interface';\nimport { Channel, ChannelImplementation } from './channel';\nimport { ConnectivityState } from './connectivity-state';\nimport { ChannelCredentials } from './channel-credentials';\nimport { ChannelOptions } from './channel-options';\nimport { Status } from './constants';\nimport { Metadata } from './metadata';\nimport { ClientMethodDefinition } from './make-client';\nimport {\n  getInterceptingCall,\n  Interceptor,\n  InterceptorProvider,\n  InterceptorArguments,\n  InterceptingCallInterface,\n} from './client-interceptors';\nimport {\n  ServerUnaryCall,\n  ServerReadableStream,\n  ServerWritableStream,\n  ServerDuplexStream,\n} from './server-call';\nimport { Deadline } from './deadline';\n\nconst CHANNEL_SYMBOL = Symbol();\nconst INTERCEPTOR_SYMBOL = Symbol();\nconst INTERCEPTOR_PROVIDER_SYMBOL = Symbol();\nconst CALL_INVOCATION_TRANSFORMER_SYMBOL = Symbol();\n\nfunction isFunction<ResponseType>(\n  arg: Metadata | CallOptions | UnaryCallback<ResponseType> | undefined\n): arg is UnaryCallback<ResponseType> {\n  return typeof arg === 'function';\n}\n\nexport interface UnaryCallback<ResponseType> {\n  (err: ServiceError | null, value?: ResponseType): void;\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport interface CallOptions {\n  deadline?: Deadline;\n  host?: string;\n  parent?:\n    | ServerUnaryCall<any, any>\n    | ServerReadableStream<any, any>\n    | ServerWritableStream<any, any>\n    | ServerDuplexStream<any, any>;\n  propagate_flags?: number;\n  credentials?: CallCredentials;\n  interceptors?: Interceptor[];\n  interceptor_providers?: InterceptorProvider[];\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nexport interface CallProperties<RequestType, ResponseType> {\n  argument?: RequestType;\n  metadata: Metadata;\n  call: SurfaceCall;\n  channel: Channel;\n  methodDefinition: ClientMethodDefinition<RequestType, ResponseType>;\n  callOptions: CallOptions;\n  callback?: UnaryCallback<ResponseType>;\n}\n\nexport interface CallInvocationTransformer {\n  (callProperties: CallProperties<any, any>): CallProperties<any, any>; // eslint-disable-line @typescript-eslint/no-explicit-any\n}\n\nexport type ClientOptions = Partial<ChannelOptions> & {\n  channelOverride?: Channel;\n  channelFactoryOverride?: (\n    address: string,\n    credentials: ChannelCredentials,\n    options: ClientOptions\n  ) => Channel;\n  interceptors?: Interceptor[];\n  interceptor_providers?: InterceptorProvider[];\n  callInvocationTransformer?: CallInvocationTransformer;\n};\n\nfunction getErrorStackString(error: Error): string {\n  return error.stack?.split('\\n').slice(1).join('\\n') || 'no stack trace available';\n}\n\n/**\n * A generic gRPC client. Primarily useful as a base class for all generated\n * clients.\n */\nexport class Client {\n  private readonly [CHANNEL_SYMBOL]: Channel;\n  private readonly [INTERCEPTOR_SYMBOL]: Interceptor[];\n  private readonly [INTERCEPTOR_PROVIDER_SYMBOL]: InterceptorProvider[];\n  private readonly [CALL_INVOCATION_TRANSFORMER_SYMBOL]?: CallInvocationTransformer;\n  constructor(\n    address: string,\n    credentials: ChannelCredentials,\n    options: ClientOptions = {}\n  ) {\n    options = Object.assign({}, options);\n    this[INTERCEPTOR_SYMBOL] = options.interceptors ?? [];\n    delete options.interceptors;\n    this[INTERCEPTOR_PROVIDER_SYMBOL] = options.interceptor_providers ?? [];\n    delete options.interceptor_providers;\n    if (\n      this[INTERCEPTOR_SYMBOL].length > 0 &&\n      this[INTERCEPTOR_PROVIDER_SYMBOL].length > 0\n    ) {\n      throw new Error(\n        'Both interceptors and interceptor_providers were passed as options ' +\n          'to the client constructor. Only one of these is allowed.'\n      );\n    }\n    this[CALL_INVOCATION_TRANSFORMER_SYMBOL] =\n      options.callInvocationTransformer;\n    delete options.callInvocationTransformer;\n    if (options.channelOverride) {\n      this[CHANNEL_SYMBOL] = options.channelOverride;\n    } else if (options.channelFactoryOverride) {\n      const channelFactoryOverride = options.channelFactoryOverride;\n      delete options.channelFactoryOverride;\n      this[CHANNEL_SYMBOL] = channelFactoryOverride(\n        address,\n        credentials,\n        options\n      );\n    } else {\n      this[CHANNEL_SYMBOL] = new ChannelImplementation(\n        address,\n        credentials,\n        options\n      );\n    }\n  }\n\n  close(): void {\n    this[CHANNEL_SYMBOL].close();\n  }\n\n  getChannel(): Channel {\n    return this[CHANNEL_SYMBOL];\n  }\n\n  waitForReady(deadline: Deadline, callback: (error?: Error) => void): void {\n    const checkState = (err?: Error) => {\n      if (err) {\n        callback(new Error('Failed to connect before the deadline'));\n        return;\n      }\n      let newState;\n      try {\n        newState = this[CHANNEL_SYMBOL].getConnectivityState(true);\n      } catch (e) {\n        callback(new Error('The channel has been closed'));\n        return;\n      }\n      if (newState === ConnectivityState.READY) {\n        callback();\n      } else {\n        try {\n          this[CHANNEL_SYMBOL].watchConnectivityState(\n            newState,\n            deadline,\n            checkState\n          );\n        } catch (e) {\n          callback(new Error('The channel has been closed'));\n        }\n      }\n    };\n    setImmediate(checkState);\n  }\n\n  private checkOptionalUnaryResponseArguments<ResponseType>(\n    arg1: Metadata | CallOptions | UnaryCallback<ResponseType>,\n    arg2?: CallOptions | UnaryCallback<ResponseType>,\n    arg3?: UnaryCallback<ResponseType>\n  ): {\n    metadata: Metadata;\n    options: CallOptions;\n    callback: UnaryCallback<ResponseType>;\n  } {\n    if (isFunction(arg1)) {\n      return { metadata: new Metadata(), options: {}, callback: arg1 };\n    } else if (isFunction(arg2)) {\n      if (arg1 instanceof Metadata) {\n        return { metadata: arg1, options: {}, callback: arg2 };\n      } else {\n        return { metadata: new Metadata(), options: arg1, callback: arg2 };\n      }\n    } else {\n      if (\n        !(\n          arg1 instanceof Metadata &&\n          arg2 instanceof Object &&\n          isFunction(arg3)\n        )\n      ) {\n        throw new Error('Incorrect arguments passed');\n      }\n      return { metadata: arg1, options: arg2, callback: arg3 };\n    }\n  }\n\n  makeUnaryRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    argument: RequestType,\n    metadata: Metadata,\n    options: CallOptions,\n    callback: UnaryCallback<ResponseType>\n  ): ClientUnaryCall;\n  makeUnaryRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    argument: RequestType,\n    metadata: Metadata,\n    callback: UnaryCallback<ResponseType>\n  ): ClientUnaryCall;\n  makeUnaryRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    argument: RequestType,\n    options: CallOptions,\n    callback: UnaryCallback<ResponseType>\n  ): ClientUnaryCall;\n  makeUnaryRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    argument: RequestType,\n    callback: UnaryCallback<ResponseType>\n  ): ClientUnaryCall;\n  makeUnaryRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    argument: RequestType,\n    metadata: Metadata | CallOptions | UnaryCallback<ResponseType>,\n    options?: CallOptions | UnaryCallback<ResponseType>,\n    callback?: UnaryCallback<ResponseType>\n  ): ClientUnaryCall {\n    const checkedArguments =\n      this.checkOptionalUnaryResponseArguments<ResponseType>(\n        metadata,\n        options,\n        callback\n      );\n    const methodDefinition: ClientMethodDefinition<RequestType, ResponseType> =\n      {\n        path: method,\n        requestStream: false,\n        responseStream: false,\n        requestSerialize: serialize,\n        responseDeserialize: deserialize,\n      };\n    let callProperties: CallProperties<RequestType, ResponseType> = {\n      argument: argument,\n      metadata: checkedArguments.metadata,\n      call: new ClientUnaryCallImpl(),\n      channel: this[CHANNEL_SYMBOL],\n      methodDefinition: methodDefinition,\n      callOptions: checkedArguments.options,\n      callback: checkedArguments.callback,\n    };\n    if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) {\n      callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL]!(\n        callProperties\n      ) as CallProperties<RequestType, ResponseType>;\n    }\n    const emitter: ClientUnaryCall = callProperties.call;\n    const interceptorArgs: InterceptorArguments = {\n      clientInterceptors: this[INTERCEPTOR_SYMBOL],\n      clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL],\n      callInterceptors: callProperties.callOptions.interceptors ?? [],\n      callInterceptorProviders:\n        callProperties.callOptions.interceptor_providers ?? [],\n    };\n    const call: InterceptingCallInterface = getInterceptingCall(\n      interceptorArgs,\n      callProperties.methodDefinition,\n      callProperties.callOptions,\n      callProperties.channel\n    );\n    /* This needs to happen before the emitter is used. Unfortunately we can't\n     * enforce this with the type system. We need to construct this emitter\n     * before calling the CallInvocationTransformer, and we need to create the\n     * call after that. */\n    emitter.call = call;\n    let responseMessage: ResponseType | null = null;\n    let receivedStatus = false;\n    let callerStackError: Error | null = new Error();\n    call.start(callProperties.metadata, {\n      onReceiveMetadata: metadata => {\n        emitter.emit('metadata', metadata);\n      },\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      onReceiveMessage(message: any) {\n        if (responseMessage !== null) {\n          call.cancelWithStatus(Status.UNIMPLEMENTED, 'Too many responses received');\n        }\n        responseMessage = message;\n      },\n      onReceiveStatus(status: StatusObject) {\n        if (receivedStatus) {\n          return;\n        }\n        receivedStatus = true;\n        if (status.code === Status.OK) {\n          if (responseMessage === null) {\n            const callerStack = getErrorStackString(callerStackError!);\n            callProperties.callback!(\n              callErrorFromStatus(\n                {\n                  code: Status.UNIMPLEMENTED,\n                  details: 'No message received',\n                  metadata: status.metadata,\n                },\n                callerStack\n              )\n            );\n          } else {\n            callProperties.callback!(null, responseMessage);\n          }\n        } else {\n          const callerStack = getErrorStackString(callerStackError!);\n          callProperties.callback!(callErrorFromStatus(status, callerStack));\n        }\n        /* Avoid retaining the callerStackError object in the call context of\n         * the status event handler. */\n        callerStackError = null;\n        emitter.emit('status', status);\n      },\n    });\n    call.sendMessage(argument);\n    call.halfClose();\n    return emitter;\n  }\n\n  makeClientStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    metadata: Metadata,\n    options: CallOptions,\n    callback: UnaryCallback<ResponseType>\n  ): ClientWritableStream<RequestType>;\n  makeClientStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    metadata: Metadata,\n    callback: UnaryCallback<ResponseType>\n  ): ClientWritableStream<RequestType>;\n  makeClientStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    options: CallOptions,\n    callback: UnaryCallback<ResponseType>\n  ): ClientWritableStream<RequestType>;\n  makeClientStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    callback: UnaryCallback<ResponseType>\n  ): ClientWritableStream<RequestType>;\n  makeClientStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    metadata: Metadata | CallOptions | UnaryCallback<ResponseType>,\n    options?: CallOptions | UnaryCallback<ResponseType>,\n    callback?: UnaryCallback<ResponseType>\n  ): ClientWritableStream<RequestType> {\n    const checkedArguments =\n      this.checkOptionalUnaryResponseArguments<ResponseType>(\n        metadata,\n        options,\n        callback\n      );\n    const methodDefinition: ClientMethodDefinition<RequestType, ResponseType> =\n      {\n        path: method,\n        requestStream: true,\n        responseStream: false,\n        requestSerialize: serialize,\n        responseDeserialize: deserialize,\n      };\n    let callProperties: CallProperties<RequestType, ResponseType> = {\n      metadata: checkedArguments.metadata,\n      call: new ClientWritableStreamImpl<RequestType>(serialize),\n      channel: this[CHANNEL_SYMBOL],\n      methodDefinition: methodDefinition,\n      callOptions: checkedArguments.options,\n      callback: checkedArguments.callback,\n    };\n    if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) {\n      callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL]!(\n        callProperties\n      ) as CallProperties<RequestType, ResponseType>;\n    }\n    const emitter: ClientWritableStream<RequestType> =\n      callProperties.call as ClientWritableStream<RequestType>;\n    const interceptorArgs: InterceptorArguments = {\n      clientInterceptors: this[INTERCEPTOR_SYMBOL],\n      clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL],\n      callInterceptors: callProperties.callOptions.interceptors ?? [],\n      callInterceptorProviders:\n        callProperties.callOptions.interceptor_providers ?? [],\n    };\n    const call: InterceptingCallInterface = getInterceptingCall(\n      interceptorArgs,\n      callProperties.methodDefinition,\n      callProperties.callOptions,\n      callProperties.channel\n    );\n    /* This needs to happen before the emitter is used. Unfortunately we can't\n     * enforce this with the type system. We need to construct this emitter\n     * before calling the CallInvocationTransformer, and we need to create the\n     * call after that. */\n    emitter.call = call;\n    let responseMessage: ResponseType | null = null;\n    let receivedStatus = false;\n    let callerStackError: Error | null = new Error();\n    call.start(callProperties.metadata, {\n      onReceiveMetadata: metadata => {\n        emitter.emit('metadata', metadata);\n      },\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      onReceiveMessage(message: any) {\n        if (responseMessage !== null) {\n          call.cancelWithStatus(Status.UNIMPLEMENTED, 'Too many responses received');\n        }\n        responseMessage = message;\n        call.startRead();\n      },\n      onReceiveStatus(status: StatusObject) {\n        if (receivedStatus) {\n          return;\n        }\n        receivedStatus = true;\n        if (status.code === Status.OK) {\n          if (responseMessage === null) {\n            const callerStack = getErrorStackString(callerStackError!);\n            callProperties.callback!(\n              callErrorFromStatus(\n                {\n                  code: Status.UNIMPLEMENTED,\n                  details: 'No message received',\n                  metadata: status.metadata,\n                },\n                callerStack\n              )\n            );\n          } else {\n            callProperties.callback!(null, responseMessage);\n          }\n        } else {\n          const callerStack = getErrorStackString(callerStackError!);\n          callProperties.callback!(callErrorFromStatus(status, callerStack));\n        }\n        /* Avoid retaining the callerStackError object in the call context of\n         * the status event handler. */\n        callerStackError = null;\n        emitter.emit('status', status);\n      },\n    });\n    return emitter;\n  }\n\n  private checkMetadataAndOptions(\n    arg1?: Metadata | CallOptions,\n    arg2?: CallOptions\n  ): { metadata: Metadata; options: CallOptions } {\n    let metadata: Metadata;\n    let options: CallOptions;\n    if (arg1 instanceof Metadata) {\n      metadata = arg1;\n      if (arg2) {\n        options = arg2;\n      } else {\n        options = {};\n      }\n    } else {\n      if (arg1) {\n        options = arg1;\n      } else {\n        options = {};\n      }\n      metadata = new Metadata();\n    }\n    return { metadata, options };\n  }\n\n  makeServerStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    argument: RequestType,\n    metadata: Metadata,\n    options?: CallOptions\n  ): ClientReadableStream<ResponseType>;\n  makeServerStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    argument: RequestType,\n    options?: CallOptions\n  ): ClientReadableStream<ResponseType>;\n  makeServerStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    argument: RequestType,\n    metadata?: Metadata | CallOptions,\n    options?: CallOptions\n  ): ClientReadableStream<ResponseType> {\n    const checkedArguments = this.checkMetadataAndOptions(metadata, options);\n    const methodDefinition: ClientMethodDefinition<RequestType, ResponseType> =\n      {\n        path: method,\n        requestStream: false,\n        responseStream: true,\n        requestSerialize: serialize,\n        responseDeserialize: deserialize,\n      };\n    let callProperties: CallProperties<RequestType, ResponseType> = {\n      argument: argument,\n      metadata: checkedArguments.metadata,\n      call: new ClientReadableStreamImpl<ResponseType>(deserialize),\n      channel: this[CHANNEL_SYMBOL],\n      methodDefinition: methodDefinition,\n      callOptions: checkedArguments.options,\n    };\n    if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) {\n      callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL]!(\n        callProperties\n      ) as CallProperties<RequestType, ResponseType>;\n    }\n    const stream: ClientReadableStream<ResponseType> =\n      callProperties.call as ClientReadableStream<ResponseType>;\n    const interceptorArgs: InterceptorArguments = {\n      clientInterceptors: this[INTERCEPTOR_SYMBOL],\n      clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL],\n      callInterceptors: callProperties.callOptions.interceptors ?? [],\n      callInterceptorProviders:\n        callProperties.callOptions.interceptor_providers ?? [],\n    };\n    const call: InterceptingCallInterface = getInterceptingCall(\n      interceptorArgs,\n      callProperties.methodDefinition,\n      callProperties.callOptions,\n      callProperties.channel\n    );\n    /* This needs to happen before the emitter is used. Unfortunately we can't\n     * enforce this with the type system. We need to construct this emitter\n     * before calling the CallInvocationTransformer, and we need to create the\n     * call after that. */\n    stream.call = call;\n    let receivedStatus = false;\n    let callerStackError: Error | null = new Error();\n    call.start(callProperties.metadata, {\n      onReceiveMetadata(metadata: Metadata) {\n        stream.emit('metadata', metadata);\n      },\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      onReceiveMessage(message: any) {\n        stream.push(message);\n      },\n      onReceiveStatus(status: StatusObject) {\n        if (receivedStatus) {\n          return;\n        }\n        receivedStatus = true;\n        stream.push(null);\n        if (status.code !== Status.OK) {\n          const callerStack = getErrorStackString(callerStackError!);\n          stream.emit('error', callErrorFromStatus(status, callerStack));\n        }\n        /* Avoid retaining the callerStackError object in the call context of\n         * the status event handler. */\n        callerStackError = null;\n        stream.emit('status', status);\n      },\n    });\n    call.sendMessage(argument);\n    call.halfClose();\n    return stream;\n  }\n\n  makeBidiStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    metadata: Metadata,\n    options?: CallOptions\n  ): ClientDuplexStream<RequestType, ResponseType>;\n  makeBidiStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    options?: CallOptions\n  ): ClientDuplexStream<RequestType, ResponseType>;\n  makeBidiStreamRequest<RequestType, ResponseType>(\n    method: string,\n    serialize: (value: RequestType) => Buffer,\n    deserialize: (value: Buffer) => ResponseType,\n    metadata?: Metadata | CallOptions,\n    options?: CallOptions\n  ): ClientDuplexStream<RequestType, ResponseType> {\n    const checkedArguments = this.checkMetadataAndOptions(metadata, options);\n    const methodDefinition: ClientMethodDefinition<RequestType, ResponseType> =\n      {\n        path: method,\n        requestStream: true,\n        responseStream: true,\n        requestSerialize: serialize,\n        responseDeserialize: deserialize,\n      };\n    let callProperties: CallProperties<RequestType, ResponseType> = {\n      metadata: checkedArguments.metadata,\n      call: new ClientDuplexStreamImpl<RequestType, ResponseType>(\n        serialize,\n        deserialize\n      ),\n      channel: this[CHANNEL_SYMBOL],\n      methodDefinition: methodDefinition,\n      callOptions: checkedArguments.options,\n    };\n    if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) {\n      callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL]!(\n        callProperties\n      ) as CallProperties<RequestType, ResponseType>;\n    }\n    const stream: ClientDuplexStream<RequestType, ResponseType> =\n      callProperties.call as ClientDuplexStream<RequestType, ResponseType>;\n    const interceptorArgs: InterceptorArguments = {\n      clientInterceptors: this[INTERCEPTOR_SYMBOL],\n      clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL],\n      callInterceptors: callProperties.callOptions.interceptors ?? [],\n      callInterceptorProviders:\n        callProperties.callOptions.interceptor_providers ?? [],\n    };\n    const call: InterceptingCallInterface = getInterceptingCall(\n      interceptorArgs,\n      callProperties.methodDefinition,\n      callProperties.callOptions,\n      callProperties.channel\n    );\n    /* This needs to happen before the emitter is used. Unfortunately we can't\n     * enforce this with the type system. We need to construct this emitter\n     * before calling the CallInvocationTransformer, and we need to create the\n     * call after that. */\n    stream.call = call;\n    let receivedStatus = false;\n    let callerStackError: Error | null = new Error();\n    call.start(callProperties.metadata, {\n      onReceiveMetadata(metadata: Metadata) {\n        stream.emit('metadata', metadata);\n      },\n      onReceiveMessage(message: Buffer) {\n        stream.push(message);\n      },\n      onReceiveStatus(status: StatusObject) {\n        if (receivedStatus) {\n          return;\n        }\n        receivedStatus = true;\n        stream.push(null);\n        if (status.code !== Status.OK) {\n          const callerStack = getErrorStackString(callerStackError!);\n          stream.emit('error', callErrorFromStatus(status, callerStack));\n        }\n        /* Avoid retaining the callerStackError object in the call context of\n         * the status event handler. */\n        callerStackError = null;\n        stream.emit('status', status);\n      },\n    });\n    return stream;\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { ChannelCredentials } from './channel-credentials';\nimport { ChannelOptions } from './channel-options';\nimport { Client } from './client';\nimport { UntypedServiceImplementation } from './server';\n\nexport interface Serialize<T> {\n  (value: T): Buffer;\n}\n\nexport interface Deserialize<T> {\n  (bytes: Buffer): T;\n}\n\nexport interface ClientMethodDefinition<RequestType, ResponseType> {\n  path: string;\n  requestStream: boolean;\n  responseStream: boolean;\n  requestSerialize: Serialize<RequestType>;\n  responseDeserialize: Deserialize<ResponseType>;\n  originalName?: string;\n}\n\nexport interface ServerMethodDefinition<RequestType, ResponseType> {\n  path: string;\n  requestStream: boolean;\n  responseStream: boolean;\n  responseSerialize: Serialize<ResponseType>;\n  requestDeserialize: Deserialize<RequestType>;\n  originalName?: string;\n}\n\nexport interface MethodDefinition<RequestType, ResponseType>\n  extends ClientMethodDefinition<RequestType, ResponseType>,\n    ServerMethodDefinition<RequestType, ResponseType> {}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport type ServiceDefinition<\n  ImplementationType = UntypedServiceImplementation\n> = {\n  readonly [index in keyof ImplementationType]: MethodDefinition<any, any>;\n};\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nexport interface ProtobufTypeDefinition {\n  format: string;\n  type: object;\n  fileDescriptorProtos: Buffer[];\n}\n\nexport interface PackageDefinition {\n  [index: string]: ServiceDefinition | ProtobufTypeDefinition;\n}\n\n/**\n * Map with short names for each of the requester maker functions. Used in\n * makeClientConstructor\n * @private\n */\nconst requesterFuncs = {\n  unary: Client.prototype.makeUnaryRequest,\n  server_stream: Client.prototype.makeServerStreamRequest,\n  client_stream: Client.prototype.makeClientStreamRequest,\n  bidi: Client.prototype.makeBidiStreamRequest,\n};\n\nexport interface ServiceClient extends Client {\n  [methodName: string]: Function;\n}\n\nexport interface ServiceClientConstructor {\n  new (\n    address: string,\n    credentials: ChannelCredentials,\n    options?: Partial<ChannelOptions>\n  ): ServiceClient;\n  service: ServiceDefinition;\n  serviceName: string;\n}\n\n/**\n * Returns true, if given key is included in the blacklisted\n * keys.\n * @param key key for check, string.\n */\nfunction isPrototypePolluted(key: string): boolean {\n  return ['__proto__', 'prototype', 'constructor'].includes(key);\n}\n\n/**\n * Creates a constructor for a client with the given methods, as specified in\n * the methods argument. The resulting class will have an instance method for\n * each method in the service, which is a partial application of one of the\n * [Client]{@link grpc.Client} request methods, depending on `requestSerialize`\n * and `responseSerialize`, with the `method`, `serialize`, and `deserialize`\n * arguments predefined.\n * @param methods An object mapping method names to\n *     method attributes\n * @param serviceName The fully qualified name of the service\n * @param classOptions An options object.\n * @return New client constructor, which is a subclass of\n *     {@link grpc.Client}, and has the same arguments as that constructor.\n */\nexport function makeClientConstructor(\n  methods: ServiceDefinition,\n  serviceName: string,\n  classOptions?: {}\n): ServiceClientConstructor {\n  if (!classOptions) {\n    classOptions = {};\n  }\n\n  class ServiceClientImpl extends Client implements ServiceClient {\n    static service: ServiceDefinition;\n    static serviceName: string;\n    [methodName: string]: Function;\n  }\n\n  Object.keys(methods).forEach(name => {\n    if (isPrototypePolluted(name)) {\n      return;\n    }\n    const attrs = methods[name];\n    let methodType: keyof typeof requesterFuncs;\n    // TODO(murgatroid99): Verify that we don't need this anymore\n    if (typeof name === 'string' && name.charAt(0) === '$') {\n      throw new Error('Method names cannot start with $');\n    }\n    if (attrs.requestStream) {\n      if (attrs.responseStream) {\n        methodType = 'bidi';\n      } else {\n        methodType = 'client_stream';\n      }\n    } else {\n      if (attrs.responseStream) {\n        methodType = 'server_stream';\n      } else {\n        methodType = 'unary';\n      }\n    }\n    const serialize = attrs.requestSerialize;\n    const deserialize = attrs.responseDeserialize;\n    const methodFunc = partial(\n      requesterFuncs[methodType],\n      attrs.path,\n      serialize,\n      deserialize\n    );\n    ServiceClientImpl.prototype[name] = methodFunc;\n    // Associate all provided attributes with the method\n    Object.assign(ServiceClientImpl.prototype[name], attrs);\n    if (attrs.originalName && !isPrototypePolluted(attrs.originalName)) {\n      ServiceClientImpl.prototype[attrs.originalName] =\n        ServiceClientImpl.prototype[name];\n    }\n  });\n\n  ServiceClientImpl.service = methods;\n  ServiceClientImpl.serviceName = serviceName;\n\n  return ServiceClientImpl;\n}\n\nfunction partial(\n  fn: Function,\n  path: string,\n  serialize: Function,\n  deserialize: Function\n): Function {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function (this: any, ...args: any[]) {\n    return fn.call(this, path, serialize, deserialize, ...args);\n  };\n}\n\nexport interface GrpcObject {\n  [index: string]:\n    | GrpcObject\n    | ServiceClientConstructor\n    | ProtobufTypeDefinition;\n}\n\nfunction isProtobufTypeDefinition(\n  obj: ServiceDefinition | ProtobufTypeDefinition\n): obj is ProtobufTypeDefinition {\n  return 'format' in obj;\n}\n\n/**\n * Load a gRPC package definition as a gRPC object hierarchy.\n * @param packageDef The package definition object.\n * @return The resulting gRPC object.\n */\nexport function loadPackageDefinition(\n  packageDef: PackageDefinition\n): GrpcObject {\n  const result: GrpcObject = {};\n  for (const serviceFqn in packageDef) {\n    if (Object.prototype.hasOwnProperty.call(packageDef, serviceFqn)) {\n      const service = packageDef[serviceFqn];\n      const nameComponents = serviceFqn.split('.');\n      if (nameComponents.some((comp: string) => isPrototypePolluted(comp))) {\n        continue;\n      }\n      const serviceName = nameComponents[nameComponents.length - 1];\n      let current = result;\n      for (const packageName of nameComponents.slice(0, -1)) {\n        if (!current[packageName]) {\n          current[packageName] = {};\n        }\n        current = current[packageName] as GrpcObject;\n      }\n      if (isProtobufTypeDefinition(service)) {\n        current[serviceName] = service;\n      } else {\n        current[serviceName] = makeClientConstructor(service, serviceName, {});\n      }\n    }\n  }\n  return result;\n}\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20f0',\n    rsDingbatRange = '\\\\u2700-\\\\u27bf',\n    rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n    rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n    rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n    rsPunctuationRange = '\\\\u2000-\\\\u206f',\n    rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n    rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n    rsVarRange = '\\\\ufe0e\\\\ufe0f',\n    rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n    rsAstral = '[' + rsAstralRange + ']',\n    rsBreak = '[' + rsBreakRange + ']',\n    rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',\n    rsDigits = '\\\\d+',\n    rsDingbat = '[' + rsDingbatRange + ']',\n    rsLower = '[' + rsLowerRange + ']',\n    rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsUpper = '[' + rsUpperRange + ']',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')',\n    rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')',\n    rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n    rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n    reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n  rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n  rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')',\n  rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr,\n  rsUpper + '+' + rsOptUpperContr,\n  rsDigits,\n  rsEmoji\n].join('|'), 'g');\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');\n\n/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n  // Latin-1 Supplement block.\n  '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n  '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n  '\\xc7': 'C',  '\\xe7': 'c',\n  '\\xd0': 'D',  '\\xf0': 'd',\n  '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n  '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n  '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n  '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n  '\\xd1': 'N',  '\\xf1': 'n',\n  '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n  '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n  '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n  '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n  '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n  '\\xc6': 'Ae', '\\xe6': 'ae',\n  '\\xde': 'Th', '\\xfe': 'th',\n  '\\xdf': 'ss',\n  // Latin Extended-A block.\n  '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n  '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n  '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n  '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n  '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n  '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n  '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n  '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n  '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n  '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n  '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n  '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n  '\\u0134': 'J',  '\\u0135': 'j',\n  '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n  '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n  '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n  '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n  '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n  '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n  '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n  '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n  '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n  '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n  '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n  '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n  '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n  '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n  '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n  '\\u0174': 'W',  '\\u0175': 'w',\n  '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n  '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n  '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n  '\\u0132': 'IJ', '\\u0133': 'ij',\n  '\\u0152': 'Oe', '\\u0153': 'oe',\n  '\\u0149': \"'n\", '\\u017f': 'ss'\n};\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n *  the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n  var index = -1,\n      length = array ? array.length : 0;\n\n  if (initAccum && length) {\n    accumulator = array[++index];\n  }\n  while (++index < length) {\n    accumulator = iteratee(accumulator, array[index], index, array);\n  }\n  return accumulator;\n}\n\n/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n  return string.split('');\n}\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n  return string.match(reAsciiWord) || [];\n}\n\n/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n  return function(key) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n  return reHasUnicode.test(string);\n}\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n  return reHasUnicodeWord.test(string);\n}\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n  return hasUnicode(string)\n    ? unicodeToArray(string)\n    : asciiToArray(string);\n}\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n  return string.match(reUnicode) || [];\n}\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n  return string.match(reUnicodeWord) || [];\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n  var length = array.length;\n  end = end === undefined ? length : end;\n  return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n  return function(string) {\n    string = toString(string);\n\n    var strSymbols = hasUnicode(string)\n      ? stringToArray(string)\n      : undefined;\n\n    var chr = strSymbols\n      ? strSymbols[0]\n      : string.charAt(0);\n\n    var trailing = strSymbols\n      ? castSlice(strSymbols, 1).join('')\n      : string.slice(1);\n\n    return chr[methodName]() + trailing;\n  };\n}\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n  return function(string) {\n    return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n  };\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n  word = word.toLowerCase();\n  return result + (index ? capitalize(word) : word);\n});\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n  return upperFirst(toString(string).toLowerCase());\n}\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n  string = toString(string);\n  return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n  string = toString(string);\n  pattern = guard ? undefined : pattern;\n\n  if (pattern === undefined) {\n    return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n  }\n  return string.match(pattern) || [];\n}\n\nmodule.exports = camelCase;\n","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n    var params  = new Array(arguments.length - 1),\r\n        offset  = 0,\r\n        index   = 2,\r\n        pending = true;\r\n    while (index < arguments.length)\r\n        params[offset++] = arguments[index++];\r\n    return new Promise(function executor(resolve, reject) {\r\n        params[offset] = function callback(err/*, varargs */) {\r\n            if (pending) {\r\n                pending = false;\r\n                if (err)\r\n                    reject(err);\r\n                else {\r\n                    var params = new Array(arguments.length - 1),\r\n                        offset = 0;\r\n                    while (offset < params.length)\r\n                        params[offset++] = arguments[offset];\r\n                    resolve.apply(null, params);\r\n                }\r\n            }\r\n        };\r\n        try {\r\n            fn.apply(ctx || null, params);\r\n        } catch (err) {\r\n            if (pending) {\r\n                pending = false;\r\n                reject(err);\r\n            }\r\n        }\r\n    });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n    var p = string.length;\r\n    if (!p)\r\n        return 0;\r\n    var n = 0;\r\n    while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n        ++n;\r\n    return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n    s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n    var parts = null,\r\n        chunk = [];\r\n    var i = 0, // output index\r\n        j = 0, // goto index\r\n        t;     // temporary\r\n    while (start < end) {\r\n        var b = buffer[start++];\r\n        switch (j) {\r\n            case 0:\r\n                chunk[i++] = b64[b >> 2];\r\n                t = (b & 3) << 4;\r\n                j = 1;\r\n                break;\r\n            case 1:\r\n                chunk[i++] = b64[t | b >> 4];\r\n                t = (b & 15) << 2;\r\n                j = 2;\r\n                break;\r\n            case 2:\r\n                chunk[i++] = b64[t | b >> 6];\r\n                chunk[i++] = b64[b & 63];\r\n                j = 0;\r\n                break;\r\n        }\r\n        if (i > 8191) {\r\n            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n            i = 0;\r\n        }\r\n    }\r\n    if (j) {\r\n        chunk[i++] = b64[t];\r\n        chunk[i++] = 61;\r\n        if (j === 1)\r\n            chunk[i++] = 61;\r\n    }\r\n    if (parts) {\r\n        if (i)\r\n            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n        return parts.join(\"\");\r\n    }\r\n    return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n    var start = offset;\r\n    var j = 0, // goto index\r\n        t;     // temporary\r\n    for (var i = 0; i < string.length;) {\r\n        var c = string.charCodeAt(i++);\r\n        if (c === 61 && j > 1)\r\n            break;\r\n        if ((c = s64[c]) === undefined)\r\n            throw Error(invalidEncoding);\r\n        switch (j) {\r\n            case 0:\r\n                t = c;\r\n                j = 1;\r\n                break;\r\n            case 1:\r\n                buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n                t = c;\r\n                j = 2;\r\n                break;\r\n            case 2:\r\n                buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n                t = c;\r\n                j = 3;\r\n                break;\r\n            case 3:\r\n                buffer[offset++] = (t & 3) << 6 | c;\r\n                j = 0;\r\n                break;\r\n        }\r\n    }\r\n    if (j === 1)\r\n        throw Error(invalidEncoding);\r\n    return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n    return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n    /**\r\n     * Registered listeners.\r\n     * @type {Object.<string,*>}\r\n     * @private\r\n     */\r\n    this._listeners = Object.create(null);\r\n}\r\n\r\n/**\r\n * Event listener as used by {@link util.EventEmitter}.\r\n * @typedef EventEmitterListener\r\n * @type {function}\r\n * @param {...*} args Arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {EventEmitterListener} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {this} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n    (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n        fn  : fn,\r\n        ctx : ctx || this\r\n    });\r\n    return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {EventEmitterListener} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {this} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n    if (evt === undefined)\r\n        this._listeners = Object.create(null);\r\n    else {\r\n        if (fn === undefined)\r\n            this._listeners[evt] = [];\r\n        else {\r\n            var listeners = this._listeners[evt];\r\n            if (!listeners)\r\n                return this;\r\n            for (var i = 0; i < listeners.length;)\r\n                if (listeners[i].fn === fn)\r\n                    listeners.splice(i, 1);\r\n                else\r\n                    ++i;\r\n        }\r\n    }\r\n    return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {this} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n    var listeners = this._listeners[evt];\r\n    if (listeners) {\r\n        var args = [],\r\n            i = 1;\r\n        for (; i < arguments.length;)\r\n            args.push(arguments[i++]);\r\n        for (i = 0; i < listeners.length;)\r\n            listeners[i].fn.apply(listeners[i++].ctx, args);\r\n    }\r\n    return this;\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n    // float: typed array\r\n    if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n        var f32 = new Float32Array([ -0 ]),\r\n            f8b = new Uint8Array(f32.buffer),\r\n            le  = f8b[3] === 128;\r\n\r\n        function writeFloat_f32_cpy(val, buf, pos) {\r\n            f32[0] = val;\r\n            buf[pos    ] = f8b[0];\r\n            buf[pos + 1] = f8b[1];\r\n            buf[pos + 2] = f8b[2];\r\n            buf[pos + 3] = f8b[3];\r\n        }\r\n\r\n        function writeFloat_f32_rev(val, buf, pos) {\r\n            f32[0] = val;\r\n            buf[pos    ] = f8b[3];\r\n            buf[pos + 1] = f8b[2];\r\n            buf[pos + 2] = f8b[1];\r\n            buf[pos + 3] = f8b[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n        /* istanbul ignore next */\r\n        exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n        function readFloat_f32_cpy(buf, pos) {\r\n            f8b[0] = buf[pos    ];\r\n            f8b[1] = buf[pos + 1];\r\n            f8b[2] = buf[pos + 2];\r\n            f8b[3] = buf[pos + 3];\r\n            return f32[0];\r\n        }\r\n\r\n        function readFloat_f32_rev(buf, pos) {\r\n            f8b[3] = buf[pos    ];\r\n            f8b[2] = buf[pos + 1];\r\n            f8b[1] = buf[pos + 2];\r\n            f8b[0] = buf[pos + 3];\r\n            return f32[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n        /* istanbul ignore next */\r\n        exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n    // float: ieee754\r\n    })(); else (function() {\r\n\r\n        function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n            var sign = val < 0 ? 1 : 0;\r\n            if (sign)\r\n                val = -val;\r\n            if (val === 0)\r\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n            else if (isNaN(val))\r\n                writeUint(2143289344, buf, pos);\r\n            else if (val > 3.4028234663852886e+38) // +-Infinity\r\n                writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n            else if (val < 1.1754943508222875e-38) // denormal\r\n                writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n            else {\r\n                var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n                    mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n                writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n            }\r\n        }\r\n\r\n        exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n        exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n        function readFloat_ieee754(readUint, buf, pos) {\r\n            var uint = readUint(buf, pos),\r\n                sign = (uint >> 31) * 2 + 1,\r\n                exponent = uint >>> 23 & 255,\r\n                mantissa = uint & 8388607;\r\n            return exponent === 255\r\n                ? mantissa\r\n                ? NaN\r\n                : sign * Infinity\r\n                : exponent === 0 // denormal\r\n                ? sign * 1.401298464324817e-45 * mantissa\r\n                : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n        }\r\n\r\n        exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n        exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n    })();\r\n\r\n    // double: typed array\r\n    if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n        var f64 = new Float64Array([-0]),\r\n            f8b = new Uint8Array(f64.buffer),\r\n            le  = f8b[7] === 128;\r\n\r\n        function writeDouble_f64_cpy(val, buf, pos) {\r\n            f64[0] = val;\r\n            buf[pos    ] = f8b[0];\r\n            buf[pos + 1] = f8b[1];\r\n            buf[pos + 2] = f8b[2];\r\n            buf[pos + 3] = f8b[3];\r\n            buf[pos + 4] = f8b[4];\r\n            buf[pos + 5] = f8b[5];\r\n            buf[pos + 6] = f8b[6];\r\n            buf[pos + 7] = f8b[7];\r\n        }\r\n\r\n        function writeDouble_f64_rev(val, buf, pos) {\r\n            f64[0] = val;\r\n            buf[pos    ] = f8b[7];\r\n            buf[pos + 1] = f8b[6];\r\n            buf[pos + 2] = f8b[5];\r\n            buf[pos + 3] = f8b[4];\r\n            buf[pos + 4] = f8b[3];\r\n            buf[pos + 5] = f8b[2];\r\n            buf[pos + 6] = f8b[1];\r\n            buf[pos + 7] = f8b[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n        /* istanbul ignore next */\r\n        exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n        function readDouble_f64_cpy(buf, pos) {\r\n            f8b[0] = buf[pos    ];\r\n            f8b[1] = buf[pos + 1];\r\n            f8b[2] = buf[pos + 2];\r\n            f8b[3] = buf[pos + 3];\r\n            f8b[4] = buf[pos + 4];\r\n            f8b[5] = buf[pos + 5];\r\n            f8b[6] = buf[pos + 6];\r\n            f8b[7] = buf[pos + 7];\r\n            return f64[0];\r\n        }\r\n\r\n        function readDouble_f64_rev(buf, pos) {\r\n            f8b[7] = buf[pos    ];\r\n            f8b[6] = buf[pos + 1];\r\n            f8b[5] = buf[pos + 2];\r\n            f8b[4] = buf[pos + 3];\r\n            f8b[3] = buf[pos + 4];\r\n            f8b[2] = buf[pos + 5];\r\n            f8b[1] = buf[pos + 6];\r\n            f8b[0] = buf[pos + 7];\r\n            return f64[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n        /* istanbul ignore next */\r\n        exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n    // double: ieee754\r\n    })(); else (function() {\r\n\r\n        function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n            var sign = val < 0 ? 1 : 0;\r\n            if (sign)\r\n                val = -val;\r\n            if (val === 0) {\r\n                writeUint(0, buf, pos + off0);\r\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n            } else if (isNaN(val)) {\r\n                writeUint(0, buf, pos + off0);\r\n                writeUint(2146959360, buf, pos + off1);\r\n            } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n                writeUint(0, buf, pos + off0);\r\n                writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n            } else {\r\n                var mantissa;\r\n                if (val < 2.2250738585072014e-308) { // denormal\r\n                    mantissa = val / 5e-324;\r\n                    writeUint(mantissa >>> 0, buf, pos + off0);\r\n                    writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n                } else {\r\n                    var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n                    if (exponent === 1024)\r\n                        exponent = 1023;\r\n                    mantissa = val * Math.pow(2, -exponent);\r\n                    writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n                    writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n                }\r\n            }\r\n        }\r\n\r\n        exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n        exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n        function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n            var lo = readUint(buf, pos + off0),\r\n                hi = readUint(buf, pos + off1);\r\n            var sign = (hi >> 31) * 2 + 1,\r\n                exponent = hi >>> 20 & 2047,\r\n                mantissa = 4294967296 * (hi & 1048575) + lo;\r\n            return exponent === 2047\r\n                ? mantissa\r\n                ? NaN\r\n                : sign * Infinity\r\n                : exponent === 0 // denormal\r\n                ? sign * 5e-324 * mantissa\r\n                : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n        }\r\n\r\n        exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n        exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n    })();\r\n\r\n    return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n    buf[pos    ] =  val        & 255;\r\n    buf[pos + 1] =  val >>> 8  & 255;\r\n    buf[pos + 2] =  val >>> 16 & 255;\r\n    buf[pos + 3] =  val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n    buf[pos    ] =  val >>> 24;\r\n    buf[pos + 1] =  val >>> 16 & 255;\r\n    buf[pos + 2] =  val >>> 8  & 255;\r\n    buf[pos + 3] =  val        & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n    return (buf[pos    ]\r\n          | buf[pos + 1] << 8\r\n          | buf[pos + 2] << 16\r\n          | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n    return (buf[pos    ] << 24\r\n          | buf[pos + 1] << 16\r\n          | buf[pos + 2] << 8\r\n          | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports,\r\n    replacementChar = \"\\ufffd\";\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n    var len = 0,\r\n        c = 0;\r\n    for (var i = 0; i < string.length; ++i) {\r\n        c = string.charCodeAt(i);\r\n        if (c < 128)\r\n            len += 1;\r\n        else if (c < 2048)\r\n            len += 2;\r\n        else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n            ++i;\r\n            len += 4;\r\n        } else\r\n            len += 3;\r\n    }\r\n    return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n    if (end - start < 1) {\r\n        return \"\";\r\n    }\r\n\r\n    var str = \"\";\r\n    for (var i = start; i < end;) {\r\n        var t = buffer[i++];\r\n        if (t <= 0x7F) {\r\n            str += String.fromCharCode(t);\r\n        } else if (t >= 0xC0 && t < 0xE0) {\r\n            var c2 = (t & 0x1F) << 6 | buffer[i++] & 0x3F;\r\n            str += c2 >= 0x80 ? String.fromCharCode(c2) : replacementChar;\r\n        } else if (t >= 0xE0 && t < 0xF0) {\r\n            var c3 = (t & 0xF) << 12 | (buffer[i++] & 0x3F) << 6 | buffer[i++] & 0x3F;\r\n            str += c3 >= 0x800 ? String.fromCharCode(c3) : replacementChar;\r\n        } else if (t >= 0xF0) {\r\n            var t2 = (t & 7) << 18 | (buffer[i++] & 0x3F) << 12 | (buffer[i++] & 0x3F) << 6 | buffer[i++] & 0x3F;\r\n            if (t2 < 0x10000 || t2 > 0x10FFFF)\r\n                str += replacementChar;\r\n            else {\r\n                t2 -= 0x10000;\r\n                str += String.fromCharCode(0xD800 + (t2 >> 10));\r\n                str += String.fromCharCode(0xDC00 + (t2 & 0x3FF));\r\n            }\r\n        }\r\n    }\r\n\r\n    return str;\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n    var start = offset,\r\n        c1, // character 1\r\n        c2; // character 2\r\n    for (var i = 0; i < string.length; ++i) {\r\n        c1 = string.charCodeAt(i);\r\n        if (c1 < 128) {\r\n            buffer[offset++] = c1;\r\n        } else if (c1 < 2048) {\r\n            buffer[offset++] = c1 >> 6       | 192;\r\n            buffer[offset++] = c1       & 63 | 128;\r\n        } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n            c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n            ++i;\r\n            buffer[offset++] = c1 >> 18      | 240;\r\n            buffer[offset++] = c1 >> 12 & 63 | 128;\r\n            buffer[offset++] = c1 >> 6  & 63 | 128;\r\n            buffer[offset++] = c1       & 63 | 128;\r\n        } else {\r\n            buffer[offset++] = c1 >> 12      | 224;\r\n            buffer[offset++] = c1 >> 6  & 63 | 128;\r\n            buffer[offset++] = c1       & 63 | 128;\r\n        }\r\n    }\r\n    return offset - start;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n    var SIZE   = size || 8192;\r\n    var MAX    = SIZE >>> 1;\r\n    var slab   = null;\r\n    var offset = SIZE;\r\n    return function pool_alloc(size) {\r\n        if (size < 1 || size > MAX)\r\n            return alloc(size);\r\n        if (offset + size > SIZE) {\r\n            slab = alloc(SIZE);\r\n            offset = 0;\r\n        }\r\n        var buf = slice.call(slab, offset, offset += size);\r\n        if (offset & 7) // align to 32 bit\r\n            offset = (offset | 7) + 1;\r\n        return buf;\r\n    };\r\n}\r\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n    // note that the casts below are theoretically unnecessary as of today, but older statically\n    // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n    /**\n     * Low bits.\n     * @type {number}\n     */\n    this.lo = lo >>> 0;\n\n    /**\n     * High bits.\n     * @type {number}\n     */\n    this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n    if (value === 0)\n        return zero;\n    var sign = value < 0;\n    if (sign)\n        value = -value;\n    var lo = value >>> 0,\n        hi = (value - lo) / 4294967296 >>> 0;\n    if (sign) {\n        hi = ~hi >>> 0;\n        lo = ~lo >>> 0;\n        if (++lo > 4294967295) {\n            lo = 0;\n            if (++hi > 4294967295)\n                hi = 0;\n        }\n    }\n    return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n    if (typeof value === \"number\")\n        return LongBits.fromNumber(value);\n    if (util.isString(value)) {\n        /* istanbul ignore else */\n        if (util.Long)\n            value = util.Long.fromString(value);\n        else\n            return LongBits.fromNumber(parseInt(value, 10));\n    }\n    return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n    if (!unsigned && this.hi >>> 31) {\n        var lo = ~this.lo + 1 >>> 0,\n            hi = ~this.hi     >>> 0;\n        if (!lo)\n            hi = hi + 1 >>> 0;\n        return -(lo + hi * 4294967296);\n    }\n    return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n    return util.Long\n        ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n        /* istanbul ignore next */\n        : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n    if (hash === zeroHash)\n        return zero;\n    return new LongBits(\n        ( charCodeAt.call(hash, 0)\n        | charCodeAt.call(hash, 1) << 8\n        | charCodeAt.call(hash, 2) << 16\n        | charCodeAt.call(hash, 3) << 24) >>> 0\n    ,\n        ( charCodeAt.call(hash, 4)\n        | charCodeAt.call(hash, 5) << 8\n        | charCodeAt.call(hash, 6) << 16\n        | charCodeAt.call(hash, 7) << 24) >>> 0\n    );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n    return String.fromCharCode(\n        this.lo        & 255,\n        this.lo >>> 8  & 255,\n        this.lo >>> 16 & 255,\n        this.lo >>> 24      ,\n        this.hi        & 255,\n        this.hi >>> 8  & 255,\n        this.hi >>> 16 & 255,\n        this.hi >>> 24\n    );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n    var mask =   this.hi >> 31;\n    this.hi  = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n    this.lo  = ( this.lo << 1                   ^ mask) >>> 0;\n    return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n    var mask = -(this.lo & 1);\n    this.lo  = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n    this.hi  = ( this.hi >>> 1                  ^ mask) >>> 0;\n    return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n    var part0 =  this.lo,\n        part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n        part2 =  this.hi >>> 24;\n    return part2 === 0\n         ? part1 === 0\n           ? part0 < 16384\n             ? part0 < 128 ? 1 : 2\n             : part0 < 2097152 ? 3 : 4\n           : part1 < 16384\n             ? part1 < 128 ? 5 : 6\n             : part1 < 2097152 ? 7 : 8\n         : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Tests if the specified key can affect object prototypes.\n * @memberof util\n * @param {string} key Key to test\n * @returns {boolean} `true` if the key is unsafe\n */\nfunction isUnsafeProperty(key) {\n    return key === \"__proto__\" || key === \"prototype\" || key === \"constructor\";\n}\n\nutil.isUnsafeProperty = isUnsafeProperty;\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n                   && global\n                   && global.process\n                   && global.process.versions\n                   && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n           || typeof window !== \"undefined\" && window\n           || typeof self   !== \"undefined\" && self\n           || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n    return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n    return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n    return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n    var value = obj[prop];\n    if (value != null && Object.hasOwnProperty.call(obj, prop)) // eslint-disable-line eqeqeq\n        return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n    return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor<Buffer>}\n */\nutil.Buffer = (function() {\n    try {\n        var Buffer = util.global.Buffer;\n        // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n        return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n    } catch (e) {\n        /* istanbul ignore next */\n        return null;\n    }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n    /* istanbul ignore next */\n    return typeof sizeOrArray === \"number\"\n        ? util.Buffer\n            ? util._Buffer_allocUnsafe(sizeOrArray)\n            : new util.Array(sizeOrArray)\n        : util.Buffer\n            ? util._Buffer_from(sizeOrArray)\n            : typeof Uint8Array === \"undefined\"\n                ? sizeOrArray\n                : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor<Uint8Array>}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor<Long>}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n         || /* istanbul ignore next */ util.global.Long\n         || (function() {\n                try {\n                    var Long = require(\"long\");\n                    return Long && Long.isLong ? Long : null;\n                } catch (e) {\n                    /* istanbul ignore next */\n                    return null;\n                }\n            })();\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n    return value\n        ? util.LongBits.from(value).toHash()\n        : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n    var bits = util.LongBits.fromHash(hash);\n    if (util.Long)\n        return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n    return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {...(Object.<string,*>|boolean)} src Source objects, optionally followed by an `ifNotSet` flag\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst) { // used by converters\n    var ifNotSet = typeof arguments[arguments.length - 1] === \"boolean\",\n        limit = ifNotSet ? arguments.length - 1 : arguments.length;\n    ifNotSet = ifNotSet && arguments[arguments.length - 1];\n    for (var a = 1; a < limit; ++a) {\n        var src = arguments[a];\n        if (!src)\n            continue;\n        for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n            if (!isUnsafeProperty(keys[i]) && (dst[keys[i]] === undefined || !ifNotSet))\n                dst[keys[i]] = src[keys[i]];\n    }\n    return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Schema declaration nesting limit.\n * @memberof util\n * @type {number}\n */\nutil.nestingLimit = 32; // protoc: MaxMessageDeclarationNestingDepth\n\n/**\n * Recursion limit.\n * @memberof util\n * @type {number}\n */\nutil.recursionLimit = 100; // protoc: CodedInputStream::default_recursion_limit_\n\n/**\n * Makes a property safe for assignment as an own property.\n * @memberof util\n * @param {Object.<string,*>} obj Object\n * @param {string} key Property key\n * @returns {undefined}\n */\nutil.makeProp = function makeProp(obj, key) {\n    Object.defineProperty(obj, key, {\n        enumerable: true,\n        configurable: true,\n        writable: true\n    });\n};\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n    return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor<Error>} Custom error constructor\n */\nfunction newError(name) {\n\n    function CustomError(message, properties) {\n\n        if (!(this instanceof CustomError))\n            return new CustomError(message, properties);\n\n        // Error.call(this, message);\n        // ^ just returns a new error instance because the ctor can be called as a function\n\n        Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n        /* istanbul ignore next */\n        if (Error.captureStackTrace) // node\n            Error.captureStackTrace(this, CustomError);\n        else\n            Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n        if (properties)\n            merge(this, properties);\n    }\n\n    CustomError.prototype = Object.create(Error.prototype, {\n        constructor: {\n            value: CustomError,\n            writable: true,\n            enumerable: false,\n            configurable: true,\n        },\n        name: {\n            get: function get() { return name; },\n            set: undefined,\n            enumerable: false,\n            // configurable: false would accurately preserve the behavior of\n            // the original, but I'm guessing that was not intentional.\n            // For an actual error subclass, this property would\n            // be configurable.\n            configurable: true,\n        },\n        toString: {\n            value: function value() { return this.name + \": \" + this.message; },\n            writable: true,\n            enumerable: false,\n            configurable: true,\n        },\n    });\n\n    return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [properties] Additional properties\n * @example\n * try {\n *     MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n *     if (e instanceof ProtocolError && e.instance)\n *         console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message<T>}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n    var fieldMap = {};\n    for (var i = 0; i < fieldNames.length; ++i)\n        fieldMap[fieldNames[i]] = 1;\n\n    /**\n     * @returns {string|undefined} Set field name, if any\n     * @this Object\n     * @ignore\n     */\n    return function() { // eslint-disable-line consistent-return\n        for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n            if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n                return keys[i];\n    };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n    /**\n     * @param {string} name Field name\n     * @returns {undefined}\n     * @this Object\n     * @ignore\n     */\n    return function(name) {\n        for (var i = 0; i < fieldNames.length; ++i)\n            if (fieldNames[i] !== name)\n                delete this[fieldNames[i]];\n    };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n    longs: String,\n    enums: String,\n    bytes: String,\n    json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n    var Buffer = util.Buffer;\n    /* istanbul ignore if */\n    if (!Buffer) {\n        util._Buffer_from = util._Buffer_allocUnsafe = null;\n        return;\n    }\n    // because node 4.x buffers are incompatible & immutable\n    // see: https://github.com/dcodeIO/protobuf.js/pull/665\n    util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n        /* istanbul ignore next */\n        function Buffer_from(value, encoding) {\n            return new Buffer(value, encoding);\n        };\n    util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n        /* istanbul ignore next */\n        function Buffer_allocUnsafe(size) {\n            return new Buffer(size);\n        };\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util      = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits  = util.LongBits,\n    base64    = util.base64,\n    utf8      = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n    /**\n     * Function to call.\n     * @type {function(Uint8Array, number, *)}\n     */\n    this.fn = fn;\n\n    /**\n     * Value byte length.\n     * @type {number}\n     */\n    this.len = len;\n\n    /**\n     * Next operation.\n     * @type {Writer.Op|undefined}\n     */\n    this.next = undefined;\n\n    /**\n     * Value to write.\n     * @type {*}\n     */\n    this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n    /**\n     * Current head.\n     * @type {Writer.Op}\n     */\n    this.head = writer.head;\n\n    /**\n     * Current tail.\n     * @type {Writer.Op}\n     */\n    this.tail = writer.tail;\n\n    /**\n     * Current buffer length.\n     * @type {number}\n     */\n    this.len = writer.len;\n\n    /**\n     * Next state.\n     * @type {State|null}\n     */\n    this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n    /**\n     * Current length.\n     * @type {number}\n     */\n    this.len = 0;\n\n    /**\n     * Operations head.\n     * @type {Object}\n     */\n    this.head = new Op(noop, 0, 0);\n\n    /**\n     * Operations tail\n     * @type {Object}\n     */\n    this.tail = this.head;\n\n    /**\n     * Linked forked states.\n     * @type {Object|null}\n     */\n    this.states = null;\n\n    // When a value is written, the writer calculates its byte length and puts it into a linked\n    // list of operations to perform when finish() is called. This both allows us to allocate\n    // buffers of the exact required size and reduces the amount of work we have to do compared\n    // to first calculating over objects and then encoding over objects. In our case, the encoding\n    // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n    return util.Buffer\n        ? function create_buffer_setup() {\n            return (Writer.create = function create_buffer() {\n                return new BufferWriter();\n            })();\n        }\n        /* istanbul ignore next */\n        : function create_array() {\n            return new Writer();\n        };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n    return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n    Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n    this.tail = this.tail.next = new Op(fn, len, val);\n    this.len += len;\n    return this;\n};\n\nfunction writeByte(val, buf, pos) {\n    buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n    while (val > 127) {\n        buf[pos++] = val & 127 | 128;\n        val >>>= 7;\n    }\n    buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n    this.len = len;\n    this.next = undefined;\n    this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n    // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n    // uint32 is by far the most frequently used operation and benefits significantly from this.\n    this.len += (this.tail = this.tail.next = new VarintOp(\n        (value = value >>> 0)\n                < 128       ? 1\n        : value < 16384     ? 2\n        : value < 2097152   ? 3\n        : value < 268435456 ? 4\n        :                     5,\n    value)).len;\n    return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n    return (value |= 0) < 0\n        ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n        : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n    return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n    var lo = val.lo,\n        hi = val.hi;\n    while (hi) {\n        buf[pos++] = lo & 127 | 128;\n        lo = (lo >>> 7 | hi << 25) >>> 0;\n        hi >>>= 7;\n    }\n    while (lo > 127) {\n        buf[pos++] = lo & 127 | 128;\n        lo = lo >>> 7;\n    }\n    buf[pos++] = lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n    var bits = LongBits.from(value);\n    return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n    var bits = LongBits.from(value).zzEncode();\n    return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n    return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n    buf[pos    ] =  val         & 255;\n    buf[pos + 1] =  val >>> 8   & 255;\n    buf[pos + 2] =  val >>> 16  & 255;\n    buf[pos + 3] =  val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n    return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n    var bits = LongBits.from(value);\n    return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n    return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n    return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n    ? function writeBytes_set(val, buf, pos) {\n        buf.set(val, pos); // also works for plain array values\n    }\n    /* istanbul ignore next */\n    : function writeBytes_for(val, buf, pos) {\n        for (var i = 0; i < val.length; ++i)\n            buf[pos + i] = val[i];\n    };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n    var len = value.length >>> 0;\n    if (!len)\n        return this._push(writeByte, 1, 0);\n    if (util.isString(value)) {\n        var buf = Writer.alloc(len = base64.length(value));\n        base64.decode(value, buf, 0);\n        value = buf;\n    }\n    return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n    var len = utf8.length(value);\n    return len\n        ? this.uint32(len)._push(utf8.write, len, value)\n        : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n    this.states = new State(this);\n    this.head = this.tail = new Op(noop, 0, 0);\n    this.len = 0;\n    return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n    if (this.states) {\n        this.head   = this.states.head;\n        this.tail   = this.states.tail;\n        this.len    = this.states.len;\n        this.states = this.states.next;\n    } else {\n        this.head = this.tail = new Op(noop, 0, 0);\n        this.len  = 0;\n    }\n    return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n    var head = this.head,\n        tail = this.tail,\n        len  = this.len;\n    this.reset().uint32(len);\n    if (len) {\n        this.tail.next = head.next; // skip noop\n        this.tail = tail;\n        this.len += len;\n    }\n    return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n    var head = this.head.next, // skip noop\n        buf  = this.constructor.alloc(this.len),\n        pos  = 0;\n    while (head) {\n        head.fn(head.val, buf, pos);\n        pos += head.len;\n        head = head.next;\n    }\n    // this.head = this.tail = null;\n    return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n    BufferWriter = BufferWriter_;\n    Writer.create = create();\n    BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n    Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n    /**\n     * Allocates a buffer of the specified size.\n     * @function\n     * @param {number} size Buffer size\n     * @returns {Buffer} Buffer\n     */\n    BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n    BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n        ? function writeBytesBuffer_set(val, buf, pos) {\n          buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n          // also works for plain array values\n        }\n        /* istanbul ignore next */\n        : function writeBytesBuffer_copy(val, buf, pos) {\n          if (val.copy) // Buffer values\n            val.copy(buf, pos, 0, val.length);\n          else for (var i = 0; i < val.length;) // plain array values\n            buf[pos++] = val[i++];\n        };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n    if (util.isString(value))\n        value = util._Buffer_from(value, \"base64\");\n    var len = value.length >>> 0;\n    this.uint32(len);\n    if (len)\n        this._push(BufferWriter.writeBytesBuffer, len, value);\n    return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n    if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n        util.utf8.write(val, buf, pos);\n    else if (buf.utf8Write)\n        buf.utf8Write(val, pos);\n    else\n        buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n    var len = util.Buffer.byteLength(value);\n    this.uint32(len);\n    if (len)\n        this._push(writeStringBuffer, len, value);\n    return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util      = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits  = util.LongBits,\n    utf8      = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n    return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n    /**\n     * Read buffer.\n     * @type {Uint8Array}\n     */\n    this.buf = buffer;\n\n    /**\n     * Read buffer position.\n     * @type {number}\n     */\n    this.pos = 0;\n\n    /**\n     * Read buffer length.\n     * @type {number}\n     */\n    this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n    ? function create_typed_array(buffer) {\n        if (buffer instanceof Uint8Array || Array.isArray(buffer))\n            return new Reader(buffer);\n        throw Error(\"illegal buffer\");\n    }\n    /* istanbul ignore next */\n    : function create_array(buffer) {\n        if (Array.isArray(buffer))\n            return new Reader(buffer);\n        throw Error(\"illegal buffer\");\n    };\n\nvar create = function create() {\n    return util.Buffer\n        ? function create_buffer_setup(buffer) {\n            return (Reader.create = function create_buffer(buffer) {\n                return util.Buffer.isBuffer(buffer)\n                    ? new BufferReader(buffer)\n                    /* istanbul ignore next */\n                    : create_array(buffer);\n            })(buffer);\n        }\n        /* istanbul ignore next */\n        : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n    var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n    return function read_uint32() {\n        value = (         this.buf[this.pos] & 127       ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n        value = (value | (this.buf[this.pos] & 127) <<  7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n        value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n        value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n        value = (value | (this.buf[this.pos] &  15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n        /* istanbul ignore if */\n        if ((this.pos += 5) > this.len) {\n            this.pos = this.len;\n            throw indexOutOfRange(this, 10);\n        }\n        return value;\n    };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n    return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n    var value = this.uint32();\n    return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n    // tends to deopt with local vars for octet etc.\n    var bits = new LongBits(0, 0);\n    var i = 0;\n    if (this.len - this.pos > 4) { // fast route (lo)\n        for (; i < 4; ++i) {\n            // 1st..4th\n            bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n        // 5th\n        bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n        bits.hi = (bits.hi | (this.buf[this.pos] & 127) >>  4) >>> 0;\n        if (this.buf[this.pos++] < 128)\n            return bits;\n        i = 0;\n    } else {\n        for (; i < 3; ++i) {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n            // 1st..3th\n            bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n        // 4th\n        bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n        return bits;\n    }\n    if (this.len - this.pos > 4) { // fast route (hi)\n        for (; i < 5; ++i) {\n            // 6th..10th\n            bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n    } else {\n        for (; i < 5; ++i) {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n            // 6th..10th\n            bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n    }\n    /* istanbul ignore next */\n    throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n    return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n    return (buf[end - 4]\n          | buf[end - 3] << 8\n          | buf[end - 2] << 16\n          | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n    /* istanbul ignore if */\n    if (this.pos + 8 > this.len)\n        throw indexOutOfRange(this, 8);\n\n    return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    var value = util.float.readFloatLE(this.buf, this.pos);\n    this.pos += 4;\n    return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n    /* istanbul ignore if */\n    if (this.pos + 8 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    var value = util.float.readDoubleLE(this.buf, this.pos);\n    this.pos += 8;\n    return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n    var length = this.uint32(),\n        start  = this.pos,\n        end    = this.pos + length;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw indexOutOfRange(this, length);\n\n    this.pos += length;\n    if (Array.isArray(this.buf)) // plain array\n        return this.buf.slice(start, end);\n\n    if (start === end) { // fix for IE 10/Win8 and others' subarray returning array of size 1\n        var nativeBuffer = util.Buffer;\n        return nativeBuffer\n            ? nativeBuffer.alloc(0)\n            : new this.buf.constructor(0);\n    }\n    return this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n    var bytes = this.bytes();\n    return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n    if (typeof length === \"number\") {\n        /* istanbul ignore if */\n        if (this.pos + length > this.len)\n            throw indexOutOfRange(this, length);\n        this.pos += length;\n    } else {\n        do {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n        } while (this.buf[this.pos++] & 128);\n    }\n    return this;\n};\n\n/**\n * Recursion limit.\n * @type {number}\n */\nReader.recursionLimit = util.recursionLimit;\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @param {number} [depth] Depth of recursion to control nested calls; 0 if omitted\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType, depth) {\n    if (depth === undefined) depth = 0;\n    if (depth > Reader.recursionLimit)\n        throw Error(\"maximum nesting depth exceeded\");\n    switch (wireType) {\n        case 0:\n            this.skip();\n            break;\n        case 1:\n            this.skip(8);\n            break;\n        case 2:\n            this.skip(this.uint32());\n            break;\n        case 3:\n            while ((wireType = this.uint32() & 7) !== 4) {\n                this.skipType(wireType, depth + 1);\n            }\n            break;\n        case 5:\n            this.skip(4);\n            break;\n\n        /* istanbul ignore next */\n        default:\n            throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n    }\n    return this;\n};\n\nReader._configure = function(BufferReader_) {\n    BufferReader = BufferReader_;\n    Reader.create = create();\n    BufferReader._configure();\n\n    var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n    util.merge(Reader.prototype, {\n\n        int64: function read_int64() {\n            return readLongVarint.call(this)[fn](false);\n        },\n\n        uint64: function read_uint64() {\n            return readLongVarint.call(this)[fn](true);\n        },\n\n        sint64: function read_sint64() {\n            return readLongVarint.call(this).zzDecode()[fn](false);\n        },\n\n        fixed64: function read_fixed64() {\n            return readFixed64.call(this)[fn](true);\n        },\n\n        sfixed64: function read_sfixed64() {\n            return readFixed64.call(this)[fn](false);\n        }\n\n    });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n    Reader.call(this, buffer);\n\n    /**\n     * Read buffer.\n     * @name BufferReader#buf\n     * @type {Buffer}\n     */\n}\n\nBufferReader._configure = function () {\n    /* istanbul ignore else */\n    if (util.Buffer)\n        BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n    var len = this.uint32(); // modifies pos\n    return this.buf.utf8Slice\n        ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n        : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise<Message<TRes>>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n    if (typeof rpcImpl !== \"function\")\n        throw TypeError(\"rpcImpl must be a function\");\n\n    util.EventEmitter.call(this);\n\n    /**\n     * RPC implementation. Becomes `null` once the service is ended.\n     * @type {RPCImpl|null}\n     */\n    this.rpcImpl = rpcImpl;\n\n    /**\n     * Whether requests are length-delimited.\n     * @type {boolean}\n     */\n    this.requestDelimited = Boolean(requestDelimited);\n\n    /**\n     * Whether responses are length-delimited.\n     * @type {boolean}\n     */\n    this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod<TReq,TRes>} method Reflected or static method\n * @param {Constructor<TReq>} requestCtor Request constructor\n * @param {Constructor<TRes>} responseCtor Response constructor\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n    if (!request)\n        throw TypeError(\"request must be specified\");\n\n    var self = this;\n    if (!callback)\n        return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n    if (!self.rpcImpl) {\n        setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n        return undefined;\n    }\n\n    try {\n        return self.rpcImpl(\n            method,\n            requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n            function rpcCallback(err, response) {\n\n                if (err) {\n                    self.emit(\"error\", err, method);\n                    return callback(err);\n                }\n\n                if (response === null) {\n                    self.end(/* endedByRPC */ true);\n                    return undefined;\n                }\n\n                if (!(response instanceof responseCtor)) {\n                    try {\n                        response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n                    } catch (err) {\n                        self.emit(\"error\", err, method);\n                        return callback(err);\n                    }\n                }\n\n                self.emit(\"data\", response, method);\n                return callback(null, response);\n            }\n        );\n    } catch (err) {\n        self.emit(\"error\", err, method);\n        setTimeout(function() { callback(err); }, 0);\n        return undefined;\n    }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n    if (this.rpcImpl) {\n        if (!endedByRPC) // signal end to rpcImpl\n            this.rpcImpl(null, null, null);\n        this.rpcImpl = null;\n        this.emit(\"end\").off();\n    }\n    return this;\n};\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod<Message<{}>,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n *     if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n *         throw Error(\"no such method\");\n *     asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n *         callback(err, responseData);\n *     });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = Object.create(null);\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available across modules.\n * @name roots\n * @type {Object.<string,Root>}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer       = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader       = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util         = require(\"./util/minimal\");\nprotobuf.rpc          = require(\"./rpc\");\nprotobuf.roots        = require(\"./roots\");\nprotobuf.configure    = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n    protobuf.util._configure();\n    protobuf.Writer._configure(protobuf.BufferWriter);\n    protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","\"use strict\";\r\nmodule.exports = codegen;\r\n\r\nvar reservedRe = /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/;\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @param {string[]} functionParams Function parameter names\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n */\r\nfunction codegen(functionParams, functionName) {\r\n\r\n    /* istanbul ignore if */\r\n    if (typeof functionParams === \"string\") {\r\n        functionName = functionParams;\r\n        functionParams = undefined;\r\n    }\r\n\r\n    var body = [];\r\n\r\n    /**\r\n     * Appends code to the function's body or finishes generation.\r\n     * @typedef Codegen\r\n     * @type {function}\r\n     * @param {string|Object.<string,*>} [formatStringOrScope] Format string or, to finish the function, an object of additional scope variables, if any\r\n     * @param {...*} [formatParams] Format parameters\r\n     * @returns {Codegen|Function} Itself or the generated function if finished\r\n     * @throws {Error} If format parameter counts do not match\r\n     */\r\n\r\n    function Codegen(formatStringOrScope) {\r\n        // note that explicit array handling below makes this ~50% faster\r\n\r\n        // finish the function\r\n        if (typeof formatStringOrScope !== \"string\") {\r\n            var source = toString();\r\n            if (codegen.verbose)\r\n                console.log(\"codegen: \" + source); // eslint-disable-line no-console\r\n            source = \"return \" + source;\r\n            if (formatStringOrScope) {\r\n                var scopeKeys   = Object.keys(formatStringOrScope),\r\n                    scopeParams = new Array(scopeKeys.length + 1),\r\n                    scopeValues = new Array(scopeKeys.length),\r\n                    scopeOffset = 0;\r\n                while (scopeOffset < scopeKeys.length) {\r\n                    scopeParams[scopeOffset] = scopeKeys[scopeOffset];\r\n                    scopeValues[scopeOffset] = formatStringOrScope[scopeKeys[scopeOffset++]];\r\n                }\r\n                scopeParams[scopeOffset] = source;\r\n                return Function.apply(null, scopeParams).apply(null, scopeValues); // eslint-disable-line no-new-func\r\n            }\r\n            return Function(source)(); // eslint-disable-line no-new-func\r\n        }\r\n\r\n        // otherwise append to body\r\n        var formatParams = new Array(arguments.length - 1),\r\n            formatOffset = 0;\r\n        while (formatOffset < formatParams.length)\r\n            formatParams[formatOffset] = arguments[++formatOffset];\r\n        formatOffset = 0;\r\n        formatStringOrScope = formatStringOrScope.replace(/%([%dfijs])/g, function replace($0, $1) {\r\n            var value = formatParams[formatOffset++];\r\n            switch ($1) {\r\n                case \"d\": case \"f\": return String(Number(value));\r\n                case \"i\": return String(Math.floor(value));\r\n                case \"j\": return JSON.stringify(value);\r\n                case \"s\": return String(value);\r\n            }\r\n            return \"%\";\r\n        });\r\n        if (formatOffset !== formatParams.length)\r\n            throw Error(\"parameter count mismatch\");\r\n        body.push(formatStringOrScope);\r\n        return Codegen;\r\n    }\r\n\r\n    function toString(functionNameOverride) {\r\n        return \"function \" + safeFunctionName(functionNameOverride || functionName) + \"(\" + (functionParams && functionParams.join(\",\") || \"\") + \"){\\n  \" + body.join(\"\\n  \") + \"\\n}\";\r\n    }\r\n\r\n    Codegen.toString = toString;\r\n    return Codegen;\r\n}\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @function codegen\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * When set to `true`, codegen will log generated code to console. Useful for debugging.\r\n * @name util.codegen.verbose\r\n * @type {boolean}\r\n */\r\ncodegen.verbose = false;\r\n\r\nfunction safeFunctionName(name) {\r\n    if (!name)\r\n        return \"\";\r\n    name = String(name).replace(/[^\\w$]/g, \"\");\r\n    if (!name)\r\n        return \"\";\r\n    if (/^\\d/.test(name))\r\n        name = \"_\" + name;\r\n    return reservedRe.test(name) ? name + \"_\" : name;\r\n}\r\n","\"use strict\";\r\n\r\nvar fs = null;\r\ntry {\r\n    fs = require(/* webpackIgnore: true */ \"fs\");\r\n    if (!fs || !fs.readFile || !fs.readFileSync)\r\n        fs = null;\r\n} catch (e) {\r\n    // `fs` is unavailable in browsers and browser-like bundles.\r\n}\r\nmodule.exports = fs;\r\n","\"use strict\";\r\nmodule.exports = fetch;\r\n\r\nvar asPromise = require(\"@protobufjs/aspromise\"),\r\n    fs        = require(\"./util/fs\");\r\n\r\n/**\r\n * Node-style callback as used by {@link util.fetch}.\r\n * @typedef FetchCallback\r\n * @type {function}\r\n * @param {?Error} error Error, if any, otherwise `null`\r\n * @param {string} [contents] File contents, if there hasn't been an error\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Options as used by {@link util.fetch}.\r\n * @interface IFetchOptions\r\n * @property {boolean} [binary=false] Whether expecting a binary response\r\n * @property {boolean} [xhr=false] If `true`, forces the use of XMLHttpRequest\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @memberof util\r\n * @param {string} filename File path or url\r\n * @param {IFetchOptions} options Fetch options\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n */\r\nfunction fetch(filename, options, callback) {\r\n    if (typeof options === \"function\") {\r\n        callback = options;\r\n        options = {};\r\n    } else if (!options)\r\n        options = {};\r\n\r\n    if (!callback)\r\n        return asPromise(fetch, this, filename, options); // eslint-disable-line no-invalid-this\r\n\r\n    // if a node-like filesystem is present, try it first but fall back to XHR if nothing is found.\r\n    if (!options.xhr && fs && fs.readFile)\r\n        return fs.readFile(filename, function fetchReadFileCallback(err, contents) {\r\n            return err && typeof XMLHttpRequest !== \"undefined\"\r\n                ? fetch.xhr(filename, options, callback)\r\n                : err\r\n                ? callback(err)\r\n                : callback(null, options.binary ? contents : contents.toString(\"utf8\"));\r\n        });\r\n\r\n    // use the XHR version otherwise.\r\n    return fetch.xhr(filename, options, callback);\r\n}\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {IFetchOptions} [options] Fetch options\r\n * @returns {Promise<string|Uint8Array>} Promise\r\n * @variation 3\r\n */\r\n\r\n/**/\r\nfetch.xhr = function fetch_xhr(filename, options, callback) {\r\n    var xhr = new XMLHttpRequest();\r\n    xhr.onreadystatechange /* works everywhere */ = function fetchOnReadyStateChange() {\r\n\r\n        if (xhr.readyState !== 4)\r\n            return undefined;\r\n\r\n        // local cors security errors return status 0 / empty string, too. afaik this cannot be\r\n        // reliably distinguished from an actually empty file for security reasons. feel free\r\n        // to send a pull request if you are aware of a solution.\r\n        if (xhr.status !== 0 && xhr.status !== 200)\r\n            return callback(Error(\"status \" + xhr.status));\r\n\r\n        // if binary data is expected, make sure that some sort of array is returned, even if\r\n        // ArrayBuffers are not supported. the binary string fallback, however, is unsafe.\r\n        if (options.binary) {\r\n            var buffer = xhr.response;\r\n            if (!buffer) {\r\n                buffer = [];\r\n                for (var i = 0; i < xhr.responseText.length; ++i)\r\n                    buffer.push(xhr.responseText.charCodeAt(i) & 255);\r\n            }\r\n            return callback(null, typeof Uint8Array !== \"undefined\" ? new Uint8Array(buffer) : buffer);\r\n        }\r\n        return callback(null, xhr.responseText);\r\n    };\r\n\r\n    if (options.binary) {\r\n        // ref: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data#Receiving_binary_data_in_older_browsers\r\n        if (\"overrideMimeType\" in xhr)\r\n            xhr.overrideMimeType(\"text/plain; charset=x-user-defined\");\r\n        xhr.responseType = \"arraybuffer\";\r\n    }\r\n\r\n    xhr.open(\"GET\", filename);\r\n    xhr.send();\r\n};\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal path module to resolve Unix, Windows and URL paths alike.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar path = exports;\r\n\r\nvar isAbsolute =\r\n/**\r\n * Tests if the specified path is absolute.\r\n * @param {string} path Path to test\r\n * @returns {boolean} `true` if path is absolute\r\n */\r\npath.isAbsolute = function isAbsolute(path) {\r\n    return /^(?:\\/|\\w+:)/.test(path);\r\n};\r\n\r\nvar normalize =\r\n/**\r\n * Normalizes the specified path.\r\n * @param {string} path Path to normalize\r\n * @returns {string} Normalized path\r\n */\r\npath.normalize = function normalize(path) {\r\n    path = path.replace(/\\\\/g, \"/\")\r\n               .replace(/\\/{2,}/g, \"/\");\r\n    var parts    = path.split(\"/\"),\r\n        absolute = isAbsolute(path),\r\n        prefix   = \"\";\r\n    if (absolute)\r\n        prefix = parts.shift() + \"/\";\r\n    for (var i = 0; i < parts.length;) {\r\n        if (parts[i] === \"..\") {\r\n            if (i > 0 && parts[i - 1] !== \"..\")\r\n                parts.splice(--i, 2);\r\n            else if (absolute)\r\n                parts.splice(i, 1);\r\n            else\r\n                ++i;\r\n        } else if (parts[i] === \".\")\r\n            parts.splice(i, 1);\r\n        else\r\n            ++i;\r\n    }\r\n    return prefix + parts.join(\"/\");\r\n};\r\n\r\n/**\r\n * Resolves the specified include path against the specified origin path.\r\n * @param {string} originPath Path to the origin file\r\n * @param {string} includePath Include path relative to origin path\r\n * @param {boolean} [alreadyNormalized=false] `true` if both paths are already known to be normalized\r\n * @returns {string} Path to the include file\r\n */\r\npath.resolve = function resolve(originPath, includePath, alreadyNormalized) {\r\n    if (!alreadyNormalized)\r\n        includePath = normalize(includePath);\r\n    if (isAbsolute(includePath))\r\n        return includePath;\r\n    if (!alreadyNormalized)\r\n        originPath = normalize(originPath);\r\n    return (originPath = originPath.replace(/(?:\\/|^)[^/]+$/, \"\")).length ? normalize(originPath + \"/\" + includePath) : includePath;\r\n};\r\n","\"use strict\";\n\nvar patterns = exports;\n\npatterns.numberRe    = /^(?![eE])[0-9]*(?:\\.[0-9]*)?(?:[eE][+-]?[0-9]+)?$/;\npatterns.typeRefRe   = /^(?:\\.?[a-zA-Z_][a-zA-Z_0-9]*)(?:\\.[a-zA-Z_][a-zA-Z_0-9]*)*$/;\npatterns.reservedRe  = /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/;\n","\"use strict\";\n\nvar fs = null;\ntry {\n    fs = require(/* webpackIgnore: true */ \"fs\");\n    if (!fs || !fs.readFile || !fs.readFileSync)\n        fs = null;\n} catch (e) {\n    // `fs` is unavailable in browsers and browser-like bundles.\n}\nmodule.exports = fs;\n","\"use strict\";\nmodule.exports = Namespace;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Namespace.prototype = Object.create(ReflectionObject.prototype)).constructor = Namespace).className = \"Namespace\";\n\nvar Field    = require(\"./field\"),\n    util     = require(\"./util\"),\n    OneOf    = require(\"./oneof\");\n\nvar Type,    // cyclic\n    Service,\n    Enum;\n\n/**\n * Constructs a new namespace instance.\n * @name Namespace\n * @classdesc Reflected namespace.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.<string,*>} [options] Declared options\n */\n\n/**\n * Constructs a namespace from JSON.\n * @memberof Namespace\n * @function\n * @param {string} name Namespace name\n * @param {Object.<string,*>} json JSON object\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Namespace} Created namespace\n * @throws {TypeError} If arguments are invalid\n */\nNamespace.fromJSON = function fromJSON(name, json, depth) {\n    depth = util.checkDepth(depth);\n    return new Namespace(name, json.options).addJSON(json.nested, depth);\n};\n\n/**\n * Converts an array of reflection objects to JSON.\n * @memberof Namespace\n * @param {ReflectionObject[]} array Object array\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {Object.<string,*>|undefined} JSON object or `undefined` when array is empty\n */\nfunction arrayToJSON(array, toJSONOptions) {\n    if (!(array && array.length))\n        return undefined;\n    var obj = {};\n    for (var i = 0; i < array.length; ++i)\n        obj[array[i].name] = array[i].toJSON(toJSONOptions);\n    return obj;\n}\n\nNamespace.arrayToJSON = arrayToJSON;\n\n/**\n * Tests if the specified id is reserved.\n * @param {Array.<number[]|string>|undefined} reserved Array of reserved ranges and names\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedId = function isReservedId(reserved, id) {\n    if (reserved)\n        for (var i = 0; i < reserved.length; ++i)\n            if (typeof reserved[i] !== \"string\" && reserved[i][0] <= id && reserved[i][1] > id)\n                return true;\n    return false;\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {Array.<number[]|string>|undefined} reserved Array of reserved ranges and names\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedName = function isReservedName(reserved, name) {\n    if (reserved)\n        for (var i = 0; i < reserved.length; ++i)\n            if (reserved[i] === name)\n                return true;\n    return false;\n};\n\n/**\n * Not an actual constructor. Use {@link Namespace} instead.\n * @classdesc Base class of all reflection objects containing nested objects. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports NamespaceBase\n * @extends ReflectionObject\n * @abstract\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.<string,*>} [options] Declared options\n * @see {@link Namespace}\n */\nfunction Namespace(name, options) {\n    ReflectionObject.call(this, name, options);\n\n    /**\n     * Nested objects by name.\n     * @type {Object.<string,ReflectionObject>|undefined}\n     */\n    this.nested = undefined; // toJSON\n\n    /**\n     * Cached nested objects as an array.\n     * @type {ReflectionObject[]|null}\n     * @private\n     */\n    this._nestedArray = null;\n\n    /**\n     * Cache lookup calls for any objects contains anywhere under this namespace.\n     * This drastically speeds up resolve for large cross-linked protos where the same\n     * types are looked up repeatedly.\n     * @type {Object.<string,ReflectionObject|null>}\n     * @private\n     */\n    this._lookupCache = Object.create(null);\n\n    /**\n     * Whether or not objects contained in this namespace need feature resolution.\n     * @type {boolean}\n     * @protected\n     */\n    this._needsRecursiveFeatureResolution = true;\n\n    /**\n     * Whether or not objects contained in this namespace need a resolve.\n     * @type {boolean}\n     * @protected\n     */\n    this._needsRecursiveResolve = true;\n}\n\nfunction clearCache(namespace) {\n    namespace._nestedArray = null;\n    namespace._lookupCache = Object.create(null);\n\n    // Also clear parent caches, since they include nested lookups.\n    var parent = namespace;\n    while(parent = parent.parent) {\n        parent._lookupCache = Object.create(null);\n    }\n    return namespace;\n}\n\n/**\n * Nested objects of this namespace as an array for iteration.\n * @name NamespaceBase#nestedArray\n * @type {ReflectionObject[]}\n * @readonly\n */\nObject.defineProperty(Namespace.prototype, \"nestedArray\", {\n    get: function() {\n        return this._nestedArray || (this._nestedArray = util.toArray(this.nested));\n    }\n});\n\n/**\n * Namespace descriptor.\n * @interface INamespace\n * @property {Object.<string,*>} [options] Namespace options\n * @property {Object.<string,AnyNestedObject>} [nested] Nested object descriptors\n */\n\n/**\n * Any extension field descriptor.\n * @typedef AnyExtensionField\n * @type {IExtensionField|IExtensionMapField}\n */\n\n/**\n * Any nested object descriptor.\n * @typedef AnyNestedObject\n * @type {IEnum|IType|IService|AnyExtensionField|INamespace|IOneOf}\n */\n\n/**\n * Converts this namespace to a namespace descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {INamespace} Namespace descriptor\n */\nNamespace.prototype.toJSON = function toJSON(toJSONOptions) {\n    return util.toObject([\n        \"options\" , this.options,\n        \"nested\"  , arrayToJSON(this.nestedArray, toJSONOptions)\n    ]);\n};\n\n/**\n * Adds nested objects to this namespace from nested object descriptors.\n * @param {Object.<string,AnyNestedObject>} nestedJson Any nested object descriptors\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Namespace} `this`\n */\nNamespace.prototype.addJSON = function addJSON(nestedJson, depth) {\n    depth = util.checkDepth(depth);\n    var ns = this;\n    /* istanbul ignore else */\n    if (nestedJson) {\n        for (var names = Object.keys(nestedJson), i = 0, nested; i < names.length; ++i) {\n            nested = nestedJson[names[i]];\n            ns.add( // most to least likely\n                ( nested.fields !== undefined\n                ? Type.fromJSON\n                : nested.values !== undefined\n                ? Enum.fromJSON\n                : nested.methods !== undefined\n                ? Service.fromJSON\n                : nested.id !== undefined\n                ? Field.fromJSON\n                : Namespace.fromJSON )(names[i], nested, depth + 1)\n            );\n        }\n    }\n    return this;\n};\n\n/**\n * Gets the nested object of the specified name.\n * @param {string} name Nested object name\n * @returns {ReflectionObject|null} The reflection object or `null` if it doesn't exist\n */\nNamespace.prototype.get = function get(name) {\n    return this.nested && Object.prototype.hasOwnProperty.call(this.nested, name)\n        ? this.nested[name]\n        : null;\n};\n\n/**\n * Gets the values of the nested {@link Enum|enum} of the specified name.\n * This methods differs from {@link Namespace#get|get} in that it returns an enum's values directly and throws instead of returning `null`.\n * @param {string} name Nested enum name\n * @returns {Object.<string,number>} Enum values\n * @throws {Error} If there is no such enum\n */\nNamespace.prototype.getEnum = function getEnum(name) {\n    if (this.nested && Object.prototype.hasOwnProperty.call(this.nested, name) && this.nested[name] instanceof Enum)\n        return this.nested[name].values;\n    throw Error(\"no such enum: \" + name);\n};\n\n/**\n * Adds a nested object to this namespace.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name\n */\nNamespace.prototype.add = function add(object) {\n\n    if (!(object instanceof Field && object.extend !== undefined || object instanceof Type  || object instanceof OneOf || object instanceof Enum || object instanceof Service || object instanceof Namespace))\n        throw TypeError(\"object must be a valid nested object\");\n\n    if (object.name === \"__proto__\")\n        return this;\n\n    if (!this.nested)\n        this.nested = {};\n    else {\n        var prev = this.get(object.name);\n        if (prev) {\n            if (prev instanceof Namespace && object instanceof Namespace && !(prev instanceof Type || prev instanceof Service)) {\n                // replace plain namespace but keep existing nested elements and options\n                var nested = prev.nestedArray;\n                for (var i = 0; i < nested.length; ++i)\n                    object.add(nested[i]);\n                this.remove(prev);\n                if (!this.nested)\n                    this.nested = {};\n                object.setOptions(prev.options, true);\n\n            } else\n                throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n        }\n    }\n    this.nested[object.name] = object;\n\n    if (!(this instanceof Type || this instanceof Service || this instanceof Enum || this instanceof Field)) {\n        // This is a package or a root namespace.\n        if (!object._edition) {\n            // Make sure that some edition is set if it hasn't already been specified.\n            object._edition = object._defaultEdition;\n        }\n    }\n\n    this._needsRecursiveFeatureResolution = true;\n    this._needsRecursiveResolve = true;\n\n    // Also clear parent caches, since they need to recurse down.\n    var parent = this;\n    while(parent = parent.parent) {\n        parent._needsRecursiveFeatureResolution = true;\n        parent._needsRecursiveResolve = true;\n    }\n\n    object.onAdd(this);\n    return clearCache(this);\n};\n\n/**\n * Removes a nested object from this namespace.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this namespace\n */\nNamespace.prototype.remove = function remove(object) {\n\n    if (!(object instanceof ReflectionObject))\n        throw TypeError(\"object must be a ReflectionObject\");\n    if (object.parent !== this)\n        throw Error(object + \" is not a member of \" + this);\n\n    delete this.nested[object.name];\n    if (!Object.keys(this.nested).length)\n        this.nested = undefined;\n\n    object.onRemove(this);\n    return clearCache(this);\n};\n\n/**\n * Defines additial namespaces within this one if not yet existing.\n * @param {string|string[]} path Path to create\n * @param {*} [json] Nested types to create from JSON\n * @returns {Namespace} Pointer to the last namespace created or `this` if path is empty\n */\nNamespace.prototype.define = function define(path, json) {\n\n    if (util.isString(path))\n        path = path.split(\".\");\n    else if (!Array.isArray(path))\n        throw TypeError(\"illegal path\");\n    if (path && path.length && path[0] === \"\")\n        throw Error(\"path must be relative\");\n    if (path.length > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n\n    var ptr = this;\n    while (path.length > 0) {\n        var part = path.shift();\n        if (ptr.nested && ptr.nested[part]) {\n            ptr = ptr.nested[part];\n            if (!(ptr instanceof Namespace))\n                throw Error(\"path conflicts with non-namespace objects\");\n        } else\n            ptr.add(ptr = new Namespace(part));\n    }\n    if (json)\n        ptr.addJSON(json);\n    return ptr;\n};\n\n/**\n * Resolves this namespace's and all its nested objects' type references. Useful to validate a reflection tree, but comes at a cost.\n * @returns {Namespace} `this`\n */\nNamespace.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    this._resolveFeaturesRecursive(this._edition);\n\n    var nested = this.nestedArray, i = 0;\n    this.resolve();\n    while (i < nested.length)\n        if (nested[i] instanceof Namespace)\n            nested[i++].resolveAll();\n        else\n            nested[i++].resolve();\n    this._needsRecursiveResolve = false;\n    return this;\n};\n\n/**\n * @override\n */\nNamespace.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    if (!this._needsRecursiveFeatureResolution) return this;\n    this._needsRecursiveFeatureResolution = false;\n\n    edition = this._edition || edition;\n\n    ReflectionObject.prototype._resolveFeaturesRecursive.call(this, edition);\n    this.nestedArray.forEach(nested => {\n        nested._resolveFeaturesRecursive(edition);\n    });\n    return this;\n};\n\n/**\n * Recursively looks up the reflection object matching the specified path in the scope of this namespace.\n * @param {string|string[]} path Path to look up\n * @param {*|Array.<*>} filterTypes Filter types, any combination of the constructors of `protobuf.Type`, `protobuf.Enum`, `protobuf.Service` etc.\n * @param {boolean} [parentAlreadyChecked=false] If known, whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n */\nNamespace.prototype.lookup = function lookup(path, filterTypes, parentAlreadyChecked) {\n    /* istanbul ignore next */\n    if (typeof filterTypes === \"boolean\") {\n        parentAlreadyChecked = filterTypes;\n        filterTypes = undefined;\n    } else if (filterTypes && !Array.isArray(filterTypes))\n        filterTypes = [ filterTypes ];\n\n    if (util.isString(path) && path.length) {\n        if (path === \".\")\n            return this.root;\n        path = path.split(\".\");\n    } else if (!path.length)\n        return this;\n\n    var flatPath = path.join(\".\");\n\n    // Start at root if path is absolute\n    if (path[0] === \"\")\n        return this.root.lookup(path.slice(1), filterTypes);\n\n    // Early bailout for objects with matching absolute paths\n    var found = this.root._fullyQualifiedObjects && this.root._fullyQualifiedObjects[\".\" + flatPath];\n    if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) {\n        return found;\n    }\n\n    // Do a regular lookup at this namespace and below\n    found = this._lookupImpl(path, flatPath);\n    if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) {\n        return found;\n    }\n\n    if (parentAlreadyChecked)\n        return null;\n\n    // If there hasn't been a match, walk up the tree and look more broadly\n    var current = this;\n    while (current.parent) {\n        found = current.parent._lookupImpl(path, flatPath);\n        if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) {\n            return found;\n        }\n        current = current.parent;\n    }\n    return null;\n};\n\n/**\n * Internal helper for lookup that handles searching just at this namespace and below along with caching.\n * @param {string[]} path Path to look up\n * @param {string} flatPath Flattened version of the path to use as a cache key\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n * @private\n */\nNamespace.prototype._lookupImpl = function lookup(path, flatPath) {\n    if(Object.prototype.hasOwnProperty.call(this._lookupCache, flatPath)) {\n        return this._lookupCache[flatPath];\n    }\n\n    // Test if the first part matches any nested object, and if so, traverse if path contains more\n    var found = this.get(path[0]);\n    var exact = null;\n    if (found) {\n        if (path.length === 1) {\n            exact = found;\n        } else if (found instanceof Namespace) {\n            path = path.slice(1);\n            exact = found._lookupImpl(path, path.join(\".\"));\n        }\n\n    // Otherwise try each nested namespace\n    } else {\n        for (var i = 0; i < this.nestedArray.length; ++i)\n            if (this._nestedArray[i] instanceof Namespace && (found = this._nestedArray[i]._lookupImpl(path, flatPath))) {\n                exact = found;\n                break;\n            }\n    }\n\n    // Set this even when null, so that when we walk up the tree we can quickly bail on repeated checks back down.\n    this._lookupCache[flatPath] = exact;\n    return exact;\n};\n\n/**\n * Looks up the reflection object at the specified path, relative to this namespace.\n * @name NamespaceBase#lookup\n * @function\n * @param {string|string[]} path Path to look up\n * @param {boolean} [parentAlreadyChecked=false] Whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n * @variation 2\n */\n// lookup(path: string, [parentAlreadyChecked: boolean])\n\n/**\n * Looks up the {@link Type|type} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type\n * @throws {Error} If `path` does not point to a type\n */\nNamespace.prototype.lookupType = function lookupType(path) {\n    var found = this.lookup(path, [ Type ]);\n    if (!found)\n        throw Error(\"no such type: \" + path);\n    return found;\n};\n\n/**\n * Looks up the values of the {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Enum} Looked up enum\n * @throws {Error} If `path` does not point to an enum\n */\nNamespace.prototype.lookupEnum = function lookupEnum(path) {\n    var found = this.lookup(path, [ Enum ]);\n    if (!found)\n        throw Error(\"no such Enum '\" + path + \"' in \" + this);\n    return found;\n};\n\n/**\n * Looks up the {@link Type|type} or {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type or enum\n * @throws {Error} If `path` does not point to a type or enum\n */\nNamespace.prototype.lookupTypeOrEnum = function lookupTypeOrEnum(path) {\n    var found = this.lookup(path, [ Type, Enum ]);\n    if (!found)\n        throw Error(\"no such Type or Enum '\" + path + \"' in \" + this);\n    return found;\n};\n\n/**\n * Looks up the {@link Service|service} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Service} Looked up service\n * @throws {Error} If `path` does not point to a service\n */\nNamespace.prototype.lookupService = function lookupService(path) {\n    var found = this.lookup(path, [ Service ]);\n    if (!found)\n        throw Error(\"no such Service '\" + path + \"' in \" + this);\n    return found;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nNamespace._configure = function(Type_, Service_, Enum_) {\n    Type    = Type_;\n    Service = Service_;\n    Enum    = Enum_;\n};\n","\"use strict\";\nmodule.exports = MapField;\n\n// extends Field\nvar Field = require(\"./field\");\n((MapField.prototype = Object.create(Field.prototype)).constructor = MapField).className = \"MapField\";\n\nvar types   = require(\"./types\"),\n    util    = require(\"./util\");\n\n/**\n * Constructs a new map field instance.\n * @classdesc Reflected map field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} keyType Key type\n * @param {string} type Value type\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction MapField(name, id, keyType, type, options, comment) {\n    Field.call(this, name, id, type, undefined, undefined, options, comment);\n\n    /* istanbul ignore if */\n    if (!util.isString(keyType))\n        throw TypeError(\"keyType must be a string\");\n\n    /**\n     * Key type.\n     * @type {string}\n     */\n    this.keyType = keyType; // toJSON, marker\n\n    /**\n     * Resolved key type if not a basic type.\n     * @type {ReflectionObject|null}\n     */\n    this.resolvedKeyType = null;\n\n    // Overrides Field#map\n    this.map = true;\n}\n\n/**\n * Map field descriptor.\n * @interface IMapField\n * @extends {IField}\n * @property {string} keyType Key type\n */\n\n/**\n * Extension map field descriptor.\n * @interface IExtensionMapField\n * @extends IMapField\n * @property {string} extend Extended type\n */\n\n/**\n * Constructs a map field from a map field descriptor.\n * @param {string} name Field name\n * @param {IMapField} json Map field descriptor\n * @returns {MapField} Created map field\n * @throws {TypeError} If arguments are invalid\n */\nMapField.fromJSON = function fromJSON(name, json) {\n    return new MapField(name, json.id, json.keyType, json.type, json.options, json.comment);\n};\n\n/**\n * Converts this map field to a map field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMapField} Map field descriptor\n */\nMapField.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"keyType\" , this.keyType,\n        \"type\"    , this.type,\n        \"id\"      , this.id,\n        \"extend\"  , this.extend,\n        \"options\" , this.options,\n        \"comment\" , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * @override\n */\nMapField.prototype.resolve = function resolve() {\n    if (this.resolved)\n        return this;\n\n    // Besides a value type, map fields have a key type that may be \"any scalar type except for floating point types and bytes\"\n    if (types.mapKey[this.keyType] === undefined)\n        throw Error(\"invalid key type: \" + this.keyType);\n\n    return Field.prototype.resolve.call(this);\n};\n\n/**\n * Map field decorator (TypeScript).\n * @name MapField.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"} fieldKeyType Field key type\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"|\"bytes\"|Object|Constructor<{}>} fieldValueType Field value type\n * @returns {FieldDecorator} Decorator function\n * @template T extends { [key: string]: number | Long | string | boolean | Uint8Array | Buffer | number[] | Message<{}> }\n */\nMapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) {\n\n    // submessage value: decorate the submessage and use its name as the type\n    if (typeof fieldValueType === \"function\")\n        fieldValueType = util.decorateType(fieldValueType).name;\n\n    // enum reference value: create a reflected copy of the enum and keep reuseing it\n    else if (fieldValueType && typeof fieldValueType === \"object\")\n        fieldValueType = util.decorateEnum(fieldValueType).name;\n\n    return function mapFieldDecorator(prototype, fieldName) {\n        util.decorateType(prototype.constructor)\n            .add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType));\n    };\n};\n","\"use strict\";\nmodule.exports = Method;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Method.prototype = Object.create(ReflectionObject.prototype)).constructor = Method).className = \"Method\";\n\nvar util = require(\"./util\");\n\n/**\n * Constructs a new service method instance.\n * @classdesc Reflected service method.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Method name\n * @param {string|undefined} type Method type, usually `\"rpc\"`\n * @param {string} requestType Request message type\n * @param {string} responseType Response message type\n * @param {boolean|Object.<string,*>} [requestStream] Whether the request is streamed\n * @param {boolean|Object.<string,*>} [responseStream] Whether the response is streamed\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] The comment for this method\n * @param {Object.<string,*>} [parsedOptions] Declared options, properly parsed into an object\n */\nfunction Method(name, type, requestType, responseType, requestStream, responseStream, options, comment, parsedOptions) {\n\n    /* istanbul ignore next */\n    if (util.isObject(requestStream)) {\n        options = requestStream;\n        requestStream = responseStream = undefined;\n    } else if (util.isObject(responseStream)) {\n        options = responseStream;\n        responseStream = undefined;\n    }\n\n    /* istanbul ignore if */\n    if (!(type === undefined || util.isString(type)))\n        throw TypeError(\"type must be a string\");\n\n    /* istanbul ignore if */\n    if (!util.isString(requestType))\n        throw TypeError(\"requestType must be a string\");\n\n    /* istanbul ignore if */\n    if (!util.isString(responseType))\n        throw TypeError(\"responseType must be a string\");\n\n    ReflectionObject.call(this, name, options);\n\n    /**\n     * Method type.\n     * @type {string}\n     */\n    this.type = type || \"rpc\"; // toJSON\n\n    /**\n     * Request type.\n     * @type {string}\n     */\n    this.requestType = requestType; // toJSON, marker\n\n    /**\n     * Whether requests are streamed or not.\n     * @type {boolean|undefined}\n     */\n    this.requestStream = requestStream ? true : undefined; // toJSON\n\n    /**\n     * Response type.\n     * @type {string}\n     */\n    this.responseType = responseType; // toJSON\n\n    /**\n     * Whether responses are streamed or not.\n     * @type {boolean|undefined}\n     */\n    this.responseStream = responseStream ? true : undefined; // toJSON\n\n    /**\n     * Resolved request type.\n     * @type {Type|null}\n     */\n    this.resolvedRequestType = null;\n\n    /**\n     * Resolved response type.\n     * @type {Type|null}\n     */\n    this.resolvedResponseType = null;\n\n    /**\n     * Comment for this method\n     * @type {string|null}\n     */\n    this.comment = comment;\n\n    /**\n     * Options properly parsed into an object\n     */\n    this.parsedOptions = parsedOptions;\n}\n\n/**\n * Method descriptor.\n * @interface IMethod\n * @property {string} [type=\"rpc\"] Method type\n * @property {string} requestType Request type\n * @property {string} responseType Response type\n * @property {boolean} [requestStream=false] Whether requests are streamed\n * @property {boolean} [responseStream=false] Whether responses are streamed\n * @property {Object.<string,*>} [options] Method options\n * @property {string} comment Method comments\n * @property {Object.<string,*>} [parsedOptions] Method options properly parsed into an object\n */\n\n/**\n * Constructs a method from a method descriptor.\n * @param {string} name Method name\n * @param {IMethod} json Method descriptor\n * @returns {Method} Created method\n * @throws {TypeError} If arguments are invalid\n */\nMethod.fromJSON = function fromJSON(name, json) {\n    return new Method(name, json.type, json.requestType, json.responseType, json.requestStream, json.responseStream, json.options, json.comment, json.parsedOptions);\n};\n\n/**\n * Converts this method to a method descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMethod} Method descriptor\n */\nMethod.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"type\"           , this.type !== \"rpc\" && /* istanbul ignore next */ this.type || undefined,\n        \"requestType\"    , this.requestType,\n        \"requestStream\"  , this.requestStream,\n        \"responseType\"   , this.responseType,\n        \"responseStream\" , this.responseStream,\n        \"options\"        , this.options,\n        \"comment\"        , keepComments ? this.comment : undefined,\n        \"parsedOptions\"  , this.parsedOptions,\n    ]);\n};\n\n/**\n * @override\n */\nMethod.prototype.resolve = function resolve() {\n\n    /* istanbul ignore if */\n    if (this.resolved)\n        return this;\n\n    this.resolvedRequestType = this.parent.lookupType(this.requestType);\n    this.resolvedResponseType = this.parent.lookupType(this.responseType);\n\n    return ReflectionObject.prototype.resolve.call(this);\n};\n","\"use strict\";\nmodule.exports = Service;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Service.prototype = Object.create(Namespace.prototype)).constructor = Service).className = \"Service\";\n\nvar Method = require(\"./method\"),\n    util   = require(\"./util\"),\n    rpc    = require(\"./rpc\");\n\n/**\n * Constructs a new service instance.\n * @classdesc Reflected service.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Service name\n * @param {Object.<string,*>} [options] Service options\n * @throws {TypeError} If arguments are invalid\n */\nfunction Service(name, options) {\n    Namespace.call(this, name, options);\n\n    /**\n     * Service methods.\n     * @type {Object.<string,Method>}\n     */\n    this.methods = {}; // toJSON, marker\n\n    /**\n     * Cached methods as an array.\n     * @type {Method[]|null}\n     * @private\n     */\n    this._methodsArray = null;\n}\n\n/**\n * Service descriptor.\n * @interface IService\n * @extends INamespace\n * @property {Object.<string,IMethod>} methods Method descriptors\n */\n\n/**\n * Constructs a service from a service descriptor.\n * @param {string} name Service name\n * @param {IService} json Service descriptor\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Service} Created service\n * @throws {TypeError} If arguments are invalid\n */\nService.fromJSON = function fromJSON(name, json, depth) {\n    depth = util.checkDepth(depth);\n    var service = new Service(name, json.options);\n    /* istanbul ignore else */\n    if (json.methods)\n        for (var names = Object.keys(json.methods), i = 0; i < names.length; ++i)\n            service.add(Method.fromJSON(names[i], json.methods[names[i]]));\n    if (json.nested)\n        service.addJSON(json.nested, depth);\n    if (json.edition)\n        service._edition = json.edition;\n    service.comment = json.comment;\n    service._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return service;\n};\n\n/**\n * Converts this service to a service descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IService} Service descriptor\n */\nService.prototype.toJSON = function toJSON(toJSONOptions) {\n    var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\" , this._editionToJSON(),\n        \"options\" , inherited && inherited.options || undefined,\n        \"methods\" , Namespace.arrayToJSON(this.methodsArray, toJSONOptions) || /* istanbul ignore next */ {},\n        \"nested\"  , inherited && inherited.nested || undefined,\n        \"comment\" , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * Methods of this service as an array for iteration.\n * @name Service#methodsArray\n * @type {Method[]}\n * @readonly\n */\nObject.defineProperty(Service.prototype, \"methodsArray\", {\n    get: function() {\n        return this._methodsArray || (this._methodsArray = util.toArray(this.methods));\n    }\n});\n\nfunction clearCache(service) {\n    service._methodsArray = null;\n    return service;\n}\n\n/**\n * @override\n */\nService.prototype.get = function get(name) {\n    return Object.prototype.hasOwnProperty.call(this.methods, name)\n        ? this.methods[name]\n        : Namespace.prototype.get.call(this, name);\n};\n\n/**\n * @override\n */\nService.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    Namespace.prototype.resolve.call(this);\n    var methods = this.methodsArray;\n    for (var i = 0; i < methods.length; ++i)\n        methods[i].resolve();\n    return this;\n};\n\n/**\n * @override\n */\nService.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    if (!this._needsRecursiveFeatureResolution) return this;\n\n    edition = this._edition || edition;\n\n    Namespace.prototype._resolveFeaturesRecursive.call(this, edition);\n    this.methodsArray.forEach(method => {\n        method._resolveFeaturesRecursive(edition);\n    });\n    return this;\n};\n\n/**\n * @override\n */\nService.prototype.add = function add(object) {\n    /* istanbul ignore if */\n    if (this.get(object.name))\n        throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n    if (object instanceof Method) {\n        if (object.name === \"__proto__\")\n            return this;\n        this.methods[object.name] = object;\n        object.parent = this;\n        return clearCache(this);\n    }\n    return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * @override\n */\nService.prototype.remove = function remove(object) {\n    if (object instanceof Method) {\n\n        /* istanbul ignore if */\n        if (this.methods[object.name] !== object)\n            throw Error(object + \" is not a member of \" + this);\n\n        delete this.methods[object.name];\n        object.parent = null;\n        return clearCache(this);\n    }\n    return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Creates a runtime service using the specified rpc implementation.\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n * @returns {rpc.Service} RPC service. Useful where requests and/or responses are streamed.\n */\nService.prototype.create = function create(rpcImpl, requestDelimited, responseDelimited) {\n    var rpcService = new rpc.Service(rpcImpl, requestDelimited, responseDelimited);\n    for (var i = 0, method; i < /* initializes */ this.methodsArray.length; ++i) {\n        var methodName = util.lcFirst((method = this._methodsArray[i]).resolve().name).replace(/[^$\\w_]/g, \"\");\n        rpcService[methodName] = (function(method, requestType, responseType) {\n            return function rpcMethod(request, callback) {\n                return rpc.Service.prototype.rpcCall.call(this, method, requestType, responseType, request, callback);\n            };\n        })(method, method.resolvedRequestType.ctor, method.resolvedResponseType.ctor);\n    }\n    return rpcService;\n};\n","\"use strict\";\nmodule.exports = Message;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new message instance.\n * @classdesc Abstract runtime message.\n * @constructor\n * @param {Properties<T>} [properties] Properties to set\n * @template T extends object = object\n */\nfunction Message(properties) {\n    // not used internally\n    if (properties)\n        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) {\n            var key = keys[i];\n            if (key === \"__proto__\")\n                continue;\n            this[key] = properties[key];\n        }\n}\n\n/**\n * Reference to the reflected type.\n * @name Message.$type\n * @type {Type}\n * @readonly\n */\n\n/**\n * Reference to the reflected type.\n * @name Message#$type\n * @type {Type}\n * @readonly\n */\n\n/*eslint-disable valid-jsdoc*/\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.<string,*>} [properties] Properties to set\n * @returns {Message<T>} Message instance\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.create = function create(properties) {\n    return this.$type.create(properties);\n};\n\n/**\n * Encodes a message of this type.\n * @param {T|Object.<string,*>} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.encode = function encode(message, writer) {\n    return this.$type.encode(message, writer);\n};\n\n/**\n * Encodes a message of this type preceeded by its length as a varint.\n * @param {T|Object.<string,*>} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.encodeDelimited = function encodeDelimited(message, writer) {\n    return this.$type.encodeDelimited(message, writer);\n};\n\n/**\n * Decodes a message of this type.\n * @name Message.decode\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.decode = function decode(reader) {\n    return this.$type.decode(reader);\n};\n\n/**\n * Decodes a message of this type preceeded by its length as a varint.\n * @name Message.decodeDelimited\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.decodeDelimited = function decodeDelimited(reader) {\n    return this.$type.decodeDelimited(reader);\n};\n\n/**\n * Verifies a message of this type.\n * @name Message.verify\n * @function\n * @param {Object.<string,*>} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\nMessage.verify = function verify(message) {\n    return this.$type.verify(message);\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.<string,*>} object Plain object\n * @returns {T} Message instance\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.fromObject = function fromObject(object) {\n    return this.$type.fromObject(object);\n};\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {T} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.<string,*>} Plain object\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.toObject = function toObject(message, options) {\n    return this.$type.toObject(message, options);\n};\n\n/**\n * Converts this message to JSON.\n * @returns {Object.<string,*>} JSON object\n */\nMessage.prototype.toJSON = function toJSON() {\n    return this.$type.toObject(this, util.toJSONOptions);\n};\n\n/*eslint-enable valid-jsdoc*/\n","\"use strict\";\nmodule.exports = decoder;\n\nvar Enum    = require(\"./enum\"),\n    types   = require(\"./types\"),\n    util    = require(\"./util\");\n\nfunction missing(field) {\n    return \"missing required '\" + field.name + \"'\";\n}\n\n/**\n * Generates a decoder specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction decoder(mtype) {\n    /* eslint-disable no-unexpected-multiline */\n    var gen = util.codegen([\"r\", \"l\", \"e\", \"n\"], mtype.name + \"$decode\")\n    (\"if(!(r instanceof Reader))\")\n        (\"r=Reader.create(r)\")\n    (\"if(n===undefined)n=0\")\n    (\"if(n>Reader.recursionLimit)\")\n        (\"throw Error(\\\"maximum nesting depth exceeded\\\")\")\n    (\"var c=l===undefined?r.len:r.pos+l,m=new this.ctor\" + (mtype.fieldsArray.filter(function(field) { return field.map; }).length ? \",k,value\" : \"\"))\n    (\"while(r.pos<c){\")\n        (\"var t=r.uint32()\")\n        (\"if(t===e)\")\n            (\"break\")\n        (\"switch(t>>>3){\");\n\n    var i = 0;\n    for (; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n        var field = mtype._fieldsArray[i].resolve(),\n            type  = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n            ref   = \"m\" + util.safeProp(field.name); gen\n            (\"case %i: {\", field.id);\n\n        // Map fields\n        if (field.map) { gen\n                (\"if(%s===util.emptyObject)\", ref)\n                    (\"%s={}\", ref)\n                (\"var c2 = r.uint32()+r.pos\");\n\n            if (types.defaults[field.keyType] !== undefined) gen\n                (\"k=%j\", types.defaults[field.keyType]);\n            else gen\n                (\"k=null\");\n\n            if (types.defaults[type] !== undefined) gen\n                (\"value=%j\", types.defaults[type]);\n            else gen\n                (\"value=null\");\n\n            gen\n                (\"while(r.pos<c2){\")\n                    (\"var tag2=r.uint32()\")\n                    (\"switch(tag2>>>3){\")\n                        (\"case 1: k=r.%s(); break\", field.keyType)\n                        (\"case 2:\");\n\n            if (types.basic[type] === undefined) gen\n                            (\"value=types[%i].decode(r,r.uint32(),undefined,n+1)\", i); // can't be groups\n            else gen\n                            (\"value=r.%s()\", type);\n\n            gen\n                            (\"break\")\n                        (\"default:\")\n                            (\"r.skipType(tag2&7,n)\")\n                            (\"break\")\n                    (\"}\")\n                (\"}\");\n\n            if (types.long[field.keyType] !== undefined) gen\n                (\"%s[typeof k===\\\"object\\\"?util.longToHash(k):k]=value\", ref);\n            else {\n                if (field.keyType === \"string\") gen\n                (\"if(k===\\\"__proto__\\\")\")\n                    (\"util.makeProp(%s,k)\", ref);\n                gen\n                (\"%s[k]=value\", ref);\n            }\n\n        // Repeated fields\n        } else if (field.repeated) { gen\n\n                (\"if(!(%s&&%s.length))\", ref, ref)\n                    (\"%s=[]\", ref);\n\n            // Packable (always check for forward and backward compatiblity)\n            if (types.packed[type] !== undefined) gen\n                (\"if((t&7)===2){\")\n                    (\"var c2=r.uint32()+r.pos\")\n                    (\"while(r.pos<c2)\")\n                        (\"%s.push(r.%s())\", ref, type)\n                (\"}else\");\n\n            // Non-packed\n            if (types.basic[type] === undefined) gen(field.delimited\n                    ? \"%s.push(types[%i].decode(r,undefined,((t&~7)|4),n+1))\"\n                    : \"%s.push(types[%i].decode(r,r.uint32(),undefined,n+1))\", ref, i);\n            else gen\n                    (\"%s.push(r.%s())\", ref, type);\n\n        // Non-repeated\n        } else if (types.basic[type] === undefined) gen(field.delimited\n                ? \"%s=types[%i].decode(r,undefined,((t&~7)|4),n+1)\"\n                : \"%s=types[%i].decode(r,r.uint32(),undefined,n+1)\", ref, i);\n        else gen\n                (\"%s=r.%s()\", ref, type);\n        gen\n                (\"break\")\n            (\"}\");\n        // Unknown fields\n    } gen\n            (\"default:\")\n                (\"r.skipType(t&7,n)\")\n                (\"break\")\n\n        (\"}\")\n    (\"}\");\n\n    // Field presence\n    for (i = 0; i < mtype._fieldsArray.length; ++i) {\n        var rfield = mtype._fieldsArray[i];\n        if (rfield.required) gen\n            (\"if(!Object.hasOwnProperty.call(m,%j))\", rfield.name)\n        (\"throw util.ProtocolError(%j,{instance:m})\", missing(rfield));\n    }\n\n    return gen\n    (\"return m\");\n    /* eslint-enable no-unexpected-multiline */\n}\n","\"use strict\";\nmodule.exports = verifier;\n\nvar Enum      = require(\"./enum\"),\n    util      = require(\"./util\");\n\nfunction invalid(field, expected) {\n    return field.name + \": \" + expected + (field.repeated && expected !== \"array\" ? \"[]\" : field.map && expected !== \"object\" ? \"{k:\"+field.keyType+\"}\" : \"\") + \" expected\";\n}\n\n/**\n * Generates a partial value verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyValue(gen, field, fieldIndex, ref) {\n    /* eslint-disable no-unexpected-multiline */\n    if (field.resolvedType) {\n        if (field.resolvedType instanceof Enum) { gen\n            (\"switch(%s){\", ref)\n                (\"default:\")\n                    (\"return%j\", invalid(field, \"enum value\"));\n            for (var keys = Object.keys(field.resolvedType.values), j = 0; j < keys.length; ++j) gen\n                (\"case %i:\", field.resolvedType.values[keys[j]]);\n            gen\n                    (\"break\")\n            (\"}\");\n        } else {\n            gen\n            (\"{\")\n                (\"var e=types[%i].verify(%s,n+1);\", fieldIndex, ref)\n                (\"if(e)\")\n                    (\"return%j+e\", field.name + \".\")\n            (\"}\");\n        }\n    } else {\n        switch (field.type) {\n            case \"int32\":\n            case \"uint32\":\n            case \"sint32\":\n            case \"fixed32\":\n            case \"sfixed32\": gen\n                (\"if(!util.isInteger(%s))\", ref)\n                    (\"return%j\", invalid(field, \"integer\"));\n                break;\n            case \"int64\":\n            case \"uint64\":\n            case \"sint64\":\n            case \"fixed64\":\n            case \"sfixed64\": gen\n                (\"if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))\", ref, ref, ref, ref)\n                    (\"return%j\", invalid(field, \"integer|Long\"));\n                break;\n            case \"float\":\n            case \"double\": gen\n                (\"if(typeof %s!==\\\"number\\\")\", ref)\n                    (\"return%j\", invalid(field, \"number\"));\n                break;\n            case \"bool\": gen\n                (\"if(typeof %s!==\\\"boolean\\\")\", ref)\n                    (\"return%j\", invalid(field, \"boolean\"));\n                break;\n            case \"string\": gen\n                (\"if(!util.isString(%s))\", ref)\n                    (\"return%j\", invalid(field, \"string\"));\n                break;\n            case \"bytes\": gen\n                (\"if(!(%s&&typeof %s.length===\\\"number\\\"||util.isString(%s)))\", ref, ref, ref)\n                    (\"return%j\", invalid(field, \"buffer\"));\n                break;\n        }\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a partial key verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyKey(gen, field, ref) {\n    /* eslint-disable no-unexpected-multiline */\n    switch (field.keyType) {\n        case \"int32\":\n        case \"uint32\":\n        case \"sint32\":\n        case \"fixed32\":\n        case \"sfixed32\": gen\n            (\"if(!util.key32Re.test(%s))\", ref)\n                (\"return%j\", invalid(field, \"integer key\"));\n            break;\n        case \"int64\":\n        case \"uint64\":\n        case \"sint64\":\n        case \"fixed64\":\n        case \"sfixed64\": gen\n            (\"if(!util.key64Re.test(%s))\", ref) // see comment above: x is ok, d is not\n                (\"return%j\", invalid(field, \"integer|Long key\"));\n            break;\n        case \"bool\": gen\n            (\"if(!util.key2Re.test(%s))\", ref)\n                (\"return%j\", invalid(field, \"boolean key\"));\n            break;\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a verifier specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction verifier(mtype) {\n    /* eslint-disable no-unexpected-multiline */\n\n    var gen = util.codegen([\"m\", \"n\"], mtype.name + \"$verify\")\n    (\"if(typeof m!==\\\"object\\\"||m===null)\")\n        (\"return%j\", \"object expected\")\n    (\"if(n===undefined)n=0\")\n    (\"if(n>util.recursionLimit)\")\n        (\"return%j\", \"maximum nesting depth exceeded\");\n    var oneofs = mtype.oneofsArray,\n        seenFirstField = {};\n    if (oneofs.length) gen\n    (\"var p={}\");\n\n    for (var i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n        var field = mtype._fieldsArray[i].resolve(),\n            ref   = \"m\" + util.safeProp(field.name);\n\n        if (field.optional) gen\n        (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)){\", ref, field.name); // !== undefined && !== null\n\n        // map fields\n        if (field.map) { gen\n            (\"if(!util.isObject(%s))\", ref)\n                (\"return%j\", invalid(field, \"object\"))\n            (\"var k=Object.keys(%s)\", ref)\n            (\"for(var i=0;i<k.length;++i){\");\n                genVerifyKey(gen, field, \"k[i]\");\n                genVerifyValue(gen, field, i, ref + \"[k[i]]\")\n            (\"}\");\n\n        // repeated fields\n        } else if (field.repeated) { gen\n            (\"if(!Array.isArray(%s))\", ref)\n                (\"return%j\", invalid(field, \"array\"))\n            (\"for(var i=0;i<%s.length;++i){\", ref);\n                genVerifyValue(gen, field, i, ref + \"[i]\")\n            (\"}\");\n\n        // required or present fields\n        } else {\n            if (field.partOf) {\n                var oneofProp = util.safeProp(field.partOf.name);\n                if (seenFirstField[field.partOf.name] === 1) gen\n            (\"if(p%s===1)\", oneofProp)\n                (\"return%j\", field.partOf.name + \": multiple values\");\n                seenFirstField[field.partOf.name] = 1;\n                gen\n            (\"p%s=1\", oneofProp);\n            }\n            genVerifyValue(gen, field, i, ref);\n        }\n        if (field.optional) gen\n        (\"}\");\n    }\n    return gen\n    (\"return null\");\n    /* eslint-enable no-unexpected-multiline */\n}\n","\"use strict\";\n/**\n * Runtime message from/to plain object converters.\n * @namespace\n */\nvar converter = exports;\n\nvar Enum = require(\"./enum\"),\n    util = require(\"./util\");\n\n/**\n * Generates a partial value fromObject conveter.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} prop Property reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genValuePartial_fromObject(gen, field, fieldIndex, prop) {\n    var defaultAlreadyEmitted = false;\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    if (field.resolvedType) {\n        if (field.resolvedType instanceof Enum) { gen\n            (\"switch(d%s){\", prop);\n            for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) {\n                // enum unknown values passthrough\n                if (values[keys[i]] === field.typeDefault && !defaultAlreadyEmitted) { gen\n                    (\"default:\")\n                        (\"if(typeof(d%s)===\\\"number\\\"){m%s=d%s;break}\", prop, prop, prop);\n                    if (!field.repeated) gen // fallback to default value only for\n                                             // arrays, to avoid leaving holes.\n                        (\"break\");           // for non-repeated fields, just ignore\n                    defaultAlreadyEmitted = true;\n                }\n                gen\n                (\"case%j:\", keys[i])\n                (\"case %i:\", values[keys[i]])\n                    (\"m%s=%j\", prop, values[keys[i]])\n                    (\"break\");\n            } gen\n            (\"}\");\n        } else gen\n            (\"if(!util.isObject(d%s))\", prop)\n                (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n            (\"m%s=types[%i].fromObject(d%s,n+1)\", prop, fieldIndex, prop);\n    } else {\n        var isUnsigned = false;\n        switch (field.type) {\n            case \"double\":\n            case \"float\": gen\n                (\"m%s=Number(d%s)\", prop, prop); // also catches \"NaN\", \"Infinity\"\n                break;\n            case \"uint32\":\n            case \"fixed32\": gen\n                (\"m%s=d%s>>>0\", prop, prop);\n                break;\n            case \"int32\":\n            case \"sint32\":\n            case \"sfixed32\": gen\n                (\"m%s=d%s|0\", prop, prop);\n                break;\n            case \"uint64\":\n            case \"fixed64\":\n                isUnsigned = true;\n                // eslint-disable-next-line no-fallthrough\n            case \"int64\":\n            case \"sint64\":\n            case \"sfixed64\": gen\n                (\"if(util.Long)\")\n                    (\"m%s=util.Long.fromValue(d%s,%j)\", prop, prop, isUnsigned)\n                (\"else if(typeof d%s===\\\"string\\\")\", prop)\n                    (\"m%s=parseInt(d%s,10)\", prop, prop)\n                (\"else if(typeof d%s===\\\"number\\\")\", prop)\n                    (\"m%s=d%s\", prop, prop)\n                (\"else if(typeof d%s===\\\"object\\\")\", prop)\n                    (\"m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)\", prop, prop, prop, isUnsigned ? \"true\" : \"\");\n                break;\n            case \"bytes\": gen\n                (\"if(typeof d%s===\\\"string\\\")\", prop)\n                    (\"util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)\", prop, prop, prop)\n                (\"else if(d%s.length >= 0)\", prop)\n                    (\"m%s=d%s\", prop, prop);\n                break;\n            case \"string\": gen\n                (\"m%s=String(d%s)\", prop, prop);\n                break;\n            case \"bool\": gen\n                (\"m%s=Boolean(d%s)\", prop, prop);\n                break;\n            /* default: gen\n                (\"m%s=d%s\", prop, prop);\n                break; */\n        }\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a plain object to runtime message converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.fromObject = function fromObject(mtype) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    var fields = mtype.fieldsArray;\n    var gen = util.codegen([\"d\", \"n\"], mtype.name + \"$fromObject\")\n    (\"if(d instanceof this.ctor)\")\n        (\"return d\");\n    if (!fields.length) return gen\n    (\"return new this.ctor\");\n    gen\n    (\"if(!util.isObject(d))\")\n        (\"throw TypeError(%j)\", mtype.fullName + \": object expected\")\n    (\"if(n===undefined)n=0\")\n    (\"if(n>util.recursionLimit)\")\n        (\"throw Error(\\\"maximum nesting depth exceeded\\\")\");\n    gen\n    (\"var m=new this.ctor\");\n    for (var i = 0; i < fields.length; ++i) {\n        var field  = fields[i].resolve(),\n            prop   = util.safeProp(field.name);\n\n        // Map fields\n        if (field.map) { gen\n    (\"if(d%s){\", prop)\n        (\"if(!util.isObject(d%s))\", prop)\n            (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n        (\"m%s={}\", prop)\n        (\"for(var ks=Object.keys(d%s),i=0;i<ks.length;++i){\", prop);\n            gen\n        (\"if(ks[i]===\\\"__proto__\\\")\")\n            (\"util.makeProp(m%s,ks[i])\", prop);\n            genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + \"[ks[i]]\")\n        (\"}\")\n    (\"}\");\n\n        // Repeated fields\n        } else if (field.repeated) { gen\n    (\"if(d%s){\", prop)\n        (\"if(!Array.isArray(d%s))\", prop)\n            (\"throw TypeError(%j)\", field.fullName + \": array expected\")\n        (\"m%s=[]\", prop)\n        (\"for(var i=0;i<d%s.length;++i){\", prop);\n            genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + \"[i]\")\n        (\"}\")\n    (\"}\");\n\n        // Non-repeated fields\n        } else {\n            if (!(field.resolvedType instanceof Enum)) gen // no need to test for null/undefined if an enum (uses switch)\n    (\"if(d%s!=null){\", prop); // !== undefined && !== null\n        genValuePartial_fromObject(gen, field, /* not sorted */ i, prop);\n            if (!(field.resolvedType instanceof Enum)) gen\n    (\"}\");\n        }\n    } return gen\n    (\"return m\");\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n};\n\n/**\n * Generates a partial value toObject converter.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} prop Property reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genValuePartial_toObject(gen, field, fieldIndex, prop) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    if (field.resolvedType) {\n        if (field.resolvedType instanceof Enum) gen\n            (\"d%s=o.enums===String?(types[%i].values[m%s]===undefined?m%s:types[%i].values[m%s]):m%s\", prop, fieldIndex, prop, prop, fieldIndex, prop, prop);\n        else gen\n            (\"d%s=types[%i].toObject(m%s,o,q+1)\", prop, fieldIndex, prop);\n    } else {\n        var isUnsigned = false;\n        switch (field.type) {\n            case \"double\":\n            case \"float\": gen\n            (\"d%s=o.json&&!isFinite(m%s)?String(m%s):m%s\", prop, prop, prop, prop);\n                break;\n            case \"uint64\":\n            case \"fixed64\":\n                isUnsigned = true;\n                // eslint-disable-next-line no-fallthrough\n            case \"int64\":\n            case \"sint64\":\n            case \"sfixed64\": gen\n            (\"if(typeof BigInt!==\\\"undefined\\\"&&o.longs===BigInt)\")\n                (\"d%s=typeof m%s===\\\"number\\\"?BigInt(m%s):util.Long.fromBits(m%s.low>>>0,m%s.high>>>0,%j).toBigInt()\", prop, prop, prop, prop, prop, isUnsigned)\n            (\"else if(typeof m%s===\\\"number\\\")\", prop)\n                (\"d%s=o.longs===String?String(m%s):m%s\", prop, prop, prop)\n            (\"else\") // Long-like\n                (\"d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s\", prop, prop, prop, prop, isUnsigned ? \"true\": \"\", prop);\n                break;\n            case \"bytes\": gen\n            (\"d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s\", prop, prop, prop, prop, prop);\n                break;\n            default: gen\n            (\"d%s=m%s\", prop, prop);\n                break;\n        }\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a runtime message to plain object converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.toObject = function toObject(mtype) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);\n    if (!fields.length)\n        return util.codegen()(\"return {}\");\n    var gen = util.codegen([\"m\", \"o\", \"q\"], mtype.name + \"$toObject\")\n    (\"if(!o)\")\n        (\"o={}\")\n    (\"if(q===undefined)q=0\")\n    (\"if(q>util.recursionLimit)\")\n        (\"throw Error(\\\"max depth exceeded\\\")\")\n    (\"var d={}\");\n\n    var repeatedFields = [],\n        mapFields = [],\n        normalFields = [],\n        i = 0;\n    for (; i < fields.length; ++i)\n        if (!fields[i].partOf)\n            ( fields[i].resolve().repeated ? repeatedFields\n            : fields[i].map ? mapFields\n            : normalFields).push(fields[i]);\n\n    if (repeatedFields.length) { gen\n    (\"if(o.arrays||o.defaults){\");\n        for (i = 0; i < repeatedFields.length; ++i) gen\n        (\"d%s=[]\", util.safeProp(repeatedFields[i].name));\n        gen\n    (\"}\");\n    }\n\n    if (mapFields.length) { gen\n    (\"if(o.objects||o.defaults){\");\n        for (i = 0; i < mapFields.length; ++i) gen\n        (\"d%s={}\", util.safeProp(mapFields[i].name));\n        gen\n    (\"}\");\n    }\n\n    if (normalFields.length) { gen\n    (\"if(o.defaults){\");\n        for (i = 0; i < normalFields.length; ++i) {\n            var field = normalFields[i],\n                prop  = util.safeProp(field.name);\n            if (field.resolvedType instanceof Enum) gen\n        (\"d%s=o.enums===String?%j:%j\", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);\n            else if (field.long) gen\n        (\"if(util.Long){\")\n            (\"var n=new util.Long(%i,%i,%j)\", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)\n            (\"d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():typeof BigInt!==\\\"undefined\\\"&&o.longs===BigInt?n.toBigInt():n\", prop)\n        (\"}else\")\n            (\"d%s=o.longs===String?%j:typeof BigInt!==\\\"undefined\\\"&&o.longs===BigInt?BigInt(%j):%i\", prop, field.typeDefault.toString(), field.typeDefault.toString(), field.typeDefault.toNumber());\n            else if (field.bytes) {\n                var arrayDefault = Array.prototype.slice.call(field.typeDefault);\n                gen\n        (\"if(o.bytes===String)d%s=%j\", prop, String.fromCharCode.apply(String, field.typeDefault))\n        (\"else{\")\n            (\"d%s=%j\", prop, arrayDefault)\n            (\"if(o.bytes!==Array)d%s=util.newBuffer(d%s)\", prop, prop)\n        (\"}\");\n            } else gen\n        (\"d%s=%j\", prop, field.typeDefault); // also messages (=null)\n        } gen\n    (\"}\");\n    }\n    var hasKs2 = false;\n    for (i = 0; i < fields.length; ++i) {\n        var field = fields[i],\n            index = mtype._fieldsArray.indexOf(field),\n            prop  = util.safeProp(field.name);\n        if (field.map) {\n            if (!hasKs2) { hasKs2 = true; gen\n    (\"var ks2\");\n            } gen\n    (\"if(m%s&&(ks2=Object.keys(m%s)).length){\", prop, prop)\n        (\"d%s={}\", prop)\n        (\"for(var j=0;j<ks2.length;++j){\");\n            gen\n        (\"if(ks2[j]===\\\"__proto__\\\")\")\n            (\"util.makeProp(d%s,ks2[j])\", prop);\n            genValuePartial_toObject(gen, field, /* sorted */ index, prop + \"[ks2[j]]\")\n        (\"}\");\n        } else if (field.repeated) { gen\n    (\"if(m%s&&m%s.length){\", prop, prop)\n        (\"d%s=[]\", prop)\n        (\"for(var j=0;j<m%s.length;++j){\", prop);\n            genValuePartial_toObject(gen, field, /* sorted */ index, prop + \"[j]\")\n        (\"}\");\n        } else { gen\n    (\"if(m%s!=null&&Object.hasOwnProperty.call(m,%j)){\", prop, field.name); // !== undefined && !== null\n        genValuePartial_toObject(gen, field, /* sorted */ index, prop);\n        if (field.partOf) gen\n        (\"if(o.oneofs)\")\n            (\"d%s=%j\", util.safeProp(field.partOf.name), field.name);\n        }\n        gen\n    (\"}\");\n    }\n    return gen\n    (\"return d\");\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n};\n","\"use strict\";\n\n/**\n * Wrappers for common types.\n * @type {Object.<string,IWrapper>}\n * @const\n */\nvar wrappers = exports;\n\nvar Message = require(\"./message\"),\n    util    = require(\"./util/minimal\");\n\n/**\n * From object converter part of an {@link IWrapper}.\n * @typedef WrapperFromObjectConverter\n * @type {function}\n * @param {Object.<string,*>} object Plain object\n * @returns {Message<{}>} Message instance\n * @this Type\n */\n\n/**\n * To object converter part of an {@link IWrapper}.\n * @typedef WrapperToObjectConverter\n * @type {function}\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.<string,*>} Plain object\n * @this Type\n */\n\n/**\n * Common type wrapper part of {@link wrappers}.\n * @interface IWrapper\n * @property {WrapperFromObjectConverter} [fromObject] From object converter\n * @property {WrapperToObjectConverter} [toObject] To object converter\n */\n\n// Custom wrapper for Any\nwrappers[\".google.protobuf.Any\"] = {\n\n    fromObject: function(object, depth) {\n\n        // unwrap value type if mapped\n        if (object && object[\"@type\"]) {\n             // Only use fully qualified type name after the last '/'\n            var name = object[\"@type\"].substring(object[\"@type\"].lastIndexOf(\"/\") + 1);\n            var type = this.lookup(name);\n            /* istanbul ignore else */\n            if (type) {\n                // type_url does not accept leading \".\"\n                var type_url = object[\"@type\"].charAt(0) === \".\" ?\n                    object[\"@type\"].slice(1) : object[\"@type\"];\n                // type_url prefix is optional, but path seperator is required\n                if (type_url.indexOf(\"/\") === -1) {\n                    type_url = \"/\" + type_url;\n                }\n                return this.create({\n                    type_url: type_url,\n                    value: type.encode(type.fromObject(object, depth === undefined ? 1 : depth + 1)).finish()\n                });\n            }\n        }\n\n        return this.fromObject(object, depth);\n    },\n\n    toObject: function(message, options, depth) {\n        if (depth === undefined)\n            depth = 0;\n        if (depth > util.recursionLimit)\n            throw Error(\"max depth exceeded\");\n\n        // Default prefix\n        var googleApi = \"type.googleapis.com/\";\n        var prefix = \"\";\n        var name = \"\";\n\n        // decode value if requested and unmapped\n        if (options && options.json && message.type_url && message.value) {\n            // Only use fully qualified type name after the last '/'\n            name = message.type_url.substring(message.type_url.lastIndexOf(\"/\") + 1);\n            // Separate the prefix used\n            prefix = message.type_url.substring(0, message.type_url.lastIndexOf(\"/\") + 1);\n            var type = this.lookup(name);\n            /* istanbul ignore else */\n            if (type)\n                message = type.decode(message.value, undefined, undefined, depth + 1);\n        }\n\n        // wrap value if unmapped\n        if (!(message instanceof this.ctor) && message instanceof Message) {\n            var object = message.$type.toObject(message, options, depth + 1);\n            var messageName = message.$type.fullName[0] === \".\" ?\n                message.$type.fullName.slice(1) : message.$type.fullName;\n            // Default to type.googleapis.com prefix if no prefix is used\n            if (prefix === \"\") {\n                prefix = googleApi;\n            }\n            name = prefix + messageName;\n            object[\"@type\"] = name;\n            return object;\n        }\n\n        return this.toObject(message, options, depth);\n    }\n};\n","\"use strict\";\nmodule.exports = Type;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Type.prototype = Object.create(Namespace.prototype)).constructor = Type).className = \"Type\";\n\nvar Enum      = require(\"./enum\"),\n    OneOf     = require(\"./oneof\"),\n    Field     = require(\"./field\"),\n    MapField  = require(\"./mapfield\"),\n    Service   = require(\"./service\"),\n    Message   = require(\"./message\"),\n    Reader    = require(\"./reader\"),\n    Writer    = require(\"./writer\"),\n    util      = require(\"./util\"),\n    encoder   = require(\"./encoder\"),\n    decoder   = require(\"./decoder\"),\n    verifier  = require(\"./verifier\"),\n    converter = require(\"./converter\"),\n    wrappers  = require(\"./wrappers\");\n\n/**\n * Constructs a new reflected message type instance.\n * @classdesc Reflected message type.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Message name\n * @param {Object.<string,*>} [options] Declared options\n */\nfunction Type(name, options) {\n    name = name.replace(/\\W/g, \"\");\n    Namespace.call(this, name, options);\n\n    /**\n     * Message fields.\n     * @type {Object.<string,Field>}\n     */\n    this.fields = {};  // toJSON, marker\n\n    /**\n     * Oneofs declared within this namespace, if any.\n     * @type {Object.<string,OneOf>}\n     */\n    this.oneofs = undefined; // toJSON\n\n    /**\n     * Extension ranges, if any.\n     * @type {number[][]}\n     */\n    this.extensions = undefined; // toJSON\n\n    /**\n     * Reserved ranges, if any.\n     * @type {Array.<number[]|string>}\n     */\n    this.reserved = undefined; // toJSON\n\n    /*?\n     * Whether this type is a legacy group.\n     * @type {boolean|undefined}\n     */\n    this.group = undefined; // toJSON\n\n    /**\n     * Cached fields by id.\n     * @type {Object.<number,Field>|null}\n     * @private\n     */\n    this._fieldsById = null;\n\n    /**\n     * Cached fields as an array.\n     * @type {Field[]|null}\n     * @private\n     */\n    this._fieldsArray = null;\n\n    /**\n     * Cached oneofs as an array.\n     * @type {OneOf[]|null}\n     * @private\n     */\n    this._oneofsArray = null;\n\n    /**\n     * Cached constructor.\n     * @type {Constructor<{}>}\n     * @private\n     */\n    this._ctor = null;\n}\n\nObject.defineProperties(Type.prototype, {\n\n    /**\n     * Message fields by id.\n     * @name Type#fieldsById\n     * @type {Object.<number,Field>}\n     * @readonly\n     */\n    fieldsById: {\n        get: function() {\n\n            /* istanbul ignore if */\n            if (this._fieldsById)\n                return this._fieldsById;\n\n            this._fieldsById = {};\n            for (var names = Object.keys(this.fields), i = 0; i < names.length; ++i) {\n                var field = this.fields[names[i]],\n                    id = field.id;\n\n                /* istanbul ignore if */\n                if (this._fieldsById[id])\n                    throw Error(\"duplicate id \" + id + \" in \" + this);\n\n                this._fieldsById[id] = field;\n            }\n            return this._fieldsById;\n        }\n    },\n\n    /**\n     * Fields of this message as an array for iteration.\n     * @name Type#fieldsArray\n     * @type {Field[]}\n     * @readonly\n     */\n    fieldsArray: {\n        get: function() {\n            return this._fieldsArray || (this._fieldsArray = util.toArray(this.fields));\n        }\n    },\n\n    /**\n     * Oneofs of this message as an array for iteration.\n     * @name Type#oneofsArray\n     * @type {OneOf[]}\n     * @readonly\n     */\n    oneofsArray: {\n        get: function() {\n            return this._oneofsArray || (this._oneofsArray = util.toArray(this.oneofs));\n        }\n    },\n\n    /**\n     * The registered constructor, if any registered, otherwise a generic constructor.\n     * Assigning a function replaces the internal constructor. If the function does not extend {@link Message} yet, its prototype will be setup accordingly and static methods will be populated. If it already extends {@link Message}, it will just replace the internal constructor.\n     * @name Type#ctor\n     * @type {Constructor<{}>}\n     */\n    ctor: {\n        get: function() {\n            return this._ctor || (this.ctor = Type.generateConstructor(this)());\n        },\n        set: function(ctor) {\n\n            // Ensure proper prototype\n            var prototype = ctor.prototype;\n            if (!(prototype instanceof Message)) {\n                (ctor.prototype = new Message()).constructor = ctor;\n                util.merge(ctor.prototype, prototype);\n            }\n\n            // Classes and messages reference their reflected type\n            ctor.$type = ctor.prototype.$type = this;\n\n            // Mix in static methods\n            util.merge(ctor, Message, true);\n\n            this._ctor = ctor;\n\n            // Messages have non-enumerable default values on their prototype\n            var i = 0;\n            for (; i < /* initializes */ this.fieldsArray.length; ++i)\n                this._fieldsArray[i].resolve(); // ensures a proper value\n\n            // Messages have non-enumerable getters and setters for each virtual oneof field\n            var ctorProperties = {};\n            for (i = 0; i < /* initializes */ this.oneofsArray.length; ++i)\n                ctorProperties[this._oneofsArray[i].resolve().name] = {\n                    get: util.oneOfGetter(this._oneofsArray[i].oneof),\n                    set: util.oneOfSetter(this._oneofsArray[i].oneof)\n                };\n            if (i)\n                Object.defineProperties(ctor.prototype, ctorProperties);\n        }\n    }\n});\n\n/**\n * Generates a constructor function for the specified type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nType.generateConstructor = function generateConstructor(mtype) {\n    /* eslint-disable no-unexpected-multiline */\n    var gen = util.codegen([\"p\"], mtype.name);\n    // explicitly initialize mutable object/array fields so that these aren't just inherited from the prototype\n    for (var i = 0, field; i < mtype.fieldsArray.length; ++i)\n        if ((field = mtype._fieldsArray[i]).map) gen\n            (\"this%s={}\", util.safeProp(field.name));\n        else if (field.repeated) gen\n            (\"this%s=[]\", util.safeProp(field.name));\n    return gen\n    (\"if(p)for(var ks=Object.keys(p),i=0;i<ks.length;++i)if(p[ks[i]]!=null&&ks[i]!==\\\"__proto__\\\")\") // omit undefined or null\n        (\"this[ks[i]]=p[ks[i]]\");\n    /* eslint-enable no-unexpected-multiline */\n};\n\nfunction clearCache(type) {\n    type._fieldsById = type._fieldsArray = type._oneofsArray = null;\n    delete type.encode;\n    delete type.decode;\n    delete type.verify;\n    return type;\n}\n\n/**\n * Message type descriptor.\n * @interface IType\n * @extends INamespace\n * @property {Object.<string,IOneOf>} [oneofs] Oneof descriptors\n * @property {Object.<string,IField>} fields Field descriptors\n * @property {number[][]} [extensions] Extension ranges\n * @property {Array.<number[]|string>} [reserved] Reserved ranges\n * @property {boolean} [group=false] Whether a legacy group or not\n */\n\n/**\n * Creates a message type from a message type descriptor.\n * @param {string} name Message name\n * @param {IType} json Message type descriptor\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Type} Created message type\n */\nType.fromJSON = function fromJSON(name, json, depth) {\n    if (depth === undefined)\n        depth = 0;\n    if (depth > util.nestingLimit)\n        throw Error(\"max depth exceeded\");\n    var type = new Type(name, json.options);\n    type.extensions = json.extensions;\n    type.reserved = json.reserved;\n    var names = Object.keys(json.fields),\n        i = 0;\n    for (; i < names.length; ++i)\n        type.add(\n            ( typeof json.fields[names[i]].keyType !== \"undefined\"\n            ? MapField.fromJSON\n            : Field.fromJSON )(names[i], json.fields[names[i]])\n        );\n    if (json.oneofs)\n        for (names = Object.keys(json.oneofs), i = 0; i < names.length; ++i)\n            type.add(OneOf.fromJSON(names[i], json.oneofs[names[i]]));\n    if (json.nested)\n        for (names = Object.keys(json.nested), i = 0; i < names.length; ++i) {\n            var nested = json.nested[names[i]];\n            type.add( // most to least likely\n                ( nested.id !== undefined\n                ? Field.fromJSON\n                : nested.fields !== undefined\n                ? Type.fromJSON\n                : nested.values !== undefined\n                ? Enum.fromJSON\n                : nested.methods !== undefined\n                ? Service.fromJSON\n                : Namespace.fromJSON )(names[i], nested, depth + 1)\n            );\n        }\n    if (json.extensions && json.extensions.length)\n        type.extensions = json.extensions;\n    if (json.reserved && json.reserved.length)\n        type.reserved = json.reserved;\n    if (json.group)\n        type.group = true;\n    if (json.comment)\n        type.comment = json.comment;\n    if (json.edition)\n        type._edition = json.edition;\n    type._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return type;\n};\n\n/**\n * Converts this message type to a message type descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IType} Message type descriptor\n */\nType.prototype.toJSON = function toJSON(toJSONOptions) {\n    var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\"    , this._editionToJSON(),\n        \"options\"    , inherited && inherited.options || undefined,\n        \"oneofs\"     , Namespace.arrayToJSON(this.oneofsArray, toJSONOptions),\n        \"fields\"     , Namespace.arrayToJSON(this.fieldsArray.filter(function(obj) { return !obj.declaringField; }), toJSONOptions) || {},\n        \"extensions\" , this.extensions && this.extensions.length ? this.extensions : undefined,\n        \"reserved\"   , this.reserved && this.reserved.length ? this.reserved : undefined,\n        \"group\"      , this.group || undefined,\n        \"nested\"     , inherited && inherited.nested || undefined,\n        \"comment\"    , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * @override\n */\nType.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    Namespace.prototype.resolveAll.call(this);\n    var oneofs = this.oneofsArray; i = 0;\n    while (i < oneofs.length)\n        oneofs[i++].resolve();\n    var fields = this.fieldsArray, i = 0;\n    while (i < fields.length)\n        fields[i++].resolve();\n    return this;\n};\n\n/**\n * @override\n */\nType.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    if (!this._needsRecursiveFeatureResolution) return this;\n\n    edition = this._edition || edition;\n\n    Namespace.prototype._resolveFeaturesRecursive.call(this, edition);\n    this.oneofsArray.forEach(oneof => {\n        oneof._resolveFeatures(edition);\n    });\n    this.fieldsArray.forEach(field => {\n        field._resolveFeatures(edition);\n    });\n    return this;\n};\n\n/**\n * @override\n */\nType.prototype.get = function get(name) {\n    if (Object.prototype.hasOwnProperty.call(this.fields, name))\n        return this.fields[name];\n    if (this.oneofs && Object.prototype.hasOwnProperty.call(this.oneofs, name))\n        return this.oneofs[name];\n    if (this.nested && Object.prototype.hasOwnProperty.call(this.nested, name))\n        return this.nested[name];\n    return null;\n};\n\n/**\n * Adds a nested object to this type.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name or, if a field, when there is already a field with this id\n */\nType.prototype.add = function add(object) {\n    if (this.get(object.name))\n        throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n    if (object instanceof Field && object.extend === undefined) {\n        // NOTE: Extension fields aren't actual fields on the declaring type, but nested objects.\n        // The root object takes care of adding distinct sister-fields to the respective extended\n        // type instead.\n\n        // avoids calling the getter if not absolutely necessary because it's called quite frequently\n        if (this._fieldsById ? /* istanbul ignore next */ this._fieldsById[object.id] : this.fieldsById[object.id])\n            throw Error(\"duplicate id \" + object.id + \" in \" + this);\n        if (this.isReservedId(object.id))\n            throw Error(\"id \" + object.id + \" is reserved in \" + this);\n        if (this.isReservedName(object.name) || object.name.charAt(0) === \"$\")\n            throw Error(\"name '\" + object.name + \"' is reserved in \" + this);\n        if (object.name === \"__proto__\")\n            return this;\n\n        if (object.parent)\n            object.parent.remove(object);\n        this.fields[object.name] = object;\n        object.message = this;\n        object.onAdd(this);\n        return clearCache(this);\n    }\n    if (object instanceof OneOf) {\n        if (object.name.charAt(0) === \"$\")\n            throw Error(\"name '\" + object.name + \"' is reserved in \" + this);\n        if (object.name === \"__proto__\")\n            return this;\n        if (!this.oneofs)\n            this.oneofs = {};\n        this.oneofs[object.name] = object;\n        object.onAdd(this);\n        return clearCache(this);\n    }\n    return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * Removes a nested object from this type.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this type\n */\nType.prototype.remove = function remove(object) {\n    if (object instanceof Field && object.extend === undefined) {\n        // See Type#add for the reason why extension fields are excluded here.\n\n        /* istanbul ignore if */\n        if (!this.fields || this.fields[object.name] !== object)\n            throw Error(object + \" is not a member of \" + this);\n\n        delete this.fields[object.name];\n        object.parent = null;\n        object.onRemove(this);\n        return clearCache(this);\n    }\n    if (object instanceof OneOf) {\n\n        /* istanbul ignore if */\n        if (!this.oneofs || this.oneofs[object.name] !== object)\n            throw Error(object + \" is not a member of \" + this);\n\n        delete this.oneofs[object.name];\n        object.parent = null;\n        object.onRemove(this);\n        return clearCache(this);\n    }\n    return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedId = function isReservedId(id) {\n    return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedName = function isReservedName(name) {\n    return Namespace.isReservedName(this.reserved, name);\n};\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.<string,*>} [properties] Properties to set\n * @returns {Message<{}>} Message instance\n */\nType.prototype.create = function create(properties) {\n    return new this.ctor(properties);\n};\n\n/**\n * Sets up {@link Type#encode|encode}, {@link Type#decode|decode} and {@link Type#verify|verify}.\n * @returns {Type} `this`\n */\nType.prototype.setup = function setup() {\n    // Sets up everything at once so that the prototype chain does not have to be re-evaluated\n    // multiple times (V8, soft-deopt prototype-check).\n\n    var fullName = this.fullName,\n        types    = [];\n    for (var i = 0; i < /* initializes */ this.fieldsArray.length; ++i)\n        types.push(this._fieldsArray[i].resolve().resolvedType);\n\n    // Replace setup methods with type-specific generated functions\n    this.encode = encoder(this)({\n        Writer : Writer,\n        types  : types,\n        util   : util\n    });\n    this.decode = decoder(this)({\n        Reader : Reader,\n        types  : types,\n        util   : util\n    });\n    this.verify = verifier(this)({\n        types : types,\n        util  : util\n    });\n    this.fromObject = converter.fromObject(this)({\n        types : types,\n        util  : util\n    });\n    this.toObject = converter.toObject(this)({\n        types : types,\n        util  : util\n    });\n\n    // Inject custom wrappers for common types\n    var wrapper = wrappers[fullName];\n    if (wrapper) {\n        var originalThis = Object.create(this);\n        // if (wrapper.fromObject) {\n            originalThis.fromObject = this.fromObject;\n            this.fromObject = wrapper.fromObject.bind(originalThis);\n        // }\n        // if (wrapper.toObject) {\n            originalThis.toObject = this.toObject;\n            this.toObject = wrapper.toObject.bind(originalThis);\n        // }\n    }\n\n    return this;\n};\n\n/**\n * Encodes a message of this type. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.<string,*>} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encode = function encode_setup(message, writer) { // eslint-disable-line no-unused-vars\n    return this.setup().encode.apply(this, arguments); // overrides this method\n};\n\n/**\n * Encodes a message of this type preceeded by its byte length as a varint. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.<string,*>} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encodeDelimited = function encodeDelimited(message, writer) {\n    return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();\n};\n\n/**\n * Decodes a message of this type.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Length of the message, if known beforehand\n * @param {number} [end] Expected group end tag, if decoding a group\n * @param {number} [depth] Current nesting depth\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError<{}>} If required fields are missing\n */\nType.prototype.decode = function decode_setup(reader, length, end, depth) {\n    return this.setup().decode(reader, length, end, depth); // overrides this method\n};\n\n/**\n * Decodes a message of this type preceeded by its byte length as a varint.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError} If required fields are missing\n */\nType.prototype.decodeDelimited = function decodeDelimited(reader) {\n    if (!(reader instanceof Reader))\n        reader = Reader.create(reader);\n    return this.decode(reader, reader.uint32());\n};\n\n/**\n * Verifies that field values are valid and that required fields are present.\n * @param {Object.<string,*>} message Plain object to verify\n * @param {number} [depth] Current nesting depth\n * @returns {null|string} `null` if valid, otherwise the reason why it is not\n */\nType.prototype.verify = function verify_setup(message, depth) {\n    return this.setup().verify(message, depth); // overrides this method\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.<string,*>} object Plain object to convert\n * @param {number} [depth] Current nesting depth\n * @returns {Message<{}>} Message instance\n */\nType.prototype.fromObject = function fromObject(object, depth) {\n    return this.setup().fromObject(object, depth);\n};\n\n/**\n * Conversion options as used by {@link Type#toObject} and {@link Message.toObject}.\n * @interface IConversionOptions\n * @property {Function} [longs] Long conversion type.\n * Valid values are `BigInt`, `String` and `Number` (the global types).\n * Defaults to copy the present value, which is a possibly unsafe number without and a {@link Long} with a long library.\n * @property {Function} [enums] Enum value conversion type.\n * Only valid value is `String` (the global type).\n * Defaults to copy the present value, which is the numeric id.\n * @property {Function} [bytes] Bytes value conversion type.\n * Valid values are `Array` and (a base64 encoded) `String` (the global types).\n * Defaults to copy the present value, which usually is a Buffer under node and an Uint8Array in the browser.\n * @property {boolean} [defaults=false] Also sets default values on the resulting object\n * @property {boolean} [arrays=false] Sets empty arrays for missing repeated fields even if `defaults=false`\n * @property {boolean} [objects=false] Sets empty objects for missing map fields even if `defaults=false`\n * @property {boolean} [oneofs=false] Includes virtual oneof properties set to the present field's name, if any\n * @property {boolean} [json=false] Performs additional JSON compatibility conversions, i.e. NaN and Infinity to strings\n */\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\nType.prototype.toObject = function toObject(message, options) { // eslint-disable-line no-unused-vars\n    return this.setup().toObject.apply(this, arguments);\n};\n\n/**\n * Decorator function as returned by {@link Type.d} (TypeScript).\n * @typedef TypeDecorator\n * @type {function}\n * @param {Constructor<T>} target Target constructor\n * @returns {undefined}\n * @template T extends Message<T>\n */\n\n/**\n * Type decorator (TypeScript).\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {TypeDecorator<T>} Decorator function\n * @template T extends Message<T>\n */\nType.d = function decorateType(typeName) {\n    return function typeDecorator(target) {\n        util.decorateType(target, typeName);\n    };\n};\n","\"use strict\";\nmodule.exports = Root;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Root.prototype = Object.create(Namespace.prototype)).constructor = Root).className = \"Root\";\n\nvar Field   = require(\"./field\"),\n    Enum    = require(\"./enum\"),\n    OneOf   = require(\"./oneof\"),\n    util    = require(\"./util\");\n\nvar Type,   // cyclic\n    parse,  // might be excluded\n    common; // \"\n\n/**\n * Constructs a new root namespace instance.\n * @classdesc Root namespace wrapping all types, enums, services, sub-namespaces etc. that belong together.\n * @extends NamespaceBase\n * @constructor\n * @param {Object.<string,*>} [options] Top level options\n */\nfunction Root(options) {\n    Namespace.call(this, \"\", options);\n\n    /**\n     * Deferred extension fields.\n     * @type {Field[]}\n     */\n    this.deferred = [];\n\n    /**\n     * Resolved file names of loaded files.\n     * @type {string[]}\n     */\n    this.files = [];\n\n    /**\n     * Edition, defaults to proto2 if unspecified.\n     * @type {string}\n     * @private\n     */\n    this._edition = \"proto2\";\n\n    /**\n     * Global lookup cache of fully qualified names.\n     * @type {Object.<string,ReflectionObject>}\n     * @private\n     */\n    this._fullyQualifiedObjects = {};\n}\n\n/**\n * Loads a namespace descriptor into a root namespace.\n * @param {INamespace} json Namespace descriptor\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Root} Root namespace\n */\nRoot.fromJSON = function fromJSON(json, root, depth) {\n    depth = util.checkDepth(depth);\n    if (!root)\n        root = new Root();\n    if (json.options)\n        root.setOptions(json.options);\n    return root.addJSON(json.nested, depth).resolveAll();\n};\n\n/**\n * Resolves the path of an imported file, relative to the importing origin.\n * This method exists so you can override it with your own logic in case your imports are scattered over multiple directories.\n * @function\n * @param {string} origin The file name of the importing file\n * @param {string} target The file name being imported\n * @returns {string|null} Resolved path to `target` or `null` to skip the file\n */\nRoot.prototype.resolvePath = util.path.resolve;\n\n/**\n * Fetch content from file path or url\n * This method exists so you can override it with your own logic.\n * @function\n * @param {string} path File path or url\n * @param {FetchCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.fetch = util.fetch;\n\n// A symbol-like function to safely signal synchronous loading\n/* istanbul ignore next */\nfunction SYNC() {} // eslint-disable-line no-empty-function\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} options Parse options\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.load = function load(filename, options, callback) {\n    if (typeof options === \"function\") {\n        callback = options;\n        options = undefined;\n    }\n    var self = this;\n    if (!callback) {\n        return util.asPromise(load, self, filename, options);\n    }\n\n    var sync = callback === SYNC; // undocumented\n\n    // Finishes loading by calling the callback (exactly once)\n    function finish(err, root) {\n        /* istanbul ignore if */\n        if (!callback) {\n            return;\n        }\n        if (sync) {\n            throw err;\n        }\n        if (root) {\n            root.resolveAll();\n        }\n        var cb = callback;\n        callback = null;\n        cb(err, root);\n    }\n\n    // Bundled definition existence checking\n    function getBundledFileName(filename) {\n        var idx = filename.lastIndexOf(\"google/protobuf/\");\n        if (idx > -1) {\n            var altname = filename.substring(idx);\n            if (altname in common) return altname;\n        }\n        return null;\n    }\n\n    // Processes a single file\n    function process(filename, source, depth) {\n        if (depth === undefined)\n            depth = 0;\n        try {\n            if (depth > util.recursionLimit)\n                throw Error(\"max depth exceeded\");\n            if (util.isString(source) && source.charAt(0) === \"{\")\n                source = JSON.parse(source);\n            if (!util.isString(source))\n                self.setOptions(source.options).addJSON(source.nested);\n            else {\n                parse.filename = filename;\n                var parsed = parse(source, self, options),\n                    resolved,\n                    i = 0;\n                if (parsed.imports)\n                    for (; i < parsed.imports.length; ++i)\n                        if (resolved = getBundledFileName(parsed.imports[i]) || self.resolvePath(filename, parsed.imports[i]))\n                            fetch(resolved, false, depth + 1);\n                if (parsed.weakImports)\n                    for (i = 0; i < parsed.weakImports.length; ++i)\n                        if (resolved = getBundledFileName(parsed.weakImports[i]) || self.resolvePath(filename, parsed.weakImports[i]))\n                            fetch(resolved, true, depth + 1);\n            }\n        } catch (err) {\n            finish(err);\n        }\n        if (!sync && !queued) {\n            finish(null, self); // only once anyway\n        }\n    }\n\n    // Fetches a single file\n    function fetch(filename, weak, depth) {\n        if (depth === undefined)\n            depth = 0;\n        filename = getBundledFileName(filename) || filename;\n\n        // Skip if already loaded / attempted\n        if (self.files.indexOf(filename) > -1) {\n            return;\n        }\n        self.files.push(filename);\n\n        // Shortcut bundled definitions\n        if (filename in common) {\n            if (sync) {\n                process(filename, common[filename], depth);\n            } else {\n                ++queued;\n                setTimeout(function() {\n                    --queued;\n                    process(filename, common[filename], depth);\n                });\n            }\n            return;\n        }\n\n        // Otherwise fetch from disk or network\n        if (sync) {\n            var source;\n            try {\n                source = util.fs.readFileSync(filename).toString(\"utf8\");\n            } catch (err) {\n                if (!weak)\n                    finish(err);\n                return;\n            }\n            process(filename, source, depth);\n        } else {\n            ++queued;\n            self.fetch(filename, function(err, source) {\n                --queued;\n                /* istanbul ignore if */\n                if (!callback) {\n                    return; // terminated meanwhile\n                }\n                if (err) {\n                    /* istanbul ignore else */\n                    if (!weak)\n                        finish(err);\n                    else if (!queued) // can't be covered reliably\n                        finish(null, self);\n                    return;\n                }\n                process(filename, source, depth);\n            });\n        }\n    }\n    var queued = 0;\n\n    // Assembling the root namespace doesn't require working type\n    // references anymore, so we can load everything in parallel\n    if (util.isString(filename)) {\n        filename = [ filename ];\n    }\n    for (var i = 0, resolved; i < filename.length; ++i)\n        if (resolved = self.resolvePath(\"\", filename[i]))\n            fetch(resolved);\n    if (sync) {\n        self.resolveAll();\n        return self;\n    }\n    if (!queued) {\n        finish(null, self);\n    }\n\n    return self;\n};\n// function load(filename:string, options:IParseOptions, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and returns a promise.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Promise<Root>} Promise\n * @variation 3\n */\n// function load(filename:string, [options:IParseOptions]):Promise<Root>\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into this root namespace (node only).\n * @function Root#loadSync\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n */\nRoot.prototype.loadSync = function loadSync(filename, options) {\n    if (!util.isNode)\n        throw Error(\"not supported\");\n    return this.load(filename, options, SYNC);\n};\n\n/**\n * @override\n */\nRoot.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    if (this.deferred.length)\n        throw Error(\"unresolvable extensions: \" + this.deferred.map(function(field) {\n            return \"'extend \" + field.extend + \"' in \" + field.parent.fullName;\n        }).join(\", \"));\n    return Namespace.prototype.resolveAll.call(this);\n};\n\n// only uppercased (and thus conflict-free) children are exposed, see below\nvar exposeRe = /^[A-Z]/;\n\n/**\n * Handles a deferred declaring extension field by creating a sister field to represent it within its extended type.\n * @param {Root} root Root instance\n * @param {Field} field Declaring extension field witin the declaring type\n * @returns {boolean} `true` if successfully added to the extended type, `false` otherwise\n * @inner\n * @ignore\n */\nfunction tryHandleExtension(root, field) {\n    var extendedType = field.parent.lookup(field.extend);\n    if (extendedType) {\n        var sisterField = new Field(field.fullName, field.id, field.type, field.rule, undefined, field.options);\n        //do not allow to extend same field twice to prevent the error\n        if (extendedType.get(sisterField.name)) {\n            return true;\n        }\n        sisterField.declaringField = field;\n        field.extensionField = sisterField;\n        extendedType.add(sisterField);\n        return true;\n    }\n    return false;\n}\n\n/**\n * Called when any object is added to this root or its sub-namespaces.\n * @param {ReflectionObject} object Object added\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleAdd = function _handleAdd(object) {\n    if (object instanceof Field) {\n\n        if (/* an extension field (implies not part of a oneof) */ object.extend !== undefined && /* not already handled */ !object.extensionField)\n            if (!tryHandleExtension(this, object))\n                this.deferred.push(object);\n\n    } else if (object instanceof Enum) {\n\n        if (exposeRe.test(object.name))\n            object.parent[object.name] = object.values; // expose enum values as property of its parent\n\n    } else if (!(object instanceof OneOf)) /* everything else is a namespace */ {\n\n        if (object instanceof Type) // Try to handle any deferred extensions\n            for (var i = 0; i < this.deferred.length;)\n                if (tryHandleExtension(this, this.deferred[i]))\n                    this.deferred.splice(i, 1);\n                else\n                    ++i;\n        for (var j = 0; j < /* initializes */ object.nestedArray.length; ++j) // recurse into the namespace\n            this._handleAdd(object._nestedArray[j]);\n        if (exposeRe.test(object.name))\n            object.parent[object.name] = object; // expose namespace as property of its parent\n    }\n\n    if (object instanceof Type || object instanceof Enum || object instanceof Field) {\n        // Only store types and enums for quick lookup during resolve.\n        this._fullyQualifiedObjects[object.fullName] = object;\n    }\n\n    // The above also adds uppercased (and thus conflict-free) nested types, services and enums as\n    // properties of namespaces just like static code does. This allows using a .d.ts generated for\n    // a static module with reflection-based solutions where the condition is met.\n};\n\n/**\n * Called when any object is removed from this root or its sub-namespaces.\n * @param {ReflectionObject} object Object removed\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleRemove = function _handleRemove(object) {\n    if (object instanceof Field) {\n\n        if (/* an extension field */ object.extend !== undefined) {\n            if (/* already handled */ object.extensionField) { // remove its sister field\n                object.extensionField.parent.remove(object.extensionField);\n                object.extensionField = null;\n            } else { // cancel the extension\n                var index = this.deferred.indexOf(object);\n                /* istanbul ignore else */\n                if (index > -1)\n                    this.deferred.splice(index, 1);\n            }\n        }\n\n    } else if (object instanceof Enum) {\n\n        if (exposeRe.test(object.name))\n            delete object.parent[object.name]; // unexpose enum values\n\n    } else if (object instanceof Namespace) {\n\n        for (var i = 0; i < /* initializes */ object.nestedArray.length; ++i) // recurse into the namespace\n            this._handleRemove(object._nestedArray[i]);\n\n        if (exposeRe.test(object.name))\n            delete object.parent[object.name]; // unexpose namespaces\n\n    }\n\n    delete this._fullyQualifiedObjects[object.fullName];\n};\n\n// Sets up cyclic dependencies (called in index-light)\nRoot._configure = function(Type_, parse_, common_) {\n    Type   = Type_;\n    parse  = parse_;\n    common = common_;\n};\n","\"use strict\";\n\n/**\n * Various utility functions.\n * @namespace\n */\nvar util = module.exports = require(\"./util/minimal\");\n\nvar roots = require(\"./roots\");\n\nvar Type, // cyclic\n    Enum;\n\nutil.codegen = require(\"@protobufjs/codegen\");\nutil.fetch   = require(\"@protobufjs/fetch\");\nutil.path    = require(\"@protobufjs/path\");\nutil.patterns = require(\"./util/patterns\");\n\nvar reservedRe = util.patterns.reservedRe;\n\n/**\n * Node's fs module if available.\n * @type {Object.<string,*>}\n */\nutil.fs = require(\"./util/fs\");\n\n/**\n * Checks a recursion depth.\n * @param {number|undefined} depth Depth of recursion\n * @returns {number} Depth of recursion\n * @throws {Error} If depth exceeds util.recursionLimit\n */\nutil.checkDepth = function checkDepth(depth) {\n    if (depth === undefined)\n        depth = 0;\n    if (depth > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    return depth;\n};\n\n/**\n * Converts an object's values to an array.\n * @param {Object.<string,*>} object Object to convert\n * @returns {Array.<*>} Converted array\n */\nutil.toArray = function toArray(object) {\n    if (object) {\n        var keys  = Object.keys(object),\n            array = new Array(keys.length),\n            index = 0;\n        while (index < keys.length)\n            array[index] = object[keys[index++]];\n        return array;\n    }\n    return [];\n};\n\n/**\n * Converts an array of keys immediately followed by their respective value to an object, omitting undefined values.\n * @param {Array.<*>} array Array to convert\n * @returns {Object.<string,*>} Converted object\n */\nutil.toObject = function toObject(array) {\n    var object = {},\n        index  = 0;\n    while (index < array.length) {\n        var key = array[index++],\n            val = array[index++];\n        if (val !== undefined)\n            object[key] = val;\n    }\n    return object;\n};\n\n/**\n * Tests whether the specified name is a reserved word in JS.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nutil.isReserved = function isReserved(name) {\n    return reservedRe.test(name);\n};\n\n/**\n * Returns a safe property accessor for the specified property name.\n * @param {string} prop Property name\n * @returns {string} Safe accessor\n */\nutil.safeProp = function safeProp(prop) {\n    if (!/^[$\\w_]+$/.test(prop) || reservedRe.test(prop))\n        return \"[\" + JSON.stringify(prop) + \"]\";\n    return \".\" + prop;\n};\n\n/**\n * Converts the first character of a string to upper case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.ucFirst = function ucFirst(str) {\n    return str.charAt(0).toUpperCase() + str.substring(1);\n};\n\nvar camelCaseRe = /_([a-z])/g;\n\n/**\n * Converts a string to camel case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.camelCase = function camelCase(str) {\n    return str.substring(0, 1)\n         + str.substring(1)\n               .replace(camelCaseRe, function($0, $1) { return $1.toUpperCase(); });\n};\n\n/**\n * Compares reflected fields by id.\n * @param {Field} a First field\n * @param {Field} b Second field\n * @returns {number} Comparison value\n */\nutil.compareFieldsById = function compareFieldsById(a, b) {\n    return a.id - b.id;\n};\n\n/**\n * Decorator helper for types (TypeScript).\n * @param {Constructor<T>} ctor Constructor function\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {Type} Reflected type\n * @template T extends Message<T>\n * @property {Root} root Decorators root\n */\nutil.decorateType = function decorateType(ctor, typeName) {\n\n    /* istanbul ignore if */\n    if (ctor.$type) {\n        if (typeName && ctor.$type.name !== typeName) {\n            util.decorateRoot.remove(ctor.$type);\n            ctor.$type.name = typeName;\n            util.decorateRoot.add(ctor.$type);\n        }\n        return ctor.$type;\n    }\n\n    /* istanbul ignore next */\n    if (!Type)\n        Type = require(\"./type\");\n\n    var type = new Type(typeName || ctor.name);\n    util.decorateRoot.add(type);\n    type.ctor = ctor; // sets up .encode, .decode etc.\n    Object.defineProperty(ctor, \"$type\", { value: type, enumerable: false });\n    Object.defineProperty(ctor.prototype, \"$type\", { value: type, enumerable: false });\n    return type;\n};\n\nvar decorateEnumIndex = 0;\n\n/**\n * Decorator helper for enums (TypeScript).\n * @param {Object} object Enum object\n * @returns {Enum} Reflected enum\n */\nutil.decorateEnum = function decorateEnum(object) {\n\n    /* istanbul ignore if */\n    if (object.$type)\n        return object.$type;\n\n    /* istanbul ignore next */\n    if (!Enum)\n        Enum = require(\"./enum\");\n\n    var enm = new Enum(\"Enum\" + decorateEnumIndex++, object);\n    util.decorateRoot.add(enm);\n    Object.defineProperty(object, \"$type\", { value: enm, enumerable: false });\n    return enm;\n};\n\n\n/**\n * Sets the value of a property by property path. If a value already exists, it is turned to an array\n * @param {Object.<string,*>} dst Destination object\n * @param {string} path dot '.' delimited path of the property to set\n * @param {Object} value the value to set\n * @param {boolean|undefined} [ifNotSet] Sets the option only if it isn't currently set\n * @returns {Object.<string,*>} Destination object\n */\nutil.setProperty = function setProperty(dst, path, value, ifNotSet) {\n    function setProp(dst, path, value) {\n        var part = path.shift();\n        if (util.isUnsafeProperty(part))\n            return dst;\n        if (path.length > 0) {\n            dst[part] = setProp(dst[part] || {}, path, value);\n        } else {\n            var prevValue = dst[part];\n            if (prevValue && ifNotSet)\n                return dst;\n            if (prevValue)\n                value = [].concat(prevValue).concat(value);\n            dst[part] = value;\n        }\n        return dst;\n    }\n\n    if (typeof dst !== \"object\")\n        throw TypeError(\"dst must be an object\");\n    if (!path)\n        throw TypeError(\"path must be specified\");\n\n    path = path.split(\".\");\n    if (path.length > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    return setProp(dst, path, value);\n};\n\n/**\n * Decorator root (TypeScript).\n * @name util.decorateRoot\n * @type {Root}\n * @readonly\n */\nObject.defineProperty(util, \"decorateRoot\", {\n    get: function() {\n        return roots[\"decorated\"] || (roots[\"decorated\"] = new (require(\"./root\"))());\n    }\n});\n","\"use strict\";\n\n/**\n * Common type constants.\n * @namespace\n */\nvar types = exports;\n\nvar util = require(\"./util\");\n\nvar s = [\n    \"double\",   // 0\n    \"float\",    // 1\n    \"int32\",    // 2\n    \"uint32\",   // 3\n    \"sint32\",   // 4\n    \"fixed32\",  // 5\n    \"sfixed32\", // 6\n    \"int64\",    // 7\n    \"uint64\",   // 8\n    \"sint64\",   // 9\n    \"fixed64\",  // 10\n    \"sfixed64\", // 11\n    \"bool\",     // 12\n    \"string\",   // 13\n    \"bytes\"     // 14\n];\n\nfunction bake(values, offset) {\n    var i = 0, o = Object.create(null);\n    offset |= 0;\n    while (i < values.length) o[s[i + offset]] = values[i++];\n    return o;\n}\n\n/**\n * Basic type wire types.\n * @type {Object.<string,number>}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n * @property {number} bytes=2 Ldelim wire type\n */\ntypes.basic = bake([\n    /* double   */ 1,\n    /* float    */ 5,\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 5,\n    /* sfixed32 */ 5,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1,\n    /* bool     */ 0,\n    /* string   */ 2,\n    /* bytes    */ 2\n]);\n\n/**\n * Basic type defaults.\n * @type {Object.<string,*>}\n * @const\n * @property {number} double=0 Double default\n * @property {number} float=0 Float default\n * @property {number} int32=0 Int32 default\n * @property {number} uint32=0 Uint32 default\n * @property {number} sint32=0 Sint32 default\n * @property {number} fixed32=0 Fixed32 default\n * @property {number} sfixed32=0 Sfixed32 default\n * @property {number} int64=0 Int64 default\n * @property {number} uint64=0 Uint64 default\n * @property {number} sint64=0 Sint32 default\n * @property {number} fixed64=0 Fixed64 default\n * @property {number} sfixed64=0 Sfixed64 default\n * @property {boolean} bool=false Bool default\n * @property {string} string=\"\" String default\n * @property {Array.<number>} bytes=Array(0) Bytes default\n * @property {null} message=null Message default\n */\ntypes.defaults = bake([\n    /* double   */ 0,\n    /* float    */ 0,\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 0,\n    /* sfixed32 */ 0,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 0,\n    /* sfixed64 */ 0,\n    /* bool     */ false,\n    /* string   */ \"\",\n    /* bytes    */ util.emptyArray,\n    /* message  */ null\n]);\n\n/**\n * Basic long type wire types.\n * @type {Object.<string,number>}\n * @const\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n */\ntypes.long = bake([\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1\n], 7);\n\n/**\n * Allowed types for map keys with their associated wire type.\n * @type {Object.<string,number>}\n * @const\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n */\ntypes.mapKey = bake([\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 5,\n    /* sfixed32 */ 5,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1,\n    /* bool     */ 0,\n    /* string   */ 2\n], 2);\n\n/**\n * Allowed types for packed repeated fields with their associated wire type.\n * @type {Object.<string,number>}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n */\ntypes.packed = bake([\n    /* double   */ 1,\n    /* float    */ 5,\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 5,\n    /* sfixed32 */ 5,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1,\n    /* bool     */ 0\n]);\n","\"use strict\";\nmodule.exports = Field;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Field.prototype = Object.create(ReflectionObject.prototype)).constructor = Field).className = \"Field\";\n\nvar Enum  = require(\"./enum\"),\n    types = require(\"./types\"),\n    util  = require(\"./util\");\n\nvar Type; // cyclic\n\nvar ruleRe = /^required|optional|repeated$/;\n\n/**\n * Constructs a new message field instance. Note that {@link MapField|map fields} have their own class.\n * @name Field\n * @classdesc Reflected message field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.<string,*>} [rule=\"optional\"] Field rule\n * @param {string|Object.<string,*>} [extend] Extended type if different from parent\n * @param {Object.<string,*>} [options] Declared options\n */\n\n/**\n * Constructs a field from a field descriptor.\n * @param {string} name Field name\n * @param {IField} json Field descriptor\n * @returns {Field} Created field\n * @throws {TypeError} If arguments are invalid\n */\nField.fromJSON = function fromJSON(name, json) {\n    var field = new Field(name, json.id, json.type, json.rule, json.extend, json.options, json.comment);\n    if (json.edition)\n        field._edition = json.edition;\n    field._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return field;\n};\n\n/**\n * Not an actual constructor. Use {@link Field} instead.\n * @classdesc Base class of all reflected message fields. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports FieldBase\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.<string,*>} [rule=\"optional\"] Field rule\n * @param {string|Object.<string,*>} [extend] Extended type if different from parent\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction Field(name, id, type, rule, extend, options, comment) {\n\n    if (util.isObject(rule)) {\n        comment = extend;\n        options = rule;\n        rule = extend = undefined;\n    } else if (util.isObject(extend)) {\n        comment = options;\n        options = extend;\n        extend = undefined;\n    }\n\n    ReflectionObject.call(this, name, options);\n\n    if (!util.isInteger(id) || id < 0)\n        throw TypeError(\"id must be a non-negative integer\");\n\n    if (!util.isString(type))\n        throw TypeError(\"type must be a string\");\n\n    if (rule !== undefined && !ruleRe.test(rule = rule.toString().toLowerCase()))\n        throw TypeError(\"rule must be a string rule\");\n\n    if (extend !== undefined && !util.isString(extend))\n        throw TypeError(\"extend must be a string\");\n\n    /**\n     * Field rule, if any.\n     * @type {string|undefined}\n     */\n    if (rule === \"proto3_optional\") {\n        rule = \"optional\";\n    }\n    this.rule = rule && rule !== \"optional\" ? rule : undefined; // toJSON\n\n    /**\n     * Field type.\n     * @type {string}\n     */\n    this.type = type; // toJSON\n\n    /**\n     * Unique field id.\n     * @type {number}\n     */\n    this.id = id; // toJSON, marker\n\n    /**\n     * Extended type if different from parent.\n     * @type {string|undefined}\n     */\n    this.extend = extend || undefined; // toJSON\n\n    /**\n     * Whether this field is repeated.\n     * @type {boolean}\n     */\n    this.repeated = rule === \"repeated\";\n\n    /**\n     * Whether this field is a map or not.\n     * @type {boolean}\n     */\n    this.map = false;\n\n    /**\n     * Message this field belongs to.\n     * @type {Type|null}\n     */\n    this.message = null;\n\n    /**\n     * OneOf this field belongs to, if any,\n     * @type {OneOf|null}\n     */\n    this.partOf = null;\n\n    /**\n     * The field type's default value.\n     * @type {*}\n     */\n    this.typeDefault = null;\n\n    /**\n     * The field's default value on prototypes.\n     * @type {*}\n     */\n    this.defaultValue = null;\n\n    /**\n     * Whether this field's value should be treated as a long.\n     * @type {boolean}\n     */\n    this.long = util.Long ? types.long[type] !== undefined : /* istanbul ignore next */ false;\n\n    /**\n     * Whether this field's value is a buffer.\n     * @type {boolean}\n     */\n    this.bytes = type === \"bytes\";\n\n    /**\n     * Resolved type if not a basic type.\n     * @type {Type|Enum|null}\n     */\n    this.resolvedType = null;\n\n    /**\n     * Sister-field within the extended type if a declaring extension field.\n     * @type {Field|null}\n     */\n    this.extensionField = null;\n\n    /**\n     * Sister-field within the declaring namespace if an extended field.\n     * @type {Field|null}\n     */\n    this.declaringField = null;\n\n    /**\n     * Comment for this field.\n     * @type {string|null}\n     */\n    this.comment = comment;\n}\n\n/**\n * Determines whether this field is required.\n * @name Field#required\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"required\", {\n    get: function() {\n        return this._features.field_presence === \"LEGACY_REQUIRED\";\n    }\n});\n\n/**\n * Determines whether this field is not required.\n * @name Field#optional\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"optional\", {\n    get: function() {\n        return !this.required;\n    }\n});\n\n/**\n * Determines whether this field uses tag-delimited encoding.  In proto2 this\n * corresponded to group syntax.\n * @name Field#delimited\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"delimited\", {\n    get: function() {\n        return this.resolvedType instanceof Type &&\n            this._features.message_encoding === \"DELIMITED\";\n    }\n});\n\n/**\n * Determines whether this field is packed. Only relevant when repeated.\n * @name Field#packed\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"packed\", {\n    get: function() {\n        return this._features.repeated_field_encoding === \"PACKED\";\n    }\n});\n\n/**\n * Determines whether this field tracks presence.\n * @name Field#hasPresence\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"hasPresence\", {\n    get: function() {\n        if (this.repeated || this.map) {\n            return false;\n        }\n        return this.partOf || // oneofs\n            this.declaringField || this.extensionField || // extensions\n            this._features.field_presence !== \"IMPLICIT\";\n    }\n});\n\n/**\n * @override\n */\nField.prototype.setOption = function setOption(name, value, ifNotSet) {\n    return ReflectionObject.prototype.setOption.call(this, name, value, ifNotSet);\n};\n\n/**\n * Field descriptor.\n * @interface IField\n * @property {string} [rule=\"optional\"] Field rule\n * @property {string} type Field type\n * @property {number} id Field id\n * @property {Object.<string,*>} [options] Field options\n */\n\n/**\n * Extension field descriptor.\n * @interface IExtensionField\n * @extends IField\n * @property {string} extend Extended type\n */\n\n/**\n * Converts this field to a field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IField} Field descriptor\n */\nField.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\" , this._editionToJSON(),\n        \"rule\"    , this.rule !== \"optional\" && this.rule || undefined,\n        \"type\"    , this.type,\n        \"id\"      , this.id,\n        \"extend\"  , this.extend,\n        \"options\" , this.options,\n        \"comment\" , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * Resolves this field's type references.\n * @returns {Field} `this`\n * @throws {Error} If any reference cannot be resolved\n */\nField.prototype.resolve = function resolve() {\n\n    if (this.resolved)\n        return this;\n\n    if ((this.typeDefault = types.defaults[this.type]) === undefined) { // if not a basic type, resolve it\n        this.resolvedType = (this.declaringField ? this.declaringField.parent : this.parent).lookupTypeOrEnum(this.type);\n        if (this.resolvedType instanceof Type)\n            this.typeDefault = null;\n        else // instanceof Enum\n            this.typeDefault = this.resolvedType.values[Object.keys(this.resolvedType.values)[0]]; // first defined\n    } else if (this.options && this.options.proto3_optional) {\n        // proto3 scalar value marked optional; should default to null\n        this.typeDefault = null;\n    }\n\n    // use explicitly set default value if present\n    if (this.options && this.options[\"default\"] != null) {\n        this.typeDefault = this.options[\"default\"];\n        if (this.resolvedType instanceof Enum && typeof this.typeDefault === \"string\")\n            this.typeDefault = this.resolvedType.values[this.typeDefault];\n    }\n\n    // remove unnecessary options\n    if (this.options) {\n        if (this.options.packed !== undefined && this.resolvedType && !(this.resolvedType instanceof Enum))\n            delete this.options.packed;\n        if (!Object.keys(this.options).length)\n            this.options = undefined;\n    }\n\n    // convert to internal data type if necesssary\n    if (this.long) {\n        this.typeDefault = util.Long.fromNumber(this.typeDefault, this.type === \"uint64\" || this.type === \"fixed64\");\n\n        /* istanbul ignore else */\n        if (Object.freeze)\n            Object.freeze(this.typeDefault); // long instances are meant to be immutable anyway (i.e. use small int cache that even requires it)\n\n    } else if (this.bytes && typeof this.typeDefault === \"string\") {\n        var buf;\n        if (util.base64.test(this.typeDefault))\n            util.base64.decode(this.typeDefault, buf = util.newBuffer(util.base64.length(this.typeDefault)), 0);\n        else\n            util.utf8.write(this.typeDefault, buf = util.newBuffer(util.utf8.length(this.typeDefault)), 0);\n        this.typeDefault = buf;\n    }\n\n    // take special care of maps and repeated fields\n    if (this.map)\n        this.defaultValue = util.emptyObject;\n    else if (this.repeated)\n        this.defaultValue = util.emptyArray;\n    else\n        this.defaultValue = this.typeDefault;\n\n    // ensure proper value on prototype\n    if (this.parent instanceof Type)\n        this.parent.ctor.prototype[this.name] = this.defaultValue;\n\n    return ReflectionObject.prototype.resolve.call(this);\n};\n\n/**\n * Infers field features from legacy syntax that may have been specified differently.\n * in older editions.\n * @param {string|undefined} edition The edition this proto is on, or undefined if pre-editions\n * @returns {object} The feature values to override\n */\nField.prototype._inferLegacyProtoFeatures = function _inferLegacyProtoFeatures(edition) {\n    if (edition !== \"proto2\" && edition !== \"proto3\") {\n        return {};\n    }\n\n    var features = {};\n\n    if (this.rule === \"required\") {\n        features.field_presence = \"LEGACY_REQUIRED\";\n    }\n    if (this.parent && types.defaults[this.type] === undefined) {\n        // We can't use resolvedType because types may not have been resolved yet.  However,\n        // legacy groups are always in the same scope as the field so we don't have to do a\n        // full scan of the tree.\n        var type = this.parent.get(this.type.split(\".\").pop());\n        if (type && type instanceof Type && type.group) {\n            features.message_encoding = \"DELIMITED\";\n        }\n    }\n    if (this.getOption(\"packed\") === true) {\n        features.repeated_field_encoding = \"PACKED\";\n    } else if (this.getOption(\"packed\") === false) {\n        features.repeated_field_encoding = \"EXPANDED\";\n    }\n    return features;\n};\n\n/**\n * @override\n */\nField.prototype._resolveFeatures = function _resolveFeatures(edition) {\n    return ReflectionObject.prototype._resolveFeatures.call(this, this._edition || edition);\n};\n\n/**\n * Decorator function as returned by {@link Field.d} and {@link MapField.d} (TypeScript).\n * @typedef FieldDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} fieldName Field name\n * @returns {undefined}\n */\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"string\"|\"bool\"|\"bytes\"|Object} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @param {T} [defaultValue] Default value\n * @returns {FieldDecorator} Decorator function\n * @template T extends number | number[] | Long | Long[] | string | string[] | boolean | boolean[] | Uint8Array | Uint8Array[] | Buffer | Buffer[]\n */\nField.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) {\n\n    // submessage: decorate the submessage and use its name as the type\n    if (typeof fieldType === \"function\")\n        fieldType = util.decorateType(fieldType).name;\n\n    // enum reference: create a reflected copy of the enum and keep reuseing it\n    else if (fieldType && typeof fieldType === \"object\")\n        fieldType = util.decorateEnum(fieldType).name;\n\n    return function fieldDecorator(prototype, fieldName) {\n        util.decorateType(prototype.constructor)\n            .add(new Field(fieldName, fieldId, fieldType, fieldRule, { \"default\": defaultValue }));\n    };\n};\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {Constructor<T>|string} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @returns {FieldDecorator} Decorator function\n * @template T extends Message<T>\n * @variation 2\n */\n// like Field.d but without a default value\n\n// Sets up cyclic dependencies (called in index-light)\nField._configure = function configure(Type_) {\n    Type = Type_;\n};\n","\"use strict\";\nmodule.exports = OneOf;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((OneOf.prototype = Object.create(ReflectionObject.prototype)).constructor = OneOf).className = \"OneOf\";\n\nvar Field = require(\"./field\"),\n    util  = require(\"./util\");\n\n/**\n * Constructs a new oneof instance.\n * @classdesc Reflected oneof.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Oneof name\n * @param {string[]|Object.<string,*>} [fieldNames] Field names\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction OneOf(name, fieldNames, options, comment) {\n    if (!Array.isArray(fieldNames)) {\n        options = fieldNames;\n        fieldNames = undefined;\n    }\n    ReflectionObject.call(this, name, options);\n\n    /* istanbul ignore if */\n    if (!(fieldNames === undefined || Array.isArray(fieldNames)))\n        throw TypeError(\"fieldNames must be an Array\");\n\n    /**\n     * Field names that belong to this oneof.\n     * @type {string[]}\n     */\n    this.oneof = fieldNames || []; // toJSON, marker\n\n    /**\n     * Fields that belong to this oneof as an array for iteration.\n     * @type {Field[]}\n     * @readonly\n     */\n    this.fieldsArray = []; // declared readonly for conformance, possibly not yet added to parent\n\n    /**\n     * Comment for this field.\n     * @type {string|null}\n     */\n    this.comment = comment;\n}\n\n/**\n * Oneof descriptor.\n * @interface IOneOf\n * @property {Array.<string>} oneof Oneof field names\n * @property {Object.<string,*>} [options] Oneof options\n */\n\n/**\n * Constructs a oneof from a oneof descriptor.\n * @param {string} name Oneof name\n * @param {IOneOf} json Oneof descriptor\n * @returns {OneOf} Created oneof\n * @throws {TypeError} If arguments are invalid\n */\nOneOf.fromJSON = function fromJSON(name, json) {\n    return new OneOf(name, json.oneof, json.options, json.comment);\n};\n\n/**\n * Converts this oneof to a oneof descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IOneOf} Oneof descriptor\n */\nOneOf.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"options\" , this.options,\n        \"oneof\"   , this.oneof,\n        \"comment\" , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * Adds the fields of the specified oneof to the parent if not already done so.\n * @param {OneOf} oneof The oneof\n * @returns {undefined}\n * @inner\n * @ignore\n */\nfunction addFieldsToParent(oneof) {\n    if (oneof.parent)\n        for (var i = 0; i < oneof.fieldsArray.length; ++i)\n            if (!oneof.fieldsArray[i].parent)\n                oneof.parent.add(oneof.fieldsArray[i]);\n}\n\n/**\n * Adds a field to this oneof and removes it from its current parent, if any.\n * @param {Field} field Field to add\n * @returns {OneOf} `this`\n */\nOneOf.prototype.add = function add(field) {\n\n    /* istanbul ignore if */\n    if (!(field instanceof Field))\n        throw TypeError(\"field must be a Field\");\n\n    if (field.parent && field.parent !== this.parent)\n        field.parent.remove(field);\n    this.oneof.push(field.name);\n    this.fieldsArray.push(field);\n    field.partOf = this; // field.parent remains null\n    addFieldsToParent(this);\n    return this;\n};\n\n/**\n * Removes a field from this oneof and puts it back to the oneof's parent.\n * @param {Field} field Field to remove\n * @returns {OneOf} `this`\n */\nOneOf.prototype.remove = function remove(field) {\n\n    /* istanbul ignore if */\n    if (!(field instanceof Field))\n        throw TypeError(\"field must be a Field\");\n\n    var index = this.fieldsArray.indexOf(field);\n\n    /* istanbul ignore if */\n    if (index < 0)\n        throw Error(field + \" is not a member of \" + this);\n\n    this.fieldsArray.splice(index, 1);\n    index = this.oneof.indexOf(field.name);\n\n    /* istanbul ignore else */\n    if (index > -1) // theoretical\n        this.oneof.splice(index, 1);\n\n    field.partOf = null;\n    return this;\n};\n\n/**\n * @override\n */\nOneOf.prototype.onAdd = function onAdd(parent) {\n    ReflectionObject.prototype.onAdd.call(this, parent);\n    var self = this;\n    // Collect present fields\n    for (var i = 0; i < this.oneof.length; ++i) {\n        var field = parent.get(this.oneof[i]);\n        if (field && !field.partOf) {\n            field.partOf = self;\n            self.fieldsArray.push(field);\n        }\n    }\n    // Add not yet present fields\n    addFieldsToParent(this);\n};\n\n/**\n * @override\n */\nOneOf.prototype.onRemove = function onRemove(parent) {\n    for (var i = 0, field; i < this.fieldsArray.length; ++i)\n        if ((field = this.fieldsArray[i]).parent)\n            field.parent.remove(field);\n    ReflectionObject.prototype.onRemove.call(this, parent);\n};\n\n/**\n * Determines whether this field corresponds to a synthetic oneof created for\n * a proto3 optional field.  No behavioral logic should depend on this, but it\n * can be relevant for reflection.\n * @name OneOf#isProto3Optional\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(OneOf.prototype, \"isProto3Optional\", {\n    get: function() {\n        if (this.fieldsArray == null || this.fieldsArray.length !== 1) {\n            return false;\n        }\n\n        var field = this.fieldsArray[0];\n        return field.options != null && field.options[\"proto3_optional\"] === true;\n    }\n});\n\n/**\n * Decorator function as returned by {@link OneOf.d} (TypeScript).\n * @typedef OneOfDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} oneofName OneOf name\n * @returns {undefined}\n */\n\n/**\n * OneOf decorator (TypeScript).\n * @function\n * @param {...string} fieldNames Field names\n * @returns {OneOfDecorator} Decorator function\n * @template T extends string\n */\nOneOf.d = function decorateOneOf() {\n    var fieldNames = new Array(arguments.length),\n        index = 0;\n    while (index < arguments.length)\n        fieldNames[index] = arguments[index++];\n    return function oneOfDecorator(prototype, oneofName) {\n        util.decorateType(prototype.constructor)\n            .add(new OneOf(oneofName, fieldNames));\n        Object.defineProperty(prototype, oneofName, {\n            get: util.oneOfGetter(fieldNames),\n            set: util.oneOfSetter(fieldNames)\n        });\n    };\n};\n","\"use strict\";\nmodule.exports = ReflectionObject;\n\nReflectionObject.className = \"ReflectionObject\";\n\nconst OneOf = require(\"./oneof\");\nvar util = require(\"./util\");\n\nvar Root; // cyclic\n\n/* eslint-disable no-warning-comments */\n// TODO: Replace with embedded proto.\nvar editions2023Defaults = {enum_type: \"OPEN\", field_presence: \"EXPLICIT\", json_format: \"ALLOW\", message_encoding: \"LENGTH_PREFIXED\", repeated_field_encoding: \"PACKED\", utf8_validation: \"VERIFY\"};\nvar proto2Defaults = {enum_type: \"CLOSED\", field_presence: \"EXPLICIT\", json_format: \"LEGACY_BEST_EFFORT\", message_encoding: \"LENGTH_PREFIXED\", repeated_field_encoding: \"EXPANDED\", utf8_validation: \"NONE\"};\nvar proto3Defaults = {enum_type: \"OPEN\", field_presence: \"IMPLICIT\", json_format: \"ALLOW\", message_encoding: \"LENGTH_PREFIXED\", repeated_field_encoding: \"PACKED\", utf8_validation: \"VERIFY\"};\n\n/**\n * Constructs a new reflection object instance.\n * @classdesc Base class of all reflection objects.\n * @constructor\n * @param {string} name Object name\n * @param {Object.<string,*>} [options] Declared options\n * @abstract\n */\nfunction ReflectionObject(name, options) {\n\n    if (!util.isString(name))\n        throw TypeError(\"name must be a string\");\n\n    if (options && !util.isObject(options))\n        throw TypeError(\"options must be an object\");\n\n    /**\n     * Options.\n     * @type {Object.<string,*>|undefined}\n     */\n    this.options = options; // toJSON\n\n    /**\n     * Parsed Options.\n     * @type {Array.<Object.<string,*>>|undefined}\n     */\n    this.parsedOptions = null;\n\n    /**\n     * Unique name within its namespace.\n     * @type {string}\n     */\n    this.name = name;\n\n    /**\n     * The edition specified for this object.  Only relevant for top-level objects.\n     * @type {string}\n     * @private\n     */\n    this._edition = null;\n\n    /**\n     * The default edition to use for this object if none is specified.  For legacy reasons,\n     * this is proto2 except in the JSON parsing case where it was proto3.\n     * @type {string}\n     * @private\n     */\n    this._defaultEdition = \"proto2\";\n\n    /**\n     * Resolved Features.\n     * @type {object}\n     * @private\n     */\n    this._features = {};\n\n    /**\n     * Whether or not features have been resolved.\n     * @type {boolean}\n     * @private\n     */\n    this._featuresResolved = false;\n\n    /**\n     * Parent namespace.\n     * @type {Namespace|null}\n     */\n    this.parent = null;\n\n    /**\n     * Whether already resolved or not.\n     * @type {boolean}\n     */\n    this.resolved = false;\n\n    /**\n     * Comment text, if any.\n     * @type {string|null}\n     */\n    this.comment = null;\n\n    /**\n     * Defining file name.\n     * @type {string|null}\n     */\n    this.filename = null;\n}\n\nObject.defineProperties(ReflectionObject.prototype, {\n\n    /**\n     * Reference to the root namespace.\n     * @name ReflectionObject#root\n     * @type {Root}\n     * @readonly\n     */\n    root: {\n        get: function() {\n            var ptr = this;\n            while (ptr.parent !== null)\n                ptr = ptr.parent;\n            return ptr;\n        }\n    },\n\n    /**\n     * Full name including leading dot.\n     * @name ReflectionObject#fullName\n     * @type {string}\n     * @readonly\n     */\n    fullName: {\n        get: function() {\n            var path = [ this.name ],\n                ptr = this.parent;\n            while (ptr) {\n                path.unshift(ptr.name);\n                ptr = ptr.parent;\n            }\n            return path.join(\".\");\n        }\n    }\n});\n\n/**\n * Converts this reflection object to its descriptor representation.\n * @returns {Object.<string,*>} Descriptor\n * @abstract\n */\nReflectionObject.prototype.toJSON = /* istanbul ignore next */ function toJSON() {\n    throw Error(); // not implemented, shouldn't happen\n};\n\n/**\n * Called when this object is added to a parent.\n * @param {ReflectionObject} parent Parent added to\n * @returns {undefined}\n */\nReflectionObject.prototype.onAdd = function onAdd(parent) {\n    if (this.parent && this.parent !== parent)\n        this.parent.remove(this);\n    this.parent = parent;\n    this.resolved = false;\n    var root = parent.root;\n    if (root instanceof Root)\n        root._handleAdd(this);\n};\n\n/**\n * Called when this object is removed from a parent.\n * @param {ReflectionObject} parent Parent removed from\n * @returns {undefined}\n */\nReflectionObject.prototype.onRemove = function onRemove(parent) {\n    var root = parent.root;\n    if (root instanceof Root)\n        root._handleRemove(this);\n    this.parent = null;\n    this.resolved = false;\n};\n\n/**\n * Resolves this objects type references.\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.resolve = function resolve() {\n    if (this.resolved)\n        return this;\n    if (this.root instanceof Root)\n        this.resolved = true; // only if part of a root\n    return this;\n};\n\n/**\n * Resolves this objects editions features.\n * @param {string} edition The edition we're currently resolving for.\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    return this._resolveFeatures(this._edition || edition);\n};\n\n/**\n * Resolves child features from parent features\n * @param {string} edition The edition we're currently resolving for.\n * @returns {undefined}\n */\nReflectionObject.prototype._resolveFeatures = function _resolveFeatures(edition) {\n    if (this._featuresResolved) {\n        return;\n    }\n\n    var defaults = {};\n\n    /* istanbul ignore if */\n    if (!edition) {\n        throw new Error(\"Unknown edition for \" + this.fullName);\n    }\n\n    var protoFeatures = util.merge({}, this.options && this.options.features,\n        this._inferLegacyProtoFeatures(edition));\n\n    if (this._edition) {\n        // For a namespace marked with a specific edition, reset defaults.\n        /* istanbul ignore else */\n        if (edition === \"proto2\") {\n            defaults = Object.assign({}, proto2Defaults);\n        } else if (edition === \"proto3\") {\n            defaults = Object.assign({}, proto3Defaults);\n        } else if (edition === \"2023\") {\n            defaults = Object.assign({}, editions2023Defaults);\n        } else {\n            throw new Error(\"Unknown edition: \" + edition);\n        }\n        this._features = util.merge(defaults, protoFeatures);\n        this._featuresResolved = true;\n        return;\n    }\n\n    // fields in Oneofs aren't actually children of them, so we have to\n    // special-case it\n    /* istanbul ignore else */\n    if (this.partOf instanceof OneOf) {\n        var lexicalParentFeaturesCopy = util.merge({}, this.partOf._features);\n        this._features = util.merge(lexicalParentFeaturesCopy, protoFeatures);\n    } else if (this.declaringField) {\n        // Skip feature resolution of sister fields.\n    } else if (this.parent) {\n        var parentFeaturesCopy = util.merge({}, this.parent._features);\n        this._features = util.merge(parentFeaturesCopy, protoFeatures);\n    } else {\n        throw new Error(\"Unable to find a parent for \" + this.fullName);\n    }\n    if (this.extensionField) {\n        // Sister fields should have the same features as their extensions.\n        this.extensionField._features = this._features;\n    }\n    this._featuresResolved = true;\n};\n\n/**\n * Infers features from legacy syntax that may have been specified differently.\n * in older editions.\n * @param {string|undefined} edition The edition this proto is on, or undefined if pre-editions\n * @returns {object} The feature values to override\n */\nReflectionObject.prototype._inferLegacyProtoFeatures = function _inferLegacyProtoFeatures(/*edition*/) {\n    return {};\n};\n\n/**\n * Gets an option value.\n * @param {string} name Option name\n * @returns {*} Option value or `undefined` if not set\n */\nReflectionObject.prototype.getOption = function getOption(name) {\n    if (this.options)\n        return this.options[name];\n    return undefined;\n};\n\n/**\n * Sets an option.\n * @param {string} name Option name\n * @param {*} value Option value\n * @param {boolean|undefined} [ifNotSet] Sets the option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOption = function setOption(name, value, ifNotSet) {\n    if (name === \"__proto__\")\n        return this;\n    if (!this.options)\n        this.options = {};\n    if (/^features\\./.test(name)) {\n        util.setProperty(this.options, name, value, ifNotSet);\n    } else if (!ifNotSet || this.options[name] === undefined) {\n        if (this.getOption(name) !== value) this.resolved = false;\n        this.options[name] = value;\n    }\n\n    return this;\n};\n\n/**\n * Sets a parsed option.\n * @param {string} name parsed Option name\n * @param {*} value Option value\n * @param {string} propName dot '.' delimited full path of property within the option to set. if undefined\\empty, will add a new option with that value\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setParsedOption = function setParsedOption(name, value, propName) {\n    if (name === \"__proto__\")\n        return this;\n    if (!this.parsedOptions) {\n        this.parsedOptions = [];\n    }\n    var parsedOptions = this.parsedOptions;\n    if (propName) {\n        // If setting a sub property of an option then try to merge it\n        // with an existing option\n        var opt = parsedOptions.find(function (opt) {\n            return Object.prototype.hasOwnProperty.call(opt, name);\n        });\n        if (opt) {\n            // If we found an existing option - just merge the property value\n            // (If it's a feature, will just write over)\n            var newValue = opt[name];\n            util.setProperty(newValue, propName, value);\n        } else {\n            // otherwise, create a new option, set its property and add it to the list\n            opt = {};\n            opt[name] = util.setProperty({}, propName, value);\n            parsedOptions.push(opt);\n        }\n    } else {\n        // Always create a new option when setting the value of the option itself\n        var newOpt = {};\n        newOpt[name] = value;\n        parsedOptions.push(newOpt);\n    }\n\n    return this;\n};\n\n/**\n * Sets multiple options.\n * @param {Object.<string,*>} options Options to set\n * @param {boolean} [ifNotSet] Sets an option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOptions = function setOptions(options, ifNotSet) {\n    if (options)\n        for (var keys = Object.keys(options), i = 0; i < keys.length; ++i)\n            this.setOption(keys[i], options[keys[i]], ifNotSet);\n    return this;\n};\n\n/**\n * Converts this instance to its string representation.\n * @returns {string} Class name[, space, full name]\n */\nReflectionObject.prototype.toString = function toString() {\n    var className = this.constructor.className,\n        fullName  = this.fullName;\n    if (fullName.length)\n        return className + \" \" + fullName;\n    return className;\n};\n\n/**\n * Converts the edition this object is pinned to for JSON format.\n * @returns {string|undefined} The edition string for JSON representation\n */\nReflectionObject.prototype._editionToJSON = function _editionToJSON() {\n    if (!this._edition || this._edition === \"proto3\") {\n        // Avoid emitting proto3 since we need to default to it for backwards\n        // compatibility anyway.\n        return undefined;\n    }\n    return this._edition;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nReflectionObject._configure = function(Root_) {\n    Root = Root_;\n};\n","\"use strict\";\nmodule.exports = Enum;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Enum.prototype = Object.create(ReflectionObject.prototype)).constructor = Enum).className = \"Enum\";\n\nvar Namespace = require(\"./namespace\"),\n    util = require(\"./util\");\n\n/**\n * Constructs a new enum instance.\n * @classdesc Reflected enum.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {Object.<string,number>} [values] Enum values as an object, by name\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] The comment for this enum\n * @param {Object.<string,string>} [comments] The value comments for this enum\n * @param {Object.<string,Object<string,*>>|undefined} [valuesOptions] The value options for this enum\n */\nfunction Enum(name, values, options, comment, comments, valuesOptions) {\n    ReflectionObject.call(this, name, options);\n\n    if (values && typeof values !== \"object\")\n        throw TypeError(\"values must be an object\");\n\n    /**\n     * Enum values by id.\n     * @type {Object.<number,string>}\n     */\n    this.valuesById = {};\n\n    /**\n     * Enum values by name.\n     * @type {Object.<string,number>}\n     */\n    this.values = Object.create(this.valuesById); // toJSON, marker\n\n    /**\n     * Enum comment text.\n     * @type {string|null}\n     */\n    this.comment = comment;\n\n    /**\n     * Value comment texts, if any.\n     * @type {Object.<string,string>}\n     */\n    this.comments = comments || {};\n\n    /**\n     * Values options, if any\n     * @type {Object<string, Object<string, *>>|undefined}\n     */\n    this.valuesOptions = valuesOptions;\n\n    /**\n     * Resolved values features, if any\n     * @type {Object<string, Object<string, *>>|undefined}\n     */\n    this._valuesFeatures = {};\n\n    /**\n     * Reserved ranges, if any.\n     * @type {Array.<number[]|string>}\n     */\n    this.reserved = undefined; // toJSON\n\n    // Note that values inherit valuesById on their prototype which makes them a TypeScript-\n    // compatible enum. This is used by pbts to write actual enum definitions that work for\n    // static and reflection code alike instead of emitting generic object definitions.\n\n    if (values)\n        for (var keys = Object.keys(values), i = 0; i < keys.length; ++i)\n            if (keys[i] !== \"__proto__\" && typeof values[keys[i]] === \"number\") // use forward entries only\n                this.valuesById[ this.values[keys[i]] = values[keys[i]] ] = keys[i];\n}\n\n/**\n * @override\n */\nEnum.prototype._resolveFeatures = function _resolveFeatures(edition) {\n    edition = this._edition || edition;\n    ReflectionObject.prototype._resolveFeatures.call(this, edition);\n\n    Object.keys(this.values).forEach(key => {\n        var parentFeaturesCopy = util.merge({}, this._features);\n        this._valuesFeatures[key] = util.merge(parentFeaturesCopy, this.valuesOptions && this.valuesOptions[key] && this.valuesOptions[key].features || {});\n    });\n\n    return this;\n};\n\n/**\n * Enum descriptor.\n * @interface IEnum\n * @property {Object.<string,number>} values Enum values\n * @property {Object.<string,*>} [options] Enum options\n */\n\n/**\n * Constructs an enum from an enum descriptor.\n * @param {string} name Enum name\n * @param {IEnum} json Enum descriptor\n * @returns {Enum} Created enum\n * @throws {TypeError} If arguments are invalid\n */\nEnum.fromJSON = function fromJSON(name, json) {\n    var enm = new Enum(name, json.values, json.options, json.comment, json.comments);\n    enm.reserved = json.reserved;\n    if (json.edition)\n        enm._edition = json.edition;\n    enm._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return enm;\n};\n\n/**\n * Converts this enum to an enum descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IEnum} Enum descriptor\n */\nEnum.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\"       , this._editionToJSON(),\n        \"options\"       , this.options,\n        \"valuesOptions\" , this.valuesOptions,\n        \"values\"        , this.values,\n        \"reserved\"      , this.reserved && this.reserved.length ? this.reserved : undefined,\n        \"comment\"       , keepComments ? this.comment : undefined,\n        \"comments\"      , keepComments ? this.comments : undefined\n    ]);\n};\n\n/**\n * Adds a value to this enum.\n * @param {string} name Value name\n * @param {number} id Value id\n * @param {string} [comment] Comment, if any\n * @param {Object.<string, *>|undefined} [options] Options, if any\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a value with this name or id\n */\nEnum.prototype.add = function add(name, id, comment, options) {\n    // utilized by the parser but not by .fromJSON\n\n    if (!util.isString(name))\n        throw TypeError(\"name must be a string\");\n\n    if (!util.isInteger(id))\n        throw TypeError(\"id must be an integer\");\n\n    if (name === \"__proto__\")\n        return this;\n\n    if (this.values[name] !== undefined)\n        throw Error(\"duplicate name '\" + name + \"' in \" + this);\n\n    if (this.isReservedId(id))\n        throw Error(\"id \" + id + \" is reserved in \" + this);\n\n    if (this.isReservedName(name))\n        throw Error(\"name '\" + name + \"' is reserved in \" + this);\n\n    if (this.valuesById[id] !== undefined) {\n        if (!(this.options && this.options.allow_alias))\n            throw Error(\"duplicate id \" + id + \" in \" + this);\n        this.values[name] = id;\n    } else\n        this.valuesById[this.values[name] = id] = name;\n\n    if (options) {\n        if (this.valuesOptions === undefined)\n            this.valuesOptions = {};\n        this.valuesOptions[name] = options || null;\n    }\n\n    this.comments[name] = comment || null;\n    return this;\n};\n\n/**\n * Removes a value from this enum\n * @param {string} name Value name\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `name` is not a name of this enum\n */\nEnum.prototype.remove = function remove(name) {\n\n    if (!util.isString(name))\n        throw TypeError(\"name must be a string\");\n\n    var val = this.values[name];\n    if (val == null)\n        throw Error(\"name '\" + name + \"' does not exist in \" + this);\n\n    delete this.valuesById[val];\n    delete this.values[name];\n    delete this.comments[name];\n    if (this.valuesOptions)\n        delete this.valuesOptions[name];\n\n    return this;\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedId = function isReservedId(id) {\n    return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedName = function isReservedName(name) {\n    return Namespace.isReservedName(this.reserved, name);\n};\n","\"use strict\";\nmodule.exports = encoder;\n\nvar Enum     = require(\"./enum\"),\n    types    = require(\"./types\"),\n    util     = require(\"./util\");\n\n/**\n * Generates a partial message type encoder.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genTypePartial(gen, field, fieldIndex, ref) {\n    return field.delimited\n        ? gen(\"types[%i].encode(%s,w.uint32(%i),q+1).uint32(%i)\", fieldIndex, ref, (field.id << 3 | 3) >>> 0, (field.id << 3 | 4) >>> 0)\n        : gen(\"types[%i].encode(%s,w.uint32(%i).fork(),q+1).ldelim()\", fieldIndex, ref, (field.id << 3 | 2) >>> 0);\n}\n\n/**\n * Generates an encoder specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction encoder(mtype) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    var gen = util.codegen([\"m\", \"w\", \"q\"], mtype.name + \"$encode\")\n    (\"if(!w)\")\n        (\"w=Writer.create()\")\n    (\"if(q===undefined)q=0\")\n    (\"if(q>util.recursionLimit)\")\n        (\"throw Error(\\\"max depth exceeded\\\")\");\n\n    var i, ref;\n\n    // \"when a message is serialized its known fields should be written sequentially by field number\"\n    var fields = /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById);\n\n    for (var i = 0; i < fields.length; ++i) {\n        var field    = fields[i].resolve(),\n            index    = mtype._fieldsArray.indexOf(field),\n            type     = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n            wireType = types.basic[type];\n            ref      = \"m\" + util.safeProp(field.name);\n\n        // Map fields\n        if (field.map) {\n            gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)){\", ref, field.name) // !== undefined && !== null\n        (\"for(var ks=Object.keys(%s),i=0;i<ks.length;++i){\", ref)\n            (\"w.uint32(%i).fork().uint32(%i).%s(ks[i])\", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType], field.keyType);\n            if (wireType === undefined) gen\n            (\"types[%i].encode(%s[ks[i]],w.uint32(18).fork(),q+1).ldelim().ldelim()\", index, ref); // can't be groups\n            else gen\n            (\".uint32(%i).%s(%s[ks[i]]).ldelim()\", 16 | wireType, type, ref);\n            gen\n        (\"}\")\n    (\"}\");\n\n            // Repeated fields\n        } else if (field.repeated) { gen\n    (\"if(%s!=null&&%s.length){\", ref, ref); // !== undefined && !== null\n\n            // Packed repeated\n            if (field.packed && types.packed[type] !== undefined) { gen\n\n        (\"w.uint32(%i).fork()\", (field.id << 3 | 2) >>> 0)\n        (\"for(var i=0;i<%s.length;++i)\", ref)\n            (\"w.%s(%s[i])\", type, ref)\n        (\"w.ldelim()\");\n\n            // Non-packed\n            } else { gen\n\n        (\"for(var i=0;i<%s.length;++i)\", ref);\n                if (wireType === undefined)\n            genTypePartial(gen, field, index, ref + \"[i]\");\n                else gen\n            (\"w.uint32(%i).%s(%s[i])\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n            } gen\n    (\"}\");\n\n        // Non-repeated\n        } else {\n            if (field.optional) gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j))\", ref, field.name); // !== undefined && !== null\n\n            if (wireType === undefined)\n        genTypePartial(gen, field, index, ref);\n            else gen\n        (\"w.uint32(%i).%s(%s)\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n        }\n    }\n\n    return gen\n    (\"return w\");\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n","\"use strict\";\nvar protobuf = module.exports = require(\"./index-minimal\");\n\nprotobuf.build = \"light\";\n\n/**\n * A node-style callback as used by {@link load} and {@link Root#load}.\n * @typedef LoadCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Root} [root] Root, if there hasn't been an error\n * @returns {undefined}\n */\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} root Root namespace, defaults to create a new one if omitted.\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n */\nfunction load(filename, root, callback) {\n    if (typeof root === \"function\") {\n        callback = root;\n        root = new protobuf.Root();\n    } else if (!root)\n        root = new protobuf.Root();\n    return root.load(filename, callback);\n}\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and returns a promise.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Promise<Root>} Promise\n * @see {@link Root#load}\n * @variation 3\n */\n// function load(filename:string, [root:Root]):Promise<Root>\n\nprotobuf.load = load;\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into a common root namespace (node only).\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n * @see {@link Root#loadSync}\n */\nfunction loadSync(filename, root) {\n    if (!root)\n        root = new protobuf.Root();\n    return root.loadSync(filename);\n}\n\nprotobuf.loadSync = loadSync;\n\n// Serialization\nprotobuf.encoder          = require(\"./encoder\");\nprotobuf.decoder          = require(\"./decoder\");\nprotobuf.verifier         = require(\"./verifier\");\nprotobuf.converter        = require(\"./converter\");\n\n// Reflection\nprotobuf.ReflectionObject = require(\"./object\");\nprotobuf.Namespace        = require(\"./namespace\");\nprotobuf.Root             = require(\"./root\");\nprotobuf.Enum             = require(\"./enum\");\nprotobuf.Type             = require(\"./type\");\nprotobuf.Field            = require(\"./field\");\nprotobuf.OneOf            = require(\"./oneof\");\nprotobuf.MapField         = require(\"./mapfield\");\nprotobuf.Service          = require(\"./service\");\nprotobuf.Method           = require(\"./method\");\n\n// Runtime\nprotobuf.Message          = require(\"./message\");\nprotobuf.wrappers         = require(\"./wrappers\");\n\n// Utility\nprotobuf.types            = require(\"./types\");\nprotobuf.util             = require(\"./util\");\n\n// Set up possibly cyclic reflection dependencies\nprotobuf.ReflectionObject._configure(protobuf.Root);\nprotobuf.Namespace._configure(protobuf.Type, protobuf.Service, protobuf.Enum);\nprotobuf.Root._configure(protobuf.Type);\nprotobuf.Field._configure(protobuf.Type);\n","\"use strict\";\nmodule.exports = tokenize;\n\nvar delimRe        = /[\\s{}=;:[\\],'\"()<>]/g,\n    stringDoubleRe = /(?:\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\")/g,\n    stringSingleRe = /(?:'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)')/g;\n\nvar setCommentRe = /^ *[*/]+ */,\n    setCommentAltRe = /^\\s*\\*?\\/*/,\n    setCommentSplitRe = /\\n/g,\n    whitespaceRe = /\\s/,\n    unescapeRe = /\\\\(.?)/g;\n\nvar unescapeMap = {\n    \"0\": \"\\0\",\n    \"r\": \"\\r\",\n    \"n\": \"\\n\",\n    \"t\": \"\\t\"\n};\n\n/**\n * Unescapes a string.\n * @param {string} str String to unescape\n * @returns {string} Unescaped string\n * @property {Object.<string,string>} map Special characters map\n * @memberof tokenize\n */\nfunction unescape(str) {\n    return str.replace(unescapeRe, function($0, $1) {\n        switch ($1) {\n            case \"\\\\\":\n            case \"\":\n                return $1;\n            default:\n                return unescapeMap[$1] || \"\";\n        }\n    });\n}\n\ntokenize.unescape = unescape;\n\n/**\n * Gets the next token and advances.\n * @typedef TokenizerHandleNext\n * @type {function}\n * @returns {string|null} Next token or `null` on eof\n */\n\n/**\n * Peeks for the next token.\n * @typedef TokenizerHandlePeek\n * @type {function}\n * @returns {string|null} Next token or `null` on eof\n */\n\n/**\n * Pushes a token back to the stack.\n * @typedef TokenizerHandlePush\n * @type {function}\n * @param {string} token Token\n * @returns {undefined}\n */\n\n/**\n * Skips the next token.\n * @typedef TokenizerHandleSkip\n * @type {function}\n * @param {string} expected Expected token\n * @param {boolean} [optional=false] If optional\n * @returns {boolean} Whether the token matched\n * @throws {Error} If the token didn't match and is not optional\n */\n\n/**\n * Gets the comment on the previous line or, alternatively, the line comment on the specified line.\n * @typedef TokenizerHandleCmnt\n * @type {function}\n * @param {number} [line] Line number\n * @returns {string|null} Comment text or `null` if none\n */\n\n/**\n * Handle object returned from {@link tokenize}.\n * @interface ITokenizerHandle\n * @property {TokenizerHandleNext} next Gets the next token and advances (`null` on eof)\n * @property {TokenizerHandlePeek} peek Peeks for the next token (`null` on eof)\n * @property {TokenizerHandlePush} push Pushes a token back to the stack\n * @property {TokenizerHandleSkip} skip Skips a token, returns its presence and advances or, if non-optional and not present, throws\n * @property {TokenizerHandleCmnt} cmnt Gets the comment on the previous line or the line comment on the specified line, if any\n * @property {number} line Current line number\n */\n\n/**\n * Tokenizes the given .proto source and returns an object with useful utility functions.\n * @param {string} source Source contents\n * @param {boolean} alternateCommentMode Whether we should activate alternate comment parsing mode.\n * @returns {ITokenizerHandle} Tokenizer handle\n */\nfunction tokenize(source, alternateCommentMode) {\n    /* eslint-disable callback-return */\n    source = source.toString();\n\n    var offset = 0,\n        length = source.length,\n        line = 1,\n        lastCommentLine = 0,\n        comments = {};\n\n    var stack = [];\n\n    var stringDelim = null;\n\n    /* istanbul ignore next */\n    /**\n     * Creates an error for illegal syntax.\n     * @param {string} subject Subject\n     * @returns {Error} Error created\n     * @inner\n     */\n    function illegal(subject) {\n        return Error(\"illegal \" + subject + \" (line \" + line + \")\");\n    }\n\n    /**\n     * Reads a string till its end.\n     * @returns {string} String read\n     * @inner\n     */\n    function readString() {\n        var re = stringDelim === \"'\" ? stringSingleRe : stringDoubleRe;\n        re.lastIndex = offset - 1;\n        var match = re.exec(source);\n        if (!match)\n            throw illegal(\"string\");\n        offset = re.lastIndex;\n        push(stringDelim);\n        stringDelim = null;\n        return unescape(match[1]);\n    }\n\n    /**\n     * Gets the character at `pos` within the source.\n     * @param {number} pos Position\n     * @returns {string} Character\n     * @inner\n     */\n    function charAt(pos) {\n        return source.charAt(pos);\n    }\n\n    /**\n     * Sets the current comment text.\n     * @param {number} start Start offset\n     * @param {number} end End offset\n     * @param {boolean} isLeading set if a leading comment\n     * @returns {undefined}\n     * @inner\n     */\n    function setComment(start, end, isLeading) {\n        var comment = {\n            type: source.charAt(start++),\n            lineEmpty: false,\n            leading: isLeading,\n        };\n        var lookback;\n        if (alternateCommentMode) {\n            lookback = 2;  // alternate comment parsing: \"//\" or \"/*\"\n        } else {\n            lookback = 3;  // \"///\" or \"/**\"\n        }\n        var commentOffset = start - lookback,\n            c;\n        do {\n            if (--commentOffset < 0 ||\n                    (c = source.charAt(commentOffset)) === \"\\n\") {\n                comment.lineEmpty = true;\n                break;\n            }\n        } while (c === \" \" || c === \"\\t\");\n        var lines = source\n            .substring(start, end)\n            .split(setCommentSplitRe);\n        for (var i = 0; i < lines.length; ++i)\n            lines[i] = lines[i]\n                .replace(alternateCommentMode ? setCommentAltRe : setCommentRe, \"\")\n                .trim();\n        comment.text = lines\n            .join(\"\\n\")\n            .trim();\n\n        comments[line] = comment;\n        lastCommentLine = line;\n    }\n\n    function isDoubleSlashCommentLine(startOffset) {\n        var endOffset = findEndOfLine(startOffset);\n\n        // see if remaining line matches comment pattern\n        var lineText = source.substring(startOffset, endOffset);\n        var isComment = /^\\s*\\/\\//.test(lineText);\n        return isComment;\n    }\n\n    function findEndOfLine(cursor) {\n        // find end of cursor's line\n        var endOffset = cursor;\n        while (endOffset < length && charAt(endOffset) !== \"\\n\") {\n            endOffset++;\n        }\n        return endOffset;\n    }\n\n    /**\n     * Obtains the next token.\n     * @returns {string|null} Next token or `null` on eof\n     * @inner\n     */\n    function next() {\n        if (stack.length > 0)\n            return stack.shift();\n        if (stringDelim)\n            return readString();\n        var repeat,\n            prev,\n            curr,\n            start,\n            isDoc,\n            isLeadingComment = offset === 0;\n        do {\n            if (offset === length)\n                return null;\n            repeat = false;\n            while (whitespaceRe.test(curr = charAt(offset))) {\n                if (curr === \"\\n\") {\n                    isLeadingComment = true;\n                    ++line;\n                }\n                if (++offset === length)\n                    return null;\n            }\n\n            if (charAt(offset) === \"/\") {\n                if (++offset === length) {\n                    throw illegal(\"comment\");\n                }\n                if (charAt(offset) === \"/\") { // Line\n                    if (!alternateCommentMode) {\n                        // check for triple-slash comment\n                        isDoc = charAt(start = offset + 1) === \"/\";\n\n                        while (charAt(++offset) !== \"\\n\") {\n                            if (offset === length) {\n                                return null;\n                            }\n                        }\n                        ++offset;\n                        if (isDoc) {\n                            setComment(start, offset - 1, isLeadingComment);\n                            // Trailing comment cannot not be multi-line,\n                            // so leading comment state should be reset to handle potential next comments\n                            isLeadingComment = true;\n                        }\n                        ++line;\n                        repeat = true;\n                    } else {\n                        // check for double-slash comments, consolidating consecutive lines\n                        start = offset;\n                        isDoc = false;\n                        if (isDoubleSlashCommentLine(offset - 1)) {\n                            isDoc = true;\n                            do {\n                                offset = findEndOfLine(offset);\n                                if (offset === length) {\n                                    break;\n                                }\n                                offset++;\n                                if (!isLeadingComment) {\n                                    // Trailing comment cannot not be multi-line\n                                    break;\n                                }\n                            } while (isDoubleSlashCommentLine(offset));\n                        } else {\n                            offset = Math.min(length, findEndOfLine(offset) + 1);\n                        }\n                        if (isDoc) {\n                            setComment(start, offset, isLeadingComment);\n                            isLeadingComment = true;\n                        }\n                        line++;\n                        repeat = true;\n                    }\n                } else if ((curr = charAt(offset)) === \"*\") { /* Block */\n                    // check for /** (regular comment mode) or /* (alternate comment mode)\n                    start = offset + 1;\n                    isDoc = alternateCommentMode || charAt(start) === \"*\";\n                    do {\n                        if (curr === \"\\n\") {\n                            ++line;\n                        }\n                        if (++offset === length) {\n                            throw illegal(\"comment\");\n                        }\n                        prev = curr;\n                        curr = charAt(offset);\n                    } while (prev !== \"*\" || curr !== \"/\");\n                    ++offset;\n                    if (isDoc) {\n                        setComment(start, offset - 2, isLeadingComment);\n                        isLeadingComment = true;\n                    }\n                    repeat = true;\n                } else {\n                    return \"/\";\n                }\n            }\n        } while (repeat);\n\n        // offset !== length if we got here\n\n        var end = offset;\n        delimRe.lastIndex = 0;\n        var delim = delimRe.test(charAt(end++));\n        if (!delim)\n            while (end < length && !delimRe.test(charAt(end)))\n                ++end;\n        var token = source.substring(offset, offset = end);\n        if (token === \"\\\"\" || token === \"'\")\n            stringDelim = token;\n        return token;\n    }\n\n    /**\n     * Pushes a token back to the stack.\n     * @param {string} token Token\n     * @returns {undefined}\n     * @inner\n     */\n    function push(token) {\n        stack.push(token);\n    }\n\n    /**\n     * Peeks for the next token.\n     * @returns {string|null} Token or `null` on eof\n     * @inner\n     */\n    function peek() {\n        if (!stack.length) {\n            var token = next();\n            if (token === null)\n                return null;\n            push(token);\n        }\n        return stack[0];\n    }\n\n    /**\n     * Skips a token.\n     * @param {string} expected Expected token\n     * @param {boolean} [optional=false] Whether the token is optional\n     * @returns {boolean} `true` when skipped, `false` if not\n     * @throws {Error} When a required token is not present\n     * @inner\n     */\n    function skip(expected, optional) {\n        var actual = peek(),\n            equals = actual === expected;\n        if (equals) {\n            next();\n            return true;\n        }\n        if (!optional)\n            throw illegal(\"token '\" + actual + \"', '\" + expected + \"' expected\");\n        return false;\n    }\n\n    /**\n     * Gets a comment.\n     * @param {number} [trailingLine] Line number if looking for a trailing comment\n     * @returns {string|null} Comment text\n     * @inner\n     */\n    function cmnt(trailingLine) {\n        var ret = null;\n        var comment;\n        if (trailingLine === undefined) {\n            comment = comments[line - 1];\n            delete comments[line - 1];\n            if (comment && (alternateCommentMode || comment.type === \"*\" || comment.lineEmpty)) {\n                ret = comment.leading ? comment.text : null;\n            }\n        } else {\n            /* istanbul ignore else */\n            if (lastCommentLine < trailingLine) {\n                peek();\n            }\n            comment = comments[trailingLine];\n            delete comments[trailingLine];\n            if (comment && !comment.lineEmpty && (alternateCommentMode || comment.type === \"/\")) {\n                ret = comment.leading ? null : comment.text;\n            }\n        }\n        return ret;\n    }\n\n    return Object.defineProperty({\n        next: next,\n        peek: peek,\n        push: push,\n        skip: skip,\n        cmnt: cmnt\n    }, \"line\", {\n        get: function() { return line; }\n    });\n    /* eslint-enable callback-return */\n}\n","\"use strict\";\nmodule.exports = parse;\n\nparse.filename = null;\nparse.defaults = { keepCase: false };\n\nvar tokenize  = require(\"./tokenize\"),\n    Root      = require(\"./root\"),\n    Type      = require(\"./type\"),\n    Field     = require(\"./field\"),\n    MapField  = require(\"./mapfield\"),\n    OneOf     = require(\"./oneof\"),\n    Enum      = require(\"./enum\"),\n    Service   = require(\"./service\"),\n    Method    = require(\"./method\"),\n    ReflectionObject = require(\"./object\"),\n    types     = require(\"./types\"),\n    util      = require(\"./util\");\n\nvar base10Re    = /^[1-9][0-9]*$/,\n    base10NegRe = /^-?[1-9][0-9]*$/,\n    base16Re    = /^0[x][0-9a-fA-F]+$/,\n    base16NegRe = /^-?0[x][0-9a-fA-F]+$/,\n    base8Re     = /^0[0-7]+$/,\n    base8NegRe  = /^-?0[0-7]+$/,\n    numberRe    = util.patterns.numberRe,\n    nameRe      = /^[a-zA-Z_][a-zA-Z_0-9]*$/,\n    typeRefRe   = util.patterns.typeRefRe;\n\n/**\n * Result object returned from {@link parse}.\n * @interface IParserResult\n * @property {string|undefined} package Package name, if declared\n * @property {string[]|undefined} imports Imports, if any\n * @property {string[]|undefined} weakImports Weak imports, if any\n * @property {Root} root Populated root instance\n */\n\n/**\n * Options modifying the behavior of {@link parse}.\n * @interface IParseOptions\n * @property {boolean} [keepCase=false] Keeps field casing instead of converting to camel case\n * @property {boolean} [alternateCommentMode=false] Recognize double-slash comments in addition to doc-block comments.\n * @property {boolean} [preferTrailingComment=false] Use trailing comment when both leading comment and trailing comment exist.\n */\n\n/**\n * Options modifying the behavior of JSON serialization.\n * @interface IToJSONOptions\n * @property {boolean} [keepComments=false] Serializes comments.\n */\n\n/**\n * Parses the given .proto source and returns an object with the parsed contents.\n * @param {string} source Source contents\n * @param {Root} root Root to populate\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {IParserResult} Parser result\n * @property {string} filename=null Currently processing file name for error reporting, if known\n * @property {IParseOptions} defaults Default {@link IParseOptions}\n */\nfunction parse(source, root, options) {\n    /* eslint-disable callback-return */\n    if (!(root instanceof Root)) {\n        options = root;\n        root = new Root();\n    }\n    if (!options)\n        options = parse.defaults;\n\n    var preferTrailingComment = options.preferTrailingComment || false;\n    var tn = tokenize(source, options.alternateCommentMode || false),\n        next = tn.next,\n        push = tn.push,\n        peek = tn.peek,\n        skip = tn.skip,\n        cmnt = tn.cmnt;\n\n    var head = true,\n        pkg,\n        imports,\n        weakImports,\n        edition = \"proto2\";\n\n    var ptr = root;\n\n    var topLevelObjects = [];\n    var topLevelOptions = {};\n\n    var applyCase = options.keepCase ? function(name) { return name; } : util.camelCase;\n\n    function resolveFileFeatures() {\n        topLevelObjects.forEach(obj => {\n            obj._edition = edition;\n            Object.keys(topLevelOptions).forEach(opt => {\n                if (obj.getOption(opt) !== undefined) return;\n                obj.setOption(opt, topLevelOptions[opt], true);\n            });\n        });\n    }\n\n    /* istanbul ignore next */\n    function illegal(token, name, insideTryCatch) {\n        var filename = parse.filename;\n        if (!insideTryCatch)\n            parse.filename = null;\n        return Error(\"illegal \" + (name || \"token\") + \" '\" + token + \"' (\" + (filename ? filename + \", \" : \"\") + \"line \" + tn.line + \")\");\n    }\n\n    function readString() {\n        var values = [],\n            token;\n        do {\n            /* istanbul ignore if */\n            if ((token = next()) !== \"\\\"\" && token !== \"'\")\n                throw illegal(token);\n\n            values.push(next());\n            skip(token);\n            token = peek();\n        } while (token === \"\\\"\" || token === \"'\");\n        return values.join(\"\");\n    }\n\n    function readValue(acceptTypeRef) {\n        var token = next();\n        switch (token) {\n            case \"'\":\n            case \"\\\"\":\n                push(token);\n                return readString();\n            case \"true\": case \"TRUE\":\n                return true;\n            case \"false\": case \"FALSE\":\n                return false;\n        }\n        try {\n            return parseNumber(token, /* insideTryCatch */ true);\n        } catch (e) {\n            /* istanbul ignore else */\n            if (acceptTypeRef && typeRefRe.test(token))\n                return token;\n\n            /* istanbul ignore next */\n            throw illegal(token, \"value\");\n        }\n    }\n\n    function readRanges(target, acceptStrings) {\n        var token, start;\n        do {\n            if (acceptStrings && ((token = peek()) === \"\\\"\" || token === \"'\")) {\n                var str = readString();\n                target.push(str);\n                if (edition >= 2023) {\n                    throw illegal(str, \"id\");\n                }\n            } else {\n                try {\n                    target.push([ start = parseId(next()), skip(\"to\", true) ? parseId(next()) : start ]);\n                } catch (err) {\n                    if (acceptStrings && typeRefRe.test(token) && edition >= 2023) {\n                        target.push(token);\n                    } else {\n                        throw err;\n                    }\n                }\n            }\n        } while (skip(\",\", true));\n        var dummy = {options: undefined};\n        dummy.setOption = function(name, value) {\n          if (this.options === undefined) this.options = {};\n          this.options[name] = value;\n        };\n        ifBlock(\n            dummy,\n            function parseRange_block(token) {\n              /* istanbul ignore else */\n              if (token === \"option\") {\n                parseOption(dummy, token);  // skip\n                skip(\";\");\n              } else\n                throw illegal(token);\n            },\n            function parseRange_line() {\n              parseInlineOptions(dummy);  // skip\n            });\n    }\n\n    function parseNumber(token, insideTryCatch) {\n        var sign = 1;\n        if (token.charAt(0) === \"-\") {\n            sign = -1;\n            token = token.substring(1);\n        }\n        switch (token) {\n            case \"inf\": case \"INF\": case \"Inf\":\n                return sign * Infinity;\n            case \"nan\": case \"NAN\": case \"Nan\": case \"NaN\":\n                return NaN;\n            case \"0\":\n                return 0;\n        }\n        if (base10Re.test(token))\n            return sign * parseInt(token, 10);\n        if (base16Re.test(token))\n            return sign * parseInt(token, 16);\n        if (base8Re.test(token))\n            return sign * parseInt(token, 8);\n\n        /* istanbul ignore else */\n        if (numberRe.test(token))\n            return sign * parseFloat(token);\n\n        /* istanbul ignore next */\n        throw illegal(token, \"number\", insideTryCatch);\n    }\n\n    function parseId(token, acceptNegative) {\n        switch (token) {\n            case \"max\": case \"MAX\": case \"Max\":\n                return 536870911;\n            case \"0\":\n                return 0;\n        }\n\n        /* istanbul ignore if */\n        if (!acceptNegative && token.charAt(0) === \"-\")\n            throw illegal(token, \"id\");\n\n        if (base10NegRe.test(token))\n            return parseInt(token, 10);\n        if (base16NegRe.test(token))\n            return parseInt(token, 16);\n\n        /* istanbul ignore else */\n        if (base8NegRe.test(token))\n            return parseInt(token, 8);\n\n        /* istanbul ignore next */\n        throw illegal(token, \"id\");\n    }\n\n    function parsePackage() {\n        /* istanbul ignore if */\n        if (pkg !== undefined)\n            throw illegal(\"package\");\n\n        pkg = next();\n\n        /* istanbul ignore if */\n        if (!typeRefRe.test(pkg))\n            throw illegal(pkg, \"name\");\n\n        ptr = ptr.define(pkg);\n\n        skip(\";\");\n    }\n\n    function parseImport() {\n        var token = peek();\n        var whichImports;\n        switch (token) {\n            case \"weak\":\n                whichImports = weakImports || (weakImports = []);\n                next();\n                break;\n            case \"public\":\n                next();\n                // eslint-disable-next-line no-fallthrough\n            default:\n                whichImports = imports || (imports = []);\n                break;\n        }\n        token = readString();\n        skip(\";\");\n        whichImports.push(token);\n    }\n\n    function parseSyntax() {\n        skip(\"=\");\n        edition = readString();\n\n        /* istanbul ignore if */\n        if (edition < 2023)\n            throw illegal(edition, \"syntax\");\n\n        skip(\";\");\n    }\n\n    function parseEdition() {\n        skip(\"=\");\n        edition = readString();\n        const supportedEditions = [\"2023\"];\n\n        /* istanbul ignore if */\n        if (!supportedEditions.includes(edition))\n            throw illegal(edition, \"edition\");\n\n        skip(\";\");\n    }\n\n\n    function parseCommon(parent, token, depth) {\n        if (depth === undefined)\n            depth = 0;\n        // depth is checked by dispatched functions\n        switch (token) {\n\n            case \"option\":\n                parseOption(parent, token);\n                skip(\";\");\n                return true;\n\n            case \"message\":\n                parseType(parent, token, depth + 1);\n                return true;\n\n            case \"enum\":\n                parseEnum(parent, token);\n                return true;\n\n            case \"service\":\n                parseService(parent, token, depth + 1);\n                return true;\n\n            case \"extend\":\n                parseExtension(parent, token, depth);\n                return true;\n        }\n        return false;\n    }\n\n    function ifBlock(obj, fnIf, fnElse) {\n        var trailingLine = tn.line;\n        if (obj) {\n            if(typeof obj.comment !== \"string\") {\n              obj.comment = cmnt(); // try block-type comment\n            }\n            obj.filename = parse.filename;\n        }\n        if (skip(\"{\", true)) {\n            var token;\n            while ((token = next()) !== \"}\")\n                fnIf(token);\n            skip(\";\", true);\n        } else {\n            if (fnElse)\n                fnElse();\n            skip(\";\");\n            if (obj && (typeof obj.comment !== \"string\" || preferTrailingComment))\n                obj.comment = cmnt(trailingLine) || obj.comment; // try line-type comment\n        }\n    }\n\n    function parseType(parent, token, depth) {\n        if (depth === undefined)\n            depth = 0;\n        if (depth > util.nestingLimit)\n            throw Error(\"max depth exceeded\");\n\n        /* istanbul ignore if */\n        if (!nameRe.test(token = next()))\n            throw illegal(token, \"type name\");\n\n        var type = new Type(token);\n        ifBlock(type, function parseType_block(token) {\n            if (parseCommon(type, token, depth))\n                return;\n\n            switch (token) {\n\n                case \"map\":\n                    parseMapField(type, token);\n                    break;\n\n                case \"required\":\n                    if (edition !== \"proto2\")\n                        throw illegal(token);\n                /* eslint-disable no-fallthrough */\n                case \"repeated\":\n                    parseField(type, token, undefined, depth + 1);\n                    break;\n\n                case \"optional\":\n                    /* istanbul ignore if */\n                    if (edition === \"proto3\") {\n                        parseField(type, \"proto3_optional\", undefined, depth + 1);\n                    } else if (edition !== \"proto2\") {\n                        throw illegal(token);\n                    } else {\n                        parseField(type, \"optional\", undefined, depth + 1);\n                    }\n                    break;\n\n                case \"oneof\":\n                    parseOneOf(type, token, depth + 1);\n                    break;\n\n                case \"extensions\":\n                    readRanges(type.extensions || (type.extensions = []));\n                    break;\n\n                case \"reserved\":\n                    readRanges(type.reserved || (type.reserved = []), true);\n                    break;\n\n                default:\n                    /* istanbul ignore if */\n                    if (edition === \"proto2\" || !typeRefRe.test(token)) {\n                        throw illegal(token);\n                    }\n\n                    push(token);\n                    parseField(type, \"optional\", undefined, depth + 1);\n                    break;\n            }\n        });\n        parent.add(type);\n        if (parent === ptr) {\n            topLevelObjects.push(type);\n        }\n    }\n\n    function parseField(parent, rule, extend, depth) {\n        var type = next();\n        if (type === \"group\") {\n            parseGroup(parent, rule, depth);\n            return;\n        }\n        // Type names can consume multiple tokens, in multiple variants:\n        //    package.subpackage   field       tokens: \"package.subpackage\" [TYPE NAME ENDS HERE] \"field\"\n        //    package . subpackage field       tokens: \"package\" \".\" \"subpackage\" [TYPE NAME ENDS HERE] \"field\"\n        //    package.  subpackage field       tokens: \"package.\" \"subpackage\" [TYPE NAME ENDS HERE] \"field\"\n        //    package  .subpackage field       tokens: \"package\" \".subpackage\" [TYPE NAME ENDS HERE] \"field\"\n        // Keep reading tokens until we get a type name with no period at the end,\n        // and the next token does not start with a period.\n        while (type.endsWith(\".\") || peek().startsWith(\".\")) {\n            type += next();\n        }\n\n        /* istanbul ignore if */\n        if (!typeRefRe.test(type))\n            throw illegal(type, \"type\");\n\n        var name = next();\n\n        /* istanbul ignore if */\n\n        if (!nameRe.test(name))\n            throw illegal(name, \"name\");\n\n        name = applyCase(name);\n        skip(\"=\");\n\n        var field = new Field(name, parseId(next()), type, rule, extend);\n\n        ifBlock(field, function parseField_block(token) {\n\n            /* istanbul ignore else */\n            if (token === \"option\") {\n                parseOption(field, token);\n                skip(\";\");\n            } else\n                throw illegal(token);\n\n        }, function parseField_line() {\n            parseInlineOptions(field);\n        });\n\n        if (rule === \"proto3_optional\") {\n            // for proto3 optional fields, we create a single-member Oneof to mimic \"optional\" behavior\n            var oneof = new OneOf(\"_\" + name);\n            field.setOption(\"proto3_optional\", true);\n            oneof.add(field);\n            parent.add(oneof);\n        } else {\n            parent.add(field);\n        }\n        if (parent === ptr) {\n            topLevelObjects.push(field);\n        }\n    }\n\n    function parseGroup(parent, rule, depth) {\n        if (depth === undefined)\n            depth = 0;\n        if (depth > util.nestingLimit)\n            throw Error(\"max depth exceeded\");\n        if (edition >= 2023) {\n            throw illegal(\"group\");\n        }\n        var name = next();\n\n        /* istanbul ignore if */\n        if (!nameRe.test(name))\n            throw illegal(name, \"name\");\n\n        var fieldName = util.lcFirst(name);\n        if (name === fieldName)\n            name = util.ucFirst(name);\n        skip(\"=\");\n        var id = parseId(next());\n        var type = new Type(name);\n        type.group = true;\n        var field = new Field(fieldName, id, name, rule);\n        field.filename = parse.filename;\n        ifBlock(type, function parseGroup_block(token) {\n            switch (token) {\n\n                case \"option\":\n                    parseOption(type, token);\n                    skip(\";\");\n                    break;\n                case \"required\":\n                case \"repeated\":\n                    parseField(type, token, undefined, depth + 1);\n                    break;\n\n                case \"optional\":\n                    /* istanbul ignore if */\n                    if (edition === \"proto3\") {\n                        parseField(type, \"proto3_optional\", undefined, depth + 1);\n                    } else {\n                        parseField(type, \"optional\", undefined, depth + 1);\n                    }\n                    break;\n\n                case \"message\":\n                    parseType(type, token, depth + 1);\n                    break;\n\n                case \"enum\":\n                    parseEnum(type, token);\n                    break;\n\n                case \"reserved\":\n                    readRanges(type.reserved || (type.reserved = []), true);\n                    break;\n\n                /* istanbul ignore next */\n                default:\n                    throw illegal(token); // there are no groups with proto3 semantics\n            }\n        });\n        parent.add(type)\n              .add(field);\n    }\n\n    function parseMapField(parent) {\n        skip(\"<\");\n        var keyType = next();\n\n        /* istanbul ignore if */\n        if (types.mapKey[keyType] === undefined)\n            throw illegal(keyType, \"type\");\n\n        skip(\",\");\n        var valueType = next();\n\n        /* istanbul ignore if */\n        if (!typeRefRe.test(valueType))\n            throw illegal(valueType, \"type\");\n\n        skip(\">\");\n        var name = next();\n\n        /* istanbul ignore if */\n        if (!nameRe.test(name))\n            throw illegal(name, \"name\");\n\n        skip(\"=\");\n        var field = new MapField(applyCase(name), parseId(next()), keyType, valueType);\n        ifBlock(field, function parseMapField_block(token) {\n\n            /* istanbul ignore else */\n            if (token === \"option\") {\n                parseOption(field, token);\n                skip(\";\");\n            } else\n                throw illegal(token);\n\n        }, function parseMapField_line() {\n            parseInlineOptions(field);\n        });\n        parent.add(field);\n    }\n\n    function parseOneOf(parent, token, depth) {\n\n        /* istanbul ignore if */\n        if (!nameRe.test(token = next()))\n            throw illegal(token, \"name\");\n\n        var oneof = new OneOf(applyCase(token));\n        ifBlock(oneof, function parseOneOf_block(token) {\n            if (token === \"option\") {\n                parseOption(oneof, token);\n                skip(\";\");\n            } else {\n                push(token);\n                parseField(oneof, \"optional\", undefined, depth);\n            }\n        });\n        parent.add(oneof);\n    }\n\n    function parseEnum(parent, token) {\n\n        /* istanbul ignore if */\n        if (!nameRe.test(token = next()))\n            throw illegal(token, \"name\");\n\n        var enm = new Enum(token);\n        ifBlock(enm, function parseEnum_block(token) {\n          switch(token) {\n            case \"option\":\n              parseOption(enm, token);\n              skip(\";\");\n              break;\n\n            case \"reserved\":\n              readRanges(enm.reserved || (enm.reserved = []), true);\n              if(enm.reserved === undefined) enm.reserved = [];\n              break;\n\n            default:\n              parseEnumValue(enm, token);\n          }\n        });\n        parent.add(enm);\n        if (parent === ptr) {\n            topLevelObjects.push(enm);\n        }\n    }\n\n    function parseEnumValue(parent, token) {\n\n        /* istanbul ignore if */\n        if (!nameRe.test(token))\n            throw illegal(token, \"name\");\n\n        skip(\"=\");\n        var value = parseId(next(), true),\n            dummy = {\n                options: undefined\n            };\n        dummy.getOption = function(name) {\n            return this.options[name];\n        };\n        dummy.setOption = function(name, value) {\n            ReflectionObject.prototype.setOption.call(dummy, name, value);\n        };\n        dummy.setParsedOption = function() {\n            return undefined;\n        };\n        ifBlock(dummy, function parseEnumValue_block(token) {\n\n            /* istanbul ignore else */\n            if (token === \"option\") {\n                parseOption(dummy, token); // skip\n                skip(\";\");\n            } else\n                throw illegal(token);\n\n        }, function parseEnumValue_line() {\n            parseInlineOptions(dummy); // skip\n        });\n        parent.add(token, value, dummy.comment, dummy.parsedOptions || dummy.options);\n    }\n\n    function parseOption(parent, token) {\n            var option;\n            var propName;\n            var isOption = true;\n            if (token === \"option\") {\n                token = next();\n            }\n\n            while (token !== \"=\") {\n                if (token === \"(\") {\n                    var parensValue = next();\n                    skip(\")\");\n                    token = \"(\" + parensValue + \")\";\n                }\n                if (isOption) {\n                    isOption = false;\n                    if (token.includes(\".\") && !token.includes(\"(\")) {\n                        var tokens = token.split(\".\");\n                        option = tokens[0] + \".\";\n                        token = tokens[1];\n                        continue;\n                    }\n                    option = token;\n                } else {\n                    propName = propName ? propName += token : token;\n                }\n                token = next();\n            }\n            var name = propName ? option.concat(propName) : option;\n            var optionValue = parseOptionValue(parent, name);\n            propName = propName && propName[0] === \".\" ? propName.slice(1) : propName;\n            option = option && option[option.length - 1] === \".\" ? option.slice(0, -1) : option;\n            setParsedOption(parent, option, optionValue, propName);\n    }\n\n    function parseOptionValue(parent, name, depth) {\n        if (depth === undefined)\n            depth = 0;\n        if (depth > util.recursionLimit)\n            throw Error(\"max depth exceeded\");\n        // { a: \"foo\" b { c: \"bar\" } }\n        if (skip(\"{\", true)) {\n            var objectResult = {};\n\n            while (!skip(\"}\", true)) {\n                /* istanbul ignore if */\n                if (!nameRe.test(token = next())) {\n                    throw illegal(token, \"name\");\n                }\n                if (token === null) {\n                  throw illegal(token, \"end of input\");\n                }\n\n                var value;\n                var propName = token;\n\n                skip(\":\", true);\n\n                if (peek() === \"{\") {\n                    // option (my_option) = {\n                    //     repeated_value: [ \"foo\", \"bar\" ]\n                    // };\n                    value = parseOptionValue(parent, name + \".\" + token, depth + 1);\n                } else if (peek() === \"[\") {\n                    value = [];\n                    var lastValue;\n                    if (skip(\"[\", true)) {\n                        do {\n                            lastValue = readValue(true);\n                            value.push(lastValue);\n                        } while (skip(\",\", true));\n                        skip(\"]\");\n                        if (typeof lastValue !== \"undefined\") {\n                            setOption(parent, name + \".\" + token, lastValue);\n                        }\n                    }\n                } else {\n                    value = readValue(true);\n                    setOption(parent, name + \".\" + token, value);\n                }\n\n                var prevValue = objectResult[propName];\n\n                if (prevValue)\n                    value = [].concat(prevValue).concat(value);\n\n                if (propName !== \"__proto__\")\n                    objectResult[propName] = value;\n\n                // Semicolons and commas can be optional\n                skip(\",\", true);\n                skip(\";\", true);\n            }\n\n            return objectResult;\n        }\n\n        var simpleValue = readValue(true);\n        setOption(parent, name, simpleValue);\n        return simpleValue;\n        // Does not enforce a delimiter to be universal\n    }\n\n    function setOption(parent, name, value) {\n        if (ptr === parent && /^features\\./.test(name)) {\n            topLevelOptions[name] = value;\n            return;\n        }\n        if (parent.setOption)\n            parent.setOption(name, value);\n    }\n\n    function setParsedOption(parent, name, value, propName) {\n        if (parent.setParsedOption)\n            parent.setParsedOption(name, value, propName);\n    }\n\n    function parseInlineOptions(parent) {\n        if (skip(\"[\", true)) {\n            do {\n                parseOption(parent, \"option\");\n            } while (skip(\",\", true));\n            skip(\"]\");\n        }\n        return parent;\n    }\n\n    function parseService(parent, token, depth) {\n        if (depth === undefined)\n            depth = 0;\n        if (depth > util.recursionLimit)\n            throw Error(\"max depth exceeded\");\n\n        /* istanbul ignore if */\n        if (!nameRe.test(token = next()))\n            throw illegal(token, \"service name\");\n\n        var service = new Service(token);\n        ifBlock(service, function parseService_block(token) {\n            if (parseCommon(service, token, depth)) {\n                return;\n            }\n\n            /* istanbul ignore else */\n            if (token === \"rpc\")\n                parseMethod(service, token);\n            else\n                throw illegal(token);\n        });\n        parent.add(service);\n        if (parent === ptr) {\n            topLevelObjects.push(service);\n        }\n    }\n\n    function parseMethod(parent, token) {\n        // Get the comment of the preceding line now (if one exists) in case the\n        // method is defined across multiple lines.\n        var commentText = cmnt();\n\n        var type = token;\n\n        /* istanbul ignore if */\n        if (!nameRe.test(token = next()))\n            throw illegal(token, \"name\");\n\n        var name = token,\n            requestType, requestStream,\n            responseType, responseStream;\n\n        skip(\"(\");\n        if (skip(\"stream\", true))\n            requestStream = true;\n\n        /* istanbul ignore if */\n        if (!typeRefRe.test(token = next()))\n            throw illegal(token);\n\n        requestType = token;\n        skip(\")\"); skip(\"returns\"); skip(\"(\");\n        if (skip(\"stream\", true))\n            responseStream = true;\n\n        /* istanbul ignore if */\n        if (!typeRefRe.test(token = next()))\n            throw illegal(token);\n\n        responseType = token;\n        skip(\")\");\n\n        var method = new Method(name, type, requestType, responseType, requestStream, responseStream);\n        method.comment = commentText;\n        ifBlock(method, function parseMethod_block(token) {\n\n            /* istanbul ignore else */\n            if (token === \"option\") {\n                parseOption(method, token);\n                skip(\";\");\n            } else\n                throw illegal(token);\n\n        });\n        parent.add(method);\n    }\n\n    function parseExtension(parent, token, depth) {\n\n        /* istanbul ignore if */\n        if (!typeRefRe.test(token = next()))\n            throw illegal(token, \"reference\");\n\n        var reference = token;\n        ifBlock(null, function parseExtension_block(token) {\n            switch (token) {\n\n                case \"required\":\n                case \"repeated\":\n                    parseField(parent, token, reference, depth + 1);\n                    break;\n\n                case \"optional\":\n                    /* istanbul ignore if */\n                    if (edition === \"proto3\") {\n                        parseField(parent, \"proto3_optional\", reference, depth + 1);\n                    } else {\n                        parseField(parent, \"optional\", reference, depth + 1);\n                    }\n                    break;\n\n                default:\n                    /* istanbul ignore if */\n                    if (edition === \"proto2\" || !typeRefRe.test(token))\n                        throw illegal(token);\n                    push(token);\n                    parseField(parent, \"optional\", reference, depth + 1);\n                    break;\n            }\n        });\n    }\n\n    var token;\n    while ((token = next()) !== null) {\n        switch (token) {\n\n            case \"package\":\n\n                /* istanbul ignore if */\n                if (!head)\n                    throw illegal(token);\n\n                parsePackage();\n                break;\n\n            case \"import\":\n\n                /* istanbul ignore if */\n                if (!head)\n                    throw illegal(token);\n\n                parseImport();\n                break;\n\n            case \"syntax\":\n\n                /* istanbul ignore if */\n                if (!head)\n                    throw illegal(token);\n\n                parseSyntax();\n                break;\n\n            case \"edition\":\n                /* istanbul ignore if */\n                if (!head)\n                    throw illegal(token);\n                parseEdition();\n                break;\n\n            case \"option\":\n                parseOption(ptr, token);\n                skip(\";\", true);\n                break;\n\n            default:\n\n                /* istanbul ignore else */\n                if (parseCommon(ptr, token, 0)) {\n                    head = false;\n                    continue;\n                }\n\n                /* istanbul ignore next */\n                throw illegal(token);\n        }\n    }\n\n    resolveFileFeatures();\n\n    parse.filename = null;\n    return {\n        \"package\"     : pkg,\n        \"imports\"     : imports,\n         weakImports  : weakImports,\n         root         : root\n    };\n}\n\n/**\n * Parses the given .proto source and returns an object with the parsed contents.\n * @name parse\n * @function\n * @param {string} source Source contents\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {IParserResult} Parser result\n * @property {string} filename=null Currently processing file name for error reporting, if known\n * @property {IParseOptions} defaults Default {@link IParseOptions}\n * @variation 2\n */\n","\"use strict\";\nmodule.exports = common;\n\nvar commonRe = /\\/|\\./;\n\n/**\n * Provides common type definitions.\n * Can also be used to provide additional google types or your own custom types.\n * @param {string} name Short name as in `google/protobuf/[name].proto` or full file name\n * @param {Object.<string,*>} json JSON definition within `google.protobuf` if a short name, otherwise the file's root definition\n * @returns {undefined}\n * @property {INamespace} google/protobuf/any.proto Any\n * @property {INamespace} google/protobuf/duration.proto Duration\n * @property {INamespace} google/protobuf/empty.proto Empty\n * @property {INamespace} google/protobuf/field_mask.proto FieldMask\n * @property {INamespace} google/protobuf/struct.proto Struct, Value, NullValue and ListValue\n * @property {INamespace} google/protobuf/timestamp.proto Timestamp\n * @property {INamespace} google/protobuf/wrappers.proto Wrappers\n * @example\n * // manually provides descriptor.proto (assumes google/protobuf/ namespace and .proto extension)\n * protobuf.common(\"descriptor\", descriptorJson);\n *\n * // manually provides a custom definition (uses my.foo namespace)\n * protobuf.common(\"my/foo/bar.proto\", myFooBarJson);\n */\nfunction common(name, json) {\n    if (!commonRe.test(name)) {\n        name = \"google/protobuf/\" + name + \".proto\";\n        json = { nested: { google: { nested: { protobuf: { nested: json } } } } };\n    }\n    common[name] = json;\n}\n\n// Not provided because of limited use (feel free to discuss or to provide yourself):\n//\n// google/protobuf/descriptor.proto\n// google/protobuf/source_context.proto\n// google/protobuf/type.proto\n//\n// Stripped and pre-parsed versions of these non-bundled files are instead available as part of\n// the repository or package within the google/protobuf directory.\n\ncommon(\"any\", {\n\n    /**\n     * Properties of a google.protobuf.Any message.\n     * @interface IAny\n     * @type {Object}\n     * @property {string} [typeUrl]\n     * @property {Uint8Array} [bytes]\n     * @memberof common\n     */\n    Any: {\n        fields: {\n            type_url: {\n                type: \"string\",\n                id: 1\n            },\n            value: {\n                type: \"bytes\",\n                id: 2\n            }\n        }\n    }\n});\n\nvar timeType;\n\ncommon(\"duration\", {\n\n    /**\n     * Properties of a google.protobuf.Duration message.\n     * @interface IDuration\n     * @type {Object}\n     * @property {number|Long} [seconds]\n     * @property {number} [nanos]\n     * @memberof common\n     */\n    Duration: timeType = {\n        fields: {\n            seconds: {\n                type: \"int64\",\n                id: 1\n            },\n            nanos: {\n                type: \"int32\",\n                id: 2\n            }\n        }\n    }\n});\n\ncommon(\"timestamp\", {\n\n    /**\n     * Properties of a google.protobuf.Timestamp message.\n     * @interface ITimestamp\n     * @type {Object}\n     * @property {number|Long} [seconds]\n     * @property {number} [nanos]\n     * @memberof common\n     */\n    Timestamp: timeType\n});\n\ncommon(\"empty\", {\n\n    /**\n     * Properties of a google.protobuf.Empty message.\n     * @interface IEmpty\n     * @memberof common\n     */\n    Empty: {\n        fields: {}\n    }\n});\n\ncommon(\"struct\", {\n\n    /**\n     * Properties of a google.protobuf.Struct message.\n     * @interface IStruct\n     * @type {Object}\n     * @property {Object.<string,IValue>} [fields]\n     * @memberof common\n     */\n    Struct: {\n        fields: {\n            fields: {\n                keyType: \"string\",\n                type: \"Value\",\n                id: 1\n            }\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.Value message.\n     * @interface IValue\n     * @type {Object}\n     * @property {string} [kind]\n     * @property {0} [nullValue]\n     * @property {number} [numberValue]\n     * @property {string} [stringValue]\n     * @property {boolean} [boolValue]\n     * @property {IStruct} [structValue]\n     * @property {IListValue} [listValue]\n     * @memberof common\n     */\n    Value: {\n        oneofs: {\n            kind: {\n                oneof: [\n                    \"nullValue\",\n                    \"numberValue\",\n                    \"stringValue\",\n                    \"boolValue\",\n                    \"structValue\",\n                    \"listValue\"\n                ]\n            }\n        },\n        fields: {\n            nullValue: {\n                type: \"NullValue\",\n                id: 1\n            },\n            numberValue: {\n                type: \"double\",\n                id: 2\n            },\n            stringValue: {\n                type: \"string\",\n                id: 3\n            },\n            boolValue: {\n                type: \"bool\",\n                id: 4\n            },\n            structValue: {\n                type: \"Struct\",\n                id: 5\n            },\n            listValue: {\n                type: \"ListValue\",\n                id: 6\n            }\n        }\n    },\n\n    NullValue: {\n        values: {\n            NULL_VALUE: 0\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.ListValue message.\n     * @interface IListValue\n     * @type {Object}\n     * @property {Array.<IValue>} [values]\n     * @memberof common\n     */\n    ListValue: {\n        fields: {\n            values: {\n                rule: \"repeated\",\n                type: \"Value\",\n                id: 1\n            }\n        }\n    }\n});\n\ncommon(\"wrappers\", {\n\n    /**\n     * Properties of a google.protobuf.DoubleValue message.\n     * @interface IDoubleValue\n     * @type {Object}\n     * @property {number} [value]\n     * @memberof common\n     */\n    DoubleValue: {\n        fields: {\n            value: {\n                type: \"double\",\n                id: 1\n            }\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.FloatValue message.\n     * @interface IFloatValue\n     * @type {Object}\n     * @property {number} [value]\n     * @memberof common\n     */\n    FloatValue: {\n        fields: {\n            value: {\n                type: \"float\",\n                id: 1\n            }\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.Int64Value message.\n     * @interface IInt64Value\n     * @type {Object}\n     * @property {number|Long} [value]\n     * @memberof common\n     */\n    Int64Value: {\n        fields: {\n            value: {\n                type: \"int64\",\n                id: 1\n            }\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.UInt64Value message.\n     * @interface IUInt64Value\n     * @type {Object}\n     * @property {number|Long} [value]\n     * @memberof common\n     */\n    UInt64Value: {\n        fields: {\n            value: {\n                type: \"uint64\",\n                id: 1\n            }\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.Int32Value message.\n     * @interface IInt32Value\n     * @type {Object}\n     * @property {number} [value]\n     * @memberof common\n     */\n    Int32Value: {\n        fields: {\n            value: {\n                type: \"int32\",\n                id: 1\n            }\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.UInt32Value message.\n     * @interface IUInt32Value\n     * @type {Object}\n     * @property {number} [value]\n     * @memberof common\n     */\n    UInt32Value: {\n        fields: {\n            value: {\n                type: \"uint32\",\n                id: 1\n            }\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.BoolValue message.\n     * @interface IBoolValue\n     * @type {Object}\n     * @property {boolean} [value]\n     * @memberof common\n     */\n    BoolValue: {\n        fields: {\n            value: {\n                type: \"bool\",\n                id: 1\n            }\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.StringValue message.\n     * @interface IStringValue\n     * @type {Object}\n     * @property {string} [value]\n     * @memberof common\n     */\n    StringValue: {\n        fields: {\n            value: {\n                type: \"string\",\n                id: 1\n            }\n        }\n    },\n\n    /**\n     * Properties of a google.protobuf.BytesValue message.\n     * @interface IBytesValue\n     * @type {Object}\n     * @property {Uint8Array} [value]\n     * @memberof common\n     */\n    BytesValue: {\n        fields: {\n            value: {\n                type: \"bytes\",\n                id: 1\n            }\n        }\n    }\n});\n\ncommon(\"field_mask\", {\n\n    /**\n     * Properties of a google.protobuf.FieldMask message.\n     * @interface IDoubleValue\n     * @type {Object}\n     * @property {number} [value]\n     * @memberof common\n     */\n    FieldMask: {\n        fields: {\n            paths: {\n                rule: \"repeated\",\n                type: \"string\",\n                id: 1\n            }\n        }\n    }\n});\n\n/**\n * Gets the root definition of the specified common proto file.\n *\n * Bundled definitions are:\n * - google/protobuf/any.proto\n * - google/protobuf/duration.proto\n * - google/protobuf/empty.proto\n * - google/protobuf/field_mask.proto\n * - google/protobuf/struct.proto\n * - google/protobuf/timestamp.proto\n * - google/protobuf/wrappers.proto\n *\n * @param {string} file Proto file name\n * @returns {INamespace|null} Root definition or `null` if not defined\n */\ncommon.get = function get(file) {\n    return common[file] || null;\n};\n","\"use strict\";\nvar protobuf = module.exports = require(\"./index-light\");\n\nprotobuf.build = \"full\";\n\n// Parser\nprotobuf.tokenize         = require(\"./tokenize\");\nprotobuf.parse            = require(\"./parse\");\nprotobuf.common           = require(\"./common\");\n\n// Configure parser\nprotobuf.Root._configure(protobuf.Type, protobuf.parse, protobuf.common);\n","// full library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index\");\n","{\n  \"nested\": {\n    \"google\": {\n      \"nested\": {\n        \"protobuf\": {\n          \"options\": {\n            \"go_package\": \"google.golang.org/protobuf/types/descriptorpb\",\n            \"java_package\": \"com.google.protobuf\",\n            \"java_outer_classname\": \"DescriptorProtos\",\n            \"csharp_namespace\": \"Google.Protobuf.Reflection\",\n            \"objc_class_prefix\": \"GPB\",\n            \"cc_enable_arenas\": true,\n            \"optimize_for\": \"SPEED\"\n          },\n          \"nested\": {\n            \"FileDescriptorSet\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"file\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"FileDescriptorProto\",\n                  \"id\": 1\n                }\n              },\n              \"extensions\": [\n                [\n                  536000000,\n                  536000000\n                ]\n              ]\n            },\n            \"Edition\": {\n              \"edition\": \"proto2\",\n              \"values\": {\n                \"EDITION_UNKNOWN\": 0,\n                \"EDITION_LEGACY\": 900,\n                \"EDITION_PROTO2\": 998,\n                \"EDITION_PROTO3\": 999,\n                \"EDITION_2023\": 1000,\n                \"EDITION_2024\": 1001,\n                \"EDITION_1_TEST_ONLY\": 1,\n                \"EDITION_2_TEST_ONLY\": 2,\n                \"EDITION_99997_TEST_ONLY\": 99997,\n                \"EDITION_99998_TEST_ONLY\": 99998,\n                \"EDITION_99999_TEST_ONLY\": 99999,\n                \"EDITION_MAX\": 2147483647\n              }\n            },\n            \"FileDescriptorProto\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"package\": {\n                  \"type\": \"string\",\n                  \"id\": 2\n                },\n                \"dependency\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"string\",\n                  \"id\": 3\n                },\n                \"publicDependency\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"int32\",\n                  \"id\": 10\n                },\n                \"weakDependency\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"int32\",\n                  \"id\": 11\n                },\n                \"optionDependency\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"string\",\n                  \"id\": 15\n                },\n                \"messageType\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"DescriptorProto\",\n                  \"id\": 4\n                },\n                \"enumType\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"EnumDescriptorProto\",\n                  \"id\": 5\n                },\n                \"service\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"ServiceDescriptorProto\",\n                  \"id\": 6\n                },\n                \"extension\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"FieldDescriptorProto\",\n                  \"id\": 7\n                },\n                \"options\": {\n                  \"type\": \"FileOptions\",\n                  \"id\": 8\n                },\n                \"sourceCodeInfo\": {\n                  \"type\": \"SourceCodeInfo\",\n                  \"id\": 9\n                },\n                \"syntax\": {\n                  \"type\": \"string\",\n                  \"id\": 12\n                },\n                \"edition\": {\n                  \"type\": \"Edition\",\n                  \"id\": 14\n                }\n              }\n            },\n            \"DescriptorProto\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"field\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"FieldDescriptorProto\",\n                  \"id\": 2\n                },\n                \"extension\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"FieldDescriptorProto\",\n                  \"id\": 6\n                },\n                \"nestedType\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"DescriptorProto\",\n                  \"id\": 3\n                },\n                \"enumType\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"EnumDescriptorProto\",\n                  \"id\": 4\n                },\n                \"extensionRange\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"ExtensionRange\",\n                  \"id\": 5\n                },\n                \"oneofDecl\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"OneofDescriptorProto\",\n                  \"id\": 8\n                },\n                \"options\": {\n                  \"type\": \"MessageOptions\",\n                  \"id\": 7\n                },\n                \"reservedRange\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"ReservedRange\",\n                  \"id\": 9\n                },\n                \"reservedName\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"string\",\n                  \"id\": 10\n                },\n                \"visibility\": {\n                  \"type\": \"SymbolVisibility\",\n                  \"id\": 11\n                }\n              },\n              \"nested\": {\n                \"ExtensionRange\": {\n                  \"fields\": {\n                    \"start\": {\n                      \"type\": \"int32\",\n                      \"id\": 1\n                    },\n                    \"end\": {\n                      \"type\": \"int32\",\n                      \"id\": 2\n                    },\n                    \"options\": {\n                      \"type\": \"ExtensionRangeOptions\",\n                      \"id\": 3\n                    }\n                  }\n                },\n                \"ReservedRange\": {\n                  \"fields\": {\n                    \"start\": {\n                      \"type\": \"int32\",\n                      \"id\": 1\n                    },\n                    \"end\": {\n                      \"type\": \"int32\",\n                      \"id\": 2\n                    }\n                  }\n                }\n              }\n            },\n            \"ExtensionRangeOptions\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"uninterpretedOption\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"UninterpretedOption\",\n                  \"id\": 999\n                },\n                \"declaration\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Declaration\",\n                  \"id\": 2,\n                  \"options\": {\n                    \"retention\": \"RETENTION_SOURCE\"\n                  }\n                },\n                \"features\": {\n                  \"type\": \"FeatureSet\",\n                  \"id\": 50\n                },\n                \"verification\": {\n                  \"type\": \"VerificationState\",\n                  \"id\": 3,\n                  \"options\": {\n                    \"default\": \"UNVERIFIED\",\n                    \"retention\": \"RETENTION_SOURCE\"\n                  }\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  536870911\n                ]\n              ],\n              \"nested\": {\n                \"Declaration\": {\n                  \"fields\": {\n                    \"number\": {\n                      \"type\": \"int32\",\n                      \"id\": 1\n                    },\n                    \"fullName\": {\n                      \"type\": \"string\",\n                      \"id\": 2\n                    },\n                    \"type\": {\n                      \"type\": \"string\",\n                      \"id\": 3\n                    },\n                    \"reserved\": {\n                      \"type\": \"bool\",\n                      \"id\": 5\n                    },\n                    \"repeated\": {\n                      \"type\": \"bool\",\n                      \"id\": 6\n                    }\n                  },\n                  \"reserved\": [\n                    [\n                      4,\n                      4\n                    ]\n                  ]\n                },\n                \"VerificationState\": {\n                  \"values\": {\n                    \"DECLARATION\": 0,\n                    \"UNVERIFIED\": 1\n                  }\n                }\n              }\n            },\n            \"FieldDescriptorProto\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"number\": {\n                  \"type\": \"int32\",\n                  \"id\": 3\n                },\n                \"label\": {\n                  \"type\": \"Label\",\n                  \"id\": 4\n                },\n                \"type\": {\n                  \"type\": \"Type\",\n                  \"id\": 5\n                },\n                \"typeName\": {\n                  \"type\": \"string\",\n                  \"id\": 6\n                },\n                \"extendee\": {\n                  \"type\": \"string\",\n                  \"id\": 2\n                },\n                \"defaultValue\": {\n                  \"type\": \"string\",\n                  \"id\": 7\n                },\n                \"oneofIndex\": {\n                  \"type\": \"int32\",\n                  \"id\": 9\n                },\n                \"jsonName\": {\n                  \"type\": \"string\",\n                  \"id\": 10\n                },\n                \"options\": {\n                  \"type\": \"FieldOptions\",\n                  \"id\": 8\n                },\n                \"proto3Optional\": {\n                  \"type\": \"bool\",\n                  \"id\": 17\n                }\n              },\n              \"nested\": {\n                \"Type\": {\n                  \"values\": {\n                    \"TYPE_DOUBLE\": 1,\n                    \"TYPE_FLOAT\": 2,\n                    \"TYPE_INT64\": 3,\n                    \"TYPE_UINT64\": 4,\n                    \"TYPE_INT32\": 5,\n                    \"TYPE_FIXED64\": 6,\n                    \"TYPE_FIXED32\": 7,\n                    \"TYPE_BOOL\": 8,\n                    \"TYPE_STRING\": 9,\n                    \"TYPE_GROUP\": 10,\n                    \"TYPE_MESSAGE\": 11,\n                    \"TYPE_BYTES\": 12,\n                    \"TYPE_UINT32\": 13,\n                    \"TYPE_ENUM\": 14,\n                    \"TYPE_SFIXED32\": 15,\n                    \"TYPE_SFIXED64\": 16,\n                    \"TYPE_SINT32\": 17,\n                    \"TYPE_SINT64\": 18\n                  }\n                },\n                \"Label\": {\n                  \"values\": {\n                    \"LABEL_OPTIONAL\": 1,\n                    \"LABEL_REPEATED\": 3,\n                    \"LABEL_REQUIRED\": 2\n                  }\n                }\n              }\n            },\n            \"OneofDescriptorProto\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"options\": {\n                  \"type\": \"OneofOptions\",\n                  \"id\": 2\n                }\n              }\n            },\n            \"EnumDescriptorProto\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"value\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"EnumValueDescriptorProto\",\n                  \"id\": 2\n                },\n                \"options\": {\n                  \"type\": \"EnumOptions\",\n                  \"id\": 3\n                },\n                \"reservedRange\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"EnumReservedRange\",\n                  \"id\": 4\n                },\n                \"reservedName\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"string\",\n                  \"id\": 5\n                },\n                \"visibility\": {\n                  \"type\": \"SymbolVisibility\",\n                  \"id\": 6\n                }\n              },\n              \"nested\": {\n                \"EnumReservedRange\": {\n                  \"fields\": {\n                    \"start\": {\n                      \"type\": \"int32\",\n                      \"id\": 1\n                    },\n                    \"end\": {\n                      \"type\": \"int32\",\n                      \"id\": 2\n                    }\n                  }\n                }\n              }\n            },\n            \"EnumValueDescriptorProto\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"number\": {\n                  \"type\": \"int32\",\n                  \"id\": 2\n                },\n                \"options\": {\n                  \"type\": \"EnumValueOptions\",\n                  \"id\": 3\n                }\n              }\n            },\n            \"ServiceDescriptorProto\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"method\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"MethodDescriptorProto\",\n                  \"id\": 2\n                },\n                \"options\": {\n                  \"type\": \"ServiceOptions\",\n                  \"id\": 3\n                }\n              }\n            },\n            \"MethodDescriptorProto\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"inputType\": {\n                  \"type\": \"string\",\n                  \"id\": 2\n                },\n                \"outputType\": {\n                  \"type\": \"string\",\n                  \"id\": 3\n                },\n                \"options\": {\n                  \"type\": \"MethodOptions\",\n                  \"id\": 4\n                },\n                \"clientStreaming\": {\n                  \"type\": \"bool\",\n                  \"id\": 5\n                },\n                \"serverStreaming\": {\n                  \"type\": \"bool\",\n                  \"id\": 6\n                }\n              }\n            },\n            \"FileOptions\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"javaPackage\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"javaOuterClassname\": {\n                  \"type\": \"string\",\n                  \"id\": 8\n                },\n                \"javaMultipleFiles\": {\n                  \"type\": \"bool\",\n                  \"id\": 10\n                },\n                \"javaGenerateEqualsAndHash\": {\n                  \"type\": \"bool\",\n                  \"id\": 20,\n                  \"options\": {\n                    \"deprecated\": true\n                  }\n                },\n                \"javaStringCheckUtf8\": {\n                  \"type\": \"bool\",\n                  \"id\": 27\n                },\n                \"optimizeFor\": {\n                  \"type\": \"OptimizeMode\",\n                  \"id\": 9,\n                  \"options\": {\n                    \"default\": \"SPEED\"\n                  }\n                },\n                \"goPackage\": {\n                  \"type\": \"string\",\n                  \"id\": 11\n                },\n                \"ccGenericServices\": {\n                  \"type\": \"bool\",\n                  \"id\": 16\n                },\n                \"javaGenericServices\": {\n                  \"type\": \"bool\",\n                  \"id\": 17\n                },\n                \"pyGenericServices\": {\n                  \"type\": \"bool\",\n                  \"id\": 18\n                },\n                \"deprecated\": {\n                  \"type\": \"bool\",\n                  \"id\": 23\n                },\n                \"ccEnableArenas\": {\n                  \"type\": \"bool\",\n                  \"id\": 31,\n                  \"options\": {\n                    \"default\": true\n                  }\n                },\n                \"objcClassPrefix\": {\n                  \"type\": \"string\",\n                  \"id\": 36\n                },\n                \"csharpNamespace\": {\n                  \"type\": \"string\",\n                  \"id\": 37\n                },\n                \"swiftPrefix\": {\n                  \"type\": \"string\",\n                  \"id\": 39\n                },\n                \"phpClassPrefix\": {\n                  \"type\": \"string\",\n                  \"id\": 40\n                },\n                \"phpNamespace\": {\n                  \"type\": \"string\",\n                  \"id\": 41\n                },\n                \"phpMetadataNamespace\": {\n                  \"type\": \"string\",\n                  \"id\": 44\n                },\n                \"rubyPackage\": {\n                  \"type\": \"string\",\n                  \"id\": 45\n                },\n                \"features\": {\n                  \"type\": \"FeatureSet\",\n                  \"id\": 50\n                },\n                \"uninterpretedOption\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"UninterpretedOption\",\n                  \"id\": 999\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  536870911\n                ]\n              ],\n              \"reserved\": [\n                [\n                  42,\n                  42\n                ],\n                [\n                  38,\n                  38\n                ],\n                \"php_generic_services\"\n              ],\n              \"nested\": {\n                \"OptimizeMode\": {\n                  \"values\": {\n                    \"SPEED\": 1,\n                    \"CODE_SIZE\": 2,\n                    \"LITE_RUNTIME\": 3\n                  }\n                }\n              }\n            },\n            \"MessageOptions\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"messageSetWireFormat\": {\n                  \"type\": \"bool\",\n                  \"id\": 1\n                },\n                \"noStandardDescriptorAccessor\": {\n                  \"type\": \"bool\",\n                  \"id\": 2\n                },\n                \"deprecated\": {\n                  \"type\": \"bool\",\n                  \"id\": 3\n                },\n                \"mapEntry\": {\n                  \"type\": \"bool\",\n                  \"id\": 7\n                },\n                \"deprecatedLegacyJsonFieldConflicts\": {\n                  \"type\": \"bool\",\n                  \"id\": 11,\n                  \"options\": {\n                    \"deprecated\": true\n                  }\n                },\n                \"features\": {\n                  \"type\": \"FeatureSet\",\n                  \"id\": 12\n                },\n                \"uninterpretedOption\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"UninterpretedOption\",\n                  \"id\": 999\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  536870911\n                ]\n              ],\n              \"reserved\": [\n                [\n                  4,\n                  4\n                ],\n                [\n                  5,\n                  5\n                ],\n                [\n                  6,\n                  6\n                ],\n                [\n                  8,\n                  8\n                ],\n                [\n                  9,\n                  9\n                ]\n              ]\n            },\n            \"FieldOptions\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"ctype\": {\n                  \"type\": \"CType\",\n                  \"id\": 1,\n                  \"options\": {\n                    \"default\": \"STRING\"\n                  }\n                },\n                \"packed\": {\n                  \"type\": \"bool\",\n                  \"id\": 2\n                },\n                \"jstype\": {\n                  \"type\": \"JSType\",\n                  \"id\": 6,\n                  \"options\": {\n                    \"default\": \"JS_NORMAL\"\n                  }\n                },\n                \"lazy\": {\n                  \"type\": \"bool\",\n                  \"id\": 5\n                },\n                \"unverifiedLazy\": {\n                  \"type\": \"bool\",\n                  \"id\": 15\n                },\n                \"deprecated\": {\n                  \"type\": \"bool\",\n                  \"id\": 3\n                },\n                \"weak\": {\n                  \"type\": \"bool\",\n                  \"id\": 10,\n                  \"options\": {\n                    \"deprecated\": true\n                  }\n                },\n                \"debugRedact\": {\n                  \"type\": \"bool\",\n                  \"id\": 16\n                },\n                \"retention\": {\n                  \"type\": \"OptionRetention\",\n                  \"id\": 17\n                },\n                \"targets\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"OptionTargetType\",\n                  \"id\": 19\n                },\n                \"editionDefaults\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"EditionDefault\",\n                  \"id\": 20\n                },\n                \"features\": {\n                  \"type\": \"FeatureSet\",\n                  \"id\": 21\n                },\n                \"featureSupport\": {\n                  \"type\": \"FeatureSupport\",\n                  \"id\": 22\n                },\n                \"uninterpretedOption\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"UninterpretedOption\",\n                  \"id\": 999\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  536870911\n                ]\n              ],\n              \"reserved\": [\n                [\n                  4,\n                  4\n                ],\n                [\n                  18,\n                  18\n                ]\n              ],\n              \"nested\": {\n                \"CType\": {\n                  \"values\": {\n                    \"STRING\": 0,\n                    \"CORD\": 1,\n                    \"STRING_PIECE\": 2\n                  }\n                },\n                \"JSType\": {\n                  \"values\": {\n                    \"JS_NORMAL\": 0,\n                    \"JS_STRING\": 1,\n                    \"JS_NUMBER\": 2\n                  }\n                },\n                \"OptionRetention\": {\n                  \"values\": {\n                    \"RETENTION_UNKNOWN\": 0,\n                    \"RETENTION_RUNTIME\": 1,\n                    \"RETENTION_SOURCE\": 2\n                  }\n                },\n                \"OptionTargetType\": {\n                  \"values\": {\n                    \"TARGET_TYPE_UNKNOWN\": 0,\n                    \"TARGET_TYPE_FILE\": 1,\n                    \"TARGET_TYPE_EXTENSION_RANGE\": 2,\n                    \"TARGET_TYPE_MESSAGE\": 3,\n                    \"TARGET_TYPE_FIELD\": 4,\n                    \"TARGET_TYPE_ONEOF\": 5,\n                    \"TARGET_TYPE_ENUM\": 6,\n                    \"TARGET_TYPE_ENUM_ENTRY\": 7,\n                    \"TARGET_TYPE_SERVICE\": 8,\n                    \"TARGET_TYPE_METHOD\": 9\n                  }\n                },\n                \"EditionDefault\": {\n                  \"fields\": {\n                    \"edition\": {\n                      \"type\": \"Edition\",\n                      \"id\": 3\n                    },\n                    \"value\": {\n                      \"type\": \"string\",\n                      \"id\": 2\n                    }\n                  }\n                },\n                \"FeatureSupport\": {\n                  \"fields\": {\n                    \"editionIntroduced\": {\n                      \"type\": \"Edition\",\n                      \"id\": 1\n                    },\n                    \"editionDeprecated\": {\n                      \"type\": \"Edition\",\n                      \"id\": 2\n                    },\n                    \"deprecationWarning\": {\n                      \"type\": \"string\",\n                      \"id\": 3\n                    },\n                    \"editionRemoved\": {\n                      \"type\": \"Edition\",\n                      \"id\": 4\n                    }\n                  }\n                }\n              }\n            },\n            \"OneofOptions\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"features\": {\n                  \"type\": \"FeatureSet\",\n                  \"id\": 1\n                },\n                \"uninterpretedOption\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"UninterpretedOption\",\n                  \"id\": 999\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  536870911\n                ]\n              ]\n            },\n            \"EnumOptions\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"allowAlias\": {\n                  \"type\": \"bool\",\n                  \"id\": 2\n                },\n                \"deprecated\": {\n                  \"type\": \"bool\",\n                  \"id\": 3\n                },\n                \"deprecatedLegacyJsonFieldConflicts\": {\n                  \"type\": \"bool\",\n                  \"id\": 6,\n                  \"options\": {\n                    \"deprecated\": true\n                  }\n                },\n                \"features\": {\n                  \"type\": \"FeatureSet\",\n                  \"id\": 7\n                },\n                \"uninterpretedOption\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"UninterpretedOption\",\n                  \"id\": 999\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  536870911\n                ]\n              ],\n              \"reserved\": [\n                [\n                  5,\n                  5\n                ]\n              ]\n            },\n            \"EnumValueOptions\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"deprecated\": {\n                  \"type\": \"bool\",\n                  \"id\": 1\n                },\n                \"features\": {\n                  \"type\": \"FeatureSet\",\n                  \"id\": 2\n                },\n                \"debugRedact\": {\n                  \"type\": \"bool\",\n                  \"id\": 3\n                },\n                \"featureSupport\": {\n                  \"type\": \"FieldOptions.FeatureSupport\",\n                  \"id\": 4\n                },\n                \"uninterpretedOption\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"UninterpretedOption\",\n                  \"id\": 999\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  536870911\n                ]\n              ]\n            },\n            \"ServiceOptions\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"features\": {\n                  \"type\": \"FeatureSet\",\n                  \"id\": 34\n                },\n                \"deprecated\": {\n                  \"type\": \"bool\",\n                  \"id\": 33\n                },\n                \"uninterpretedOption\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"UninterpretedOption\",\n                  \"id\": 999\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  536870911\n                ]\n              ]\n            },\n            \"MethodOptions\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"deprecated\": {\n                  \"type\": \"bool\",\n                  \"id\": 33\n                },\n                \"idempotencyLevel\": {\n                  \"type\": \"IdempotencyLevel\",\n                  \"id\": 34,\n                  \"options\": {\n                    \"default\": \"IDEMPOTENCY_UNKNOWN\"\n                  }\n                },\n                \"features\": {\n                  \"type\": \"FeatureSet\",\n                  \"id\": 35\n                },\n                \"uninterpretedOption\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"UninterpretedOption\",\n                  \"id\": 999\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  536870911\n                ]\n              ],\n              \"nested\": {\n                \"IdempotencyLevel\": {\n                  \"values\": {\n                    \"IDEMPOTENCY_UNKNOWN\": 0,\n                    \"NO_SIDE_EFFECTS\": 1,\n                    \"IDEMPOTENT\": 2\n                  }\n                }\n              }\n            },\n            \"UninterpretedOption\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"name\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"NamePart\",\n                  \"id\": 2\n                },\n                \"identifierValue\": {\n                  \"type\": \"string\",\n                  \"id\": 3\n                },\n                \"positiveIntValue\": {\n                  \"type\": \"uint64\",\n                  \"id\": 4\n                },\n                \"negativeIntValue\": {\n                  \"type\": \"int64\",\n                  \"id\": 5\n                },\n                \"doubleValue\": {\n                  \"type\": \"double\",\n                  \"id\": 6\n                },\n                \"stringValue\": {\n                  \"type\": \"bytes\",\n                  \"id\": 7\n                },\n                \"aggregateValue\": {\n                  \"type\": \"string\",\n                  \"id\": 8\n                }\n              },\n              \"nested\": {\n                \"NamePart\": {\n                  \"fields\": {\n                    \"namePart\": {\n                      \"rule\": \"required\",\n                      \"type\": \"string\",\n                      \"id\": 1\n                    },\n                    \"isExtension\": {\n                      \"rule\": \"required\",\n                      \"type\": \"bool\",\n                      \"id\": 2\n                    }\n                  }\n                }\n              }\n            },\n            \"FeatureSet\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"fieldPresence\": {\n                  \"type\": \"FieldPresence\",\n                  \"id\": 1,\n                  \"options\": {\n                    \"retention\": \"RETENTION_RUNTIME\",\n                    \"targets\": \"TARGET_TYPE_FILE\",\n                    \"feature_support.edition_introduced\": \"EDITION_2023\",\n                    \"edition_defaults.edition\": \"EDITION_2023\",\n                    \"edition_defaults.value\": \"EXPLICIT\"\n                  }\n                },\n                \"enumType\": {\n                  \"type\": \"EnumType\",\n                  \"id\": 2,\n                  \"options\": {\n                    \"retention\": \"RETENTION_RUNTIME\",\n                    \"targets\": \"TARGET_TYPE_FILE\",\n                    \"feature_support.edition_introduced\": \"EDITION_2023\",\n                    \"edition_defaults.edition\": \"EDITION_PROTO3\",\n                    \"edition_defaults.value\": \"OPEN\"\n                  }\n                },\n                \"repeatedFieldEncoding\": {\n                  \"type\": \"RepeatedFieldEncoding\",\n                  \"id\": 3,\n                  \"options\": {\n                    \"retention\": \"RETENTION_RUNTIME\",\n                    \"targets\": \"TARGET_TYPE_FILE\",\n                    \"feature_support.edition_introduced\": \"EDITION_2023\",\n                    \"edition_defaults.edition\": \"EDITION_PROTO3\",\n                    \"edition_defaults.value\": \"PACKED\"\n                  }\n                },\n                \"utf8Validation\": {\n                  \"type\": \"Utf8Validation\",\n                  \"id\": 4,\n                  \"options\": {\n                    \"retention\": \"RETENTION_RUNTIME\",\n                    \"targets\": \"TARGET_TYPE_FILE\",\n                    \"feature_support.edition_introduced\": \"EDITION_2023\",\n                    \"edition_defaults.edition\": \"EDITION_PROTO3\",\n                    \"edition_defaults.value\": \"VERIFY\"\n                  }\n                },\n                \"messageEncoding\": {\n                  \"type\": \"MessageEncoding\",\n                  \"id\": 5,\n                  \"options\": {\n                    \"retention\": \"RETENTION_RUNTIME\",\n                    \"targets\": \"TARGET_TYPE_FILE\",\n                    \"feature_support.edition_introduced\": \"EDITION_2023\",\n                    \"edition_defaults.edition\": \"EDITION_LEGACY\",\n                    \"edition_defaults.value\": \"LENGTH_PREFIXED\"\n                  }\n                },\n                \"jsonFormat\": {\n                  \"type\": \"JsonFormat\",\n                  \"id\": 6,\n                  \"options\": {\n                    \"retention\": \"RETENTION_RUNTIME\",\n                    \"targets\": \"TARGET_TYPE_FILE\",\n                    \"feature_support.edition_introduced\": \"EDITION_2023\",\n                    \"edition_defaults.edition\": \"EDITION_PROTO3\",\n                    \"edition_defaults.value\": \"ALLOW\"\n                  }\n                },\n                \"enforceNamingStyle\": {\n                  \"type\": \"EnforceNamingStyle\",\n                  \"id\": 7,\n                  \"options\": {\n                    \"retention\": \"RETENTION_SOURCE\",\n                    \"targets\": \"TARGET_TYPE_METHOD\",\n                    \"feature_support.edition_introduced\": \"EDITION_2024\",\n                    \"edition_defaults.edition\": \"EDITION_2024\",\n                    \"edition_defaults.value\": \"STYLE2024\"\n                  }\n                },\n                \"defaultSymbolVisibility\": {\n                  \"type\": \"VisibilityFeature.DefaultSymbolVisibility\",\n                  \"id\": 8,\n                  \"options\": {\n                    \"retention\": \"RETENTION_SOURCE\",\n                    \"targets\": \"TARGET_TYPE_FILE\",\n                    \"feature_support.edition_introduced\": \"EDITION_2024\",\n                    \"edition_defaults.edition\": \"EDITION_2024\",\n                    \"edition_defaults.value\": \"EXPORT_TOP_LEVEL\"\n                  }\n                }\n              },\n              \"extensions\": [\n                [\n                  1000,\n                  9994\n                ],\n                [\n                  9995,\n                  9999\n                ],\n                [\n                  10000,\n                  10000\n                ]\n              ],\n              \"reserved\": [\n                [\n                  999,\n                  999\n                ]\n              ],\n              \"nested\": {\n                \"FieldPresence\": {\n                  \"values\": {\n                    \"FIELD_PRESENCE_UNKNOWN\": 0,\n                    \"EXPLICIT\": 1,\n                    \"IMPLICIT\": 2,\n                    \"LEGACY_REQUIRED\": 3\n                  }\n                },\n                \"EnumType\": {\n                  \"values\": {\n                    \"ENUM_TYPE_UNKNOWN\": 0,\n                    \"OPEN\": 1,\n                    \"CLOSED\": 2\n                  }\n                },\n                \"RepeatedFieldEncoding\": {\n                  \"values\": {\n                    \"REPEATED_FIELD_ENCODING_UNKNOWN\": 0,\n                    \"PACKED\": 1,\n                    \"EXPANDED\": 2\n                  }\n                },\n                \"Utf8Validation\": {\n                  \"values\": {\n                    \"UTF8_VALIDATION_UNKNOWN\": 0,\n                    \"VERIFY\": 2,\n                    \"NONE\": 3\n                  }\n                },\n                \"MessageEncoding\": {\n                  \"values\": {\n                    \"MESSAGE_ENCODING_UNKNOWN\": 0,\n                    \"LENGTH_PREFIXED\": 1,\n                    \"DELIMITED\": 2\n                  }\n                },\n                \"JsonFormat\": {\n                  \"values\": {\n                    \"JSON_FORMAT_UNKNOWN\": 0,\n                    \"ALLOW\": 1,\n                    \"LEGACY_BEST_EFFORT\": 2\n                  }\n                },\n                \"EnforceNamingStyle\": {\n                  \"values\": {\n                    \"ENFORCE_NAMING_STYLE_UNKNOWN\": 0,\n                    \"STYLE2024\": 1,\n                    \"STYLE_LEGACY\": 2\n                  }\n                },\n                \"VisibilityFeature\": {\n                  \"fields\": {},\n                  \"reserved\": [\n                    [\n                      1,\n                      536870911\n                    ]\n                  ],\n                  \"nested\": {\n                    \"DefaultSymbolVisibility\": {\n                      \"values\": {\n                        \"DEFAULT_SYMBOL_VISIBILITY_UNKNOWN\": 0,\n                        \"EXPORT_ALL\": 1,\n                        \"EXPORT_TOP_LEVEL\": 2,\n                        \"LOCAL_ALL\": 3,\n                        \"STRICT\": 4\n                      }\n                    }\n                  }\n                }\n              }\n            },\n            \"FeatureSetDefaults\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"defaults\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"FeatureSetEditionDefault\",\n                  \"id\": 1\n                },\n                \"minimumEdition\": {\n                  \"type\": \"Edition\",\n                  \"id\": 4\n                },\n                \"maximumEdition\": {\n                  \"type\": \"Edition\",\n                  \"id\": 5\n                }\n              },\n              \"nested\": {\n                \"FeatureSetEditionDefault\": {\n                  \"fields\": {\n                    \"edition\": {\n                      \"type\": \"Edition\",\n                      \"id\": 3\n                    },\n                    \"overridableFeatures\": {\n                      \"type\": \"FeatureSet\",\n                      \"id\": 4\n                    },\n                    \"fixedFeatures\": {\n                      \"type\": \"FeatureSet\",\n                      \"id\": 5\n                    }\n                  },\n                  \"reserved\": [\n                    [\n                      1,\n                      1\n                    ],\n                    [\n                      2,\n                      2\n                    ],\n                    \"features\"\n                  ]\n                }\n              }\n            },\n            \"SourceCodeInfo\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"location\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Location\",\n                  \"id\": 1\n                }\n              },\n              \"extensions\": [\n                [\n                  536000000,\n                  536000000\n                ]\n              ],\n              \"nested\": {\n                \"Location\": {\n                  \"fields\": {\n                    \"path\": {\n                      \"rule\": \"repeated\",\n                      \"type\": \"int32\",\n                      \"id\": 1,\n                      \"options\": {\n                        \"packed\": true\n                      }\n                    },\n                    \"span\": {\n                      \"rule\": \"repeated\",\n                      \"type\": \"int32\",\n                      \"id\": 2,\n                      \"options\": {\n                        \"packed\": true\n                      }\n                    },\n                    \"leadingComments\": {\n                      \"type\": \"string\",\n                      \"id\": 3\n                    },\n                    \"trailingComments\": {\n                      \"type\": \"string\",\n                      \"id\": 4\n                    },\n                    \"leadingDetachedComments\": {\n                      \"rule\": \"repeated\",\n                      \"type\": \"string\",\n                      \"id\": 6\n                    }\n                  }\n                }\n              }\n            },\n            \"GeneratedCodeInfo\": {\n              \"edition\": \"proto2\",\n              \"fields\": {\n                \"annotation\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Annotation\",\n                  \"id\": 1\n                }\n              },\n              \"nested\": {\n                \"Annotation\": {\n                  \"fields\": {\n                    \"path\": {\n                      \"rule\": \"repeated\",\n                      \"type\": \"int32\",\n                      \"id\": 1,\n                      \"options\": {\n                        \"packed\": true\n                      }\n                    },\n                    \"sourceFile\": {\n                      \"type\": \"string\",\n                      \"id\": 2\n                    },\n                    \"begin\": {\n                      \"type\": \"int32\",\n                      \"id\": 3\n                    },\n                    \"end\": {\n                      \"type\": \"int32\",\n                      \"id\": 4\n                    },\n                    \"semantic\": {\n                      \"type\": \"Semantic\",\n                      \"id\": 5\n                    }\n                  },\n                  \"nested\": {\n                    \"Semantic\": {\n                      \"values\": {\n                        \"NONE\": 0,\n                        \"SET\": 1,\n                        \"ALIAS\": 2\n                      }\n                    }\n                  }\n                }\n              }\n            },\n            \"SymbolVisibility\": {\n              \"edition\": \"proto2\",\n              \"values\": {\n                \"VISIBILITY_UNSET\": 0,\n                \"VISIBILITY_LOCAL\": 1,\n                \"VISIBILITY_EXPORT\": 2\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}","\"use strict\";\nvar $protobuf = require(\"../..\");\nmodule.exports = exports = $protobuf.descriptor = $protobuf.Root.fromJSON(require(\"../../google/protobuf/descriptor.json\")).lookup(\".google.protobuf\");\n\nvar Namespace = $protobuf.Namespace,\n    Root      = $protobuf.Root,\n    Enum      = $protobuf.Enum,\n    Type      = $protobuf.Type,\n    Field     = $protobuf.Field,\n    MapField  = $protobuf.MapField,\n    OneOf     = $protobuf.OneOf,\n    Service   = $protobuf.Service,\n    Method    = $protobuf.Method,\n    patterns  = $protobuf.util.patterns;\n\nvar numberRe  = patterns.numberRe,\n    typeRefRe = patterns.typeRefRe;\n\n// --- Root ---\n\n/**\n * Properties of a FileDescriptorSet message.\n * @interface IFileDescriptorSet\n * @property {IFileDescriptorProto[]} file Files\n */\n\n/**\n * Properties of a FileDescriptorProto message.\n * @interface IFileDescriptorProto\n * @property {string} [name] File name\n * @property {string} [package] Package\n * @property {*} [dependency] Not supported\n * @property {*} [publicDependency] Not supported\n * @property {*} [weakDependency] Not supported\n * @property {IDescriptorProto[]} [messageType] Nested message types\n * @property {IEnumDescriptorProto[]} [enumType] Nested enums\n * @property {IServiceDescriptorProto[]} [service] Nested services\n * @property {IFieldDescriptorProto[]} [extension] Nested extension fields\n * @property {IFileOptions} [options] Options\n * @property {*} [sourceCodeInfo] Not supported\n * @property {string} [syntax=\"proto2\"] Syntax\n * @property {IEdition} [edition] Edition\n */\n\n/**\n * Values of the Edition enum.\n * @typedef IEdition\n * @type {number}\n * @property {number} EDITION_UNKNOWN=0\n * @property {number} EDITION_LEGACY=900\n * @property {number} EDITION_PROTO2=998\n * @property {number} EDITION_PROTO3=999\n * @property {number} EDITION_2023=1000\n * @property {number} EDITION_2024=1001\n * @property {number} EDITION_1_TEST_ONLY=1\n * @property {number} EDITION_2_TEST_ONLY=2\n * @property {number} EDITION_99997_TEST_ONLY=99997\n * @property {number} EDITION_99998_TEST_ONLY=99998\n * @property {number} EDITION_99998_TEST_ONLY=99999\n * @property {number} EDITION_MAX=2147483647\n */\n\n/**\n * Properties of a FileOptions message.\n * @interface IFileOptions\n * @property {string} [javaPackage]\n * @property {string} [javaOuterClassname]\n * @property {boolean} [javaMultipleFiles]\n * @property {boolean} [javaGenerateEqualsAndHash]\n * @property {boolean} [javaStringCheckUtf8]\n * @property {IFileOptionsOptimizeMode} [optimizeFor=1]\n * @property {string} [goPackage]\n * @property {boolean} [ccGenericServices]\n * @property {boolean} [javaGenericServices]\n * @property {boolean} [pyGenericServices]\n * @property {boolean} [deprecated]\n * @property {boolean} [ccEnableArenas]\n * @property {string} [objcClassPrefix]\n * @property {string} [csharpNamespace]\n */\n\n/**\n * Values of he FileOptions.OptimizeMode enum.\n * @typedef IFileOptionsOptimizeMode\n * @type {number}\n * @property {number} SPEED=1\n * @property {number} CODE_SIZE=2\n * @property {number} LITE_RUNTIME=3\n */\n\n/**\n * Creates a root from a descriptor set.\n * @param {IFileDescriptorSet|Reader|Uint8Array} descriptor Descriptor\n * @returns {Root} Root instance\n */\nRoot.fromDescriptor = function fromDescriptor(descriptor) {\n\n    // Decode the descriptor message if specified as a buffer:\n    if (typeof descriptor.length === \"number\")\n        descriptor = exports.FileDescriptorSet.decode(descriptor);\n\n    var root = new Root();\n\n    if (descriptor.file) {\n        var fileDescriptor,\n            filePackage;\n        for (var j = 0, i; j < descriptor.file.length; ++j) {\n            filePackage = root;\n            if ((fileDescriptor = descriptor.file[j])[\"package\"] && fileDescriptor[\"package\"].length)\n                filePackage = root.define(fileDescriptor[\"package\"]);\n            var edition = editionFromDescriptor(fileDescriptor);\n            if (fileDescriptor.name && fileDescriptor.name.length)\n                root.files.push(filePackage.filename = fileDescriptor.name);\n            if (fileDescriptor.messageType)\n                for (i = 0; i < fileDescriptor.messageType.length; ++i)\n                    filePackage.add(Type.fromDescriptor(fileDescriptor.messageType[i], edition));\n            if (fileDescriptor.enumType)\n                for (i = 0; i < fileDescriptor.enumType.length; ++i)\n                    filePackage.add(Enum.fromDescriptor(fileDescriptor.enumType[i], edition));\n            if (fileDescriptor.extension)\n                for (i = 0; i < fileDescriptor.extension.length; ++i)\n                    filePackage.add(Field.fromDescriptor(fileDescriptor.extension[i], edition));\n            if (fileDescriptor.service)\n                for (i = 0; i < fileDescriptor.service.length; ++i)\n                    filePackage.add(Service.fromDescriptor(fileDescriptor.service[i], edition));\n            var opts = fromDescriptorOptions(fileDescriptor.options, exports.FileOptions);\n            if (opts) {\n                var ks = Object.keys(opts);\n                for (i = 0; i < ks.length; ++i)\n                    filePackage.setOption(ks[i], opts[ks[i]]);\n            }\n        }\n    }\n\n    return root.resolveAll();\n};\n\n/**\n * Converts a root to a descriptor set.\n * @returns {Message<IFileDescriptorSet>} Descriptor\n * @param {string} [edition=\"proto2\"] The syntax or edition to use\n */\nRoot.prototype.toDescriptor = function toDescriptor(edition) {\n    var set = exports.FileDescriptorSet.create();\n    Root_toDescriptorRecursive(this, set.file, edition);\n    return set;\n};\n\n// Traverses a namespace and assembles the descriptor set\nfunction Root_toDescriptorRecursive(ns, files, edition) {\n\n    // Create a new file\n    var file = exports.FileDescriptorProto.create({ name: ns.filename || (ns.fullName.substring(1).replace(/\\./g, \"_\") || \"root\") + \".proto\" });\n    editionToDescriptor(edition, file);\n    if (!(ns instanceof Root))\n        file[\"package\"] = ns.fullName.substring(1);\n\n    // Add nested types\n    for (var i = 0, nested; i < ns.nestedArray.length; ++i)\n        if ((nested = ns._nestedArray[i]) instanceof Type)\n            file.messageType.push(nested.toDescriptor(edition));\n        else if (nested instanceof Enum)\n            file.enumType.push(nested.toDescriptor());\n        else if (nested instanceof Field)\n            file.extension.push(nested.toDescriptor(edition));\n        else if (nested instanceof Service)\n            file.service.push(nested.toDescriptor());\n        else if (nested instanceof /* plain */ Namespace)\n            Root_toDescriptorRecursive(nested, files, edition); // requires new file\n\n    // Keep package-level options\n    file.options = toDescriptorOptions(ns.options, exports.FileOptions);\n\n    // And keep the file only if there is at least one nested object\n    if (file.messageType.length + file.enumType.length + file.extension.length + file.service.length)\n        files.push(file);\n}\n\n// --- Type ---\n\n/**\n * Properties of a DescriptorProto message.\n * @interface IDescriptorProto\n * @property {string} [name] Message type name\n * @property {IFieldDescriptorProto[]} [field] Fields\n * @property {IFieldDescriptorProto[]} [extension] Extension fields\n * @property {IDescriptorProto[]} [nestedType] Nested message types\n * @property {IEnumDescriptorProto[]} [enumType] Nested enums\n * @property {IDescriptorProtoExtensionRange[]} [extensionRange] Extension ranges\n * @property {IOneofDescriptorProto[]} [oneofDecl] Oneofs\n * @property {IMessageOptions} [options] Not supported\n * @property {IDescriptorProtoReservedRange[]} [reservedRange] Reserved ranges\n * @property {string[]} [reservedName] Reserved names\n */\n\n/**\n * Properties of a MessageOptions message.\n * @interface IMessageOptions\n * @property {boolean} [mapEntry=false] Whether this message is a map entry\n */\n\n/**\n * Properties of an ExtensionRange message.\n * @interface IDescriptorProtoExtensionRange\n * @property {number} [start] Start field id\n * @property {number} [end] End field id\n */\n\n/**\n * Properties of a ReservedRange message.\n * @interface IDescriptorProtoReservedRange\n * @property {number} [start] Start field id\n * @property {number} [end] End field id\n */\n\nvar unnamedMessageIndex = 0;\n\n/**\n * Creates a type from a descriptor.\n *\n * Warning: this is not safe to use with editions protos, since it discards relevant file context.\n *\n * @param {IDescriptorProto|Reader|Uint8Array} descriptor Descriptor\n * @param {string} [edition=\"proto2\"] The syntax or edition to use\n * @param {boolean} [nested=false] Whether or not this is a nested object\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Type} Type instance\n */\nType.fromDescriptor = function fromDescriptor(descriptor, edition, nested, depth) {\n    if (depth === undefined)\n        depth = 0;\n    if (depth > $protobuf.util.nestingLimit)\n        throw Error(\"max depth exceeded\");\n    // Decode the descriptor message if specified as a buffer:\n    if (typeof descriptor.length === \"number\")\n        descriptor = exports.DescriptorProto.decode(descriptor);\n\n    // Create the message type\n    var type = new Type(descriptor.name.length ? descriptor.name : \"Type\" + unnamedMessageIndex++, fromDescriptorOptions(descriptor.options, exports.MessageOptions)),\n        i;\n\n    if (!nested)\n        type._edition = edition;\n\n    /* Oneofs */ if (descriptor.oneofDecl)\n        for (i = 0; i < descriptor.oneofDecl.length; ++i)\n            type.add(OneOf.fromDescriptor(descriptor.oneofDecl[i]));\n    /* Fields */ if (descriptor.field)\n        for (i = 0; i < descriptor.field.length; ++i) {\n            var field = Field.fromDescriptor(descriptor.field[i], edition, true);\n            type.add(field);\n            if (descriptor.field[i].hasOwnProperty(\"oneofIndex\")) // eslint-disable-line no-prototype-builtins\n                type.oneofsArray[descriptor.field[i].oneofIndex].add(field);\n        }\n    /* Extension fields */ if (descriptor.extension)\n        for (i = 0; i < descriptor.extension.length; ++i)\n            type.add(Field.fromDescriptor(descriptor.extension[i], edition, true));\n    /* Nested types */ if (descriptor.nestedType)\n        for (i = 0; i < descriptor.nestedType.length; ++i) {\n            type.add(Type.fromDescriptor(descriptor.nestedType[i], edition, true, depth + 1));\n            if (descriptor.nestedType[i].options && descriptor.nestedType[i].options.mapEntry)\n                type.setOption(\"map_entry\", true);\n        }\n    /* Nested enums */ if (descriptor.enumType)\n        for (i = 0; i < descriptor.enumType.length; ++i)\n            type.add(Enum.fromDescriptor(descriptor.enumType[i], edition, true));\n    /* Extension ranges */ if (descriptor.extensionRange && descriptor.extensionRange.length) {\n        type.extensions = [];\n        for (i = 0; i < descriptor.extensionRange.length; ++i)\n            type.extensions.push([ descriptor.extensionRange[i].start, descriptor.extensionRange[i].end ]);\n    }\n    /* Reserved... */ if (descriptor.reservedRange && descriptor.reservedRange.length || descriptor.reservedName && descriptor.reservedName.length) {\n        type.reserved = [];\n        /* Ranges */ if (descriptor.reservedRange)\n            for (i = 0; i < descriptor.reservedRange.length; ++i)\n                type.reserved.push([ descriptor.reservedRange[i].start, descriptor.reservedRange[i].end ]);\n        /* Names */ if (descriptor.reservedName)\n            for (i = 0; i < descriptor.reservedName.length; ++i)\n                type.reserved.push(descriptor.reservedName[i]);\n    }\n\n    return type;\n};\n\n/**\n * Converts a type to a descriptor.\n * @returns {Message<IDescriptorProto>} Descriptor\n * @param {string} [edition=\"proto2\"] The syntax or edition to use\n */\nType.prototype.toDescriptor = function toDescriptor(edition) {\n    var descriptor = exports.DescriptorProto.create({ name: this.name }),\n        i;\n\n    /* Fields */ for (i = 0; i < this.fieldsArray.length; ++i) {\n        var fieldDescriptor;\n        descriptor.field.push(fieldDescriptor = this._fieldsArray[i].toDescriptor(edition));\n        if (this._fieldsArray[i] instanceof MapField) { // map fields are repeated FieldNameEntry\n            var keyType = toDescriptorType(this._fieldsArray[i].keyType, this._fieldsArray[i].resolvedKeyType, false),\n                valueType = toDescriptorType(this._fieldsArray[i].type, this._fieldsArray[i].resolvedType, false),\n                valueTypeName = valueType === /* type */ 11 || valueType === /* enum */ 14\n                    ? this._fieldsArray[i].resolvedType && shortname(this.parent, this._fieldsArray[i].resolvedType) || this._fieldsArray[i].type\n                    : undefined;\n            descriptor.nestedType.push(exports.DescriptorProto.create({\n                name: fieldDescriptor.typeName,\n                field: [\n                    exports.FieldDescriptorProto.create({ name: \"key\", number: 1, label: 1, type: keyType }), // can't reference a type or enum\n                    exports.FieldDescriptorProto.create({ name: \"value\", number: 2, label: 1, type: valueType, typeName: valueTypeName })\n                ],\n                options: exports.MessageOptions.create({ mapEntry: true })\n            }));\n        }\n    }\n    /* Oneofs */ for (i = 0; i < this.oneofsArray.length; ++i)\n        descriptor.oneofDecl.push(this._oneofsArray[i].toDescriptor());\n    /* Nested... */ for (i = 0; i < this.nestedArray.length; ++i) {\n        /* Extension fields */ if (this._nestedArray[i] instanceof Field)\n            descriptor.field.push(this._nestedArray[i].toDescriptor(edition));\n        /* Types */ else if (this._nestedArray[i] instanceof Type)\n            descriptor.nestedType.push(this._nestedArray[i].toDescriptor(edition));\n        /* Enums */ else if (this._nestedArray[i] instanceof Enum)\n            descriptor.enumType.push(this._nestedArray[i].toDescriptor());\n        // plain nested namespaces become packages instead in Root#toDescriptor\n    }\n    /* Extension ranges */ if (this.extensions)\n        for (i = 0; i < this.extensions.length; ++i)\n            descriptor.extensionRange.push(exports.DescriptorProto.ExtensionRange.create({ start: this.extensions[i][0], end: this.extensions[i][1] }));\n    /* Reserved... */ if (this.reserved)\n        for (i = 0; i < this.reserved.length; ++i)\n            /* Names */ if (typeof this.reserved[i] === \"string\")\n                descriptor.reservedName.push(this.reserved[i]);\n            /* Ranges */ else\n                descriptor.reservedRange.push(exports.DescriptorProto.ReservedRange.create({ start: this.reserved[i][0], end: this.reserved[i][1] }));\n\n    descriptor.options = toDescriptorOptions(this.options, exports.MessageOptions);\n\n    return descriptor;\n};\n\n// --- Field ---\n\n/**\n * Properties of a FieldDescriptorProto message.\n * @interface IFieldDescriptorProto\n * @property {string} [name] Field name\n * @property {number} [number] Field id\n * @property {IFieldDescriptorProtoLabel} [label] Field rule\n * @property {IFieldDescriptorProtoType} [type] Field basic type\n * @property {string} [typeName] Field type name\n * @property {string} [extendee] Extended type name\n * @property {string} [defaultValue] Literal default value\n * @property {number} [oneofIndex] Oneof index if part of a oneof\n * @property {*} [jsonName] Not supported\n * @property {IFieldOptions} [options] Field options\n */\n\n/**\n * Values of the FieldDescriptorProto.Label enum.\n * @typedef IFieldDescriptorProtoLabel\n * @type {number}\n * @property {number} LABEL_OPTIONAL=1\n * @property {number} LABEL_REQUIRED=2\n * @property {number} LABEL_REPEATED=3\n */\n\n/**\n * Values of the FieldDescriptorProto.Type enum.\n * @typedef IFieldDescriptorProtoType\n * @type {number}\n * @property {number} TYPE_DOUBLE=1\n * @property {number} TYPE_FLOAT=2\n * @property {number} TYPE_INT64=3\n * @property {number} TYPE_UINT64=4\n * @property {number} TYPE_INT32=5\n * @property {number} TYPE_FIXED64=6\n * @property {number} TYPE_FIXED32=7\n * @property {number} TYPE_BOOL=8\n * @property {number} TYPE_STRING=9\n * @property {number} TYPE_GROUP=10\n * @property {number} TYPE_MESSAGE=11\n * @property {number} TYPE_BYTES=12\n * @property {number} TYPE_UINT32=13\n * @property {number} TYPE_ENUM=14\n * @property {number} TYPE_SFIXED32=15\n * @property {number} TYPE_SFIXED64=16\n * @property {number} TYPE_SINT32=17\n * @property {number} TYPE_SINT64=18\n */\n\n/**\n * Properties of a FieldOptions message.\n * @interface IFieldOptions\n * @property {boolean} [packed] Whether packed or not (defaults to `false` for proto2 and `true` for proto3)\n * @property {IFieldOptionsJSType} [jstype] JavaScript value type (not used by protobuf.js)\n */\n\n/**\n * Values of the FieldOptions.JSType enum.\n * @typedef IFieldOptionsJSType\n * @type {number}\n * @property {number} JS_NORMAL=0\n * @property {number} JS_STRING=1\n * @property {number} JS_NUMBER=2\n */\n\n/**\n * Creates a field from a descriptor.\n *\n * Warning: this is not safe to use with editions protos, since it discards relevant file context.\n *\n * @param {IFieldDescriptorProto|Reader|Uint8Array} descriptor Descriptor\n * @param {string} [edition=\"proto2\"] The syntax or edition to use\n * @param {boolean} [nested=false] Whether or not this is a top-level object\n * @returns {Field} Field instance\n */\nField.fromDescriptor = function fromDescriptor(descriptor, edition, nested) {\n\n    // Decode the descriptor message if specified as a buffer:\n    if (typeof descriptor.length === \"number\")\n        descriptor = exports.DescriptorProto.decode(descriptor);\n\n    if (typeof descriptor.number !== \"number\")\n        throw Error(\"missing field id\");\n\n    // Rewire field type\n    var typeName = descriptor.typeName,\n        fieldType;\n    if (typeName != null && typeName !== \"\") {\n        if (typeof typeName !== \"string\" || !typeRefRe.test(typeName))\n            throw Error(\"illegal type name: \" + typeName);\n        fieldType = typeName;\n    } else\n        fieldType = fromDescriptorType(descriptor.type);\n\n    // Rewire field rule\n    var fieldRule;\n    switch (descriptor.label) {\n        // 0 is reserved for errors\n        case 1: fieldRule = undefined; break;\n        case 2: fieldRule = \"required\"; break;\n        case 3: fieldRule = \"repeated\"; break;\n        default: throw Error(\"illegal label: \" + descriptor.label);\n    }\n\n    var extendee = descriptor.extendee;\n    if (extendee != null && extendee !== \"\") {\n        if (typeof extendee !== \"string\" || !typeRefRe.test(extendee))\n            throw Error(\"illegal type name: \" + extendee);\n    } else\n        extendee = undefined;\n    var field = new Field(\n        descriptor.name.length ? descriptor.name : \"field\" + descriptor.number,\n        descriptor.number,\n        fieldType,\n        fieldRule,\n        extendee\n    );\n\n    if (!nested)\n        field._edition = edition;\n\n    field.options = fromDescriptorOptions(descriptor.options, exports.FieldOptions);\n    if (descriptor.proto3_optional)\n        field.options.proto3_optional = true;\n\n    if (descriptor.defaultValue && descriptor.defaultValue.length) {\n        var defaultValue = descriptor.defaultValue;\n        switch (defaultValue) {\n            case \"true\": case \"TRUE\":\n                defaultValue = true;\n                break;\n            case \"false\": case \"FALSE\":\n                defaultValue = false;\n                break;\n            default:\n                var match = numberRe.exec(defaultValue);\n                if (match)\n                    defaultValue = parseInt(defaultValue); // eslint-disable-line radix\n                break;\n        }\n        field.setOption(\"default\", defaultValue);\n    }\n\n    if (packableDescriptorType(descriptor.type)) {\n        if (edition === \"proto3\") { // defaults to packed=true (internal preset is packed=true)\n            if (descriptor.options && !descriptor.options.packed)\n                field.setOption(\"packed\", false);\n        } else if ((!edition || edition === \"proto2\") && descriptor.options && descriptor.options.packed) // defaults to packed=false\n            field.setOption(\"packed\", true);\n    }\n\n    return field;\n};\n\n/**\n * Converts a field to a descriptor.\n * @returns {Message<IFieldDescriptorProto>} Descriptor\n * @param {string} [edition=\"proto2\"] The syntax or edition to use\n */\nField.prototype.toDescriptor = function toDescriptor(edition) {\n    var descriptor = exports.FieldDescriptorProto.create({ name: this.name, number: this.id });\n\n    if (this.map) {\n\n        descriptor.type = 11; // message\n        descriptor.typeName = $protobuf.util.ucFirst(this.name); // fieldName -> FieldNameEntry (built in Type#toDescriptor)\n        descriptor.label = 3; // repeated\n\n    } else {\n\n        // Rewire field type\n        switch (descriptor.type = toDescriptorType(this.type, this.resolve().resolvedType, this.delimited)) {\n            case 10: // group\n            case 11: // type\n            case 14: // enum\n                descriptor.typeName = this.resolvedType ? shortname(this.parent, this.resolvedType) : this.type;\n                break;\n        }\n\n        // Rewire field rule\n        if (this.rule === \"repeated\") {\n            descriptor.label = 3;\n        } else if (this.required && edition === \"proto2\") {\n            descriptor.label = 2;\n        } else {\n            descriptor.label = 1;\n        }\n    }\n\n    // Handle extension field\n    descriptor.extendee = this.extensionField ? this.extensionField.parent.fullName : this.extend;\n\n    // Handle part of oneof (only meaningful for message types)\n    if (this.partOf && this.parent instanceof Type) {\n        if ((descriptor.oneofIndex = this.parent.oneofsArray.indexOf(this.partOf)) < 0)\n            throw Error(\"missing oneof\");\n    }\n\n    if (this.options) {\n        descriptor.options = toDescriptorOptions(this.options, exports.FieldOptions);\n        if (this.options[\"default\"] != null)\n            descriptor.defaultValue = String(this.options[\"default\"]);\n        if (this.options.proto3_optional)\n            descriptor.proto3_optional = true;\n    }\n\n    if (edition === \"proto3\") { // defaults to packed=true\n        if (!this.packed)\n            (descriptor.options || (descriptor.options = exports.FieldOptions.create())).packed = false;\n    } else if ((!edition || edition === \"proto2\") && this.packed) // defaults to packed=false\n        (descriptor.options || (descriptor.options = exports.FieldOptions.create())).packed = true;\n\n    return descriptor;\n};\n\n// --- Enum ---\n\n/**\n * Properties of an EnumDescriptorProto message.\n * @interface IEnumDescriptorProto\n * @property {string} [name] Enum name\n * @property {IEnumValueDescriptorProto[]} [value] Enum values\n * @property {IEnumOptions} [options] Enum options\n */\n\n/**\n * Properties of an EnumValueDescriptorProto message.\n * @interface IEnumValueDescriptorProto\n * @property {string} [name] Name\n * @property {number} [number] Value\n * @property {*} [options] Not supported\n */\n\n/**\n * Properties of an EnumOptions message.\n * @interface IEnumOptions\n * @property {boolean} [allowAlias] Whether aliases are allowed\n * @property {boolean} [deprecated]\n */\n\nvar unnamedEnumIndex = 0;\n\n/**\n * Creates an enum from a descriptor.\n *\n * Warning: this is not safe to use with editions protos, since it discards relevant file context.\n *\n * @param {IEnumDescriptorProto|Reader|Uint8Array} descriptor Descriptor\n * @param {string} [edition=\"proto2\"] The syntax or edition to use\n * @param {boolean} [nested=false] Whether or not this is a top-level object\n * @returns {Enum} Enum instance\n */\nEnum.fromDescriptor = function fromDescriptor(descriptor, edition, nested) {\n\n    // Decode the descriptor message if specified as a buffer:\n    if (typeof descriptor.length === \"number\")\n        descriptor = exports.EnumDescriptorProto.decode(descriptor);\n\n    // Construct values object\n    var values = {};\n    if (descriptor.value)\n        for (var i = 0; i < descriptor.value.length; ++i) {\n            var name  = descriptor.value[i].name,\n                value = descriptor.value[i].number || 0;\n            values[name && name.length ? name : \"NAME\" + value] = value;\n        }\n\n    var enm = new Enum(\n        descriptor.name && descriptor.name.length ? descriptor.name : \"Enum\" + unnamedEnumIndex++,\n        values,\n        fromDescriptorOptions(descriptor.options, exports.EnumOptions)\n    );\n\n    if (!nested)\n        enm._edition = edition;\n\n    return enm;\n};\n\n/**\n * Converts an enum to a descriptor.\n * @returns {Message<IEnumDescriptorProto>} Descriptor\n */\nEnum.prototype.toDescriptor = function toDescriptor() {\n\n    // Values\n    var values = [];\n    for (var i = 0, ks = Object.keys(this.values); i < ks.length; ++i)\n        values.push(exports.EnumValueDescriptorProto.create({ name: ks[i], number: this.values[ks[i]] }));\n\n    return exports.EnumDescriptorProto.create({\n        name: this.name,\n        value: values,\n        options: toDescriptorOptions(this.options, exports.EnumOptions)\n    });\n};\n\n// --- OneOf ---\n\n/**\n * Properties of a OneofDescriptorProto message.\n * @interface IOneofDescriptorProto\n * @property {string} [name] Oneof name\n * @property {*} [options] Not supported\n */\n\nvar unnamedOneofIndex = 0;\n\n/**\n * Creates a oneof from a descriptor.\n *\n * Warning: this is not safe to use with editions protos, since it discards relevant file context.\n *\n * @param {IOneofDescriptorProto|Reader|Uint8Array} descriptor Descriptor\n * @returns {OneOf} OneOf instance\n */\nOneOf.fromDescriptor = function fromDescriptor(descriptor) {\n\n    // Decode the descriptor message if specified as a buffer:\n    if (typeof descriptor.length === \"number\")\n        descriptor = exports.OneofDescriptorProto.decode(descriptor);\n\n    return new OneOf(\n        // unnamedOneOfIndex is global, not per type, because we have no ref to a type here\n        descriptor.name && descriptor.name.length ? descriptor.name : \"oneof\" + unnamedOneofIndex++\n        // fromDescriptorOptions(descriptor.options, exports.OneofOptions) - only uninterpreted_option\n    );\n};\n\n/**\n * Converts a oneof to a descriptor.\n * @returns {Message<IOneofDescriptorProto>} Descriptor\n */\nOneOf.prototype.toDescriptor = function toDescriptor() {\n    return exports.OneofDescriptorProto.create({\n        name: this.name\n        // options: toDescriptorOptions(this.options, exports.OneofOptions) - only uninterpreted_option\n    });\n};\n\n// --- Service ---\n\n/**\n * Properties of a ServiceDescriptorProto message.\n * @interface IServiceDescriptorProto\n * @property {string} [name] Service name\n * @property {IMethodDescriptorProto[]} [method] Methods\n * @property {IServiceOptions} [options] Options\n */\n\n/**\n * Properties of a ServiceOptions message.\n * @interface IServiceOptions\n * @property {boolean} [deprecated]\n */\n\nvar unnamedServiceIndex = 0;\n\n/**\n * Creates a service from a descriptor.\n *\n * Warning: this is not safe to use with editions protos, since it discards relevant file context.\n *\n * @param {IServiceDescriptorProto|Reader|Uint8Array} descriptor Descriptor\n * @param {string} [edition=\"proto2\"] The syntax or edition to use\n * @param {boolean} [nested=false] Whether or not this is a top-level object\n * @returns {Service} Service instance\n */\nService.fromDescriptor = function fromDescriptor(descriptor, edition, nested) {\n\n    // Decode the descriptor message if specified as a buffer:\n    if (typeof descriptor.length === \"number\")\n        descriptor = exports.ServiceDescriptorProto.decode(descriptor);\n\n    var service = new Service(descriptor.name && descriptor.name.length ? descriptor.name : \"Service\" + unnamedServiceIndex++, fromDescriptorOptions(descriptor.options, exports.ServiceOptions));\n    if (!nested)\n        service._edition = edition;\n    if (descriptor.method)\n        for (var i = 0; i < descriptor.method.length; ++i)\n            service.add(Method.fromDescriptor(descriptor.method[i]));\n\n    return service;\n};\n\n/**\n * Converts a service to a descriptor.\n * @returns {Message<IServiceDescriptorProto>} Descriptor\n */\nService.prototype.toDescriptor = function toDescriptor() {\n\n    // Methods\n    var methods = [];\n    for (var i = 0; i < this.methodsArray.length; ++i)\n        methods.push(this._methodsArray[i].toDescriptor());\n\n    return exports.ServiceDescriptorProto.create({\n        name: this.name,\n        method: methods,\n        options: toDescriptorOptions(this.options, exports.ServiceOptions)\n    });\n};\n\n// --- Method ---\n\n/**\n * Properties of a MethodDescriptorProto message.\n * @interface IMethodDescriptorProto\n * @property {string} [name] Method name\n * @property {string} [inputType] Request type name\n * @property {string} [outputType] Response type name\n * @property {IMethodOptions} [options] Not supported\n * @property {boolean} [clientStreaming=false] Whether requests are streamed\n * @property {boolean} [serverStreaming=false] Whether responses are streamed\n */\n\n/**\n * Properties of a MethodOptions message.\n *\n * Warning: this is not safe to use with editions protos, since it discards relevant file context.\n *\n * @interface IMethodOptions\n * @property {boolean} [deprecated]\n */\n\nvar unnamedMethodIndex = 0;\n\n/**\n * Creates a method from a descriptor.\n * @param {IMethodDescriptorProto|Reader|Uint8Array} descriptor Descriptor\n * @returns {Method} Reflected method instance\n */\nMethod.fromDescriptor = function fromDescriptor(descriptor) {\n\n    // Decode the descriptor message if specified as a buffer:\n    if (typeof descriptor.length === \"number\")\n        descriptor = exports.MethodDescriptorProto.decode(descriptor);\n\n    var inputType = descriptor.inputType,\n        outputType = descriptor.outputType;\n\n    if (inputType != null && inputType !== \"\") {\n        if (typeof inputType !== \"string\" || !typeRefRe.test(inputType))\n            throw Error(\"illegal type name: \" + inputType);\n    }\n    if (outputType != null && outputType !== \"\") {\n        if (typeof outputType !== \"string\" || !typeRefRe.test(outputType))\n            throw Error(\"illegal type name: \" + outputType);\n    }\n\n    return new Method(\n        // unnamedMethodIndex is global, not per service, because we have no ref to a service here\n        descriptor.name && descriptor.name.length ? descriptor.name : \"Method\" + unnamedMethodIndex++,\n        \"rpc\",\n        inputType,\n        outputType,\n        Boolean(descriptor.clientStreaming),\n        Boolean(descriptor.serverStreaming),\n        fromDescriptorOptions(descriptor.options, exports.MethodOptions)\n    );\n};\n\n/**\n * Converts a method to a descriptor.\n * @returns {Message<IMethodDescriptorProto>} Descriptor\n */\nMethod.prototype.toDescriptor = function toDescriptor() {\n    return exports.MethodDescriptorProto.create({\n        name: this.name,\n        inputType: this.resolvedRequestType ? this.resolvedRequestType.fullName : this.requestType,\n        outputType: this.resolvedResponseType ? this.resolvedResponseType.fullName : this.responseType,\n        clientStreaming: this.requestStream,\n        serverStreaming: this.responseStream,\n        options: toDescriptorOptions(this.options, exports.MethodOptions)\n    });\n};\n\n// --- utility ---\n\n// Converts a descriptor type to a protobuf.js basic type\nfunction fromDescriptorType(type) {\n    switch (type) {\n        // 0 is reserved for errors\n        case 1: return \"double\";\n        case 2: return \"float\";\n        case 3: return \"int64\";\n        case 4: return \"uint64\";\n        case 5: return \"int32\";\n        case 6: return \"fixed64\";\n        case 7: return \"fixed32\";\n        case 8: return \"bool\";\n        case 9: return \"string\";\n        case 12: return \"bytes\";\n        case 13: return \"uint32\";\n        case 15: return \"sfixed32\";\n        case 16: return \"sfixed64\";\n        case 17: return \"sint32\";\n        case 18: return \"sint64\";\n    }\n    throw Error(\"illegal type: \" + type);\n}\n\n// Tests if a descriptor type is packable\nfunction packableDescriptorType(type) {\n    switch (type) {\n        case 1: // double\n        case 2: // float\n        case 3: // int64\n        case 4: // uint64\n        case 5: // int32\n        case 6: // fixed64\n        case 7: // fixed32\n        case 8: // bool\n        case 13: // uint32\n        case 14: // enum (!)\n        case 15: // sfixed32\n        case 16: // sfixed64\n        case 17: // sint32\n        case 18: // sint64\n            return true;\n    }\n    return false;\n}\n\n// Converts a protobuf.js basic type to a descriptor type\nfunction toDescriptorType(type, resolvedType, delimited) {\n    switch (type) {\n        // 0 is reserved for errors\n        case \"double\": return 1;\n        case \"float\": return 2;\n        case \"int64\": return 3;\n        case \"uint64\": return 4;\n        case \"int32\": return 5;\n        case \"fixed64\": return 6;\n        case \"fixed32\": return 7;\n        case \"bool\": return 8;\n        case \"string\": return 9;\n        case \"bytes\": return 12;\n        case \"uint32\": return 13;\n        case \"sfixed32\": return 15;\n        case \"sfixed64\": return 16;\n        case \"sint32\": return 17;\n        case \"sint64\": return 18;\n    }\n    if (resolvedType instanceof Enum)\n        return 14;\n    if (resolvedType instanceof Type)\n        return delimited ? 10 : 11;\n    throw Error(\"illegal type: \" + type);\n}\n\nfunction fromDescriptorOptionsRecursive(obj, type) {\n    var val = {};\n    for (var i = 0, field, key; i < type.fieldsArray.length; ++i) {\n        if ((key = (field = type._fieldsArray[i]).name) === \"uninterpretedOption\") continue;\n        if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;\n\n        var newKey = underScore(key);\n        if (field.resolvedType instanceof Type) {\n            val[newKey] = fromDescriptorOptionsRecursive(obj[key], field.resolvedType);\n        } else if(field.resolvedType instanceof Enum) {\n            val[newKey] = field.resolvedType.valuesById[obj[key]];\n        } else {\n            val[newKey] = obj[key];\n        }\n    }\n    return val;\n}\n\n// Converts descriptor options to an options object\nfunction fromDescriptorOptions(options, type) {\n    if (!options)\n        return undefined;\n    return fromDescriptorOptionsRecursive(type.toObject(options), type);\n}\n\nfunction toDescriptorOptionsRecursive(obj, type) {\n    var val = {};\n    var keys = Object.keys(obj);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var newKey = $protobuf.util.camelCase(key);\n        if (!Object.prototype.hasOwnProperty.call(type.fields, newKey)) continue;\n        var field = type.fields[newKey];\n        if (field.resolvedType instanceof Type) {\n            val[newKey] = toDescriptorOptionsRecursive(obj[key], field.resolvedType);\n        } else {\n            val[newKey] = obj[key];\n        }\n        if (field.repeated && !Array.isArray(val[newKey])) {\n            val[newKey] = [val[newKey]];\n        }\n    }\n    return val;\n}\n\n// Converts an options object to descriptor options\nfunction toDescriptorOptions(options, type) {\n    if (!options)\n        return undefined;\n    return type.fromObject(toDescriptorOptionsRecursive(options, type));\n}\n\n// Calculates the shortest relative path from `from` to `to`.\nfunction shortname(from, to) {\n    var fromPath = from.fullName.split(\".\"),\n        toPath = to.fullName.split(\".\"),\n        i = 0,\n        j = 0,\n        k = toPath.length - 1;\n    if (!(from instanceof Root) && to instanceof Namespace)\n        while (i < fromPath.length && j < k && fromPath[i] === toPath[j]) {\n            var other = to.lookup(fromPath[i++], true);\n            if (other !== null && other !== to)\n                break;\n            ++j;\n        }\n    else\n        for (; i < fromPath.length && j < k && fromPath[i] === toPath[j]; ++i, ++j);\n    return toPath.slice(j).join(\".\");\n}\n\n// copied here from cli/targets/proto.js\nfunction underScore(str) {\n    return str.substring(0,1)\n         + str.substring(1)\n               .replace(/([A-Z])(?=[a-z]|$)/g, function($0, $1) { return \"_\" + $1.toLowerCase(); });\n}\n\nfunction editionFromDescriptor(fileDescriptor) {\n    if (fileDescriptor.syntax === \"editions\") {\n        switch(fileDescriptor.edition) {\n            case exports.Edition.EDITION_2023:\n                return \"2023\";\n            default:\n                throw new Error(\"Unsupported edition \" + fileDescriptor.edition);\n        }\n    }\n    if (fileDescriptor.syntax === \"proto3\") {\n        return \"proto3\";\n    }\n    return \"proto2\";\n}\n\nfunction editionToDescriptor(edition, fileDescriptor) {\n    if (!edition) return;\n    if (edition === \"proto2\" || edition === \"proto3\") {\n        fileDescriptor.syntax = edition;\n    } else {\n        fileDescriptor.syntax = \"editions\";\n        switch(edition) {\n            case \"2023\":\n                fileDescriptor.edition = exports.Edition.EDITION_2023;\n                break;\n            default:\n                throw new Error(\"Unsupported edition \" + edition);\n        }\n    }\n}\n\n// --- exports ---\n\n/**\n * Reflected file descriptor set.\n * @name FileDescriptorSet\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected file descriptor proto.\n * @name FileDescriptorProto\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected descriptor proto.\n * @name DescriptorProto\n * @type {Type}\n * @property {Type} ExtensionRange\n * @property {Type} ReservedRange\n * @const\n * @tstype $protobuf.Type & {\n *     ExtensionRange: $protobuf.Type,\n *     ReservedRange: $protobuf.Type\n * }\n */\n\n/**\n * Reflected field descriptor proto.\n * @name FieldDescriptorProto\n * @type {Type}\n * @property {Enum} Label\n * @property {Enum} Type\n * @const\n * @tstype $protobuf.Type & {\n *     Label: $protobuf.Enum,\n *     Type: $protobuf.Enum\n * }\n */\n\n/**\n * Reflected oneof descriptor proto.\n * @name OneofDescriptorProto\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected enum descriptor proto.\n * @name EnumDescriptorProto\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected service descriptor proto.\n * @name ServiceDescriptorProto\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected enum value descriptor proto.\n * @name EnumValueDescriptorProto\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected method descriptor proto.\n * @name MethodDescriptorProto\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected file options.\n * @name FileOptions\n * @type {Type}\n * @property {Enum} OptimizeMode\n * @const\n * @tstype $protobuf.Type & {\n *     OptimizeMode: $protobuf.Enum\n * }\n */\n\n/**\n * Reflected message options.\n * @name MessageOptions\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected field options.\n * @name FieldOptions\n * @type {Type}\n * @property {Enum} CType\n * @property {Enum} JSType\n * @const\n * @tstype $protobuf.Type & {\n *     CType: $protobuf.Enum,\n *     JSType: $protobuf.Enum\n * }\n */\n\n/**\n * Reflected oneof options.\n * @name OneofOptions\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected enum options.\n * @name EnumOptions\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected enum value options.\n * @name EnumValueOptions\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected service options.\n * @name ServiceOptions\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected method options.\n * @name MethodOptions\n * @type {Type}\n * @const\n * @tstype $protobuf.Type\n */\n\n/**\n * Reflected uninterpretet option.\n * @name UninterpretedOption\n * @type {Type}\n * @property {Type} NamePart\n * @const\n * @tstype $protobuf.Type & {\n *     NamePart: $protobuf.Type\n * }\n */\n\n/**\n * Reflected source code info.\n * @name SourceCodeInfo\n * @type {Type}\n * @property {Type} Location\n * @const\n * @tstype $protobuf.Type & {\n *     Location: $protobuf.Type\n * }\n */\n\n/**\n * Reflected generated code info.\n * @name GeneratedCodeInfo\n * @type {Type}\n * @property {Type} Annotation\n * @const\n * @tstype $protobuf.Type & {\n *     Annotation: $protobuf.Type\n * }\n */\n","{\n  \"nested\": {\n    \"google\": {\n      \"nested\": {\n        \"protobuf\": {\n          \"nested\": {\n            \"Api\": {\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"methods\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Method\",\n                  \"id\": 2\n                },\n                \"options\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Option\",\n                  \"id\": 3\n                },\n                \"version\": {\n                  \"type\": \"string\",\n                  \"id\": 4\n                },\n                \"sourceContext\": {\n                  \"type\": \"SourceContext\",\n                  \"id\": 5\n                },\n                \"mixins\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Mixin\",\n                  \"id\": 6\n                },\n                \"syntax\": {\n                  \"type\": \"Syntax\",\n                  \"id\": 7\n                }\n              }\n            },\n            \"Method\": {\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"requestTypeUrl\": {\n                  \"type\": \"string\",\n                  \"id\": 2\n                },\n                \"requestStreaming\": {\n                  \"type\": \"bool\",\n                  \"id\": 3\n                },\n                \"responseTypeUrl\": {\n                  \"type\": \"string\",\n                  \"id\": 4\n                },\n                \"responseStreaming\": {\n                  \"type\": \"bool\",\n                  \"id\": 5\n                },\n                \"options\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Option\",\n                  \"id\": 6\n                },\n                \"syntax\": {\n                  \"type\": \"Syntax\",\n                  \"id\": 7\n                }\n              }\n            },\n            \"Mixin\": {\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"root\": {\n                  \"type\": \"string\",\n                  \"id\": 2\n                }\n              }\n            },\n            \"SourceContext\": {\n              \"fields\": {\n                \"fileName\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                }\n              }\n            },\n            \"Option\": {\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"value\": {\n                  \"type\": \"Any\",\n                  \"id\": 2\n                }\n              }\n            },\n            \"Syntax\": {\n              \"values\": {\n                \"SYNTAX_PROTO2\": 0,\n                \"SYNTAX_PROTO3\": 1\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}","{\n  \"nested\": {\n    \"google\": {\n      \"nested\": {\n        \"protobuf\": {\n          \"nested\": {\n            \"SourceContext\": {\n              \"fields\": {\n                \"fileName\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}","{\n  \"nested\": {\n    \"google\": {\n      \"nested\": {\n        \"protobuf\": {\n          \"nested\": {\n            \"Type\": {\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"fields\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Field\",\n                  \"id\": 2\n                },\n                \"oneofs\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"string\",\n                  \"id\": 3\n                },\n                \"options\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Option\",\n                  \"id\": 4\n                },\n                \"sourceContext\": {\n                  \"type\": \"SourceContext\",\n                  \"id\": 5\n                },\n                \"syntax\": {\n                  \"type\": \"Syntax\",\n                  \"id\": 6\n                }\n              }\n            },\n            \"Field\": {\n              \"fields\": {\n                \"kind\": {\n                  \"type\": \"Kind\",\n                  \"id\": 1\n                },\n                \"cardinality\": {\n                  \"type\": \"Cardinality\",\n                  \"id\": 2\n                },\n                \"number\": {\n                  \"type\": \"int32\",\n                  \"id\": 3\n                },\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 4\n                },\n                \"typeUrl\": {\n                  \"type\": \"string\",\n                  \"id\": 6\n                },\n                \"oneofIndex\": {\n                  \"type\": \"int32\",\n                  \"id\": 7\n                },\n                \"packed\": {\n                  \"type\": \"bool\",\n                  \"id\": 8\n                },\n                \"options\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Option\",\n                  \"id\": 9\n                },\n                \"jsonName\": {\n                  \"type\": \"string\",\n                  \"id\": 10\n                },\n                \"defaultValue\": {\n                  \"type\": \"string\",\n                  \"id\": 11\n                }\n              },\n              \"nested\": {\n                \"Kind\": {\n                  \"values\": {\n                    \"TYPE_UNKNOWN\": 0,\n                    \"TYPE_DOUBLE\": 1,\n                    \"TYPE_FLOAT\": 2,\n                    \"TYPE_INT64\": 3,\n                    \"TYPE_UINT64\": 4,\n                    \"TYPE_INT32\": 5,\n                    \"TYPE_FIXED64\": 6,\n                    \"TYPE_FIXED32\": 7,\n                    \"TYPE_BOOL\": 8,\n                    \"TYPE_STRING\": 9,\n                    \"TYPE_GROUP\": 10,\n                    \"TYPE_MESSAGE\": 11,\n                    \"TYPE_BYTES\": 12,\n                    \"TYPE_UINT32\": 13,\n                    \"TYPE_ENUM\": 14,\n                    \"TYPE_SFIXED32\": 15,\n                    \"TYPE_SFIXED64\": 16,\n                    \"TYPE_SINT32\": 17,\n                    \"TYPE_SINT64\": 18\n                  }\n                },\n                \"Cardinality\": {\n                  \"values\": {\n                    \"CARDINALITY_UNKNOWN\": 0,\n                    \"CARDINALITY_OPTIONAL\": 1,\n                    \"CARDINALITY_REQUIRED\": 2,\n                    \"CARDINALITY_REPEATED\": 3\n                  }\n                }\n              }\n            },\n            \"Enum\": {\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"enumvalue\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"EnumValue\",\n                  \"id\": 2\n                },\n                \"options\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Option\",\n                  \"id\": 3\n                },\n                \"sourceContext\": {\n                  \"type\": \"SourceContext\",\n                  \"id\": 4\n                },\n                \"syntax\": {\n                  \"type\": \"Syntax\",\n                  \"id\": 5\n                }\n              }\n            },\n            \"EnumValue\": {\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"number\": {\n                  \"type\": \"int32\",\n                  \"id\": 2\n                },\n                \"options\": {\n                  \"rule\": \"repeated\",\n                  \"type\": \"Option\",\n                  \"id\": 3\n                }\n              }\n            },\n            \"Option\": {\n              \"fields\": {\n                \"name\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"value\": {\n                  \"type\": \"Any\",\n                  \"id\": 2\n                }\n              }\n            },\n            \"Syntax\": {\n              \"values\": {\n                \"SYNTAX_PROTO2\": 0,\n                \"SYNTAX_PROTO3\": 1\n              }\n            },\n            \"Any\": {\n              \"fields\": {\n                \"type_url\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                },\n                \"value\": {\n                  \"type\": \"bytes\",\n                  \"id\": 2\n                }\n              }\n            },\n            \"SourceContext\": {\n              \"fields\": {\n                \"fileName\": {\n                  \"type\": \"string\",\n                  \"id\": 1\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}",null,null,"/*\n * Copyright 2021 gRPC authors.\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 */\n\nimport { isIPv4, isIPv6 } from 'net';\nimport { OrderedMap, type OrderedMapIterator } from '@js-sdsl/ordered-map';\nimport { ConnectivityState } from './connectivity-state';\nimport { Status } from './constants';\nimport { Timestamp } from './generated/google/protobuf/Timestamp';\nimport { Channel as ChannelMessage } from './generated/grpc/channelz/v1/Channel';\nimport { ChannelConnectivityState__Output } from './generated/grpc/channelz/v1/ChannelConnectivityState';\nimport { ChannelRef as ChannelRefMessage } from './generated/grpc/channelz/v1/ChannelRef';\nimport { ChannelTrace } from './generated/grpc/channelz/v1/ChannelTrace';\nimport { GetChannelRequest__Output } from './generated/grpc/channelz/v1/GetChannelRequest';\nimport { GetChannelResponse } from './generated/grpc/channelz/v1/GetChannelResponse';\nimport { sendUnaryData, ServerUnaryCall } from './server-call';\nimport { ServerRef as ServerRefMessage } from './generated/grpc/channelz/v1/ServerRef';\nimport { SocketRef as SocketRefMessage } from './generated/grpc/channelz/v1/SocketRef';\nimport {\n  isTcpSubchannelAddress,\n  SubchannelAddress,\n} from './subchannel-address';\nimport { SubchannelRef as SubchannelRefMessage } from './generated/grpc/channelz/v1/SubchannelRef';\nimport { GetServerRequest__Output } from './generated/grpc/channelz/v1/GetServerRequest';\nimport { GetServerResponse } from './generated/grpc/channelz/v1/GetServerResponse';\nimport { Server as ServerMessage } from './generated/grpc/channelz/v1/Server';\nimport { GetServersRequest__Output } from './generated/grpc/channelz/v1/GetServersRequest';\nimport { GetServersResponse } from './generated/grpc/channelz/v1/GetServersResponse';\nimport { GetTopChannelsRequest__Output } from './generated/grpc/channelz/v1/GetTopChannelsRequest';\nimport { GetTopChannelsResponse } from './generated/grpc/channelz/v1/GetTopChannelsResponse';\nimport { GetSubchannelRequest__Output } from './generated/grpc/channelz/v1/GetSubchannelRequest';\nimport { GetSubchannelResponse } from './generated/grpc/channelz/v1/GetSubchannelResponse';\nimport { Subchannel as SubchannelMessage } from './generated/grpc/channelz/v1/Subchannel';\nimport { GetSocketRequest__Output } from './generated/grpc/channelz/v1/GetSocketRequest';\nimport { GetSocketResponse } from './generated/grpc/channelz/v1/GetSocketResponse';\nimport { Socket as SocketMessage } from './generated/grpc/channelz/v1/Socket';\nimport { Address } from './generated/grpc/channelz/v1/Address';\nimport { Security } from './generated/grpc/channelz/v1/Security';\nimport { GetServerSocketsRequest__Output } from './generated/grpc/channelz/v1/GetServerSocketsRequest';\nimport { GetServerSocketsResponse } from './generated/grpc/channelz/v1/GetServerSocketsResponse';\nimport {\n  ChannelzDefinition,\n  ChannelzHandlers,\n} from './generated/grpc/channelz/v1/Channelz';\nimport { ProtoGrpcType as ChannelzProtoGrpcType } from './generated/channelz';\nimport type { loadSync } from '@grpc/proto-loader';\nimport { registerAdminService } from './admin';\nimport { loadPackageDefinition } from './make-client';\n\nexport type TraceSeverity =\n  | 'CT_UNKNOWN'\n  | 'CT_INFO'\n  | 'CT_WARNING'\n  | 'CT_ERROR';\n\ninterface Ref {\n  kind: EntityTypes;\n  id: number;\n  name: string;\n}\n\nexport interface ChannelRef extends Ref {\n  kind: EntityTypes.channel;\n}\n\nexport interface SubchannelRef extends Ref {\n  kind: EntityTypes.subchannel;\n}\n\nexport interface ServerRef extends Ref {\n  kind: EntityTypes.server;\n}\n\nexport interface SocketRef extends Ref {\n  kind: EntityTypes.socket;\n}\n\nfunction channelRefToMessage(ref: ChannelRef): ChannelRefMessage {\n  return {\n    channel_id: ref.id,\n    name: ref.name,\n  };\n}\n\nfunction subchannelRefToMessage(ref: SubchannelRef): SubchannelRefMessage {\n  return {\n    subchannel_id: ref.id,\n    name: ref.name,\n  };\n}\n\nfunction serverRefToMessage(ref: ServerRef): ServerRefMessage {\n  return {\n    server_id: ref.id,\n  };\n}\n\nfunction socketRefToMessage(ref: SocketRef): SocketRefMessage {\n  return {\n    socket_id: ref.id,\n    name: ref.name,\n  };\n}\n\ninterface TraceEvent {\n  description: string;\n  severity: TraceSeverity;\n  timestamp: Date;\n  childChannel?: ChannelRef;\n  childSubchannel?: SubchannelRef;\n}\n\n/**\n * The loose upper bound on the number of events that should be retained in a\n * trace. This may be exceeded by up to a factor of 2. Arbitrarily chosen as a\n * number that should be large enough to contain the recent relevant\n * information, but small enough to not use excessive memory.\n */\nconst TARGET_RETAINED_TRACES = 32;\n\n/**\n * Default number of sockets/servers/channels/subchannels to return\n */\nconst DEFAULT_MAX_RESULTS = 100;\n\nexport class ChannelzTraceStub {\n  readonly events: TraceEvent[] = [];\n  readonly creationTimestamp: Date = new Date();\n  readonly eventsLogged = 0;\n\n  addTrace(): void {}\n  getTraceMessage(): ChannelTrace {\n    return {\n      creation_timestamp: dateToProtoTimestamp(this.creationTimestamp),\n      num_events_logged: this.eventsLogged,\n      events: [],\n    };\n  }\n}\n\nexport class ChannelzTrace {\n  events: TraceEvent[] = [];\n  creationTimestamp: Date;\n  eventsLogged = 0;\n\n  constructor() {\n    this.creationTimestamp = new Date();\n  }\n\n  addTrace(\n    severity: TraceSeverity,\n    description: string,\n    child?: ChannelRef | SubchannelRef\n  ) {\n    const timestamp = new Date();\n    this.events.push({\n      description: description,\n      severity: severity,\n      timestamp: timestamp,\n      childChannel: child?.kind === 'channel' ? child : undefined,\n      childSubchannel: child?.kind === 'subchannel' ? child : undefined,\n    });\n    // Whenever the trace array gets too large, discard the first half\n    if (this.events.length >= TARGET_RETAINED_TRACES * 2) {\n      this.events = this.events.slice(TARGET_RETAINED_TRACES);\n    }\n    this.eventsLogged += 1;\n  }\n\n  getTraceMessage(): ChannelTrace {\n    return {\n      creation_timestamp: dateToProtoTimestamp(this.creationTimestamp),\n      num_events_logged: this.eventsLogged,\n      events: this.events.map(event => {\n        return {\n          description: event.description,\n          severity: event.severity,\n          timestamp: dateToProtoTimestamp(event.timestamp),\n          channel_ref: event.childChannel\n            ? channelRefToMessage(event.childChannel)\n            : null,\n          subchannel_ref: event.childSubchannel\n            ? subchannelRefToMessage(event.childSubchannel)\n            : null,\n        };\n      }),\n    };\n  }\n}\n\ntype RefOrderedMap = OrderedMap<\n  number,\n  { ref: { id: number; kind: EntityTypes; name: string }; count: number }\n>;\n\nexport class ChannelzChildrenTracker {\n  private channelChildren: RefOrderedMap = new OrderedMap();\n  private subchannelChildren: RefOrderedMap = new OrderedMap();\n  private socketChildren: RefOrderedMap = new OrderedMap();\n  private trackerMap = {\n    [EntityTypes.channel]: this.channelChildren,\n    [EntityTypes.subchannel]: this.subchannelChildren,\n    [EntityTypes.socket]: this.socketChildren,\n  } as const;\n\n  refChild(child: ChannelRef | SubchannelRef | SocketRef) {\n    const tracker = this.trackerMap[child.kind];\n    const trackedChild = tracker.find(child.id);\n\n    if (trackedChild.equals(tracker.end())) {\n      tracker.setElement(\n        child.id,\n        {\n          ref: child,\n          count: 1,\n        },\n        trackedChild\n      );\n    } else {\n      trackedChild.pointer[1].count += 1;\n    }\n  }\n\n  unrefChild(child: ChannelRef | SubchannelRef | SocketRef) {\n    const tracker = this.trackerMap[child.kind];\n    const trackedChild = tracker.getElementByKey(child.id);\n    if (trackedChild !== undefined) {\n      trackedChild.count -= 1;\n      if (trackedChild.count === 0) {\n        tracker.eraseElementByKey(child.id);\n      }\n    }\n  }\n\n  getChildLists(): ChannelzChildren {\n    return {\n      channels: this.channelChildren as ChannelzChildren['channels'],\n      subchannels: this.subchannelChildren as ChannelzChildren['subchannels'],\n      sockets: this.socketChildren as ChannelzChildren['sockets'],\n    };\n  }\n}\n\nexport class ChannelzChildrenTrackerStub extends ChannelzChildrenTracker {\n  override refChild(): void {}\n  override unrefChild(): void {}\n}\n\nexport class ChannelzCallTracker {\n  callsStarted = 0;\n  callsSucceeded = 0;\n  callsFailed = 0;\n  lastCallStartedTimestamp: Date | null = null;\n\n  addCallStarted() {\n    this.callsStarted += 1;\n    this.lastCallStartedTimestamp = new Date();\n  }\n  addCallSucceeded() {\n    this.callsSucceeded += 1;\n  }\n  addCallFailed() {\n    this.callsFailed += 1;\n  }\n}\n\nexport class ChannelzCallTrackerStub extends ChannelzCallTracker {\n  override addCallStarted() {}\n  override addCallSucceeded() {}\n  override addCallFailed() {}\n}\n\nexport interface ChannelzChildren {\n  channels: OrderedMap<number, { ref: ChannelRef; count: number }>;\n  subchannels: OrderedMap<number, { ref: SubchannelRef; count: number }>;\n  sockets: OrderedMap<number, { ref: SocketRef; count: number }>;\n}\n\nexport interface ChannelInfo {\n  target: string;\n  state: ConnectivityState;\n  trace: ChannelzTrace | ChannelzTraceStub;\n  callTracker: ChannelzCallTracker | ChannelzCallTrackerStub;\n  children: ChannelzChildren;\n}\n\nexport type SubchannelInfo = ChannelInfo;\n\nexport interface ServerInfo {\n  trace: ChannelzTrace;\n  callTracker: ChannelzCallTracker;\n  listenerChildren: ChannelzChildren;\n  sessionChildren: ChannelzChildren;\n}\n\nexport interface TlsInfo {\n  cipherSuiteStandardName: string | null;\n  cipherSuiteOtherName: string | null;\n  localCertificate: Buffer | null;\n  remoteCertificate: Buffer | null;\n}\n\nexport interface SocketInfo {\n  localAddress: SubchannelAddress | null;\n  remoteAddress: SubchannelAddress | null;\n  security: TlsInfo | null;\n  remoteName: string | null;\n  streamsStarted: number;\n  streamsSucceeded: number;\n  streamsFailed: number;\n  messagesSent: number;\n  messagesReceived: number;\n  keepAlivesSent: number;\n  lastLocalStreamCreatedTimestamp: Date | null;\n  lastRemoteStreamCreatedTimestamp: Date | null;\n  lastMessageSentTimestamp: Date | null;\n  lastMessageReceivedTimestamp: Date | null;\n  localFlowControlWindow: number | null;\n  remoteFlowControlWindow: number | null;\n}\n\ninterface ChannelEntry {\n  ref: ChannelRef;\n  getInfo(): ChannelInfo;\n}\n\ninterface SubchannelEntry {\n  ref: SubchannelRef;\n  getInfo(): SubchannelInfo;\n}\n\ninterface ServerEntry {\n  ref: ServerRef;\n  getInfo(): ServerInfo;\n}\n\ninterface SocketEntry {\n  ref: SocketRef;\n  getInfo(): SocketInfo;\n}\n\nexport const enum EntityTypes {\n  channel = 'channel',\n  subchannel = 'subchannel',\n  server = 'server',\n  socket = 'socket',\n}\n\ntype EntryOrderedMap = OrderedMap<number, { ref: Ref; getInfo: () => any }>;\n\nconst entityMaps = {\n  [EntityTypes.channel]: new OrderedMap<number, ChannelEntry>(),\n  [EntityTypes.subchannel]: new OrderedMap<number, SubchannelEntry>(),\n  [EntityTypes.server]: new OrderedMap<number, ServerEntry>(),\n  [EntityTypes.socket]: new OrderedMap<number, SocketEntry>(),\n} as const;\n\nexport type RefByType<T extends EntityTypes> = T extends EntityTypes.channel\n  ? ChannelRef\n  : T extends EntityTypes.server\n  ? ServerRef\n  : T extends EntityTypes.socket\n  ? SocketRef\n  : T extends EntityTypes.subchannel\n  ? SubchannelRef\n  : never;\n\nexport type EntryByType<T extends EntityTypes> = T extends EntityTypes.channel\n  ? ChannelEntry\n  : T extends EntityTypes.server\n  ? ServerEntry\n  : T extends EntityTypes.socket\n  ? SocketEntry\n  : T extends EntityTypes.subchannel\n  ? SubchannelEntry\n  : never;\n\nexport type InfoByType<T extends EntityTypes> = T extends EntityTypes.channel\n  ? ChannelInfo\n  : T extends EntityTypes.subchannel\n  ? SubchannelInfo\n  : T extends EntityTypes.server\n  ? ServerInfo\n  : T extends EntityTypes.socket\n  ? SocketInfo\n  : never;\n\nconst generateRegisterFn = <R extends EntityTypes>(kind: R) => {\n  let nextId = 1;\n  function getNextId(): number {\n    return nextId++;\n  }\n\n  const entityMap: EntryOrderedMap = entityMaps[kind];\n\n  return (\n    name: string,\n    getInfo: () => InfoByType<R>,\n    channelzEnabled: boolean\n  ): RefByType<R> => {\n    const id = getNextId();\n    const ref = { id, name, kind } as RefByType<R>;\n    if (channelzEnabled) {\n      entityMap.setElement(id, { ref, getInfo });\n    }\n    return ref;\n  };\n};\n\nexport const registerChannelzChannel = generateRegisterFn(EntityTypes.channel);\nexport const registerChannelzSubchannel = generateRegisterFn(\n  EntityTypes.subchannel\n);\nexport const registerChannelzServer = generateRegisterFn(EntityTypes.server);\nexport const registerChannelzSocket = generateRegisterFn(EntityTypes.socket);\n\nexport function unregisterChannelzRef(\n  ref: ChannelRef | SubchannelRef | ServerRef | SocketRef\n) {\n  entityMaps[ref.kind].eraseElementByKey(ref.id);\n}\n\n/**\n * Parse a single section of an IPv6 address as two bytes\n * @param addressSection A hexadecimal string of length up to 4\n * @returns The pair of bytes representing this address section\n */\nfunction parseIPv6Section(addressSection: string): [number, number] {\n  const numberValue = Number.parseInt(addressSection, 16);\n  return [(numberValue / 256) | 0, numberValue % 256];\n}\n\n/**\n * Parse a chunk of an IPv6 address string to some number of bytes\n * @param addressChunk Some number of segments of up to 4 hexadecimal\n *   characters each, joined by colons.\n * @returns The list of bytes representing this address chunk\n */\nfunction parseIPv6Chunk(addressChunk: string): number[] {\n  if (addressChunk === '') {\n    return [];\n  }\n  const bytePairs = addressChunk\n    .split(':')\n    .map(section => parseIPv6Section(section));\n  const result: number[] = [];\n  return result.concat(...bytePairs);\n}\n\nfunction isIPv6MappedIPv4(ipAddress: string) {\n  return isIPv6(ipAddress) && ipAddress.toLowerCase().startsWith('::ffff:') && isIPv4(ipAddress.substring(7));\n}\n\n/**\n * Prerequisite: isIPv4(ipAddress)\n * @param ipAddress\n * @returns\n */\nfunction ipv4AddressStringToBuffer(ipAddress: string): Buffer {\n  return Buffer.from(\n    Uint8Array.from(\n      ipAddress.split('.').map(segment => Number.parseInt(segment))\n    )\n  );\n}\n\n/**\n * Converts an IPv4 or IPv6 address from string representation to binary\n * representation\n * @param ipAddress an IP address in standard IPv4 or IPv6 text format\n * @returns\n */\nfunction ipAddressStringToBuffer(ipAddress: string): Buffer | null {\n  if (isIPv4(ipAddress)) {\n    return ipv4AddressStringToBuffer(ipAddress);\n  } else if (isIPv6MappedIPv4(ipAddress)) {\n    return ipv4AddressStringToBuffer(ipAddress.substring(7));\n  } else if (isIPv6(ipAddress)) {\n    let leftSection: string;\n    let rightSection: string;\n    const doubleColonIndex = ipAddress.indexOf('::');\n    if (doubleColonIndex === -1) {\n      leftSection = ipAddress;\n      rightSection = '';\n    } else {\n      leftSection = ipAddress.substring(0, doubleColonIndex);\n      rightSection = ipAddress.substring(doubleColonIndex + 2);\n    }\n    const leftBuffer = Buffer.from(parseIPv6Chunk(leftSection));\n    const rightBuffer = Buffer.from(parseIPv6Chunk(rightSection));\n    const middleBuffer = Buffer.alloc(\n      16 - leftBuffer.length - rightBuffer.length,\n      0\n    );\n    return Buffer.concat([leftBuffer, middleBuffer, rightBuffer]);\n  } else {\n    return null;\n  }\n}\n\nfunction connectivityStateToMessage(\n  state: ConnectivityState\n): ChannelConnectivityState__Output {\n  switch (state) {\n    case ConnectivityState.CONNECTING:\n      return {\n        state: 'CONNECTING',\n      };\n    case ConnectivityState.IDLE:\n      return {\n        state: 'IDLE',\n      };\n    case ConnectivityState.READY:\n      return {\n        state: 'READY',\n      };\n    case ConnectivityState.SHUTDOWN:\n      return {\n        state: 'SHUTDOWN',\n      };\n    case ConnectivityState.TRANSIENT_FAILURE:\n      return {\n        state: 'TRANSIENT_FAILURE',\n      };\n    default:\n      return {\n        state: 'UNKNOWN',\n      };\n  }\n}\n\nfunction dateToProtoTimestamp(date?: Date | null): Timestamp | null {\n  if (!date) {\n    return null;\n  }\n  const millisSinceEpoch = date.getTime();\n  return {\n    seconds: (millisSinceEpoch / 1000) | 0,\n    nanos: (millisSinceEpoch % 1000) * 1_000_000,\n  };\n}\n\nfunction getChannelMessage(channelEntry: ChannelEntry): ChannelMessage {\n  const resolvedInfo = channelEntry.getInfo();\n  const channelRef: ChannelRefMessage[] = [];\n  const subchannelRef: SubchannelRefMessage[] = [];\n\n  resolvedInfo.children.channels.forEach(el => {\n    channelRef.push(channelRefToMessage(el[1].ref));\n  });\n\n  resolvedInfo.children.subchannels.forEach(el => {\n    subchannelRef.push(subchannelRefToMessage(el[1].ref));\n  });\n\n  return {\n    ref: channelRefToMessage(channelEntry.ref),\n    data: {\n      target: resolvedInfo.target,\n      state: connectivityStateToMessage(resolvedInfo.state),\n      calls_started: resolvedInfo.callTracker.callsStarted,\n      calls_succeeded: resolvedInfo.callTracker.callsSucceeded,\n      calls_failed: resolvedInfo.callTracker.callsFailed,\n      last_call_started_timestamp: dateToProtoTimestamp(\n        resolvedInfo.callTracker.lastCallStartedTimestamp\n      ),\n      trace: resolvedInfo.trace.getTraceMessage(),\n    },\n    channel_ref: channelRef,\n    subchannel_ref: subchannelRef,\n  };\n}\n\nfunction GetChannel(\n  call: ServerUnaryCall<GetChannelRequest__Output, GetChannelResponse>,\n  callback: sendUnaryData<GetChannelResponse>\n): void {\n  const channelId = parseInt(call.request.channel_id, 10);\n  const channelEntry =\n    entityMaps[EntityTypes.channel].getElementByKey(channelId);\n  if (channelEntry === undefined) {\n    callback({\n      code: Status.NOT_FOUND,\n      details: 'No channel data found for id ' + channelId,\n    });\n    return;\n  }\n  callback(null, { channel: getChannelMessage(channelEntry) });\n}\n\nfunction GetTopChannels(\n  call: ServerUnaryCall<GetTopChannelsRequest__Output, GetTopChannelsResponse>,\n  callback: sendUnaryData<GetTopChannelsResponse>\n): void {\n  const maxResults =\n    parseInt(call.request.max_results, 10) || DEFAULT_MAX_RESULTS;\n  const resultList: ChannelMessage[] = [];\n  const startId = parseInt(call.request.start_channel_id, 10);\n  const channelEntries = entityMaps[EntityTypes.channel];\n\n  let i: OrderedMapIterator<number, ChannelEntry>;\n  for (\n    i = channelEntries.lowerBound(startId);\n    !i.equals(channelEntries.end()) && resultList.length < maxResults;\n    i = i.next()\n  ) {\n    resultList.push(getChannelMessage(i.pointer[1]));\n  }\n\n  callback(null, {\n    channel: resultList,\n    end: i.equals(channelEntries.end()),\n  });\n}\n\nfunction getServerMessage(serverEntry: ServerEntry): ServerMessage {\n  const resolvedInfo = serverEntry.getInfo();\n  const listenSocket: SocketRefMessage[] = [];\n\n  resolvedInfo.listenerChildren.sockets.forEach(el => {\n    listenSocket.push(socketRefToMessage(el[1].ref));\n  });\n\n  return {\n    ref: serverRefToMessage(serverEntry.ref),\n    data: {\n      calls_started: resolvedInfo.callTracker.callsStarted,\n      calls_succeeded: resolvedInfo.callTracker.callsSucceeded,\n      calls_failed: resolvedInfo.callTracker.callsFailed,\n      last_call_started_timestamp: dateToProtoTimestamp(\n        resolvedInfo.callTracker.lastCallStartedTimestamp\n      ),\n      trace: resolvedInfo.trace.getTraceMessage(),\n    },\n    listen_socket: listenSocket,\n  };\n}\n\nfunction GetServer(\n  call: ServerUnaryCall<GetServerRequest__Output, GetServerResponse>,\n  callback: sendUnaryData<GetServerResponse>\n): void {\n  const serverId = parseInt(call.request.server_id, 10);\n  const serverEntries = entityMaps[EntityTypes.server];\n  const serverEntry = serverEntries.getElementByKey(serverId);\n  if (serverEntry === undefined) {\n    callback({\n      code: Status.NOT_FOUND,\n      details: 'No server data found for id ' + serverId,\n    });\n    return;\n  }\n  callback(null, { server: getServerMessage(serverEntry) });\n}\n\nfunction GetServers(\n  call: ServerUnaryCall<GetServersRequest__Output, GetServersResponse>,\n  callback: sendUnaryData<GetServersResponse>\n): void {\n  const maxResults =\n    parseInt(call.request.max_results, 10) || DEFAULT_MAX_RESULTS;\n  const startId = parseInt(call.request.start_server_id, 10);\n  const serverEntries = entityMaps[EntityTypes.server];\n  const resultList: ServerMessage[] = [];\n\n  let i: OrderedMapIterator<number, ServerEntry>;\n  for (\n    i = serverEntries.lowerBound(startId);\n    !i.equals(serverEntries.end()) && resultList.length < maxResults;\n    i = i.next()\n  ) {\n    resultList.push(getServerMessage(i.pointer[1]));\n  }\n\n  callback(null, {\n    server: resultList,\n    end: i.equals(serverEntries.end()),\n  });\n}\n\nfunction GetSubchannel(\n  call: ServerUnaryCall<GetSubchannelRequest__Output, GetSubchannelResponse>,\n  callback: sendUnaryData<GetSubchannelResponse>\n): void {\n  const subchannelId = parseInt(call.request.subchannel_id, 10);\n  const subchannelEntry =\n    entityMaps[EntityTypes.subchannel].getElementByKey(subchannelId);\n  if (subchannelEntry === undefined) {\n    callback({\n      code: Status.NOT_FOUND,\n      details: 'No subchannel data found for id ' + subchannelId,\n    });\n    return;\n  }\n  const resolvedInfo = subchannelEntry.getInfo();\n  const listenSocket: SocketRefMessage[] = [];\n\n  resolvedInfo.children.sockets.forEach(el => {\n    listenSocket.push(socketRefToMessage(el[1].ref));\n  });\n\n  const subchannelMessage: SubchannelMessage = {\n    ref: subchannelRefToMessage(subchannelEntry.ref),\n    data: {\n      target: resolvedInfo.target,\n      state: connectivityStateToMessage(resolvedInfo.state),\n      calls_started: resolvedInfo.callTracker.callsStarted,\n      calls_succeeded: resolvedInfo.callTracker.callsSucceeded,\n      calls_failed: resolvedInfo.callTracker.callsFailed,\n      last_call_started_timestamp: dateToProtoTimestamp(\n        resolvedInfo.callTracker.lastCallStartedTimestamp\n      ),\n      trace: resolvedInfo.trace.getTraceMessage(),\n    },\n    socket_ref: listenSocket,\n  };\n  callback(null, { subchannel: subchannelMessage });\n}\n\nfunction subchannelAddressToAddressMessage(\n  subchannelAddress: SubchannelAddress\n): Address {\n  if (isTcpSubchannelAddress(subchannelAddress)) {\n    return {\n      address: 'tcpip_address',\n      tcpip_address: {\n        ip_address:\n          ipAddressStringToBuffer(subchannelAddress.host) ?? undefined,\n        port: subchannelAddress.port,\n      },\n    };\n  } else {\n    return {\n      address: 'uds_address',\n      uds_address: {\n        filename: subchannelAddress.path,\n      },\n    };\n  }\n}\n\nfunction GetSocket(\n  call: ServerUnaryCall<GetSocketRequest__Output, GetSocketResponse>,\n  callback: sendUnaryData<GetSocketResponse>\n): void {\n  const socketId = parseInt(call.request.socket_id, 10);\n  const socketEntry = entityMaps[EntityTypes.socket].getElementByKey(socketId);\n  if (socketEntry === undefined) {\n    callback({\n      code: Status.NOT_FOUND,\n      details: 'No socket data found for id ' + socketId,\n    });\n    return;\n  }\n  const resolvedInfo = socketEntry.getInfo();\n  const securityMessage: Security | null = resolvedInfo.security\n    ? {\n        model: 'tls',\n        tls: {\n          cipher_suite: resolvedInfo.security.cipherSuiteStandardName\n            ? 'standard_name'\n            : 'other_name',\n          standard_name:\n            resolvedInfo.security.cipherSuiteStandardName ?? undefined,\n          other_name: resolvedInfo.security.cipherSuiteOtherName ?? undefined,\n          local_certificate:\n            resolvedInfo.security.localCertificate ?? undefined,\n          remote_certificate:\n            resolvedInfo.security.remoteCertificate ?? undefined,\n        },\n      }\n    : null;\n  const socketMessage: SocketMessage = {\n    ref: socketRefToMessage(socketEntry.ref),\n    local: resolvedInfo.localAddress\n      ? subchannelAddressToAddressMessage(resolvedInfo.localAddress)\n      : null,\n    remote: resolvedInfo.remoteAddress\n      ? subchannelAddressToAddressMessage(resolvedInfo.remoteAddress)\n      : null,\n    remote_name: resolvedInfo.remoteName ?? undefined,\n    security: securityMessage,\n    data: {\n      keep_alives_sent: resolvedInfo.keepAlivesSent,\n      streams_started: resolvedInfo.streamsStarted,\n      streams_succeeded: resolvedInfo.streamsSucceeded,\n      streams_failed: resolvedInfo.streamsFailed,\n      last_local_stream_created_timestamp: dateToProtoTimestamp(\n        resolvedInfo.lastLocalStreamCreatedTimestamp\n      ),\n      last_remote_stream_created_timestamp: dateToProtoTimestamp(\n        resolvedInfo.lastRemoteStreamCreatedTimestamp\n      ),\n      messages_received: resolvedInfo.messagesReceived,\n      messages_sent: resolvedInfo.messagesSent,\n      last_message_received_timestamp: dateToProtoTimestamp(\n        resolvedInfo.lastMessageReceivedTimestamp\n      ),\n      last_message_sent_timestamp: dateToProtoTimestamp(\n        resolvedInfo.lastMessageSentTimestamp\n      ),\n      local_flow_control_window: resolvedInfo.localFlowControlWindow\n        ? { value: resolvedInfo.localFlowControlWindow }\n        : null,\n      remote_flow_control_window: resolvedInfo.remoteFlowControlWindow\n        ? { value: resolvedInfo.remoteFlowControlWindow }\n        : null,\n    },\n  };\n  callback(null, { socket: socketMessage });\n}\n\nfunction GetServerSockets(\n  call: ServerUnaryCall<\n    GetServerSocketsRequest__Output,\n    GetServerSocketsResponse\n  >,\n  callback: sendUnaryData<GetServerSocketsResponse>\n): void {\n  const serverId = parseInt(call.request.server_id, 10);\n  const serverEntry = entityMaps[EntityTypes.server].getElementByKey(serverId);\n\n  if (serverEntry === undefined) {\n    callback({\n      code: Status.NOT_FOUND,\n      details: 'No server data found for id ' + serverId,\n    });\n    return;\n  }\n\n  const startId = parseInt(call.request.start_socket_id, 10);\n  const maxResults =\n    parseInt(call.request.max_results, 10) || DEFAULT_MAX_RESULTS;\n  const resolvedInfo = serverEntry.getInfo();\n  // If we wanted to include listener sockets in the result, this line would\n  // instead say\n  // const allSockets = resolvedInfo.listenerChildren.sockets.concat(resolvedInfo.sessionChildren.sockets).sort((ref1, ref2) => ref1.id - ref2.id);\n  const allSockets = resolvedInfo.sessionChildren.sockets;\n  const resultList: SocketRefMessage[] = [];\n\n  let i: OrderedMapIterator<number, { ref: SocketRef }>;\n  for (\n    i = allSockets.lowerBound(startId);\n    !i.equals(allSockets.end()) && resultList.length < maxResults;\n    i = i.next()\n  ) {\n    resultList.push(socketRefToMessage(i.pointer[1].ref));\n  }\n\n  callback(null, {\n    socket_ref: resultList,\n    end: i.equals(allSockets.end()),\n  });\n}\n\nexport function getChannelzHandlers(): ChannelzHandlers {\n  return {\n    GetChannel,\n    GetTopChannels,\n    GetServer,\n    GetServers,\n    GetSubchannel,\n    GetSocket,\n    GetServerSockets,\n  };\n}\n\nlet loadedChannelzDefinition: ChannelzDefinition | null = null;\n\nexport function getChannelzServiceDefinition(): ChannelzDefinition {\n  if (loadedChannelzDefinition) {\n    return loadedChannelzDefinition;\n  }\n  /* The purpose of this complexity is to avoid loading @grpc/proto-loader at\n   * runtime for users who will not use/enable channelz. */\n  const loaderLoadSync = require('@grpc/proto-loader')\n    .loadSync as typeof loadSync;\n  const loadedProto = loaderLoadSync('channelz.proto', {\n    keepCase: true,\n    longs: String,\n    enums: String,\n    defaults: true,\n    oneofs: true,\n    includeDirs: [`${__dirname}/../../proto`],\n  });\n  const channelzGrpcObject = loadPackageDefinition(\n    loadedProto\n  ) as unknown as ChannelzProtoGrpcType;\n  loadedChannelzDefinition =\n    channelzGrpcObject.grpc.channelz.v1.Channelz.service;\n  return loadedChannelzDefinition;\n}\n\nexport function setup() {\n  registerAdminService(getChannelzServiceDefinition, getChannelzHandlers);\n}\n","/*\n * Copyright 2022 gRPC authors.\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 */\n\nlet nextCallNumber = 0;\n\nexport function getNextCallNumber() {\n  return nextCallNumber++;\n}\n","/*\n * Copyright 2021 gRPC authors.\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 */\n\nexport enum CompressionAlgorithms {\n  identity = 0,\n  deflate = 1,\n  gzip = 2,\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { StatusObject, WriteObject } from './call-interface';\nimport { Metadata } from './metadata';\n\n/**\n * Filter classes represent related per-call logic and state that is primarily\n * used to modify incoming and outgoing data. All async filters can be\n * rejected. The rejection error must be a StatusObject, and a rejection will\n * cause the call to end with that status.\n */\nexport interface Filter {\n  sendMetadata(metadata: Promise<Metadata>): Promise<Metadata>;\n\n  receiveMetadata(metadata: Metadata): Metadata;\n\n  sendMessage(message: Promise<WriteObject>): Promise<WriteObject>;\n\n  receiveMessage(message: Promise<Buffer>): Promise<Buffer>;\n\n  receiveTrailers(status: StatusObject): StatusObject;\n}\n\nexport abstract class BaseFilter implements Filter {\n  async sendMetadata(metadata: Promise<Metadata>): Promise<Metadata> {\n    return metadata;\n  }\n\n  receiveMetadata(metadata: Metadata): Metadata {\n    return metadata;\n  }\n\n  async sendMessage(message: Promise<WriteObject>): Promise<WriteObject> {\n    return message;\n  }\n\n  async receiveMessage(message: Promise<Buffer>): Promise<Buffer> {\n    return message;\n  }\n\n  receiveTrailers(status: StatusObject): StatusObject {\n    return status;\n  }\n}\n\nexport interface FilterFactory<T extends Filter> {\n  createFilter(): T;\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport * as zlib from 'zlib';\n\nimport { WriteObject, WriteFlags } from './call-interface';\nimport { Channel } from './channel';\nimport { ChannelOptions } from './channel-options';\nimport { CompressionAlgorithms } from './compression-algorithms';\nimport { DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH, DEFAULT_MAX_SEND_MESSAGE_LENGTH, LogVerbosity, Status } from './constants';\nimport { BaseFilter, Filter, FilterFactory } from './filter';\nimport * as logging from './logging';\nimport { Metadata, MetadataValue } from './metadata';\n\nconst isCompressionAlgorithmKey = (\n  key: number\n): key is CompressionAlgorithms => {\n  return (\n    typeof key === 'number' && typeof CompressionAlgorithms[key] === 'string'\n  );\n};\n\ntype CompressionAlgorithm = keyof typeof CompressionAlgorithms;\n\ntype SharedCompressionFilterConfig = {\n  serverSupportedEncodingHeader?: string;\n};\n\nabstract class CompressionHandler {\n  protected abstract compressMessage(message: Buffer): Promise<Buffer>;\n  protected abstract decompressMessage(data: Buffer): Promise<Buffer>;\n  /**\n   * @param message Raw uncompressed message bytes\n   * @param compress Indicates whether the message should be compressed\n   * @return Framed message, compressed if applicable\n   */\n  async writeMessage(message: Buffer, compress: boolean): Promise<Buffer> {\n    let messageBuffer = message;\n    if (compress) {\n      messageBuffer = await this.compressMessage(messageBuffer);\n    }\n    const output = Buffer.allocUnsafe(messageBuffer.length + 5);\n    output.writeUInt8(compress ? 1 : 0, 0);\n    output.writeUInt32BE(messageBuffer.length, 1);\n    messageBuffer.copy(output, 5);\n    return output;\n  }\n  /**\n   * @param data Framed message, possibly compressed\n   * @return Uncompressed message\n   */\n  async readMessage(data: Buffer): Promise<Buffer> {\n    const compressed = data.readUInt8(0) === 1;\n    let messageBuffer: Buffer<ArrayBufferLike> = data.slice(5);\n    if (compressed) {\n      messageBuffer = await this.decompressMessage(messageBuffer);\n    }\n    return messageBuffer;\n  }\n}\n\nclass IdentityHandler extends CompressionHandler {\n  async compressMessage(message: Buffer) {\n    return message;\n  }\n\n  async writeMessage(message: Buffer, compress: boolean): Promise<Buffer> {\n    const output = Buffer.allocUnsafe(message.length + 5);\n    /* With \"identity\" compression, messages should always be marked as\n     * uncompressed */\n    output.writeUInt8(0, 0);\n    output.writeUInt32BE(message.length, 1);\n    message.copy(output, 5);\n    return output;\n  }\n\n  decompressMessage(message: Buffer): Promise<Buffer> {\n    return Promise.reject<Buffer>(\n      new Error(\n        'Received compressed message but \"grpc-encoding\" header was identity'\n      )\n    );\n  }\n}\n\nclass DeflateHandler extends CompressionHandler {\n  constructor(private maxRecvMessageLength: number) {\n    super();\n  }\n\n  compressMessage(message: Buffer) {\n    return new Promise<Buffer>((resolve, reject) => {\n      zlib.deflate(message, (err, output) => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve(output);\n        }\n      });\n    });\n  }\n\n  decompressMessage(message: Buffer) {\n    return new Promise<Buffer>((resolve, reject) => {\n      let totalLength = 0;\n      const messageParts: Buffer[] = [];\n      const decompresser = zlib.createInflate();\n      decompresser.on('error', (error: Error) => {\n        reject({\n          code: Status.INTERNAL,\n          details: 'Failed to decompress deflate-encoded message'\n        });\n      });\n      decompresser.on('data', (chunk: Buffer) => {\n        messageParts.push(chunk);\n        totalLength += chunk.byteLength;\n        if (this.maxRecvMessageLength !== -1 && totalLength > this.maxRecvMessageLength) {\n          decompresser.destroy();\n          reject({\n            code: Status.RESOURCE_EXHAUSTED,\n            details: `Received message that decompresses to a size larger than ${this.maxRecvMessageLength}`\n          });\n        }\n      });\n      decompresser.on('end', () => {\n        resolve(Buffer.concat(messageParts));\n      });\n      decompresser.write(message);\n      decompresser.end();\n    });\n  }\n}\n\nclass GzipHandler extends CompressionHandler {\n  constructor(private maxRecvMessageLength: number) {\n    super();\n  }\n\n  compressMessage(message: Buffer) {\n    return new Promise<Buffer>((resolve, reject) => {\n      zlib.gzip(message, (err, output) => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve(output);\n        }\n      });\n    });\n  }\n\n  decompressMessage(message: Buffer) {\n    return new Promise<Buffer>((resolve, reject) => {\n      let totalLength = 0;\n      const messageParts: Buffer[] = [];\n      const decompresser = zlib.createGunzip();\n      decompresser.on('error', (error: Error) => {\n        reject({\n          code: Status.INTERNAL,\n          details: 'Failed to decompress gzip-encoded message'\n        });\n      });\n      decompresser.on('data', (chunk: Buffer) => {\n        messageParts.push(chunk);\n        totalLength += chunk.byteLength;\n        if (this.maxRecvMessageLength !== -1 && totalLength > this.maxRecvMessageLength) {\n          decompresser.destroy();\n          reject({\n            code: Status.RESOURCE_EXHAUSTED,\n            details: `Received message that decompresses to a size larger than ${this.maxRecvMessageLength}`\n          });\n        }\n      });\n      decompresser.on('end', () => {\n        resolve(Buffer.concat(messageParts));\n      });\n      decompresser.write(message);\n      decompresser.end();\n    });\n  }\n}\n\nclass UnknownHandler extends CompressionHandler {\n  constructor(private readonly compressionName: string) {\n    super();\n  }\n  compressMessage(message: Buffer): Promise<Buffer> {\n    return Promise.reject<Buffer>(\n      new Error(\n        `Received message compressed with unsupported compression method ${this.compressionName}`\n      )\n    );\n  }\n\n  decompressMessage(message: Buffer): Promise<Buffer> {\n    // This should be unreachable\n    return Promise.reject<Buffer>(\n      new Error(`Compression method not supported: ${this.compressionName}`)\n    );\n  }\n}\n\nfunction getCompressionHandler(compressionName: string, maxReceiveMessageSize: number): CompressionHandler {\n  switch (compressionName) {\n    case 'identity':\n      return new IdentityHandler();\n    case 'deflate':\n      return new DeflateHandler(maxReceiveMessageSize);\n    case 'gzip':\n      return new GzipHandler(maxReceiveMessageSize);\n    default:\n      return new UnknownHandler(compressionName);\n  }\n}\n\nexport class CompressionFilter extends BaseFilter implements Filter {\n  private sendCompression: CompressionHandler = new IdentityHandler();\n  private receiveCompression: CompressionHandler = new IdentityHandler();\n  private currentCompressionAlgorithm: CompressionAlgorithm = 'identity';\n  private maxReceiveMessageLength: number;\n  private maxSendMessageLength: number;\n\n  constructor(\n    channelOptions: ChannelOptions,\n    private sharedFilterConfig: SharedCompressionFilterConfig\n  ) {\n    super();\n\n    const compressionAlgorithmKey =\n      channelOptions['grpc.default_compression_algorithm'];\n    this.maxReceiveMessageLength = channelOptions['grpc.max_receive_message_length'] ?? DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH;\n    this.maxSendMessageLength = channelOptions['grpc.max_send_message_length'] ?? DEFAULT_MAX_SEND_MESSAGE_LENGTH;\n    if (compressionAlgorithmKey !== undefined) {\n      if (isCompressionAlgorithmKey(compressionAlgorithmKey)) {\n        const clientSelectedEncoding = CompressionAlgorithms[\n          compressionAlgorithmKey\n        ] as CompressionAlgorithm;\n        const serverSupportedEncodings =\n          sharedFilterConfig.serverSupportedEncodingHeader?.split(',');\n        /**\n         * There are two possible situations here:\n         * 1) We don't have any info yet from the server about what compression it supports\n         *    In that case we should just use what the client tells us to use\n         * 2) We've previously received a response from the server including a grpc-accept-encoding header\n         *    In that case we only want to use the encoding chosen by the client if the server supports it\n         */\n        if (\n          !serverSupportedEncodings ||\n          serverSupportedEncodings.includes(clientSelectedEncoding)\n        ) {\n          this.currentCompressionAlgorithm = clientSelectedEncoding;\n          this.sendCompression = getCompressionHandler(\n            this.currentCompressionAlgorithm,\n            -1\n          );\n        }\n      } else {\n        logging.log(\n          LogVerbosity.ERROR,\n          `Invalid value provided for grpc.default_compression_algorithm option: ${compressionAlgorithmKey}`\n        );\n      }\n    }\n  }\n\n  async sendMetadata(metadata: Promise<Metadata>): Promise<Metadata> {\n    const headers: Metadata = await metadata;\n    headers.set('grpc-accept-encoding', 'identity,deflate,gzip');\n    headers.set('accept-encoding', 'identity');\n\n    // No need to send the header if it's \"identity\" -  behavior is identical; save the bandwidth\n    if (this.currentCompressionAlgorithm === 'identity') {\n      headers.remove('grpc-encoding');\n    } else {\n      headers.set('grpc-encoding', this.currentCompressionAlgorithm);\n    }\n\n    return headers;\n  }\n\n  receiveMetadata(metadata: Metadata): Metadata {\n    const receiveEncoding: MetadataValue[] = metadata.get('grpc-encoding');\n    if (receiveEncoding.length > 0) {\n      const encoding: MetadataValue = receiveEncoding[0];\n      if (typeof encoding === 'string') {\n        this.receiveCompression = getCompressionHandler(encoding, this.maxReceiveMessageLength);\n      }\n    }\n    metadata.remove('grpc-encoding');\n\n    /* Check to see if the compression we're using to send messages is supported by the server\n     * If not, reset the sendCompression filter and have it use the default IdentityHandler */\n    const serverSupportedEncodingsHeader = metadata.get(\n      'grpc-accept-encoding'\n    )[0] as string | undefined;\n    if (serverSupportedEncodingsHeader) {\n      this.sharedFilterConfig.serverSupportedEncodingHeader =\n        serverSupportedEncodingsHeader;\n      const serverSupportedEncodings =\n        serverSupportedEncodingsHeader.split(',');\n\n      if (\n        !serverSupportedEncodings.includes(this.currentCompressionAlgorithm)\n      ) {\n        this.sendCompression = new IdentityHandler();\n        this.currentCompressionAlgorithm = 'identity';\n      }\n    }\n    metadata.remove('grpc-accept-encoding');\n    return metadata;\n  }\n\n  async sendMessage(message: Promise<WriteObject>): Promise<WriteObject> {\n    /* This filter is special. The input message is the bare message bytes,\n     * and the output is a framed and possibly compressed message. For this\n     * reason, this filter should be at the bottom of the filter stack */\n    const resolvedMessage: WriteObject = await message;\n    if (this.maxSendMessageLength !== -1 && resolvedMessage.message.length > this.maxSendMessageLength) {\n      throw {\n        code: Status.RESOURCE_EXHAUSTED,\n        details: `Attempted to send message with a size larger than ${this.maxSendMessageLength}`\n      };\n    }\n    let compress: boolean;\n    if (this.sendCompression instanceof IdentityHandler) {\n      compress = false;\n    } else {\n      compress = ((resolvedMessage.flags ?? 0) & WriteFlags.NoCompress) === 0;\n    }\n\n    return {\n      message: await this.sendCompression.writeMessage(\n        resolvedMessage.message,\n        compress\n      ),\n      flags: resolvedMessage.flags,\n    };\n  }\n\n  async receiveMessage(message: Promise<Buffer>) {\n    /* This filter is also special. The input message is framed and possibly\n     * compressed, and the output message is deframed and uncompressed. So\n     * this is another reason that this filter should be at the bottom of the\n     * filter stack. */\n    return this.receiveCompression.readMessage(await message);\n  }\n}\n\nexport class CompressionFilterFactory\n  implements FilterFactory<CompressionFilter>\n{\n  private sharedFilterConfig: SharedCompressionFilterConfig = {};\n  constructor(channel: Channel, private readonly options: ChannelOptions) {}\n  createFilter(): CompressionFilter {\n    return new CompressionFilter(this.options, this.sharedFilterConfig);\n  }\n}\n","/*\n * Copyright 2022 gRPC authors.\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 */\n\nimport { Status } from './constants';\n\nconst INAPPROPRIATE_CONTROL_PLANE_CODES: Status[] = [\n  Status.OK,\n  Status.INVALID_ARGUMENT,\n  Status.NOT_FOUND,\n  Status.ALREADY_EXISTS,\n  Status.FAILED_PRECONDITION,\n  Status.ABORTED,\n  Status.OUT_OF_RANGE,\n  Status.DATA_LOSS,\n];\n\nexport function restrictControlPlaneStatusCode(\n  code: Status,\n  details: string\n): { code: Status; details: string } {\n  if (INAPPROPRIATE_CONTROL_PLANE_CODES.includes(code)) {\n    return {\n      code: Status.INTERNAL,\n      details: `Invalid status from control plane: ${code} ${Status[code]} ${details}`,\n    };\n  } else {\n    return { code, details };\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nexport type Deadline = Date | number;\n\nexport function minDeadline(...deadlineList: Deadline[]): Deadline {\n  let minValue = Infinity;\n  for (const deadline of deadlineList) {\n    const deadlineMsecs =\n      deadline instanceof Date ? deadline.getTime() : deadline;\n    if (deadlineMsecs < minValue) {\n      minValue = deadlineMsecs;\n    }\n  }\n  return minValue;\n}\n\nconst units: Array<[string, number]> = [\n  ['m', 1],\n  ['S', 1000],\n  ['M', 60 * 1000],\n  ['H', 60 * 60 * 1000],\n];\n\nexport function getDeadlineTimeoutString(deadline: Deadline) {\n  const now = new Date().getTime();\n  if (deadline instanceof Date) {\n    deadline = deadline.getTime();\n  }\n  const timeoutMs = Math.max(deadline - now, 0);\n  for (const [unit, factor] of units) {\n    const amount = timeoutMs / factor;\n    if (amount < 1e8) {\n      return String(Math.ceil(amount)) + unit;\n    }\n  }\n  throw new Error('Deadline is too far in the future');\n}\n\n/**\n * See https://nodejs.org/api/timers.html#settimeoutcallback-delay-args\n * In particular, \"When delay is larger than 2147483647 or less than 1, the\n * delay will be set to 1. Non-integer delays are truncated to an integer.\"\n * This number of milliseconds is almost 25 days.\n */\nconst MAX_TIMEOUT_TIME = 2147483647;\n\n/**\n * Get the timeout value that should be passed to setTimeout now for the timer\n * to end at the deadline. For any deadline before now, the timer should end\n * immediately, represented by a value of 0. For any deadline more than\n * MAX_TIMEOUT_TIME milliseconds in the future, a timer cannot be set that will\n * end at that time, so it is treated as infinitely far in the future.\n * @param deadline\n * @returns\n */\nexport function getRelativeTimeout(deadline: Deadline) {\n  const deadlineMs = deadline instanceof Date ? deadline.getTime() : deadline;\n  const now = new Date().getTime();\n  const timeout = deadlineMs - now;\n  if (timeout < 0) {\n    return 0;\n  } else if (timeout > MAX_TIMEOUT_TIME) {\n    return Infinity;\n  } else {\n    return timeout;\n  }\n}\n\nexport function deadlineToString(deadline: Deadline): string {\n  if (deadline instanceof Date) {\n    return deadline.toISOString();\n  } else {\n    const dateDeadline = new Date(deadline);\n    if (Number.isNaN(dateDeadline.getTime())) {\n      return '' + deadline;\n    } else {\n      return dateDeadline.toISOString();\n    }\n  }\n}\n\n/**\n * Calculate the difference between two dates as a number of seconds and format\n * it as a string.\n * @param startDate\n * @param endDate\n * @returns\n */\nexport function formatDateDifference(startDate: Date, endDate: Date): string {\n  return ((endDate.getTime() - startDate.getTime()) / 1000).toFixed(3) + 's';\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { StatusObject, WriteObject } from './call-interface';\nimport { Filter, FilterFactory } from './filter';\nimport { Metadata } from './metadata';\n\nexport class FilterStack implements Filter {\n  constructor(private readonly filters: Filter[]) {}\n\n  sendMetadata(metadata: Promise<Metadata>): Promise<Metadata> {\n    let result: Promise<Metadata> = metadata;\n\n    for (let i = 0; i < this.filters.length; i++) {\n      result = this.filters[i].sendMetadata(result);\n    }\n\n    return result;\n  }\n\n  receiveMetadata(metadata: Metadata) {\n    let result: Metadata = metadata;\n\n    for (let i = this.filters.length - 1; i >= 0; i--) {\n      result = this.filters[i].receiveMetadata(result);\n    }\n\n    return result;\n  }\n\n  sendMessage(message: Promise<WriteObject>): Promise<WriteObject> {\n    let result: Promise<WriteObject> = message;\n\n    for (let i = 0; i < this.filters.length; i++) {\n      result = this.filters[i].sendMessage(result);\n    }\n\n    return result;\n  }\n\n  receiveMessage(message: Promise<Buffer>): Promise<Buffer> {\n    let result: Promise<Buffer> = message;\n\n    for (let i = this.filters.length - 1; i >= 0; i--) {\n      result = this.filters[i].receiveMessage(result);\n    }\n\n    return result;\n  }\n\n  receiveTrailers(status: StatusObject): StatusObject {\n    let result: StatusObject = status;\n\n    for (let i = this.filters.length - 1; i >= 0; i--) {\n      result = this.filters[i].receiveTrailers(result);\n    }\n\n    return result;\n  }\n\n  push(filters: Filter[]) {\n    this.filters.unshift(...filters);\n  }\n\n  getFilters(): Filter[] {\n    return this.filters;\n  }\n}\n\nexport class FilterStackFactory implements FilterFactory<FilterStack> {\n  constructor(private readonly factories: Array<FilterFactory<Filter>>) {}\n\n  push(filterFactories: FilterFactory<Filter>[]) {\n    this.factories.unshift(...filterFactories);\n  }\n\n  clone(): FilterStackFactory {\n    return new FilterStackFactory([...this.factories]);\n  }\n\n  createFilter(): FilterStack {\n    return new FilterStack(\n      this.factories.map(factory => factory.createFilter())\n    );\n  }\n}\n","/*\n * Copyright 2025 gRPC authors.\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 */\n\nimport { AuthContext } from \"./auth-context\";\nimport { CallCredentials } from \"./call-credentials\";\nimport { Call, CallStreamOptions, InterceptingListener, MessageContext, StatusObject } from \"./call-interface\";\nimport { getNextCallNumber } from \"./call-number\";\nimport { Channel } from \"./channel\";\nimport { ChannelOptions } from \"./channel-options\";\nimport { ChannelRef, ChannelzCallTracker, ChannelzChildrenTracker, ChannelzTrace, registerChannelzChannel, unregisterChannelzRef } from \"./channelz\";\nimport { CompressionFilterFactory } from \"./compression-filter\";\nimport { ConnectivityState } from \"./connectivity-state\";\nimport { Propagate, Status } from \"./constants\";\nimport { restrictControlPlaneStatusCode } from \"./control-plane-status\";\nimport { Deadline, getRelativeTimeout } from \"./deadline\";\nimport { FilterStack, FilterStackFactory } from \"./filter-stack\";\nimport { Metadata } from \"./metadata\";\nimport { getDefaultAuthority } from \"./resolver\";\nimport { Subchannel } from \"./subchannel\";\nimport { SubchannelCall } from \"./subchannel-call\";\nimport { GrpcUri, splitHostPort, uriToString } from \"./uri-parser\";\n\nclass SubchannelCallWrapper implements Call {\n  private childCall: SubchannelCall | null = null;\n  private pendingMessage: { context: MessageContext; message: Buffer } | null =\n    null;\n  private readPending = false;\n  private halfClosePending = false;\n  private pendingStatus: StatusObject | null = null;\n  private serviceUrl: string;\n  private filterStack: FilterStack;\n  private readFilterPending = false;\n  private writeFilterPending = false;\n  constructor(private subchannel: Subchannel, private method: string, filterStackFactory: FilterStackFactory, private options: CallStreamOptions, private callNumber: number) {\n    const splitPath: string[] = this.method.split('/');\n    let serviceName = '';\n    /* The standard path format is \"/{serviceName}/{methodName}\", so if we split\n      * by '/', the first item should be empty and the second should be the\n      * service name */\n    if (splitPath.length >= 2) {\n      serviceName = splitPath[1];\n    }\n    const hostname = splitHostPort(this.options.host)?.host ?? 'localhost';\n    /* Currently, call credentials are only allowed on HTTPS connections, so we\n      * can assume that the scheme is \"https\" */\n    this.serviceUrl = `https://${hostname}/${serviceName}`;\n    const timeout = getRelativeTimeout(options.deadline);\n    if (timeout !== Infinity) {\n      if (timeout <= 0) {\n        this.cancelWithStatus(Status.DEADLINE_EXCEEDED, 'Deadline exceeded');\n      } else {\n        setTimeout(() => {\n          this.cancelWithStatus(Status.DEADLINE_EXCEEDED, 'Deadline exceeded');\n        }, timeout);\n      }\n    }\n    this.filterStack = filterStackFactory.createFilter();\n  }\n\n  cancelWithStatus(status: Status, details: string): void {\n    if (this.childCall) {\n      this.childCall.cancelWithStatus(status, details);\n    } else {\n      this.pendingStatus = {\n        code: status,\n        details: details,\n        metadata: new Metadata()\n      };\n    }\n\n  }\n  getPeer(): string {\n    return this.childCall?.getPeer() ?? this.subchannel.getAddress();\n  }\n  async start(metadata: Metadata, listener: InterceptingListener): Promise<void> {\n    if (this.pendingStatus) {\n      listener.onReceiveStatus(this.pendingStatus);\n      return;\n    }\n    if (this.subchannel.getConnectivityState() !== ConnectivityState.READY) {\n      listener.onReceiveStatus({\n        code: Status.UNAVAILABLE,\n        details: 'Subchannel not ready',\n        metadata: new Metadata()\n      });\n      return;\n    }\n    const filteredMetadata = await this.filterStack.sendMetadata(Promise.resolve(metadata));\n    let credsMetadata: Metadata;\n    try {\n      credsMetadata = await this.subchannel.getCallCredentials()\n        .generateMetadata({method_name: this.method, service_url: this.serviceUrl});\n    } catch (e) {\n      const error = e as (Error & { code: number });\n      const { code, details } = restrictControlPlaneStatusCode(\n        typeof error.code === 'number' ? error.code : Status.UNKNOWN,\n        `Getting metadata from plugin failed with error: ${error.message}`\n      );\n      listener.onReceiveStatus(\n        {\n          code: code,\n          details: details,\n          metadata: new Metadata(),\n        }\n      );\n      return;\n    }\n    credsMetadata.merge(filteredMetadata);\n    const childListener: InterceptingListener = {\n      onReceiveMetadata: async metadata => {\n        listener.onReceiveMetadata(await this.filterStack.receiveMetadata(metadata));\n      },\n      onReceiveMessage: async message => {\n        this.readFilterPending = true;\n        const filteredMessage = await this.filterStack.receiveMessage(message);\n        this.readFilterPending = false;\n        listener.onReceiveMessage(filteredMessage);\n        if (this.pendingStatus) {\n          listener.onReceiveStatus(this.pendingStatus);\n        }\n      },\n      onReceiveStatus: async status => {\n        const filteredStatus = await this.filterStack.receiveTrailers(status);\n        if (this.readFilterPending) {\n          this.pendingStatus = filteredStatus;\n        } else {\n          listener.onReceiveStatus(filteredStatus);\n        }\n      }\n    }\n    this.childCall = this.subchannel.createCall(credsMetadata, this.options.host, this.method, childListener);\n    if (this.readPending) {\n      this.childCall.startRead();\n    }\n    if (this.pendingMessage) {\n      this.childCall.sendMessageWithContext(this.pendingMessage.context, this.pendingMessage.message);\n    }\n    if (this.halfClosePending && !this.writeFilterPending) {\n      this.childCall.halfClose();\n    }\n  }\n  async sendMessageWithContext(context: MessageContext, message: Buffer): Promise<void> {\n    this.writeFilterPending = true;\n    const filteredMessage = await this.filterStack.sendMessage(Promise.resolve({message: message, flags: context.flags}));\n    this.writeFilterPending = false;\n    if (this.childCall) {\n      this.childCall.sendMessageWithContext(context, filteredMessage.message);\n      if (this.halfClosePending) {\n        this.childCall.halfClose();\n      }\n    } else {\n      this.pendingMessage = { context, message: filteredMessage.message };\n    }\n  }\n  startRead(): void {\n    if (this.childCall) {\n      this.childCall.startRead();\n    } else {\n      this.readPending = true;\n    }\n  }\n  halfClose(): void {\n    if (this.childCall && !this.writeFilterPending) {\n      this.childCall.halfClose();\n    } else {\n      this.halfClosePending = true;\n    }\n  }\n  getCallNumber(): number {\n    return this.callNumber;\n  }\n  setCredentials(credentials: CallCredentials): void {\n    throw new Error(\"Method not implemented.\");\n  }\n  getAuthContext(): AuthContext | null {\n    if (this.childCall) {\n      return this.childCall.getAuthContext();\n    } else {\n      return null;\n    }\n  }\n}\n\nexport class SingleSubchannelChannel implements Channel {\n  private channelzRef: ChannelRef;\n  private channelzEnabled = false;\n  private channelzTrace = new ChannelzTrace();\n  private callTracker = new ChannelzCallTracker();\n  private childrenTracker = new ChannelzChildrenTracker();\n  private filterStackFactory: FilterStackFactory;\n  constructor(private subchannel: Subchannel, private target: GrpcUri, options: ChannelOptions) {\n    this.channelzEnabled = options['grpc.enable_channelz'] !== 0;\n    this.channelzRef = registerChannelzChannel(uriToString(target),  () => ({\n      target: `${uriToString(target)} (${subchannel.getAddress()})`,\n      state: this.subchannel.getConnectivityState(),\n      trace: this.channelzTrace,\n      callTracker: this.callTracker,\n      children: this.childrenTracker.getChildLists()\n    }), this.channelzEnabled);\n    if (this.channelzEnabled) {\n      this.childrenTracker.refChild(subchannel.getChannelzRef());\n    }\n    this.filterStackFactory = new FilterStackFactory([new CompressionFilterFactory(this, options)]);\n  }\n\n  close(): void {\n    if (this.channelzEnabled) {\n      this.childrenTracker.unrefChild(this.subchannel.getChannelzRef());\n    }\n    unregisterChannelzRef(this.channelzRef);\n  }\n\n  getTarget(): string {\n    return uriToString(this.target);\n  }\n  getConnectivityState(tryToConnect: boolean): ConnectivityState {\n    throw new Error(\"Method not implemented.\");\n  }\n  watchConnectivityState(currentState: ConnectivityState, deadline: Date | number, callback: (error?: Error) => void): void {\n    throw new Error(\"Method not implemented.\");\n  }\n  getChannelzRef(): ChannelRef {\n    return this.channelzRef;\n  }\n  createCall(method: string, deadline: Deadline): Call {\n    const callOptions: CallStreamOptions = {\n      deadline: deadline,\n      host: getDefaultAuthority(this.target),\n      flags: Propagate.DEFAULTS,\n      parentCall: null\n    };\n    return new SubchannelCallWrapper(this.subchannel, method, this.filterStackFactory, callOptions, getNextCallNumber());\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { ChannelCredentials, SecureConnector } from './channel-credentials';\nimport { Metadata } from './metadata';\nimport { ChannelOptions } from './channel-options';\nimport { ConnectivityState } from './connectivity-state';\nimport { BackoffTimeout, BackoffOptions } from './backoff-timeout';\nimport * as logging from './logging';\nimport { LogVerbosity, Status } from './constants';\nimport { GrpcUri, uriToString } from './uri-parser';\nimport {\n  SubchannelAddress,\n  subchannelAddressToString,\n} from './subchannel-address';\nimport {\n  SubchannelRef,\n  ChannelzTrace,\n  ChannelzChildrenTracker,\n  ChannelzChildrenTrackerStub,\n  SubchannelInfo,\n  registerChannelzSubchannel,\n  ChannelzCallTracker,\n  ChannelzCallTrackerStub,\n  unregisterChannelzRef,\n  ChannelzTraceStub,\n} from './channelz';\nimport {\n  ConnectivityStateListener,\n  DataWatcher,\n  SubchannelInterface,\n} from './subchannel-interface';\nimport { SubchannelCallInterceptingListener } from './subchannel-call';\nimport { SubchannelCall } from './subchannel-call';\nimport { CallEventTracker, SubchannelConnector, Transport } from './transport';\nimport { CallCredentials } from './call-credentials';\nimport { SingleSubchannelChannel } from './single-subchannel-channel';\nimport { Channel } from './channel';\n\nconst TRACER_NAME = 'subchannel';\n\n/* setInterval and setTimeout only accept signed 32 bit integers. JS doesn't\n * have a constant for the max signed 32 bit integer, so this is a simple way\n * to calculate it */\nconst KEEPALIVE_MAX_TIME_MS = ~(1 << 31);\n\nexport interface DataProducer {\n  addDataWatcher(dataWatcher: DataWatcher): void;\n  removeDataWatcher(dataWatcher: DataWatcher): void;\n}\n\nexport class Subchannel implements SubchannelInterface {\n  /**\n   * The subchannel's current connectivity state. Invariant: `session` === `null`\n   * if and only if `connectivityState` is IDLE or TRANSIENT_FAILURE.\n   */\n  private connectivityState: ConnectivityState = ConnectivityState.IDLE;\n  /**\n   * The underlying http2 session used to make requests.\n   */\n  private transport: Transport | null = null;\n  /**\n   * Indicates that the subchannel should transition from TRANSIENT_FAILURE to\n   * CONNECTING instead of IDLE when the backoff timeout ends.\n   */\n  private continueConnecting = false;\n  /**\n   * A list of listener functions that will be called whenever the connectivity\n   * state changes. Will be modified by `addConnectivityStateListener` and\n   * `removeConnectivityStateListener`\n   */\n  private stateListeners: Set<ConnectivityStateListener> = new Set();\n\n  private backoffTimeout: BackoffTimeout;\n\n  private keepaliveTime: number;\n  /**\n   * Tracks channels and subchannel pools with references to this subchannel\n   */\n  private refcount = 0;\n\n  /**\n   * A string representation of the subchannel address, for logging/tracing\n   */\n  private subchannelAddressString: string;\n\n  // Channelz info\n  private readonly channelzEnabled: boolean = true;\n  private channelzRef: SubchannelRef;\n\n  private channelzTrace: ChannelzTrace | ChannelzTraceStub;\n  private callTracker: ChannelzCallTracker | ChannelzCallTrackerStub;\n  private childrenTracker:\n    | ChannelzChildrenTracker\n    | ChannelzChildrenTrackerStub;\n\n  // Channelz socket info\n  private streamTracker: ChannelzCallTracker | ChannelzCallTrackerStub;\n\n  private secureConnector: SecureConnector;\n\n  private dataProducers: Map<string, DataProducer> = new Map();\n\n  private subchannelChannel: Channel | null = null;\n\n  /**\n   * A class representing a connection to a single backend.\n   * @param channelTarget The target string for the channel as a whole\n   * @param subchannelAddress The address for the backend that this subchannel\n   *     will connect to\n   * @param options The channel options, plus any specific subchannel options\n   *     for this subchannel\n   * @param credentials The channel credentials used to establish this\n   *     connection\n   */\n  constructor(\n    private channelTarget: GrpcUri,\n    private subchannelAddress: SubchannelAddress,\n    private options: ChannelOptions,\n    credentials: ChannelCredentials,\n    private connector: SubchannelConnector\n  ) {\n    const backoffOptions: BackoffOptions = {\n      initialDelay: options['grpc.initial_reconnect_backoff_ms'],\n      maxDelay: options['grpc.max_reconnect_backoff_ms'],\n    };\n    this.backoffTimeout = new BackoffTimeout(() => {\n      this.handleBackoffTimer();\n    }, backoffOptions);\n    this.backoffTimeout.unref();\n    this.subchannelAddressString = subchannelAddressToString(subchannelAddress);\n\n    this.keepaliveTime = options['grpc.keepalive_time_ms'] ?? -1;\n\n    if (options['grpc.enable_channelz'] === 0) {\n      this.channelzEnabled = false;\n      this.channelzTrace = new ChannelzTraceStub();\n      this.callTracker = new ChannelzCallTrackerStub();\n      this.childrenTracker = new ChannelzChildrenTrackerStub();\n      this.streamTracker = new ChannelzCallTrackerStub();\n    } else {\n      this.channelzTrace = new ChannelzTrace();\n      this.callTracker = new ChannelzCallTracker();\n      this.childrenTracker = new ChannelzChildrenTracker();\n      this.streamTracker = new ChannelzCallTracker();\n    }\n\n    this.channelzRef = registerChannelzSubchannel(\n      this.subchannelAddressString,\n      () => this.getChannelzInfo(),\n      this.channelzEnabled\n    );\n\n    this.channelzTrace.addTrace('CT_INFO', 'Subchannel created');\n    this.trace(\n      'Subchannel constructed with options ' +\n        JSON.stringify(options, undefined, 2)\n    );\n    this.secureConnector = credentials._createSecureConnector(channelTarget, options);\n  }\n\n  private getChannelzInfo(): SubchannelInfo {\n    return {\n      state: this.connectivityState,\n      trace: this.channelzTrace,\n      callTracker: this.callTracker,\n      children: this.childrenTracker.getChildLists(),\n      target: this.subchannelAddressString,\n    };\n  }\n\n  private trace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      TRACER_NAME,\n      '(' +\n        this.channelzRef.id +\n        ') ' +\n        this.subchannelAddressString +\n        ' ' +\n        text\n    );\n  }\n\n  private refTrace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      'subchannel_refcount',\n      '(' +\n        this.channelzRef.id +\n        ') ' +\n        this.subchannelAddressString +\n        ' ' +\n        text\n    );\n  }\n\n  private handleBackoffTimer() {\n    if (this.continueConnecting) {\n      this.transitionToState(\n        [ConnectivityState.TRANSIENT_FAILURE],\n        ConnectivityState.CONNECTING\n      );\n    } else {\n      this.transitionToState(\n        [ConnectivityState.TRANSIENT_FAILURE],\n        ConnectivityState.IDLE\n      );\n    }\n  }\n\n  /**\n   * Start a backoff timer with the current nextBackoff timeout\n   */\n  private startBackoff() {\n    this.backoffTimeout.runOnce();\n  }\n\n  private stopBackoff() {\n    this.backoffTimeout.stop();\n    this.backoffTimeout.reset();\n  }\n\n  private startConnectingInternal() {\n    let options = this.options;\n    if (options['grpc.keepalive_time_ms']) {\n      const adjustedKeepaliveTime = Math.min(\n        this.keepaliveTime,\n        KEEPALIVE_MAX_TIME_MS\n      );\n      options = { ...options, 'grpc.keepalive_time_ms': adjustedKeepaliveTime };\n    }\n    this.connector\n      .connect(this.subchannelAddress, this.secureConnector, options)\n      .then(\n        transport => {\n          if (\n            this.transitionToState(\n              [ConnectivityState.CONNECTING],\n              ConnectivityState.READY\n            )\n          ) {\n            this.transport = transport;\n            if (this.channelzEnabled) {\n              this.childrenTracker.refChild(transport.getChannelzRef());\n            }\n            transport.addDisconnectListener(tooManyPings => {\n              this.transitionToState(\n                [ConnectivityState.READY],\n                ConnectivityState.IDLE\n              );\n              if (tooManyPings && this.keepaliveTime > 0) {\n                this.keepaliveTime *= 2;\n                logging.log(\n                  LogVerbosity.ERROR,\n                  `Connection to ${uriToString(this.channelTarget)} at ${\n                    this.subchannelAddressString\n                  } rejected by server because of excess pings. Increasing ping interval to ${\n                    this.keepaliveTime\n                  } ms`\n                );\n              }\n            });\n          } else {\n            /* If we can't transition from CONNECTING to READY here, we will\n             * not be using this transport, so release its resources. */\n            transport.shutdown();\n          }\n        },\n        error => {\n          this.transitionToState(\n            [ConnectivityState.CONNECTING],\n            ConnectivityState.TRANSIENT_FAILURE,\n            `${error}`\n          );\n        }\n      );\n  }\n\n  /**\n   * Initiate a state transition from any element of oldStates to the new\n   * state. If the current connectivityState is not in oldStates, do nothing.\n   * @param oldStates The set of states to transition from\n   * @param newState The state to transition to\n   * @returns True if the state changed, false otherwise\n   */\n  private transitionToState(\n    oldStates: ConnectivityState[],\n    newState: ConnectivityState,\n    errorMessage?: string\n  ): boolean {\n    if (oldStates.indexOf(this.connectivityState) === -1) {\n      return false;\n    }\n    if (errorMessage) {\n      this.trace(\n        ConnectivityState[this.connectivityState] +\n          ' -> ' +\n          ConnectivityState[newState] +\n          ' with error \"' + errorMessage + '\"'\n      );\n\n    } else {\n      this.trace(\n        ConnectivityState[this.connectivityState] +\n          ' -> ' +\n          ConnectivityState[newState]\n      );\n    }\n    if (this.channelzEnabled) {\n      this.channelzTrace.addTrace(\n        'CT_INFO',\n        'Connectivity state change to ' + ConnectivityState[newState]\n      );\n    }\n    const previousState = this.connectivityState;\n    this.connectivityState = newState;\n    switch (newState) {\n      case ConnectivityState.READY:\n        this.stopBackoff();\n        break;\n      case ConnectivityState.CONNECTING:\n        this.startBackoff();\n        this.startConnectingInternal();\n        this.continueConnecting = false;\n        break;\n      case ConnectivityState.TRANSIENT_FAILURE:\n        if (this.channelzEnabled && this.transport) {\n          this.childrenTracker.unrefChild(this.transport.getChannelzRef());\n        }\n        this.transport?.shutdown();\n        this.transport = null;\n        /* If the backoff timer has already ended by the time we get to the\n         * TRANSIENT_FAILURE state, we want to immediately transition out of\n         * TRANSIENT_FAILURE as though the backoff timer is ending right now */\n        if (!this.backoffTimeout.isRunning()) {\n          process.nextTick(() => {\n            this.handleBackoffTimer();\n          });\n        }\n        break;\n      case ConnectivityState.IDLE:\n        if (this.channelzEnabled && this.transport) {\n          this.childrenTracker.unrefChild(this.transport.getChannelzRef());\n        }\n        this.transport?.shutdown();\n        this.transport = null;\n        break;\n      default:\n        throw new Error(`Invalid state: unknown ConnectivityState ${newState}`);\n    }\n    for (const listener of this.stateListeners) {\n      listener(this, previousState, newState, this.keepaliveTime, errorMessage);\n    }\n    return true;\n  }\n\n  ref() {\n    this.refTrace('refcount ' + this.refcount + ' -> ' + (this.refcount + 1));\n    this.refcount += 1;\n  }\n\n  unref() {\n    this.refTrace('refcount ' + this.refcount + ' -> ' + (this.refcount - 1));\n    this.refcount -= 1;\n    if (this.refcount === 0) {\n      this.channelzTrace.addTrace('CT_INFO', 'Shutting down');\n      unregisterChannelzRef(this.channelzRef);\n      this.secureConnector.destroy();\n      process.nextTick(() => {\n        this.transitionToState(\n          [ConnectivityState.CONNECTING, ConnectivityState.READY],\n          ConnectivityState.IDLE\n        );\n      });\n    }\n  }\n\n  unrefIfOneRef(): boolean {\n    if (this.refcount === 1) {\n      this.unref();\n      return true;\n    }\n    return false;\n  }\n\n  createCall(\n    metadata: Metadata,\n    host: string,\n    method: string,\n    listener: SubchannelCallInterceptingListener\n  ): SubchannelCall {\n    if (!this.transport) {\n      throw new Error('Cannot create call, subchannel not READY');\n    }\n    let statsTracker: Partial<CallEventTracker>;\n    if (this.channelzEnabled) {\n      this.callTracker.addCallStarted();\n      this.streamTracker.addCallStarted();\n      statsTracker = {\n        onCallEnd: status => {\n          if (status.code === Status.OK) {\n            this.callTracker.addCallSucceeded();\n          } else {\n            this.callTracker.addCallFailed();\n          }\n        },\n      };\n    } else {\n      statsTracker = {};\n    }\n    return this.transport.createCall(\n      metadata,\n      host,\n      method,\n      listener,\n      statsTracker\n    );\n  }\n\n  /**\n   * If the subchannel is currently IDLE, start connecting and switch to the\n   * CONNECTING state. If the subchannel is current in TRANSIENT_FAILURE,\n   * the next time it would transition to IDLE, start connecting again instead.\n   * Otherwise, do nothing.\n   */\n  startConnecting() {\n    process.nextTick(() => {\n      /* First, try to transition from IDLE to connecting. If that doesn't happen\n       * because the state is not currently IDLE, check if it is\n       * TRANSIENT_FAILURE, and if so indicate that it should go back to\n       * connecting after the backoff timer ends. Otherwise do nothing */\n      if (\n        !this.transitionToState(\n          [ConnectivityState.IDLE],\n          ConnectivityState.CONNECTING\n        )\n      ) {\n        if (this.connectivityState === ConnectivityState.TRANSIENT_FAILURE) {\n          this.continueConnecting = true;\n        }\n      }\n    });\n  }\n\n  /**\n   * Get the subchannel's current connectivity state.\n   */\n  getConnectivityState() {\n    return this.connectivityState;\n  }\n\n  /**\n   * Add a listener function to be called whenever the subchannel's\n   * connectivity state changes.\n   * @param listener\n   */\n  addConnectivityStateListener(listener: ConnectivityStateListener) {\n    this.stateListeners.add(listener);\n  }\n\n  /**\n   * Remove a listener previously added with `addConnectivityStateListener`\n   * @param listener A reference to a function previously passed to\n   *     `addConnectivityStateListener`\n   */\n  removeConnectivityStateListener(listener: ConnectivityStateListener) {\n    this.stateListeners.delete(listener);\n  }\n\n  /**\n   * Reset the backoff timeout, and immediately start connecting if in backoff.\n   */\n  resetBackoff() {\n    process.nextTick(() => {\n      this.backoffTimeout.reset();\n      this.transitionToState(\n        [ConnectivityState.TRANSIENT_FAILURE],\n        ConnectivityState.CONNECTING\n      );\n    });\n  }\n\n  getAddress(): string {\n    return this.subchannelAddressString;\n  }\n\n  getChannelzRef(): SubchannelRef {\n    return this.channelzRef;\n  }\n\n  isHealthy(): boolean {\n    return true;\n  }\n\n  addHealthStateWatcher(listener: (healthy: boolean) => void): void {\n    // Do nothing with the listener\n  }\n\n  removeHealthStateWatcher(listener: (healthy: boolean) => void): void {\n    // Do nothing with the listener\n  }\n\n  getRealSubchannel(): this {\n    return this;\n  }\n\n  realSubchannelEquals(other: SubchannelInterface): boolean {\n    return other.getRealSubchannel() === this;\n  }\n\n  throttleKeepalive(newKeepaliveTime: number) {\n    if (newKeepaliveTime > this.keepaliveTime) {\n      this.keepaliveTime = newKeepaliveTime;\n    }\n  }\n  getCallCredentials(): CallCredentials {\n    return this.secureConnector.getCallCredentials();\n  }\n\n  getChannel(): Channel {\n    if (!this.subchannelChannel) {\n      this.subchannelChannel = new SingleSubchannelChannel(this, this.channelTarget, this.options);\n    }\n    return this.subchannelChannel;\n  }\n\n  addDataWatcher(dataWatcher: DataWatcher): void {\n    throw new Error('Not implemented');\n  }\n\n  getOrCreateDataProducer(name: string, createDataProducer: (subchannel: Subchannel) => DataProducer): DataProducer {\n    const existingProducer = this.dataProducers.get(name);\n    if (existingProducer){\n      return existingProducer;\n    }\n    const newProducer = createDataProducer(this);\n    this.dataProducers.set(name, newProducer);\n    return newProducer;\n  }\n\n  removeDataProducer(name: string) {\n    this.dataProducers.delete(name);\n  }\n}\n","/*\n * Copyright 2024 gRPC authors.\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 */\n\nexport const GRPC_NODE_USE_ALTERNATIVE_RESOLVER =\n  (process.env.GRPC_NODE_USE_ALTERNATIVE_RESOLVER ?? 'false') === 'true';\n","/*\n * Copyright 2019 gRPC authors.\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\nimport {\n  Resolver,\n  ResolverListener,\n  registerResolver,\n  registerDefaultScheme,\n} from './resolver';\nimport { promises as dns } from 'dns';\nimport { extractAndSelectServiceConfig, ServiceConfig } from './service-config';\nimport { Status } from './constants';\nimport { StatusObject, StatusOr, statusOrFromError, statusOrFromValue } from './call-interface';\nimport { Metadata } from './metadata';\nimport * as logging from './logging';\nimport { LogVerbosity } from './constants';\nimport { Endpoint, TcpSubchannelAddress } from './subchannel-address';\nimport { GrpcUri, uriToString, splitHostPort } from './uri-parser';\nimport { isIPv6, isIPv4 } from 'net';\nimport { ChannelOptions } from './channel-options';\nimport { BackoffOptions, BackoffTimeout } from './backoff-timeout';\nimport { GRPC_NODE_USE_ALTERNATIVE_RESOLVER } from './environment';\n\nconst TRACER_NAME = 'dns_resolver';\n\nfunction trace(text: string): void {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\n/**\n * The default TCP port to connect to if not explicitly specified in the target.\n */\nexport const DEFAULT_PORT = 443;\n\nconst DEFAULT_MIN_TIME_BETWEEN_RESOLUTIONS_MS = 30_000;\n\n/**\n * Resolver implementation that handles DNS names and IP addresses.\n */\nclass DnsResolver implements Resolver {\n  private readonly ipResult: Endpoint[] | null;\n  private readonly dnsHostname: string | null;\n  private readonly port: number | null;\n  /**\n   * Minimum time between resolutions, measured as the time between starting\n   * successive resolution requests. Only applies to successful resolutions.\n   * Failures are handled by the backoff timer.\n   */\n  private readonly minTimeBetweenResolutionsMs: number;\n  private pendingLookupPromise: Promise<TcpSubchannelAddress[]> | null = null;\n  private pendingTxtPromise: Promise<string[][]> | null = null;\n  private latestLookupResult: StatusOr<Endpoint[]> | null = null;\n  private latestServiceConfigResult: StatusOr<ServiceConfig> | null = null;\n  private percentage: number;\n  private defaultResolutionError: StatusObject;\n  private backoff: BackoffTimeout;\n  private continueResolving = false;\n  private nextResolutionTimer: NodeJS.Timeout;\n  private isNextResolutionTimerRunning = false;\n  private isServiceConfigEnabled = true;\n  private returnedIpResult = false;\n  private alternativeResolver = new dns.Resolver();\n\n  constructor(\n    private target: GrpcUri,\n    private listener: ResolverListener,\n    channelOptions: ChannelOptions\n  ) {\n    trace('Resolver constructed for target ' + uriToString(target));\n    if (target.authority) {\n      this.alternativeResolver.setServers([target.authority]);\n    }\n    const hostPort = splitHostPort(target.path);\n    if (hostPort === null) {\n      this.ipResult = null;\n      this.dnsHostname = null;\n      this.port = null;\n    } else {\n      if (isIPv4(hostPort.host) || isIPv6(hostPort.host)) {\n        this.ipResult = [\n          {\n            addresses: [\n              {\n                host: hostPort.host,\n                port: hostPort.port ?? DEFAULT_PORT,\n              },\n            ],\n          },\n        ];\n        this.dnsHostname = null;\n        this.port = null;\n      } else {\n        this.ipResult = null;\n        this.dnsHostname = hostPort.host;\n        this.port = hostPort.port ?? DEFAULT_PORT;\n      }\n    }\n    this.percentage = Math.random() * 100;\n\n    if (channelOptions['grpc.service_config_disable_resolution'] === 1) {\n      this.isServiceConfigEnabled = false;\n    }\n\n    this.defaultResolutionError = {\n      code: Status.UNAVAILABLE,\n      details: `Name resolution failed for target ${uriToString(this.target)}`,\n      metadata: new Metadata(),\n    };\n\n    const backoffOptions: BackoffOptions = {\n      initialDelay: channelOptions['grpc.initial_reconnect_backoff_ms'],\n      maxDelay: channelOptions['grpc.max_reconnect_backoff_ms'],\n    };\n\n    this.backoff = new BackoffTimeout(() => {\n      if (this.continueResolving) {\n        this.startResolutionWithBackoff();\n      }\n    }, backoffOptions);\n    this.backoff.unref();\n\n    this.minTimeBetweenResolutionsMs =\n      channelOptions['grpc.dns_min_time_between_resolutions_ms'] ??\n      DEFAULT_MIN_TIME_BETWEEN_RESOLUTIONS_MS;\n    this.nextResolutionTimer = setTimeout(() => {}, 0);\n    clearTimeout(this.nextResolutionTimer);\n  }\n\n  /**\n   * If the target is an IP address, just provide that address as a result.\n   * Otherwise, initiate A, AAAA, and TXT lookups\n   */\n  private startResolution() {\n    if (this.ipResult !== null) {\n      if (!this.returnedIpResult) {\n        trace('Returning IP address for target ' + uriToString(this.target));\n        setImmediate(() => {\n          this.listener(\n            statusOrFromValue(this.ipResult!),\n            {},\n            null,\n            ''\n          )\n        });\n        this.returnedIpResult = true;\n      }\n      this.backoff.stop();\n      this.backoff.reset();\n      this.stopNextResolutionTimer();\n      return;\n    }\n    if (this.dnsHostname === null) {\n      trace('Failed to parse DNS address ' + uriToString(this.target));\n      setImmediate(() => {\n        this.listener(\n          statusOrFromError({\n            code: Status.UNAVAILABLE,\n            details: `Failed to parse DNS address ${uriToString(this.target)}`\n          }),\n          {},\n          null,\n          ''\n        );\n      });\n      this.stopNextResolutionTimer();\n    } else {\n      if (this.pendingLookupPromise !== null) {\n        return;\n      }\n      trace('Looking up DNS hostname ' + this.dnsHostname);\n      /* We clear out latestLookupResult here to ensure that it contains the\n       * latest result since the last time we started resolving. That way, the\n       * TXT resolution handler can use it, but only if it finishes second. We\n       * don't clear out any previous service config results because it's\n       * better to use a service config that's slightly out of date than to\n       * revert to an effectively blank one. */\n      this.latestLookupResult = null;\n      const hostname: string = this.dnsHostname;\n      this.pendingLookupPromise = this.lookup(hostname);\n      this.pendingLookupPromise.then(\n        addressList => {\n          if (this.pendingLookupPromise === null) {\n            return;\n          }\n          this.pendingLookupPromise = null;\n          this.latestLookupResult = statusOrFromValue(addressList.map(address => ({\n            addresses: [address],\n          })));\n          const allAddressesString: string =\n            '[' +\n            addressList.map(addr => addr.host + ':' + addr.port).join(',') +\n            ']';\n          trace(\n            'Resolved addresses for target ' +\n              uriToString(this.target) +\n              ': ' +\n              allAddressesString\n          );\n          /* If the TXT lookup has not yet finished, both of the last two\n           * arguments will be null, which is the equivalent of getting an\n           * empty TXT response. When the TXT lookup does finish, its handler\n           * can update the service config by using the same address list */\n          const healthStatus = this.listener(\n            this.latestLookupResult,\n            {},\n            this.latestServiceConfigResult,\n            ''\n          );\n          this.handleHealthStatus(healthStatus);\n        },\n        err => {\n          if (this.pendingLookupPromise === null) {\n            return;\n          }\n          trace(\n            'Resolution error for target ' +\n              uriToString(this.target) +\n              ': ' +\n              (err as Error).message\n          );\n          this.pendingLookupPromise = null;\n          this.stopNextResolutionTimer();\n          this.listener(\n            statusOrFromError(this.defaultResolutionError),\n            {},\n            this.latestServiceConfigResult,\n            ''\n          )\n        }\n      );\n      /* If there already is a still-pending TXT resolution, we can just use\n       * that result when it comes in */\n      if (this.isServiceConfigEnabled && this.pendingTxtPromise === null) {\n        /* We handle the TXT query promise differently than the others because\n         * the name resolution attempt as a whole is a success even if the TXT\n         * lookup fails */\n        this.pendingTxtPromise = this.resolveTxt(hostname);\n        this.pendingTxtPromise.then(\n          txtRecord => {\n            if (this.pendingTxtPromise === null) {\n              return;\n            }\n            this.pendingTxtPromise = null;\n            let serviceConfig: ServiceConfig | null;\n            try {\n              serviceConfig = extractAndSelectServiceConfig(\n                txtRecord,\n                this.percentage\n              );\n              if (serviceConfig) {\n                this.latestServiceConfigResult = statusOrFromValue(serviceConfig);\n              } else {\n                this.latestServiceConfigResult = null;\n              }\n            } catch (err) {\n              this.latestServiceConfigResult = statusOrFromError({\n                code: Status.UNAVAILABLE,\n                details: `Parsing service config failed with error ${\n                  (err as Error).message\n                }`\n              });\n            }\n            if (this.latestLookupResult !== null) {\n              /* We rely here on the assumption that calling this function with\n               * identical parameters will be essentialy idempotent, and calling\n               * it with the same address list and a different service config\n               * should result in a fast and seamless switchover. */\n              this.listener(\n                this.latestLookupResult,\n                {},\n                this.latestServiceConfigResult,\n                ''\n              );\n            }\n          },\n          err => {\n            /* If TXT lookup fails we should do nothing, which means that we\n             * continue to use the result of the most recent successful lookup,\n             * or the default null config object if there has never been a\n             * successful lookup. We do not set the latestServiceConfigError\n             * here because that is specifically used for response validation\n             * errors. We still need to handle this error so that it does not\n             * bubble up as an unhandled promise rejection. */\n          }\n        );\n      }\n    }\n  }\n\n  /**\n   * The ResolverListener returns a boolean indicating whether the LB policy\n   * accepted the resolution result. A false result on an otherwise successful\n   * resolution should be treated as a resolution failure.\n   * @param healthStatus\n   */\n  private handleHealthStatus(healthStatus: boolean) {\n    if (healthStatus) {\n      this.backoff.stop();\n      this.backoff.reset();\n    } else {\n      this.continueResolving = true;\n    }\n  }\n\n  private async lookup(hostname: string): Promise<TcpSubchannelAddress[]> {\n    if (GRPC_NODE_USE_ALTERNATIVE_RESOLVER) {\n      trace('Using alternative DNS resolver.');\n\n      const records = await Promise.allSettled([\n        this.alternativeResolver.resolve4(hostname),\n        this.alternativeResolver.resolve6(hostname),\n      ]);\n\n      if (records.every(result => result.status === 'rejected')) {\n        throw new Error((records[0] as PromiseRejectedResult).reason);\n      }\n\n      return records\n        .reduce<string[]>((acc, result) => {\n          return result.status === 'fulfilled'\n            ? [...acc, ...result.value]\n            : acc;\n        }, [])\n        .map(addr => ({\n          host: addr,\n          port: +this.port!,\n        }));\n    }\n\n    /* We lookup both address families here and then split them up later\n     * because when looking up a single family, dns.lookup outputs an error\n     * if the name exists but there are no records for that family, and that\n     * error is indistinguishable from other kinds of errors */\n    const addressList = await dns.lookup(hostname, { all: true });\n    return addressList.map(addr => ({ host: addr.address, port: +this.port! }));\n  }\n\n  private async resolveTxt(hostname: string): Promise<string[][]> {\n    if (GRPC_NODE_USE_ALTERNATIVE_RESOLVER) {\n      trace('Using alternative DNS resolver.');\n      return this.alternativeResolver.resolveTxt(hostname);\n    }\n\n    return dns.resolveTxt(hostname);\n  }\n\n  private startNextResolutionTimer() {\n    clearTimeout(this.nextResolutionTimer);\n    this.nextResolutionTimer = setTimeout(() => {\n      this.stopNextResolutionTimer();\n      if (this.continueResolving) {\n        this.startResolutionWithBackoff();\n      }\n    }, this.minTimeBetweenResolutionsMs);\n    this.nextResolutionTimer.unref?.();\n    this.isNextResolutionTimerRunning = true;\n  }\n\n  private stopNextResolutionTimer() {\n    clearTimeout(this.nextResolutionTimer);\n    this.isNextResolutionTimerRunning = false;\n  }\n\n  private startResolutionWithBackoff() {\n    if (this.pendingLookupPromise === null) {\n      this.continueResolving = false;\n      this.backoff.runOnce();\n      this.startNextResolutionTimer();\n      this.startResolution();\n    }\n  }\n\n  updateResolution() {\n    /* If there is a pending lookup, just let it finish. Otherwise, if the\n     * nextResolutionTimer or backoff timer is running, set the\n     * continueResolving flag to resolve when whichever of those timers\n     * fires. Otherwise, start resolving immediately. */\n    if (this.pendingLookupPromise === null) {\n      if (this.isNextResolutionTimerRunning || this.backoff.isRunning()) {\n        if (this.isNextResolutionTimerRunning) {\n          trace(\n            'resolution update delayed by \"min time between resolutions\" rate limit'\n          );\n        } else {\n          trace(\n            'resolution update delayed by backoff timer until ' +\n              this.backoff.getEndTime().toISOString()\n          );\n        }\n        this.continueResolving = true;\n      } else {\n        this.startResolutionWithBackoff();\n      }\n    }\n  }\n\n  /**\n   * Reset the resolver to the same state it had when it was created. In-flight\n   * DNS requests cannot be cancelled, but they are discarded and their results\n   * will be ignored.\n   */\n  destroy() {\n    this.continueResolving = false;\n    this.backoff.reset();\n    this.backoff.stop();\n    this.stopNextResolutionTimer();\n    this.pendingLookupPromise = null;\n    this.pendingTxtPromise = null;\n    this.latestLookupResult = null;\n    this.latestServiceConfigResult = null;\n    this.returnedIpResult = false;\n  }\n\n  /**\n   * Get the default authority for the given target. For IP targets, that is\n   * the IP address. For DNS targets, it is the hostname.\n   * @param target\n   */\n  static getDefaultAuthority(target: GrpcUri): string {\n    return target.path;\n  }\n}\n\n/**\n * Set up the DNS resolver class by registering it as the handler for the\n * \"dns:\" prefix and as the default resolver.\n */\nexport function setup(): void {\n  registerResolver('dns', DnsResolver);\n  registerDefaultScheme('dns');\n}\n\nexport interface DnsUrl {\n  host: string;\n  port?: string;\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { log } from './logging';\nimport { LogVerbosity } from './constants';\nimport { isIPv4, Socket } from 'net';\nimport * as http from 'http';\nimport * as logging from './logging';\nimport {\n  SubchannelAddress,\n  isTcpSubchannelAddress,\n  subchannelAddressToString,\n} from './subchannel-address';\nimport { ChannelOptions } from './channel-options';\nimport { GrpcUri, parseUri, splitHostPort, uriToString } from './uri-parser';\nimport { URL } from 'url';\nimport { DEFAULT_PORT } from './resolver-dns';\n\nconst TRACER_NAME = 'proxy';\n\nfunction trace(text: string): void {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\ninterface ProxyInfo {\n  address?: string;\n  creds?: string;\n}\n\nfunction getProxyInfo(): ProxyInfo {\n  let proxyEnv = '';\n  let envVar = '';\n  /* Prefer using 'grpc_proxy'. Fallback on 'http_proxy' if it is not set.\n   * Also prefer using 'https_proxy' with fallback on 'http_proxy'. The\n   * fallback behavior can be removed if there's a demand for it.\n   */\n  if (process.env.grpc_proxy) {\n    envVar = 'grpc_proxy';\n    proxyEnv = process.env.grpc_proxy;\n  } else if (process.env.https_proxy) {\n    envVar = 'https_proxy';\n    proxyEnv = process.env.https_proxy;\n  } else if (process.env.http_proxy) {\n    envVar = 'http_proxy';\n    proxyEnv = process.env.http_proxy;\n  } else {\n    return {};\n  }\n  let proxyUrl: URL;\n  try {\n    proxyUrl = new URL(proxyEnv);\n  } catch (e) {\n    log(LogVerbosity.ERROR, `cannot parse value of \"${envVar}\" env var`);\n    return {};\n  }\n  if (proxyUrl.protocol !== 'http:') {\n    log(\n      LogVerbosity.ERROR,\n      `\"${proxyUrl.protocol}\" scheme not supported in proxy URI`\n    );\n    return {};\n  }\n  let userCred: string | null = null;\n  if (proxyUrl.username) {\n    if (proxyUrl.password) {\n      log(LogVerbosity.INFO, 'userinfo found in proxy URI');\n      userCred = decodeURIComponent(`${proxyUrl.username}:${proxyUrl.password}`);\n    } else {\n      userCred = proxyUrl.username;\n    }\n  }\n  const hostname = proxyUrl.hostname;\n  let port = proxyUrl.port;\n  /* The proxy URL uses the scheme \"http:\", which has a default port number of\n   * 80. We need to set that explicitly here if it is omitted because otherwise\n   * it will use gRPC's default port 443. */\n  if (port === '') {\n    port = '80';\n  }\n  const result: ProxyInfo = {\n    address: `${hostname}:${port}`,\n  };\n  if (userCred) {\n    result.creds = userCred;\n  }\n  trace(\n    'Proxy server ' + result.address + ' set by environment variable ' + envVar\n  );\n  return result;\n}\n\nfunction getNoProxyHostList(): string[] {\n  /* Prefer using 'no_grpc_proxy'. Fallback on 'no_proxy' if it is not set. */\n  let noProxyStr: string | undefined = process.env.no_grpc_proxy;\n  let envVar = 'no_grpc_proxy';\n  if (!noProxyStr) {\n    noProxyStr = process.env.no_proxy;\n    envVar = 'no_proxy';\n  }\n  if (noProxyStr) {\n    trace('No proxy server list set by environment variable ' + envVar);\n    return noProxyStr.split(',');\n  } else {\n    return [];\n  }\n}\n\ninterface CIDRNotation {\n  ip: number;\n  prefixLength: number;\n}\n\n/*\n * The groups correspond to CIDR parts as follows:\n * 1. ip\n * 2. prefixLength\n */\n\nexport function parseCIDR(cidrString: string): CIDRNotation | null {\n  const splitRange = cidrString.split('/');  \n  if (splitRange.length !== 2) {  \n    return null;  \n  }  \n  const prefixLength = parseInt(splitRange[1], 10);  \n  if (!isIPv4(splitRange[0]) || Number.isNaN(prefixLength) || prefixLength < 0 || prefixLength > 32) {  \n    return null;  \n  }  \n  return {  \n    ip: ipToInt(splitRange[0]),  \n    prefixLength: prefixLength  \n  };\n}\n\nfunction ipToInt(ip: string) {\n  return ip.split(\".\").reduce((acc, octet) => (acc << 8) + parseInt(octet, 10), 0);\n}\n\nfunction isIpInCIDR(cidr: CIDRNotation, serverHost: string) {\n  const ip = cidr.ip;\n  const mask = -1 << (32 - cidr.prefixLength);\n  const hostIP = ipToInt(serverHost);\n\n  return (hostIP & mask) === (ip & mask);\n}\n\nfunction hostMatchesNoProxyList(serverHost: string): boolean {\n  for (const host of getNoProxyHostList()) {\n    const parsedCIDR = parseCIDR(host);\n    // host is a CIDR and serverHost is an IP address\n    if (isIPv4(serverHost) && parsedCIDR && isIpInCIDR(parsedCIDR, serverHost)) {\n      return true;\n    } else if (serverHost.endsWith(host)) {\n      // host is a single IP or a domain name suffix\n      return true;\n    }\n  }\n  return false;\n}\n\nexport interface ProxyMapResult {\n  target: GrpcUri;\n  extraOptions: ChannelOptions;\n}\n\nexport function mapProxyName(\n  target: GrpcUri,\n  options: ChannelOptions\n): ProxyMapResult {\n  const noProxyResult: ProxyMapResult = {\n    target: target,\n    extraOptions: {},\n  };\n  if ((options['grpc.enable_http_proxy'] ?? 1) === 0) {\n    return noProxyResult;\n  }\n  if (target.scheme === 'unix') {\n    return noProxyResult;\n  }\n  const proxyInfo = getProxyInfo();\n  if (!proxyInfo.address) {\n    return noProxyResult;\n  }\n  const hostPort = splitHostPort(target.path);\n  if (!hostPort) {\n    return noProxyResult;\n  }\n  const serverHost = hostPort.host;\n  if (hostMatchesNoProxyList(serverHost)) {\n    trace('Not using proxy for target in no_proxy list: ' + uriToString(target));\n    return noProxyResult;\n  }\n  const extraOptions: ChannelOptions = {\n    'grpc.http_connect_target': uriToString(target),\n  };\n  if (proxyInfo.creds) {\n    extraOptions['grpc.http_connect_creds'] = proxyInfo.creds;\n  }\n  return {\n    target: {\n      scheme: 'dns',\n      path: proxyInfo.address,\n    },\n    extraOptions: extraOptions,\n  };\n}\n\nexport function getProxiedConnection(\n  address: SubchannelAddress,\n  channelOptions: ChannelOptions\n): Promise<Socket | null> {\n  if (!('grpc.http_connect_target' in channelOptions)) {\n    return Promise.resolve(null);\n  }\n  const realTarget = channelOptions['grpc.http_connect_target'] as string;\n  const parsedTarget = parseUri(realTarget);\n  if (parsedTarget === null) {\n    return Promise.resolve(null);\n  }\n  const splitHostPost = splitHostPort(parsedTarget.path);\n  if (splitHostPost === null) {\n    return Promise.resolve(null);\n  }\n  const hostPort = `${splitHostPost.host}:${\n    splitHostPost.port ?? DEFAULT_PORT\n  }`;\n  const options: http.RequestOptions = {\n    method: 'CONNECT',\n    path: hostPort,\n  };\n  const headers: http.OutgoingHttpHeaders = {\n    Host: hostPort,\n  };\n  // Connect to the subchannel address as a proxy\n  if (isTcpSubchannelAddress(address)) {\n    options.host = address.host;\n    options.port = address.port;\n  } else {\n    options.socketPath = address.path;\n  }\n  if ('grpc.http_connect_creds' in channelOptions) {\n    headers['Proxy-Authorization'] =\n      'Basic ' +\n      Buffer.from(channelOptions['grpc.http_connect_creds'] as string).toString(\n        'base64'\n      );\n  }\n  options.headers = headers;\n  const proxyAddressString = subchannelAddressToString(address);\n  trace('Using proxy ' + proxyAddressString + ' to connect to ' + options.path);\n  return new Promise<Socket | null>((resolve, reject) => {\n    const request = http.request(options);\n    request.once('connect', (res, socket, head) => {\n      request.removeAllListeners();\n      socket.removeAllListeners();\n      if (res.statusCode === 200) {\n        trace(\n          'Successfully connected to ' +\n            options.path +\n            ' through proxy ' +\n            proxyAddressString\n        );\n        // The HTTP client may have already read a few bytes of the proxied\n        // connection. If that's the case, put them back into the socket.\n        // See https://github.com/grpc/grpc-node/issues/2744.\n        if (head.length > 0) {\n          socket.unshift(head);\n        }\n        trace(\n          'Successfully established a plaintext connection to ' +\n            options.path +\n            ' through proxy ' +\n            proxyAddressString\n        );\n        resolve(socket);\n      } else {\n        log(\n          LogVerbosity.ERROR,\n          'Failed to connect to ' +\n            options.path +\n            ' through proxy ' +\n            proxyAddressString +\n            ' with status ' +\n            res.statusCode\n        );\n        reject();\n      }\n    });\n    request.once('error', err => {\n      request.removeAllListeners();\n      log(\n        LogVerbosity.ERROR,\n        'Failed to connect to proxy ' +\n          proxyAddressString +\n          ' with error ' +\n          err.message\n      );\n      reject();\n    });\n    request.end();\n  });\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nenum ReadState {\n  NO_DATA,\n  READING_SIZE,\n  READING_MESSAGE,\n}\n\nexport class StreamDecoder {\n  private readState: ReadState = ReadState.NO_DATA;\n  private readCompressFlag: Buffer = Buffer.alloc(1);\n  private readPartialSize: Buffer = Buffer.alloc(4);\n  private readSizeRemaining = 4;\n  private readMessageSize = 0;\n  private readPartialMessage: Buffer[] = [];\n  private readMessageRemaining = 0;\n\n  constructor(private maxReadMessageLength: number) {}\n\n  write(data: Buffer): Buffer[] {\n    let readHead = 0;\n    let toRead: number;\n    const result: Buffer[] = [];\n\n    while (readHead < data.length) {\n      switch (this.readState) {\n        case ReadState.NO_DATA:\n          this.readCompressFlag = data.slice(readHead, readHead + 1);\n          readHead += 1;\n          this.readState = ReadState.READING_SIZE;\n          this.readPartialSize.fill(0);\n          this.readSizeRemaining = 4;\n          this.readMessageSize = 0;\n          this.readMessageRemaining = 0;\n          this.readPartialMessage = [];\n          break;\n        case ReadState.READING_SIZE:\n          toRead = Math.min(data.length - readHead, this.readSizeRemaining);\n          data.copy(\n            this.readPartialSize,\n            4 - this.readSizeRemaining,\n            readHead,\n            readHead + toRead\n          );\n          this.readSizeRemaining -= toRead;\n          readHead += toRead;\n          // readSizeRemaining >=0 here\n          if (this.readSizeRemaining === 0) {\n            this.readMessageSize = this.readPartialSize.readUInt32BE(0);\n            if (this.maxReadMessageLength !== -1 && this.readMessageSize > this.maxReadMessageLength) {\n              throw new Error(`Received message larger than max (${this.readMessageSize} vs ${this.maxReadMessageLength})`);\n            }\n            this.readMessageRemaining = this.readMessageSize;\n            if (this.readMessageRemaining > 0) {\n              this.readState = ReadState.READING_MESSAGE;\n            } else {\n              const message = Buffer.concat(\n                [this.readCompressFlag, this.readPartialSize],\n                5\n              );\n\n              this.readState = ReadState.NO_DATA;\n              result.push(message);\n            }\n          }\n          break;\n        case ReadState.READING_MESSAGE:\n          toRead = Math.min(data.length - readHead, this.readMessageRemaining);\n          this.readPartialMessage.push(data.slice(readHead, readHead + toRead));\n          this.readMessageRemaining -= toRead;\n          readHead += toRead;\n          // readMessageRemaining >=0 here\n          if (this.readMessageRemaining === 0) {\n            // At this point, we have read a full message\n            const framedMessageBuffers = [\n              this.readCompressFlag,\n              this.readPartialSize,\n            ].concat(this.readPartialMessage);\n            const framedMessage = Buffer.concat(\n              framedMessageBuffers,\n              this.readMessageSize + 5\n            );\n\n            this.readState = ReadState.NO_DATA;\n            result.push(framedMessage);\n          }\n          break;\n        default:\n          throw new Error('Unexpected read state');\n      }\n    }\n\n    return result;\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport * as http2 from 'http2';\nimport * as os from 'os';\n\nimport { DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH, Status } from './constants';\nimport { Metadata } from './metadata';\nimport { StreamDecoder } from './stream-decoder';\nimport * as logging from './logging';\nimport { LogVerbosity } from './constants';\nimport {\n  InterceptingListener,\n  MessageContext,\n  StatusObject,\n  WriteCallback,\n} from './call-interface';\nimport { CallEventTracker, Transport } from './transport';\nimport { AuthContext } from './auth-context';\n\nconst TRACER_NAME = 'subchannel_call';\n\n/**\n * https://nodejs.org/api/errors.html#errors_class_systemerror\n */\ninterface SystemError extends Error {\n  address?: string;\n  code: string;\n  dest?: string;\n  errno: number;\n  info?: object;\n  message: string;\n  path?: string;\n  port?: number;\n  syscall: string;\n}\n\n/**\n * Should do approximately the same thing as util.getSystemErrorName but the\n * TypeScript types don't have that function for some reason so I just made my\n * own.\n * @param errno\n */\nfunction getSystemErrorName(errno: number): string {\n  for (const [name, num] of Object.entries(os.constants.errno)) {\n    if (num === errno) {\n      return name;\n    }\n  }\n  return 'Unknown system error ' + errno;\n}\n\nexport interface SubchannelCall {\n  cancelWithStatus(status: Status, details: string): void;\n  getPeer(): string;\n  sendMessageWithContext(context: MessageContext, message: Buffer): void;\n  startRead(): void;\n  halfClose(): void;\n  getCallNumber(): number;\n  getDeadlineInfo(): string[];\n  getAuthContext(): AuthContext;\n}\n\nexport interface StatusObjectWithRstCode extends StatusObject {\n  rstCode?: number;\n}\n\nexport interface SubchannelCallInterceptingListener\n  extends InterceptingListener {\n  onReceiveStatus(status: StatusObjectWithRstCode): void;\n}\n\nfunction mapHttpStatusCode(code: number): StatusObject {\n  const details = `Received HTTP status code ${code}`;\n  let mappedStatusCode: number;\n  switch (code) {\n    // TODO(murgatroid99): handle 100 and 101\n    case 400:\n      mappedStatusCode = Status.INTERNAL;\n      break;\n    case 401:\n      mappedStatusCode = Status.UNAUTHENTICATED;\n      break;\n    case 403:\n      mappedStatusCode = Status.PERMISSION_DENIED;\n      break;\n    case 404:\n      mappedStatusCode = Status.UNIMPLEMENTED;\n      break;\n    case 429:\n    case 502:\n    case 503:\n    case 504:\n      mappedStatusCode = Status.UNAVAILABLE;\n      break;\n    default:\n      mappedStatusCode = Status.UNKNOWN;\n  }\n  return {\n    code: mappedStatusCode,\n    details: details,\n    metadata: new Metadata()\n  };\n}\n\nexport class Http2SubchannelCall implements SubchannelCall {\n  private decoder: StreamDecoder;\n\n  private isReadFilterPending = false;\n  private isPushPending = false;\n  private canPush = false;\n  /**\n   * Indicates that an 'end' event has come from the http2 stream, so there\n   * will be no more data events.\n   */\n  private readsClosed = false;\n\n  private statusOutput = false;\n\n  private unpushedReadMessages: Buffer[] = [];\n\n  private httpStatusCode: number | undefined;\n\n  // This is populated (non-null) if and only if the call has ended\n  private finalStatus: StatusObject | null = null;\n\n  private internalError: SystemError | null = null;\n\n  private serverEndedCall = false;\n\n  private connectionDropped = false;\n\n  constructor(\n    private readonly http2Stream: http2.ClientHttp2Stream,\n    private readonly callEventTracker: CallEventTracker,\n    private readonly listener: SubchannelCallInterceptingListener,\n    private readonly transport: Transport,\n    private readonly callId: number\n  ) {\n    const maxReceiveMessageLength = transport.getOptions()['grpc.max_receive_message_length'] ?? DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH;\n    this.decoder = new StreamDecoder(maxReceiveMessageLength);\n    http2Stream.on('response', (headers, flags) => {\n      let headersString = '';\n      for (const header of Object.keys(headers)) {\n        headersString += '\\t\\t' + header + ': ' + headers[header] + '\\n';\n      }\n      this.trace('Received server headers:\\n' + headersString);\n      this.httpStatusCode = headers[':status'];\n\n      if (flags & http2.constants.NGHTTP2_FLAG_END_STREAM) {\n        this.handleTrailers(headers);\n      } else {\n        let metadata: Metadata;\n        try {\n          metadata = Metadata.fromHttp2Headers(headers);\n        } catch (error) {\n          this.endCall({\n            code: Status.UNKNOWN,\n            details: (error as Error).message,\n            metadata: new Metadata(),\n          });\n          return;\n        }\n        this.listener.onReceiveMetadata(metadata);\n      }\n    });\n    http2Stream.on('trailers', (headers: http2.IncomingHttpHeaders) => {\n      this.handleTrailers(headers);\n    });\n    http2Stream.on('data', (data: Buffer) => {\n      /* If the status has already been output, allow the http2 stream to\n       * drain without processing the data. */\n      if (this.statusOutput) {\n        return;\n      }\n      this.trace('receive HTTP/2 data frame of length ' + data.length);\n      let messages: Buffer[];\n      try {\n        messages = this.decoder.write(data);\n      } catch (e) {\n        /* Some servers send HTML error pages along with HTTP status codes.\n         * When the client attempts to parse this as a length-delimited\n         * message, the parsed message size is greater than the default limit,\n         * resulting in a message decoding error. In that situation, the HTTP\n         * error code information is more useful to the user than the\n         * RESOURCE_EXHAUSTED error is, so we report that instead. Normally,\n         * we delay processing the HTTP status until after the stream ends, to\n         * prioritize reporting the gRPC status from trailers if it is present,\n         * but when there is a message parsing error we end the stream early\n         * before processing trailers. */\n        if (this.httpStatusCode !== undefined && this.httpStatusCode !== 200) {\n          const mappedStatus = mapHttpStatusCode(this.httpStatusCode);\n          this.cancelWithStatus(mappedStatus.code, mappedStatus.details);\n        } else {\n          this.cancelWithStatus(Status.RESOURCE_EXHAUSTED, (e as Error).message);\n        }\n        return;\n      }\n\n      for (const message of messages) {\n        this.trace('parsed message of length ' + message.length);\n        this.callEventTracker!.addMessageReceived();\n        this.tryPush(message);\n      }\n    });\n    http2Stream.on('end', () => {\n      this.readsClosed = true;\n      this.maybeOutputStatus();\n    });\n    http2Stream.on('close', () => {\n      this.serverEndedCall = true;\n      /* Use process.next tick to ensure that this code happens after any\n       * \"error\" event that may be emitted at about the same time, so that\n       * we can bubble up the error message from that event. */\n      process.nextTick(() => {\n        this.trace('HTTP/2 stream closed with code ' + http2Stream.rstCode);\n        /* If we have a final status with an OK status code, that means that\n         * we have received all of the messages and we have processed the\n         * trailers and the call completed successfully, so it doesn't matter\n         * how the stream ends after that */\n        if (this.finalStatus?.code === Status.OK) {\n          return;\n        }\n        let code: Status;\n        let details = '';\n        switch (http2Stream.rstCode) {\n          case http2.constants.NGHTTP2_NO_ERROR:\n            /* If we get a NO_ERROR code and we already have a status, the\n             * stream completed properly and we just haven't fully processed\n             * it yet */\n            if (this.finalStatus !== null) {\n              return;\n            }\n            if (this.httpStatusCode && this.httpStatusCode !== 200) {\n              const mappedStatus = mapHttpStatusCode(this.httpStatusCode);\n              code = mappedStatus.code;\n              details = mappedStatus.details;\n            } else {\n              code = Status.INTERNAL;\n              details = `Received RST_STREAM with code ${http2Stream.rstCode} (Call ended without gRPC status)`;\n            }\n            break;\n          case http2.constants.NGHTTP2_REFUSED_STREAM:\n            code = Status.UNAVAILABLE;\n            details = 'Stream refused by server';\n            break;\n          case http2.constants.NGHTTP2_CANCEL:\n            /* Bug reports indicate that Node synthesizes a NGHTTP2_CANCEL\n             * code from connection drops. We want to prioritize reporting\n             * an unavailable status when that happens. */\n            if (this.connectionDropped) {\n              code = Status.UNAVAILABLE;\n              details = 'Connection dropped';\n            } else {\n              code = Status.CANCELLED;\n              details = 'Call cancelled';\n            }\n            break;\n          case http2.constants.NGHTTP2_ENHANCE_YOUR_CALM:\n            code = Status.RESOURCE_EXHAUSTED;\n            details = 'Bandwidth exhausted or memory limit exceeded';\n            break;\n          case http2.constants.NGHTTP2_INADEQUATE_SECURITY:\n            code = Status.PERMISSION_DENIED;\n            details = 'Protocol not secure enough';\n            break;\n          case http2.constants.NGHTTP2_INTERNAL_ERROR:\n            code = Status.INTERNAL;\n            if (this.internalError === null) {\n              /* This error code was previously handled in the default case, and\n               * there are several instances of it online, so I wanted to\n               * preserve the original error message so that people find existing\n               * information in searches, but also include the more recognizable\n               * \"Internal server error\" message. */\n              details = `Received RST_STREAM with code ${http2Stream.rstCode} (Internal server error)`;\n            } else {\n              if (\n                this.internalError.code === 'ECONNRESET' ||\n                this.internalError.code === 'ETIMEDOUT'\n              ) {\n                code = Status.UNAVAILABLE;\n                details = this.internalError.message;\n              } else {\n                /* The \"Received RST_STREAM with code ...\" error is preserved\n                 * here for continuity with errors reported online, but the\n                 * error message at the end will probably be more relevant in\n                 * most cases. */\n                details = `Received RST_STREAM with code ${http2Stream.rstCode} triggered by internal client error: ${this.internalError.message}`;\n              }\n            }\n            break;\n          default:\n            code = Status.INTERNAL;\n            details = `Received RST_STREAM with code ${http2Stream.rstCode}`;\n        }\n        // This is a no-op if trailers were received at all.\n        // This is OK, because status codes emitted here correspond to more\n        // catastrophic issues that prevent us from receiving trailers in the\n        // first place.\n        this.endCall({\n          code,\n          details,\n          metadata: new Metadata(),\n          rstCode: http2Stream.rstCode,\n        });\n      });\n    });\n    http2Stream.on('error', (err: SystemError) => {\n      /* We need an error handler here to stop \"Uncaught Error\" exceptions\n       * from bubbling up. However, errors here should all correspond to\n       * \"close\" events, where we will handle the error more granularly */\n      /* Specifically looking for stream errors that were *not* constructed\n       * from a RST_STREAM response here:\n       * https://github.com/nodejs/node/blob/8b8620d580314050175983402dfddf2674e8e22a/lib/internal/http2/core.js#L2267\n       */\n      if (err.code !== 'ERR_HTTP2_STREAM_ERROR') {\n        this.trace(\n          'Node error event: message=' +\n            err.message +\n            ' code=' +\n            err.code +\n            ' errno=' +\n            getSystemErrorName(err.errno) +\n            ' syscall=' +\n            err.syscall\n        );\n        this.internalError = err;\n      }\n      this.callEventTracker.onStreamEnd(false);\n    });\n  }\n  getDeadlineInfo(): string[] {\n    return [`remote_addr=${this.getPeer()}`];\n  }\n\n  public onDisconnect() {\n    this.connectionDropped = true;\n    /* Give the call an event loop cycle to finish naturally before reporting\n     * the disconnection as an error. */\n    setImmediate(() => {\n      this.endCall({\n        code: Status.UNAVAILABLE,\n        details: 'Connection dropped',\n        metadata: new Metadata(),\n      });\n    });\n  }\n\n  private outputStatus() {\n    /* Precondition: this.finalStatus !== null */\n    if (!this.statusOutput) {\n      this.statusOutput = true;\n      this.trace(\n        'ended with status: code=' +\n          this.finalStatus!.code +\n          ' details=\"' +\n          this.finalStatus!.details +\n          '\"'\n      );\n      this.callEventTracker.onCallEnd(this.finalStatus!);\n      /* We delay the actual action of bubbling up the status to insulate the\n       * cleanup code in this class from any errors that may be thrown in the\n       * upper layers as a result of bubbling up the status. In particular,\n       * if the status is not OK, the \"error\" event may be emitted\n       * synchronously at the top level, which will result in a thrown error if\n       * the user does not handle that event. */\n      process.nextTick(() => {\n        this.listener.onReceiveStatus(this.finalStatus!);\n      });\n      /* Leave the http2 stream in flowing state to drain incoming messages, to\n       * ensure that the stream closure completes. The call stream already does\n       * not push more messages after the status is output, so the messages go\n       * nowhere either way. */\n      this.http2Stream.resume();\n    }\n  }\n\n  private trace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      TRACER_NAME,\n      '[' + this.callId + '] ' + text\n    );\n  }\n\n  /**\n   * On first call, emits a 'status' event with the given StatusObject.\n   * Subsequent calls are no-ops.\n   * @param status The status of the call.\n   */\n  private endCall(status: StatusObjectWithRstCode): void {\n    /* If the status is OK and a new status comes in (e.g. from a\n     * deserialization failure), that new status takes priority */\n    if (this.finalStatus === null || this.finalStatus.code === Status.OK) {\n      this.finalStatus = status;\n      this.maybeOutputStatus();\n    }\n    this.destroyHttp2Stream();\n  }\n\n  private maybeOutputStatus() {\n    if (this.finalStatus !== null) {\n      /* The combination check of readsClosed and that the two message buffer\n       * arrays are empty checks that there all incoming data has been fully\n       * processed */\n      if (\n        this.finalStatus.code !== Status.OK ||\n        (this.readsClosed &&\n          this.unpushedReadMessages.length === 0 &&\n          !this.isReadFilterPending &&\n          !this.isPushPending)\n      ) {\n        this.outputStatus();\n      }\n    }\n  }\n\n  private push(message: Buffer): void {\n    this.trace(\n      'pushing to reader message of length ' +\n        (message instanceof Buffer ? message.length : null)\n    );\n    this.canPush = false;\n    this.isPushPending = true;\n    process.nextTick(() => {\n      this.isPushPending = false;\n      /* If we have already output the status any later messages should be\n       * ignored, and can cause out-of-order operation errors higher up in the\n       * stack. Checking as late as possible here to avoid any race conditions.\n       */\n      if (this.statusOutput) {\n        return;\n      }\n      this.listener.onReceiveMessage(message);\n      this.maybeOutputStatus();\n    });\n  }\n\n  private tryPush(messageBytes: Buffer): void {\n    if (this.canPush) {\n      this.http2Stream!.pause();\n      this.push(messageBytes);\n    } else {\n      this.trace(\n        'unpushedReadMessages.push message of length ' + messageBytes.length\n      );\n      this.unpushedReadMessages.push(messageBytes);\n    }\n  }\n\n  private handleTrailers(headers: http2.IncomingHttpHeaders) {\n    this.serverEndedCall = true;\n    this.callEventTracker.onStreamEnd(true);\n    let headersString = '';\n    for (const header of Object.keys(headers)) {\n      headersString += '\\t\\t' + header + ': ' + headers[header] + '\\n';\n    }\n    this.trace('Received server trailers:\\n' + headersString);\n    let metadata: Metadata;\n    try {\n      metadata = Metadata.fromHttp2Headers(headers);\n    } catch (e) {\n      metadata = new Metadata();\n    }\n    const metadataMap = metadata.getMap();\n    let status: StatusObject;\n    if (typeof metadataMap['grpc-status'] === 'string') {\n      const receivedStatus: Status = Number(metadataMap['grpc-status']);\n      this.trace('received status code ' + receivedStatus + ' from server');\n      metadata.remove('grpc-status');\n      let details = '';\n      if (typeof metadataMap['grpc-message'] === 'string') {\n        try {\n          details = decodeURI(metadataMap['grpc-message']);\n        } catch (e) {\n          details = metadataMap['grpc-message'];\n        }\n        metadata.remove('grpc-message');\n        this.trace(\n          'received status details string \"' + details + '\" from server'\n        );\n      }\n      status = {\n        code: receivedStatus,\n        details: details,\n        metadata: metadata\n      };\n    } else if (this.httpStatusCode) {\n      status = mapHttpStatusCode(this.httpStatusCode);\n      status.metadata = metadata;\n    } else {\n      status = {\n        code: Status.UNKNOWN,\n        details: 'No status information received',\n        metadata: metadata\n      };\n    }\n    // This is a no-op if the call was already ended when handling headers.\n    this.endCall(status);\n  }\n\n  private destroyHttp2Stream() {\n    // The http2 stream could already have been destroyed if cancelWithStatus\n    // is called in response to an internal http2 error.\n    if (this.http2Stream.destroyed) {\n      return;\n    }\n    /* If the server ended the call, sending an RST_STREAM is redundant, so we\n     * just half close on the client side instead to finish closing the stream.\n     */\n    if (this.serverEndedCall) {\n      this.http2Stream.end();\n    } else {\n      /* If the call has ended with an OK status, communicate that when closing\n       * the stream, partly to avoid a situation in which we detect an error\n       * RST_STREAM as a result after we have the status */\n      let code: number;\n      if (this.finalStatus?.code === Status.OK) {\n        code = http2.constants.NGHTTP2_NO_ERROR;\n      } else {\n        code = http2.constants.NGHTTP2_CANCEL;\n      }\n      this.trace('close http2 stream with code ' + code);\n      this.http2Stream.close(code);\n    }\n  }\n\n  cancelWithStatus(status: Status, details: string): void {\n    this.trace(\n      'cancelWithStatus code: ' + status + ' details: \"' + details + '\"'\n    );\n    this.endCall({ code: status, details, metadata: new Metadata() });\n  }\n\n  getStatus(): StatusObject | null {\n    return this.finalStatus;\n  }\n\n  getPeer(): string {\n    return this.transport.getPeerName();\n  }\n\n  getCallNumber(): number {\n    return this.callId;\n  }\n\n  getAuthContext(): AuthContext {\n    return this.transport.getAuthContext();\n  }\n\n  startRead() {\n    /* If the stream has ended with an error, we should not emit any more\n     * messages and we should communicate that the stream has ended */\n    if (this.finalStatus !== null && this.finalStatus.code !== Status.OK) {\n      this.readsClosed = true;\n      this.maybeOutputStatus();\n      return;\n    }\n    this.canPush = true;\n    if (this.unpushedReadMessages.length > 0) {\n      const nextMessage: Buffer = this.unpushedReadMessages.shift()!;\n      this.push(nextMessage);\n      return;\n    }\n    /* Only resume reading from the http2Stream if we don't have any pending\n     * messages to emit */\n    this.http2Stream.resume();\n  }\n\n  sendMessageWithContext(context: MessageContext, message: Buffer) {\n    this.trace('write() called with message of length ' + message.length);\n    const cb: WriteCallback = (error?: Error | null) => {\n      /* nextTick here ensures that no stream action can be taken in the call\n       * stack of the write callback, in order to hopefully work around\n       * https://github.com/nodejs/node/issues/49147 */\n      process.nextTick(() => {\n        let code: Status = Status.UNAVAILABLE;\n        if (\n          (error as NodeJS.ErrnoException)?.code ===\n          'ERR_STREAM_WRITE_AFTER_END'\n        ) {\n          code = Status.INTERNAL;\n        }\n        if (error) {\n          this.cancelWithStatus(code, `Write error: ${error.message}`);\n        }\n        context.callback?.();\n      });\n    };\n    this.trace('sending data chunk of length ' + message.length);\n    this.callEventTracker.addMessageSent();\n    try {\n      this.http2Stream!.write(message, cb);\n    } catch (error) {\n      this.endCall({\n        code: Status.UNAVAILABLE,\n        details: `Write failed with error ${(error as Error).message}`,\n        metadata: new Metadata(),\n      });\n    }\n  }\n\n  halfClose() {\n    this.trace('end() called');\n    this.trace('calling end() on HTTP/2 stream');\n    this.http2Stream.end();\n  }\n}\n","/*\n * Copyright 2023 gRPC authors.\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 */\n\nimport * as http2 from 'http2';\nimport {\n  CipherNameAndProtocol,\n  TLSSocket,\n} from 'tls';\nimport { PartialStatusObject } from './call-interface';\nimport { SecureConnector, SecureConnectResult } from './channel-credentials';\nimport { ChannelOptions } from './channel-options';\nimport {\n  ChannelzCallTracker,\n  ChannelzCallTrackerStub,\n  registerChannelzSocket,\n  SocketInfo,\n  SocketRef,\n  TlsInfo,\n  unregisterChannelzRef,\n} from './channelz';\nimport { LogVerbosity } from './constants';\nimport { getProxiedConnection } from './http_proxy';\nimport * as logging from './logging';\nimport { getDefaultAuthority } from './resolver';\nimport {\n  stringToSubchannelAddress,\n  SubchannelAddress,\n  subchannelAddressToString,\n} from './subchannel-address';\nimport { GrpcUri, parseUri, uriToString } from './uri-parser';\nimport * as net from 'net';\nimport {\n  Http2SubchannelCall,\n  SubchannelCall,\n  SubchannelCallInterceptingListener,\n} from './subchannel-call';\nimport { Metadata } from './metadata';\nimport { getNextCallNumber } from './call-number';\nimport { Socket } from 'net';\nimport { AuthContext } from './auth-context';\n\nconst TRACER_NAME = 'transport';\nconst FLOW_CONTROL_TRACER_NAME = 'transport_flowctrl';\n\nconst clientVersion = require('../../package.json').version;\n\nconst {\n  HTTP2_HEADER_AUTHORITY,\n  HTTP2_HEADER_CONTENT_TYPE,\n  HTTP2_HEADER_METHOD,\n  HTTP2_HEADER_PATH,\n  HTTP2_HEADER_TE,\n  HTTP2_HEADER_USER_AGENT,\n} = http2.constants;\n\nconst KEEPALIVE_TIMEOUT_MS = 20000;\n\nexport interface CallEventTracker {\n  addMessageSent(): void;\n  addMessageReceived(): void;\n  onCallEnd(status: PartialStatusObject): void;\n  onStreamEnd(success: boolean): void;\n}\n\nexport interface TransportDisconnectListener {\n  (tooManyPings: boolean): void;\n}\n\nexport interface Transport {\n  getChannelzRef(): SocketRef;\n  getPeerName(): string;\n  getOptions(): ChannelOptions;\n  getAuthContext(): AuthContext;\n  createCall(\n    metadata: Metadata,\n    host: string,\n    method: string,\n    listener: SubchannelCallInterceptingListener,\n    subchannelCallStatsTracker: Partial<CallEventTracker>\n  ): SubchannelCall;\n  addDisconnectListener(listener: TransportDisconnectListener): void;\n  shutdown(): void;\n}\n\nconst tooManyPingsData: Buffer = Buffer.from('too_many_pings', 'ascii');\n\nclass Http2Transport implements Transport {\n  /**\n   * The amount of time in between sending pings\n   */\n  private readonly keepaliveTimeMs: number;\n  /**\n   * The amount of time to wait for an acknowledgement after sending a ping\n   */\n  private readonly keepaliveTimeoutMs: number;\n  /**\n   * Indicates whether keepalive pings should be sent without any active calls\n   */\n  private readonly keepaliveWithoutCalls: boolean;\n  /**\n   * Timer reference indicating when to send the next ping or when the most recent ping will be considered lost.\n   */\n  private keepaliveTimer: NodeJS.Timeout | null = null;\n  /**\n   * Indicates that the keepalive timer ran out while there were no active\n   * calls, and a ping should be sent the next time a call starts.\n   */\n  private pendingSendKeepalivePing = false;\n\n  private userAgent: string;\n\n  private activeCalls: Set<Http2SubchannelCall> = new Set();\n\n  private subchannelAddressString: string;\n\n  private disconnectListeners: TransportDisconnectListener[] = [];\n\n  private disconnectHandled = false;\n\n  private authContext: AuthContext;\n\n  // Channelz info\n  private channelzRef: SocketRef;\n  private readonly channelzEnabled: boolean = true;\n  private streamTracker: ChannelzCallTracker | ChannelzCallTrackerStub;\n  private keepalivesSent = 0;\n  private messagesSent = 0;\n  private messagesReceived = 0;\n  private lastMessageSentTimestamp: Date | null = null;\n  private lastMessageReceivedTimestamp: Date | null = null;\n\n  constructor(\n    private session: http2.ClientHttp2Session,\n    subchannelAddress: SubchannelAddress,\n    private options: ChannelOptions,\n    /**\n     * Name of the remote server, if it is not the same as the subchannel\n     * address, i.e. if connecting through an HTTP CONNECT proxy.\n     */\n    private remoteName: string | null\n  ) {\n    /* Populate subchannelAddressString and channelzRef before doing anything\n     * else, because they are used in the trace methods. */\n    this.subchannelAddressString = subchannelAddressToString(subchannelAddress);\n\n    if (options['grpc.enable_channelz'] === 0) {\n      this.channelzEnabled = false;\n      this.streamTracker = new ChannelzCallTrackerStub();\n    } else {\n      this.streamTracker = new ChannelzCallTracker();\n    }\n\n    this.channelzRef = registerChannelzSocket(\n      this.subchannelAddressString,\n      () => this.getChannelzInfo(),\n      this.channelzEnabled\n    );\n\n    // Build user-agent string.\n    this.userAgent = [\n      options['grpc.primary_user_agent'],\n      `grpc-node-js/${clientVersion}`,\n      options['grpc.secondary_user_agent'],\n    ]\n      .filter(e => e)\n      .join(' '); // remove falsey values first\n\n    if ('grpc.keepalive_time_ms' in options) {\n      this.keepaliveTimeMs = options['grpc.keepalive_time_ms']!;\n    } else {\n      this.keepaliveTimeMs = -1;\n    }\n    if ('grpc.keepalive_timeout_ms' in options) {\n      this.keepaliveTimeoutMs = options['grpc.keepalive_timeout_ms']!;\n    } else {\n      this.keepaliveTimeoutMs = KEEPALIVE_TIMEOUT_MS;\n    }\n    if ('grpc.keepalive_permit_without_calls' in options) {\n      this.keepaliveWithoutCalls =\n        options['grpc.keepalive_permit_without_calls'] === 1;\n    } else {\n      this.keepaliveWithoutCalls = false;\n    }\n\n    session.once('close', () => {\n      this.trace('session closed');\n      this.handleDisconnect();\n    });\n\n    session.once(\n      'goaway',\n      (errorCode: number, lastStreamID: number, opaqueData?: Buffer) => {\n        let tooManyPings = false;\n        /* See the last paragraph of\n         * https://github.com/grpc/proposal/blob/master/A8-client-side-keepalive.md#basic-keepalive */\n        if (\n          errorCode === http2.constants.NGHTTP2_ENHANCE_YOUR_CALM &&\n          opaqueData &&\n          opaqueData.equals(tooManyPingsData)\n        ) {\n          tooManyPings = true;\n        }\n        this.trace(\n          'connection closed by GOAWAY with code ' +\n            errorCode +\n            ' and data ' +\n            opaqueData?.toString()\n        );\n        this.reportDisconnectToOwner(tooManyPings);\n      }\n    );\n\n    session.once('error', error => {\n      this.trace('connection closed with error ' + (error as Error).message);\n      this.handleDisconnect();\n    });\n\n    session.socket.once('close', (hadError) => {\n      this.trace('connection closed. hadError=' + hadError);\n      this.handleDisconnect();\n    });\n\n    if (logging.isTracerEnabled(TRACER_NAME)) {\n      session.on('remoteSettings', (settings: http2.Settings) => {\n        this.trace(\n          'new settings received' +\n            (this.session !== session ? ' on the old connection' : '') +\n            ': ' +\n            JSON.stringify(settings)\n        );\n      });\n      session.on('localSettings', (settings: http2.Settings) => {\n        this.trace(\n          'local settings acknowledged by remote' +\n            (this.session !== session ? ' on the old connection' : '') +\n            ': ' +\n            JSON.stringify(settings)\n        );\n      });\n    }\n\n    /* Start the keepalive timer last, because this can trigger trace logs,\n     * which should only happen after everything else is set up. */\n    if (this.keepaliveWithoutCalls) {\n      this.maybeStartKeepalivePingTimer();\n    }\n\n    if (session.socket instanceof TLSSocket) {\n      this.authContext = {\n        transportSecurityType: 'ssl',\n        sslPeerCertificate: session.socket.getPeerCertificate()\n      };\n    } else {\n      this.authContext = {};\n    }\n  }\n\n  private getChannelzInfo(): SocketInfo {\n    const sessionSocket = this.session.socket;\n    const remoteAddress = sessionSocket.remoteAddress\n      ? stringToSubchannelAddress(\n          sessionSocket.remoteAddress,\n          sessionSocket.remotePort\n        )\n      : null;\n    const localAddress = sessionSocket.localAddress\n      ? stringToSubchannelAddress(\n          sessionSocket.localAddress,\n          sessionSocket.localPort\n        )\n      : null;\n    let tlsInfo: TlsInfo | null;\n    if (this.session.encrypted) {\n      const tlsSocket: TLSSocket = sessionSocket as TLSSocket;\n      const cipherInfo: CipherNameAndProtocol & { standardName?: string } =\n        tlsSocket.getCipher();\n      const certificate = tlsSocket.getCertificate();\n      const peerCertificate = tlsSocket.getPeerCertificate();\n      tlsInfo = {\n        cipherSuiteStandardName: cipherInfo.standardName ?? null,\n        cipherSuiteOtherName: cipherInfo.standardName ? null : cipherInfo.name,\n        localCertificate:\n          certificate && 'raw' in certificate ? certificate.raw : null,\n        remoteCertificate:\n          peerCertificate && 'raw' in peerCertificate\n            ? peerCertificate.raw\n            : null,\n      };\n    } else {\n      tlsInfo = null;\n    }\n    const socketInfo: SocketInfo = {\n      remoteAddress: remoteAddress,\n      localAddress: localAddress,\n      security: tlsInfo,\n      remoteName: this.remoteName,\n      streamsStarted: this.streamTracker.callsStarted,\n      streamsSucceeded: this.streamTracker.callsSucceeded,\n      streamsFailed: this.streamTracker.callsFailed,\n      messagesSent: this.messagesSent,\n      messagesReceived: this.messagesReceived,\n      keepAlivesSent: this.keepalivesSent,\n      lastLocalStreamCreatedTimestamp:\n        this.streamTracker.lastCallStartedTimestamp,\n      lastRemoteStreamCreatedTimestamp: null,\n      lastMessageSentTimestamp: this.lastMessageSentTimestamp,\n      lastMessageReceivedTimestamp: this.lastMessageReceivedTimestamp,\n      localFlowControlWindow: this.session.state.localWindowSize ?? null,\n      remoteFlowControlWindow: this.session.state.remoteWindowSize ?? null,\n    };\n    return socketInfo;\n  }\n\n  private trace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      TRACER_NAME,\n      '(' +\n        this.channelzRef.id +\n        ') ' +\n        this.subchannelAddressString +\n        ' ' +\n        text\n    );\n  }\n\n  private keepaliveTrace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      'keepalive',\n      '(' +\n        this.channelzRef.id +\n        ') ' +\n        this.subchannelAddressString +\n        ' ' +\n        text\n    );\n  }\n\n  private flowControlTrace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      FLOW_CONTROL_TRACER_NAME,\n      '(' +\n        this.channelzRef.id +\n        ') ' +\n        this.subchannelAddressString +\n        ' ' +\n        text\n    );\n  }\n\n  private internalsTrace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      'transport_internals',\n      '(' +\n        this.channelzRef.id +\n        ') ' +\n        this.subchannelAddressString +\n        ' ' +\n        text\n    );\n  }\n\n  /**\n   * Indicate to the owner of this object that this transport should no longer\n   * be used. That happens if the connection drops, or if the server sends a\n   * GOAWAY.\n   * @param tooManyPings If true, this was triggered by a GOAWAY with data\n   * indicating that the session was closed becaues the client sent too many\n   * pings.\n   * @returns\n   */\n  private reportDisconnectToOwner(tooManyPings: boolean) {\n    if (this.disconnectHandled) {\n      return;\n    }\n    this.disconnectHandled = true;\n    this.disconnectListeners.forEach(listener => listener(tooManyPings));\n  }\n\n  /**\n   * Handle connection drops, but not GOAWAYs.\n   */\n  private handleDisconnect() {\n    this.clearKeepaliveTimeout();\n    this.reportDisconnectToOwner(false);\n    for (const call of this.activeCalls) {\n      call.onDisconnect();\n    }\n    // Wait an event loop cycle before destroying the connection\n    setImmediate(() => {\n      this.session.destroy();\n    });\n  }\n\n  addDisconnectListener(listener: TransportDisconnectListener): void {\n    this.disconnectListeners.push(listener);\n  }\n\n  private canSendPing() {\n    return (\n      !this.session.destroyed &&\n      this.keepaliveTimeMs > 0 &&\n      (this.keepaliveWithoutCalls || this.activeCalls.size > 0)\n    );\n  }\n\n  private maybeSendPing() {\n    if (!this.canSendPing()) {\n      this.pendingSendKeepalivePing = true;\n      return;\n    }\n    if (this.keepaliveTimer) {\n      console.error('keepaliveTimeout is not null');\n      return;\n    }\n    if (this.channelzEnabled) {\n      this.keepalivesSent += 1;\n    }\n    this.keepaliveTrace(\n      'Sending ping with timeout ' + this.keepaliveTimeoutMs + 'ms'\n    );\n    this.keepaliveTimer = setTimeout(() => {\n      this.keepaliveTimer = null;\n      this.keepaliveTrace('Ping timeout passed without response');\n      this.handleDisconnect();\n    }, this.keepaliveTimeoutMs);\n    this.keepaliveTimer.unref?.();\n    let pingSendError = '';\n    try {\n      const pingSentSuccessfully = this.session.ping(\n        (err: Error | null, duration: number, payload: Buffer) => {\n          this.clearKeepaliveTimeout();\n          if (err) {\n            this.keepaliveTrace('Ping failed with error ' + err.message);\n            this.handleDisconnect();\n          } else {\n            this.keepaliveTrace('Received ping response');\n            this.maybeStartKeepalivePingTimer();\n          }\n        }\n      );\n      if (!pingSentSuccessfully) {\n        pingSendError = 'Ping returned false';\n      }\n    } catch (e) {\n      // grpc/grpc-node#2139\n      pingSendError = (e instanceof Error ? e.message : '') || 'Unknown error';\n    }\n    if (pingSendError) {\n      this.keepaliveTrace('Ping send failed: ' + pingSendError);\n      this.handleDisconnect();\n    }\n  }\n\n  /**\n   * Starts the keepalive ping timer if appropriate. If the timer already ran\n   * out while there were no active requests, instead send a ping immediately.\n   * If the ping timer is already running or a ping is currently in flight,\n   * instead do nothing and wait for them to resolve.\n   */\n  private maybeStartKeepalivePingTimer() {\n    if (!this.canSendPing()) {\n      return;\n    }\n    if (this.pendingSendKeepalivePing) {\n      this.pendingSendKeepalivePing = false;\n      this.maybeSendPing();\n    } else if (!this.keepaliveTimer) {\n      this.keepaliveTrace(\n        'Starting keepalive timer for ' + this.keepaliveTimeMs + 'ms'\n      );\n      this.keepaliveTimer = setTimeout(() => {\n        this.keepaliveTimer = null;\n        this.maybeSendPing();\n      }, this.keepaliveTimeMs);\n      this.keepaliveTimer.unref?.();\n    }\n    /* Otherwise, there is already either a keepalive timer or a ping pending,\n     * wait for those to resolve. */\n  }\n\n  /**\n   * Clears whichever keepalive timeout is currently active, if any.\n   */\n  private clearKeepaliveTimeout() {\n    if (this.keepaliveTimer) {\n      clearTimeout(this.keepaliveTimer);\n      this.keepaliveTimer = null;\n    }\n  }\n\n  private removeActiveCall(call: Http2SubchannelCall) {\n    this.activeCalls.delete(call);\n    if (this.activeCalls.size === 0) {\n      this.session.unref();\n    }\n  }\n\n  private addActiveCall(call: Http2SubchannelCall) {\n    this.activeCalls.add(call);\n    if (this.activeCalls.size === 1) {\n      this.session.ref();\n      if (!this.keepaliveWithoutCalls) {\n        this.maybeStartKeepalivePingTimer();\n      }\n    }\n  }\n\n  createCall(\n    metadata: Metadata,\n    host: string,\n    method: string,\n    listener: SubchannelCallInterceptingListener,\n    subchannelCallStatsTracker: Partial<CallEventTracker>\n  ): Http2SubchannelCall {\n    const headers = metadata.toHttp2Headers();\n    headers[HTTP2_HEADER_AUTHORITY] = host;\n    headers[HTTP2_HEADER_USER_AGENT] = this.userAgent;\n    headers[HTTP2_HEADER_CONTENT_TYPE] = 'application/grpc';\n    headers[HTTP2_HEADER_METHOD] = 'POST';\n    headers[HTTP2_HEADER_PATH] = method;\n    headers[HTTP2_HEADER_TE] = 'trailers';\n    let http2Stream: http2.ClientHttp2Stream;\n    /* In theory, if an error is thrown by session.request because session has\n     * become unusable (e.g. because it has received a goaway), this subchannel\n     * should soon see the corresponding close or goaway event anyway and leave\n     * READY. But we have seen reports that this does not happen\n     * (https://github.com/googleapis/nodejs-firestore/issues/1023#issuecomment-653204096)\n     * so for defense in depth, we just discard the session when we see an\n     * error here.\n     */\n    try {\n      http2Stream = this.session.request(headers);\n    } catch (e) {\n      this.handleDisconnect();\n      throw e;\n    }\n    this.flowControlTrace(\n      'local window size: ' +\n        this.session.state.localWindowSize +\n        ' remote window size: ' +\n        this.session.state.remoteWindowSize\n    );\n    this.internalsTrace(\n      'session.closed=' +\n        this.session.closed +\n        ' session.destroyed=' +\n        this.session.destroyed +\n        ' session.socket.destroyed=' +\n        this.session.socket.destroyed\n    );\n    let eventTracker: CallEventTracker;\n    // eslint-disable-next-line prefer-const\n    let call: Http2SubchannelCall;\n    if (this.channelzEnabled) {\n      this.streamTracker.addCallStarted();\n      eventTracker = {\n        addMessageSent: () => {\n          this.messagesSent += 1;\n          this.lastMessageSentTimestamp = new Date();\n          subchannelCallStatsTracker.addMessageSent?.();\n        },\n        addMessageReceived: () => {\n          this.messagesReceived += 1;\n          this.lastMessageReceivedTimestamp = new Date();\n          subchannelCallStatsTracker.addMessageReceived?.();\n        },\n        onCallEnd: status => {\n          subchannelCallStatsTracker.onCallEnd?.(status);\n          this.removeActiveCall(call);\n        },\n        onStreamEnd: success => {\n          if (success) {\n            this.streamTracker.addCallSucceeded();\n          } else {\n            this.streamTracker.addCallFailed();\n          }\n          subchannelCallStatsTracker.onStreamEnd?.(success);\n        },\n      };\n    } else {\n      eventTracker = {\n        addMessageSent: () => {\n          subchannelCallStatsTracker.addMessageSent?.();\n        },\n        addMessageReceived: () => {\n          subchannelCallStatsTracker.addMessageReceived?.();\n        },\n        onCallEnd: status => {\n          subchannelCallStatsTracker.onCallEnd?.(status);\n          this.removeActiveCall(call);\n        },\n        onStreamEnd: success => {\n          subchannelCallStatsTracker.onStreamEnd?.(success);\n        },\n      };\n    }\n    call = new Http2SubchannelCall(\n      http2Stream,\n      eventTracker,\n      listener,\n      this,\n      getNextCallNumber()\n    );\n    this.addActiveCall(call);\n    return call;\n  }\n\n  getChannelzRef(): SocketRef {\n    return this.channelzRef;\n  }\n\n  getPeerName() {\n    return this.subchannelAddressString;\n  }\n\n  getOptions() {\n    return this.options;\n  }\n\n  getAuthContext(): AuthContext {\n    return this.authContext;\n  }\n\n  shutdown() {\n    this.session.close();\n    unregisterChannelzRef(this.channelzRef);\n  }\n}\n\nexport interface SubchannelConnector {\n  connect(\n    address: SubchannelAddress,\n    secureConnector: SecureConnector,\n    options: ChannelOptions\n  ): Promise<Transport>;\n  shutdown(): void;\n}\n\nexport class Http2SubchannelConnector implements SubchannelConnector {\n  private session: http2.ClientHttp2Session | null = null;\n  private isShutdown = false;\n  constructor(private channelTarget: GrpcUri) {}\n\n  private trace(text: string) {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      TRACER_NAME,\n      uriToString(this.channelTarget) + ' ' + text\n    );\n  }\n\n  private createSession(\n    secureConnectResult: SecureConnectResult,\n    address: SubchannelAddress,\n    options: ChannelOptions\n  ): Promise<Http2Transport> {\n    if (this.isShutdown) {\n      return Promise.reject();\n    }\n\n    if (secureConnectResult.socket.closed) {\n      return Promise.reject('Connection closed before starting HTTP/2 handshake');\n    }\n\n    return new Promise<Http2Transport>((resolve, reject) => {\n      let remoteName: string | null = null;\n      let realTarget: GrpcUri = this.channelTarget;\n      if ('grpc.http_connect_target' in options) {\n        const parsedTarget = parseUri(options['grpc.http_connect_target']!);\n        if (parsedTarget) {\n          realTarget = parsedTarget;\n          remoteName = uriToString(parsedTarget);\n        }\n      }\n      const scheme = secureConnectResult.secure ? 'https' : 'http';\n      const targetPath = getDefaultAuthority(realTarget);\n      const closeHandler = () => {\n        this.session?.destroy();\n        this.session = null;\n        // Leave time for error event to happen before rejecting\n        setImmediate(() => {\n          if (!reportedError) {\n            reportedError = true;\n            reject(`${errorMessage.trim()} (${new Date().toISOString()})`);\n          }\n        });\n      };\n      const errorHandler = (error: Error) => {\n        this.session?.destroy();\n        errorMessage = (error as Error).message;\n        this.trace('connection failed with error ' + errorMessage);\n        if (!reportedError) {\n          reportedError = true;\n          reject(`${errorMessage} (${new Date().toISOString()})`);\n        }\n      };\n      const sessionOptions: http2.ClientSessionOptions = {\n        createConnection: (authority, option) => {\n          return secureConnectResult.socket;\n        },\n        settings: {\n          initialWindowSize:\n            options['grpc-node.flow_control_window'] ??\n            http2.getDefaultSettings?.()?.initialWindowSize ?? 65535,\n        },\n        maxSendHeaderBlockLength: Number.MAX_SAFE_INTEGER,\n        /* By default, set a very large max session memory limit, to effectively\n         * disable enforcement of the limit. Some testing indicates that Node's\n         * behavior degrades badly when this limit is reached, so we solve that\n         * by disabling the check entirely. */\n        maxSessionMemory: options['grpc-node.max_session_memory'] ?? Number.MAX_SAFE_INTEGER\n      };\n      const session = http2.connect(`${scheme}://${targetPath}`, sessionOptions);\n      // Prepare window size configuration for remoteSettings handler\n      const defaultWin = http2.getDefaultSettings?.()?.initialWindowSize ?? 65535; // 65 535 B\n      const connWin = options[\n        'grpc-node.flow_control_window'\n      ] as number | undefined;\n\n      this.session = session;\n      let errorMessage = 'Failed to connect';\n      let reportedError = false;\n      session.unref();\n      session.once('remoteSettings', () => {\n        // Send WINDOW_UPDATE now to avoid 65 KB start-window stall.\n        if (connWin && connWin > defaultWin) {\n          try {\n            // Node ≥ 14.18\n            (session as any).setLocalWindowSize(connWin);\n          } catch {\n            // Older Node: bump by the delta\n            const delta = connWin - (session.state.localWindowSize ?? defaultWin);\n            if (delta > 0) (session as any).incrementWindowSize(delta);\n          }\n        }\n\n        session.removeAllListeners();\n        secureConnectResult.socket.removeListener('close', closeHandler);\n        secureConnectResult.socket.removeListener('error', errorHandler);\n        resolve(new Http2Transport(session, address, options, remoteName));\n        this.session = null;\n      });\n      session.once('close', closeHandler);\n      session.once('error', errorHandler);\n      secureConnectResult.socket.once('close', closeHandler);\n      secureConnectResult.socket.once('error', errorHandler);\n    });\n  }\n\n  private tcpConnect(address: SubchannelAddress, options: ChannelOptions): Promise<Socket> {\n    return getProxiedConnection(address, options).then(proxiedSocket => {\n      if (proxiedSocket) {\n        return proxiedSocket;\n      } else {\n        return new Promise<Socket>((resolve, reject) => {\n          const closeCallback = () => {\n            reject(new Error('Socket closed'));\n          };\n          const errorCallback = (error: Error) => {\n            reject(error);\n          }\n          const socket = net.connect(address, () => {\n            socket.removeListener('close', closeCallback);\n            socket.removeListener('error', errorCallback);\n            resolve(socket);\n          });\n          socket.once('close', closeCallback);\n          socket.once('error', errorCallback);\n        });\n      }\n    });\n  }\n\n  async connect(\n    address: SubchannelAddress,\n    secureConnector: SecureConnector,\n    options: ChannelOptions\n  ): Promise<Http2Transport> {\n    if (this.isShutdown) {\n      return Promise.reject();\n    }\n    let tcpConnection: net.Socket | null = null;\n    let secureConnectResult: SecureConnectResult | null  = null;\n    const addressString = subchannelAddressToString(address);\n    try {\n      this.trace(addressString + ' Waiting for secureConnector to be ready');\n      await secureConnector.waitForReady();\n      this.trace(addressString + ' secureConnector is ready');\n      tcpConnection = await this.tcpConnect(address, options);\n      tcpConnection.setNoDelay();\n      this.trace(addressString + ' Established TCP connection');\n      secureConnectResult = await secureConnector.connect(tcpConnection);\n      this.trace(addressString + ' Established secure connection');\n      return this.createSession(secureConnectResult, address, options);\n    } catch (e) {\n      tcpConnection?.destroy();\n      secureConnectResult?.socket.destroy();\n      throw e;\n    }\n  }\n\n  shutdown(): void {\n    this.isShutdown = true;\n    this.session?.close();\n    this.session = null;\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { ChannelOptions, channelOptionsEqual } from './channel-options';\nimport { Subchannel } from './subchannel';\nimport {\n  SubchannelAddress,\n  subchannelAddressEqual,\n} from './subchannel-address';\nimport { ChannelCredentials } from './channel-credentials';\nimport { GrpcUri, uriToString } from './uri-parser';\nimport { Http2SubchannelConnector } from './transport';\n\n// 10 seconds in milliseconds. This value is arbitrary.\n/**\n * The amount of time in between checks for dropping subchannels that have no\n * other references\n */\nconst REF_CHECK_INTERVAL = 10_000;\n\nexport class SubchannelPool {\n  private pool: {\n    [channelTarget: string]: Array<{\n      subchannelAddress: SubchannelAddress;\n      channelArguments: ChannelOptions;\n      channelCredentials: ChannelCredentials;\n      subchannel: Subchannel;\n    }>;\n  } = Object.create(null);\n\n  /**\n   * A timer of a task performing a periodic subchannel cleanup.\n   */\n  private cleanupTimer: NodeJS.Timeout | null = null;\n\n  /**\n   * A pool of subchannels use for making connections. Subchannels with the\n   * exact same parameters will be reused.\n   */\n  constructor() {}\n\n  /**\n   * Unrefs all unused subchannels and cancels the cleanup task if all\n   * subchannels have been unrefed.\n   */\n  unrefUnusedSubchannels(): void {\n    let allSubchannelsUnrefed = true;\n\n    /* These objects are created with Object.create(null), so they do not\n     * have a prototype, which means that for (... in ...) loops over them\n     * do not need to be filtered */\n    // eslint-disable-disable-next-line:forin\n    for (const channelTarget in this.pool) {\n      const subchannelObjArray = this.pool[channelTarget];\n\n      const refedSubchannels = subchannelObjArray.filter(\n        value => !value.subchannel.unrefIfOneRef()\n      );\n\n      if (refedSubchannels.length > 0) {\n        allSubchannelsUnrefed = false;\n      }\n\n      /* For each subchannel in the pool, try to unref it if it has\n       * exactly one ref (which is the ref from the pool itself). If that\n       * does happen, remove the subchannel from the pool */\n      this.pool[channelTarget] = refedSubchannels;\n    }\n    /* Currently we do not delete keys with empty values. If that results\n     * in significant memory usage we should change it. */\n\n    // Cancel the cleanup task if all subchannels have been unrefed.\n    if (allSubchannelsUnrefed && this.cleanupTimer !== null) {\n      clearInterval(this.cleanupTimer);\n      this.cleanupTimer = null;\n    }\n  }\n\n  /**\n   * Ensures that the cleanup task is spawned.\n   */\n  ensureCleanupTask(): void {\n    if (this.cleanupTimer === null) {\n      this.cleanupTimer = setInterval(() => {\n        this.unrefUnusedSubchannels();\n      }, REF_CHECK_INTERVAL);\n\n      // Unref because this timer should not keep the event loop running.\n      // Call unref only if it exists to address electron/electron#21162\n      this.cleanupTimer.unref?.();\n    }\n  }\n\n  /**\n   * Get a subchannel if one already exists with exactly matching parameters.\n   * Otherwise, create and save a subchannel with those parameters.\n   * @param channelTarget\n   * @param subchannelTarget\n   * @param channelArguments\n   * @param channelCredentials\n   */\n  getOrCreateSubchannel(\n    channelTargetUri: GrpcUri,\n    subchannelTarget: SubchannelAddress,\n    channelArguments: ChannelOptions,\n    channelCredentials: ChannelCredentials\n  ): Subchannel {\n    this.ensureCleanupTask();\n    const channelTarget = uriToString(channelTargetUri);\n    if (channelTarget in this.pool) {\n      const subchannelObjArray = this.pool[channelTarget];\n      for (const subchannelObj of subchannelObjArray) {\n        if (\n          subchannelAddressEqual(\n            subchannelTarget,\n            subchannelObj.subchannelAddress\n          ) &&\n          channelOptionsEqual(\n            channelArguments,\n            subchannelObj.channelArguments\n          ) &&\n          channelCredentials._equals(subchannelObj.channelCredentials)\n        ) {\n          return subchannelObj.subchannel;\n        }\n      }\n    }\n    // If we get here, no matching subchannel was found\n    const subchannel = new Subchannel(\n      channelTargetUri,\n      subchannelTarget,\n      channelArguments,\n      channelCredentials,\n      new Http2SubchannelConnector(channelTargetUri)\n    );\n    if (!(channelTarget in this.pool)) {\n      this.pool[channelTarget] = [];\n    }\n    this.pool[channelTarget].push({\n      subchannelAddress: subchannelTarget,\n      channelArguments,\n      channelCredentials,\n      subchannel,\n    });\n    subchannel.ref();\n    return subchannel;\n  }\n}\n\nconst globalSubchannelPool = new SubchannelPool();\n\n/**\n * Get either the global subchannel pool, or a new subchannel pool.\n * @param global\n */\nexport function getSubchannelPool(global: boolean): SubchannelPool {\n  if (global) {\n    return globalSubchannelPool;\n  } else {\n    return new SubchannelPool();\n  }\n}\n","/*\n * Copyright 2022 gRPC authors.\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 */\n\nimport { CallCredentials } from './call-credentials';\nimport {\n  Call,\n  DeadlineInfoProvider,\n  InterceptingListener,\n  MessageContext,\n  StatusObject,\n} from './call-interface';\nimport { SubchannelCall } from './subchannel-call';\nimport { ConnectivityState } from './connectivity-state';\nimport { LogVerbosity, Status } from './constants';\nimport { Deadline, formatDateDifference, getDeadlineTimeoutString } from './deadline';\nimport { InternalChannel } from './internal-channel';\nimport { Metadata } from './metadata';\nimport { OnCallEnded, PickResultType } from './picker';\nimport { CallConfig } from './resolver';\nimport { splitHostPort } from './uri-parser';\nimport * as logging from './logging';\nimport { restrictControlPlaneStatusCode } from './control-plane-status';\nimport * as http2 from 'http2';\nimport { AuthContext } from './auth-context';\n\nconst TRACER_NAME = 'load_balancing_call';\n\nexport type RpcProgress = 'NOT_STARTED' | 'DROP' | 'REFUSED' | 'PROCESSED';\n\nexport interface StatusObjectWithProgress extends StatusObject {\n  progress: RpcProgress;\n}\n\nexport interface LoadBalancingCallInterceptingListener\n  extends InterceptingListener {\n  onReceiveStatus(status: StatusObjectWithProgress): void;\n}\n\nexport class LoadBalancingCall implements Call, DeadlineInfoProvider {\n  private child: SubchannelCall | null = null;\n  private readPending = false;\n  private pendingMessage: { context: MessageContext; message: Buffer } | null =\n    null;\n  private pendingHalfClose = false;\n  private ended = false;\n  private serviceUrl: string;\n  private metadata: Metadata | null = null;\n  private listener: InterceptingListener | null = null;\n  private onCallEnded: OnCallEnded | null = null;\n  private startTime: Date;\n  private childStartTime: Date | null = null;\n  constructor(\n    private readonly channel: InternalChannel,\n    private readonly callConfig: CallConfig,\n    private readonly methodName: string,\n    private readonly host: string,\n    private readonly credentials: CallCredentials,\n    private readonly deadline: Deadline,\n    private readonly callNumber: number\n  ) {\n    const splitPath: string[] = this.methodName.split('/');\n    let serviceName = '';\n    /* The standard path format is \"/{serviceName}/{methodName}\", so if we split\n     * by '/', the first item should be empty and the second should be the\n     * service name */\n    if (splitPath.length >= 2) {\n      serviceName = splitPath[1];\n    }\n    const hostname = splitHostPort(this.host)?.host ?? 'localhost';\n    /* Currently, call credentials are only allowed on HTTPS connections, so we\n     * can assume that the scheme is \"https\" */\n    this.serviceUrl = `https://${hostname}/${serviceName}`;\n    this.startTime = new Date();\n  }\n  getDeadlineInfo(): string[] {\n    const deadlineInfo: string[] = [];\n    if (this.childStartTime) {\n      if (this.childStartTime > this.startTime) {\n        if (this.metadata?.getOptions().waitForReady) {\n          deadlineInfo.push('wait_for_ready');\n        }\n        deadlineInfo.push(`LB pick: ${formatDateDifference(this.startTime, this.childStartTime)}`);\n      }\n      deadlineInfo.push(...this.child!.getDeadlineInfo());\n      return deadlineInfo;\n    } else {\n      if (this.metadata?.getOptions().waitForReady) {\n        deadlineInfo.push('wait_for_ready');\n      }\n      deadlineInfo.push('Waiting for LB pick');\n    }\n    return deadlineInfo;\n  }\n\n  private trace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      TRACER_NAME,\n      '[' + this.callNumber + '] ' + text\n    );\n  }\n\n  private outputStatus(status: StatusObject, progress: RpcProgress) {\n    if (!this.ended) {\n      this.ended = true;\n      this.trace(\n        'ended with status: code=' +\n          status.code +\n          ' details=\"' +\n          status.details +\n          '\" start time=' +\n          this.startTime.toISOString()\n      );\n      const finalStatus = { ...status, progress };\n      this.listener?.onReceiveStatus(finalStatus);\n      this.onCallEnded?.(finalStatus.code, finalStatus.details, finalStatus.metadata);\n    }\n  }\n\n  doPick() {\n    if (this.ended) {\n      return;\n    }\n    if (!this.metadata) {\n      throw new Error('doPick called before start');\n    }\n    this.trace('Pick called');\n    const finalMetadata = this.metadata.clone();\n    const pickResult = this.channel.doPick(\n      finalMetadata,\n      this.callConfig.pickInformation\n    );\n    const subchannelString = pickResult.subchannel\n      ? '(' +\n        pickResult.subchannel.getChannelzRef().id +\n        ') ' +\n        pickResult.subchannel.getAddress()\n      : '' + pickResult.subchannel;\n    this.trace(\n      'Pick result: ' +\n        PickResultType[pickResult.pickResultType] +\n        ' subchannel: ' +\n        subchannelString +\n        ' status: ' +\n        pickResult.status?.code +\n        ' ' +\n        pickResult.status?.details\n    );\n    switch (pickResult.pickResultType) {\n      case PickResultType.COMPLETE:\n        const combinedCallCredentials = this.credentials.compose(pickResult.subchannel!.getCallCredentials());\n        combinedCallCredentials\n          .generateMetadata({ method_name: this.methodName, service_url: this.serviceUrl })\n          .then(\n            credsMetadata => {\n              /* If this call was cancelled (e.g. by the deadline) before\n               * metadata generation finished, we shouldn't do anything with\n               * it. */\n              if (this.ended) {\n                this.trace(\n                  'Credentials metadata generation finished after call ended'\n                );\n                return;\n              }\n              finalMetadata.merge(credsMetadata);\n              if (finalMetadata.get('authorization').length > 1) {\n                this.outputStatus(\n                  {\n                    code: Status.INTERNAL,\n                    details:\n                      '\"authorization\" metadata cannot have multiple values',\n                    metadata: new Metadata(),\n                  },\n                  'PROCESSED'\n                );\n              }\n              if (\n                pickResult.subchannel!.getConnectivityState() !==\n                ConnectivityState.READY\n              ) {\n                this.trace(\n                  'Picked subchannel ' +\n                    subchannelString +\n                    ' has state ' +\n                    ConnectivityState[\n                      pickResult.subchannel!.getConnectivityState()\n                    ] +\n                    ' after getting credentials metadata. Retrying pick'\n                );\n                this.doPick();\n                return;\n              }\n\n              if (this.deadline !== Infinity) {\n                finalMetadata.set(\n                  'grpc-timeout',\n                  getDeadlineTimeoutString(this.deadline)\n                );\n              }\n              try {\n                this.child = pickResult\n                  .subchannel!.getRealSubchannel()\n                  .createCall(finalMetadata, this.host, this.methodName, {\n                    onReceiveMetadata: metadata => {\n                      this.trace('Received metadata');\n                      this.listener!.onReceiveMetadata(metadata);\n                    },\n                    onReceiveMessage: message => {\n                      this.trace('Received message');\n                      this.listener!.onReceiveMessage(message);\n                    },\n                    onReceiveStatus: status => {\n                      this.trace('Received status');\n                      if (\n                        status.rstCode ===\n                        http2.constants.NGHTTP2_REFUSED_STREAM\n                      ) {\n                        this.outputStatus(status, 'REFUSED');\n                      } else {\n                        this.outputStatus(status, 'PROCESSED');\n                      }\n                    },\n                  });\n                this.childStartTime = new Date();\n              } catch (error) {\n                this.trace(\n                  'Failed to start call on picked subchannel ' +\n                    subchannelString +\n                    ' with error ' +\n                    (error as Error).message\n                );\n                this.outputStatus(\n                  {\n                    code: Status.INTERNAL,\n                    details:\n                      'Failed to start HTTP/2 stream with error ' +\n                      (error as Error).message,\n                    metadata: new Metadata(),\n                  },\n                  'NOT_STARTED'\n                );\n                return;\n              }\n              pickResult.onCallStarted?.();\n              this.onCallEnded = pickResult.onCallEnded;\n              this.trace(\n                'Created child call [' + this.child.getCallNumber() + ']'\n              );\n              if (this.readPending) {\n                this.child.startRead();\n              }\n              if (this.pendingMessage) {\n                this.child.sendMessageWithContext(\n                  this.pendingMessage.context,\n                  this.pendingMessage.message\n                );\n              }\n              if (this.pendingHalfClose) {\n                this.child.halfClose();\n              }\n            },\n            (error: Error & { code: number }) => {\n              // We assume the error code isn't 0 (Status.OK)\n              const { code, details } = restrictControlPlaneStatusCode(\n                typeof error.code === 'number' ? error.code : Status.UNKNOWN,\n                `Getting metadata from plugin failed with error: ${error.message}`\n              );\n              this.outputStatus(\n                {\n                  code: code,\n                  details: details,\n                  metadata: new Metadata(),\n                },\n                'PROCESSED'\n              );\n            }\n          );\n        break;\n      case PickResultType.DROP:\n        const { code, details } = restrictControlPlaneStatusCode(\n          pickResult.status!.code,\n          pickResult.status!.details\n        );\n        setImmediate(() => {\n          this.outputStatus(\n            { code, details, metadata: pickResult.status!.metadata },\n            'DROP'\n          );\n        });\n        break;\n      case PickResultType.TRANSIENT_FAILURE:\n        if (this.metadata.getOptions().waitForReady) {\n          this.channel.queueCallForPick(this);\n        } else {\n          const { code, details } = restrictControlPlaneStatusCode(\n            pickResult.status!.code,\n            pickResult.status!.details\n          );\n          setImmediate(() => {\n            this.outputStatus(\n              { code, details, metadata: pickResult.status!.metadata },\n              'PROCESSED'\n            );\n          });\n        }\n        break;\n      case PickResultType.QUEUE:\n        this.channel.queueCallForPick(this);\n    }\n  }\n\n  cancelWithStatus(status: Status, details: string): void {\n    this.trace(\n      'cancelWithStatus code: ' + status + ' details: \"' + details + '\"'\n    );\n    this.child?.cancelWithStatus(status, details);\n    this.outputStatus(\n      { code: status, details: details, metadata: new Metadata() },\n      'PROCESSED'\n    );\n  }\n  getPeer(): string {\n    return this.child?.getPeer() ?? this.channel.getTarget();\n  }\n  start(\n    metadata: Metadata,\n    listener: LoadBalancingCallInterceptingListener\n  ): void {\n    this.trace('start called');\n    this.listener = listener;\n    this.metadata = metadata;\n    this.doPick();\n  }\n  sendMessageWithContext(context: MessageContext, message: Buffer): void {\n    this.trace('write() called with message of length ' + message.length);\n    if (this.child) {\n      this.child.sendMessageWithContext(context, message);\n    } else {\n      this.pendingMessage = { context, message };\n    }\n  }\n  startRead(): void {\n    this.trace('startRead called');\n    if (this.child) {\n      this.child.startRead();\n    } else {\n      this.readPending = true;\n    }\n  }\n  halfClose(): void {\n    this.trace('halfClose called');\n    if (this.child) {\n      this.child.halfClose();\n    } else {\n      this.pendingHalfClose = true;\n    }\n  }\n  setCredentials(credentials: CallCredentials): void {\n    throw new Error('Method not implemented.');\n  }\n\n  getCallNumber(): number {\n    return this.callNumber;\n  }\n\n  getAuthContext(): AuthContext | null {\n    if (this.child) {\n      return this.child.getAuthContext();\n    } else {\n      return null;\n    }\n  }\n}\n","/*\n * Copyright 2022 gRPC authors.\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 */\n\nimport { CallCredentials } from './call-credentials';\nimport {\n  Call,\n  CallStreamOptions,\n  DeadlineInfoProvider,\n  InterceptingListener,\n  MessageContext,\n  StatusObject,\n} from './call-interface';\nimport { LogVerbosity, Propagate, Status } from './constants';\nimport {\n  Deadline,\n  deadlineToString,\n  formatDateDifference,\n  getRelativeTimeout,\n  minDeadline,\n} from './deadline';\nimport { FilterStack, FilterStackFactory } from './filter-stack';\nimport { InternalChannel } from './internal-channel';\nimport { Metadata } from './metadata';\nimport * as logging from './logging';\nimport { restrictControlPlaneStatusCode } from './control-plane-status';\nimport { AuthContext } from './auth-context';\n\nconst TRACER_NAME = 'resolving_call';\n\nexport class ResolvingCall implements Call {\n  private child: (Call & DeadlineInfoProvider) | null = null;\n  private readPending = false;\n  private pendingMessage: { context: MessageContext; message: Buffer } | null =\n    null;\n  private pendingHalfClose = false;\n  private ended = false;\n  private readFilterPending = false;\n  private writeFilterPending = false;\n  private pendingChildStatus: StatusObject | null = null;\n  private metadata: Metadata | null = null;\n  private listener: InterceptingListener | null = null;\n  private deadline: Deadline;\n  private host: string;\n  private statusWatchers: ((status: StatusObject) => void)[] = [];\n  private deadlineTimer: NodeJS.Timeout = setTimeout(() => {}, 0);\n  private filterStack: FilterStack | null = null;\n\n  private deadlineStartTime: Date | null = null;\n  private configReceivedTime: Date | null = null;\n  private childStartTime: Date | null = null;\n\n  /**\n   * Credentials configured for this specific call. Does not include\n   * call credentials associated with the channel credentials used to create\n   * the channel.\n   */\n  private credentials: CallCredentials = CallCredentials.createEmpty();\n\n  constructor(\n    private readonly channel: InternalChannel,\n    private readonly method: string,\n    options: CallStreamOptions,\n    private readonly filterStackFactory: FilterStackFactory,\n    private callNumber: number\n  ) {\n    this.deadline = options.deadline;\n    this.host = options.host;\n    if (options.parentCall) {\n      if (options.flags & Propagate.CANCELLATION) {\n        options.parentCall.on('cancelled', () => {\n          this.cancelWithStatus(Status.CANCELLED, 'Cancelled by parent call');\n        });\n      }\n      if (options.flags & Propagate.DEADLINE) {\n        this.trace(\n          'Propagating deadline from parent: ' +\n            options.parentCall.getDeadline()\n        );\n        this.deadline = minDeadline(\n          this.deadline,\n          options.parentCall.getDeadline()\n        );\n      }\n    }\n    this.trace('Created');\n    this.runDeadlineTimer();\n  }\n\n  private trace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      TRACER_NAME,\n      '[' + this.callNumber + '] ' + text\n    );\n  }\n\n  private runDeadlineTimer() {\n    clearTimeout(this.deadlineTimer);\n    this.deadlineStartTime = new Date();\n    this.trace('Deadline: ' + deadlineToString(this.deadline));\n    const timeout = getRelativeTimeout(this.deadline);\n    if (timeout !== Infinity) {\n      this.trace('Deadline will be reached in ' + timeout + 'ms');\n      const handleDeadline = () => {\n        if (!this.deadlineStartTime) {\n          this.cancelWithStatus(Status.DEADLINE_EXCEEDED, 'Deadline exceeded');\n          return;\n        }\n        const deadlineInfo: string[] = [];\n        const deadlineEndTime = new Date();\n        deadlineInfo.push(`Deadline exceeded after ${formatDateDifference(this.deadlineStartTime, deadlineEndTime)}`);\n        if (this.configReceivedTime) {\n          if (this.configReceivedTime > this.deadlineStartTime) {\n            deadlineInfo.push(`name resolution: ${formatDateDifference(this.deadlineStartTime, this.configReceivedTime)}`);\n          }\n          if (this.childStartTime) {\n            if (this.childStartTime > this.configReceivedTime) {\n              deadlineInfo.push(`metadata filters: ${formatDateDifference(this.configReceivedTime, this.childStartTime)}`);\n            }\n          } else {\n            deadlineInfo.push('waiting for metadata filters');\n          }\n        } else {\n          deadlineInfo.push('waiting for name resolution');\n        }\n        if (this.child) {\n          deadlineInfo.push(...this.child.getDeadlineInfo());\n        }\n        this.cancelWithStatus(Status.DEADLINE_EXCEEDED, deadlineInfo.join(','));\n      };\n      if (timeout <= 0) {\n        process.nextTick(handleDeadline);\n      } else {\n        this.deadlineTimer = setTimeout(handleDeadline, timeout);\n      }\n    }\n  }\n\n  private outputStatus(status: StatusObject) {\n    if (!this.ended) {\n      this.ended = true;\n      if (!this.filterStack) {\n        this.filterStack = this.filterStackFactory.createFilter();\n      }\n      clearTimeout(this.deadlineTimer);\n      const filteredStatus = this.filterStack.receiveTrailers(status);\n      this.trace(\n        'ended with status: code=' +\n          filteredStatus.code +\n          ' details=\"' +\n          filteredStatus.details +\n          '\"'\n      );\n      this.statusWatchers.forEach(watcher => watcher(filteredStatus));\n      process.nextTick(() => {\n        this.listener?.onReceiveStatus(filteredStatus);\n      });\n    }\n  }\n\n  private sendMessageOnChild(context: MessageContext, message: Buffer): void {\n    if (!this.child) {\n      throw new Error('sendMessageonChild called with child not populated');\n    }\n    const child = this.child;\n    this.writeFilterPending = true;\n    this.filterStack!.sendMessage(\n      Promise.resolve({ message: message, flags: context.flags })\n    ).then(\n      filteredMessage => {\n        this.writeFilterPending = false;\n        child.sendMessageWithContext(context, filteredMessage.message);\n        if (this.pendingHalfClose) {\n          child.halfClose();\n        }\n      },\n      (status: StatusObject) => {\n        this.cancelWithStatus(status.code, status.details);\n      }\n    );\n  }\n\n  getConfig(): void {\n    if (this.ended) {\n      return;\n    }\n    if (!this.metadata || !this.listener) {\n      throw new Error('getConfig called before start');\n    }\n    const configResult = this.channel.getConfig(this.method, this.metadata);\n    if (configResult.type === 'NONE') {\n      this.channel.queueCallForConfig(this);\n      return;\n    } else if (configResult.type === 'ERROR') {\n      if (this.metadata.getOptions().waitForReady) {\n        this.channel.queueCallForConfig(this);\n      } else {\n        this.outputStatus(configResult.error);\n      }\n      return;\n    }\n    // configResult.type === 'SUCCESS'\n    this.configReceivedTime = new Date();\n    const config = configResult.config;\n    if (config.status !== Status.OK) {\n      const { code, details } = restrictControlPlaneStatusCode(\n        config.status,\n        'Failed to route call to method ' + this.method\n      );\n      this.outputStatus({\n        code: code,\n        details: details,\n        metadata: new Metadata(),\n      });\n      return;\n    }\n\n    if (config.methodConfig.timeout) {\n      const configDeadline = new Date();\n      configDeadline.setSeconds(\n        configDeadline.getSeconds() + config.methodConfig.timeout.seconds\n      );\n      configDeadline.setMilliseconds(\n        configDeadline.getMilliseconds() +\n          config.methodConfig.timeout.nanos / 1_000_000\n      );\n      this.deadline = minDeadline(this.deadline, configDeadline);\n      this.runDeadlineTimer();\n    }\n\n    this.filterStackFactory.push(config.dynamicFilterFactories);\n    this.filterStack = this.filterStackFactory.createFilter();\n    this.filterStack.sendMetadata(Promise.resolve(this.metadata)).then(\n      filteredMetadata => {\n        this.child = this.channel.createRetryingCall(\n          config,\n          this.method,\n          this.host,\n          this.credentials,\n          this.deadline\n        );\n        this.trace('Created child [' + this.child.getCallNumber() + ']');\n        this.childStartTime = new Date();\n        this.child.start(filteredMetadata, {\n          onReceiveMetadata: metadata => {\n            this.trace('Received metadata');\n            this.listener!.onReceiveMetadata(\n              this.filterStack!.receiveMetadata(metadata)\n            );\n          },\n          onReceiveMessage: message => {\n            this.trace('Received message');\n            this.readFilterPending = true;\n            this.filterStack!.receiveMessage(message).then(\n              filteredMesssage => {\n                this.trace('Finished filtering received message');\n                this.readFilterPending = false;\n                this.listener!.onReceiveMessage(filteredMesssage);\n                if (this.pendingChildStatus) {\n                  this.outputStatus(this.pendingChildStatus);\n                }\n              },\n              (status: StatusObject) => {\n                this.cancelWithStatus(status.code, status.details);\n              }\n            );\n          },\n          onReceiveStatus: status => {\n            this.trace('Received status');\n            if (this.readFilterPending) {\n              this.pendingChildStatus = status;\n            } else {\n              this.outputStatus(status);\n            }\n          },\n        });\n        if (this.readPending) {\n          this.child.startRead();\n        }\n        if (this.pendingMessage) {\n          this.sendMessageOnChild(\n            this.pendingMessage.context,\n            this.pendingMessage.message\n          );\n        } else if (this.pendingHalfClose) {\n          this.child.halfClose();\n        }\n      },\n      (status: StatusObject) => {\n        this.outputStatus(status);\n      }\n    );\n  }\n\n  reportResolverError(status: StatusObject) {\n    if (this.metadata?.getOptions().waitForReady) {\n      this.channel.queueCallForConfig(this);\n    } else {\n      this.outputStatus(status);\n    }\n  }\n  cancelWithStatus(status: Status, details: string): void {\n    this.trace(\n      'cancelWithStatus code: ' + status + ' details: \"' + details + '\"'\n    );\n    this.child?.cancelWithStatus(status, details);\n    this.outputStatus({\n      code: status,\n      details: details,\n      metadata: new Metadata(),\n    });\n  }\n  getPeer(): string {\n    return this.child?.getPeer() ?? this.channel.getTarget();\n  }\n  start(metadata: Metadata, listener: InterceptingListener): void {\n    this.trace('start called');\n    this.metadata = metadata.clone();\n    this.listener = listener;\n    this.getConfig();\n  }\n  sendMessageWithContext(context: MessageContext, message: Buffer): void {\n    this.trace('write() called with message of length ' + message.length);\n    if (this.child) {\n      this.sendMessageOnChild(context, message);\n    } else {\n      this.pendingMessage = { context, message };\n    }\n  }\n  startRead(): void {\n    this.trace('startRead called');\n    if (this.child) {\n      this.child.startRead();\n    } else {\n      this.readPending = true;\n    }\n  }\n  halfClose(): void {\n    this.trace('halfClose called');\n    if (this.child && !this.writeFilterPending) {\n      this.child.halfClose();\n    } else {\n      this.pendingHalfClose = true;\n    }\n  }\n  setCredentials(credentials: CallCredentials): void {\n    this.credentials = credentials;\n  }\n\n  addStatusWatcher(watcher: (status: StatusObject) => void) {\n    this.statusWatchers.push(watcher);\n  }\n\n  getCallNumber(): number {\n    return this.callNumber;\n  }\n\n  getAuthContext(): AuthContext | null {\n    if (this.child) {\n      return this.child.getAuthContext();\n    } else {\n      return null;\n    }\n  }\n}\n","/*\n * Copyright 2022 gRPC authors.\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 */\n\nimport { CallCredentials } from './call-credentials';\nimport { LogVerbosity, Status } from './constants';\nimport { Deadline, formatDateDifference } from './deadline';\nimport { Metadata } from './metadata';\nimport { CallConfig } from './resolver';\nimport * as logging from './logging';\nimport {\n  Call,\n  DeadlineInfoProvider,\n  InterceptingListener,\n  MessageContext,\n  StatusObject,\n  WriteCallback,\n  WriteObject,\n} from './call-interface';\nimport {\n  LoadBalancingCall,\n  StatusObjectWithProgress,\n} from './load-balancing-call';\nimport { InternalChannel } from './internal-channel';\nimport { AuthContext } from './auth-context';\n\nconst TRACER_NAME = 'retrying_call';\n\nexport class RetryThrottler {\n  private tokens: number;\n  constructor(\n    private readonly maxTokens: number,\n    private readonly tokenRatio: number,\n    previousRetryThrottler?: RetryThrottler\n  ) {\n    if (previousRetryThrottler) {\n      /* When carrying over tokens from a previous config, rescale them to the\n       * new max value */\n      this.tokens =\n        previousRetryThrottler.tokens *\n        (maxTokens / previousRetryThrottler.maxTokens);\n    } else {\n      this.tokens = maxTokens;\n    }\n  }\n\n  addCallSucceeded() {\n    this.tokens = Math.min(this.tokens + this.tokenRatio, this.maxTokens);\n  }\n\n  addCallFailed() {\n    this.tokens = Math.max(this.tokens - 1, 0);\n  }\n\n  canRetryCall() {\n    return this.tokens > (this.maxTokens / 2);\n  }\n}\n\nexport class MessageBufferTracker {\n  private totalAllocated = 0;\n  private allocatedPerCall: Map<number, number> = new Map<number, number>();\n\n  constructor(private totalLimit: number, private limitPerCall: number) {}\n\n  allocate(size: number, callId: number): boolean {\n    const currentPerCall = this.allocatedPerCall.get(callId) ?? 0;\n    if (\n      this.limitPerCall - currentPerCall < size ||\n      this.totalLimit - this.totalAllocated < size\n    ) {\n      return false;\n    }\n    this.allocatedPerCall.set(callId, currentPerCall + size);\n    this.totalAllocated += size;\n    return true;\n  }\n\n  free(size: number, callId: number) {\n    if (this.totalAllocated < size) {\n      throw new Error(\n        `Invalid buffer allocation state: call ${callId} freed ${size} > total allocated ${this.totalAllocated}`\n      );\n    }\n    this.totalAllocated -= size;\n    const currentPerCall = this.allocatedPerCall.get(callId) ?? 0;\n    if (currentPerCall < size) {\n      throw new Error(\n        `Invalid buffer allocation state: call ${callId} freed ${size} > allocated for call ${currentPerCall}`\n      );\n    }\n    this.allocatedPerCall.set(callId, currentPerCall - size);\n  }\n\n  freeAll(callId: number) {\n    const currentPerCall = this.allocatedPerCall.get(callId) ?? 0;\n    if (this.totalAllocated < currentPerCall) {\n      throw new Error(\n        `Invalid buffer allocation state: call ${callId} allocated ${currentPerCall} > total allocated ${this.totalAllocated}`\n      );\n    }\n    this.totalAllocated -= currentPerCall;\n    this.allocatedPerCall.delete(callId);\n  }\n}\n\ntype UnderlyingCallState = 'ACTIVE' | 'COMPLETED';\n\ninterface UnderlyingCall {\n  state: UnderlyingCallState;\n  call: LoadBalancingCall;\n  nextMessageToSend: number;\n  startTime: Date;\n}\n\n/**\n * A retrying call can be in one of these states:\n * RETRY: Retries are configured and new attempts may be sent\n * HEDGING: Hedging is configured and new attempts may be sent\n * TRANSPARENT_ONLY: Neither retries nor hedging are configured, and\n * transparent retry attempts may still be sent\n * COMMITTED: One attempt is committed, and no new attempts will be\n * sent\n * NO_RETRY: Retries are disabled. Exists to track the transition to COMMITTED\n */\ntype RetryingCallState =\n  | 'RETRY'\n  | 'HEDGING'\n  | 'TRANSPARENT_ONLY'\n  | 'COMMITTED'\n  | 'NO_RETRY';\n\n/**\n * The different types of objects that can be stored in the write buffer, with\n * the following meanings:\n * MESSAGE: This is a message to be sent.\n * HALF_CLOSE: When this entry is reached, the calls should send a half-close.\n * FREED: This slot previously contained a message that has been sent on all\n * child calls and is no longer needed.\n */\ntype WriteBufferEntryType = 'MESSAGE' | 'HALF_CLOSE' | 'FREED';\n\n/**\n * Entry in the buffer of messages to send to the remote end.\n */\ninterface WriteBufferEntry {\n  entryType: WriteBufferEntryType;\n  /**\n   * Message to send.\n   * Only populated if entryType is MESSAGE.\n   */\n  message?: WriteObject;\n  /**\n   * Callback to call after sending the message.\n   * Only populated if entryType is MESSAGE and the call is in the COMMITTED\n   * state.\n   */\n  callback?: WriteCallback;\n  /**\n   * Indicates whether the message is allocated in the buffer tracker. Ignored\n   * if entryType is not MESSAGE. Should be the return value of\n   * bufferTracker.allocate.\n   */\n  allocated: boolean;\n}\n\nconst PREVIONS_RPC_ATTEMPTS_METADATA_KEY = 'grpc-previous-rpc-attempts';\n\nconst DEFAULT_MAX_ATTEMPTS_LIMIT = 5;\n\nexport class RetryingCall implements Call, DeadlineInfoProvider {\n  private state: RetryingCallState;\n  private listener: InterceptingListener | null = null;\n  private initialMetadata: Metadata | null = null;\n  private underlyingCalls: UnderlyingCall[] = [];\n  private writeBuffer: WriteBufferEntry[] = [];\n  /**\n   * The offset of message indices in the writeBuffer. For example, if\n   * writeBufferOffset is 10, message 10 is in writeBuffer[0] and message 15\n   * is in writeBuffer[5].\n   */\n  private writeBufferOffset = 0;\n  /**\n   * Tracks whether a read has been started, so that we know whether to start\n   * reads on new child calls. This only matters for the first read, because\n   * once a message comes in the child call becomes committed and there will\n   * be no new child calls.\n   */\n  private readStarted = false;\n  private transparentRetryUsed = false;\n  /**\n   * Number of attempts so far\n   */\n  private attempts = 0;\n  private hedgingTimer: NodeJS.Timeout | null = null;\n  private committedCallIndex: number | null = null;\n  private initialRetryBackoffSec = 0;\n  private nextRetryBackoffSec = 0;\n  private startTime: Date;\n  private maxAttempts: number;\n  constructor(\n    private readonly channel: InternalChannel,\n    private readonly callConfig: CallConfig,\n    private readonly methodName: string,\n    private readonly host: string,\n    private readonly credentials: CallCredentials,\n    private readonly deadline: Deadline,\n    private readonly callNumber: number,\n    private readonly bufferTracker: MessageBufferTracker,\n    private readonly retryThrottler?: RetryThrottler\n  ) {\n    const maxAttemptsLimit =\n      channel.getOptions()['grpc-node.retry_max_attempts_limit'] ??\n      DEFAULT_MAX_ATTEMPTS_LIMIT;\n    if (channel.getOptions()['grpc.enable_retries'] === 0) {\n      this.state = 'NO_RETRY';\n      this.maxAttempts = 1;\n    } else if (callConfig.methodConfig.retryPolicy) {\n      this.state = 'RETRY';\n      const retryPolicy = callConfig.methodConfig.retryPolicy;\n      this.nextRetryBackoffSec = this.initialRetryBackoffSec = Number(\n        retryPolicy.initialBackoff.substring(\n          0,\n          retryPolicy.initialBackoff.length - 1\n        )\n      );\n      this.maxAttempts = Math.min(retryPolicy.maxAttempts, maxAttemptsLimit);\n    } else if (callConfig.methodConfig.hedgingPolicy) {\n      this.state = 'HEDGING';\n      this.maxAttempts = Math.min(\n        callConfig.methodConfig.hedgingPolicy.maxAttempts,\n        maxAttemptsLimit\n      );\n    } else {\n      this.state = 'TRANSPARENT_ONLY';\n      this.maxAttempts = 1;\n    }\n    this.startTime = new Date();\n  }\n  getDeadlineInfo(): string[] {\n    if (this.underlyingCalls.length === 0) {\n      return [];\n    }\n    const deadlineInfo: string[] = [];\n    const latestCall = this.underlyingCalls[this.underlyingCalls.length - 1];\n    if (this.underlyingCalls.length > 1) {\n      deadlineInfo.push(\n        `previous attempts: ${this.underlyingCalls.length - 1}`\n      );\n    }\n    if (latestCall.startTime > this.startTime) {\n      deadlineInfo.push(\n        `time to current attempt start: ${formatDateDifference(\n          this.startTime,\n          latestCall.startTime\n        )}`\n      );\n    }\n    deadlineInfo.push(...latestCall.call.getDeadlineInfo());\n    return deadlineInfo;\n  }\n  getCallNumber(): number {\n    return this.callNumber;\n  }\n\n  private trace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      TRACER_NAME,\n      '[' + this.callNumber + '] ' + text\n    );\n  }\n\n  private reportStatus(statusObject: StatusObject) {\n    this.trace(\n      'ended with status: code=' +\n        statusObject.code +\n        ' details=\"' +\n        statusObject.details +\n        '\" start time=' +\n        this.startTime.toISOString()\n    );\n    this.bufferTracker.freeAll(this.callNumber);\n    this.writeBufferOffset = this.writeBufferOffset + this.writeBuffer.length;\n    this.writeBuffer = [];\n    process.nextTick(() => {\n      // Explicitly construct status object to remove progress field\n      this.listener?.onReceiveStatus({\n        code: statusObject.code,\n        details: statusObject.details,\n        metadata: statusObject.metadata,\n      });\n    });\n  }\n\n  cancelWithStatus(status: Status, details: string): void {\n    this.trace(\n      'cancelWithStatus code: ' + status + ' details: \"' + details + '\"'\n    );\n    this.reportStatus({ code: status, details, metadata: new Metadata() });\n    for (const { call } of this.underlyingCalls) {\n      call.cancelWithStatus(status, details);\n    }\n  }\n  getPeer(): string {\n    if (this.committedCallIndex !== null) {\n      return this.underlyingCalls[this.committedCallIndex].call.getPeer();\n    } else {\n      return 'unknown';\n    }\n  }\n\n  private getBufferEntry(messageIndex: number): WriteBufferEntry {\n    return (\n      this.writeBuffer[messageIndex - this.writeBufferOffset] ?? {\n        entryType: 'FREED',\n        allocated: false,\n      }\n    );\n  }\n\n  private getNextBufferIndex() {\n    return this.writeBufferOffset + this.writeBuffer.length;\n  }\n\n  private clearSentMessages() {\n    if (this.state !== 'COMMITTED') {\n      return;\n    }\n    let earliestNeededMessageIndex: number;\n    if (this.underlyingCalls[this.committedCallIndex!].state === 'COMPLETED') {\n      /* If the committed call is completed, clear all messages, even if some\n       * have not been sent. */\n      earliestNeededMessageIndex = this.getNextBufferIndex();\n    } else {\n      earliestNeededMessageIndex =\n        this.underlyingCalls[this.committedCallIndex!].nextMessageToSend;\n    }\n    for (\n      let messageIndex = this.writeBufferOffset;\n      messageIndex < earliestNeededMessageIndex;\n      messageIndex++\n    ) {\n      const bufferEntry = this.getBufferEntry(messageIndex);\n      if (bufferEntry.allocated) {\n        this.bufferTracker.free(\n          bufferEntry.message!.message.length,\n          this.callNumber\n        );\n      }\n    }\n    this.writeBuffer = this.writeBuffer.slice(\n      earliestNeededMessageIndex - this.writeBufferOffset\n    );\n    this.writeBufferOffset = earliestNeededMessageIndex;\n  }\n\n  private commitCall(index: number) {\n    if (this.state === 'COMMITTED') {\n      return;\n    }\n    this.trace(\n      'Committing call [' +\n        this.underlyingCalls[index].call.getCallNumber() +\n        '] at index ' +\n        index\n    );\n    this.state = 'COMMITTED';\n    this.callConfig.onCommitted?.();\n    this.committedCallIndex = index;\n    for (let i = 0; i < this.underlyingCalls.length; i++) {\n      if (i === index) {\n        continue;\n      }\n      if (this.underlyingCalls[i].state === 'COMPLETED') {\n        continue;\n      }\n      this.underlyingCalls[i].state = 'COMPLETED';\n      this.underlyingCalls[i].call.cancelWithStatus(\n        Status.CANCELLED,\n        'Discarded in favor of other hedged attempt'\n      );\n    }\n    this.clearSentMessages();\n  }\n\n  private commitCallWithMostMessages() {\n    if (this.state === 'COMMITTED') {\n      return;\n    }\n    let mostMessages = -1;\n    let callWithMostMessages = -1;\n    for (const [index, childCall] of this.underlyingCalls.entries()) {\n      if (\n        childCall.state === 'ACTIVE' &&\n        childCall.nextMessageToSend > mostMessages\n      ) {\n        mostMessages = childCall.nextMessageToSend;\n        callWithMostMessages = index;\n      }\n    }\n    if (callWithMostMessages === -1) {\n      /* There are no active calls, disable retries to force the next call that\n       * is started to be committed. */\n      this.state = 'TRANSPARENT_ONLY';\n    } else {\n      this.commitCall(callWithMostMessages);\n    }\n  }\n\n  private isStatusCodeInList(list: (Status | string)[], code: Status) {\n    return list.some(\n      value =>\n        value === code ||\n        value.toString().toLowerCase() === Status[code]?.toLowerCase()\n    );\n  }\n\n  private getNextRetryJitter() {\n    /* Jitter of +-20% is applied: https://github.com/grpc/proposal/blob/master/A6-client-retries.md#exponential-backoff */\n    return Math.random() * (1.2 - 0.8) + 0.8;\n  }\n\n  private getNextRetryBackoffMs() {\n    const retryPolicy = this.callConfig?.methodConfig.retryPolicy;\n    if (!retryPolicy) {\n      return 0;\n    }\n    const jitter = this.getNextRetryJitter();\n    const nextBackoffMs = jitter * this.nextRetryBackoffSec * 1000;\n    const maxBackoffSec = Number(\n      retryPolicy.maxBackoff.substring(0, retryPolicy.maxBackoff.length - 1)\n    );\n    this.nextRetryBackoffSec = Math.min(\n      this.nextRetryBackoffSec * retryPolicy.backoffMultiplier,\n      maxBackoffSec\n    );\n    return nextBackoffMs;\n  }\n\n  private maybeRetryCall(\n    pushback: number | null,\n    callback: (retried: boolean) => void\n  ) {\n    if (this.state !== 'RETRY') {\n      callback(false);\n      return;\n    }\n    if (this.attempts >= this.maxAttempts) {\n      callback(false);\n      return;\n    }\n    let retryDelayMs: number;\n    if (pushback === null) {\n      retryDelayMs = this.getNextRetryBackoffMs();\n    } else if (pushback < 0) {\n      this.state = 'TRANSPARENT_ONLY';\n      callback(false);\n      return;\n    } else {\n      retryDelayMs = pushback;\n      this.nextRetryBackoffSec = this.initialRetryBackoffSec;\n    }\n    setTimeout(() => {\n      if (this.state !== 'RETRY') {\n        callback(false);\n        return;\n      }\n      if (this.retryThrottler?.canRetryCall() ?? true) {\n        callback(true);\n        this.attempts += 1;\n        this.startNewAttempt();\n      } else {\n        this.trace('Retry attempt denied by throttling policy');\n        callback(false);\n      }\n    }, retryDelayMs);\n  }\n\n  private countActiveCalls(): number {\n    let count = 0;\n    for (const call of this.underlyingCalls) {\n      if (call?.state === 'ACTIVE') {\n        count += 1;\n      }\n    }\n    return count;\n  }\n\n  private handleProcessedStatus(\n    status: StatusObject,\n    callIndex: number,\n    pushback: number | null\n  ) {\n    switch (this.state) {\n      case 'COMMITTED':\n      case 'NO_RETRY':\n      case 'TRANSPARENT_ONLY':\n        this.commitCall(callIndex);\n        this.reportStatus(status);\n        break;\n      case 'HEDGING':\n        if (\n          this.isStatusCodeInList(\n            this.callConfig!.methodConfig.hedgingPolicy!.nonFatalStatusCodes ??\n              [],\n            status.code\n          )\n        ) {\n          this.retryThrottler?.addCallFailed();\n          let delayMs: number;\n          if (pushback === null) {\n            delayMs = 0;\n          } else if (pushback < 0) {\n            this.state = 'TRANSPARENT_ONLY';\n            this.commitCall(callIndex);\n            this.reportStatus(status);\n            return;\n          } else {\n            delayMs = pushback;\n          }\n          setTimeout(() => {\n            this.maybeStartHedgingAttempt();\n            // If after trying to start a call there are no active calls, this was the last one\n            if (this.countActiveCalls() === 0) {\n              this.commitCall(callIndex);\n              this.reportStatus(status);\n            }\n          }, delayMs);\n        } else {\n          this.commitCall(callIndex);\n          this.reportStatus(status);\n        }\n        break;\n      case 'RETRY':\n        if (\n          this.isStatusCodeInList(\n            this.callConfig!.methodConfig.retryPolicy!.retryableStatusCodes,\n            status.code\n          )\n        ) {\n          this.retryThrottler?.addCallFailed();\n          this.maybeRetryCall(pushback, retried => {\n            if (!retried) {\n              this.commitCall(callIndex);\n              this.reportStatus(status);\n            }\n          });\n        } else {\n          this.commitCall(callIndex);\n          this.reportStatus(status);\n        }\n        break;\n    }\n  }\n\n  private getPushback(metadata: Metadata): number | null {\n    const mdValue = metadata.get('grpc-retry-pushback-ms');\n    if (mdValue.length === 0) {\n      return null;\n    }\n    try {\n      return parseInt(mdValue[0] as string);\n    } catch (e) {\n      return -1;\n    }\n  }\n\n  private handleChildStatus(\n    status: StatusObjectWithProgress,\n    callIndex: number\n  ) {\n    if (this.underlyingCalls[callIndex].state === 'COMPLETED') {\n      return;\n    }\n    this.trace(\n      'state=' +\n        this.state +\n        ' handling status with progress ' +\n        status.progress +\n        ' from child [' +\n        this.underlyingCalls[callIndex].call.getCallNumber() +\n        '] in state ' +\n        this.underlyingCalls[callIndex].state\n    );\n    this.underlyingCalls[callIndex].state = 'COMPLETED';\n    if (status.code === Status.OK) {\n      this.retryThrottler?.addCallSucceeded();\n      this.commitCall(callIndex);\n      this.reportStatus(status);\n      return;\n    }\n    if (this.state === 'NO_RETRY') {\n      this.commitCall(callIndex);\n      this.reportStatus(status);\n      return;\n    }\n    if (this.state === 'COMMITTED') {\n      this.reportStatus(status);\n      return;\n    }\n    const pushback = this.getPushback(status.metadata);\n    switch (status.progress) {\n      case 'NOT_STARTED':\n        // RPC never leaves the client, always safe to retry\n        this.startNewAttempt();\n        break;\n      case 'REFUSED':\n        // RPC reaches the server library, but not the server application logic\n        if (this.transparentRetryUsed) {\n          this.handleProcessedStatus(status, callIndex, pushback);\n        } else {\n          this.transparentRetryUsed = true;\n          this.startNewAttempt();\n        }\n        break;\n      case 'DROP':\n        this.commitCall(callIndex);\n        this.reportStatus(status);\n        break;\n      case 'PROCESSED':\n        this.handleProcessedStatus(status, callIndex, pushback);\n        break;\n    }\n  }\n\n  private maybeStartHedgingAttempt() {\n    if (this.state !== 'HEDGING') {\n      return;\n    }\n    if (!this.callConfig.methodConfig.hedgingPolicy) {\n      return;\n    }\n    if (this.attempts >= this.maxAttempts) {\n      return;\n    }\n    this.attempts += 1;\n    this.startNewAttempt();\n    this.maybeStartHedgingTimer();\n  }\n\n  private maybeStartHedgingTimer() {\n    if (this.hedgingTimer) {\n      clearTimeout(this.hedgingTimer);\n    }\n    if (this.state !== 'HEDGING') {\n      return;\n    }\n    if (!this.callConfig.methodConfig.hedgingPolicy) {\n      return;\n    }\n    const hedgingPolicy = this.callConfig.methodConfig.hedgingPolicy;\n    if (this.attempts >= this.maxAttempts) {\n      return;\n    }\n    const hedgingDelayString = hedgingPolicy.hedgingDelay ?? '0s';\n    const hedgingDelaySec = Number(\n      hedgingDelayString.substring(0, hedgingDelayString.length - 1)\n    );\n    this.hedgingTimer = setTimeout(() => {\n      this.maybeStartHedgingAttempt();\n    }, hedgingDelaySec * 1000);\n    this.hedgingTimer.unref?.();\n  }\n\n  private startNewAttempt() {\n    const child = this.channel.createLoadBalancingCall(\n      this.callConfig,\n      this.methodName,\n      this.host,\n      this.credentials,\n      this.deadline\n    );\n    this.trace(\n      'Created child call [' +\n        child.getCallNumber() +\n        '] for attempt ' +\n        this.attempts\n    );\n    const index = this.underlyingCalls.length;\n    this.underlyingCalls.push({\n      state: 'ACTIVE',\n      call: child,\n      nextMessageToSend: 0,\n      startTime: new Date(),\n    });\n    const previousAttempts = this.attempts - 1;\n    const initialMetadata = this.initialMetadata!.clone();\n    if (previousAttempts > 0) {\n      initialMetadata.set(\n        PREVIONS_RPC_ATTEMPTS_METADATA_KEY,\n        `${previousAttempts}`\n      );\n    }\n    let receivedMetadata = false;\n    child.start(initialMetadata, {\n      onReceiveMetadata: metadata => {\n        this.trace(\n          'Received metadata from child [' + child.getCallNumber() + ']'\n        );\n        this.commitCall(index);\n        receivedMetadata = true;\n        if (previousAttempts > 0) {\n          metadata.set(\n            PREVIONS_RPC_ATTEMPTS_METADATA_KEY,\n            `${previousAttempts}`\n          );\n        }\n        if (this.underlyingCalls[index].state === 'ACTIVE') {\n          this.listener!.onReceiveMetadata(metadata);\n        }\n      },\n      onReceiveMessage: message => {\n        this.trace(\n          'Received message from child [' + child.getCallNumber() + ']'\n        );\n        this.commitCall(index);\n        if (this.underlyingCalls[index].state === 'ACTIVE') {\n          this.listener!.onReceiveMessage(message);\n        }\n      },\n      onReceiveStatus: status => {\n        this.trace(\n          'Received status from child [' + child.getCallNumber() + ']'\n        );\n        if (!receivedMetadata && previousAttempts > 0) {\n          status.metadata.set(\n            PREVIONS_RPC_ATTEMPTS_METADATA_KEY,\n            `${previousAttempts}`\n          );\n        }\n        this.handleChildStatus(status, index);\n      },\n    });\n    this.sendNextChildMessage(index);\n    if (this.readStarted) {\n      child.startRead();\n    }\n  }\n\n  start(metadata: Metadata, listener: InterceptingListener): void {\n    this.trace('start called');\n    this.listener = listener;\n    this.initialMetadata = metadata;\n    this.attempts += 1;\n    this.startNewAttempt();\n    this.maybeStartHedgingTimer();\n  }\n\n  private handleChildWriteCompleted(childIndex: number, messageIndex: number) {\n    this.getBufferEntry(messageIndex).callback?.();\n    this.clearSentMessages();\n    const childCall = this.underlyingCalls[childIndex];\n    childCall.nextMessageToSend += 1;\n    this.sendNextChildMessage(childIndex);\n  }\n\n  private sendNextChildMessage(childIndex: number) {\n    const childCall = this.underlyingCalls[childIndex];\n    if (childCall.state === 'COMPLETED') {\n      return;\n    }\n    const messageIndex = childCall.nextMessageToSend;\n    if (this.getBufferEntry(messageIndex)) {\n      const bufferEntry = this.getBufferEntry(messageIndex);\n      switch (bufferEntry.entryType) {\n        case 'MESSAGE':\n          childCall.call.sendMessageWithContext(\n            {\n              callback: error => {\n                // Ignore error\n                this.handleChildWriteCompleted(childIndex, messageIndex);\n              },\n            },\n            bufferEntry.message!.message\n          );\n          // Optimization: if the next entry is HALF_CLOSE, send it immediately\n          // without waiting for the message callback. This is safe because the message\n          // has already been passed to the underlying transport.\n          const nextEntry = this.getBufferEntry(messageIndex + 1);\n          if (nextEntry.entryType === 'HALF_CLOSE') {\n            this.trace(\n              'Sending halfClose immediately after message to child [' +\n                childCall.call.getCallNumber() +\n                '] - optimizing for unary/final message'\n            );\n            childCall.nextMessageToSend += 1;\n            childCall.call.halfClose();\n          }\n          break;\n        case 'HALF_CLOSE':\n          childCall.nextMessageToSend += 1;\n          childCall.call.halfClose();\n          break;\n        case 'FREED':\n          // Should not be possible\n          break;\n      }\n    }\n  }\n\n  sendMessageWithContext(context: MessageContext, message: Buffer): void {\n    this.trace('write() called with message of length ' + message.length);\n    const writeObj: WriteObject = {\n      message,\n      flags: context.flags,\n    };\n    const messageIndex = this.getNextBufferIndex();\n    const bufferEntry: WriteBufferEntry = {\n      entryType: 'MESSAGE',\n      message: writeObj,\n      allocated: this.bufferTracker.allocate(message.length, this.callNumber),\n    };\n    this.writeBuffer.push(bufferEntry);\n    if (bufferEntry.allocated) {\n      // Run this in next tick to avoid suspending the current execution context\n      // otherwise it might cause half closing the call before sending message\n      process.nextTick(() => {\n        context.callback?.();\n      });\n      for (const [callIndex, call] of this.underlyingCalls.entries()) {\n        if (\n          call.state === 'ACTIVE' &&\n          call.nextMessageToSend === messageIndex\n        ) {\n          call.call.sendMessageWithContext(\n            {\n              callback: error => {\n                // Ignore error\n                this.handleChildWriteCompleted(callIndex, messageIndex);\n              },\n            },\n            message\n          );\n        }\n      }\n    } else {\n      this.commitCallWithMostMessages();\n      // commitCallWithMostMessages can fail if we are between ping attempts\n      if (this.committedCallIndex === null) {\n        return;\n      }\n      const call = this.underlyingCalls[this.committedCallIndex];\n      bufferEntry.callback = context.callback;\n      if (call.state === 'ACTIVE' && call.nextMessageToSend === messageIndex) {\n        call.call.sendMessageWithContext(\n          {\n            callback: error => {\n              // Ignore error\n              this.handleChildWriteCompleted(this.committedCallIndex!, messageIndex);\n            },\n          },\n          message\n        );\n      }\n    }\n  }\n  startRead(): void {\n    this.trace('startRead called');\n    this.readStarted = true;\n    for (const underlyingCall of this.underlyingCalls) {\n      if (underlyingCall?.state === 'ACTIVE') {\n        underlyingCall.call.startRead();\n      }\n    }\n  }\n  halfClose(): void {\n    this.trace('halfClose called');\n    const halfCloseIndex = this.getNextBufferIndex();\n    this.writeBuffer.push({\n      entryType: 'HALF_CLOSE',\n      allocated: false,\n    });\n    for (const call of this.underlyingCalls) {\n      if (call?.state === 'ACTIVE') {\n        // Send halfClose to call when either:\n        // - nextMessageToSend === halfCloseIndex - 1: last message sent, callback pending (optimization)\n        // - nextMessageToSend === halfCloseIndex: all messages sent and acknowledged\n        if (call.nextMessageToSend === halfCloseIndex \n          || call.nextMessageToSend === halfCloseIndex - 1) {\n          this.trace(\n            'Sending halfClose immediately to child [' +\n              call.call.getCallNumber() +\n              '] - all messages already sent'\n          );\n          call.nextMessageToSend += 1;\n          call.call.halfClose();\n        }\n        // Otherwise, halfClose will be sent by sendNextChildMessage when message callbacks complete\n      }\n    }\n  }\n  setCredentials(newCredentials: CallCredentials): void {\n    throw new Error('Method not implemented.');\n  }\n  getMethod(): string {\n    return this.methodName;\n  }\n  getHost(): string {\n    return this.host;\n  }\n  getAuthContext(): AuthContext | null {\n    if (this.committedCallIndex !== null) {\n      return this.underlyingCalls[\n        this.committedCallIndex\n      ].call.getAuthContext();\n    } else {\n      return null;\n    }\n  }\n}","/*\n * Copyright 2022 gRPC authors.\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 */\n\nimport { CallCredentials } from './call-credentials';\nimport { Channel } from './channel';\nimport type { SubchannelRef } from './channelz';\nimport { ConnectivityState } from './connectivity-state';\nimport { Subchannel } from './subchannel';\n\nexport type ConnectivityStateListener = (\n  subchannel: SubchannelInterface,\n  previousState: ConnectivityState,\n  newState: ConnectivityState,\n  keepaliveTime: number,\n  errorMessage?: string\n) => void;\n\nexport type HealthListener = (healthy: boolean) => void;\n\nexport interface DataWatcher {\n  setSubchannel(subchannel: Subchannel): void;\n  destroy(): void;\n}\n\n/**\n * This is an interface for load balancing policies to use to interact with\n * subchannels. This allows load balancing policies to wrap and unwrap\n * subchannels.\n *\n * Any load balancing policy that wraps subchannels must unwrap the subchannel\n * in the picker, so that other load balancing policies consistently have\n * access to their own wrapper objects.\n */\nexport interface SubchannelInterface {\n  getConnectivityState(): ConnectivityState;\n  addConnectivityStateListener(listener: ConnectivityStateListener): void;\n  removeConnectivityStateListener(listener: ConnectivityStateListener): void;\n  startConnecting(): void;\n  getAddress(): string;\n  throttleKeepalive(newKeepaliveTime: number): void;\n  ref(): void;\n  unref(): void;\n  getChannelzRef(): SubchannelRef;\n  isHealthy(): boolean;\n  addHealthStateWatcher(listener: HealthListener): void;\n  removeHealthStateWatcher(listener: HealthListener): void;\n  addDataWatcher(dataWatcher: DataWatcher): void;\n  /**\n   * If this is a wrapper, return the wrapped subchannel, otherwise return this\n   */\n  getRealSubchannel(): Subchannel;\n  /**\n   * Returns true if this and other both proxy the same underlying subchannel.\n   * Can be used instead of directly accessing getRealSubchannel to allow mocks\n   * to avoid implementing getRealSubchannel\n   */\n  realSubchannelEquals(other: SubchannelInterface): boolean;\n  /**\n   * Get the call credentials associated with the channel credentials for this\n   * subchannel.\n   */\n  getCallCredentials(): CallCredentials;\n  /**\n   * Get a channel that can be used to make requests with just this\n   */\n  getChannel(): Channel;\n}\n\nexport abstract class BaseSubchannelWrapper implements SubchannelInterface {\n  private healthy = true;\n  private healthListeners: Set<HealthListener> = new Set();\n  private refcount = 0;\n  private dataWatchers: Set<DataWatcher> = new Set();\n  constructor(protected child: SubchannelInterface) {\n    child.addHealthStateWatcher(childHealthy => {\n      /* A change to the child health state only affects this wrapper's overall\n       * health state if this wrapper is reporting healthy. */\n      if (this.healthy) {\n        this.updateHealthListeners();\n      }\n    });\n  }\n\n  private updateHealthListeners(): void {\n    for (const listener of this.healthListeners) {\n      listener(this.isHealthy());\n    }\n  }\n\n  getConnectivityState(): ConnectivityState {\n    return this.child.getConnectivityState();\n  }\n  addConnectivityStateListener(listener: ConnectivityStateListener): void {\n    this.child.addConnectivityStateListener(listener);\n  }\n  removeConnectivityStateListener(listener: ConnectivityStateListener): void {\n    this.child.removeConnectivityStateListener(listener);\n  }\n  startConnecting(): void {\n    this.child.startConnecting();\n  }\n  getAddress(): string {\n    return this.child.getAddress();\n  }\n  throttleKeepalive(newKeepaliveTime: number): void {\n    this.child.throttleKeepalive(newKeepaliveTime);\n  }\n  ref(): void {\n    this.child.ref();\n    this.refcount += 1;\n  }\n  unref(): void {\n    this.child.unref();\n    this.refcount -= 1;\n    if (this.refcount === 0) {\n      this.destroy();\n    }\n  }\n  protected destroy() {\n    for (const watcher of this.dataWatchers) {\n      watcher.destroy();\n    }\n  }\n  getChannelzRef(): SubchannelRef {\n    return this.child.getChannelzRef();\n  }\n  isHealthy(): boolean {\n    return this.healthy && this.child.isHealthy();\n  }\n  addHealthStateWatcher(listener: HealthListener): void {\n    this.healthListeners.add(listener);\n  }\n  removeHealthStateWatcher(listener: HealthListener): void {\n    this.healthListeners.delete(listener);\n  }\n  addDataWatcher(dataWatcher: DataWatcher): void {\n    dataWatcher.setSubchannel(this.getRealSubchannel());\n    this.dataWatchers.add(dataWatcher);\n  }\n  protected setHealthy(healthy: boolean): void {\n    if (healthy !== this.healthy) {\n      this.healthy = healthy;\n      /* A change to this wrapper's health state only affects the overall\n       * reported health state if the child is healthy. */\n      if (this.child.isHealthy()) {\n        this.updateHealthListeners();\n      }\n    }\n  }\n  getRealSubchannel(): Subchannel {\n    return this.child.getRealSubchannel();\n  }\n  realSubchannelEquals(other: SubchannelInterface): boolean {\n    return this.getRealSubchannel() === other.getRealSubchannel();\n  }\n  getCallCredentials(): CallCredentials {\n    return this.child.getCallCredentials();\n  }\n  getChannel(): Channel {\n      return this.child.getChannel();\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { ChannelCredentials } from './channel-credentials';\nimport { ChannelOptions } from './channel-options';\nimport { ResolvingLoadBalancer } from './resolving-load-balancer';\nimport { SubchannelPool, getSubchannelPool } from './subchannel-pool';\nimport { ChannelControlHelper } from './load-balancer';\nimport { UnavailablePicker, Picker, QueuePicker, PickArgs, PickResult, PickResultType } from './picker';\nimport { Metadata } from './metadata';\nimport { Status, LogVerbosity, Propagate } from './constants';\nimport { FilterStackFactory } from './filter-stack';\nimport { CompressionFilterFactory } from './compression-filter';\nimport {\n  CallConfig,\n  ConfigSelector,\n  getDefaultAuthority,\n  mapUriDefaultScheme,\n} from './resolver';\nimport { trace, isTracerEnabled } from './logging';\nimport { SubchannelAddress } from './subchannel-address';\nimport { mapProxyName } from './http_proxy';\nimport { GrpcUri, parseUri, uriToString } from './uri-parser';\nimport { ServerSurfaceCall } from './server-call';\n\nimport { ConnectivityState } from './connectivity-state';\nimport {\n  ChannelInfo,\n  ChannelRef,\n  ChannelzCallTracker,\n  ChannelzChildrenTracker,\n  ChannelzTrace,\n  registerChannelzChannel,\n  SubchannelRef,\n  unregisterChannelzRef,\n} from './channelz';\nimport { LoadBalancingCall } from './load-balancing-call';\nimport { CallCredentials } from './call-credentials';\nimport { Call, CallStreamOptions, StatusObject } from './call-interface';\nimport { Deadline, deadlineToString } from './deadline';\nimport { ResolvingCall } from './resolving-call';\nimport { getNextCallNumber } from './call-number';\nimport { restrictControlPlaneStatusCode } from './control-plane-status';\nimport {\n  MessageBufferTracker,\n  RetryingCall,\n  RetryThrottler,\n} from './retrying-call';\nimport {\n  BaseSubchannelWrapper,\n  ConnectivityStateListener,\n  SubchannelInterface,\n} from './subchannel-interface';\n\n/**\n * See https://nodejs.org/api/timers.html#timers_setinterval_callback_delay_args\n */\nconst MAX_TIMEOUT_TIME = 2147483647;\n\nconst MIN_IDLE_TIMEOUT_MS = 1000;\n\n// 30 minutes\nconst DEFAULT_IDLE_TIMEOUT_MS = 30 * 60 * 1000;\n\ninterface ConnectivityStateWatcher {\n  currentState: ConnectivityState;\n  timer: NodeJS.Timeout | null;\n  callback: (error?: Error) => void;\n}\n\ninterface NoneConfigResult {\n  type: 'NONE';\n}\n\ninterface SuccessConfigResult {\n  type: 'SUCCESS';\n  config: CallConfig;\n}\n\ninterface ErrorConfigResult {\n  type: 'ERROR';\n  error: StatusObject;\n}\n\ntype GetConfigResult =\n  | NoneConfigResult\n  | SuccessConfigResult\n  | ErrorConfigResult;\n\nconst RETRY_THROTTLER_MAP: Map<string, RetryThrottler> = new Map();\n\nconst DEFAULT_RETRY_BUFFER_SIZE_BYTES = 1 << 24; // 16 MB\nconst DEFAULT_PER_RPC_RETRY_BUFFER_SIZE_BYTES = 1 << 20; // 1 MB\n\nclass ChannelSubchannelWrapper\n  extends BaseSubchannelWrapper\n  implements SubchannelInterface\n{\n  private refCount = 0;\n  private subchannelStateListener: ConnectivityStateListener;\n  constructor(\n    childSubchannel: SubchannelInterface,\n    private channel: InternalChannel\n  ) {\n    super(childSubchannel);\n    this.subchannelStateListener = (\n      subchannel,\n      previousState,\n      newState,\n      keepaliveTime\n    ) => {\n      channel.throttleKeepalive(keepaliveTime);\n    };\n  }\n\n  ref(): void {\n    if (this.refCount === 0) {\n      this.child.addConnectivityStateListener(this.subchannelStateListener);\n      this.channel.addWrappedSubchannel(this);\n    }\n    this.child.ref();\n    this.refCount += 1;\n  }\n\n  unref(): void {\n    this.child.unref();\n    this.refCount -= 1;\n    if (this.refCount <= 0) {\n      this.child.removeConnectivityStateListener(this.subchannelStateListener);\n      this.channel.removeWrappedSubchannel(this);\n    }\n  }\n}\n\nclass ShutdownPicker implements Picker {\n  pick(pickArgs: PickArgs): PickResult {\n    return {\n      pickResultType: PickResultType.DROP,\n      status: {\n        code: Status.UNAVAILABLE,\n        details: 'Channel closed before call started',\n        metadata: new Metadata()\n      },\n      subchannel: null,\n      onCallStarted: null,\n      onCallEnded: null\n    }\n  }\n}\n\nexport const SUBCHANNEL_ARGS_EXCLUDE_KEY_PREFIX = 'grpc.internal.no_subchannel';\nclass ChannelzInfoTracker {\n  readonly trace = new ChannelzTrace();\n  readonly callTracker = new ChannelzCallTracker();\n  readonly childrenTracker = new ChannelzChildrenTracker();\n  state: ConnectivityState = ConnectivityState.IDLE;\n  constructor(private target: string) {}\n\n  getChannelzInfoCallback(): () => ChannelInfo {\n    return () => {\n      return {\n        target: this.target,\n        state: this.state,\n        trace: this.trace,\n        callTracker: this.callTracker,\n        children: this.childrenTracker.getChildLists()\n      };\n    };\n  }\n}\n\nexport class InternalChannel {\n  private readonly resolvingLoadBalancer: ResolvingLoadBalancer;\n  private readonly subchannelPool: SubchannelPool;\n  private connectivityState: ConnectivityState = ConnectivityState.IDLE;\n  private currentPicker: Picker = new UnavailablePicker();\n  /**\n   * Calls queued up to get a call config. Should only be populated before the\n   * first time the resolver returns a result, which includes the ConfigSelector.\n   */\n  private configSelectionQueue: ResolvingCall[] = [];\n  private pickQueue: LoadBalancingCall[] = [];\n  private connectivityStateWatchers: ConnectivityStateWatcher[] = [];\n  private readonly defaultAuthority: string;\n  private readonly filterStackFactory: FilterStackFactory;\n  private readonly target: GrpcUri;\n  /**\n   * This timer does not do anything on its own. Its purpose is to hold the\n   * event loop open while there are any pending calls for the channel that\n   * have not yet been assigned to specific subchannels. In other words,\n   * the invariant is that callRefTimer is reffed if and only if pickQueue\n   * is non-empty. In addition, the timer is null while the state is IDLE or\n   * SHUTDOWN and there are no pending calls.\n   */\n  private callRefTimer: NodeJS.Timeout | null = null;\n  private configSelector: ConfigSelector | null = null;\n  /**\n   * This is the error from the name resolver if it failed most recently. It\n   * is only used to end calls that start while there is no config selector\n   * and the name resolver is in backoff, so it should be nulled if\n   * configSelector becomes set or the channel state becomes anything other\n   * than TRANSIENT_FAILURE.\n   */\n  private currentResolutionError: StatusObject | null = null;\n  private readonly retryBufferTracker: MessageBufferTracker;\n  private keepaliveTime: number;\n  private readonly wrappedSubchannels: Set<ChannelSubchannelWrapper> =\n    new Set();\n\n  private callCount = 0;\n  private idleTimer: NodeJS.Timeout | null = null;\n  private readonly idleTimeoutMs: number;\n  private lastActivityTimestamp: Date;\n\n  // Channelz info\n  private readonly channelzEnabled: boolean = true;\n  private readonly channelzRef: ChannelRef;\n  private readonly channelzInfoTracker: ChannelzInfoTracker;\n\n  /**\n   * Randomly generated ID to be passed to the config selector, for use by\n   * ring_hash in xDS. An integer distributed approximately uniformly between\n   * 0 and MAX_SAFE_INTEGER.\n   */\n  private readonly randomChannelId = Math.floor(\n    Math.random() * Number.MAX_SAFE_INTEGER\n  );\n\n  constructor(\n    target: string,\n    private readonly credentials: ChannelCredentials,\n    private readonly options: ChannelOptions\n  ) {\n    if (typeof target !== 'string') {\n      throw new TypeError('Channel target must be a string');\n    }\n    if (!(credentials instanceof ChannelCredentials)) {\n      throw new TypeError(\n        'Channel credentials must be a ChannelCredentials object'\n      );\n    }\n    if (options) {\n      if (typeof options !== 'object') {\n        throw new TypeError('Channel options must be an object');\n      }\n    }\n    this.channelzInfoTracker = new ChannelzInfoTracker(target);\n    const originalTargetUri = parseUri(target);\n    if (originalTargetUri === null) {\n      throw new Error(`Could not parse target name \"${target}\"`);\n    }\n    /* This ensures that the target has a scheme that is registered with the\n     * resolver */\n    const defaultSchemeMapResult = mapUriDefaultScheme(originalTargetUri);\n    if (defaultSchemeMapResult === null) {\n      throw new Error(\n        `Could not find a default scheme for target name \"${target}\"`\n      );\n    }\n\n    if (this.options['grpc.enable_channelz'] === 0) {\n      this.channelzEnabled = false;\n    }\n\n    this.channelzRef = registerChannelzChannel(\n      target,\n      this.channelzInfoTracker.getChannelzInfoCallback(),\n      this.channelzEnabled\n    );\n    if (this.channelzEnabled) {\n      this.channelzInfoTracker.trace.addTrace('CT_INFO', 'Channel created');\n    }\n\n    if (this.options['grpc.default_authority']) {\n      this.defaultAuthority = this.options['grpc.default_authority'] as string;\n    } else {\n      this.defaultAuthority = getDefaultAuthority(defaultSchemeMapResult);\n    }\n    const proxyMapResult = mapProxyName(defaultSchemeMapResult, options);\n    this.target = proxyMapResult.target;\n    this.options = Object.assign({}, this.options, proxyMapResult.extraOptions);\n\n    /* The global boolean parameter to getSubchannelPool has the inverse meaning to what\n     * the grpc.use_local_subchannel_pool channel option means. */\n    this.subchannelPool = getSubchannelPool(\n      (this.options['grpc.use_local_subchannel_pool'] ?? 0) === 0\n    );\n    this.retryBufferTracker = new MessageBufferTracker(\n      this.options['grpc.retry_buffer_size'] ?? DEFAULT_RETRY_BUFFER_SIZE_BYTES,\n      this.options['grpc.per_rpc_retry_buffer_size'] ??\n        DEFAULT_PER_RPC_RETRY_BUFFER_SIZE_BYTES\n    );\n    this.keepaliveTime = this.options['grpc.keepalive_time_ms'] ?? -1;\n    this.idleTimeoutMs = Math.max(\n      this.options['grpc.client_idle_timeout_ms'] ?? DEFAULT_IDLE_TIMEOUT_MS,\n      MIN_IDLE_TIMEOUT_MS\n    );\n    const channelControlHelper: ChannelControlHelper = {\n      createSubchannel: (\n        subchannelAddress: SubchannelAddress,\n        subchannelArgs: ChannelOptions\n      ) => {\n        const finalSubchannelArgs: ChannelOptions = {};\n        for (const [key, value] of Object.entries(subchannelArgs)) {\n          if (!key.startsWith(SUBCHANNEL_ARGS_EXCLUDE_KEY_PREFIX)) {\n            finalSubchannelArgs[key] = value;\n          }\n        }\n        const subchannel = this.subchannelPool.getOrCreateSubchannel(\n          this.target,\n          subchannelAddress,\n          finalSubchannelArgs,\n          this.credentials\n        );\n        subchannel.throttleKeepalive(this.keepaliveTime);\n        if (this.channelzEnabled) {\n          this.channelzInfoTracker.trace.addTrace(\n            'CT_INFO',\n            'Created subchannel or used existing subchannel',\n            subchannel.getChannelzRef()\n          );\n        }\n        const wrappedSubchannel = new ChannelSubchannelWrapper(\n          subchannel,\n          this\n        );\n        return wrappedSubchannel;\n      },\n      updateState: (connectivityState: ConnectivityState, picker: Picker) => {\n        this.currentPicker = picker;\n        const queueCopy = this.pickQueue.slice();\n        this.pickQueue = [];\n        if (queueCopy.length > 0) {\n          this.callRefTimerUnref();\n        }\n        for (const call of queueCopy) {\n          call.doPick();\n        }\n        this.updateState(connectivityState);\n      },\n      requestReresolution: () => {\n        // This should never be called.\n        throw new Error(\n          'Resolving load balancer should never call requestReresolution'\n        );\n      },\n      addChannelzChild: (child: ChannelRef | SubchannelRef) => {\n        if (this.channelzEnabled) {\n          this.channelzInfoTracker.childrenTracker.refChild(child);\n        }\n      },\n      removeChannelzChild: (child: ChannelRef | SubchannelRef) => {\n        if (this.channelzEnabled) {\n          this.channelzInfoTracker.childrenTracker.unrefChild(child);\n        }\n      },\n    };\n    this.resolvingLoadBalancer = new ResolvingLoadBalancer(\n      this.target,\n      channelControlHelper,\n      this.options,\n      (serviceConfig, configSelector) => {\n        if (serviceConfig.retryThrottling) {\n          RETRY_THROTTLER_MAP.set(\n            this.getTarget(),\n            new RetryThrottler(\n              serviceConfig.retryThrottling.maxTokens,\n              serviceConfig.retryThrottling.tokenRatio,\n              RETRY_THROTTLER_MAP.get(this.getTarget())\n            )\n          );\n        } else {\n          RETRY_THROTTLER_MAP.delete(this.getTarget());\n        }\n        if (this.channelzEnabled) {\n          this.channelzInfoTracker.trace.addTrace(\n            'CT_INFO',\n            'Address resolution succeeded'\n          );\n        }\n        this.configSelector?.unref();\n        this.configSelector = configSelector;\n        this.currentResolutionError = null;\n        /* We process the queue asynchronously to ensure that the corresponding\n         * load balancer update has completed. */\n        process.nextTick(() => {\n          const localQueue = this.configSelectionQueue;\n          this.configSelectionQueue = [];\n          if (localQueue.length > 0) {\n            this.callRefTimerUnref();\n          }\n          for (const call of localQueue) {\n            call.getConfig();\n          }\n        });\n      },\n      status => {\n        if (this.channelzEnabled) {\n          this.channelzInfoTracker.trace.addTrace(\n            'CT_WARNING',\n            'Address resolution failed with code ' +\n              status.code +\n              ' and details \"' +\n              status.details +\n              '\"'\n          );\n        }\n        if (this.configSelectionQueue.length > 0) {\n          this.trace(\n            'Name resolution failed with calls queued for config selection'\n          );\n        }\n        if (this.configSelector === null) {\n          this.currentResolutionError = {\n            ...restrictControlPlaneStatusCode(status.code, status.details),\n            metadata: status.metadata,\n          };\n        }\n        const localQueue = this.configSelectionQueue;\n        this.configSelectionQueue = [];\n        if (localQueue.length > 0) {\n          this.callRefTimerUnref();\n        }\n        for (const call of localQueue) {\n          call.reportResolverError(status);\n        }\n      }\n    );\n    this.filterStackFactory = new FilterStackFactory([\n      new CompressionFilterFactory(this, this.options),\n    ]);\n    this.trace(\n      'Channel constructed with options ' +\n        JSON.stringify(options, undefined, 2)\n    );\n    const error = new Error();\n    if (isTracerEnabled('channel_stacktrace')){\n      trace(\n        LogVerbosity.DEBUG,\n        'channel_stacktrace',\n        '(' +\n          this.channelzRef.id +\n          ') ' +\n          'Channel constructed \\n' +\n          error.stack?.substring(error.stack.indexOf('\\n') + 1)\n      );\n    }\n    this.lastActivityTimestamp = new Date();\n  }\n\n  private trace(text: string, verbosityOverride?: LogVerbosity) {\n    trace(\n      verbosityOverride ?? LogVerbosity.DEBUG,\n      'channel',\n      '(' + this.channelzRef.id + ') ' + uriToString(this.target) + ' ' + text\n    );\n  }\n\n  private callRefTimerRef() {\n    if (!this.callRefTimer) {\n      this.callRefTimer = setInterval(() => {}, MAX_TIMEOUT_TIME)\n    }\n    // If the hasRef function does not exist, always run the code\n    if (!this.callRefTimer.hasRef?.()) {\n      this.trace(\n        'callRefTimer.ref | configSelectionQueue.length=' +\n          this.configSelectionQueue.length +\n          ' pickQueue.length=' +\n          this.pickQueue.length\n      );\n      this.callRefTimer.ref?.();\n    }\n  }\n\n  private callRefTimerUnref() {\n    // If the timer or the hasRef function does not exist, always run the code\n    if (!this.callRefTimer?.hasRef || this.callRefTimer.hasRef()) {\n      this.trace(\n        'callRefTimer.unref | configSelectionQueue.length=' +\n          this.configSelectionQueue.length +\n          ' pickQueue.length=' +\n          this.pickQueue.length\n      );\n      this.callRefTimer?.unref?.();\n    }\n  }\n\n  private removeConnectivityStateWatcher(\n    watcherObject: ConnectivityStateWatcher\n  ) {\n    const watcherIndex = this.connectivityStateWatchers.findIndex(\n      value => value === watcherObject\n    );\n    if (watcherIndex >= 0) {\n      this.connectivityStateWatchers.splice(watcherIndex, 1);\n    }\n  }\n\n  private updateState(newState: ConnectivityState): void {\n    trace(\n      LogVerbosity.DEBUG,\n      'connectivity_state',\n      '(' +\n        this.channelzRef.id +\n        ') ' +\n        uriToString(this.target) +\n        ' ' +\n        ConnectivityState[this.connectivityState] +\n        ' -> ' +\n        ConnectivityState[newState]\n    );\n    if (this.channelzEnabled) {\n      this.channelzInfoTracker.trace.addTrace(\n        'CT_INFO',\n        'Connectivity state change to ' + ConnectivityState[newState]\n      );\n    }\n    this.connectivityState = newState;\n    this.channelzInfoTracker.state = newState;\n    const watchersCopy = this.connectivityStateWatchers.slice();\n    for (const watcherObject of watchersCopy) {\n      if (newState !== watcherObject.currentState) {\n        if (watcherObject.timer) {\n          clearTimeout(watcherObject.timer);\n        }\n        this.removeConnectivityStateWatcher(watcherObject);\n        watcherObject.callback();\n      }\n    }\n    if (newState !== ConnectivityState.TRANSIENT_FAILURE) {\n      this.currentResolutionError = null;\n    }\n  }\n\n  throttleKeepalive(newKeepaliveTime: number) {\n    if (newKeepaliveTime > this.keepaliveTime) {\n      this.keepaliveTime = newKeepaliveTime;\n      for (const wrappedSubchannel of this.wrappedSubchannels) {\n        wrappedSubchannel.throttleKeepalive(newKeepaliveTime);\n      }\n    }\n  }\n\n  addWrappedSubchannel(wrappedSubchannel: ChannelSubchannelWrapper) {\n    this.wrappedSubchannels.add(wrappedSubchannel);\n  }\n\n  removeWrappedSubchannel(wrappedSubchannel: ChannelSubchannelWrapper) {\n    this.wrappedSubchannels.delete(wrappedSubchannel);\n  }\n\n  doPick(metadata: Metadata, extraPickInfo: { [key: string]: string }) {\n    return this.currentPicker.pick({\n      metadata: metadata,\n      extraPickInfo: extraPickInfo,\n    });\n  }\n\n  queueCallForPick(call: LoadBalancingCall) {\n    this.pickQueue.push(call);\n    this.callRefTimerRef();\n  }\n\n  getConfig(method: string, metadata: Metadata): GetConfigResult {\n    if (this.connectivityState !== ConnectivityState.SHUTDOWN) {\n      this.resolvingLoadBalancer.exitIdle();\n    }\n    if (this.configSelector) {\n      return {\n        type: 'SUCCESS',\n        config: this.configSelector.invoke(method, metadata, this.randomChannelId),\n      };\n    } else {\n      if (this.currentResolutionError) {\n        return {\n          type: 'ERROR',\n          error: this.currentResolutionError,\n        };\n      } else {\n        return {\n          type: 'NONE',\n        };\n      }\n    }\n  }\n\n  queueCallForConfig(call: ResolvingCall) {\n    this.configSelectionQueue.push(call);\n    this.callRefTimerRef();\n  }\n\n  private enterIdle() {\n    this.resolvingLoadBalancer.destroy();\n    this.updateState(ConnectivityState.IDLE);\n    this.currentPicker = new QueuePicker(this.resolvingLoadBalancer);\n    if (this.idleTimer) {\n      clearTimeout(this.idleTimer);\n      this.idleTimer = null;\n    }\n    if (this.callRefTimer) {\n      clearInterval(this.callRefTimer);\n      this.callRefTimer = null;\n    }\n  }\n\n  private startIdleTimeout(timeoutMs: number) {\n    this.idleTimer = setTimeout(() => {\n      if (this.callCount > 0) {\n        /* If there is currently a call, the channel will not go idle for a\n         * period of at least idleTimeoutMs, so check again after that time.\n         */\n        this.startIdleTimeout(this.idleTimeoutMs);\n        return;\n      }\n      const now = new Date();\n      const timeSinceLastActivity =\n        now.valueOf() - this.lastActivityTimestamp.valueOf();\n      if (timeSinceLastActivity >= this.idleTimeoutMs) {\n        this.trace(\n          'Idle timer triggered after ' +\n            this.idleTimeoutMs +\n            'ms of inactivity'\n        );\n        this.enterIdle();\n      } else {\n        /* Whenever the timer fires with the latest activity being too recent,\n         * set the timer again for the time when the time since the last\n         * activity is equal to the timeout. This should result in the timer\n         * firing no more than once every idleTimeoutMs/2 on average. */\n        this.startIdleTimeout(this.idleTimeoutMs - timeSinceLastActivity);\n      }\n    }, timeoutMs);\n    this.idleTimer.unref?.();\n  }\n\n  private maybeStartIdleTimer() {\n    if (\n      this.connectivityState !== ConnectivityState.SHUTDOWN &&\n      !this.idleTimer\n    ) {\n      this.startIdleTimeout(this.idleTimeoutMs);\n    }\n  }\n\n  private onCallStart() {\n    if (this.channelzEnabled) {\n      this.channelzInfoTracker.callTracker.addCallStarted();\n    }\n    this.callCount += 1;\n  }\n\n  private onCallEnd(status: StatusObject) {\n    if (this.channelzEnabled) {\n      if (status.code === Status.OK) {\n        this.channelzInfoTracker.callTracker.addCallSucceeded();\n      } else {\n        this.channelzInfoTracker.callTracker.addCallFailed();\n      }\n    }\n    this.callCount -= 1;\n    this.lastActivityTimestamp = new Date();\n    this.maybeStartIdleTimer();\n  }\n\n  createLoadBalancingCall(\n    callConfig: CallConfig,\n    method: string,\n    host: string,\n    credentials: CallCredentials,\n    deadline: Deadline\n  ): LoadBalancingCall {\n    const callNumber = getNextCallNumber();\n    this.trace(\n      'createLoadBalancingCall [' + callNumber + '] method=\"' + method + '\"'\n    );\n    return new LoadBalancingCall(\n      this,\n      callConfig,\n      method,\n      host,\n      credentials,\n      deadline,\n      callNumber\n    );\n  }\n\n  createRetryingCall(\n    callConfig: CallConfig,\n    method: string,\n    host: string,\n    credentials: CallCredentials,\n    deadline: Deadline\n  ): RetryingCall {\n    const callNumber = getNextCallNumber();\n    this.trace(\n      'createRetryingCall [' + callNumber + '] method=\"' + method + '\"'\n    );\n    return new RetryingCall(\n      this,\n      callConfig,\n      method,\n      host,\n      credentials,\n      deadline,\n      callNumber,\n      this.retryBufferTracker,\n      RETRY_THROTTLER_MAP.get(this.getTarget())\n    );\n  }\n\n  createResolvingCall(\n    method: string,\n    deadline: Deadline,\n    host: string | null | undefined,\n    parentCall: ServerSurfaceCall | null,\n    propagateFlags: number | null | undefined\n  ): ResolvingCall {\n    const callNumber = getNextCallNumber();\n    this.trace(\n      'createResolvingCall [' +\n        callNumber +\n        '] method=\"' +\n        method +\n        '\", deadline=' +\n        deadlineToString(deadline)\n    );\n    const finalOptions: CallStreamOptions = {\n      deadline: deadline,\n      flags: propagateFlags ?? Propagate.DEFAULTS,\n      host: host ?? this.defaultAuthority,\n      parentCall: parentCall,\n    };\n\n    const call = new ResolvingCall(\n      this,\n      method,\n      finalOptions,\n      this.filterStackFactory.clone(),\n      callNumber\n    );\n\n    this.onCallStart();\n    call.addStatusWatcher(status => {\n      this.onCallEnd(status);\n    });\n    return call;\n  }\n\n  close() {\n    this.resolvingLoadBalancer.destroy();\n    this.updateState(ConnectivityState.SHUTDOWN);\n    this.currentPicker = new ShutdownPicker();\n    for (const call of this.configSelectionQueue) {\n      call.cancelWithStatus(Status.UNAVAILABLE, 'Channel closed before call started');\n    }\n    this.configSelectionQueue = [];\n    for (const call of this.pickQueue) {\n      call.cancelWithStatus(Status.UNAVAILABLE, 'Channel closed before call started');\n    }\n    this.pickQueue = [];\n    if (this.callRefTimer) {\n      clearInterval(this.callRefTimer);\n    }\n    if (this.idleTimer) {\n      clearTimeout(this.idleTimer);\n    }\n    if (this.channelzEnabled) {\n      unregisterChannelzRef(this.channelzRef);\n    }\n\n    this.subchannelPool.unrefUnusedSubchannels();\n    this.configSelector?.unref();\n    this.configSelector = null;\n  }\n\n  getTarget() {\n    return uriToString(this.target);\n  }\n\n  getConnectivityState(tryToConnect: boolean) {\n    const connectivityState = this.connectivityState;\n    if (tryToConnect) {\n      this.resolvingLoadBalancer.exitIdle();\n      this.lastActivityTimestamp = new Date();\n      this.maybeStartIdleTimer();\n    }\n    return connectivityState;\n  }\n\n  watchConnectivityState(\n    currentState: ConnectivityState,\n    deadline: Date | number,\n    callback: (error?: Error) => void\n  ): void {\n    if (this.connectivityState === ConnectivityState.SHUTDOWN) {\n      throw new Error('Channel has been shut down');\n    }\n    let timer = null;\n    if (deadline !== Infinity) {\n      const deadlineDate: Date =\n        deadline instanceof Date ? deadline : new Date(deadline);\n      const now = new Date();\n      if (deadline === -Infinity || deadlineDate <= now) {\n        process.nextTick(\n          callback,\n          new Error('Deadline passed without connectivity state change')\n        );\n        return;\n      }\n      timer = setTimeout(() => {\n        this.removeConnectivityStateWatcher(watcherObject);\n        callback(\n          new Error('Deadline passed without connectivity state change')\n        );\n      }, deadlineDate.getTime() - now.getTime());\n    }\n    const watcherObject = {\n      currentState,\n      callback,\n      timer,\n    };\n    this.connectivityStateWatchers.push(watcherObject);\n  }\n\n  /**\n   * Get the channelz reference object for this channel. The returned value is\n   * garbage if channelz is disabled for this channel.\n   * @returns\n   */\n  getChannelzRef() {\n    return this.channelzRef;\n  }\n\n  createCall(\n    method: string,\n    deadline: Deadline,\n    host: string | null | undefined,\n    parentCall: ServerSurfaceCall | null,\n    propagateFlags: number | null | undefined\n  ): Call {\n    if (typeof method !== 'string') {\n      throw new TypeError('Channel#createCall: method must be a string');\n    }\n    if (!(typeof deadline === 'number' || deadline instanceof Date)) {\n      throw new TypeError(\n        'Channel#createCall: deadline must be a number or Date'\n      );\n    }\n    if (this.connectivityState === ConnectivityState.SHUTDOWN) {\n      throw new Error('Channel has been shut down');\n    }\n    return this.createResolvingCall(\n      method,\n      deadline,\n      host,\n      parentCall,\n      propagateFlags\n    );\n  }\n\n  getOptions() {\n    return this.options;\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { ChannelCredentials } from './channel-credentials';\nimport { ChannelOptions } from './channel-options';\nimport { ServerSurfaceCall } from './server-call';\n\nimport { ConnectivityState } from './connectivity-state';\nimport type { ChannelRef } from './channelz';\nimport { Call } from './call-interface';\nimport { InternalChannel } from './internal-channel';\nimport { Deadline } from './deadline';\n\n/**\n * An interface that represents a communication channel to a server specified\n * by a given address.\n */\nexport interface Channel {\n  /**\n   * Close the channel. This has the same functionality as the existing\n   * grpc.Client.prototype.close\n   */\n  close(): void;\n  /**\n   * Return the target that this channel connects to\n   */\n  getTarget(): string;\n  /**\n   * Get the channel's current connectivity state. This method is here mainly\n   * because it is in the existing internal Channel class, and there isn't\n   * another good place to put it.\n   * @param tryToConnect If true, the channel will start connecting if it is\n   *     idle. Otherwise, idle channels will only start connecting when a\n   *     call starts.\n   */\n  getConnectivityState(tryToConnect: boolean): ConnectivityState;\n  /**\n   * Watch for connectivity state changes. This is also here mainly because\n   * it is in the existing external Channel class.\n   * @param currentState The state to watch for transitions from. This should\n   *     always be populated by calling getConnectivityState immediately\n   *     before.\n   * @param deadline A deadline for waiting for a state change\n   * @param callback Called with no error when a state change, or with an\n   *     error if the deadline passes without a state change.\n   */\n  watchConnectivityState(\n    currentState: ConnectivityState,\n    deadline: Date | number,\n    callback: (error?: Error) => void\n  ): void;\n  /**\n   * Get the channelz reference object for this channel. A request to the\n   * channelz service for the id in this object will provide information\n   * about this channel.\n   */\n  getChannelzRef(): ChannelRef;\n  /**\n   * Create a call object. Call is an opaque type that is used by the Client\n   * class. This function is called by the gRPC library when starting a\n   * request. Implementers should return an instance of Call that is returned\n   * from calling createCall on an instance of the provided Channel class.\n   * @param method The full method string to request.\n   * @param deadline The call deadline\n   * @param host A host string override for making the request\n   * @param parentCall A server call to propagate some information from\n   * @param propagateFlags A bitwise combination of elements of grpc.propagate\n   *     that indicates what information to propagate from parentCall.\n   */\n  createCall(\n    method: string,\n    deadline: Deadline,\n    host: string | null | undefined,\n    parentCall: ServerSurfaceCall | null,\n    propagateFlags: number | null | undefined\n  ): Call;\n}\n\nexport class ChannelImplementation implements Channel {\n  private internalChannel: InternalChannel;\n\n  constructor(\n    target: string,\n    credentials: ChannelCredentials,\n    options: ChannelOptions\n  ) {\n    if (typeof target !== 'string') {\n      throw new TypeError('Channel target must be a string');\n    }\n    if (!(credentials instanceof ChannelCredentials)) {\n      throw new TypeError(\n        'Channel credentials must be a ChannelCredentials object'\n      );\n    }\n    if (options) {\n      if (typeof options !== 'object') {\n        throw new TypeError('Channel options must be an object');\n      }\n    }\n\n    this.internalChannel = new InternalChannel(target, credentials, options);\n  }\n\n  close() {\n    this.internalChannel.close();\n  }\n\n  getTarget() {\n    return this.internalChannel.getTarget();\n  }\n\n  getConnectivityState(tryToConnect: boolean) {\n    return this.internalChannel.getConnectivityState(tryToConnect);\n  }\n\n  watchConnectivityState(\n    currentState: ConnectivityState,\n    deadline: Date | number,\n    callback: (error?: Error) => void\n  ): void {\n    this.internalChannel.watchConnectivityState(\n      currentState,\n      deadline,\n      callback\n    );\n  }\n\n  /**\n   * Get the channelz reference object for this channel. The returned value is\n   * garbage if channelz is disabled for this channel.\n   * @returns\n   */\n  getChannelzRef() {\n    return this.internalChannel.getChannelzRef();\n  }\n\n  createCall(\n    method: string,\n    deadline: Deadline,\n    host: string | null | undefined,\n    parentCall: ServerSurfaceCall | null,\n    propagateFlags: number | null | undefined\n  ): Call {\n    if (typeof method !== 'string') {\n      throw new TypeError('Channel#createCall: method must be a string');\n    }\n    if (!(typeof deadline === 'number' || deadline instanceof Date)) {\n      throw new TypeError(\n        'Channel#createCall: deadline must be a number or Date'\n      );\n    }\n    return this.internalChannel.createCall(\n      method,\n      deadline,\n      host,\n      parentCall,\n      propagateFlags\n    );\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { EventEmitter } from 'events';\nimport { Duplex, Readable, Writable } from 'stream';\n\nimport { Status } from './constants';\nimport type { Deserialize, Serialize } from './make-client';\nimport { Metadata } from './metadata';\nimport type { ObjectReadable, ObjectWritable } from './object-stream';\nimport type { StatusObject, PartialStatusObject } from './call-interface';\nimport type { Deadline } from './deadline';\nimport type { ServerInterceptingCallInterface } from './server-interceptors';\nimport { AuthContext } from './auth-context';\nimport { PerRequestMetricRecorder } from './orca';\n\nexport type ServerStatusResponse = Partial<StatusObject>;\n\nexport type ServerErrorResponse = ServerStatusResponse & Error;\n\nexport type ServerSurfaceCall = {\n  cancelled: boolean;\n  readonly metadata: Metadata;\n  getPeer(): string;\n  sendMetadata(responseMetadata: Metadata): void;\n  getDeadline(): Deadline;\n  getPath(): string;\n  getHost(): string;\n  getAuthContext(): AuthContext;\n  getMetricsRecorder(): PerRequestMetricRecorder;\n} & EventEmitter;\n\nexport type ServerUnaryCall<RequestType, ResponseType> = ServerSurfaceCall & {\n  request: RequestType;\n};\nexport type ServerReadableStream<RequestType, ResponseType> =\n  ServerSurfaceCall & ObjectReadable<RequestType>;\nexport type ServerWritableStream<RequestType, ResponseType> =\n  ServerSurfaceCall &\n    ObjectWritable<ResponseType> & {\n      request: RequestType;\n      end: (metadata?: Metadata) => void;\n    };\nexport type ServerDuplexStream<RequestType, ResponseType> = ServerSurfaceCall &\n  ObjectReadable<RequestType> &\n  ObjectWritable<ResponseType> & { end: (metadata?: Metadata) => void };\n\nexport function serverErrorToStatus(\n  error: ServerErrorResponse | ServerStatusResponse,\n  overrideTrailers?: Metadata | undefined\n): PartialStatusObject {\n  const status: PartialStatusObject = {\n    code: Status.UNKNOWN,\n    details: 'message' in error ? error.message : 'Unknown Error',\n    metadata: overrideTrailers ?? error.metadata ?? null,\n  };\n\n  if (\n    'code' in error &&\n    typeof error.code === 'number' &&\n    Number.isInteger(error.code)\n  ) {\n    status.code = error.code;\n\n    if ('details' in error && typeof error.details === 'string') {\n      status.details = error.details!;\n    }\n  }\n  return status;\n}\n\nexport class ServerUnaryCallImpl<RequestType, ResponseType>\n  extends EventEmitter\n  implements ServerUnaryCall<RequestType, ResponseType>\n{\n  cancelled: boolean;\n\n  constructor(\n    private path: string,\n    private call: ServerInterceptingCallInterface,\n    public metadata: Metadata,\n    public request: RequestType\n  ) {\n    super();\n    this.cancelled = false;\n  }\n\n  getPeer(): string {\n    return this.call.getPeer();\n  }\n\n  sendMetadata(responseMetadata: Metadata): void {\n    this.call.sendMetadata(responseMetadata);\n  }\n\n  getDeadline(): Deadline {\n    return this.call.getDeadline();\n  }\n\n  getPath(): string {\n    return this.path;\n  }\n\n  getHost(): string {\n    return this.call.getHost();\n  }\n\n  getAuthContext(): AuthContext {\n    return this.call.getAuthContext();\n  }\n\n  getMetricsRecorder(): PerRequestMetricRecorder {\n    return this.call.getMetricsRecorder();\n  }\n}\n\nexport class ServerReadableStreamImpl<RequestType, ResponseType>\n  extends Readable\n  implements ServerReadableStream<RequestType, ResponseType>\n{\n  cancelled: boolean;\n\n  constructor(\n    private path: string,\n    private call: ServerInterceptingCallInterface,\n    public metadata: Metadata\n  ) {\n    super({ objectMode: true });\n    this.cancelled = false;\n  }\n\n  _read(size: number) {\n    this.call.startRead();\n  }\n\n  getPeer(): string {\n    return this.call.getPeer();\n  }\n\n  sendMetadata(responseMetadata: Metadata): void {\n    this.call.sendMetadata(responseMetadata);\n  }\n\n  getDeadline(): Deadline {\n    return this.call.getDeadline();\n  }\n\n  getPath(): string {\n    return this.path;\n  }\n\n  getHost(): string {\n    return this.call.getHost();\n  }\n\n  getAuthContext(): AuthContext {\n    return this.call.getAuthContext();\n  }\n\n  getMetricsRecorder(): PerRequestMetricRecorder {\n    return this.call.getMetricsRecorder();\n  }\n}\n\nexport class ServerWritableStreamImpl<RequestType, ResponseType>\n  extends Writable\n  implements ServerWritableStream<RequestType, ResponseType>\n{\n  cancelled: boolean;\n  private trailingMetadata: Metadata;\n  private pendingStatus: PartialStatusObject = {\n    code: Status.OK,\n    details: 'OK',\n  };\n\n  constructor(\n    private path: string,\n    private call: ServerInterceptingCallInterface,\n    public metadata: Metadata,\n    public request: RequestType\n  ) {\n    super({ objectMode: true });\n    this.cancelled = false;\n    this.trailingMetadata = new Metadata();\n\n    this.on('error', err => {\n      this.pendingStatus = serverErrorToStatus(err);\n      this.end();\n    });\n  }\n\n  getPeer(): string {\n    return this.call.getPeer();\n  }\n\n  sendMetadata(responseMetadata: Metadata): void {\n    this.call.sendMetadata(responseMetadata);\n  }\n\n  getDeadline(): Deadline {\n    return this.call.getDeadline();\n  }\n\n  getPath(): string {\n    return this.path;\n  }\n\n  getHost(): string {\n    return this.call.getHost();\n  }\n\n  getAuthContext(): AuthContext {\n    return this.call.getAuthContext();\n  }\n\n  getMetricsRecorder(): PerRequestMetricRecorder {\n    return this.call.getMetricsRecorder();\n  }\n\n  _write(\n    chunk: ResponseType,\n    encoding: string,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    callback: (...args: any[]) => void\n  ) {\n    this.call.sendMessage(chunk, callback);\n  }\n\n  _final(callback: Function): void {\n    callback(null);\n    this.call.sendStatus({\n      ...this.pendingStatus,\n      metadata: this.pendingStatus.metadata ?? this.trailingMetadata,\n    });\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  end(metadata?: any) {\n    if (metadata) {\n      this.trailingMetadata = metadata;\n    }\n\n    return super.end();\n  }\n}\n\nexport class ServerDuplexStreamImpl<RequestType, ResponseType>\n  extends Duplex\n  implements ServerDuplexStream<RequestType, ResponseType>\n{\n  cancelled: boolean;\n  private trailingMetadata: Metadata;\n  private pendingStatus: PartialStatusObject = {\n    code: Status.OK,\n    details: 'OK',\n  };\n\n  constructor(\n    private path: string,\n    private call: ServerInterceptingCallInterface,\n    public metadata: Metadata\n  ) {\n    super({ objectMode: true });\n    this.cancelled = false;\n    this.trailingMetadata = new Metadata();\n\n    this.on('error', err => {\n      this.pendingStatus = serverErrorToStatus(err);\n      this.end();\n    });\n  }\n\n  getPeer(): string {\n    return this.call.getPeer();\n  }\n\n  sendMetadata(responseMetadata: Metadata): void {\n    this.call.sendMetadata(responseMetadata);\n  }\n\n  getDeadline(): Deadline {\n    return this.call.getDeadline();\n  }\n\n  getPath(): string {\n    return this.path;\n  }\n\n  getHost(): string {\n    return this.call.getHost();\n  }\n\n  getAuthContext(): AuthContext {\n    return this.call.getAuthContext();\n  }\n\n  getMetricsRecorder(): PerRequestMetricRecorder {\n    return this.call.getMetricsRecorder();\n  }\n\n  _read(size: number) {\n    this.call.startRead();\n  }\n\n  _write(\n    chunk: ResponseType,\n    encoding: string,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    callback: (...args: any[]) => void\n  ) {\n    this.call.sendMessage(chunk, callback);\n  }\n\n  _final(callback: Function): void {\n    callback(null);\n    this.call.sendStatus({\n      ...this.pendingStatus,\n      metadata: this.pendingStatus.metadata ?? this.trailingMetadata,\n    });\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  end(metadata?: any) {\n    if (metadata) {\n      this.trailingMetadata = metadata;\n    }\n\n    return super.end();\n  }\n}\n\n// Unary response callback signature.\nexport type sendUnaryData<ResponseType> = (\n  error: ServerErrorResponse | ServerStatusResponse | null,\n  value?: ResponseType | null,\n  trailer?: Metadata,\n  flags?: number\n) => void;\n\n// User provided handler for unary calls.\nexport type handleUnaryCall<RequestType, ResponseType> = (\n  call: ServerUnaryCall<RequestType, ResponseType>,\n  callback: sendUnaryData<ResponseType>\n) => void;\n\n// User provided handler for client streaming calls.\nexport type handleClientStreamingCall<RequestType, ResponseType> = (\n  call: ServerReadableStream<RequestType, ResponseType>,\n  callback: sendUnaryData<ResponseType>\n) => void;\n\n// User provided handler for server streaming calls.\nexport type handleServerStreamingCall<RequestType, ResponseType> = (\n  call: ServerWritableStream<RequestType, ResponseType>\n) => void;\n\n// User provided handler for bidirectional streaming calls.\nexport type handleBidiStreamingCall<RequestType, ResponseType> = (\n  call: ServerDuplexStream<RequestType, ResponseType>\n) => void;\n\nexport type HandleCall<RequestType, ResponseType> =\n  | handleUnaryCall<RequestType, ResponseType>\n  | handleClientStreamingCall<RequestType, ResponseType>\n  | handleServerStreamingCall<RequestType, ResponseType>\n  | handleBidiStreamingCall<RequestType, ResponseType>;\n\nexport interface UnaryHandler<RequestType, ResponseType> {\n  func: handleUnaryCall<RequestType, ResponseType>;\n  serialize: Serialize<ResponseType>;\n  deserialize: Deserialize<RequestType>;\n  type: 'unary';\n  path: string;\n}\n\nexport interface ClientStreamingHandler<RequestType, ResponseType> {\n  func: handleClientStreamingCall<RequestType, ResponseType>;\n  serialize: Serialize<ResponseType>;\n  deserialize: Deserialize<RequestType>;\n  type: 'clientStream';\n  path: string;\n}\n\nexport interface ServerStreamingHandler<RequestType, ResponseType> {\n  func: handleServerStreamingCall<RequestType, ResponseType>;\n  serialize: Serialize<ResponseType>;\n  deserialize: Deserialize<RequestType>;\n  type: 'serverStream';\n  path: string;\n}\n\nexport interface BidiStreamingHandler<RequestType, ResponseType> {\n  func: handleBidiStreamingCall<RequestType, ResponseType>;\n  serialize: Serialize<ResponseType>;\n  deserialize: Deserialize<RequestType>;\n  type: 'bidi';\n  path: string;\n}\n\nexport type Handler<RequestType, ResponseType> =\n  | UnaryHandler<RequestType, ResponseType>\n  | ClientStreamingHandler<RequestType, ResponseType>\n  | ServerStreamingHandler<RequestType, ResponseType>\n  | BidiStreamingHandler<RequestType, ResponseType>;\n\nexport type HandlerType = 'bidi' | 'clientStream' | 'serverStream' | 'unary';\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { SecureServerOptions } from 'http2';\nimport { CIPHER_SUITES, getDefaultRootsData } from './tls-helpers';\nimport { SecureContextOptions } from 'tls';\nimport { ServerInterceptor } from '.';\nimport { CaCertificateUpdate, CaCertificateUpdateListener, CertificateProvider, IdentityCertificateUpdate, IdentityCertificateUpdateListener } from './certificate-provider';\n\nexport interface KeyCertPair {\n  private_key: Buffer;\n  cert_chain: Buffer;\n}\n\nexport interface SecureContextWatcher {\n  (context: SecureContextOptions | null): void;\n}\n\nexport abstract class ServerCredentials {\n  private watchers: Set<SecureContextWatcher> = new Set();\n  private latestContextOptions: SecureContextOptions | null = null;\n  constructor(private serverConstructorOptions: SecureServerOptions | null, contextOptions?: SecureContextOptions) {\n    this.latestContextOptions = contextOptions ?? null;\n  }\n\n  _addWatcher(watcher: SecureContextWatcher) {\n    this.watchers.add(watcher);\n  }\n  _removeWatcher(watcher: SecureContextWatcher) {\n    this.watchers.delete(watcher);\n  }\n  protected getWatcherCount() {\n    return this.watchers.size;\n  }\n  protected updateSecureContextOptions(options: SecureContextOptions | null) {\n    this.latestContextOptions = options;\n    for (const watcher of this.watchers) {\n      watcher(this.latestContextOptions);\n    }\n  }\n  _isSecure(): boolean {\n    return this.serverConstructorOptions !== null;\n  }\n  _getSecureContextOptions(): SecureContextOptions | null {\n    return this.latestContextOptions;\n  }\n  _getConstructorOptions(): SecureServerOptions | null {\n    return this.serverConstructorOptions;\n  }\n  _getInterceptors(): ServerInterceptor[] {\n    return [];\n  }\n  abstract _equals(other: ServerCredentials): boolean;\n\n  static createInsecure(): ServerCredentials {\n    return new InsecureServerCredentials();\n  }\n\n  static createSsl(\n    rootCerts: Buffer | null,\n    keyCertPairs: KeyCertPair[],\n    checkClientCertificate = false\n  ): ServerCredentials {\n    if (rootCerts !== null && !Buffer.isBuffer(rootCerts)) {\n      throw new TypeError('rootCerts must be null or a Buffer');\n    }\n\n    if (!Array.isArray(keyCertPairs)) {\n      throw new TypeError('keyCertPairs must be an array');\n    }\n\n    if (typeof checkClientCertificate !== 'boolean') {\n      throw new TypeError('checkClientCertificate must be a boolean');\n    }\n\n    const cert: Buffer[] = [];\n    const key: Buffer[] = [];\n\n    for (let i = 0; i < keyCertPairs.length; i++) {\n      const pair = keyCertPairs[i];\n\n      if (pair === null || typeof pair !== 'object') {\n        throw new TypeError(`keyCertPair[${i}] must be an object`);\n      }\n\n      if (!Buffer.isBuffer(pair.private_key)) {\n        throw new TypeError(`keyCertPair[${i}].private_key must be a Buffer`);\n      }\n\n      if (!Buffer.isBuffer(pair.cert_chain)) {\n        throw new TypeError(`keyCertPair[${i}].cert_chain must be a Buffer`);\n      }\n\n      cert.push(pair.cert_chain);\n      key.push(pair.private_key);\n    }\n\n    return new SecureServerCredentials({\n      requestCert: checkClientCertificate,\n      ciphers: CIPHER_SUITES,\n    }, {\n      ca: rootCerts ?? getDefaultRootsData() ?? undefined,\n      cert,\n      key,\n    });\n  }\n}\n\nclass InsecureServerCredentials extends ServerCredentials {\n  constructor() {\n    super(null);\n  }\n\n  _getSettings(): null {\n    return null;\n  }\n\n  _equals(other: ServerCredentials): boolean {\n    return other instanceof InsecureServerCredentials;\n  }\n}\n\nclass SecureServerCredentials extends ServerCredentials {\n  private options: SecureServerOptions;\n\n  constructor(constructorOptions: SecureServerOptions, contextOptions: SecureContextOptions) {\n    super(constructorOptions, contextOptions);\n    this.options = {...constructorOptions, ...contextOptions};\n  }\n\n  /**\n   * Checks equality by checking the options that are actually set by\n   * createSsl.\n   * @param other\n   * @returns\n   */\n  _equals(other: ServerCredentials): boolean {\n    if (this === other) {\n      return true;\n    }\n    if (!(other instanceof SecureServerCredentials)) {\n      return false;\n    }\n    // options.ca equality check\n    if (Buffer.isBuffer(this.options.ca) && Buffer.isBuffer(other.options.ca)) {\n      if (!this.options.ca.equals(other.options.ca)) {\n        return false;\n      }\n    } else {\n      if (this.options.ca !== other.options.ca) {\n        return false;\n      }\n    }\n    // options.cert equality check\n    if (Array.isArray(this.options.cert) && Array.isArray(other.options.cert)) {\n      if (this.options.cert.length !== other.options.cert.length) {\n        return false;\n      }\n      for (let i = 0; i < this.options.cert.length; i++) {\n        const thisCert = this.options.cert[i];\n        const otherCert = other.options.cert[i];\n        if (Buffer.isBuffer(thisCert) && Buffer.isBuffer(otherCert)) {\n          if (!thisCert.equals(otherCert)) {\n            return false;\n          }\n        } else {\n          if (thisCert !== otherCert) {\n            return false;\n          }\n        }\n      }\n    } else {\n      if (this.options.cert !== other.options.cert) {\n        return false;\n      }\n    }\n    // options.key equality check\n    if (Array.isArray(this.options.key) && Array.isArray(other.options.key)) {\n      if (this.options.key.length !== other.options.key.length) {\n        return false;\n      }\n      for (let i = 0; i < this.options.key.length; i++) {\n        const thisKey = this.options.key[i];\n        const otherKey = other.options.key[i];\n        if (Buffer.isBuffer(thisKey) && Buffer.isBuffer(otherKey)) {\n          if (!thisKey.equals(otherKey)) {\n            return false;\n          }\n        } else {\n          if (thisKey !== otherKey) {\n            return false;\n          }\n        }\n      }\n    } else {\n      if (this.options.key !== other.options.key) {\n        return false;\n      }\n    }\n    // options.requestCert equality check\n    if (this.options.requestCert !== other.options.requestCert) {\n      return false;\n    }\n    /* ciphers is derived from a value that is constant for the process, so no\n     * equality check is needed. */\n    return true;\n  }\n}\n\nclass CertificateProviderServerCredentials extends ServerCredentials {\n  private latestCaUpdate: CaCertificateUpdate | null = null;\n  private latestIdentityUpdate: IdentityCertificateUpdate | null = null;\n  private caCertificateUpdateListener: CaCertificateUpdateListener = this.handleCaCertificateUpdate.bind(this);\n  private identityCertificateUpdateListener: IdentityCertificateUpdateListener = this.handleIdentityCertitificateUpdate.bind(this);\n  constructor(\n    private identityCertificateProvider: CertificateProvider,\n    private caCertificateProvider: CertificateProvider | null,\n    private requireClientCertificate: boolean\n  ) {\n    super({\n      requestCert: caCertificateProvider !== null,\n      rejectUnauthorized: requireClientCertificate,\n      ciphers: CIPHER_SUITES\n    });\n  }\n  _addWatcher(watcher: SecureContextWatcher): void {\n    if (this.getWatcherCount() === 0) {\n      this.caCertificateProvider?.addCaCertificateListener(this.caCertificateUpdateListener);\n      this.identityCertificateProvider.addIdentityCertificateListener(this.identityCertificateUpdateListener);\n    }\n    super._addWatcher(watcher);\n  }\n  _removeWatcher(watcher: SecureContextWatcher): void {\n    super._removeWatcher(watcher);\n    if (this.getWatcherCount() === 0) {\n      this.caCertificateProvider?.removeCaCertificateListener(this.caCertificateUpdateListener);\n      this.identityCertificateProvider.removeIdentityCertificateListener(this.identityCertificateUpdateListener);\n    }\n  }\n  _equals(other: ServerCredentials): boolean {\n    if (this === other) {\n      return true;\n    }\n    if (!(other instanceof CertificateProviderServerCredentials)) {\n      return false;\n    }\n    return (\n      this.caCertificateProvider === other.caCertificateProvider &&\n      this.identityCertificateProvider === other.identityCertificateProvider &&\n      this.requireClientCertificate === other.requireClientCertificate\n    )\n  }\n\n  private calculateSecureContextOptions(): SecureContextOptions | null {\n    if (this.latestIdentityUpdate === null) {\n      return null;\n    }\n    if (this.caCertificateProvider !== null && this.latestCaUpdate === null) {\n      return null;\n    }\n    return {\n      ca: this.latestCaUpdate?.caCertificate,\n      cert: [this.latestIdentityUpdate.certificate],\n      key: [this.latestIdentityUpdate.privateKey],\n    };\n  }\n\n  private finalizeUpdate() {\n    const secureContextOptions = this.calculateSecureContextOptions();\n    this.updateSecureContextOptions(secureContextOptions);\n  }\n\n  private handleCaCertificateUpdate(update: CaCertificateUpdate | null) {\n    this.latestCaUpdate = update;\n    this.finalizeUpdate();\n  }\n\n  private handleIdentityCertitificateUpdate(update: IdentityCertificateUpdate | null) {\n    this.latestIdentityUpdate = update;\n    this.finalizeUpdate();\n  }\n}\n\nexport function createCertificateProviderServerCredentials(\n  caCertificateProvider: CertificateProvider,\n  identityCertificateProvider: CertificateProvider | null,\n  requireClientCertificate: boolean\n) {\n  return new CertificateProviderServerCredentials(\n    caCertificateProvider,\n    identityCertificateProvider,\n    requireClientCertificate);\n}\n\nclass InterceptorServerCredentials extends ServerCredentials {\n  constructor(private readonly childCredentials: ServerCredentials, private readonly interceptors: ServerInterceptor[]) {\n    super({});\n  }\n  _isSecure(): boolean {\n    return this.childCredentials._isSecure();\n  }\n  _equals(other: ServerCredentials): boolean {\n    if (!(other instanceof InterceptorServerCredentials)) {\n      return false;\n    }\n    if (!(this.childCredentials._equals(other.childCredentials))) {\n      return false;\n    }\n    if (this.interceptors.length !== other.interceptors.length) {\n      return false;\n    }\n    for (let i = 0; i < this.interceptors.length; i++) {\n      if (this.interceptors[i] !== other.interceptors[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n  override _getInterceptors(): ServerInterceptor[] {\n    return this.interceptors;\n  }\n  override _addWatcher(watcher: SecureContextWatcher): void {\n    this.childCredentials._addWatcher(watcher);\n  }\n  override _removeWatcher(watcher: SecureContextWatcher): void {\n    this.childCredentials._removeWatcher(watcher);\n  }\n  override _getConstructorOptions(): SecureServerOptions | null {\n    return this.childCredentials._getConstructorOptions();\n  }\n  override _getSecureContextOptions(): SecureContextOptions | null {\n    return this.childCredentials._getSecureContextOptions();\n  }\n}\n\nexport function createServerCredentialsWithInterceptors(credentials: ServerCredentials, interceptors: ServerInterceptor[]): ServerCredentials {\n  return new InterceptorServerCredentials(credentials, interceptors);\n}\n","/*\n * Copyright 2022 gRPC authors.\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 */\n\nexport interface Duration {\n  seconds: number;\n  nanos: number;\n}\n\nexport interface DurationMessage {\n  seconds: string;\n  nanos: number;\n}\n\nexport function durationMessageToDuration(message: DurationMessage): Duration {\n  return {\n    seconds: Number.parseInt(message.seconds),\n    nanos: message.nanos\n  };\n}\n\nexport function msToDuration(millis: number): Duration {\n  return {\n    seconds: (millis / 1000) | 0,\n    nanos: ((millis % 1000) * 1_000_000) | 0,\n  };\n}\n\nexport function durationToMs(duration: Duration): number {\n  return (duration.seconds * 1000 + duration.nanos / 1_000_000) | 0;\n}\n\nexport function isDuration(value: any): value is Duration {\n  return typeof value.seconds === 'number' && typeof value.nanos === 'number';\n}\n\nexport function isDurationMessage(value: any): value is DurationMessage {\n  return typeof value.seconds === 'string' && typeof value.nanos === 'number';\n}\n\nconst durationRegex = /^(\\d+)(?:\\.(\\d+))?s$/;\nexport function parseDuration(value: string): Duration | null {\n  const match = value.match(durationRegex);\n  if (!match) {\n    return null;\n  }\n  return {\n    seconds: Number.parseInt(match[1], 10),\n    nanos: match[2] ? Number.parseInt(match[2].padEnd(9, '0'), 10) : 0\n  };\n}\n\nexport function durationToString(duration: Duration): string {\n  if (duration.nanos === 0) {\n    return `${duration.seconds}s`;\n  }\n  let scaleFactor: number;\n  if (duration.nanos % 1_000_000 === 0) {\n    scaleFactor = 1_000_000;\n  } else if (duration.nanos % 1_000 === 0) {\n    scaleFactor = 1_000;\n  } else {\n    scaleFactor = 1;\n  }\n  return `${duration.seconds}.${duration.nanos/scaleFactor}s`;\n}\n","/*\n * Copyright 2025 gRPC authors.\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 */\n\nimport { OrcaLoadReport, OrcaLoadReport__Output } from \"./generated/xds/data/orca/v3/OrcaLoadReport\";\n\nimport type { loadSync } from '@grpc/proto-loader';\nimport { ProtoGrpcType as OrcaProtoGrpcType } from \"./generated/orca\";\nimport { loadPackageDefinition } from \"./make-client\";\nimport { OpenRcaServiceClient, OpenRcaServiceHandlers } from \"./generated/xds/service/orca/v3/OpenRcaService\";\nimport { durationMessageToDuration, durationToMs, msToDuration } from \"./duration\";\nimport { Server } from \"./server\";\nimport { ChannelCredentials } from \"./channel-credentials\";\nimport { Channel } from \"./channel\";\nimport { OnCallEnded } from \"./picker\";\nimport { DataProducer, Subchannel } from \"./subchannel\";\nimport { BaseSubchannelWrapper, DataWatcher, SubchannelInterface } from \"./subchannel-interface\";\nimport { ClientReadableStream, ServiceError } from \"./call\";\nimport { Status } from \"./constants\";\nimport { BackoffTimeout } from \"./backoff-timeout\";\nimport { ConnectivityState } from \"./connectivity-state\";\n\nconst loadedOrcaProto: OrcaProtoGrpcType | null = null;\nfunction loadOrcaProto(): OrcaProtoGrpcType {\n  if (loadedOrcaProto) {\n    return loadedOrcaProto;\n  }\n  /* The purpose of this complexity is to avoid loading @grpc/proto-loader at\n   * runtime for users who will not use/enable ORCA. */\n  const loaderLoadSync = require('@grpc/proto-loader')\n    .loadSync as typeof loadSync;\n  const loadedProto = loaderLoadSync('xds/service/orca/v3/orca.proto', {\n    keepCase: true,\n    longs: String,\n    enums: String,\n    defaults: true,\n    oneofs: true,\n    includeDirs: [\n      `${__dirname}/../../proto/xds`,\n      `${__dirname}/../../proto/protoc-gen-validate`\n    ],\n  });\n  return loadPackageDefinition(loadedProto) as unknown as OrcaProtoGrpcType;\n}\n\n/**\n * ORCA metrics recorder for a single request\n */\nexport class PerRequestMetricRecorder {\n  private message: OrcaLoadReport = {};\n\n  /**\n   * Records a request cost metric measurement for the call.\n   * @param name\n   * @param value\n   */\n  recordRequestCostMetric(name: string, value: number) {\n    if (!this.message.request_cost) {\n      this.message.request_cost = {};\n    }\n    this.message.request_cost[name] = value;\n  }\n\n  /**\n   * Records a request cost metric measurement for the call.\n   * @param name\n   * @param value\n   */\n  recordUtilizationMetric(name: string, value: number) {\n    if (!this.message.utilization) {\n      this.message.utilization = {};\n    }\n    this.message.utilization[name] = value;\n  }\n\n  /**\n   * Records an opaque named metric measurement for the call.\n   * @param name\n   * @param value\n   */\n  recordNamedMetric(name: string, value: number) {\n    if (!this.message.named_metrics) {\n      this.message.named_metrics = {};\n    }\n    this.message.named_metrics[name] = value;\n  }\n\n  /**\n   * Records the CPU utilization metric measurement for the call.\n   * @param value\n   */\n  recordCPUUtilizationMetric(value: number) {\n    this.message.cpu_utilization = value;\n  }\n\n  /**\n   * Records the memory utilization metric measurement for the call.\n   * @param value\n   */\n  recordMemoryUtilizationMetric(value: number) {\n    this.message.mem_utilization = value;\n  }\n\n  /**\n   * Records the memory utilization metric measurement for the call.\n   * @param value\n   */\n  recordApplicationUtilizationMetric(value: number) {\n    this.message.application_utilization = value;\n  }\n\n  /**\n   * Records the queries per second measurement.\n   * @param value\n   */\n  recordQpsMetric(value: number) {\n    this.message.rps_fractional = value;\n  }\n\n  /**\n   * Records the errors per second measurement.\n   * @param value\n   */\n  recordEpsMetric(value: number) {\n    this.message.eps = value;\n  }\n\n  serialize(): Buffer {\n    const orcaProto = loadOrcaProto();\n    return orcaProto.xds.data.orca.v3.OrcaLoadReport.serialize(this.message);\n  }\n}\n\nconst DEFAULT_REPORT_INTERVAL_MS = 30_000;\n\nexport class ServerMetricRecorder {\n  private message: OrcaLoadReport = {};\n\n  private serviceImplementation: OpenRcaServiceHandlers = {\n    StreamCoreMetrics: call => {\n      const reportInterval = call.request.report_interval ?\n        durationToMs(durationMessageToDuration(call.request.report_interval)) :\n        DEFAULT_REPORT_INTERVAL_MS;\n      const reportTimer = setInterval(() => {\n        call.write(this.message);\n      }, reportInterval);\n      call.on('cancelled', () => {\n        clearInterval(reportTimer);\n      })\n    }\n  }\n\n  putUtilizationMetric(name: string, value: number) {\n    if (!this.message.utilization) {\n      this.message.utilization = {};\n    }\n    this.message.utilization[name] = value;\n  }\n\n  setAllUtilizationMetrics(metrics: {[name: string]: number}) {\n    this.message.utilization = {...metrics};\n  }\n\n  deleteUtilizationMetric(name: string) {\n    delete this.message.utilization?.[name];\n  }\n\n  setCpuUtilizationMetric(value: number) {\n    this.message.cpu_utilization = value;\n  }\n\n  deleteCpuUtilizationMetric() {\n    delete this.message.cpu_utilization;\n  }\n\n  setApplicationUtilizationMetric(value: number) {\n    this.message.application_utilization = value;\n  }\n\n  deleteApplicationUtilizationMetric() {\n    delete this.message.application_utilization;\n  }\n\n  setQpsMetric(value: number) {\n    this.message.rps_fractional = value;\n  }\n\n  deleteQpsMetric() {\n    delete this.message.rps_fractional;\n  }\n\n  setEpsMetric(value: number) {\n    this.message.eps = value;\n  }\n\n  deleteEpsMetric() {\n    delete this.message.eps;\n  }\n\n  addToServer(server: Server) {\n    const serviceDefinition = loadOrcaProto().xds.service.orca.v3.OpenRcaService.service;\n    server.addService(serviceDefinition, this.serviceImplementation);\n  }\n}\n\nexport function createOrcaClient(channel: Channel): OpenRcaServiceClient {\n  const ClientClass = loadOrcaProto().xds.service.orca.v3.OpenRcaService;\n  return new ClientClass('unused', ChannelCredentials.createInsecure(), {channelOverride: channel});\n}\n\nexport type MetricsListener = (loadReport: OrcaLoadReport__Output) => void;\n\nexport const GRPC_METRICS_HEADER = 'endpoint-load-metrics-bin';\nconst PARSED_LOAD_REPORT_KEY = 'grpc_orca_load_report';\n\n/**\n * Create an onCallEnded callback for use in a picker.\n * @param listener The listener to handle metrics, whenever they are provided.\n * @param previousOnCallEnded The previous onCallEnded callback to propagate\n * to, if applicable.\n * @returns\n */\nexport function createMetricsReader(listener: MetricsListener, previousOnCallEnded: OnCallEnded | null): OnCallEnded {\n  return (code, details, metadata) => {\n    let parsedLoadReport = metadata.getOpaque(PARSED_LOAD_REPORT_KEY) as (OrcaLoadReport__Output | undefined);\n    if (parsedLoadReport) {\n      listener(parsedLoadReport);\n    } else {\n      const serializedLoadReport = metadata.get(GRPC_METRICS_HEADER);\n      if (serializedLoadReport.length > 0) {\n        const orcaProto = loadOrcaProto();\n        parsedLoadReport = orcaProto.xds.data.orca.v3.OrcaLoadReport.deserialize(serializedLoadReport[0] as Buffer);\n        listener(parsedLoadReport);\n        metadata.setOpaque(PARSED_LOAD_REPORT_KEY, parsedLoadReport);\n      }\n    }\n    if (previousOnCallEnded) {\n      previousOnCallEnded(code, details, metadata);\n    }\n  }\n}\n\nconst DATA_PRODUCER_KEY = 'orca_oob_metrics';\n\nclass OobMetricsDataWatcher implements DataWatcher {\n  private dataProducer: DataProducer | null = null;\n  constructor(private metricsListener: MetricsListener, private intervalMs: number) {}\n  setSubchannel(subchannel: Subchannel): void {\n    const producer = subchannel.getOrCreateDataProducer(DATA_PRODUCER_KEY, createOobMetricsDataProducer);\n    this.dataProducer = producer;\n    producer.addDataWatcher(this);\n  }\n  destroy(): void {\n    this.dataProducer?.removeDataWatcher(this);\n  }\n  getInterval(): number {\n    return this.intervalMs;\n  }\n  onMetricsUpdate(metrics: OrcaLoadReport__Output) {\n    this.metricsListener(metrics);\n  }\n}\n\nclass OobMetricsDataProducer implements DataProducer {\n  private dataWatchers: Set<OobMetricsDataWatcher> = new Set();\n  private orcaSupported = true;\n  private client: OpenRcaServiceClient;\n  private metricsCall: ClientReadableStream<OrcaLoadReport__Output> | null = null;\n  private currentInterval = Infinity;\n  private backoffTimer = new BackoffTimeout(() => this.updateMetricsSubscription());\n  private subchannelStateListener = () => this.updateMetricsSubscription();\n  constructor(private subchannel: Subchannel) {\n    const channel = subchannel.getChannel();\n    this.client = createOrcaClient(channel);\n    subchannel.addConnectivityStateListener(this.subchannelStateListener);\n  }\n  addDataWatcher(dataWatcher: OobMetricsDataWatcher): void {\n    this.dataWatchers.add(dataWatcher);\n    this.updateMetricsSubscription();\n  }\n  removeDataWatcher(dataWatcher: OobMetricsDataWatcher): void {\n    this.dataWatchers.delete(dataWatcher);\n    if (this.dataWatchers.size === 0) {\n      this.subchannel.removeDataProducer(DATA_PRODUCER_KEY);\n      this.metricsCall?.cancel();\n      this.metricsCall = null;\n      this.client.close();\n      this.subchannel.removeConnectivityStateListener(this.subchannelStateListener);\n    } else {\n      this.updateMetricsSubscription();\n    }\n  }\n  private updateMetricsSubscription() {\n    if (this.dataWatchers.size === 0 || !this.orcaSupported || this.subchannel.getConnectivityState() !== ConnectivityState.READY) {\n      return;\n    }\n    const newInterval = Math.min(...Array.from(this.dataWatchers).map(watcher => watcher.getInterval()));\n    if (!this.metricsCall || newInterval !== this.currentInterval) {\n      this.metricsCall?.cancel();\n      this.currentInterval = newInterval;\n      const metricsCall = this.client.streamCoreMetrics({report_interval: msToDuration(newInterval)});\n      this.metricsCall = metricsCall;\n      metricsCall.on('data', (report: OrcaLoadReport__Output) => {\n        this.dataWatchers.forEach(watcher => {\n          watcher.onMetricsUpdate(report);\n        });\n      });\n      metricsCall.on('error', (error: ServiceError) => {\n        this.metricsCall = null;\n        if (error.code === Status.UNIMPLEMENTED) {\n          this.orcaSupported = false;\n          return;\n        }\n        if (error.code === Status.CANCELLED) {\n          return;\n        }\n        this.backoffTimer.runOnce();\n      });\n    }\n  }\n}\n\nexport class OrcaOobMetricsSubchannelWrapper extends BaseSubchannelWrapper {\n  constructor(child: SubchannelInterface, metricsListener: MetricsListener, intervalMs: number) {\n    super(child);\n    this.addDataWatcher(new OobMetricsDataWatcher(metricsListener, intervalMs));\n  }\n\n  getWrappedSubchannel(): SubchannelInterface {\n    return this.child;\n  }\n}\n\nfunction createOobMetricsDataProducer(subchannel: Subchannel) {\n  return new OobMetricsDataProducer(subchannel);\n}\n","/*\n * Copyright 2024 gRPC authors.\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 */\n\nimport { PartialStatusObject } from './call-interface';\nimport { ServerMethodDefinition } from './make-client';\nimport { Metadata } from './metadata';\nimport { ChannelOptions } from './channel-options';\nimport { Handler } from './server-call';\nimport { Deadline } from './deadline';\nimport {\n  DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH,\n  DEFAULT_MAX_SEND_MESSAGE_LENGTH,\n  LogVerbosity,\n  Status,\n} from './constants';\nimport * as http2 from 'http2';\nimport { getErrorMessage } from './error';\nimport * as zlib from 'zlib';\nimport { StreamDecoder } from './stream-decoder';\nimport { CallEventTracker } from './transport';\nimport * as logging from './logging';\nimport { AuthContext } from './auth-context';\nimport { TLSSocket } from 'tls';\nimport { GRPC_METRICS_HEADER, PerRequestMetricRecorder } from './orca';\n\nconst TRACER_NAME = 'server_call';\n\nfunction trace(text: string) {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\nexport interface ServerMetadataListener {\n  (metadata: Metadata, next: (metadata: Metadata) => void): void;\n}\n\nexport interface ServerMessageListener {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  (message: any, next: (message: any) => void): void;\n}\n\nexport interface ServerHalfCloseListener {\n  (next: () => void): void;\n}\n\nexport interface ServerCancelListener {\n  (): void;\n}\n\nexport interface FullServerListener {\n  onReceiveMetadata: ServerMetadataListener;\n  onReceiveMessage: ServerMessageListener;\n  onReceiveHalfClose: ServerHalfCloseListener;\n  onCancel: ServerCancelListener;\n}\n\nexport type ServerListener = Partial<FullServerListener>;\n\nexport class ServerListenerBuilder {\n  private metadata: ServerMetadataListener | undefined = undefined;\n  private message: ServerMessageListener | undefined = undefined;\n  private halfClose: ServerHalfCloseListener | undefined = undefined;\n  private cancel: ServerCancelListener | undefined = undefined;\n\n  withOnReceiveMetadata(onReceiveMetadata: ServerMetadataListener): this {\n    this.metadata = onReceiveMetadata;\n    return this;\n  }\n\n  withOnReceiveMessage(onReceiveMessage: ServerMessageListener): this {\n    this.message = onReceiveMessage;\n    return this;\n  }\n\n  withOnReceiveHalfClose(onReceiveHalfClose: ServerHalfCloseListener): this {\n    this.halfClose = onReceiveHalfClose;\n    return this;\n  }\n\n  withOnCancel(onCancel: ServerCancelListener): this {\n    this.cancel = onCancel;\n    return this;\n  }\n\n  build(): ServerListener {\n    return {\n      onReceiveMetadata: this.metadata,\n      onReceiveMessage: this.message,\n      onReceiveHalfClose: this.halfClose,\n      onCancel: this.cancel,\n    };\n  }\n}\n\nexport interface InterceptingServerListener {\n  onReceiveMetadata(metadata: Metadata): void;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  onReceiveMessage(message: any): void;\n  onReceiveHalfClose(): void;\n  onCancel(): void;\n}\n\nexport function isInterceptingServerListener(\n  listener: ServerListener | InterceptingServerListener\n): listener is InterceptingServerListener {\n  return (\n    listener.onReceiveMetadata !== undefined &&\n    listener.onReceiveMetadata.length === 1\n  );\n}\n\nclass InterceptingServerListenerImpl implements InterceptingServerListener {\n  /**\n   * Once the call is cancelled, ignore all other events.\n   */\n  private cancelled = false;\n  private processingMetadata = false;\n  private hasPendingMessage = false;\n  private pendingMessage: any = null;\n  private processingMessage = false;\n  private hasPendingHalfClose = false;\n\n  constructor(\n    private listener: FullServerListener,\n    private nextListener: InterceptingServerListener\n  ) {}\n\n  private processPendingMessage() {\n    if (this.hasPendingMessage) {\n      this.nextListener.onReceiveMessage(this.pendingMessage);\n      this.pendingMessage = null;\n      this.hasPendingMessage = false;\n    }\n  }\n\n  private processPendingHalfClose() {\n    if (this.hasPendingHalfClose) {\n      this.nextListener.onReceiveHalfClose();\n      this.hasPendingHalfClose = false;\n    }\n  }\n\n  onReceiveMetadata(metadata: Metadata): void {\n    if (this.cancelled) {\n      return;\n    }\n    this.processingMetadata = true;\n    this.listener.onReceiveMetadata(metadata, interceptedMetadata => {\n      this.processingMetadata = false;\n      if (this.cancelled) {\n        return;\n      }\n      this.nextListener.onReceiveMetadata(interceptedMetadata);\n      this.processPendingMessage();\n      this.processPendingHalfClose();\n    });\n  }\n  onReceiveMessage(message: any): void {\n    if (this.cancelled) {\n      return;\n    }\n    this.processingMessage = true;\n    this.listener.onReceiveMessage(message, msg => {\n      this.processingMessage = false;\n      if (this.cancelled) {\n        return;\n      }\n      if (this.processingMetadata) {\n        this.pendingMessage = msg;\n        this.hasPendingMessage = true;\n      } else {\n        this.nextListener.onReceiveMessage(msg);\n        this.processPendingHalfClose();\n      }\n    });\n  }\n  onReceiveHalfClose(): void {\n    if (this.cancelled) {\n      return;\n    }\n    this.listener.onReceiveHalfClose(() => {\n      if (this.cancelled) {\n        return;\n      }\n      if (this.processingMetadata || this.processingMessage) {\n        this.hasPendingHalfClose = true;\n      } else {\n        this.nextListener.onReceiveHalfClose();\n      }\n    });\n  }\n  onCancel(): void {\n    this.cancelled = true;\n    this.listener.onCancel();\n    this.nextListener.onCancel();\n  }\n}\n\nexport interface StartResponder {\n  (next: (listener?: ServerListener) => void): void;\n}\n\nexport interface MetadataResponder {\n  (metadata: Metadata, next: (metadata: Metadata) => void): void;\n}\n\nexport interface MessageResponder {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  (message: any, next: (message: any) => void): void;\n}\n\nexport interface StatusResponder {\n  (\n    status: PartialStatusObject,\n    next: (status: PartialStatusObject) => void\n  ): void;\n}\n\nexport interface FullResponder {\n  start: StartResponder;\n  sendMetadata: MetadataResponder;\n  sendMessage: MessageResponder;\n  sendStatus: StatusResponder;\n}\n\nexport type Responder = Partial<FullResponder>;\n\nexport class ResponderBuilder {\n  private start: StartResponder | undefined = undefined;\n  private metadata: MetadataResponder | undefined = undefined;\n  private message: MessageResponder | undefined = undefined;\n  private status: StatusResponder | undefined = undefined;\n\n  withStart(start: StartResponder): this {\n    this.start = start;\n    return this;\n  }\n\n  withSendMetadata(sendMetadata: MetadataResponder): this {\n    this.metadata = sendMetadata;\n    return this;\n  }\n\n  withSendMessage(sendMessage: MessageResponder): this {\n    this.message = sendMessage;\n    return this;\n  }\n\n  withSendStatus(sendStatus: StatusResponder): this {\n    this.status = sendStatus;\n    return this;\n  }\n\n  build(): Responder {\n    return {\n      start: this.start,\n      sendMetadata: this.metadata,\n      sendMessage: this.message,\n      sendStatus: this.status,\n    };\n  }\n}\n\nconst defaultServerListener: FullServerListener = {\n  onReceiveMetadata: (metadata, next) => {\n    next(metadata);\n  },\n  onReceiveMessage: (message, next) => {\n    next(message);\n  },\n  onReceiveHalfClose: next => {\n    next();\n  },\n  onCancel: () => {},\n};\n\nconst defaultResponder: FullResponder = {\n  start: next => {\n    next();\n  },\n  sendMetadata: (metadata, next) => {\n    next(metadata);\n  },\n  sendMessage: (message, next) => {\n    next(message);\n  },\n  sendStatus: (status, next) => {\n    next(status);\n  },\n};\n\nexport interface ConnectionInfo {\n  localAddress?: string | undefined;\n  localPort?: number | undefined;\n  remoteAddress?: string | undefined;\n  remotePort?: number | undefined;\n}\n\nexport interface ServerInterceptingCallInterface {\n  /**\n   * Register the listener to handle inbound events.\n   */\n  start(listener: InterceptingServerListener): void;\n  /**\n   * Send response metadata.\n   */\n  sendMetadata(metadata: Metadata): void;\n  /**\n   * Send a response message.\n   */\n  sendMessage(message: any, callback: () => void): void;\n  /**\n   * End the call by sending this status.\n   */\n  sendStatus(status: PartialStatusObject): void;\n  /**\n   * Start a single read, eventually triggering either listener.onReceiveMessage or listener.onReceiveHalfClose.\n   */\n  startRead(): void;\n  /**\n   * Return the peer address of the client making the request, if known, or \"unknown\" otherwise\n   */\n  getPeer(): string;\n  /**\n   * Return the call deadline set by the client. The value is Infinity if there is no deadline.\n   */\n  getDeadline(): Deadline;\n  /**\n   * Return the host requested by the client in the \":authority\" header.\n   */\n  getHost(): string;\n  /**\n   * Return the auth context of the connection the call is associated with.\n   */\n  getAuthContext(): AuthContext;\n  /**\n   * Return information about the connection used to make the call.\n   */\n  getConnectionInfo(): ConnectionInfo;\n  /**\n   * Get the metrics recorder for this call. Metrics will not be sent unless\n   * the server was constructed with the `grpc.server_call_metric_recording`\n   * option.\n   */\n  getMetricsRecorder(): PerRequestMetricRecorder;\n}\n\nexport class ServerInterceptingCall implements ServerInterceptingCallInterface {\n  private responder: FullResponder;\n  private processingMetadata = false;\n  private sentMetadata = false;\n  private processingMessage = false;\n  private pendingMessage: any = null;\n  private pendingMessageCallback: (() => void) | null = null;\n  private pendingStatus: PartialStatusObject | null = null;\n  constructor(\n    private nextCall: ServerInterceptingCallInterface,\n    responder?: Responder\n  ) {\n    this.responder = {\n      start: responder?.start ?? defaultResponder.start,\n      sendMetadata: responder?.sendMetadata ?? defaultResponder.sendMetadata,\n      sendMessage: responder?.sendMessage ?? defaultResponder.sendMessage,\n      sendStatus: responder?.sendStatus ?? defaultResponder.sendStatus,\n    };\n  }\n\n  private processPendingMessage() {\n    if (this.pendingMessageCallback) {\n      this.nextCall.sendMessage(\n        this.pendingMessage,\n        this.pendingMessageCallback\n      );\n      this.pendingMessage = null;\n      this.pendingMessageCallback = null;\n    }\n  }\n\n  private processPendingStatus() {\n    if (this.pendingStatus) {\n      this.nextCall.sendStatus(this.pendingStatus);\n      this.pendingStatus = null;\n    }\n  }\n\n  start(listener: InterceptingServerListener): void {\n    this.responder.start(interceptedListener => {\n      const fullInterceptedListener: FullServerListener = {\n        onReceiveMetadata:\n          interceptedListener?.onReceiveMetadata ??\n          defaultServerListener.onReceiveMetadata,\n        onReceiveMessage:\n          interceptedListener?.onReceiveMessage ??\n          defaultServerListener.onReceiveMessage,\n        onReceiveHalfClose:\n          interceptedListener?.onReceiveHalfClose ??\n          defaultServerListener.onReceiveHalfClose,\n        onCancel:\n          interceptedListener?.onCancel ?? defaultServerListener.onCancel,\n      };\n      const finalInterceptingListener = new InterceptingServerListenerImpl(\n        fullInterceptedListener,\n        listener\n      );\n      this.nextCall.start(finalInterceptingListener);\n    });\n  }\n  sendMetadata(metadata: Metadata): void {\n    this.processingMetadata = true;\n    this.sentMetadata = true;\n    this.responder.sendMetadata(metadata, interceptedMetadata => {\n      this.processingMetadata = false;\n      this.nextCall.sendMetadata(interceptedMetadata);\n      this.processPendingMessage();\n      this.processPendingStatus();\n    });\n  }\n  sendMessage(message: any, callback: () => void): void {\n    this.processingMessage = true;\n    if (!this.sentMetadata) {\n      this.sendMetadata(new Metadata());\n    }\n    this.responder.sendMessage(message, interceptedMessage => {\n      this.processingMessage = false;\n      if (this.processingMetadata) {\n        this.pendingMessage = interceptedMessage;\n        this.pendingMessageCallback = callback;\n      } else {\n        this.nextCall.sendMessage(interceptedMessage, callback);\n      }\n    });\n  }\n  sendStatus(status: PartialStatusObject): void {\n    this.responder.sendStatus(status, interceptedStatus => {\n      if (this.processingMetadata || this.processingMessage) {\n        this.pendingStatus = interceptedStatus;\n      } else {\n        this.nextCall.sendStatus(interceptedStatus);\n      }\n    });\n  }\n  startRead(): void {\n    this.nextCall.startRead();\n  }\n  getPeer(): string {\n    return this.nextCall.getPeer();\n  }\n  getDeadline(): Deadline {\n    return this.nextCall.getDeadline();\n  }\n  getHost(): string {\n    return this.nextCall.getHost();\n  }\n  getAuthContext(): AuthContext {\n    return this.nextCall.getAuthContext();\n  }\n  getConnectionInfo(): ConnectionInfo {\n    return this.nextCall.getConnectionInfo();\n  }\n  getMetricsRecorder(): PerRequestMetricRecorder {\n    return this.nextCall.getMetricsRecorder();\n  }\n}\n\nexport interface ServerInterceptor {\n  (\n    methodDescriptor: ServerMethodDefinition<any, any>,\n    call: ServerInterceptingCallInterface\n  ): ServerInterceptingCall;\n}\n\ninterface DeadlineUnitIndexSignature {\n  [name: string]: number;\n}\n\nconst GRPC_ACCEPT_ENCODING_HEADER = 'grpc-accept-encoding';\nconst GRPC_ENCODING_HEADER = 'grpc-encoding';\nconst GRPC_MESSAGE_HEADER = 'grpc-message';\nconst GRPC_STATUS_HEADER = 'grpc-status';\nconst GRPC_TIMEOUT_HEADER = 'grpc-timeout';\nconst DEADLINE_REGEX = /(\\d{1,8})\\s*([HMSmun])/;\nconst deadlineUnitsToMs: DeadlineUnitIndexSignature = {\n  H: 3600000,\n  M: 60000,\n  S: 1000,\n  m: 1,\n  u: 0.001,\n  n: 0.000001,\n};\n\nconst defaultCompressionHeaders = {\n  // TODO(cjihrig): Remove these encoding headers from the default response\n  // once compression is integrated.\n  [GRPC_ACCEPT_ENCODING_HEADER]: 'identity,deflate,gzip',\n  [GRPC_ENCODING_HEADER]: 'identity',\n};\nconst defaultResponseHeaders = {\n  [http2.constants.HTTP2_HEADER_STATUS]: http2.constants.HTTP_STATUS_OK,\n  [http2.constants.HTTP2_HEADER_CONTENT_TYPE]: 'application/grpc+proto',\n};\nconst defaultResponseOptions = {\n  waitForTrailers: true,\n} as http2.ServerStreamResponseOptions;\n\ntype ReadQueueEntryType = 'COMPRESSED' | 'READABLE' | 'HALF_CLOSE';\n\ninterface ReadQueueEntry {\n  type: ReadQueueEntryType;\n  compressedMessage: Buffer | null;\n  parsedMessage: any;\n}\n\nexport class BaseServerInterceptingCall\n  implements ServerInterceptingCallInterface\n{\n  private listener: InterceptingServerListener | null = null;\n  private metadata: Metadata;\n  private deadlineTimer: NodeJS.Timeout | null = null;\n  private deadline: Deadline = Infinity;\n  private maxSendMessageSize: number = DEFAULT_MAX_SEND_MESSAGE_LENGTH;\n  private maxReceiveMessageSize: number = DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH;\n  private cancelled = false;\n  private metadataSent = false;\n  private wantTrailers = false;\n  private cancelNotified = false;\n  private incomingEncoding = 'identity';\n  private decoder: StreamDecoder;\n  private readQueue: ReadQueueEntry[] = [];\n  private isReadPending = false;\n  private receivedHalfClose = false;\n  private streamEnded = false;\n  private host: string;\n  private connectionInfo: ConnectionInfo;\n  private metricsRecorder = new PerRequestMetricRecorder();\n  private shouldSendMetrics: boolean;\n\n  constructor(\n    private readonly stream: http2.ServerHttp2Stream,\n    headers: http2.IncomingHttpHeaders,\n    private readonly callEventTracker: CallEventTracker | null,\n    private readonly handler: Handler<any, any>,\n    options: ChannelOptions\n  ) {\n    this.stream.once('close', () => {\n      trace(\n        'Request to method ' +\n          this.handler?.path +\n          ' stream closed with rstCode ' +\n          this.stream.rstCode\n      );\n\n      if (this.callEventTracker && !this.streamEnded) {\n        this.streamEnded = true;\n        this.callEventTracker.onStreamEnd(false);\n        this.callEventTracker.onCallEnd({\n          code: Status.CANCELLED,\n          details: 'Stream closed before sending status',\n          metadata: null,\n        });\n      }\n\n      this.notifyOnCancel();\n    });\n\n    this.stream.on('data', (data: Buffer) => {\n      this.handleDataFrame(data);\n    });\n    this.stream.pause();\n\n    this.stream.on('end', () => {\n      this.handleEndEvent();\n    });\n\n    if ('grpc.max_send_message_length' in options) {\n      this.maxSendMessageSize = options['grpc.max_send_message_length']!;\n    }\n    if ('grpc.max_receive_message_length' in options) {\n      this.maxReceiveMessageSize = options['grpc.max_receive_message_length']!;\n    }\n\n    this.host = headers[':authority'] ?? headers.host!;\n    this.decoder = new StreamDecoder(this.maxReceiveMessageSize);\n\n    const metadata = Metadata.fromHttp2Headers(headers);\n\n    if (logging.isTracerEnabled(TRACER_NAME)) {\n      trace(\n        'Request to ' +\n          this.handler.path +\n          ' received headers ' +\n          JSON.stringify(metadata.toJSON())\n      );\n    }\n\n    const timeoutHeader = metadata.get(GRPC_TIMEOUT_HEADER);\n\n    if (timeoutHeader.length > 0) {\n      this.handleTimeoutHeader(timeoutHeader[0] as string);\n    }\n\n    const encodingHeader = metadata.get(GRPC_ENCODING_HEADER);\n\n    if (encodingHeader.length > 0) {\n      this.incomingEncoding = encodingHeader[0] as string;\n    }\n\n    // Remove several headers that should not be propagated to the application\n    metadata.remove(GRPC_TIMEOUT_HEADER);\n    metadata.remove(GRPC_ENCODING_HEADER);\n    metadata.remove(GRPC_ACCEPT_ENCODING_HEADER);\n    metadata.remove(http2.constants.HTTP2_HEADER_ACCEPT_ENCODING);\n    metadata.remove(http2.constants.HTTP2_HEADER_TE);\n    metadata.remove(http2.constants.HTTP2_HEADER_CONTENT_TYPE);\n    this.metadata = metadata;\n\n    const socket = stream.session?.socket;\n    this.connectionInfo = {\n      localAddress: socket?.localAddress,\n      localPort: socket?.localPort,\n      remoteAddress: socket?.remoteAddress,\n      remotePort: socket?.remotePort\n    };\n    this.shouldSendMetrics = !!options['grpc.server_call_metric_recording'];\n  }\n\n  private handleTimeoutHeader(timeoutHeader: string) {\n    const match = timeoutHeader.toString().match(DEADLINE_REGEX);\n\n    if (match === null) {\n      const status: PartialStatusObject = {\n        code: Status.INTERNAL,\n        details: `Invalid ${GRPC_TIMEOUT_HEADER} value \"${timeoutHeader}\"`,\n        metadata: null,\n      };\n      // Wait for the constructor to complete before sending the error.\n      process.nextTick(() => {\n        this.sendStatus(status);\n      });\n      return;\n    }\n\n    const timeout = (+match[1] * deadlineUnitsToMs[match[2]]) | 0;\n\n    const now = new Date();\n    this.deadline = now.setMilliseconds(now.getMilliseconds() + timeout);\n    this.deadlineTimer = setTimeout(() => {\n      const status: PartialStatusObject = {\n        code: Status.DEADLINE_EXCEEDED,\n        details: 'Deadline exceeded',\n        metadata: null,\n      };\n      this.sendStatus(status);\n    }, timeout);\n  }\n\n  private checkCancelled(): boolean {\n    /* In some cases the stream can become destroyed before the close event\n     * fires. That creates a race condition that this check works around */\n    if (!this.cancelled && (this.stream.destroyed || this.stream.closed)) {\n      this.notifyOnCancel();\n      this.cancelled = true;\n    }\n    return this.cancelled;\n  }\n  private notifyOnCancel() {\n    if (this.cancelNotified) {\n      return;\n    }\n    this.cancelNotified = true;\n    this.cancelled = true;\n    process.nextTick(() => {\n      this.listener?.onCancel();\n    });\n    if (this.deadlineTimer) {\n      clearTimeout(this.deadlineTimer);\n    }\n    // Flush incoming data frames\n    this.stream.resume();\n  }\n\n  /**\n   * A server handler can start sending messages without explicitly sending\n   * metadata. In that case, we need to send headers before sending any\n   * messages. This function does that if necessary.\n   */\n  private maybeSendMetadata() {\n    if (!this.metadataSent) {\n      this.sendMetadata(new Metadata());\n    }\n  }\n\n  /**\n   * Serialize a message to a length-delimited byte string.\n   * @param value\n   * @returns\n   */\n  private serializeMessage(value: any) {\n    const messageBuffer = this.handler.serialize(value);\n    const byteLength = messageBuffer.byteLength;\n    const output = Buffer.allocUnsafe(byteLength + 5);\n    /* Note: response compression is currently not supported, so this\n     * compressed bit is always 0. */\n    output.writeUInt8(0, 0);\n    output.writeUInt32BE(byteLength, 1);\n    messageBuffer.copy(output, 5);\n    return output;\n  }\n\n  private decompressMessage(\n    message: Buffer,\n    encoding: string\n  ): Buffer | Promise<Buffer> {\n    const messageContents = message.subarray(5);\n    if (encoding === 'identity') {\n      return messageContents;\n    } else if (encoding === 'deflate' || encoding === 'gzip') {\n      let decompresser: zlib.Gunzip | zlib.Deflate;\n      if (encoding === 'deflate') {\n        decompresser = zlib.createInflate();\n      } else {\n        decompresser = zlib.createGunzip();\n      }\n      return new Promise((resolve, reject) => {\n        let totalLength = 0\n        const messageParts: Buffer[] = [];\n        decompresser.on('error', (error: Error) => {\n          reject({\n            code: Status.INTERNAL,\n            details: 'Failed to decompress message'\n          });\n        });\n        decompresser.on('data', (chunk: Buffer) => {\n          messageParts.push(chunk);\n          totalLength += chunk.byteLength;\n          if (this.maxReceiveMessageSize !== -1 && totalLength > this.maxReceiveMessageSize) {\n            decompresser.destroy();\n            reject({\n              code: Status.RESOURCE_EXHAUSTED,\n              details: `Received message that decompresses to a size larger than ${this.maxReceiveMessageSize}`\n            });\n          }\n        });\n        decompresser.on('end', () => {\n          resolve(Buffer.concat(messageParts));\n        });\n        decompresser.write(messageContents);\n        decompresser.end();\n      });\n    } else {\n      return Promise.reject({\n        code: Status.UNIMPLEMENTED,\n        details: `Received message compressed with unsupported encoding \"${encoding}\"`,\n      });\n    }\n  }\n\n  private async decompressAndMaybePush(queueEntry: ReadQueueEntry) {\n    if (queueEntry.type !== 'COMPRESSED') {\n      throw new Error(`Invalid queue entry type: ${queueEntry.type}`);\n    }\n\n    const compressed = queueEntry.compressedMessage!.readUInt8(0) === 1;\n    const compressedMessageEncoding = compressed\n      ? this.incomingEncoding\n      : 'identity';\n    let decompressedMessage: Buffer;\n    try {\n      decompressedMessage = await this.decompressMessage(\n        queueEntry.compressedMessage!,\n        compressedMessageEncoding\n      );\n    } catch (err) {\n      this.sendStatus(err as PartialStatusObject);\n      return;\n    }\n    try {\n      queueEntry.parsedMessage = this.handler.deserialize(decompressedMessage);\n    } catch (err) {\n      this.sendStatus({\n        code: Status.INTERNAL,\n        details: `Error deserializing request: ${(err as Error).message}`,\n      });\n      return;\n    }\n    queueEntry.type = 'READABLE';\n    this.maybePushNextMessage();\n  }\n\n  private maybePushNextMessage() {\n    if (\n      this.listener &&\n      this.isReadPending &&\n      this.readQueue.length > 0 &&\n      this.readQueue[0].type !== 'COMPRESSED'\n    ) {\n      this.isReadPending = false;\n      const nextQueueEntry = this.readQueue.shift()!;\n      if (nextQueueEntry.type === 'READABLE') {\n        this.listener.onReceiveMessage(nextQueueEntry.parsedMessage);\n      } else {\n        // nextQueueEntry.type === 'HALF_CLOSE'\n        this.listener.onReceiveHalfClose();\n      }\n    }\n  }\n\n  private handleDataFrame(data: Buffer) {\n    if (this.checkCancelled()) {\n      return;\n    }\n    trace(\n      'Request to ' +\n        this.handler.path +\n        ' received data frame of size ' +\n        data.length\n    );\n    let rawMessages: Buffer[];\n    try {\n      rawMessages = this.decoder.write(data);\n    } catch (e) {\n      this.sendStatus({ code: Status.RESOURCE_EXHAUSTED, details: (e as Error).message });\n      return;\n    }\n\n    for (const messageBytes of rawMessages) {\n      this.stream.pause();\n      const queueEntry: ReadQueueEntry = {\n        type: 'COMPRESSED',\n        compressedMessage: messageBytes,\n        parsedMessage: null,\n      };\n      this.readQueue.push(queueEntry);\n      this.decompressAndMaybePush(queueEntry);\n      this.callEventTracker?.addMessageReceived();\n    }\n  }\n  private handleEndEvent() {\n    this.readQueue.push({\n      type: 'HALF_CLOSE',\n      compressedMessage: null,\n      parsedMessage: null,\n    });\n    this.receivedHalfClose = true;\n    this.maybePushNextMessage();\n  }\n  start(listener: InterceptingServerListener): void {\n    trace('Request to ' + this.handler.path + ' start called');\n    if (this.checkCancelled()) {\n      return;\n    }\n    this.listener = listener;\n    listener.onReceiveMetadata(this.metadata);\n  }\n  sendMetadata(metadata: Metadata): void {\n    if (this.checkCancelled()) {\n      return;\n    }\n\n    if (this.metadataSent) {\n      return;\n    }\n\n    this.metadataSent = true;\n    const custom = metadata ? metadata.toHttp2Headers() : null;\n    const headers = {\n      ...defaultResponseHeaders,\n      ...defaultCompressionHeaders,\n      ...custom,\n    };\n    this.stream.respond(headers, defaultResponseOptions);\n  }\n  sendMessage(message: any, callback: () => void): void {\n    if (this.checkCancelled()) {\n      return;\n    }\n    let response: Buffer;\n    try {\n      response = this.serializeMessage(message);\n    } catch (e) {\n      this.sendStatus({\n        code: Status.INTERNAL,\n        details: `Error serializing response: ${getErrorMessage(e)}`,\n        metadata: null,\n      });\n      return;\n    }\n\n    if (\n      this.maxSendMessageSize !== -1 &&\n      response.length - 5 > this.maxSendMessageSize\n    ) {\n      this.sendStatus({\n        code: Status.RESOURCE_EXHAUSTED,\n        details: `Sent message larger than max (${response.length} vs. ${this.maxSendMessageSize})`,\n        metadata: null,\n      });\n      return;\n    }\n    this.maybeSendMetadata();\n    trace(\n      'Request to ' +\n        this.handler.path +\n        ' sent data frame of size ' +\n        response.length\n    );\n    this.stream.write(response, error => {\n      if (error) {\n        this.sendStatus({\n          code: Status.INTERNAL,\n          details: `Error writing message: ${getErrorMessage(error)}`,\n          metadata: null,\n        });\n        return;\n      }\n      this.callEventTracker?.addMessageSent();\n      callback();\n    });\n  }\n  sendStatus(status: PartialStatusObject): void {\n    if (this.checkCancelled()) {\n      return;\n    }\n\n    trace(\n      'Request to method ' +\n        this.handler?.path +\n        ' ended with status code: ' +\n        Status[status.code] +\n        ' details: ' +\n        status.details\n    );\n\n    const statusMetadata = status.metadata?.clone() ?? new Metadata();\n    if (this.shouldSendMetrics) {\n      statusMetadata.set(GRPC_METRICS_HEADER, this.metricsRecorder.serialize());\n    }\n\n    if (this.metadataSent) {\n      if (!this.wantTrailers) {\n        this.wantTrailers = true;\n        this.stream.once('wantTrailers', () => {\n          if (this.callEventTracker && !this.streamEnded) {\n            this.streamEnded = true;\n            this.callEventTracker.onStreamEnd(true);\n            this.callEventTracker.onCallEnd(status);\n          }\n          const trailersToSend: http2.OutgoingHttpHeaders = {\n            [GRPC_STATUS_HEADER]: status.code,\n            [GRPC_MESSAGE_HEADER]: encodeURI(status.details),\n            ...statusMetadata.toHttp2Headers(),\n          };\n\n          this.stream.sendTrailers(trailersToSend);\n          this.notifyOnCancel();\n        });\n        this.stream.end();\n      } else {\n        this.notifyOnCancel();\n      }\n    } else {\n      if (this.callEventTracker && !this.streamEnded) {\n        this.streamEnded = true;\n        this.callEventTracker.onStreamEnd(true);\n        this.callEventTracker.onCallEnd(status);\n      }\n      // Trailers-only response\n      const trailersToSend: http2.OutgoingHttpHeaders = {\n        [GRPC_STATUS_HEADER]: status.code,\n        [GRPC_MESSAGE_HEADER]: encodeURI(status.details),\n        ...defaultResponseHeaders,\n        ...statusMetadata.toHttp2Headers(),\n      };\n      this.stream.respond(trailersToSend, { endStream: true });\n      this.notifyOnCancel();\n    }\n  }\n  startRead(): void {\n    trace('Request to ' + this.handler.path + ' startRead called');\n    if (this.checkCancelled()) {\n      return;\n    }\n    this.isReadPending = true;\n    if (this.readQueue.length === 0) {\n      if (!this.receivedHalfClose) {\n        this.stream.resume();\n      }\n    } else {\n      this.maybePushNextMessage();\n    }\n  }\n  getPeer(): string {\n    const socket = this.stream.session?.socket;\n    if (socket?.remoteAddress) {\n      if (socket.remotePort) {\n        return `${socket.remoteAddress}:${socket.remotePort}`;\n      } else {\n        return socket.remoteAddress;\n      }\n    } else {\n      return 'unknown';\n    }\n  }\n  getDeadline(): Deadline {\n    return this.deadline;\n  }\n  getHost(): string {\n    return this.host;\n  }\n  getAuthContext(): AuthContext {\n    if (this.stream.session?.socket instanceof TLSSocket) {\n      const peerCertificate = this.stream.session.socket.getPeerCertificate();\n      return {\n        transportSecurityType: 'ssl',\n        sslPeerCertificate: peerCertificate.raw ? peerCertificate : undefined\n      }\n    } else {\n      return {};\n    }\n  }\n  getConnectionInfo(): ConnectionInfo {\n    return this.connectionInfo;\n  }\n  getMetricsRecorder(): PerRequestMetricRecorder {\n    return this.metricsRecorder;\n  }\n}\n\nexport function getServerInterceptingCall(\n  interceptors: ServerInterceptor[],\n  stream: http2.ServerHttp2Stream,\n  headers: http2.IncomingHttpHeaders,\n  callEventTracker: CallEventTracker | null,\n  handler: Handler<any, any>,\n  options: ChannelOptions\n) {\n  const methodDefinition: ServerMethodDefinition<any, any> = {\n    path: handler.path,\n    requestStream: handler.type === 'clientStream' || handler.type === 'bidi',\n    responseStream: handler.type === 'serverStream' || handler.type === 'bidi',\n    requestDeserialize: handler.deserialize,\n    responseSerialize: handler.serialize,\n  };\n  const baseCall = new BaseServerInterceptingCall(\n    stream,\n    headers,\n    callEventTracker,\n    handler,\n    options\n  );\n  return interceptors.reduce(\n    (call: ServerInterceptingCallInterface, interceptor: ServerInterceptor) => {\n      return interceptor(methodDefinition, call);\n    },\n    baseCall\n  );\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport * as http2 from 'http2';\nimport * as util from 'util';\n\nimport { ServiceError } from './call';\nimport { Status, LogVerbosity } from './constants';\nimport { Deserialize, Serialize, ServiceDefinition } from './make-client';\nimport { Metadata } from './metadata';\nimport {\n  BidiStreamingHandler,\n  ClientStreamingHandler,\n  HandleCall,\n  Handler,\n  HandlerType,\n  sendUnaryData,\n  ServerDuplexStream,\n  ServerDuplexStreamImpl,\n  ServerReadableStream,\n  ServerStreamingHandler,\n  ServerUnaryCall,\n  ServerWritableStream,\n  ServerWritableStreamImpl,\n  UnaryHandler,\n  ServerErrorResponse,\n  ServerStatusResponse,\n  serverErrorToStatus,\n} from './server-call';\nimport { SecureContextWatcher, ServerCredentials } from './server-credentials';\nimport { ChannelOptions } from './channel-options';\nimport {\n  createResolver,\n  ResolverListener,\n  mapUriDefaultScheme,\n} from './resolver';\nimport * as logging from './logging';\nimport {\n  SubchannelAddress,\n  isTcpSubchannelAddress,\n  subchannelAddressToString,\n  stringToSubchannelAddress,\n} from './subchannel-address';\nimport {\n  GrpcUri,\n  combineHostPort,\n  parseUri,\n  splitHostPort,\n  uriToString,\n} from './uri-parser';\nimport {\n  ChannelzCallTracker,\n  ChannelzCallTrackerStub,\n  ChannelzChildrenTracker,\n  ChannelzChildrenTrackerStub,\n  ChannelzTrace,\n  ChannelzTraceStub,\n  registerChannelzServer,\n  registerChannelzSocket,\n  ServerInfo,\n  ServerRef,\n  SocketInfo,\n  SocketRef,\n  TlsInfo,\n  unregisterChannelzRef,\n} from './channelz';\nimport { CipherNameAndProtocol, TLSSocket } from 'tls';\nimport {\n  ServerInterceptingCallInterface,\n  ServerInterceptor,\n  getServerInterceptingCall,\n} from './server-interceptors';\nimport { PartialStatusObject } from './call-interface';\nimport { CallEventTracker } from './transport';\nimport { Socket } from 'net';\nimport { Duplex } from 'stream';\n\nconst UNLIMITED_CONNECTION_AGE_MS = ~(1 << 31);\nconst KEEPALIVE_MAX_TIME_MS = ~(1 << 31);\nconst KEEPALIVE_TIMEOUT_MS = 20000;\nconst MAX_CONNECTION_IDLE_MS = ~(1 << 31);\n\nconst { HTTP2_HEADER_PATH } = http2.constants;\n\nconst TRACER_NAME = 'server';\nconst kMaxAge = Buffer.from('max_age');\n\nfunction serverCallTrace(text: string) {\n  logging.trace(LogVerbosity.DEBUG, 'server_call', text);\n}\n\ntype AnyHttp2Server = http2.Http2Server | http2.Http2SecureServer;\n\ninterface BindResult {\n  port: number;\n  count: number;\n  errors: string[];\n}\n\ninterface SingleAddressBindResult {\n  port: number;\n  error?: string;\n}\n\nfunction noop(): void {}\n\n/**\n * Decorator to wrap a class method with util.deprecate\n * @param message The message to output if the deprecated method is called\n * @returns\n */\nfunction deprecate(message: string) {\n  return function <This, Args extends any[], Return>(\n    target: (this: This, ...args: Args) => Return,\n    context: ClassMethodDecoratorContext<\n      This,\n      (this: This, ...args: Args) => Return\n    >\n  ) {\n    return util.deprecate(target, message);\n  };\n}\n\nfunction getUnimplementedStatusResponse(\n  methodName: string\n): PartialStatusObject {\n  return {\n    code: Status.UNIMPLEMENTED,\n    details: `The server does not implement the method ${methodName}`,\n  };\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ntype UntypedUnaryHandler = UnaryHandler<any, any>;\ntype UntypedClientStreamingHandler = ClientStreamingHandler<any, any>;\ntype UntypedServerStreamingHandler = ServerStreamingHandler<any, any>;\ntype UntypedBidiStreamingHandler = BidiStreamingHandler<any, any>;\nexport type UntypedHandleCall = HandleCall<any, any>;\ntype UntypedHandler = Handler<any, any>;\nexport interface UntypedServiceImplementation {\n  [name: string]: UntypedHandleCall;\n}\n\nfunction getDefaultHandler(handlerType: HandlerType, methodName: string) {\n  const unimplementedStatusResponse =\n    getUnimplementedStatusResponse(methodName);\n  switch (handlerType) {\n    case 'unary':\n      return (\n        call: ServerUnaryCall<any, any>,\n        callback: sendUnaryData<any>\n      ) => {\n        callback(unimplementedStatusResponse as ServiceError, null);\n      };\n    case 'clientStream':\n      return (\n        call: ServerReadableStream<any, any>,\n        callback: sendUnaryData<any>\n      ) => {\n        callback(unimplementedStatusResponse as ServiceError, null);\n      };\n    case 'serverStream':\n      return (call: ServerWritableStream<any, any>) => {\n        call.emit('error', unimplementedStatusResponse);\n      };\n    case 'bidi':\n      return (call: ServerDuplexStream<any, any>) => {\n        call.emit('error', unimplementedStatusResponse);\n      };\n    default:\n      throw new Error(`Invalid handlerType ${handlerType}`);\n  }\n}\n\ninterface ChannelzSessionInfo {\n  ref: SocketRef;\n  streamTracker: ChannelzCallTracker | ChannelzCallTrackerStub;\n  messagesSent: number;\n  messagesReceived: number;\n  keepAlivesSent: number;\n  lastMessageSentTimestamp: Date | null;\n  lastMessageReceivedTimestamp: Date | null;\n}\n\n/**\n * Information related to a single invocation of bindAsync. This should be\n * tracked in a map keyed by target string, normalized with a pass through\n * parseUri -> mapUriDefaultScheme -> uriToString. If the target has a port\n * number and the port number is 0, the target string is modified with the\n * concrete bound port.\n */\ninterface BoundPort {\n  /**\n   * The key used to refer to this object in the boundPorts map.\n   */\n  mapKey: string;\n  /**\n   * The target string, passed through parseUri -> mapUriDefaultScheme. Used\n   * to determine the final key when the port number is 0.\n   */\n  originalUri: GrpcUri;\n  /**\n   * If there is a pending bindAsync operation, this is a promise that resolves\n   * with the port number when that operation succeeds. If there is no such\n   * operation pending, this is null.\n   */\n  completionPromise: Promise<number> | null;\n  /**\n   * The port number that was actually bound. Populated only after\n   * completionPromise resolves.\n   */\n  portNumber: number;\n  /**\n   * Set by unbind if called while pending is true.\n   */\n  cancelled: boolean;\n  /**\n   * The credentials object passed to the original bindAsync call.\n   */\n  credentials: ServerCredentials;\n  /**\n   * The set of servers associated with this listening port. A target string\n   * that expands to multiple addresses will result in multiple listening\n   * servers.\n   */\n  listeningServers: Set<AnyHttp2Server>;\n}\n\n/**\n * Should be in a map keyed by AnyHttp2Server.\n */\ninterface Http2ServerInfo {\n  channelzRef: SocketRef;\n  sessions: Set<http2.ServerHttp2Session>;\n  ownsChannelzRef: boolean;\n}\n\ninterface SessionIdleTimeoutTracker {\n  activeStreams: number;\n  lastIdle: number;\n  timeout: NodeJS.Timeout;\n  onClose: (session: http2.ServerHttp2Session) => void | null;\n}\n\nexport interface ServerOptions extends ChannelOptions {\n  interceptors?: ServerInterceptor[];\n}\n\nexport interface ConnectionInjector {\n  injectConnection(connection: Duplex): void;\n  drain(graceTimeMs: number): void;\n  destroy(): void;\n}\n\nexport class Server {\n  private boundPorts: Map<string, BoundPort> = new Map();\n  private http2Servers: Map<AnyHttp2Server, Http2ServerInfo> = new Map();\n  private sessionIdleTimeouts = new Map<\n    http2.ServerHttp2Session,\n    SessionIdleTimeoutTracker\n  >();\n\n  private handlers: Map<string, UntypedHandler> = new Map<\n    string,\n    UntypedHandler\n  >();\n  private sessions = new Map<http2.ServerHttp2Session, ChannelzSessionInfo>();\n  /**\n   * This field only exists to ensure that the start method throws an error if\n   * it is called twice, as it did previously.\n   */\n  private started = false;\n  private shutdown = false;\n  private options: ServerOptions;\n  private serverAddressString = 'null';\n\n  // Channelz Info\n  private readonly channelzEnabled: boolean = true;\n  private channelzRef: ServerRef;\n  private channelzTrace: ChannelzTrace | ChannelzTraceStub;\n  private callTracker: ChannelzCallTracker | ChannelzCallTrackerStub;\n  private listenerChildrenTracker:\n    | ChannelzChildrenTracker\n    | ChannelzChildrenTrackerStub;\n  private sessionChildrenTracker:\n    | ChannelzChildrenTracker\n    | ChannelzChildrenTrackerStub;\n\n  private readonly maxConnectionAgeMs: number;\n  private readonly maxConnectionAgeGraceMs: number;\n\n  private readonly keepaliveTimeMs: number;\n  private readonly keepaliveTimeoutMs: number;\n\n  private readonly sessionIdleTimeout: number;\n\n  private readonly interceptors: ServerInterceptor[];\n\n  /**\n   * Options that will be used to construct all Http2Server instances for this\n   * Server.\n   */\n  private commonServerOptions: http2.ServerOptions;\n\n  constructor(options?: ServerOptions) {\n    this.options = options ?? {};\n    if (this.options['grpc.enable_channelz'] === 0) {\n      this.channelzEnabled = false;\n      this.channelzTrace = new ChannelzTraceStub();\n      this.callTracker = new ChannelzCallTrackerStub();\n      this.listenerChildrenTracker = new ChannelzChildrenTrackerStub();\n      this.sessionChildrenTracker = new ChannelzChildrenTrackerStub();\n    } else {\n      this.channelzTrace = new ChannelzTrace();\n      this.callTracker = new ChannelzCallTracker();\n      this.listenerChildrenTracker = new ChannelzChildrenTracker();\n      this.sessionChildrenTracker = new ChannelzChildrenTracker();\n    }\n\n    this.channelzRef = registerChannelzServer(\n      'server',\n      () => this.getChannelzInfo(),\n      this.channelzEnabled\n    );\n\n    this.channelzTrace.addTrace('CT_INFO', 'Server created');\n    this.maxConnectionAgeMs =\n      this.options['grpc.max_connection_age_ms'] ?? UNLIMITED_CONNECTION_AGE_MS;\n    this.maxConnectionAgeGraceMs =\n      this.options['grpc.max_connection_age_grace_ms'] ??\n      UNLIMITED_CONNECTION_AGE_MS;\n    this.keepaliveTimeMs =\n      this.options['grpc.keepalive_time_ms'] ?? KEEPALIVE_MAX_TIME_MS;\n    this.keepaliveTimeoutMs =\n      this.options['grpc.keepalive_timeout_ms'] ?? KEEPALIVE_TIMEOUT_MS;\n    this.sessionIdleTimeout =\n      this.options['grpc.max_connection_idle_ms'] ?? MAX_CONNECTION_IDLE_MS;\n\n    this.commonServerOptions = {\n      maxSendHeaderBlockLength: Number.MAX_SAFE_INTEGER,\n    };\n    if ('grpc-node.max_session_memory' in this.options) {\n      this.commonServerOptions.maxSessionMemory =\n        this.options['grpc-node.max_session_memory'];\n    } else {\n      /* By default, set a very large max session memory limit, to effectively\n       * disable enforcement of the limit. Some testing indicates that Node's\n       * behavior degrades badly when this limit is reached, so we solve that\n       * by disabling the check entirely. */\n      this.commonServerOptions.maxSessionMemory = Number.MAX_SAFE_INTEGER;\n    }\n    if ('grpc.max_concurrent_streams' in this.options) {\n      this.commonServerOptions.settings = {\n        maxConcurrentStreams: this.options['grpc.max_concurrent_streams'],\n      };\n    }\n    this.interceptors = this.options.interceptors ?? [];\n    this.trace('Server constructed');\n  }\n\n  private getChannelzInfo(): ServerInfo {\n    return {\n      trace: this.channelzTrace,\n      callTracker: this.callTracker,\n      listenerChildren: this.listenerChildrenTracker.getChildLists(),\n      sessionChildren: this.sessionChildrenTracker.getChildLists(),\n    };\n  }\n\n  private getChannelzSessionInfo(\n    session: http2.ServerHttp2Session\n  ): SocketInfo {\n    const sessionInfo = this.sessions.get(session)!;\n    const sessionSocket = session.socket;\n    const remoteAddress = sessionSocket.remoteAddress\n      ? stringToSubchannelAddress(\n          sessionSocket.remoteAddress,\n          sessionSocket.remotePort\n        )\n      : null;\n    const localAddress = sessionSocket.localAddress\n      ? stringToSubchannelAddress(\n          sessionSocket.localAddress!,\n          sessionSocket.localPort\n        )\n      : null;\n    let tlsInfo: TlsInfo | null;\n    if (session.encrypted) {\n      const tlsSocket: TLSSocket = sessionSocket as TLSSocket;\n      const cipherInfo: CipherNameAndProtocol & { standardName?: string } =\n        tlsSocket.getCipher();\n      const certificate = tlsSocket.getCertificate();\n      const peerCertificate = tlsSocket.getPeerCertificate();\n      tlsInfo = {\n        cipherSuiteStandardName: cipherInfo.standardName ?? null,\n        cipherSuiteOtherName: cipherInfo.standardName ? null : cipherInfo.name,\n        localCertificate:\n          certificate && 'raw' in certificate ? certificate.raw : null,\n        remoteCertificate:\n          peerCertificate && 'raw' in peerCertificate\n            ? peerCertificate.raw\n            : null,\n      };\n    } else {\n      tlsInfo = null;\n    }\n    const socketInfo: SocketInfo = {\n      remoteAddress: remoteAddress,\n      localAddress: localAddress,\n      security: tlsInfo,\n      remoteName: null,\n      streamsStarted: sessionInfo.streamTracker.callsStarted,\n      streamsSucceeded: sessionInfo.streamTracker.callsSucceeded,\n      streamsFailed: sessionInfo.streamTracker.callsFailed,\n      messagesSent: sessionInfo.messagesSent,\n      messagesReceived: sessionInfo.messagesReceived,\n      keepAlivesSent: sessionInfo.keepAlivesSent,\n      lastLocalStreamCreatedTimestamp: null,\n      lastRemoteStreamCreatedTimestamp:\n        sessionInfo.streamTracker.lastCallStartedTimestamp,\n      lastMessageSentTimestamp: sessionInfo.lastMessageSentTimestamp,\n      lastMessageReceivedTimestamp: sessionInfo.lastMessageReceivedTimestamp,\n      localFlowControlWindow: session.state.localWindowSize ?? null,\n      remoteFlowControlWindow: session.state.remoteWindowSize ?? null,\n    };\n    return socketInfo;\n  }\n\n  private trace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      TRACER_NAME,\n      '(' + this.channelzRef.id + ') ' + text\n    );\n  }\n\n  private keepaliveTrace(text: string): void {\n    logging.trace(\n      LogVerbosity.DEBUG,\n      'keepalive',\n      '(' + this.channelzRef.id + ') ' + text\n    );\n  }\n\n  addProtoService(): never {\n    throw new Error('Not implemented. Use addService() instead');\n  }\n\n  addService(\n    service: ServiceDefinition,\n    implementation: UntypedServiceImplementation\n  ): void {\n    if (\n      service === null ||\n      typeof service !== 'object' ||\n      implementation === null ||\n      typeof implementation !== 'object'\n    ) {\n      throw new Error('addService() requires two objects as arguments');\n    }\n\n    const serviceKeys = Object.keys(service);\n\n    if (serviceKeys.length === 0) {\n      throw new Error('Cannot add an empty service to a server');\n    }\n\n    serviceKeys.forEach(name => {\n      const attrs = service[name];\n      let methodType: HandlerType;\n\n      if (attrs.requestStream) {\n        if (attrs.responseStream) {\n          methodType = 'bidi';\n        } else {\n          methodType = 'clientStream';\n        }\n      } else {\n        if (attrs.responseStream) {\n          methodType = 'serverStream';\n        } else {\n          methodType = 'unary';\n        }\n      }\n\n      let implFn = implementation[name];\n      let impl;\n\n      if (implFn === undefined && typeof attrs.originalName === 'string') {\n        implFn = implementation[attrs.originalName];\n      }\n\n      if (implFn !== undefined) {\n        impl = implFn.bind(implementation);\n      } else {\n        impl = getDefaultHandler(methodType, name);\n      }\n\n      const success = this.register(\n        attrs.path,\n        impl as UntypedHandleCall,\n        attrs.responseSerialize,\n        attrs.requestDeserialize,\n        methodType\n      );\n\n      if (success === false) {\n        throw new Error(`Method handler for ${attrs.path} already provided.`);\n      }\n    });\n  }\n\n  removeService(service: ServiceDefinition): void {\n    if (service === null || typeof service !== 'object') {\n      throw new Error('removeService() requires object as argument');\n    }\n\n    const serviceKeys = Object.keys(service);\n    serviceKeys.forEach(name => {\n      const attrs = service[name];\n      this.unregister(attrs.path);\n    });\n  }\n\n  bind(port: string, creds: ServerCredentials): never {\n    throw new Error('Not implemented. Use bindAsync() instead');\n  }\n\n  /**\n   * This API is experimental, so API stability is not guaranteed across minor versions.\n   * @param boundAddress\n   * @returns\n   */\n  protected experimentalRegisterListenerToChannelz(boundAddress: SubchannelAddress) {\n    return registerChannelzSocket(\n      subchannelAddressToString(boundAddress),\n      () => {\n        return {\n          localAddress: boundAddress,\n          remoteAddress: null,\n          security: null,\n          remoteName: null,\n          streamsStarted: 0,\n          streamsSucceeded: 0,\n          streamsFailed: 0,\n          messagesSent: 0,\n          messagesReceived: 0,\n          keepAlivesSent: 0,\n          lastLocalStreamCreatedTimestamp: null,\n          lastRemoteStreamCreatedTimestamp: null,\n          lastMessageSentTimestamp: null,\n          lastMessageReceivedTimestamp: null,\n          localFlowControlWindow: null,\n          remoteFlowControlWindow: null,\n        };\n      },\n      this.channelzEnabled\n    );\n  }\n\n  protected experimentalUnregisterListenerFromChannelz(channelzRef: SocketRef) {\n    unregisterChannelzRef(channelzRef);\n  }\n\n  private createHttp2Server(credentials: ServerCredentials) {\n    let http2Server: http2.Http2Server | http2.Http2SecureServer;\n    if (credentials._isSecure()) {\n      const constructorOptions = credentials._getConstructorOptions();\n      const contextOptions = credentials._getSecureContextOptions();\n      const secureServerOptions: http2.SecureServerOptions = {\n        ...this.commonServerOptions,\n        ...constructorOptions,\n        ...contextOptions,\n        enableTrace: this.options['grpc-node.tls_enable_trace'] === 1\n      };\n      let areCredentialsValid = contextOptions !== null;\n      this.trace('Initial credentials valid: ' + areCredentialsValid);\n      http2Server = http2.createSecureServer(secureServerOptions);\n      http2Server.prependListener('connection', (socket: Socket) => {\n        if (!areCredentialsValid) {\n          this.trace('Dropped connection from ' + JSON.stringify(socket.address()) + ' due to unloaded credentials');\n          socket.destroy();\n        }\n      });\n      http2Server.on('secureConnection', (socket: TLSSocket) => {\n        /* These errors need to be handled by the user of Http2SecureServer,\n         * according to https://github.com/nodejs/node/issues/35824 */\n        socket.on('error', (e: Error) => {\n          this.trace(\n            'An incoming TLS connection closed with error: ' + e.message\n          );\n        });\n      });\n      const credsWatcher: SecureContextWatcher = options => {\n        if (options) {\n          const secureServer = http2Server as http2.Http2SecureServer;\n          try {\n            secureServer.setSecureContext(options);\n          } catch (e) {\n            logging.log(LogVerbosity.ERROR, 'Failed to set secure context with error ' + (e as Error).message);\n            options = null;\n          }\n        }\n        areCredentialsValid = options !== null;\n        this.trace('Post-update credentials valid: ' + areCredentialsValid);\n      }\n      credentials._addWatcher(credsWatcher);\n      http2Server.on('close', () => {\n        credentials._removeWatcher(credsWatcher);\n      });\n    } else {\n      http2Server = http2.createServer(this.commonServerOptions);\n    }\n\n    http2Server.setTimeout(0, noop);\n    this._setupHandlers(http2Server, credentials._getInterceptors());\n    return http2Server;\n  }\n\n  private bindOneAddress(\n    address: SubchannelAddress,\n    boundPortObject: BoundPort\n  ): Promise<SingleAddressBindResult> {\n    this.trace('Attempting to bind ' + subchannelAddressToString(address));\n    const http2Server = this.createHttp2Server(boundPortObject.credentials);\n    return new Promise<SingleAddressBindResult>((resolve, reject) => {\n      const onError = (err: Error) => {\n        this.trace(\n          'Failed to bind ' +\n            subchannelAddressToString(address) +\n            ' with error ' +\n            err.message\n        );\n        resolve({\n          port: 'port' in address ? address.port : 1,\n          error: err.message,\n        });\n      };\n\n      http2Server.once('error', onError);\n\n      http2Server.listen(address, () => {\n        const boundAddress = http2Server.address()!;\n        let boundSubchannelAddress: SubchannelAddress;\n        if (typeof boundAddress === 'string') {\n          boundSubchannelAddress = {\n            path: boundAddress,\n          };\n        } else {\n          boundSubchannelAddress = {\n            host: boundAddress.address,\n            port: boundAddress.port,\n          };\n        }\n\n        const channelzRef = this.experimentalRegisterListenerToChannelz(\n          boundSubchannelAddress\n        );\n        this.listenerChildrenTracker.refChild(channelzRef);\n\n        this.http2Servers.set(http2Server, {\n          channelzRef: channelzRef,\n          sessions: new Set(),\n          ownsChannelzRef: true\n        });\n        boundPortObject.listeningServers.add(http2Server);\n        this.trace(\n          'Successfully bound ' +\n            subchannelAddressToString(boundSubchannelAddress)\n        );\n        resolve({\n          port:\n            'port' in boundSubchannelAddress ? boundSubchannelAddress.port : 1,\n        });\n        http2Server.removeListener('error', onError);\n      });\n    });\n  }\n\n  private async bindManyPorts(\n    addressList: SubchannelAddress[],\n    boundPortObject: BoundPort\n  ): Promise<BindResult> {\n    if (addressList.length === 0) {\n      return {\n        count: 0,\n        port: 0,\n        errors: [],\n      };\n    }\n    if (isTcpSubchannelAddress(addressList[0]) && addressList[0].port === 0) {\n      /* If binding to port 0, first try to bind the first address, then bind\n       * the rest of the address list to the specific port that it binds. */\n      const firstAddressResult = await this.bindOneAddress(\n        addressList[0],\n        boundPortObject\n      );\n      if (firstAddressResult.error) {\n        /* If the first address fails to bind, try the same operation starting\n         * from the second item in the list. */\n        const restAddressResult = await this.bindManyPorts(\n          addressList.slice(1),\n          boundPortObject\n        );\n        return {\n          ...restAddressResult,\n          errors: [firstAddressResult.error, ...restAddressResult.errors],\n        };\n      } else {\n        const restAddresses = addressList\n          .slice(1)\n          .map(address =>\n            isTcpSubchannelAddress(address)\n              ? { host: address.host, port: firstAddressResult.port }\n              : address\n          );\n        const restAddressResult = await Promise.all(\n          restAddresses.map(address =>\n            this.bindOneAddress(address, boundPortObject)\n          )\n        );\n        const allResults = [firstAddressResult, ...restAddressResult];\n        return {\n          count: allResults.filter(result => result.error === undefined).length,\n          port: firstAddressResult.port,\n          errors: allResults\n            .filter(result => result.error)\n            .map(result => result.error!),\n        };\n      }\n    } else {\n      const allResults = await Promise.all(\n        addressList.map(address =>\n          this.bindOneAddress(address, boundPortObject)\n        )\n      );\n      return {\n        count: allResults.filter(result => result.error === undefined).length,\n        port: allResults[0].port,\n        errors: allResults\n          .filter(result => result.error)\n          .map(result => result.error!),\n      };\n    }\n  }\n\n  private async bindAddressList(\n    addressList: SubchannelAddress[],\n    boundPortObject: BoundPort\n  ): Promise<number> {\n    const bindResult = await this.bindManyPorts(addressList, boundPortObject);\n    if (bindResult.count > 0) {\n      if (bindResult.count < addressList.length) {\n        logging.log(\n          LogVerbosity.INFO,\n          `WARNING Only ${bindResult.count} addresses added out of total ${addressList.length} resolved`\n        );\n      }\n      return bindResult.port;\n    } else {\n      const errorString = `No address added out of total ${addressList.length} resolved`;\n      logging.log(LogVerbosity.ERROR, errorString);\n      throw new Error(\n        `${errorString} errors: [${bindResult.errors.join(',')}]`\n      );\n    }\n  }\n\n  private resolvePort(port: GrpcUri): Promise<SubchannelAddress[]> {\n    return new Promise<SubchannelAddress[]>((resolve, reject) => {\n      let seenResolution = false;\n      const resolverListener: ResolverListener = (\n        endpointList,\n        attributes,\n        serviceConfig,\n        resolutionNote\n      ) => {\n        if (seenResolution) {\n          return true;\n        }\n        seenResolution = true;\n        if (!endpointList.ok) {\n          reject(new Error(endpointList.error.details));\n          return true;\n        }\n        const addressList = ([] as SubchannelAddress[]).concat(\n          ...endpointList.value.map(endpoint => endpoint.addresses)\n        );\n        if (addressList.length === 0) {\n          reject(new Error(`No addresses resolved for port ${port}`));\n          return true;\n        }\n        resolve(addressList);\n        return true;\n      }\n      const resolver = createResolver(port, resolverListener, this.options);\n      resolver.updateResolution();\n    });\n  }\n\n  private async bindPort(\n    port: GrpcUri,\n    boundPortObject: BoundPort\n  ): Promise<number> {\n    const addressList = await this.resolvePort(port);\n    if (boundPortObject.cancelled) {\n      this.completeUnbind(boundPortObject);\n      throw new Error('bindAsync operation cancelled by unbind call');\n    }\n    const portNumber = await this.bindAddressList(addressList, boundPortObject);\n    if (boundPortObject.cancelled) {\n      this.completeUnbind(boundPortObject);\n      throw new Error('bindAsync operation cancelled by unbind call');\n    }\n    return portNumber;\n  }\n\n  private normalizePort(port: string): GrpcUri {\n    const initialPortUri = parseUri(port);\n    if (initialPortUri === null) {\n      throw new Error(`Could not parse port \"${port}\"`);\n    }\n    const portUri = mapUriDefaultScheme(initialPortUri);\n    if (portUri === null) {\n      throw new Error(`Could not get a default scheme for port \"${port}\"`);\n    }\n    return portUri;\n  }\n\n  bindAsync(\n    port: string,\n    creds: ServerCredentials,\n    callback: (error: Error | null, port: number) => void\n  ): void {\n    if (this.shutdown) {\n      throw new Error('bindAsync called after shutdown');\n    }\n    if (typeof port !== 'string') {\n      throw new TypeError('port must be a string');\n    }\n\n    if (creds === null || !(creds instanceof ServerCredentials)) {\n      throw new TypeError('creds must be a ServerCredentials object');\n    }\n\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n\n    this.trace('bindAsync port=' + port);\n\n    const portUri = this.normalizePort(port);\n\n    const deferredCallback = (error: Error | null, port: number) => {\n      process.nextTick(() => callback(error, port));\n    };\n\n    /* First, if this port is already bound or that bind operation is in\n     * progress, use that result. */\n    let boundPortObject = this.boundPorts.get(uriToString(portUri));\n    if (boundPortObject) {\n      if (!creds._equals(boundPortObject.credentials)) {\n        deferredCallback(\n          new Error(`${port} already bound with incompatible credentials`),\n          0\n        );\n        return;\n      }\n      /* If that operation has previously been cancelled by an unbind call,\n       * uncancel it. */\n      boundPortObject.cancelled = false;\n      if (boundPortObject.completionPromise) {\n        boundPortObject.completionPromise.then(\n          portNum => callback(null, portNum),\n          error => callback(error as Error, 0)\n        );\n      } else {\n        deferredCallback(null, boundPortObject.portNumber);\n      }\n      return;\n    }\n    boundPortObject = {\n      mapKey: uriToString(portUri),\n      originalUri: portUri,\n      completionPromise: null,\n      cancelled: false,\n      portNumber: 0,\n      credentials: creds,\n      listeningServers: new Set(),\n    };\n    const splitPort = splitHostPort(portUri.path);\n    const completionPromise = this.bindPort(portUri, boundPortObject);\n    boundPortObject.completionPromise = completionPromise;\n    /* If the port number is 0, defer populating the map entry until after the\n     * bind operation completes and we have a specific port number. Otherwise,\n     * populate it immediately. */\n    if (splitPort?.port === 0) {\n      completionPromise.then(\n        portNum => {\n          const finalUri: GrpcUri = {\n            scheme: portUri.scheme,\n            authority: portUri.authority,\n            path: combineHostPort({ host: splitPort.host, port: portNum }),\n          };\n          boundPortObject!.mapKey = uriToString(finalUri);\n          boundPortObject!.completionPromise = null;\n          boundPortObject!.portNumber = portNum;\n          this.boundPorts.set(boundPortObject!.mapKey, boundPortObject!);\n          callback(null, portNum);\n        },\n        error => {\n          callback(error, 0);\n        }\n      );\n    } else {\n      this.boundPorts.set(boundPortObject.mapKey, boundPortObject);\n      completionPromise.then(\n        portNum => {\n          boundPortObject!.completionPromise = null;\n          boundPortObject!.portNumber = portNum;\n          callback(null, portNum);\n        },\n        error => {\n          callback(error, 0);\n        }\n      );\n    }\n  }\n\n  private registerInjectorToChannelz() {\n    return registerChannelzSocket(\n      'injector',\n      () => {\n        return {\n          localAddress: null,\n          remoteAddress: null,\n          security: null,\n          remoteName: null,\n          streamsStarted: 0,\n          streamsSucceeded: 0,\n          streamsFailed: 0,\n          messagesSent: 0,\n          messagesReceived: 0,\n          keepAlivesSent: 0,\n          lastLocalStreamCreatedTimestamp: null,\n          lastRemoteStreamCreatedTimestamp: null,\n          lastMessageSentTimestamp: null,\n          lastMessageReceivedTimestamp: null,\n          localFlowControlWindow: null,\n          remoteFlowControlWindow: null,\n        };\n      },\n      this.channelzEnabled\n    );\n  }\n\n  /**\n   * This API is experimental, so API stability is not guaranteed across minor versions.\n   * @param credentials\n   * @param channelzRef\n   * @returns\n   */\n  protected experimentalCreateConnectionInjectorWithChannelzRef(credentials: ServerCredentials, channelzRef: SocketRef, ownsChannelzRef=false) {\n    if (credentials === null || !(credentials instanceof ServerCredentials)) {\n      throw new TypeError('creds must be a ServerCredentials object');\n    }\n    if (this.channelzEnabled) {\n      this.listenerChildrenTracker.refChild(channelzRef);\n    }\n    const server = this.createHttp2Server(credentials);\n    const sessionsSet: Set<http2.ServerHttp2Session> = new Set();\n    this.http2Servers.set(server, {\n      channelzRef: channelzRef,\n      sessions: sessionsSet,\n      ownsChannelzRef\n    });\n    return {\n      injectConnection: (connection: Duplex) => {\n        server.emit('connection', connection);\n      },\n      drain: (graceTimeMs: number) => {\n        for (const session of sessionsSet) {\n          this.closeSession(session);\n        }\n        setTimeout(() => {\n          for (const session of sessionsSet) {\n            session.destroy(http2.constants.NGHTTP2_CANCEL as any);\n          }\n        }, graceTimeMs).unref?.();\n      },\n      destroy: () => {\n        this.closeServer(server)\n        for (const session of sessionsSet) {\n          this.closeSession(session);\n        }\n      }\n    };\n  }\n\n  createConnectionInjector(credentials: ServerCredentials): ConnectionInjector {\n    if (credentials === null || !(credentials instanceof ServerCredentials)) {\n      throw new TypeError('creds must be a ServerCredentials object');\n    }\n    const channelzRef = this.registerInjectorToChannelz();\n    return this.experimentalCreateConnectionInjectorWithChannelzRef(credentials, channelzRef, true);\n  }\n\n  private closeServer(server: AnyHttp2Server, callback?: () => void) {\n    this.trace(\n      'Closing server with address ' + JSON.stringify(server.address())\n    );\n    const serverInfo = this.http2Servers.get(server);\n    server.close(() => {\n      if (serverInfo && serverInfo.ownsChannelzRef) {\n        this.listenerChildrenTracker.unrefChild(serverInfo.channelzRef);\n        unregisterChannelzRef(serverInfo.channelzRef);\n      }\n      this.http2Servers.delete(server);\n      callback?.();\n    });\n  }\n\n  private closeSession(\n    session: http2.ServerHttp2Session,\n    callback?: () => void\n  ) {\n    this.trace('Closing session initiated by ' + session.socket?.remoteAddress);\n    const sessionInfo = this.sessions.get(session);\n    const closeCallback = () => {\n      if (sessionInfo) {\n        this.sessionChildrenTracker.unrefChild(sessionInfo.ref);\n        unregisterChannelzRef(sessionInfo.ref);\n      }\n      callback?.();\n    };\n    if (session.closed) {\n      queueMicrotask(closeCallback);\n    } else {\n      session.close(closeCallback);\n    }\n  }\n\n  private completeUnbind(boundPortObject: BoundPort) {\n    for (const server of boundPortObject.listeningServers) {\n      const serverInfo = this.http2Servers.get(server);\n      this.closeServer(server, () => {\n        boundPortObject.listeningServers.delete(server);\n      });\n      if (serverInfo) {\n        for (const session of serverInfo.sessions) {\n          this.closeSession(session);\n        }\n      }\n    }\n    this.boundPorts.delete(boundPortObject.mapKey);\n  }\n\n  /**\n   * Unbind a previously bound port, or cancel an in-progress bindAsync\n   * operation. If port 0 was bound, only the actual bound port can be\n   * unbound. For example, if bindAsync was called with \"localhost:0\" and the\n   * bound port result was 54321, it can be unbound as \"localhost:54321\".\n   * @param port\n   */\n  unbind(port: string): void {\n    this.trace('unbind port=' + port);\n    const portUri = this.normalizePort(port);\n    const splitPort = splitHostPort(portUri.path);\n    if (splitPort?.port === 0) {\n      throw new Error('Cannot unbind port 0');\n    }\n    const boundPortObject = this.boundPorts.get(uriToString(portUri));\n    if (boundPortObject) {\n      this.trace(\n        'unbinding ' +\n          boundPortObject.mapKey +\n          ' originally bound as ' +\n          uriToString(boundPortObject.originalUri)\n      );\n      /* If the bind operation is pending, the cancelled flag will trigger\n       * the unbind operation later. */\n      if (boundPortObject.completionPromise) {\n        boundPortObject.cancelled = true;\n      } else {\n        this.completeUnbind(boundPortObject);\n      }\n    }\n  }\n\n  /**\n   * Gracefully close all connections associated with a previously bound port.\n   * After the grace time, forcefully close all remaining open connections.\n   *\n   * If port 0 was bound, only the actual bound port can be\n   * drained. For example, if bindAsync was called with \"localhost:0\" and the\n   * bound port result was 54321, it can be drained as \"localhost:54321\".\n   * @param port\n   * @param graceTimeMs\n   * @returns\n   */\n  drain(port: string, graceTimeMs: number): void {\n    this.trace('drain port=' + port + ' graceTimeMs=' + graceTimeMs);\n    const portUri = this.normalizePort(port);\n    const splitPort = splitHostPort(portUri.path);\n    if (splitPort?.port === 0) {\n      throw new Error('Cannot drain port 0');\n    }\n    const boundPortObject = this.boundPorts.get(uriToString(portUri));\n    if (!boundPortObject) {\n      return;\n    }\n    const allSessions: Set<http2.Http2Session> = new Set();\n    for (const http2Server of boundPortObject.listeningServers) {\n      const serverEntry = this.http2Servers.get(http2Server);\n      if (serverEntry) {\n        for (const session of serverEntry.sessions) {\n          allSessions.add(session);\n          this.closeSession(session, () => {\n            allSessions.delete(session);\n          });\n        }\n      }\n    }\n    /* After the grace time ends, send another goaway to all remaining sessions\n     * with the CANCEL code. */\n    setTimeout(() => {\n      for (const session of allSessions) {\n        session.destroy(http2.constants.NGHTTP2_CANCEL as any);\n      }\n    }, graceTimeMs).unref?.();\n  }\n\n  forceShutdown(): void {\n    for (const boundPortObject of this.boundPorts.values()) {\n      boundPortObject.cancelled = true;\n    }\n    this.boundPorts.clear();\n    // Close the server if it is still running.\n    for (const server of this.http2Servers.keys()) {\n      this.closeServer(server);\n    }\n\n    // Always destroy any available sessions. It's possible that one or more\n    // tryShutdown() calls are in progress. Don't wait on them to finish.\n    this.sessions.forEach((channelzInfo, session) => {\n      this.closeSession(session);\n      // Cast NGHTTP2_CANCEL to any because TypeScript doesn't seem to\n      // recognize destroy(code) as a valid signature.\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      session.destroy(http2.constants.NGHTTP2_CANCEL as any);\n    });\n    this.sessions.clear();\n    unregisterChannelzRef(this.channelzRef);\n\n    this.shutdown = true;\n  }\n\n  register<RequestType, ResponseType>(\n    name: string,\n    handler: HandleCall<RequestType, ResponseType>,\n    serialize: Serialize<ResponseType>,\n    deserialize: Deserialize<RequestType>,\n    type: string\n  ): boolean {\n    if (this.handlers.has(name)) {\n      return false;\n    }\n\n    this.handlers.set(name, {\n      func: handler,\n      serialize,\n      deserialize,\n      type,\n      path: name,\n    } as UntypedHandler);\n    return true;\n  }\n\n  unregister(name: string): boolean {\n    return this.handlers.delete(name);\n  }\n\n  /**\n   * @deprecated No longer needed as of version 1.10.x\n   */\n  @deprecate(\n    'Calling start() is no longer necessary. It can be safely omitted.'\n  )\n  start(): void {\n    if (\n      this.http2Servers.size === 0 ||\n      [...this.http2Servers.keys()].every(server => !server.listening)\n    ) {\n      throw new Error('server must be bound in order to start');\n    }\n\n    if (this.started === true) {\n      throw new Error('server is already started');\n    }\n    this.started = true;\n  }\n\n  tryShutdown(callback: (error?: Error) => void): void {\n    const wrappedCallback = (error?: Error) => {\n      unregisterChannelzRef(this.channelzRef);\n      callback(error);\n    };\n    let pendingChecks = 0;\n\n    function maybeCallback(): void {\n      pendingChecks--;\n\n      if (pendingChecks === 0) {\n        wrappedCallback();\n      }\n    }\n    this.shutdown = true;\n\n    for (const [serverKey, server] of this.http2Servers.entries()) {\n      pendingChecks++;\n      const serverString = server.channelzRef.name;\n      this.trace('Waiting for server ' + serverString + ' to close');\n      this.closeServer(serverKey, () => {\n        this.trace('Server ' + serverString + ' finished closing');\n        maybeCallback();\n      });\n\n      for (const session of server.sessions.keys()) {\n        pendingChecks++;\n        const sessionString = session.socket?.remoteAddress;\n        this.trace('Waiting for session ' + sessionString + ' to close');\n        this.closeSession(session, () => {\n          this.trace('Session ' + sessionString + ' finished closing');\n          maybeCallback();\n        });\n      }\n    }\n\n    if (pendingChecks === 0) {\n      wrappedCallback();\n    }\n  }\n\n  addHttp2Port(): never {\n    throw new Error('Not yet implemented');\n  }\n\n  /**\n   * Get the channelz reference object for this server. The returned value is\n   * garbage if channelz is disabled for this server.\n   * @returns\n   */\n  getChannelzRef() {\n    return this.channelzRef;\n  }\n\n  private _verifyContentType(\n    stream: http2.ServerHttp2Stream,\n    headers: http2.IncomingHttpHeaders\n  ): boolean {\n    const contentType = headers[http2.constants.HTTP2_HEADER_CONTENT_TYPE];\n\n    if (\n      typeof contentType !== 'string' ||\n      !contentType.startsWith('application/grpc')\n    ) {\n      stream.respond(\n        {\n          [http2.constants.HTTP2_HEADER_STATUS]:\n            http2.constants.HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE,\n        },\n        { endStream: true }\n      );\n      return false;\n    }\n\n    return true;\n  }\n\n  private _retrieveHandler(path: string): Handler<any, any> | null {\n    serverCallTrace(\n      'Received call to method ' +\n        path +\n        ' at address ' +\n        this.serverAddressString\n    );\n\n    const handler = this.handlers.get(path);\n\n    if (handler === undefined) {\n      serverCallTrace(\n        'No handler registered for method ' +\n          path +\n          '. Sending UNIMPLEMENTED status.'\n      );\n      return null;\n    }\n\n    return handler;\n  }\n\n  private _respondWithError(\n    err: PartialStatusObject,\n    stream: http2.ServerHttp2Stream,\n    channelzSessionInfo: ChannelzSessionInfo | null = null\n  ) {\n    const trailersToSend = {\n      'grpc-status': err.code ?? Status.INTERNAL,\n      'grpc-message': err.details,\n      [http2.constants.HTTP2_HEADER_STATUS]: http2.constants.HTTP_STATUS_OK,\n      [http2.constants.HTTP2_HEADER_CONTENT_TYPE]: 'application/grpc+proto',\n      ...err.metadata?.toHttp2Headers(),\n    };\n    stream.respond(trailersToSend, { endStream: true });\n\n    this.callTracker.addCallFailed();\n    channelzSessionInfo?.streamTracker.addCallFailed();\n  }\n\n  private _channelzHandler(\n    extraInterceptors: ServerInterceptor[],\n    stream: http2.ServerHttp2Stream,\n    headers: http2.IncomingHttpHeaders\n  ) {\n    stream.once('error', (err: ServerErrorResponse) => {\n      /* We need an error handler to avoid uncaught error event exceptions, but\n       * there is nothing we can reasonably do here. Any error event should\n       * have a corresponding close event, which handles emitting the cancelled\n       * event. And the stream is now in a bad state, so we can't reasonably\n       * expect to be able to send an error over it. */\n    });\n    // for handling idle timeout\n    this.onStreamOpened(stream);\n\n    const channelzSessionInfo = this.sessions.get(\n      stream.session as http2.ServerHttp2Session\n    );\n\n    this.callTracker.addCallStarted();\n    channelzSessionInfo?.streamTracker.addCallStarted();\n\n    if (!this._verifyContentType(stream, headers)) {\n      this.callTracker.addCallFailed();\n      channelzSessionInfo?.streamTracker.addCallFailed();\n      return;\n    }\n\n    const path = headers[HTTP2_HEADER_PATH] as string;\n\n    const handler = this._retrieveHandler(path);\n    if (!handler) {\n      this._respondWithError(\n        getUnimplementedStatusResponse(path),\n        stream,\n        channelzSessionInfo\n      );\n      return;\n    }\n\n    const callEventTracker: CallEventTracker = {\n      addMessageSent: () => {\n        if (channelzSessionInfo) {\n          channelzSessionInfo.messagesSent += 1;\n          channelzSessionInfo.lastMessageSentTimestamp = new Date();\n        }\n      },\n      addMessageReceived: () => {\n        if (channelzSessionInfo) {\n          channelzSessionInfo.messagesReceived += 1;\n          channelzSessionInfo.lastMessageReceivedTimestamp = new Date();\n        }\n      },\n      onCallEnd: status => {\n        if (status.code === Status.OK) {\n          this.callTracker.addCallSucceeded();\n        } else {\n          this.callTracker.addCallFailed();\n        }\n      },\n      onStreamEnd: success => {\n        if (channelzSessionInfo) {\n          if (success) {\n            channelzSessionInfo.streamTracker.addCallSucceeded();\n          } else {\n            channelzSessionInfo.streamTracker.addCallFailed();\n          }\n        }\n      },\n    };\n\n    const call = getServerInterceptingCall(\n      [...extraInterceptors, ...this.interceptors],\n      stream,\n      headers,\n      callEventTracker,\n      handler,\n      this.options\n    );\n\n    if (!this._runHandlerForCall(call, handler)) {\n      this.callTracker.addCallFailed();\n      channelzSessionInfo?.streamTracker.addCallFailed();\n\n      call.sendStatus({\n        code: Status.INTERNAL,\n        details: `Unknown handler type: ${handler.type}`,\n      });\n    }\n  }\n\n  private _streamHandler(\n    extraInterceptors: ServerInterceptor[],\n    stream: http2.ServerHttp2Stream,\n    headers: http2.IncomingHttpHeaders\n  ) {\n    stream.once('error', (err: ServerErrorResponse) => {\n      /* We need an error handler to avoid uncaught error event exceptions, but\n       * there is nothing we can reasonably do here. Any error event should\n       * have a corresponding close event, which handles emitting the cancelled\n       * event. And the stream is now in a bad state, so we can't reasonably\n       * expect to be able to send an error over it. */\n    });\n    // for handling idle timeout\n    this.onStreamOpened(stream);\n\n    if (this._verifyContentType(stream, headers) !== true) {\n      return;\n    }\n\n    const path = headers[HTTP2_HEADER_PATH] as string;\n\n    const handler = this._retrieveHandler(path);\n    if (!handler) {\n      this._respondWithError(\n        getUnimplementedStatusResponse(path),\n        stream,\n        null\n      );\n      return;\n    }\n\n    const call = getServerInterceptingCall(\n      [...extraInterceptors, ...this.interceptors],\n      stream,\n      headers,\n      null,\n      handler,\n      this.options\n    );\n\n    if (!this._runHandlerForCall(call, handler)) {\n      call.sendStatus({\n        code: Status.INTERNAL,\n        details: `Unknown handler type: ${handler.type}`,\n      });\n    }\n  }\n\n  private _runHandlerForCall(\n    call: ServerInterceptingCallInterface,\n    handler:\n      | UntypedUnaryHandler\n      | UntypedClientStreamingHandler\n      | UntypedServerStreamingHandler\n      | UntypedBidiStreamingHandler\n  ): boolean {\n    const { type } = handler;\n    if (type === 'unary') {\n      handleUnary(call, handler);\n    } else if (type === 'clientStream') {\n      handleClientStreaming(call, handler);\n    } else if (type === 'serverStream') {\n      handleServerStreaming(call, handler);\n    } else if (type === 'bidi') {\n      handleBidiStreaming(call, handler);\n    } else {\n      return false;\n    }\n\n    return true;\n  }\n\n  private _setupHandlers(\n    http2Server: http2.Http2Server | http2.Http2SecureServer,\n    extraInterceptors: ServerInterceptor[]\n  ): void {\n    if (http2Server === null) {\n      return;\n    }\n\n    const serverAddress = http2Server.address();\n    let serverAddressString = 'null';\n    if (serverAddress) {\n      if (typeof serverAddress === 'string') {\n        serverAddressString = serverAddress;\n      } else {\n        serverAddressString = serverAddress.address + ':' + serverAddress.port;\n      }\n    }\n    this.serverAddressString = serverAddressString;\n\n    const handler = this.channelzEnabled\n      ? this._channelzHandler\n      : this._streamHandler;\n\n    const sessionHandler = this.channelzEnabled\n      ? this._channelzSessionHandler(http2Server)\n      : this._sessionHandler(http2Server);\n\n    http2Server.on('stream', handler.bind(this, extraInterceptors));\n    http2Server.on('session', sessionHandler);\n  }\n\n  private _sessionHandler(\n    http2Server: http2.Http2Server | http2.Http2SecureServer\n  ) {\n    return (session: http2.ServerHttp2Session) => {\n      this.http2Servers.get(http2Server)?.sessions.add(session);\n\n      let connectionAgeTimer: NodeJS.Timeout | null = null;\n      let connectionAgeGraceTimer: NodeJS.Timeout | null = null;\n      let keepaliveTimer: NodeJS.Timeout | null = null;\n      let sessionClosedByServer = false;\n\n      const idleTimeoutObj = this.enableIdleTimeout(session);\n\n      if (this.maxConnectionAgeMs !== UNLIMITED_CONNECTION_AGE_MS) {\n        // Apply a random jitter within a +/-10% range\n        const jitterMagnitude = this.maxConnectionAgeMs / 10;\n        const jitter = Math.random() * jitterMagnitude * 2 - jitterMagnitude;\n\n        connectionAgeTimer = setTimeout(() => {\n          sessionClosedByServer = true;\n\n          this.trace(\n            'Connection dropped by max connection age: ' +\n              session.socket?.remoteAddress\n          );\n\n          try {\n            session.goaway(\n              http2.constants.NGHTTP2_NO_ERROR,\n              ~(1 << 31),\n              kMaxAge\n            );\n          } catch (e) {\n            // The goaway can't be sent because the session is already closed\n            session.destroy();\n            return;\n          }\n          session.close();\n\n          /* Allow a grace period after sending the GOAWAY before forcibly\n           * closing the connection. */\n          if (this.maxConnectionAgeGraceMs !== UNLIMITED_CONNECTION_AGE_MS) {\n            connectionAgeGraceTimer = setTimeout(() => {\n              session.destroy();\n            }, this.maxConnectionAgeGraceMs);\n            connectionAgeGraceTimer.unref?.();\n          }\n        }, this.maxConnectionAgeMs + jitter);\n        connectionAgeTimer.unref?.();\n      }\n\n      const clearKeepaliveTimeout = () => {\n        if (keepaliveTimer) {\n          clearTimeout(keepaliveTimer);\n          keepaliveTimer = null;\n        }\n      };\n\n      const canSendPing = () => {\n        return (\n          !session.destroyed &&\n          this.keepaliveTimeMs < KEEPALIVE_MAX_TIME_MS &&\n          this.keepaliveTimeMs > 0\n        );\n      };\n\n      /* eslint-disable-next-line prefer-const */\n      let sendPing: () => void; // hoisted for use in maybeStartKeepalivePingTimer\n\n      const maybeStartKeepalivePingTimer = () => {\n        if (!canSendPing()) {\n          return;\n        }\n        this.keepaliveTrace(\n          'Starting keepalive timer for ' + this.keepaliveTimeMs + 'ms'\n        );\n        keepaliveTimer = setTimeout(() => {\n          clearKeepaliveTimeout();\n          sendPing();\n        }, this.keepaliveTimeMs);\n        keepaliveTimer.unref?.();\n      };\n\n      sendPing = () => {\n        if (!canSendPing()) {\n          return;\n        }\n        this.keepaliveTrace(\n          'Sending ping with timeout ' + this.keepaliveTimeoutMs + 'ms'\n        );\n        let pingSendError = '';\n        try {\n          const pingSentSuccessfully = session.ping(\n            (err: Error | null, duration: number, payload: Buffer) => {\n              clearKeepaliveTimeout();\n              if (err) {\n                this.keepaliveTrace('Ping failed with error: ' + err.message);\n                sessionClosedByServer = true;\n                session.destroy();\n              } else {\n                this.keepaliveTrace('Received ping response');\n                maybeStartKeepalivePingTimer();\n              }\n            }\n          );\n          if (!pingSentSuccessfully) {\n            pingSendError = 'Ping returned false';\n          }\n        } catch (e) {\n          // grpc/grpc-node#2139\n          pingSendError =\n            (e instanceof Error ? e.message : '') || 'Unknown error';\n        }\n\n        if (pingSendError) {\n          this.keepaliveTrace('Ping send failed: ' + pingSendError);\n          this.trace(\n            'Connection dropped due to ping send error: ' + pingSendError\n          );\n          sessionClosedByServer = true;\n          session.destroy();\n          return;\n        }\n\n        keepaliveTimer = setTimeout(() => {\n          clearKeepaliveTimeout();\n          this.keepaliveTrace('Ping timeout passed without response');\n          this.trace('Connection dropped by keepalive timeout');\n          sessionClosedByServer = true;\n          session.destroy();\n        }, this.keepaliveTimeoutMs);\n        keepaliveTimer.unref?.();\n      };\n\n      maybeStartKeepalivePingTimer();\n\n      session.on('close', () => {\n        if (!sessionClosedByServer) {\n          this.trace(\n            `Connection dropped by client ${session.socket?.remoteAddress}`\n          );\n        }\n\n        if (connectionAgeTimer) {\n          clearTimeout(connectionAgeTimer);\n        }\n\n        if (connectionAgeGraceTimer) {\n          clearTimeout(connectionAgeGraceTimer);\n        }\n\n        clearKeepaliveTimeout();\n\n        if (idleTimeoutObj !== null) {\n          clearTimeout(idleTimeoutObj.timeout);\n          this.sessionIdleTimeouts.delete(session);\n        }\n\n        this.http2Servers.get(http2Server)?.sessions.delete(session);\n      });\n    };\n  }\n\n  private _channelzSessionHandler(\n    http2Server: http2.Http2Server | http2.Http2SecureServer\n  ) {\n    return (session: http2.ServerHttp2Session) => {\n      const channelzRef = registerChannelzSocket(\n        session.socket?.remoteAddress ?? 'unknown',\n        this.getChannelzSessionInfo.bind(this, session),\n        this.channelzEnabled\n      );\n\n      const channelzSessionInfo: ChannelzSessionInfo = {\n        ref: channelzRef,\n        streamTracker: new ChannelzCallTracker(),\n        messagesSent: 0,\n        messagesReceived: 0,\n        keepAlivesSent: 0,\n        lastMessageSentTimestamp: null,\n        lastMessageReceivedTimestamp: null,\n      };\n\n      this.http2Servers.get(http2Server)?.sessions.add(session);\n      this.sessions.set(session, channelzSessionInfo);\n      const clientAddress = `${session.socket.remoteAddress}:${session.socket.remotePort}`;\n\n      this.channelzTrace.addTrace(\n        'CT_INFO',\n        'Connection established by client ' + clientAddress\n      );\n      this.trace('Connection established by client ' + clientAddress);\n      this.sessionChildrenTracker.refChild(channelzRef);\n\n      let connectionAgeTimer: NodeJS.Timeout | null = null;\n      let connectionAgeGraceTimer: NodeJS.Timeout | null = null;\n      let keepaliveTimeout: NodeJS.Timeout | null = null;\n      let sessionClosedByServer = false;\n\n      const idleTimeoutObj = this.enableIdleTimeout(session);\n\n      if (this.maxConnectionAgeMs !== UNLIMITED_CONNECTION_AGE_MS) {\n        // Apply a random jitter within a +/-10% range\n        const jitterMagnitude = this.maxConnectionAgeMs / 10;\n        const jitter = Math.random() * jitterMagnitude * 2 - jitterMagnitude;\n\n        connectionAgeTimer = setTimeout(() => {\n          sessionClosedByServer = true;\n          this.channelzTrace.addTrace(\n            'CT_INFO',\n            'Connection dropped by max connection age from ' + clientAddress\n          );\n\n          try {\n            session.goaway(\n              http2.constants.NGHTTP2_NO_ERROR,\n              ~(1 << 31),\n              kMaxAge\n            );\n          } catch (e) {\n            // The goaway can't be sent because the session is already closed\n            session.destroy();\n            return;\n          }\n          session.close();\n\n          /* Allow a grace period after sending the GOAWAY before forcibly\n           * closing the connection. */\n          if (this.maxConnectionAgeGraceMs !== UNLIMITED_CONNECTION_AGE_MS) {\n            connectionAgeGraceTimer = setTimeout(() => {\n              session.destroy();\n            }, this.maxConnectionAgeGraceMs);\n            connectionAgeGraceTimer.unref?.();\n          }\n        }, this.maxConnectionAgeMs + jitter);\n        connectionAgeTimer.unref?.();\n      }\n\n      const clearKeepaliveTimeout = () => {\n        if (keepaliveTimeout) {\n          clearTimeout(keepaliveTimeout);\n          keepaliveTimeout = null;\n        }\n      };\n\n      const canSendPing = () => {\n        return (\n          !session.destroyed &&\n          this.keepaliveTimeMs < KEEPALIVE_MAX_TIME_MS &&\n          this.keepaliveTimeMs > 0\n        );\n      };\n\n      /* eslint-disable-next-line prefer-const */\n      let sendPing: () => void; // hoisted for use in maybeStartKeepalivePingTimer\n\n      const maybeStartKeepalivePingTimer = () => {\n        if (!canSendPing()) {\n          return;\n        }\n        this.keepaliveTrace(\n          'Starting keepalive timer for ' + this.keepaliveTimeMs + 'ms'\n        );\n        keepaliveTimeout = setTimeout(() => {\n          clearKeepaliveTimeout();\n          sendPing();\n        }, this.keepaliveTimeMs);\n        keepaliveTimeout.unref?.();\n      };\n\n      sendPing = () => {\n        if (!canSendPing()) {\n          return;\n        }\n        this.keepaliveTrace(\n          'Sending ping with timeout ' + this.keepaliveTimeoutMs + 'ms'\n        );\n        let pingSendError = '';\n        try {\n          const pingSentSuccessfully = session.ping(\n            (err: Error | null, duration: number, payload: Buffer) => {\n              clearKeepaliveTimeout();\n              if (err) {\n                this.keepaliveTrace('Ping failed with error: ' + err.message);\n                this.channelzTrace.addTrace(\n                  'CT_INFO',\n                  'Connection dropped due to error of a ping frame ' +\n                    err.message +\n                    ' return in ' +\n                    duration\n                );\n                sessionClosedByServer = true;\n                session.destroy();\n              } else {\n                this.keepaliveTrace('Received ping response');\n                maybeStartKeepalivePingTimer();\n              }\n            }\n          );\n          if (!pingSentSuccessfully) {\n            pingSendError = 'Ping returned false';\n          }\n        } catch (e) {\n          // grpc/grpc-node#2139\n          pingSendError =\n            (e instanceof Error ? e.message : '') || 'Unknown error';\n        }\n\n        if (pingSendError) {\n          this.keepaliveTrace('Ping send failed: ' + pingSendError);\n          this.channelzTrace.addTrace(\n            'CT_INFO',\n            'Connection dropped due to ping send error: ' + pingSendError\n          );\n          sessionClosedByServer = true;\n          session.destroy();\n          return;\n        }\n\n        channelzSessionInfo.keepAlivesSent += 1;\n\n        keepaliveTimeout = setTimeout(() => {\n          clearKeepaliveTimeout();\n          this.keepaliveTrace('Ping timeout passed without response');\n          this.channelzTrace.addTrace(\n            'CT_INFO',\n            'Connection dropped by keepalive timeout from ' + clientAddress\n          );\n          sessionClosedByServer = true;\n          session.destroy();\n        }, this.keepaliveTimeoutMs);\n        keepaliveTimeout.unref?.();\n      };\n\n      maybeStartKeepalivePingTimer();\n\n      session.on('close', () => {\n        if (!sessionClosedByServer) {\n          this.channelzTrace.addTrace(\n            'CT_INFO',\n            'Connection dropped by client ' + clientAddress\n          );\n        }\n\n        this.sessionChildrenTracker.unrefChild(channelzRef);\n        unregisterChannelzRef(channelzRef);\n\n        if (connectionAgeTimer) {\n          clearTimeout(connectionAgeTimer);\n        }\n\n        if (connectionAgeGraceTimer) {\n          clearTimeout(connectionAgeGraceTimer);\n        }\n\n        clearKeepaliveTimeout();\n\n        if (idleTimeoutObj !== null) {\n          clearTimeout(idleTimeoutObj.timeout);\n          this.sessionIdleTimeouts.delete(session);\n        }\n\n        this.http2Servers.get(http2Server)?.sessions.delete(session);\n        this.sessions.delete(session);\n      });\n    };\n  }\n\n  private enableIdleTimeout(\n    session: http2.ServerHttp2Session\n  ): SessionIdleTimeoutTracker | null {\n    if (this.sessionIdleTimeout >= MAX_CONNECTION_IDLE_MS) {\n      return null;\n    }\n\n    const idleTimeoutObj: SessionIdleTimeoutTracker = {\n      activeStreams: 0,\n      lastIdle: Date.now(),\n      onClose: this.onStreamClose.bind(this, session),\n      timeout: setTimeout(\n        this.onIdleTimeout,\n        this.sessionIdleTimeout,\n        this,\n        session\n      ),\n    };\n    idleTimeoutObj.timeout.unref?.();\n    this.sessionIdleTimeouts.set(session, idleTimeoutObj);\n\n    const { socket } = session;\n    this.trace(\n      'Enable idle timeout for ' +\n        socket.remoteAddress +\n        ':' +\n        socket.remotePort\n    );\n\n    return idleTimeoutObj;\n  }\n\n  private onIdleTimeout(\n    this: undefined,\n    ctx: Server,\n    session: http2.ServerHttp2Session\n  ) {\n    const { socket } = session;\n    const sessionInfo = ctx.sessionIdleTimeouts.get(session);\n\n    // if it is called while we have activeStreams - timer will not be rescheduled\n    // until last active stream is closed, then it will call .refresh() on the timer\n    // important part is to not clearTimeout(timer) or it becomes unusable\n    // for future refreshes\n    if (\n      sessionInfo !== undefined &&\n      sessionInfo.activeStreams === 0\n    ) {\n      if (Date.now() - sessionInfo.lastIdle >= ctx.sessionIdleTimeout) {\n        ctx.trace(\n          'Session idle timeout triggered for ' +\n            socket?.remoteAddress +\n            ':' +\n            socket?.remotePort +\n            ' last idle at ' +\n            sessionInfo.lastIdle\n        );\n\n        ctx.closeSession(session);\n      } else {\n        sessionInfo.timeout.refresh();\n      }\n    }\n  }\n\n  private onStreamOpened(stream: http2.ServerHttp2Stream) {\n    const session = stream.session as http2.ServerHttp2Session;\n\n    const idleTimeoutObj = this.sessionIdleTimeouts.get(session);\n    if (idleTimeoutObj) {\n      idleTimeoutObj.activeStreams += 1;\n      stream.once('close', idleTimeoutObj.onClose);\n    }\n  }\n\n  private onStreamClose(session: http2.ServerHttp2Session) {\n    const idleTimeoutObj = this.sessionIdleTimeouts.get(session);\n\n    if (idleTimeoutObj) {\n      idleTimeoutObj.activeStreams -= 1;\n      if (idleTimeoutObj.activeStreams === 0) {\n        idleTimeoutObj.lastIdle = Date.now();\n        idleTimeoutObj.timeout.refresh();\n\n        this.trace(\n          'Session onStreamClose' +\n            session.socket?.remoteAddress +\n            ':' +\n            session.socket?.remotePort +\n            ' at ' +\n            idleTimeoutObj.lastIdle\n        );\n      }\n    }\n  }\n}\n\nasync function handleUnary<RequestType, ResponseType>(\n  call: ServerInterceptingCallInterface,\n  handler: UnaryHandler<RequestType, ResponseType>\n): Promise<void> {\n  let stream: ServerUnaryCall<RequestType, ResponseType>;\n\n  function respond(\n    err: ServerErrorResponse | ServerStatusResponse | null,\n    value?: ResponseType | null,\n    trailer?: Metadata,\n    flags?: number\n  ) {\n    if (err) {\n      call.sendStatus(serverErrorToStatus(err, trailer));\n      return;\n    }\n    call.sendMessage(value, () => {\n      call.sendStatus({\n        code: Status.OK,\n        details: 'OK',\n        metadata: trailer ?? null,\n      });\n    });\n  }\n\n  let requestMetadata: Metadata;\n  let requestMessage: RequestType | null = null;\n  call.start({\n    onReceiveMetadata(metadata) {\n      requestMetadata = metadata;\n      call.startRead();\n    },\n    onReceiveMessage(message) {\n      if (requestMessage) {\n        call.sendStatus({\n          code: Status.UNIMPLEMENTED,\n          details: `Received a second request message for server streaming method ${handler.path}`,\n          metadata: null,\n        });\n        return;\n      }\n      requestMessage = message;\n      call.startRead();\n    },\n    onReceiveHalfClose() {\n      if (!requestMessage) {\n        call.sendStatus({\n          code: Status.UNIMPLEMENTED,\n          details: `Received no request message for server streaming method ${handler.path}`,\n          metadata: null,\n        });\n        return;\n      }\n      stream = new ServerWritableStreamImpl(\n        handler.path,\n        call,\n        requestMetadata,\n        requestMessage\n      );\n      try {\n        handler.func(stream, respond);\n      } catch (err) {\n        call.sendStatus({\n          code: Status.UNKNOWN,\n          details: `Server method handler threw error ${\n            (err as Error).message\n          }`,\n          metadata: null,\n        });\n      }\n    },\n    onCancel() {\n      if (stream) {\n        stream.cancelled = true;\n        stream.emit('cancelled', 'cancelled');\n      }\n    },\n  });\n}\n\nfunction handleClientStreaming<RequestType, ResponseType>(\n  call: ServerInterceptingCallInterface,\n  handler: ClientStreamingHandler<RequestType, ResponseType>\n): void {\n  let stream: ServerReadableStream<RequestType, ResponseType>;\n\n  function respond(\n    err: ServerErrorResponse | ServerStatusResponse | null,\n    value?: ResponseType | null,\n    trailer?: Metadata,\n    flags?: number\n  ) {\n    if (err) {\n      call.sendStatus(serverErrorToStatus(err, trailer));\n      return;\n    }\n    call.sendMessage(value, () => {\n      call.sendStatus({\n        code: Status.OK,\n        details: 'OK',\n        metadata: trailer ?? null,\n      });\n    });\n  }\n\n  call.start({\n    onReceiveMetadata(metadata) {\n      stream = new ServerDuplexStreamImpl(handler.path, call, metadata);\n      try {\n        handler.func(stream, respond);\n      } catch (err) {\n        call.sendStatus({\n          code: Status.UNKNOWN,\n          details: `Server method handler threw error ${\n            (err as Error).message\n          }`,\n          metadata: null,\n        });\n      }\n    },\n    onReceiveMessage(message) {\n      stream.push(message);\n    },\n    onReceiveHalfClose() {\n      stream.push(null);\n    },\n    onCancel() {\n      if (stream) {\n        stream.cancelled = true;\n        stream.emit('cancelled', 'cancelled');\n        stream.destroy();\n      }\n    },\n  });\n}\n\nfunction handleServerStreaming<RequestType, ResponseType>(\n  call: ServerInterceptingCallInterface,\n  handler: ServerStreamingHandler<RequestType, ResponseType>\n): void {\n  let stream: ServerWritableStream<RequestType, ResponseType>;\n\n  let requestMetadata: Metadata;\n  let requestMessage: RequestType | null = null;\n  call.start({\n    onReceiveMetadata(metadata) {\n      requestMetadata = metadata;\n      call.startRead();\n    },\n    onReceiveMessage(message) {\n      if (requestMessage) {\n        call.sendStatus({\n          code: Status.UNIMPLEMENTED,\n          details: `Received a second request message for server streaming method ${handler.path}`,\n          metadata: null,\n        });\n        return;\n      }\n      requestMessage = message;\n      call.startRead();\n    },\n    onReceiveHalfClose() {\n      if (!requestMessage) {\n        call.sendStatus({\n          code: Status.UNIMPLEMENTED,\n          details: `Received no request message for server streaming method ${handler.path}`,\n          metadata: null,\n        });\n        return;\n      }\n      stream = new ServerWritableStreamImpl(\n        handler.path,\n        call,\n        requestMetadata,\n        requestMessage\n      );\n      try {\n        handler.func(stream);\n      } catch (err) {\n        call.sendStatus({\n          code: Status.UNKNOWN,\n          details: `Server method handler threw error ${\n            (err as Error).message\n          }`,\n          metadata: null,\n        });\n      }\n    },\n    onCancel() {\n      if (stream) {\n        stream.cancelled = true;\n        stream.emit('cancelled', 'cancelled');\n        stream.destroy();\n      }\n    },\n  });\n}\n\nfunction handleBidiStreaming<RequestType, ResponseType>(\n  call: ServerInterceptingCallInterface,\n  handler: BidiStreamingHandler<RequestType, ResponseType>\n): void {\n  let stream: ServerDuplexStream<RequestType, ResponseType>;\n\n  call.start({\n    onReceiveMetadata(metadata) {\n      stream = new ServerDuplexStreamImpl(handler.path, call, metadata);\n      try {\n        handler.func(stream);\n      } catch (err) {\n        call.sendStatus({\n          code: Status.UNKNOWN,\n          details: `Server method handler threw error ${\n            (err as Error).message\n          }`,\n          metadata: null,\n        });\n      }\n    },\n    onReceiveMessage(message) {\n      stream.push(message);\n    },\n    onReceiveHalfClose() {\n      stream.push(null);\n    },\n    onCancel() {\n      if (stream) {\n        stream.cancelled = true;\n        stream.emit('cancelled', 'cancelled');\n        stream.destroy();\n      }\n    },\n  });\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport { StatusObject } from './call-interface';\nimport { Status } from './constants';\nimport { Metadata } from './metadata';\n\n/**\n * A builder for gRPC status objects.\n */\nexport class StatusBuilder {\n  private code: Status | null;\n  private details: string | null;\n  private metadata: Metadata | null;\n\n  constructor() {\n    this.code = null;\n    this.details = null;\n    this.metadata = null;\n  }\n\n  /**\n   * Adds a status code to the builder.\n   */\n  withCode(code: Status): this {\n    this.code = code;\n    return this;\n  }\n\n  /**\n   * Adds details to the builder.\n   */\n  withDetails(details: string): this {\n    this.details = details;\n    return this;\n  }\n\n  /**\n   * Adds metadata to the builder.\n   */\n  withMetadata(metadata: Metadata): this {\n    this.metadata = metadata;\n    return this;\n  }\n\n  /**\n   * Builds the status object.\n   */\n  build(): Partial<StatusObject> {\n    const status: Partial<StatusObject> = {};\n\n    if (this.code !== null) {\n      status.code = this.code;\n    }\n\n    if (this.details !== null) {\n      status.details = this.details;\n    }\n\n    if (this.metadata !== null) {\n      status.metadata = this.metadata;\n    }\n\n    return status;\n  }\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport {\n  LoadBalancer,\n  ChannelControlHelper,\n  TypedLoadBalancingConfig,\n  registerDefaultLoadBalancerType,\n  registerLoadBalancerType,\n  createChildChannelControlHelper,\n} from './load-balancer';\nimport { ConnectivityState } from './connectivity-state';\nimport {\n  QueuePicker,\n  Picker,\n  PickArgs,\n  CompletePickResult,\n  PickResultType,\n  UnavailablePicker,\n} from './picker';\nimport { Endpoint, SubchannelAddress, subchannelAddressToString } from './subchannel-address';\nimport * as logging from './logging';\nimport { LogVerbosity } from './constants';\nimport {\n  SubchannelInterface,\n  ConnectivityStateListener,\n  HealthListener,\n} from './subchannel-interface';\nimport { isTcpSubchannelAddress } from './subchannel-address';\nimport { isIPv6 } from 'net';\nimport { ChannelOptions } from './channel-options';\nimport { StatusOr, statusOrFromValue } from './call-interface';\n\nconst TRACER_NAME = 'pick_first';\n\nfunction trace(text: string): void {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\nconst TYPE_NAME = 'pick_first';\n\n/**\n * Delay after starting a connection on a subchannel before starting a\n * connection on the next subchannel in the list, for Happy Eyeballs algorithm.\n */\nconst CONNECTION_DELAY_INTERVAL_MS = 250;\n\nexport class PickFirstLoadBalancingConfig implements TypedLoadBalancingConfig {\n  constructor(private readonly shuffleAddressList: boolean) {}\n\n  getLoadBalancerName(): string {\n    return TYPE_NAME;\n  }\n\n  toJsonObject(): object {\n    return {\n      [TYPE_NAME]: {\n        shuffleAddressList: this.shuffleAddressList,\n      },\n    };\n  }\n\n  getShuffleAddressList() {\n    return this.shuffleAddressList;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  static createFromJson(obj: any) {\n    if (\n      'shuffleAddressList' in obj &&\n      !(typeof obj.shuffleAddressList === 'boolean')\n    ) {\n      throw new Error(\n        'pick_first config field shuffleAddressList must be a boolean if provided'\n      );\n    }\n    return new PickFirstLoadBalancingConfig(obj.shuffleAddressList === true);\n  }\n}\n\n/**\n * Picker for a `PickFirstLoadBalancer` in the READY state. Always returns the\n * picked subchannel.\n */\nclass PickFirstPicker implements Picker {\n  constructor(private subchannel: SubchannelInterface) {}\n\n  pick(pickArgs: PickArgs): CompletePickResult {\n    return {\n      pickResultType: PickResultType.COMPLETE,\n      subchannel: this.subchannel,\n      status: null,\n      onCallStarted: null,\n      onCallEnded: null,\n    };\n  }\n}\n\ninterface SubchannelChild {\n  subchannel: SubchannelInterface;\n  hasReportedTransientFailure: boolean;\n}\n\n/**\n * Return a new array with the elements of the input array in a random order\n * @param list The input array\n * @returns A shuffled array of the elements of list\n */\nexport function shuffled<T>(list: T[]): T[] {\n  const result = list.slice();\n  for (let i = result.length - 1; i > 1; i--) {\n    const j = Math.floor(Math.random() * (i + 1));\n    const temp = result[i];\n    result[i] = result[j];\n    result[j] = temp;\n  }\n  return result;\n}\n\n/**\n * Interleave addresses in addressList by family in accordance with RFC-8304 section 4\n * @param addressList\n * @returns\n */\nfunction interleaveAddressFamilies(\n  addressList: SubchannelAddress[]\n): SubchannelAddress[] {\n  if (addressList.length === 0) {\n    return [];\n  }\n  const result: SubchannelAddress[] = [];\n  const ipv6Addresses: SubchannelAddress[] = [];\n  const ipv4Addresses: SubchannelAddress[] = [];\n  const ipv6First =\n    isTcpSubchannelAddress(addressList[0]) && isIPv6(addressList[0].host);\n  for (const address of addressList) {\n    if (isTcpSubchannelAddress(address) && isIPv6(address.host)) {\n      ipv6Addresses.push(address);\n    } else {\n      ipv4Addresses.push(address);\n    }\n  }\n  const firstList = ipv6First ? ipv6Addresses : ipv4Addresses;\n  const secondList = ipv6First ? ipv4Addresses : ipv6Addresses;\n  for (let i = 0; i < Math.max(firstList.length, secondList.length); i++) {\n    if (i < firstList.length) {\n      result.push(firstList[i]);\n    }\n    if (i < secondList.length) {\n      result.push(secondList[i]);\n    }\n  }\n  return result;\n}\n\nconst REPORT_HEALTH_STATUS_OPTION_NAME =\n  'grpc-node.internal.pick-first.report_health_status';\n\nexport class PickFirstLoadBalancer implements LoadBalancer {\n  /**\n   * The list of subchannels this load balancer is currently attempting to\n   * connect to.\n   */\n  private children: SubchannelChild[] = [];\n  /**\n   * The current connectivity state of the load balancer.\n   */\n  private currentState: ConnectivityState = ConnectivityState.IDLE;\n  /**\n   * The index within the `subchannels` array of the subchannel with the most\n   * recently started connection attempt.\n   */\n  private currentSubchannelIndex = 0;\n  /**\n   * The currently picked subchannel used for making calls. Populated if\n   * and only if the load balancer's current state is READY. In that case,\n   * the subchannel's current state is also READY.\n   */\n  private currentPick: SubchannelInterface | null = null;\n  /**\n   * Listener callback attached to each subchannel in the `subchannels` list\n   * while establishing a connection.\n   */\n  private subchannelStateListener: ConnectivityStateListener = (\n    subchannel,\n    previousState,\n    newState,\n    keepaliveTime,\n    errorMessage\n  ) => {\n    this.onSubchannelStateUpdate(\n      subchannel,\n      previousState,\n      newState,\n      errorMessage\n    );\n  };\n\n  private pickedSubchannelHealthListener: HealthListener = () =>\n    this.calculateAndReportNewState();\n  /**\n   * Timer reference for the timer tracking when to start\n   */\n  private connectionDelayTimeout: NodeJS.Timeout;\n\n  /**\n   * The LB policy enters sticky TRANSIENT_FAILURE mode when all\n   * subchannels have failed to connect at least once, and it stays in that\n   * mode until a connection attempt is successful. While in sticky TF mode,\n   * the LB policy continuously attempts to connect to all of its subchannels.\n   */\n  private stickyTransientFailureMode = false;\n\n  private reportHealthStatus: boolean = false;\n\n  /**\n   * The most recent error reported by any subchannel as it transitioned to\n   * TRANSIENT_FAILURE.\n   */\n  private lastError: string | null = null;\n\n  private latestAddressList: SubchannelAddress[] | null = null;\n\n  private latestOptions: ChannelOptions = {};\n\n  private latestResolutionNote: string = '';\n\n  /**\n   * Load balancer that attempts to connect to each backend in the address list\n   * in order, and picks the first one that connects, using it for every\n   * request.\n   * @param channelControlHelper `ChannelControlHelper` instance provided by\n   *     this load balancer's owner.\n   */\n  constructor(\n    private readonly channelControlHelper: ChannelControlHelper\n  ) {\n    this.connectionDelayTimeout = setTimeout(() => {}, 0);\n    clearTimeout(this.connectionDelayTimeout);\n  }\n\n  private allChildrenHaveReportedTF(): boolean {\n    return this.children.every(child => child.hasReportedTransientFailure);\n  }\n\n  private resetChildrenReportedTF() {\n    this.children.every(child => child.hasReportedTransientFailure = false);\n  }\n\n  private calculateAndReportNewState() {\n    if (this.currentPick) {\n      if (this.reportHealthStatus && !this.currentPick.isHealthy()) {\n        const errorMessage = `Picked subchannel ${this.currentPick.getAddress()} is unhealthy`;\n        this.updateState(\n          ConnectivityState.TRANSIENT_FAILURE,\n          new UnavailablePicker({\n            details: errorMessage,\n          }),\n          errorMessage\n        );\n      } else {\n        this.updateState(\n          ConnectivityState.READY,\n          new PickFirstPicker(this.currentPick),\n          null\n        );\n      }\n    } else if (this.latestAddressList?.length === 0) {\n      const errorMessage = `No connection established. Last error: ${this.lastError}. Resolution note: ${this.latestResolutionNote}`;\n      this.updateState(\n        ConnectivityState.TRANSIENT_FAILURE,\n        new UnavailablePicker({\n          details: errorMessage,\n        }),\n        errorMessage\n      );\n    } else if (this.children.length === 0) {\n      this.updateState(ConnectivityState.IDLE, new QueuePicker(this), null);\n    } else {\n      if (this.stickyTransientFailureMode) {\n        const errorMessage = `No connection established. Last error: ${this.lastError}. Resolution note: ${this.latestResolutionNote}`;\n        this.updateState(\n          ConnectivityState.TRANSIENT_FAILURE,\n          new UnavailablePicker({\n            details: errorMessage,\n          }),\n          errorMessage\n        );\n      } else {\n        this.updateState(ConnectivityState.CONNECTING, new QueuePicker(this), null);\n      }\n    }\n  }\n\n  private requestReresolution() {\n    this.channelControlHelper.requestReresolution();\n  }\n\n  private maybeEnterStickyTransientFailureMode() {\n    if (!this.allChildrenHaveReportedTF()) {\n      return;\n    }\n    this.requestReresolution();\n    this.resetChildrenReportedTF();\n    if (this.stickyTransientFailureMode) {\n      this.calculateAndReportNewState();\n      return;\n    }\n    this.stickyTransientFailureMode = true;\n    for (const { subchannel } of this.children) {\n      subchannel.startConnecting();\n    }\n    this.calculateAndReportNewState();\n  }\n\n  private removeCurrentPick() {\n    if (this.currentPick !== null) {\n      this.currentPick.removeConnectivityStateListener(this.subchannelStateListener);\n      this.channelControlHelper.removeChannelzChild(\n        this.currentPick.getChannelzRef()\n      );\n      this.currentPick.removeHealthStateWatcher(\n        this.pickedSubchannelHealthListener\n      );\n      // Unref last, to avoid triggering listeners\n      this.currentPick.unref();\n      this.currentPick = null;\n    }\n  }\n\n  private onSubchannelStateUpdate(\n    subchannel: SubchannelInterface,\n    previousState: ConnectivityState,\n    newState: ConnectivityState,\n    errorMessage?: string\n  ) {\n    if (this.currentPick?.realSubchannelEquals(subchannel)) {\n      if (newState !== ConnectivityState.READY) {\n        this.removeCurrentPick();\n        this.calculateAndReportNewState();\n      }\n      return;\n    }\n    for (const [index, child] of this.children.entries()) {\n      if (subchannel.realSubchannelEquals(child.subchannel)) {\n        if (newState === ConnectivityState.READY) {\n          this.pickSubchannel(child.subchannel);\n        }\n        if (newState === ConnectivityState.TRANSIENT_FAILURE) {\n          child.hasReportedTransientFailure = true;\n          if (errorMessage) {\n            this.lastError = errorMessage;\n          }\n          this.maybeEnterStickyTransientFailureMode();\n          if (index === this.currentSubchannelIndex) {\n            this.startNextSubchannelConnecting(index + 1);\n          }\n        }\n        child.subchannel.startConnecting();\n        return;\n      }\n    }\n  }\n\n  private startNextSubchannelConnecting(startIndex: number) {\n    clearTimeout(this.connectionDelayTimeout);\n    for (const [index, child] of this.children.entries()) {\n      if (index >= startIndex) {\n        const subchannelState = child.subchannel.getConnectivityState();\n        if (\n          subchannelState === ConnectivityState.IDLE ||\n          subchannelState === ConnectivityState.CONNECTING\n        ) {\n          this.startConnecting(index);\n          return;\n        }\n      }\n    }\n    this.maybeEnterStickyTransientFailureMode();\n  }\n\n  /**\n   * Have a single subchannel in the `subchannels` list start connecting.\n   * @param subchannelIndex The index into the `subchannels` list.\n   */\n  private startConnecting(subchannelIndex: number) {\n    clearTimeout(this.connectionDelayTimeout);\n    this.currentSubchannelIndex = subchannelIndex;\n    if (\n      this.children[subchannelIndex].subchannel.getConnectivityState() ===\n      ConnectivityState.IDLE\n    ) {\n      trace(\n        'Start connecting to subchannel with address ' +\n          this.children[subchannelIndex].subchannel.getAddress()\n      );\n      process.nextTick(() => {\n        this.children[subchannelIndex]?.subchannel.startConnecting();\n      });\n    }\n    this.connectionDelayTimeout = setTimeout(() => {\n      this.startNextSubchannelConnecting(subchannelIndex + 1);\n    }, CONNECTION_DELAY_INTERVAL_MS);\n    this.connectionDelayTimeout.unref?.();\n  }\n\n  /**\n   * Declare that the specified subchannel should be used to make requests.\n   * This functions the same independent of whether subchannel is a member of\n   * this.children and whether it is equal to this.currentPick.\n   * Prerequisite: subchannel.getConnectivityState() === READY.\n   * @param subchannel\n   */\n  private pickSubchannel(subchannel: SubchannelInterface) {\n    trace('Pick subchannel with address ' + subchannel.getAddress());\n    this.stickyTransientFailureMode = false;\n    /* Ref before removeCurrentPick and resetSubchannelList to avoid the\n     * refcount dropping to 0 during this process. */\n    subchannel.ref();\n    this.channelControlHelper.addChannelzChild(subchannel.getChannelzRef());\n    this.removeCurrentPick();\n    this.resetSubchannelList();\n    subchannel.addConnectivityStateListener(this.subchannelStateListener);\n    subchannel.addHealthStateWatcher(this.pickedSubchannelHealthListener);\n    this.currentPick = subchannel;\n    clearTimeout(this.connectionDelayTimeout);\n    this.calculateAndReportNewState();\n  }\n\n  private updateState(newState: ConnectivityState, picker: Picker, errorMessage: string | null) {\n    trace(\n      ConnectivityState[this.currentState] +\n        ' -> ' +\n        ConnectivityState[newState]\n    );\n    this.currentState = newState;\n    this.channelControlHelper.updateState(newState, picker, errorMessage);\n  }\n\n  private resetSubchannelList() {\n    for (const child of this.children) {\n      /* Always remoev the connectivity state listener. If the subchannel is\n         getting picked, it will be re-added then. */\n      child.subchannel.removeConnectivityStateListener(\n        this.subchannelStateListener\n      );\n      /* Refs are counted independently for the children list and the\n       * currentPick, so we call unref whether or not the child is the\n       * currentPick. Channelz child references are also refcounted, so\n       * removeChannelzChild can be handled the same way. */\n      child.subchannel.unref();\n      this.channelControlHelper.removeChannelzChild(\n        child.subchannel.getChannelzRef()\n      );\n    }\n    this.currentSubchannelIndex = 0;\n    this.children = [];\n  }\n\n  private connectToAddressList(addressList: SubchannelAddress[], options: ChannelOptions) {\n    trace('connectToAddressList([' + addressList.map(address => subchannelAddressToString(address)) + '])');\n    const newChildrenList = addressList.map(address => ({\n      subchannel: this.channelControlHelper.createSubchannel(address, options),\n      hasReportedTransientFailure: false,\n    }));\n    for (const { subchannel } of newChildrenList) {\n      if (subchannel.getConnectivityState() === ConnectivityState.READY) {\n        this.pickSubchannel(subchannel);\n        return;\n      }\n    }\n    /* Ref each subchannel before resetting the list, to ensure that\n     * subchannels shared between the list don't drop to 0 refs during the\n     * transition. */\n    for (const { subchannel } of newChildrenList) {\n      subchannel.ref();\n      this.channelControlHelper.addChannelzChild(subchannel.getChannelzRef());\n    }\n    this.resetSubchannelList();\n    this.children = newChildrenList;\n    for (const { subchannel } of this.children) {\n      subchannel.addConnectivityStateListener(this.subchannelStateListener);\n    }\n    for (const child of this.children) {\n      if (\n        child.subchannel.getConnectivityState() ===\n        ConnectivityState.TRANSIENT_FAILURE\n      ) {\n        child.hasReportedTransientFailure = true;\n      }\n    }\n    this.startNextSubchannelConnecting(0);\n    this.calculateAndReportNewState();\n  }\n\n  updateAddressList(\n    maybeEndpointList: StatusOr<Endpoint[]>,\n    lbConfig: TypedLoadBalancingConfig,\n    options: ChannelOptions,\n    resolutionNote: string\n  ): boolean {\n    if (!(lbConfig instanceof PickFirstLoadBalancingConfig)) {\n      return false;\n    }\n    if (!maybeEndpointList.ok) {\n      if (this.children.length === 0 && this.currentPick === null) {\n        this.channelControlHelper.updateState(\n          ConnectivityState.TRANSIENT_FAILURE,\n          new UnavailablePicker(maybeEndpointList.error),\n          maybeEndpointList.error.details\n        );\n      }\n      return true;\n    }\n    let endpointList = maybeEndpointList.value;\n    this.reportHealthStatus = options[REPORT_HEALTH_STATUS_OPTION_NAME];\n    /* Previously, an update would be discarded if it was identical to the\n     * previous update, to minimize churn. Now the DNS resolver is\n     * rate-limited, so that is less of a concern. */\n    if (lbConfig.getShuffleAddressList()) {\n      endpointList = shuffled(endpointList);\n    }\n    const rawAddressList = ([] as SubchannelAddress[]).concat(\n      ...endpointList.map(endpoint => endpoint.addresses)\n    );\n    trace('updateAddressList([' + rawAddressList.map(address => subchannelAddressToString(address)) + '])');\n    const addressList = interleaveAddressFamilies(rawAddressList);\n    this.latestAddressList = addressList;\n    this.latestOptions = options;\n    this.connectToAddressList(addressList, options);\n    this.latestResolutionNote = resolutionNote;\n    if (rawAddressList.length > 0) {\n      return true;\n    } else {\n      this.lastError = 'No addresses resolved';\n      return false;\n    }\n  }\n\n  exitIdle() {\n    if (\n      this.currentState === ConnectivityState.IDLE &&\n      this.latestAddressList\n    ) {\n      this.connectToAddressList(this.latestAddressList, this.latestOptions);\n    }\n  }\n\n  resetBackoff() {\n    /* The pick first load balancer does not have a connection backoff, so this\n     * does nothing */\n  }\n\n  destroy() {\n    this.resetSubchannelList();\n    this.removeCurrentPick();\n  }\n\n  getTypeName(): string {\n    return TYPE_NAME;\n  }\n}\n\nconst LEAF_CONFIG = new PickFirstLoadBalancingConfig(false);\n\n/**\n * This class handles the leaf load balancing operations for a single endpoint.\n * It is a thin wrapper around a PickFirstLoadBalancer with a different API\n * that more closely reflects how it will be used as a leaf balancer.\n */\nexport class LeafLoadBalancer {\n  private pickFirstBalancer: PickFirstLoadBalancer;\n  private latestState: ConnectivityState = ConnectivityState.IDLE;\n  private latestPicker: Picker;\n  constructor(\n    private endpoint: Endpoint,\n    channelControlHelper: ChannelControlHelper,\n    private options: ChannelOptions,\n    private resolutionNote: string\n  ) {\n    const childChannelControlHelper = createChildChannelControlHelper(\n      channelControlHelper,\n      {\n        updateState: (connectivityState, picker, errorMessage) => {\n          this.latestState = connectivityState;\n          this.latestPicker = picker;\n          channelControlHelper.updateState(connectivityState, picker, errorMessage);\n        },\n      }\n    );\n    this.pickFirstBalancer = new PickFirstLoadBalancer(\n      childChannelControlHelper\n    );\n    this.latestPicker = new QueuePicker(this.pickFirstBalancer);\n  }\n\n  startConnecting() {\n    this.pickFirstBalancer.updateAddressList(\n      statusOrFromValue([this.endpoint]),\n      LEAF_CONFIG,\n      { ...this.options, [REPORT_HEALTH_STATUS_OPTION_NAME]: true },\n      this.resolutionNote\n    );\n  }\n\n  /**\n   * Update the endpoint associated with this LeafLoadBalancer to a new\n   * endpoint. Does not trigger connection establishment if a connection\n   * attempt is not already in progress.\n   * @param newEndpoint\n   */\n  updateEndpoint(newEndpoint: Endpoint, newOptions: ChannelOptions) {\n    this.options = newOptions;\n    this.endpoint = newEndpoint;\n    if (this.latestState !== ConnectivityState.IDLE) {\n      this.startConnecting();\n    }\n  }\n\n  getConnectivityState() {\n    return this.latestState;\n  }\n\n  getPicker() {\n    return this.latestPicker;\n  }\n\n  getEndpoint() {\n    return this.endpoint;\n  }\n\n  exitIdle() {\n    this.pickFirstBalancer.exitIdle();\n  }\n\n  destroy() {\n    this.pickFirstBalancer.destroy();\n  }\n}\n\nexport function setup(): void {\n  registerLoadBalancerType(\n    TYPE_NAME,\n    PickFirstLoadBalancer,\n    PickFirstLoadBalancingConfig\n  );\n  registerDefaultLoadBalancerType(TYPE_NAME);\n}\n","/*\n * Copyright 2024 gRPC authors.\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 */\n\nimport * as fs from 'fs';\nimport * as logging from './logging';\nimport { LogVerbosity } from './constants';\nimport { promisify } from 'util';\n\nconst TRACER_NAME = 'certificate_provider';\n\nfunction trace(text: string) {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\nexport interface CaCertificateUpdate {\n  caCertificate: Buffer;\n}\n\nexport interface IdentityCertificateUpdate {\n  certificate: Buffer;\n  privateKey: Buffer;\n}\n\nexport interface CaCertificateUpdateListener {\n  (update: CaCertificateUpdate | null): void;\n}\n\nexport interface IdentityCertificateUpdateListener {\n  (update: IdentityCertificateUpdate | null) : void;\n}\n\nexport interface CertificateProvider {\n  addCaCertificateListener(listener: CaCertificateUpdateListener): void;\n  removeCaCertificateListener(listener: CaCertificateUpdateListener): void;\n  addIdentityCertificateListener(listener: IdentityCertificateUpdateListener): void;\n  removeIdentityCertificateListener(listener: IdentityCertificateUpdateListener): void;\n}\n\nexport interface FileWatcherCertificateProviderConfig {\n  certificateFile?: string | undefined;\n  privateKeyFile?: string | undefined;\n  caCertificateFile?: string | undefined;\n  refreshIntervalMs: number;\n}\n\nconst readFilePromise = promisify(fs.readFile);\n\nexport class FileWatcherCertificateProvider implements CertificateProvider {\n  private refreshTimer: NodeJS.Timeout | null = null;\n  private fileResultPromise: Promise<[PromiseSettledResult<Buffer>, PromiseSettledResult<Buffer>, PromiseSettledResult<Buffer>]> | null = null;\n  private latestCaUpdate: CaCertificateUpdate | null | undefined = undefined;\n  private caListeners: Set<CaCertificateUpdateListener> = new Set();\n  private latestIdentityUpdate: IdentityCertificateUpdate | null | undefined = undefined;\n  private identityListeners: Set<IdentityCertificateUpdateListener> = new Set();\n  private lastUpdateTime: Date | null = null;\n\n  constructor(\n    private config: FileWatcherCertificateProviderConfig\n  ) {\n    if ((config.certificateFile === undefined) !== (config.privateKeyFile === undefined)) {\n      throw new Error('certificateFile and privateKeyFile must be set or unset together');\n    }\n    if (config.certificateFile === undefined && config.caCertificateFile === undefined) {\n      throw new Error('At least one of certificateFile and caCertificateFile must be set');\n    }\n    trace('File watcher constructed with config ' + JSON.stringify(config));\n  }\n\n  private updateCertificates() {\n    if (this.fileResultPromise) {\n      return;\n    }\n    this.fileResultPromise = Promise.allSettled([\n      this.config.certificateFile ? readFilePromise(this.config.certificateFile) : Promise.reject<Buffer>(),\n      this.config.privateKeyFile ? readFilePromise(this.config.privateKeyFile) : Promise.reject<Buffer>(),\n      this.config.caCertificateFile ? readFilePromise(this.config.caCertificateFile) : Promise.reject<Buffer>()\n    ]);\n    this.fileResultPromise.then(([certificateResult, privateKeyResult, caCertificateResult]) => {\n      if (!this.refreshTimer) {\n        return;\n      }\n      trace('File watcher read certificates certificate ' + certificateResult.status + ', privateKey ' + privateKeyResult.status + ', CA certificate ' + caCertificateResult.status);\n      this.lastUpdateTime = new Date();\n      this.fileResultPromise = null;\n      if (certificateResult.status === 'fulfilled' && privateKeyResult.status === 'fulfilled') {\n        this.latestIdentityUpdate = {\n          certificate: certificateResult.value,\n          privateKey: privateKeyResult.value\n        };\n      } else {\n        this.latestIdentityUpdate = null;\n      }\n      if (caCertificateResult.status === 'fulfilled') {\n        this.latestCaUpdate = {\n          caCertificate: caCertificateResult.value\n        };\n      } else {\n        this.latestCaUpdate = null;\n      }\n      for (const listener of this.identityListeners) {\n        listener(this.latestIdentityUpdate);\n      }\n      for (const listener of this.caListeners) {\n        listener(this.latestCaUpdate);\n      }\n    });\n    trace('File watcher initiated certificate update');\n  }\n\n  private maybeStartWatchingFiles() {\n    if (!this.refreshTimer) {\n      /* Perform the first read immediately, but only if there was not already\n       * a recent read, to avoid reading from the filesystem significantly more\n       * frequently than configured if the provider quickly switches between\n       * used and unused. */\n      const timeSinceLastUpdate = this.lastUpdateTime ? (new Date()).getTime() - this.lastUpdateTime.getTime() : Infinity;\n      if (timeSinceLastUpdate > this.config.refreshIntervalMs) {\n        this.updateCertificates();\n      }\n      if (timeSinceLastUpdate > this.config.refreshIntervalMs * 2) {\n        // Clear out old updates if they are definitely stale\n        this.latestCaUpdate = undefined;\n        this.latestIdentityUpdate = undefined;\n      }\n      this.refreshTimer = setInterval(() => this.updateCertificates(), this.config.refreshIntervalMs);\n      trace('File watcher started watching');\n    }\n  }\n\n  private maybeStopWatchingFiles() {\n    if (this.caListeners.size === 0 && this.identityListeners.size === 0) {\n      this.fileResultPromise = null;\n      if (this.refreshTimer) {\n        clearInterval(this.refreshTimer);\n        this.refreshTimer = null;\n      }\n    }\n  }\n\n  addCaCertificateListener(listener: CaCertificateUpdateListener): void {\n    this.caListeners.add(listener);\n    this.maybeStartWatchingFiles();\n    if (this.latestCaUpdate !== undefined) {\n      process.nextTick(listener, this.latestCaUpdate);\n    }\n  }\n  removeCaCertificateListener(listener: CaCertificateUpdateListener): void {\n    this.caListeners.delete(listener);\n    this.maybeStopWatchingFiles();\n  }\n  addIdentityCertificateListener(listener: IdentityCertificateUpdateListener): void {\n    this.identityListeners.add(listener);\n    this.maybeStartWatchingFiles();\n    if (this.latestIdentityUpdate !== undefined) {\n      process.nextTick(listener, this.latestIdentityUpdate);\n    }\n  }\n  removeIdentityCertificateListener(listener: IdentityCertificateUpdateListener): void {\n    this.identityListeners.delete(listener);\n    this.maybeStopWatchingFiles();\n  }\n}\n","export { trace, log } from './logging';\nexport {\n  Resolver,\n  ResolverListener,\n  registerResolver,\n  ConfigSelector,\n  createResolver,\n  CHANNEL_ARGS_CONFIG_SELECTOR_KEY,\n} from './resolver';\nexport { GrpcUri, uriToString, splitHostPort, HostPort } from './uri-parser';\nexport { Duration, durationToMs, parseDuration } from './duration';\nexport { BackoffTimeout } from './backoff-timeout';\nexport {\n  LoadBalancer,\n  TypedLoadBalancingConfig,\n  ChannelControlHelper,\n  createChildChannelControlHelper,\n  registerLoadBalancerType,\n  selectLbConfigFromList,\n  parseLoadBalancingConfig,\n  isLoadBalancerNameRegistered,\n} from './load-balancer';\nexport { LeafLoadBalancer } from './load-balancer-pick-first';\nexport {\n  SubchannelAddress,\n  subchannelAddressToString,\n  Endpoint,\n  endpointToString,\n  endpointHasAddress,\n  EndpointMap,\n} from './subchannel-address';\nexport { ChildLoadBalancerHandler } from './load-balancer-child-handler';\nexport {\n  Picker,\n  UnavailablePicker,\n  QueuePicker,\n  PickResult,\n  PickArgs,\n  PickResultType,\n} from './picker';\nexport {\n  Call as CallStream,\n  StatusOr,\n  statusOrFromValue,\n  statusOrFromError\n} from './call-interface';\nexport { Filter, BaseFilter, FilterFactory } from './filter';\nexport { FilterStackFactory } from './filter-stack';\nexport { registerAdminService } from './admin';\nexport {\n  SubchannelInterface,\n  BaseSubchannelWrapper,\n  ConnectivityStateListener,\n  HealthListener,\n} from './subchannel-interface';\nexport {\n  OutlierDetectionRawConfig,\n  SuccessRateEjectionConfig,\n  FailurePercentageEjectionConfig,\n} from './load-balancer-outlier-detection';\n\nexport { createServerCredentialsWithInterceptors, createCertificateProviderServerCredentials } from './server-credentials';\nexport {\n  CaCertificateUpdate,\n  CaCertificateUpdateListener,\n  IdentityCertificateUpdate,\n  IdentityCertificateUpdateListener,\n  CertificateProvider,\n  FileWatcherCertificateProvider,\n  FileWatcherCertificateProviderConfig\n} from './certificate-provider';\nexport { createCertificateProviderChannelCredentials, SecureConnector, SecureConnectResult } from './channel-credentials';\nexport { SUBCHANNEL_ARGS_EXCLUDE_KEY_PREFIX } from './internal-channel';\n","/*\n * Copyright 2019 gRPC authors.\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\nimport { Resolver, ResolverListener, registerResolver } from './resolver';\nimport { Endpoint } from './subchannel-address';\nimport { GrpcUri } from './uri-parser';\nimport { ChannelOptions } from './channel-options';\nimport { statusOrFromValue } from './call-interface';\n\nclass UdsResolver implements Resolver {\n  private hasReturnedResult = false;\n  private endpoints: Endpoint[] = [];\n  constructor(\n    target: GrpcUri,\n    private listener: ResolverListener,\n    channelOptions: ChannelOptions\n  ) {\n    let path: string;\n    if (target.authority === '') {\n      path = '/' + target.path;\n    } else {\n      path = target.path;\n    }\n    this.endpoints = [{ addresses: [{ path }] }];\n  }\n  updateResolution(): void {\n    if (!this.hasReturnedResult) {\n      this.hasReturnedResult = true;\n      process.nextTick(\n        this.listener,\n        statusOrFromValue(this.endpoints),\n        {},\n        null,\n        ''\n      );\n    }\n  }\n\n  destroy() {\n    this.hasReturnedResult = false;\n  }\n\n  static getDefaultAuthority(target: GrpcUri): string {\n    return 'localhost';\n  }\n}\n\nexport function setup() {\n  registerResolver('unix', UdsResolver);\n}\n","/*\n * Copyright 2021 gRPC authors.\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\nimport { isIPv4, isIPv6 } from 'net';\nimport { StatusObject, statusOrFromError, statusOrFromValue } from './call-interface';\nimport { ChannelOptions } from './channel-options';\nimport { LogVerbosity, Status } from './constants';\nimport { Metadata } from './metadata';\nimport { registerResolver, Resolver, ResolverListener } from './resolver';\nimport { Endpoint, SubchannelAddress, subchannelAddressToString } from './subchannel-address';\nimport { GrpcUri, splitHostPort, uriToString } from './uri-parser';\nimport * as logging from './logging';\n\nconst TRACER_NAME = 'ip_resolver';\n\nfunction trace(text: string): void {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\nconst IPV4_SCHEME = 'ipv4';\nconst IPV6_SCHEME = 'ipv6';\n\n/**\n * The default TCP port to connect to if not explicitly specified in the target.\n */\nconst DEFAULT_PORT = 443;\n\nclass IpResolver implements Resolver {\n  private endpoints: Endpoint[] = [];\n  private error: StatusObject | null = null;\n  private hasReturnedResult = false;\n  constructor(\n    target: GrpcUri,\n    private listener: ResolverListener,\n    channelOptions: ChannelOptions\n  ) {\n    trace('Resolver constructed for target ' + uriToString(target));\n    const addresses: SubchannelAddress[] = [];\n    if (!(target.scheme === IPV4_SCHEME || target.scheme === IPV6_SCHEME)) {\n      this.error = {\n        code: Status.UNAVAILABLE,\n        details: `Unrecognized scheme ${target.scheme} in IP resolver`,\n        metadata: new Metadata(),\n      };\n      return;\n    }\n    const pathList = target.path.split(',');\n    for (const path of pathList) {\n      const hostPort = splitHostPort(path);\n      if (hostPort === null) {\n        this.error = {\n          code: Status.UNAVAILABLE,\n          details: `Failed to parse ${target.scheme} address ${path}`,\n          metadata: new Metadata(),\n        };\n        return;\n      }\n      if (\n        (target.scheme === IPV4_SCHEME && !isIPv4(hostPort.host)) ||\n        (target.scheme === IPV6_SCHEME && !isIPv6(hostPort.host))\n      ) {\n        this.error = {\n          code: Status.UNAVAILABLE,\n          details: `Failed to parse ${target.scheme} address ${path}`,\n          metadata: new Metadata(),\n        };\n        return;\n      }\n      addresses.push({\n        host: hostPort.host,\n        port: hostPort.port ?? DEFAULT_PORT,\n      });\n    }\n    this.endpoints = addresses.map(address => ({ addresses: [address] }));\n    trace('Parsed ' + target.scheme + ' address list ' + addresses.map(subchannelAddressToString));\n  }\n  updateResolution(): void {\n    if (!this.hasReturnedResult) {\n      this.hasReturnedResult = true;\n      process.nextTick(() => {\n        if (this.error) {\n          this.listener(\n            statusOrFromError(this.error),\n            {},\n            null,\n            ''\n          );\n        } else {\n          this.listener(\n            statusOrFromValue(this.endpoints),\n            {},\n            null,\n            ''\n          );\n        }\n      });\n    }\n  }\n  destroy(): void {\n    this.hasReturnedResult = false;\n  }\n\n  static getDefaultAuthority(target: GrpcUri): string {\n    return target.path.split(',')[0];\n  }\n}\n\nexport function setup() {\n  registerResolver(IPV4_SCHEME, IpResolver);\n  registerResolver(IPV6_SCHEME, IpResolver);\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport {\n  LoadBalancer,\n  ChannelControlHelper,\n  TypedLoadBalancingConfig,\n  registerLoadBalancerType,\n  createChildChannelControlHelper,\n} from './load-balancer';\nimport { ConnectivityState } from './connectivity-state';\nimport {\n  QueuePicker,\n  Picker,\n  PickArgs,\n  UnavailablePicker,\n  PickResult,\n} from './picker';\nimport * as logging from './logging';\nimport { LogVerbosity } from './constants';\nimport {\n  Endpoint,\n  endpointEqual,\n  endpointToString,\n} from './subchannel-address';\nimport { LeafLoadBalancer } from './load-balancer-pick-first';\nimport { ChannelOptions } from './channel-options';\nimport { StatusOr } from './call-interface';\n\nconst TRACER_NAME = 'round_robin';\n\nfunction trace(text: string): void {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\nconst TYPE_NAME = 'round_robin';\n\nclass RoundRobinLoadBalancingConfig implements TypedLoadBalancingConfig {\n  getLoadBalancerName(): string {\n    return TYPE_NAME;\n  }\n\n  constructor() {}\n\n  toJsonObject(): object {\n    return {\n      [TYPE_NAME]: {},\n    };\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  static createFromJson(obj: any) {\n    return new RoundRobinLoadBalancingConfig();\n  }\n}\n\nclass RoundRobinPicker implements Picker {\n  constructor(\n    private readonly children: { endpoint: Endpoint; picker: Picker }[],\n    private nextIndex = 0\n  ) {}\n\n  pick(pickArgs: PickArgs): PickResult {\n    const childPicker = this.children[this.nextIndex].picker;\n    this.nextIndex = (this.nextIndex + 1) % this.children.length;\n    return childPicker.pick(pickArgs);\n  }\n\n  /**\n   * Check what the next subchannel returned would be. Used by the load\n   * balancer implementation to preserve this part of the picker state if\n   * possible when a subchannel connects or disconnects.\n   */\n  peekNextEndpoint(): Endpoint {\n    return this.children[this.nextIndex].endpoint;\n  }\n}\n\nfunction rotateArray<T>(list: T[], startIndex: number) {\n  return [...list.slice(startIndex), ...list.slice(0, startIndex)];\n}\n\nexport class RoundRobinLoadBalancer implements LoadBalancer {\n  private children: LeafLoadBalancer[] = [];\n\n  private currentState: ConnectivityState = ConnectivityState.IDLE;\n\n  private currentReadyPicker: RoundRobinPicker | null = null;\n\n  private updatesPaused = false;\n\n  private childChannelControlHelper: ChannelControlHelper;\n\n  private lastError: string | null = null;\n\n  constructor(\n    private readonly channelControlHelper: ChannelControlHelper\n  ) {\n    this.childChannelControlHelper = createChildChannelControlHelper(\n      channelControlHelper,\n      {\n        updateState: (connectivityState, picker, errorMessage) => {\n          /* Ensure that name resolution is requested again after active\n           * connections are dropped. This is more aggressive than necessary to\n           * accomplish that, so we are counting on resolvers to have\n           * reasonable rate limits. */\n          if (this.currentState === ConnectivityState.READY && connectivityState !== ConnectivityState.READY) {\n            this.channelControlHelper.requestReresolution();\n          }\n          if (errorMessage) {\n            this.lastError = errorMessage;\n          }\n          this.calculateAndUpdateState();\n        },\n      }\n    );\n  }\n\n  private countChildrenWithState(state: ConnectivityState) {\n    return this.children.filter(child => child.getConnectivityState() === state)\n      .length;\n  }\n\n  private calculateAndUpdateState() {\n    if (this.updatesPaused) {\n      return;\n    }\n    if (this.countChildrenWithState(ConnectivityState.READY) > 0) {\n      const readyChildren = this.children.filter(\n        child => child.getConnectivityState() === ConnectivityState.READY\n      );\n      let index = 0;\n      if (this.currentReadyPicker !== null) {\n        const nextPickedEndpoint = this.currentReadyPicker.peekNextEndpoint();\n        index = readyChildren.findIndex(child =>\n          endpointEqual(child.getEndpoint(), nextPickedEndpoint)\n        );\n        if (index < 0) {\n          index = 0;\n        }\n      }\n      this.updateState(\n        ConnectivityState.READY,\n        new RoundRobinPicker(\n          readyChildren.map(child => ({\n            endpoint: child.getEndpoint(),\n            picker: child.getPicker(),\n          })),\n          index\n        ),\n        null\n      );\n    } else if (this.countChildrenWithState(ConnectivityState.CONNECTING) > 0) {\n      this.updateState(ConnectivityState.CONNECTING, new QueuePicker(this), null);\n    } else if (\n      this.countChildrenWithState(ConnectivityState.TRANSIENT_FAILURE) > 0\n    ) {\n      const errorMessage = `round_robin: No connection established. Last error: ${this.lastError}`;\n      this.updateState(\n        ConnectivityState.TRANSIENT_FAILURE,\n        new UnavailablePicker({\n          details: errorMessage,\n        }),\n        errorMessage\n      );\n    } else {\n      this.updateState(ConnectivityState.IDLE, new QueuePicker(this), null);\n    }\n    /* round_robin should keep all children connected, this is how we do that.\n     * We can't do this more efficiently in the individual child's updateState\n     * callback because that doesn't have a reference to which child the state\n     * change is associated with. */\n    for (const child of this.children) {\n      if (child.getConnectivityState() === ConnectivityState.IDLE) {\n        child.exitIdle();\n      }\n    }\n  }\n\n  private updateState(newState: ConnectivityState, picker: Picker, errorMessage: string | null) {\n    trace(\n      ConnectivityState[this.currentState] +\n        ' -> ' +\n        ConnectivityState[newState]\n    );\n    if (newState === ConnectivityState.READY) {\n      this.currentReadyPicker = picker as RoundRobinPicker;\n    } else {\n      this.currentReadyPicker = null;\n    }\n    this.currentState = newState;\n    this.channelControlHelper.updateState(newState, picker, errorMessage);\n  }\n\n  private resetSubchannelList() {\n    for (const child of this.children) {\n      child.destroy();\n    }\n    this.children = [];\n  }\n\n  updateAddressList(\n    maybeEndpointList: StatusOr<Endpoint[]>,\n    lbConfig: TypedLoadBalancingConfig,\n    options: ChannelOptions,\n    resolutionNote: string\n  ): boolean {\n    if (!(lbConfig instanceof RoundRobinLoadBalancingConfig)) {\n      return false;\n    }\n    if (!maybeEndpointList.ok) {\n      if (this.children.length === 0) {\n        this.updateState(\n          ConnectivityState.TRANSIENT_FAILURE,\n          new UnavailablePicker(maybeEndpointList.error),\n          maybeEndpointList.error.details\n        );\n      }\n      return true;\n    }\n    const startIndex = (Math.random() * maybeEndpointList.value.length) | 0;\n    const endpointList = rotateArray(maybeEndpointList.value, startIndex);\n    this.resetSubchannelList();\n    if (endpointList.length === 0) {\n      const errorMessage = `No addresses resolved. Resolution note: ${resolutionNote}`;\n      this.updateState(\n        ConnectivityState.TRANSIENT_FAILURE,\n        new UnavailablePicker({details: errorMessage}),\n        errorMessage\n      );\n    }\n    trace('Connect to endpoint list ' + endpointList.map(endpointToString));\n    this.updatesPaused = true;\n    this.children = endpointList.map(\n      endpoint =>\n        new LeafLoadBalancer(\n          endpoint,\n          this.childChannelControlHelper,\n          options,\n          resolutionNote\n        )\n    );\n    for (const child of this.children) {\n      child.startConnecting();\n    }\n    this.updatesPaused = false;\n    this.calculateAndUpdateState();\n    return true;\n  }\n\n  exitIdle(): void {\n    /* The round_robin LB policy is only in the IDLE state if it has no\n     * addresses to try to connect to and it has no picked subchannel.\n     * In that case, there is no meaningful action that can be taken here. */\n  }\n  resetBackoff(): void {\n    // This LB policy has no backoff to reset\n  }\n  destroy(): void {\n    this.resetSubchannelList();\n  }\n  getTypeName(): string {\n    return TYPE_NAME;\n  }\n}\n\nexport function setup() {\n  registerLoadBalancerType(\n    TYPE_NAME,\n    RoundRobinLoadBalancer,\n    RoundRobinLoadBalancingConfig\n  );\n}\n","/*\n * Copyright 2022 gRPC authors.\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 */\n\nimport { ChannelOptions } from './channel-options';\nimport { ConnectivityState } from './connectivity-state';\nimport { LogVerbosity, Status } from './constants';\nimport { Duration, durationToMs, isDuration, msToDuration } from './duration';\nimport {\n  ChannelControlHelper,\n  createChildChannelControlHelper,\n  registerLoadBalancerType,\n} from './experimental';\nimport {\n  selectLbConfigFromList,\n  LoadBalancer,\n  TypedLoadBalancingConfig,\n} from './load-balancer';\nimport { ChildLoadBalancerHandler } from './load-balancer-child-handler';\nimport { PickArgs, Picker, PickResult, PickResultType } from './picker';\nimport {\n  Endpoint,\n  EndpointMap,\n  SubchannelAddress,\n  endpointToString,\n} from './subchannel-address';\nimport {\n  BaseSubchannelWrapper,\n  SubchannelInterface,\n} from './subchannel-interface';\nimport * as logging from './logging';\nimport { LoadBalancingConfig } from './service-config';\nimport { StatusOr } from './call-interface';\n\nconst TRACER_NAME = 'outlier_detection';\n\nfunction trace(text: string): void {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\nconst TYPE_NAME = 'outlier_detection';\n\nconst OUTLIER_DETECTION_ENABLED =\n  (process.env.GRPC_EXPERIMENTAL_ENABLE_OUTLIER_DETECTION ?? 'true') === 'true';\n\nexport interface SuccessRateEjectionConfig {\n  readonly stdev_factor: number;\n  readonly enforcement_percentage: number;\n  readonly minimum_hosts: number;\n  readonly request_volume: number;\n}\n\nexport interface FailurePercentageEjectionConfig {\n  readonly threshold: number;\n  readonly enforcement_percentage: number;\n  readonly minimum_hosts: number;\n  readonly request_volume: number;\n}\n\nexport interface OutlierDetectionRawConfig {\n  interval?: Duration;\n  base_ejection_time?: Duration;\n  max_ejection_time?: Duration;\n  max_ejection_percent?: number;\n  success_rate_ejection?: Partial<SuccessRateEjectionConfig>;\n  failure_percentage_ejection?: Partial<FailurePercentageEjectionConfig>;\n  child_policy: LoadBalancingConfig[];\n}\n\nconst defaultSuccessRateEjectionConfig: SuccessRateEjectionConfig = {\n  stdev_factor: 1900,\n  enforcement_percentage: 100,\n  minimum_hosts: 5,\n  request_volume: 100,\n};\n\nconst defaultFailurePercentageEjectionConfig: FailurePercentageEjectionConfig =\n  {\n    threshold: 85,\n    enforcement_percentage: 100,\n    minimum_hosts: 5,\n    request_volume: 50,\n  };\n\ntype TypeofValues =\n  | 'object'\n  | 'boolean'\n  | 'function'\n  | 'number'\n  | 'string'\n  | 'undefined';\n\nfunction validateFieldType(\n  obj: any,\n  fieldName: string,\n  expectedType: TypeofValues,\n  objectName?: string\n) {\n  if (\n    fieldName in obj &&\n    obj[fieldName] !== undefined &&\n    typeof obj[fieldName] !== expectedType\n  ) {\n    const fullFieldName = objectName ? `${objectName}.${fieldName}` : fieldName;\n    throw new Error(\n      `outlier detection config ${fullFieldName} parse error: expected ${expectedType}, got ${typeof obj[\n        fieldName\n      ]}`\n    );\n  }\n}\n\nfunction validatePositiveDuration(\n  obj: any,\n  fieldName: string,\n  objectName?: string\n) {\n  const fullFieldName = objectName ? `${objectName}.${fieldName}` : fieldName;\n  if (fieldName in obj && obj[fieldName] !== undefined) {\n    if (!isDuration(obj[fieldName])) {\n      throw new Error(\n        `outlier detection config ${fullFieldName} parse error: expected Duration, got ${typeof obj[\n          fieldName\n        ]}`\n      );\n    }\n    if (\n      !(\n        obj[fieldName].seconds >= 0 &&\n        obj[fieldName].seconds <= 315_576_000_000 &&\n        obj[fieldName].nanos >= 0 &&\n        obj[fieldName].nanos <= 999_999_999\n      )\n    ) {\n      throw new Error(\n        `outlier detection config ${fullFieldName} parse error: values out of range for non-negative Duaration`\n      );\n    }\n  }\n}\n\nfunction validatePercentage(obj: any, fieldName: string, objectName?: string) {\n  const fullFieldName = objectName ? `${objectName}.${fieldName}` : fieldName;\n  validateFieldType(obj, fieldName, 'number', objectName);\n  if (\n    fieldName in obj &&\n    obj[fieldName] !== undefined &&\n    !(obj[fieldName] >= 0 && obj[fieldName] <= 100)\n  ) {\n    throw new Error(\n      `outlier detection config ${fullFieldName} parse error: value out of range for percentage (0-100)`\n    );\n  }\n}\n\nexport class OutlierDetectionLoadBalancingConfig\n  implements TypedLoadBalancingConfig\n{\n  private readonly intervalMs: number;\n  private readonly baseEjectionTimeMs: number;\n  private readonly maxEjectionTimeMs: number;\n  private readonly maxEjectionPercent: number;\n  private readonly successRateEjection: SuccessRateEjectionConfig | null;\n  private readonly failurePercentageEjection: FailurePercentageEjectionConfig | null;\n\n  constructor(\n    intervalMs: number | null,\n    baseEjectionTimeMs: number | null,\n    maxEjectionTimeMs: number | null,\n    maxEjectionPercent: number | null,\n    successRateEjection: Partial<SuccessRateEjectionConfig> | null,\n    failurePercentageEjection: Partial<FailurePercentageEjectionConfig> | null,\n    private readonly childPolicy: TypedLoadBalancingConfig\n  ) {\n    if (childPolicy.getLoadBalancerName() === 'pick_first') {\n      throw new Error(\n        'outlier_detection LB policy cannot have a pick_first child policy'\n      );\n    }\n    this.intervalMs = intervalMs ?? 10_000;\n    this.baseEjectionTimeMs = baseEjectionTimeMs ?? 30_000;\n    this.maxEjectionTimeMs = maxEjectionTimeMs ?? 300_000;\n    this.maxEjectionPercent = maxEjectionPercent ?? 10;\n    this.successRateEjection = successRateEjection\n      ? { ...defaultSuccessRateEjectionConfig, ...successRateEjection }\n      : null;\n    this.failurePercentageEjection = failurePercentageEjection\n      ? {\n          ...defaultFailurePercentageEjectionConfig,\n          ...failurePercentageEjection,\n        }\n      : null;\n  }\n  getLoadBalancerName(): string {\n    return TYPE_NAME;\n  }\n  toJsonObject(): object {\n    return {\n      outlier_detection: {\n        interval: msToDuration(this.intervalMs),\n        base_ejection_time: msToDuration(this.baseEjectionTimeMs),\n        max_ejection_time: msToDuration(this.maxEjectionTimeMs),\n        max_ejection_percent: this.maxEjectionPercent,\n        success_rate_ejection: this.successRateEjection ?? undefined,\n        failure_percentage_ejection:\n          this.failurePercentageEjection ?? undefined,\n        child_policy: [this.childPolicy.toJsonObject()],\n      },\n    };\n  }\n\n  getIntervalMs(): number {\n    return this.intervalMs;\n  }\n  getBaseEjectionTimeMs(): number {\n    return this.baseEjectionTimeMs;\n  }\n  getMaxEjectionTimeMs(): number {\n    return this.maxEjectionTimeMs;\n  }\n  getMaxEjectionPercent(): number {\n    return this.maxEjectionPercent;\n  }\n  getSuccessRateEjectionConfig(): SuccessRateEjectionConfig | null {\n    return this.successRateEjection;\n  }\n  getFailurePercentageEjectionConfig(): FailurePercentageEjectionConfig | null {\n    return this.failurePercentageEjection;\n  }\n  getChildPolicy(): TypedLoadBalancingConfig {\n    return this.childPolicy;\n  }\n\n  static createFromJson(obj: any): OutlierDetectionLoadBalancingConfig {\n    validatePositiveDuration(obj, 'interval');\n    validatePositiveDuration(obj, 'base_ejection_time');\n    validatePositiveDuration(obj, 'max_ejection_time');\n    validatePercentage(obj, 'max_ejection_percent');\n    if (\n      'success_rate_ejection' in obj &&\n      obj.success_rate_ejection !== undefined\n    ) {\n      if (typeof obj.success_rate_ejection !== 'object') {\n        throw new Error(\n          'outlier detection config success_rate_ejection must be an object'\n        );\n      }\n      validateFieldType(\n        obj.success_rate_ejection,\n        'stdev_factor',\n        'number',\n        'success_rate_ejection'\n      );\n      validatePercentage(\n        obj.success_rate_ejection,\n        'enforcement_percentage',\n        'success_rate_ejection'\n      );\n      validateFieldType(\n        obj.success_rate_ejection,\n        'minimum_hosts',\n        'number',\n        'success_rate_ejection'\n      );\n      validateFieldType(\n        obj.success_rate_ejection,\n        'request_volume',\n        'number',\n        'success_rate_ejection'\n      );\n    }\n    if (\n      'failure_percentage_ejection' in obj &&\n      obj.failure_percentage_ejection !== undefined\n    ) {\n      if (typeof obj.failure_percentage_ejection !== 'object') {\n        throw new Error(\n          'outlier detection config failure_percentage_ejection must be an object'\n        );\n      }\n      validatePercentage(\n        obj.failure_percentage_ejection,\n        'threshold',\n        'failure_percentage_ejection'\n      );\n      validatePercentage(\n        obj.failure_percentage_ejection,\n        'enforcement_percentage',\n        'failure_percentage_ejection'\n      );\n      validateFieldType(\n        obj.failure_percentage_ejection,\n        'minimum_hosts',\n        'number',\n        'failure_percentage_ejection'\n      );\n      validateFieldType(\n        obj.failure_percentage_ejection,\n        'request_volume',\n        'number',\n        'failure_percentage_ejection'\n      );\n    }\n\n    if (!('child_policy' in obj) || !Array.isArray(obj.child_policy)) {\n      throw new Error('outlier detection config child_policy must be an array');\n    }\n    const childPolicy = selectLbConfigFromList(obj.child_policy);\n    if (!childPolicy) {\n      throw new Error(\n        'outlier detection config child_policy: no valid recognized policy found'\n      );\n    }\n\n    return new OutlierDetectionLoadBalancingConfig(\n      obj.interval ? durationToMs(obj.interval) : null,\n      obj.base_ejection_time ? durationToMs(obj.base_ejection_time) : null,\n      obj.max_ejection_time ? durationToMs(obj.max_ejection_time) : null,\n      obj.max_ejection_percent ?? null,\n      obj.success_rate_ejection,\n      obj.failure_percentage_ejection,\n      childPolicy\n    );\n  }\n}\n\nclass OutlierDetectionSubchannelWrapper\n  extends BaseSubchannelWrapper\n  implements SubchannelInterface\n{\n  private refCount = 0;\n  constructor(\n    childSubchannel: SubchannelInterface,\n    private mapEntry?: MapEntry\n  ) {\n    super(childSubchannel);\n  }\n\n  ref() {\n    this.child.ref();\n    this.refCount += 1;\n  }\n\n  unref() {\n    this.child.unref();\n    this.refCount -= 1;\n    if (this.refCount <= 0) {\n      if (this.mapEntry) {\n        const index = this.mapEntry.subchannelWrappers.indexOf(this);\n        if (index >= 0) {\n          this.mapEntry.subchannelWrappers.splice(index, 1);\n        }\n      }\n    }\n  }\n\n  eject() {\n    this.setHealthy(false);\n  }\n\n  uneject() {\n    this.setHealthy(true);\n  }\n\n  getMapEntry(): MapEntry | undefined {\n    return this.mapEntry;\n  }\n\n  getWrappedSubchannel(): SubchannelInterface {\n    return this.child;\n  }\n}\n\ninterface CallCountBucket {\n  success: number;\n  failure: number;\n}\n\nfunction createEmptyBucket(): CallCountBucket {\n  return {\n    success: 0,\n    failure: 0,\n  };\n}\n\nclass CallCounter {\n  private activeBucket: CallCountBucket = createEmptyBucket();\n  private inactiveBucket: CallCountBucket = createEmptyBucket();\n  addSuccess() {\n    this.activeBucket.success += 1;\n  }\n  addFailure() {\n    this.activeBucket.failure += 1;\n  }\n  switchBuckets() {\n    this.inactiveBucket = this.activeBucket;\n    this.activeBucket = createEmptyBucket();\n  }\n  getLastSuccesses() {\n    return this.inactiveBucket.success;\n  }\n  getLastFailures() {\n    return this.inactiveBucket.failure;\n  }\n}\n\nclass OutlierDetectionPicker implements Picker {\n  constructor(private wrappedPicker: Picker, private countCalls: boolean) {}\n  pick(pickArgs: PickArgs): PickResult {\n    const wrappedPick = this.wrappedPicker.pick(pickArgs);\n    if (wrappedPick.pickResultType === PickResultType.COMPLETE) {\n      const subchannelWrapper =\n        wrappedPick.subchannel as OutlierDetectionSubchannelWrapper;\n      const mapEntry = subchannelWrapper.getMapEntry();\n      if (mapEntry) {\n        let onCallEnded = wrappedPick.onCallEnded;\n        if (this.countCalls) {\n          onCallEnded = (statusCode, details, metadata) => {\n            if (statusCode === Status.OK) {\n              mapEntry.counter.addSuccess();\n            } else {\n              mapEntry.counter.addFailure();\n            }\n            wrappedPick.onCallEnded?.(statusCode, details, metadata);\n          };\n        }\n        return {\n          ...wrappedPick,\n          subchannel: subchannelWrapper.getWrappedSubchannel(),\n          onCallEnded: onCallEnded,\n        };\n      } else {\n        return {\n          ...wrappedPick,\n          subchannel: subchannelWrapper.getWrappedSubchannel(),\n        };\n      }\n    } else {\n      return wrappedPick;\n    }\n  }\n}\n\ninterface MapEntry {\n  counter: CallCounter;\n  currentEjectionTimestamp: Date | null;\n  ejectionTimeMultiplier: number;\n  subchannelWrappers: OutlierDetectionSubchannelWrapper[];\n}\n\nexport class OutlierDetectionLoadBalancer implements LoadBalancer {\n  private childBalancer: ChildLoadBalancerHandler;\n  private entryMap = new EndpointMap<MapEntry>();\n  private latestConfig: OutlierDetectionLoadBalancingConfig | null = null;\n  private ejectionTimer: NodeJS.Timeout;\n  private timerStartTime: Date | null = null;\n\n  constructor(\n    channelControlHelper: ChannelControlHelper\n  ) {\n    this.childBalancer = new ChildLoadBalancerHandler(\n      createChildChannelControlHelper(channelControlHelper, {\n        createSubchannel: (\n          subchannelAddress: SubchannelAddress,\n          subchannelArgs: ChannelOptions\n        ) => {\n          const originalSubchannel = channelControlHelper.createSubchannel(\n            subchannelAddress,\n            subchannelArgs\n          );\n          const mapEntry =\n            this.entryMap.getForSubchannelAddress(subchannelAddress);\n          const subchannelWrapper = new OutlierDetectionSubchannelWrapper(\n            originalSubchannel,\n            mapEntry\n          );\n          if (mapEntry?.currentEjectionTimestamp !== null) {\n            // If the address is ejected, propagate that to the new subchannel wrapper\n            subchannelWrapper.eject();\n          }\n          mapEntry?.subchannelWrappers.push(subchannelWrapper);\n          return subchannelWrapper;\n        },\n        updateState: (connectivityState: ConnectivityState, picker: Picker, errorMessage: string) => {\n          if (connectivityState === ConnectivityState.READY) {\n            channelControlHelper.updateState(\n              connectivityState,\n              new OutlierDetectionPicker(picker, this.isCountingEnabled()),\n              errorMessage\n            );\n          } else {\n            channelControlHelper.updateState(connectivityState, picker, errorMessage);\n          }\n        },\n      })\n    );\n    this.ejectionTimer = setInterval(() => {}, 0);\n    clearInterval(this.ejectionTimer);\n  }\n\n  private isCountingEnabled(): boolean {\n    return (\n      this.latestConfig !== null &&\n      (this.latestConfig.getSuccessRateEjectionConfig() !== null ||\n        this.latestConfig.getFailurePercentageEjectionConfig() !== null)\n    );\n  }\n\n  private getCurrentEjectionPercent() {\n    let ejectionCount = 0;\n    for (const mapEntry of this.entryMap.values()) {\n      if (mapEntry.currentEjectionTimestamp !== null) {\n        ejectionCount += 1;\n      }\n    }\n    return (ejectionCount * 100) / this.entryMap.size;\n  }\n\n  private runSuccessRateCheck(ejectionTimestamp: Date) {\n    if (!this.latestConfig) {\n      return;\n    }\n    const successRateConfig = this.latestConfig.getSuccessRateEjectionConfig();\n    if (!successRateConfig) {\n      return;\n    }\n    trace('Running success rate check');\n    // Step 1\n    const targetRequestVolume = successRateConfig.request_volume;\n    let addresesWithTargetVolume = 0;\n    const successRates: number[] = [];\n    for (const [endpoint, mapEntry] of this.entryMap.entries()) {\n      const successes = mapEntry.counter.getLastSuccesses();\n      const failures = mapEntry.counter.getLastFailures();\n      trace(\n        'Stats for ' +\n          endpointToString(endpoint) +\n          ': successes=' +\n          successes +\n          ' failures=' +\n          failures +\n          ' targetRequestVolume=' +\n          targetRequestVolume\n      );\n      if (successes + failures >= targetRequestVolume) {\n        addresesWithTargetVolume += 1;\n        successRates.push(successes / (successes + failures));\n      }\n    }\n    trace(\n      'Found ' +\n        addresesWithTargetVolume +\n        ' success rate candidates; currentEjectionPercent=' +\n        this.getCurrentEjectionPercent() +\n        ' successRates=[' +\n        successRates +\n        ']'\n    );\n    if (addresesWithTargetVolume < successRateConfig.minimum_hosts) {\n      return;\n    }\n\n    // Step 2\n    const successRateMean =\n      successRates.reduce((a, b) => a + b) / successRates.length;\n    let successRateDeviationSum = 0;\n    for (const rate of successRates) {\n      const deviation = rate - successRateMean;\n      successRateDeviationSum += deviation * deviation;\n    }\n    const successRateVariance = successRateDeviationSum / successRates.length;\n    const successRateStdev = Math.sqrt(successRateVariance);\n    const ejectionThreshold =\n      successRateMean -\n      successRateStdev * (successRateConfig.stdev_factor / 1000);\n    trace(\n      'stdev=' + successRateStdev + ' ejectionThreshold=' + ejectionThreshold\n    );\n\n    // Step 3\n    for (const [address, mapEntry] of this.entryMap.entries()) {\n      // Step 3.i\n      if (\n        this.getCurrentEjectionPercent() >=\n        this.latestConfig.getMaxEjectionPercent()\n      ) {\n        break;\n      }\n      // Step 3.ii\n      const successes = mapEntry.counter.getLastSuccesses();\n      const failures = mapEntry.counter.getLastFailures();\n      if (successes + failures < targetRequestVolume) {\n        continue;\n      }\n      // Step 3.iii\n      const successRate = successes / (successes + failures);\n      trace('Checking candidate ' + address + ' successRate=' + successRate);\n      if (successRate < ejectionThreshold) {\n        const randomNumber = Math.random() * 100;\n        trace(\n          'Candidate ' +\n            address +\n            ' randomNumber=' +\n            randomNumber +\n            ' enforcement_percentage=' +\n            successRateConfig.enforcement_percentage\n        );\n        if (randomNumber < successRateConfig.enforcement_percentage) {\n          trace('Ejecting candidate ' + address);\n          this.eject(mapEntry, ejectionTimestamp);\n        }\n      }\n    }\n  }\n\n  private runFailurePercentageCheck(ejectionTimestamp: Date) {\n    if (!this.latestConfig) {\n      return;\n    }\n    const failurePercentageConfig =\n      this.latestConfig.getFailurePercentageEjectionConfig();\n    if (!failurePercentageConfig) {\n      return;\n    }\n    trace(\n      'Running failure percentage check. threshold=' +\n        failurePercentageConfig.threshold +\n        ' request volume threshold=' +\n        failurePercentageConfig.request_volume\n    );\n    // Step 1\n    let addressesWithTargetVolume = 0;\n    for (const mapEntry of this.entryMap.values()) {\n      const successes = mapEntry.counter.getLastSuccesses();\n      const failures = mapEntry.counter.getLastFailures();\n      if (successes + failures >= failurePercentageConfig.request_volume) {\n        addressesWithTargetVolume += 1;\n      }\n    }\n    if (addressesWithTargetVolume < failurePercentageConfig.minimum_hosts) {\n      return;\n    }\n\n    // Step 2\n    for (const [address, mapEntry] of this.entryMap.entries()) {\n      // Step 2.i\n      if (\n        this.getCurrentEjectionPercent() >=\n        this.latestConfig.getMaxEjectionPercent()\n      ) {\n        break;\n      }\n      // Step 2.ii\n      const successes = mapEntry.counter.getLastSuccesses();\n      const failures = mapEntry.counter.getLastFailures();\n      trace('Candidate successes=' + successes + ' failures=' + failures);\n      if (successes + failures < failurePercentageConfig.request_volume) {\n        continue;\n      }\n      // Step 2.iii\n      const failurePercentage = (failures * 100) / (failures + successes);\n      if (failurePercentage > failurePercentageConfig.threshold) {\n        const randomNumber = Math.random() * 100;\n        trace(\n          'Candidate ' +\n            address +\n            ' randomNumber=' +\n            randomNumber +\n            ' enforcement_percentage=' +\n            failurePercentageConfig.enforcement_percentage\n        );\n        if (randomNumber < failurePercentageConfig.enforcement_percentage) {\n          trace('Ejecting candidate ' + address);\n          this.eject(mapEntry, ejectionTimestamp);\n        }\n      }\n    }\n  }\n\n  private eject(mapEntry: MapEntry, ejectionTimestamp: Date) {\n    mapEntry.currentEjectionTimestamp = new Date();\n    mapEntry.ejectionTimeMultiplier += 1;\n    for (const subchannelWrapper of mapEntry.subchannelWrappers) {\n      subchannelWrapper.eject();\n    }\n  }\n\n  private uneject(mapEntry: MapEntry) {\n    mapEntry.currentEjectionTimestamp = null;\n    for (const subchannelWrapper of mapEntry.subchannelWrappers) {\n      subchannelWrapper.uneject();\n    }\n  }\n\n  private switchAllBuckets() {\n    for (const mapEntry of this.entryMap.values()) {\n      mapEntry.counter.switchBuckets();\n    }\n  }\n\n  private startTimer(delayMs: number) {\n    this.ejectionTimer = setTimeout(() => this.runChecks(), delayMs);\n    this.ejectionTimer.unref?.();\n  }\n\n  private runChecks() {\n    const ejectionTimestamp = new Date();\n    trace('Ejection timer running');\n\n    this.switchAllBuckets();\n\n    if (!this.latestConfig) {\n      return;\n    }\n    this.timerStartTime = ejectionTimestamp;\n    this.startTimer(this.latestConfig.getIntervalMs());\n\n    this.runSuccessRateCheck(ejectionTimestamp);\n    this.runFailurePercentageCheck(ejectionTimestamp);\n\n    for (const [address, mapEntry] of this.entryMap.entries()) {\n      if (mapEntry.currentEjectionTimestamp === null) {\n        if (mapEntry.ejectionTimeMultiplier > 0) {\n          mapEntry.ejectionTimeMultiplier -= 1;\n        }\n      } else {\n        const baseEjectionTimeMs = this.latestConfig.getBaseEjectionTimeMs();\n        const maxEjectionTimeMs = this.latestConfig.getMaxEjectionTimeMs();\n        const returnTime = new Date(\n          mapEntry.currentEjectionTimestamp.getTime()\n        );\n        returnTime.setMilliseconds(\n          returnTime.getMilliseconds() +\n            Math.min(\n              baseEjectionTimeMs * mapEntry.ejectionTimeMultiplier,\n              Math.max(baseEjectionTimeMs, maxEjectionTimeMs)\n            )\n        );\n        if (returnTime < new Date()) {\n          trace('Unejecting ' + address);\n          this.uneject(mapEntry);\n        }\n      }\n    }\n  }\n\n  updateAddressList(\n    endpointList: StatusOr<Endpoint[]>,\n    lbConfig: TypedLoadBalancingConfig,\n    options: ChannelOptions,\n    resolutionNote: string\n  ): boolean {\n    if (!(lbConfig instanceof OutlierDetectionLoadBalancingConfig)) {\n      return false;\n    }\n    trace('Received update with config: ' + JSON.stringify(lbConfig.toJsonObject(), undefined, 2));\n    if (endpointList.ok) {\n      for (const endpoint of endpointList.value) {\n        if (!this.entryMap.has(endpoint)) {\n          trace('Adding map entry for ' + endpointToString(endpoint));\n          this.entryMap.set(endpoint, {\n            counter: new CallCounter(),\n            currentEjectionTimestamp: null,\n            ejectionTimeMultiplier: 0,\n            subchannelWrappers: [],\n          });\n        }\n      }\n      this.entryMap.deleteMissing(endpointList.value);\n    }\n    const childPolicy = lbConfig.getChildPolicy();\n    this.childBalancer.updateAddressList(endpointList, childPolicy, options, resolutionNote);\n\n    if (\n      lbConfig.getSuccessRateEjectionConfig() ||\n      lbConfig.getFailurePercentageEjectionConfig()\n    ) {\n      if (this.timerStartTime) {\n        trace('Previous timer existed. Replacing timer');\n        clearTimeout(this.ejectionTimer);\n        const remainingDelay =\n          lbConfig.getIntervalMs() -\n          (new Date().getTime() - this.timerStartTime.getTime());\n        this.startTimer(remainingDelay);\n      } else {\n        trace('Starting new timer');\n        this.timerStartTime = new Date();\n        this.startTimer(lbConfig.getIntervalMs());\n        this.switchAllBuckets();\n      }\n    } else {\n      trace('Counting disabled. Cancelling timer.');\n      this.timerStartTime = null;\n      clearTimeout(this.ejectionTimer);\n      for (const mapEntry of this.entryMap.values()) {\n        this.uneject(mapEntry);\n        mapEntry.ejectionTimeMultiplier = 0;\n      }\n    }\n\n    this.latestConfig = lbConfig;\n    return true;\n  }\n  exitIdle(): void {\n    this.childBalancer.exitIdle();\n  }\n  resetBackoff(): void {\n    this.childBalancer.resetBackoff();\n  }\n  destroy(): void {\n    clearTimeout(this.ejectionTimer);\n    this.childBalancer.destroy();\n  }\n  getTypeName(): string {\n    return TYPE_NAME;\n  }\n}\n\nexport function setup() {\n  if (OUTLIER_DETECTION_ENABLED) {\n    registerLoadBalancerType(\n      TYPE_NAME,\n      OutlierDetectionLoadBalancer,\n      OutlierDetectionLoadBalancingConfig\n    );\n  }\n}\n","/*\n * Copyright 2025 gRPC authors.\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 */\n\nconst top = 0;\nconst parent = (i: number) => Math.floor(i / 2);\nconst left = (i: number) => i * 2 + 1;\nconst right = (i: number) => i * 2 + 2;\n\n/**\n * A generic priority queue implemented as an array-based binary heap.\n * Adapted from https://stackoverflow.com/a/42919752/159388\n */\nexport class PriorityQueue<T=number> {\n  private readonly heap: T[] = [];\n  /**\n   *\n   * @param comparator Returns true if the first argument should precede the\n   *   second in the queue. Defaults to `(a, b) => a > b`\n   */\n  constructor(private readonly comparator = (a: T, b: T) => a > b) {}\n\n  /**\n   * @returns The number of items currently in the queue\n   */\n  size(): number {\n    return this.heap.length;\n  }\n  /**\n   * @returns True if there are no items in the queue, false otherwise\n   */\n  isEmpty(): boolean {\n    return this.size() == 0;\n  }\n  /**\n   * Look at the front item that would be popped, without modifying the contents\n   * of the queue\n   * @returns The front item in the queue, or undefined if the queue is empty\n   */\n  peek(): T | undefined {\n    return this.heap[top];\n  }\n  /**\n   * Add the items to the queue\n   * @param values The items to add\n   * @returns The new size of the queue after adding the items\n   */\n  push(...values: T[]): number {\n    values.forEach(value => {\n      this.heap.push(value);\n      this.siftUp();\n    });\n    return this.size();\n  }\n  /**\n   * Remove the front item in the queue and return it\n   * @returns The front item in the queue, or undefined if the queue is empty\n   */\n  pop(): T | undefined {\n    const poppedValue = this.peek();\n    const bottom = this.size() - 1;\n    if (bottom > top) {\n      this.swap(top, bottom);\n    }\n    this.heap.pop();\n    this.siftDown();\n    return poppedValue;\n  }\n  /**\n   * Simultaneously remove the front item in the queue and add the provided\n   * item.\n   * @param value The item to add\n   * @returns The front item in the queue, or undefined if the queue is empty\n   */\n  replace(value: T): T | undefined {\n    const replacedValue = this.peek();\n    this.heap[top] = value;\n    this.siftDown();\n    return replacedValue;\n  }\n  private greater(i: number, j: number): boolean {\n    return this.comparator(this.heap[i], this.heap[j]);\n  }\n  private swap(i: number, j: number): void {\n    [this.heap[i], this.heap[j]] = [this.heap[j], this.heap[i]];\n  }\n  private siftUp(): void {\n    let node = this.size() - 1;\n    while (node > top && this.greater(node, parent(node))) {\n      this.swap(node, parent(node));\n      node = parent(node);\n    }\n  }\n  private siftDown(): void {\n    let node = top;\n    while (\n      (left(node) < this.size() && this.greater(left(node), node)) ||\n      (right(node) < this.size() && this.greater(right(node), node))\n    ) {\n      let maxChild = (right(node) < this.size() && this.greater(right(node), left(node))) ? right(node) : left(node);\n      this.swap(node, maxChild);\n      node = maxChild;\n    }\n  }\n}\n","/*\n * Copyright 2025 gRPC authors.\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 */\n\nimport { StatusOr } from './call-interface';\nimport { ChannelOptions } from './channel-options';\nimport { ConnectivityState } from './connectivity-state';\nimport { LogVerbosity } from './constants';\nimport { Duration, durationMessageToDuration, durationToMs, durationToString, isDuration, isDurationMessage, msToDuration, parseDuration } from './duration';\nimport { OrcaLoadReport__Output } from './generated/xds/data/orca/v3/OrcaLoadReport';\nimport { ChannelControlHelper, createChildChannelControlHelper, LoadBalancer, registerLoadBalancerType, TypedLoadBalancingConfig } from './load-balancer';\nimport { LeafLoadBalancer } from './load-balancer-pick-first';\nimport * as logging from './logging';\nimport { createMetricsReader, MetricsListener, OrcaOobMetricsSubchannelWrapper } from './orca';\nimport { PickArgs, Picker, PickResult, PickResultType, QueuePicker, UnavailablePicker } from './picker';\nimport { PriorityQueue } from './priority-queue';\nimport { Endpoint, endpointToString } from './subchannel-address';\n\nconst TRACER_NAME = 'weighted_round_robin';\n\nfunction trace(text: string): void {\n  logging.trace(LogVerbosity.DEBUG, TRACER_NAME, text);\n}\n\nconst TYPE_NAME = 'weighted_round_robin';\n\nconst DEFAULT_OOB_REPORTING_PERIOD_MS = 10_000;\nconst DEFAULT_BLACKOUT_PERIOD_MS = 10_000;\nconst DEFAULT_WEIGHT_EXPIRATION_PERIOD_MS = 3 * 60_000;\nconst DEFAULT_WEIGHT_UPDATE_PERIOD_MS = 1_000;\nconst DEFAULT_ERROR_UTILIZATION_PENALTY = 1;\n\ntype TypeofValues =\n  | 'object'\n  | 'boolean'\n  | 'function'\n  | 'number'\n  | 'string'\n  | 'undefined';\n\nfunction validateFieldType(\n  obj: any,\n  fieldName: string,\n  expectedType: TypeofValues\n) {\n  if (\n    fieldName in obj &&\n    obj[fieldName] !== undefined &&\n    typeof obj[fieldName] !== expectedType\n  ) {\n    throw new Error(\n      `weighted round robin config ${fieldName} parse error: expected ${expectedType}, got ${typeof obj[\n        fieldName\n      ]}`\n    );\n  }\n}\n\nfunction parseDurationField(obj: any, fieldName: string): number | null {\n  if (fieldName in obj && obj[fieldName] !== undefined && obj[fieldName] !== null) {\n    let durationObject: Duration;\n    if (isDuration(obj[fieldName])) {\n      durationObject = obj[fieldName];\n    } else if (isDurationMessage(obj[fieldName])) {\n      durationObject = durationMessageToDuration(obj[fieldName]);\n    } else if (typeof obj[fieldName] === 'string') {\n      const parsedDuration = parseDuration(obj[fieldName]);\n      if (!parsedDuration) {\n        throw new Error(`weighted round robin config ${fieldName}: failed to parse duration string ${obj[fieldName]}`);\n      }\n      durationObject = parsedDuration;\n    } else {\n      throw new Error(`weighted round robin config ${fieldName}: expected duration, got ${typeof obj[fieldName]}`);\n    }\n    return durationToMs(durationObject);\n  }\n  return null;\n}\n\nexport class WeightedRoundRobinLoadBalancingConfig implements TypedLoadBalancingConfig {\n  private readonly enableOobLoadReport: boolean;\n  private readonly oobLoadReportingPeriodMs: number;\n  private readonly blackoutPeriodMs: number;\n  private readonly weightExpirationPeriodMs: number;\n  private readonly weightUpdatePeriodMs: number;\n  private readonly errorUtilizationPenalty: number;\n\n  constructor(\n    enableOobLoadReport: boolean | null,\n    oobLoadReportingPeriodMs: number | null,\n    blackoutPeriodMs: number | null,\n    weightExpirationPeriodMs: number | null,\n    weightUpdatePeriodMs: number | null,\n    errorUtilizationPenalty: number | null\n  ) {\n    this.enableOobLoadReport = enableOobLoadReport ?? false;\n    this.oobLoadReportingPeriodMs = oobLoadReportingPeriodMs ?? DEFAULT_OOB_REPORTING_PERIOD_MS;\n    this.blackoutPeriodMs = blackoutPeriodMs ?? DEFAULT_BLACKOUT_PERIOD_MS;\n    this.weightExpirationPeriodMs = weightExpirationPeriodMs ?? DEFAULT_WEIGHT_EXPIRATION_PERIOD_MS;\n    this.weightUpdatePeriodMs = Math.max(weightUpdatePeriodMs ?? DEFAULT_WEIGHT_UPDATE_PERIOD_MS, 100);\n    this.errorUtilizationPenalty = errorUtilizationPenalty ?? DEFAULT_ERROR_UTILIZATION_PENALTY;\n  }\n\n  getLoadBalancerName(): string {\n    return TYPE_NAME;\n  }\n  toJsonObject(): object {\n    return {\n      enable_oob_load_report: this.enableOobLoadReport,\n      oob_load_reporting_period: durationToString(msToDuration(this.oobLoadReportingPeriodMs)),\n      blackout_period: durationToString(msToDuration(this.blackoutPeriodMs)),\n      weight_expiration_period: durationToString(msToDuration(this.weightExpirationPeriodMs)),\n      weight_update_period: durationToString(msToDuration(this.weightUpdatePeriodMs)),\n      error_utilization_penalty: this.errorUtilizationPenalty\n    };\n  }\n  static createFromJson(obj: any): WeightedRoundRobinLoadBalancingConfig {\n    validateFieldType(obj, 'enable_oob_load_report', 'boolean');\n    validateFieldType(obj, 'error_utilization_penalty', 'number');\n    if (obj.error_utilization_penalty < 0) {\n      throw new Error('weighted round robin config error_utilization_penalty < 0');\n    }\n    return new WeightedRoundRobinLoadBalancingConfig(\n      obj.enable_oob_load_report,\n      parseDurationField(obj, 'oob_load_reporting_period'),\n      parseDurationField(obj, 'blackout_period'),\n      parseDurationField(obj, 'weight_expiration_period'),\n      parseDurationField(obj, 'weight_update_period'),\n      obj.error_utilization_penalty\n    )\n  }\n\n  getEnableOobLoadReport() {\n    return this.enableOobLoadReport;\n  }\n  getOobLoadReportingPeriodMs() {\n    return this.oobLoadReportingPeriodMs;\n  }\n  getBlackoutPeriodMs() {\n    return this.blackoutPeriodMs;\n  }\n  getWeightExpirationPeriodMs() {\n    return this.weightExpirationPeriodMs;\n  }\n  getWeightUpdatePeriodMs() {\n    return this.weightUpdatePeriodMs;\n  }\n  getErrorUtilizationPenalty() {\n    return this.errorUtilizationPenalty;\n  }\n}\n\ninterface WeightedPicker {\n  endpointName: string;\n  picker: Picker;\n  weight: number;\n}\n\ninterface QueueEntry {\n  endpointName: string;\n  picker: Picker;\n  period: number;\n  deadline: number;\n}\n\ntype MetricsHandler = (loadReport: OrcaLoadReport__Output, endpointName: string) => void;\n\nclass WeightedRoundRobinPicker implements Picker {\n  private queue: PriorityQueue<QueueEntry> = new PriorityQueue((a, b) => a.deadline < b.deadline);\n  constructor(children: WeightedPicker[], private readonly metricsHandler: MetricsHandler | null) {\n    const positiveWeight = children.filter(picker => picker.weight > 0);\n    let averageWeight: number;\n    if (positiveWeight.length < 2) {\n      averageWeight = 1;\n    } else {\n      let weightSum: number = 0;\n      for (const { weight } of positiveWeight) {\n        weightSum += weight;\n      }\n      averageWeight = weightSum / positiveWeight.length;\n    }\n    for (const child of children) {\n      const period = child.weight > 0 ? 1 / child.weight : averageWeight;\n      this.queue.push({\n        endpointName: child.endpointName,\n        picker: child.picker,\n        period: period,\n        deadline: Math.random() * period\n      });\n    }\n  }\n  pick(pickArgs: PickArgs): PickResult {\n    const entry = this.queue.pop()!;\n    this.queue.push({\n      ...entry,\n      deadline: entry.deadline + entry.period\n    })\n    const childPick = entry.picker.pick(pickArgs);\n    if (childPick.pickResultType === PickResultType.COMPLETE) {\n      if (this.metricsHandler) {\n        return {\n          ...childPick,\n          onCallEnded: createMetricsReader(loadReport => this.metricsHandler!(loadReport, entry.endpointName), childPick.onCallEnded)\n        };\n      } else {\n        const subchannelWrapper = childPick.subchannel as OrcaOobMetricsSubchannelWrapper;\n        return {\n          ...childPick,\n          subchannel: subchannelWrapper.getWrappedSubchannel()\n        }\n      }\n    } else {\n      return childPick;\n    }\n  }\n}\n\ninterface ChildEntry {\n  child: LeafLoadBalancer;\n  lastUpdated: Date;\n  nonEmptySince: Date | null;\n  weight: number;\n  oobMetricsListener: MetricsListener | null;\n}\n\nclass WeightedRoundRobinLoadBalancer implements LoadBalancer {\n  private latestConfig: WeightedRoundRobinLoadBalancingConfig | null = null;\n\n  private children: Map<string, ChildEntry> = new Map();\n\n  private currentState: ConnectivityState = ConnectivityState.IDLE;\n\n  private updatesPaused = false;\n\n  private lastError: string | null = null;\n\n  private weightUpdateTimer: NodeJS.Timeout | null = null;\n\n  constructor(private readonly channelControlHelper: ChannelControlHelper) {}\n\n  private countChildrenWithState(state: ConnectivityState) {\n    let count = 0;\n    for (const entry of this.children.values()) {\n      if (entry.child.getConnectivityState() === state) {\n        count += 1;\n      }\n    }\n    return count;\n  }\n\n  updateWeight(entry: ChildEntry, loadReport: OrcaLoadReport__Output): void {\n    const qps = loadReport.rps_fractional;\n    let utilization = loadReport.application_utilization;\n    if (utilization > 0 && qps > 0) {\n      utilization += (loadReport.eps / qps) * (this.latestConfig?.getErrorUtilizationPenalty() ?? 0);\n    }\n    const newWeight = utilization === 0 ? 0 : qps / utilization;\n    if (newWeight === 0) {\n      return;\n    }\n    const now = new Date();\n    if (entry.nonEmptySince === null) {\n      entry.nonEmptySince = now;\n    }\n    entry.lastUpdated = now;\n    entry.weight = newWeight;\n  }\n\n  getWeight(entry: ChildEntry): number {\n    if (!this.latestConfig) {\n      return 0;\n    }\n    const now = new Date().getTime();\n    if (now - entry.lastUpdated.getTime() >= this.latestConfig.getWeightExpirationPeriodMs()) {\n      entry.nonEmptySince = null;\n      return 0;\n    }\n    const blackoutPeriod = this.latestConfig.getBlackoutPeriodMs();\n    if (blackoutPeriod > 0 && (entry.nonEmptySince === null || now - entry.nonEmptySince.getTime() < blackoutPeriod)) {\n      return 0;\n    }\n    return entry.weight;\n  }\n\n  private calculateAndUpdateState() {\n    if (this.updatesPaused || !this.latestConfig) {\n      return;\n    }\n    if (this.countChildrenWithState(ConnectivityState.READY) > 0) {\n      const weightedPickers: WeightedPicker[] = [];\n      for (const [endpoint, entry] of this.children) {\n        if (entry.child.getConnectivityState() !== ConnectivityState.READY) {\n          continue;\n        }\n        weightedPickers.push({\n          endpointName: endpoint,\n          picker: entry.child.getPicker(),\n          weight: this.getWeight(entry)\n        });\n      }\n      trace('Created picker with weights: ' + weightedPickers.map(entry => entry.endpointName + ':' + entry.weight).join(','));\n      let metricsHandler: MetricsHandler | null;\n      if (!this.latestConfig.getEnableOobLoadReport()) {\n        metricsHandler = (loadReport, endpointName) => {\n          const childEntry = this.children.get(endpointName);\n          if (childEntry) {\n            this.updateWeight(childEntry, loadReport);\n          }\n        };\n      } else {\n        metricsHandler = null;\n      }\n      this.updateState(\n        ConnectivityState.READY,\n        new WeightedRoundRobinPicker(\n          weightedPickers,\n          metricsHandler\n        ),\n        null\n      );\n    } else if (this.countChildrenWithState(ConnectivityState.CONNECTING) > 0) {\n      this.updateState(ConnectivityState.CONNECTING, new QueuePicker(this), null);\n    } else if (\n      this.countChildrenWithState(ConnectivityState.TRANSIENT_FAILURE) > 0\n    ) {\n      const errorMessage = `weighted_round_robin: No connection established. Last error: ${this.lastError}`;\n      this.updateState(\n        ConnectivityState.TRANSIENT_FAILURE,\n        new UnavailablePicker({\n          details: errorMessage,\n        }),\n        errorMessage\n      );\n    } else {\n      this.updateState(ConnectivityState.IDLE, new QueuePicker(this), null);\n    }\n    /* round_robin should keep all children connected, this is how we do that.\n      * We can't do this more efficiently in the individual child's updateState\n      * callback because that doesn't have a reference to which child the state\n      * change is associated with. */\n    for (const {child} of this.children.values()) {\n      if (child.getConnectivityState() === ConnectivityState.IDLE) {\n        child.exitIdle();\n      }\n    }\n  }\n\n  private updateState(newState: ConnectivityState, picker: Picker, errorMessage: string | null) {\n    trace(\n      ConnectivityState[this.currentState] +\n        ' -> ' +\n        ConnectivityState[newState]\n    );\n    this.currentState = newState;\n    this.channelControlHelper.updateState(newState, picker, errorMessage);\n  }\n\n  updateAddressList(maybeEndpointList: StatusOr<Endpoint[]>, lbConfig: TypedLoadBalancingConfig, options: ChannelOptions, resolutionNote: string): boolean {\n    if (!(lbConfig instanceof WeightedRoundRobinLoadBalancingConfig)) {\n      return false;\n    }\n    if (!maybeEndpointList.ok) {\n      if (this.children.size === 0) {\n        this.updateState(\n          ConnectivityState.TRANSIENT_FAILURE,\n          new UnavailablePicker(maybeEndpointList.error),\n          maybeEndpointList.error.details\n        );\n      }\n      return true;\n    }\n    if (maybeEndpointList.value.length === 0) {\n      const errorMessage = `No addresses resolved. Resolution note: ${resolutionNote}`;\n      this.updateState(\n        ConnectivityState.TRANSIENT_FAILURE,\n        new UnavailablePicker({details: errorMessage}),\n        errorMessage\n      );\n      return false;\n    }\n    trace('Connect to endpoint list ' + maybeEndpointList.value.map(endpointToString));\n    const now = new Date();\n    const seenEndpointNames = new Set<string>();\n    this.updatesPaused = true;\n    this.latestConfig = lbConfig;\n    for (const endpoint of maybeEndpointList.value) {\n      const name = endpointToString(endpoint);\n      seenEndpointNames.add(name);\n      let entry = this.children.get(name);\n      if (!entry) {\n        entry = {\n          child: new LeafLoadBalancer(endpoint, createChildChannelControlHelper(this.channelControlHelper, {\n            updateState: (connectivityState, picker, errorMessage) => {\n              /* Ensure that name resolution is requested again after active\n                * connections are dropped. This is more aggressive than necessary to\n                * accomplish that, so we are counting on resolvers to have\n                * reasonable rate limits. */\n              if (this.currentState === ConnectivityState.READY && connectivityState !== ConnectivityState.READY) {\n                this.channelControlHelper.requestReresolution();\n              }\n              if (connectivityState === ConnectivityState.READY) {\n                entry!.nonEmptySince = null;\n              }\n              if (errorMessage) {\n                this.lastError = errorMessage;\n              }\n              this.calculateAndUpdateState();\n            },\n            createSubchannel: (subchannelAddress, subchannelArgs) => {\n              const subchannel = this.channelControlHelper.createSubchannel(subchannelAddress, subchannelArgs);\n              if (entry?.oobMetricsListener) {\n                return new OrcaOobMetricsSubchannelWrapper(subchannel, entry.oobMetricsListener, this.latestConfig!.getOobLoadReportingPeriodMs());\n              } else {\n                return subchannel;\n              }\n            }\n          }), options, resolutionNote),\n          lastUpdated: now,\n          nonEmptySince: null,\n          weight: 0,\n          oobMetricsListener: null\n        };\n        this.children.set(name, entry);\n      }\n      if (lbConfig.getEnableOobLoadReport()) {\n        entry.oobMetricsListener = loadReport => {\n          this.updateWeight(entry!, loadReport);\n        };\n      } else {\n        entry.oobMetricsListener = null;\n      }\n    }\n    for (const [endpointName, entry] of this.children) {\n      if (seenEndpointNames.has(endpointName)) {\n        entry.child.startConnecting();\n      } else {\n        entry.child.destroy();\n        this.children.delete(endpointName);\n      }\n    }\n    this.updatesPaused = false;\n    this.calculateAndUpdateState();\n    if (this.weightUpdateTimer) {\n      clearInterval(this.weightUpdateTimer);\n    }\n    this.weightUpdateTimer = setInterval(() => {\n      if (this.currentState === ConnectivityState.READY) {\n        this.calculateAndUpdateState();\n      }\n    }, lbConfig.getWeightUpdatePeriodMs()).unref?.();\n    return true;\n  }\n  exitIdle(): void {\n    /* The weighted_round_robin LB policy is only in the IDLE state if it has\n     * no addresses to try to connect to and it has no picked subchannel.\n     * In that case, there is no meaningful action that can be taken here. */\n  }\n  resetBackoff(): void {\n    // This LB policy has no backoff to reset\n  }\n  destroy(): void {\n    for (const entry of this.children.values()) {\n      entry.child.destroy();\n    }\n    this.children.clear();\n    if (this.weightUpdateTimer) {\n      clearInterval(this.weightUpdateTimer);\n    }\n  }\n  getTypeName(): string {\n    return TYPE_NAME;\n  }\n}\n\nexport function setup() {\n  registerLoadBalancerType(\n    TYPE_NAME,\n    WeightedRoundRobinLoadBalancer,\n    WeightedRoundRobinLoadBalancingConfig\n  );\n}\n","/*\n * Copyright 2019 gRPC authors.\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 */\n\nimport {\n  ClientDuplexStream,\n  ClientReadableStream,\n  ClientUnaryCall,\n  ClientWritableStream,\n  ServiceError,\n} from './call';\nimport { CallCredentials, OAuth2Client } from './call-credentials';\nimport { StatusObject } from './call-interface';\nimport { Channel, ChannelImplementation } from './channel';\nimport { CompressionAlgorithms } from './compression-algorithms';\nimport { ConnectivityState } from './connectivity-state';\nimport { ChannelCredentials, VerifyOptions } from './channel-credentials';\nimport {\n  CallOptions,\n  Client,\n  ClientOptions,\n  CallInvocationTransformer,\n  CallProperties,\n  UnaryCallback,\n} from './client';\nimport { LogVerbosity, Status, Propagate } from './constants';\nimport * as logging from './logging';\nimport {\n  Deserialize,\n  loadPackageDefinition,\n  makeClientConstructor,\n  MethodDefinition,\n  Serialize,\n  ServerMethodDefinition,\n  ServiceDefinition,\n} from './make-client';\nimport { Metadata, MetadataOptions, MetadataValue } from './metadata';\nimport {\n  ConnectionInjector,\n  Server,\n  ServerOptions,\n  UntypedHandleCall,\n  UntypedServiceImplementation,\n} from './server';\nimport { KeyCertPair, ServerCredentials } from './server-credentials';\nimport { StatusBuilder } from './status-builder';\nimport {\n  handleBidiStreamingCall,\n  handleServerStreamingCall,\n  handleClientStreamingCall,\n  handleUnaryCall,\n  sendUnaryData,\n  ServerUnaryCall,\n  ServerReadableStream,\n  ServerWritableStream,\n  ServerDuplexStream,\n  ServerErrorResponse,\n} from './server-call';\n\nexport { OAuth2Client };\n\n/**** Client Credentials ****/\n\n// Using assign only copies enumerable properties, which is what we want\nexport const credentials = {\n  /**\n   * Combine a ChannelCredentials with any number of CallCredentials into a\n   * single ChannelCredentials object.\n   * @param channelCredentials The ChannelCredentials object.\n   * @param callCredentials Any number of CallCredentials objects.\n   * @return The resulting ChannelCredentials object.\n   */\n  combineChannelCredentials: (\n    channelCredentials: ChannelCredentials,\n    ...callCredentials: CallCredentials[]\n  ): ChannelCredentials => {\n    return callCredentials.reduce(\n      (acc, other) => acc.compose(other),\n      channelCredentials\n    );\n  },\n\n  /**\n   * Combine any number of CallCredentials into a single CallCredentials\n   * object.\n   * @param first The first CallCredentials object.\n   * @param additional Any number of additional CallCredentials objects.\n   * @return The resulting CallCredentials object.\n   */\n  combineCallCredentials: (\n    first: CallCredentials,\n    ...additional: CallCredentials[]\n  ): CallCredentials => {\n    return additional.reduce((acc, other) => acc.compose(other), first);\n  },\n\n  // from channel-credentials.ts\n  createInsecure: ChannelCredentials.createInsecure,\n  createSsl: ChannelCredentials.createSsl,\n  createFromSecureContext: ChannelCredentials.createFromSecureContext,\n\n  // from call-credentials.ts\n  createFromMetadataGenerator: CallCredentials.createFromMetadataGenerator,\n  createFromGoogleCredential: CallCredentials.createFromGoogleCredential,\n  createEmpty: CallCredentials.createEmpty,\n};\n\n/**** Metadata ****/\n\nexport { Metadata, MetadataOptions, MetadataValue };\n\n/**** Constants ****/\n\nexport {\n  LogVerbosity as logVerbosity,\n  Status as status,\n  ConnectivityState as connectivityState,\n  Propagate as propagate,\n  CompressionAlgorithms as compressionAlgorithms,\n  // TODO: Other constants as well\n};\n\n/**** Client ****/\n\nexport {\n  Client,\n  ClientOptions,\n  loadPackageDefinition,\n  makeClientConstructor,\n  makeClientConstructor as makeGenericClientConstructor,\n  CallProperties,\n  CallInvocationTransformer,\n  ChannelImplementation as Channel,\n  Channel as ChannelInterface,\n  UnaryCallback as requestCallback,\n};\n\n/**\n * Close a Client object.\n * @param client The client to close.\n */\nexport const closeClient = (client: Client) => client.close();\n\nexport const waitForClientReady = (\n  client: Client,\n  deadline: Date | number,\n  callback: (error?: Error) => void\n) => client.waitForReady(deadline, callback);\n\n/* Interfaces */\n\nexport {\n  sendUnaryData,\n  ChannelCredentials,\n  CallCredentials,\n  Deadline,\n  Serialize as serialize,\n  Deserialize as deserialize,\n  ClientUnaryCall,\n  ClientReadableStream,\n  ClientWritableStream,\n  ClientDuplexStream,\n  CallOptions,\n  MethodDefinition,\n  StatusObject,\n  ServiceError,\n  ServerUnaryCall,\n  ServerReadableStream,\n  ServerWritableStream,\n  ServerDuplexStream,\n  ServerErrorResponse,\n  ServerMethodDefinition,\n  ServiceDefinition,\n  UntypedHandleCall,\n  UntypedServiceImplementation,\n  VerifyOptions,\n};\n\n/**** Server ****/\n\nexport {\n  handleBidiStreamingCall,\n  handleServerStreamingCall,\n  handleUnaryCall,\n  handleClientStreamingCall,\n};\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport type Call =\n  | ClientUnaryCall\n  | ClientReadableStream<any>\n  | ClientWritableStream<any>\n  | ClientDuplexStream<any, any>;\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\n/**** Unimplemented function stubs ****/\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport const loadObject = (value: any, options: any): never => {\n  throw new Error(\n    'Not available in this library. Use @grpc/proto-loader and loadPackageDefinition instead'\n  );\n};\n\nexport const load = (filename: any, format: any, options: any): never => {\n  throw new Error(\n    'Not available in this library. Use @grpc/proto-loader and loadPackageDefinition instead'\n  );\n};\n\nexport const setLogger = (logger: Partial<Console>): void => {\n  logging.setLogger(logger);\n};\n\nexport const setLogVerbosity = (verbosity: LogVerbosity): void => {\n  logging.setLoggerVerbosity(verbosity);\n};\n\nexport { ConnectionInjector, Server, ServerOptions };\nexport { ServerCredentials };\nexport { KeyCertPair };\n\nexport const getClientChannel = (client: Client) => {\n  return Client.prototype.getChannel.call(client);\n};\n\nexport { StatusBuilder };\n\nexport { Listener, InterceptingListener } from './call-interface';\n\nexport {\n  Requester,\n  ListenerBuilder,\n  RequesterBuilder,\n  Interceptor,\n  InterceptorOptions,\n  InterceptorProvider,\n  InterceptingCall,\n  InterceptorConfigurationError,\n  NextCall,\n} from './client-interceptors';\n\nexport {\n  GrpcObject,\n  ServiceClientConstructor,\n  ProtobufTypeDefinition,\n} from './make-client';\n\nexport { ChannelOptions } from './channel-options';\n\nexport { getChannelzServiceDefinition, getChannelzHandlers } from './channelz';\n\nexport { addAdminServicesToServer } from './admin';\n\nexport {\n  ServiceConfig,\n  LoadBalancingConfig,\n  MethodConfig,\n  RetryPolicy,\n} from './service-config';\n\nexport {\n  ServerListener,\n  FullServerListener,\n  ServerListenerBuilder,\n  Responder,\n  FullResponder,\n  ResponderBuilder,\n  ServerInterceptingCallInterface,\n  ServerInterceptingCall,\n  ServerInterceptor,\n} from './server-interceptors';\n\nexport { ServerMetricRecorder } from './orca';\n\nimport * as experimental from './experimental';\nexport { experimental };\n\nimport * as resolver_dns from './resolver-dns';\nimport * as resolver_uds from './resolver-uds';\nimport * as resolver_ip from './resolver-ip';\nimport * as load_balancer_pick_first from './load-balancer-pick-first';\nimport * as load_balancer_round_robin from './load-balancer-round-robin';\nimport * as load_balancer_outlier_detection from './load-balancer-outlier-detection';\nimport * as load_balancer_weighted_round_robin from './load-balancer-weighted-round-robin';\nimport * as channelz from './channelz';\nimport { Deadline } from './deadline';\n\n(() => {\n  resolver_dns.setup();\n  resolver_uds.setup();\n  resolver_ip.setup();\n  load_balancer_pick_first.setup();\n  load_balancer_round_robin.setup();\n  load_balancer_outlier_detection.setup();\n  load_balancer_weighted_round_robin.setup();\n  channelz.setup();\n})();\n","import type { temporal } from '@temporalio/proto';\nimport type { Payload } from '../interfaces';\nimport {\n  arrayFromPayloads,\n  convertOptionalToPayload,\n  fromPayloadsAtIndex,\n  toPayloadsWithContext,\n} from '../converter/payload-converter';\nimport { PayloadConverterError } from '../errors';\nimport type { PayloadCodec } from '../converter/payload-codec';\nimport type { ProtoFailure } from '../failure';\nimport type { LoadedDataConverter } from '../converter/data-converter';\nimport type { UserMetadata } from '../user-metadata';\nimport type { SerializationContext } from '../converter/serialization-context';\nimport type { DecodedPayload, DecodedProtoFailure, EncodedPayload, EncodedProtoFailure } from './codec-types';\n\n/**\n * Decode through each codec, starting with the last codec.\n */\nexport async function decode(\n  codecs: PayloadCodec[],\n  payloads: Payload[],\n  context?: SerializationContext\n): Promise<DecodedPayload[]> {\n  for (let i = codecs.length - 1; i >= 0; i--) {\n    payloads = await codecs[i]!.decode(payloads, context);\n  }\n  return payloads as DecodedPayload[];\n}\n\n/**\n * Encode through each codec, starting with the first codec.\n */\nexport async function encode(\n  codecs: PayloadCodec[],\n  payloads: Payload[],\n  context?: SerializationContext\n): Promise<EncodedPayload[]> {\n  for (let i = 0; i < codecs.length; i++) {\n    payloads = await codecs[i]!.encode(payloads, context);\n  }\n  return payloads as EncodedPayload[];\n}\n\n/** Run {@link PayloadCodec.encode} on `payloads` */\nexport async function encodeOptional(\n  codecs: PayloadCodec[],\n  payloads: Payload[] | null | undefined,\n  context?: SerializationContext\n): Promise<EncodedPayload[] | null | undefined> {\n  if (payloads == null) return payloads;\n  return await encode(codecs, payloads, context);\n}\n\n/** Run {@link PayloadCodec.decode} on `payloads` */\nexport async function decodeOptional(\n  codecs: PayloadCodec[],\n  payloads: Payload[] | null | undefined,\n  context?: SerializationContext\n): Promise<DecodedPayload[] | null | undefined> {\n  if (payloads == null) return payloads;\n  return await decode(codecs, payloads, context);\n}\n\nasync function encodeSingle(\n  codecs: PayloadCodec[],\n  payload: Payload,\n  context?: SerializationContext\n): Promise<EncodedPayload> {\n  const encodedPayloads = await encode(codecs, [payload], context);\n  return encodedPayloads[0] as EncodedPayload;\n}\n\nasync function decodeSingle(\n  codecs: PayloadCodec[],\n  payload: Payload,\n  context?: SerializationContext\n): Promise<DecodedPayload> {\n  const [decodedPayload] = await decode(codecs, [payload], context);\n  return decodedPayload!;\n}\n\n/** Run {@link PayloadCodec.encode} on a single Payload */\nexport async function encodeOptionalSingle(\n  codecs: PayloadCodec[],\n  payload: Payload | null | undefined,\n  context?: SerializationContext\n): Promise<EncodedPayload | null | undefined> {\n  if (payload == null) return payload;\n  return await encodeSingle(codecs, payload, context);\n}\n\n/** Run {@link PayloadCodec.decode} on a single Payload */\nexport async function decodeOptionalSingle(\n  codecs: PayloadCodec[],\n  payload: Payload | null | undefined,\n  context?: SerializationContext\n): Promise<DecodedPayload | null | undefined> {\n  if (payload == null) return payload;\n  return await decodeSingle(codecs, payload, context);\n}\n\n/** Run {@link PayloadCodec.decode} and convert from a single Payload */\nexport async function decodeOptionalSinglePayload<T>(\n  dataConverter: LoadedDataConverter,\n  payload?: Payload | null | undefined,\n  context?: SerializationContext\n): Promise<T | null | undefined> {\n  const { payloadConverter, payloadCodecs } = dataConverter;\n  const decoded = await decodeOptionalSingle(payloadCodecs, payload, context);\n  if (decoded == null) return decoded;\n  return payloadConverter.fromPayload(decoded, context);\n}\n\n/**\n * Run {@link PayloadConverter.toPayload} on value, and then encode it.\n */\nexport async function encodeToPayload(\n  converter: LoadedDataConverter,\n  value: unknown,\n  context?: SerializationContext\n): Promise<Payload> {\n  const { payloadConverter, payloadCodecs } = converter;\n  return await encodeSingle(payloadCodecs, payloadConverter.toPayload(value, context), context);\n}\n\n/**\n * Decode `payloads` and then return {@link arrayFromPayloads}`.\n */\nexport async function decodeArrayFromPayloads(\n  converter: LoadedDataConverter,\n  payloads?: Payload[] | null,\n  context?: SerializationContext\n): Promise<unknown[]> {\n  const { payloadConverter, payloadCodecs } = converter;\n  return arrayFromPayloads(payloadConverter, await decodeOptional(payloadCodecs, payloads, context), context);\n}\n\n/**\n * Decode `payloads` and then return {@link fromPayloadsAtIndex}.\n */\nexport async function decodeFromPayloadsAtIndex<T>(\n  converter: LoadedDataConverter,\n  index: number,\n  payloads?: Payload[] | null,\n  context?: SerializationContext\n): Promise<T> {\n  const { payloadConverter, payloadCodecs } = converter;\n  return await fromPayloadsAtIndex(\n    payloadConverter,\n    index,\n    await decodeOptional(payloadCodecs, payloads, context),\n    context\n  );\n}\n\n/**\n * Run {@link decodeFailure} and then return {@link failureToError}.\n */\nexport async function decodeOptionalFailureToOptionalError(\n  converter: LoadedDataConverter,\n  failure: ProtoFailure | undefined | null,\n  context?: SerializationContext\n): Promise<Error | undefined> {\n  const { failureConverter, payloadConverter, payloadCodecs } = converter;\n  return failure\n    ? failureConverter.failureToError(await decodeFailure(payloadCodecs, failure, context), payloadConverter, context)\n    : undefined;\n}\n\nexport async function decodeOptionalMap(\n  codecs: PayloadCodec[],\n  payloads: Record<string, Payload> | null | undefined,\n  context?: SerializationContext\n): Promise<Record<string, DecodedPayload> | null | undefined> {\n  if (payloads == null) return payloads;\n  return Object.fromEntries(\n    await Promise.all(Object.entries(payloads).map(async ([k, v]) => [k, (await decode(codecs, [v], context))[0]]))\n  );\n}\n\n/**\n * Run {@link PayloadConverter.toPayload} on values, and then encode them.\n */\nexport async function encodeToPayloads(\n  converter: LoadedDataConverter,\n  ...values: unknown[]\n): Promise<Payload[] | undefined> {\n  return encodeToPayloadsWithContext(converter, undefined, values);\n}\n\n/**\n * Run {@link PayloadConverter.toPayload} on values with an optional serialization context, and then encode them.\n */\nexport async function encodeToPayloadsWithContext(\n  converter: LoadedDataConverter,\n  context: SerializationContext | undefined,\n  values: unknown[]\n): Promise<Payload[] | undefined> {\n  const { payloadConverter, payloadCodecs } = converter;\n  if (values.length === 0) {\n    return undefined;\n  }\n  const payloads = toPayloadsWithContext(payloadConverter, context, values);\n  return payloads ? await encode(payloadCodecs, payloads, context) : undefined;\n}\n\n/**\n * Run {@link PayloadCodec.decode} and then {@link PayloadConverter.fromPayload} on values in `map`.\n */\nexport async function decodeMapFromPayloads<K extends string>(\n  converter: LoadedDataConverter,\n  map: Record<K, Payload> | null | undefined,\n  context?: SerializationContext\n): Promise<Record<K, unknown> | undefined> {\n  if (!map) return undefined;\n  const { payloadConverter, payloadCodecs } = converter;\n  return Object.fromEntries(\n    await Promise.all(\n      Object.entries(map).map(async ([k, payload]): Promise<[K, unknown]> => {\n        const [decodedPayload] = await decode(payloadCodecs, [payload as Payload], context);\n        const value = payloadConverter.fromPayload(decodedPayload!, context);\n        return [k as K, value];\n      })\n    )\n  ) as Record<K, unknown>;\n}\n\n/** Run {@link PayloadCodec.encode} on all values in `map` */\nexport async function encodeMap<K extends string>(\n  codecs: PayloadCodec[],\n  map: Record<K, Payload> | null | undefined,\n  context?: SerializationContext\n): Promise<Record<K, EncodedPayload> | null | undefined> {\n  if (map === null) return null;\n  if (map === undefined) return undefined;\n  return Object.fromEntries(\n    await Promise.all(\n      Object.entries(map).map(async ([k, payload]): Promise<[K, EncodedPayload]> => {\n        return [k as K, await encodeSingle(codecs, payload as Payload, context)];\n      })\n    )\n  ) as Record<K, EncodedPayload>;\n}\n\n/**\n * Run {@link PayloadConverter.toPayload} and then {@link PayloadCodec.encode} on values in `map`.\n */\nexport async function encodeMapToPayloads<K extends string>(\n  converter: LoadedDataConverter,\n  map: Record<K, unknown>,\n  context?: SerializationContext\n): Promise<Record<K, Payload>> {\n  const { payloadConverter, payloadCodecs } = converter;\n  return Object.fromEntries(\n    await Promise.all(\n      Object.entries(map).map(async ([k, v]): Promise<[K, Payload]> => {\n        const payload = payloadConverter.toPayload(v, context);\n        if (payload === undefined) throw new PayloadConverterError(`Failed to encode entry: ${k}: ${v}`);\n        const [encodedPayload] = await encode(payloadCodecs, [payload], context);\n        return [k as K, encodedPayload!];\n      })\n    )\n  ) as Record<K, Payload>;\n}\n\n/**\n * Run {@link errorToFailure} on `error`, and then {@link encodeFailure}.\n */\nexport async function encodeErrorToFailure(\n  dataConverter: LoadedDataConverter,\n  error: unknown,\n  context?: SerializationContext\n): Promise<ProtoFailure> {\n  const { failureConverter, payloadConverter, payloadCodecs } = dataConverter;\n  return await encodeFailure(payloadCodecs, failureConverter.errorToFailure(error, payloadConverter, context), context);\n}\n\n/**\n * Return a new {@link ProtoFailure} with `codec.encode()` run on all the {@link Payload}s.\n */\nexport async function encodeFailure(\n  codecs: PayloadCodec[],\n  failure: ProtoFailure,\n  context?: SerializationContext\n): Promise<EncodedProtoFailure> {\n  return {\n    ...failure,\n    encodedAttributes: failure.encodedAttributes\n      ? (await encode(codecs, [failure.encodedAttributes], context))[0]\n      : undefined,\n    cause: failure.cause ? await encodeFailure(codecs, failure.cause, context) : null,\n    applicationFailureInfo: failure.applicationFailureInfo\n      ? {\n          ...failure.applicationFailureInfo,\n          details: failure.applicationFailureInfo.details\n            ? {\n                payloads: await encode(codecs, failure.applicationFailureInfo.details.payloads ?? [], context),\n              }\n            : undefined,\n        }\n      : undefined,\n    timeoutFailureInfo: failure.timeoutFailureInfo\n      ? {\n          ...failure.timeoutFailureInfo,\n          lastHeartbeatDetails: failure.timeoutFailureInfo.lastHeartbeatDetails\n            ? {\n                payloads: await encode(codecs, failure.timeoutFailureInfo.lastHeartbeatDetails.payloads ?? [], context),\n              }\n            : undefined,\n        }\n      : undefined,\n    canceledFailureInfo: failure.canceledFailureInfo\n      ? {\n          ...failure.canceledFailureInfo,\n          details: failure.canceledFailureInfo.details\n            ? {\n                payloads: await encode(codecs, failure.canceledFailureInfo.details.payloads ?? [], context),\n              }\n            : undefined,\n        }\n      : undefined,\n    resetWorkflowFailureInfo: failure.resetWorkflowFailureInfo\n      ? {\n          ...failure.resetWorkflowFailureInfo,\n          lastHeartbeatDetails: failure.resetWorkflowFailureInfo.lastHeartbeatDetails\n            ? {\n                payloads: await encode(\n                  codecs,\n                  failure.resetWorkflowFailureInfo.lastHeartbeatDetails.payloads ?? [],\n                  context\n                ),\n              }\n            : undefined,\n        }\n      : undefined,\n  };\n}\n\n/**\n * Return a new {@link ProtoFailure} with `codec.decode()` run on all the {@link Payload}s.\n */\nexport async function decodeFailure(\n  codecs: PayloadCodec[],\n  failure: ProtoFailure,\n  context?: SerializationContext\n): Promise<DecodedProtoFailure> {\n  return {\n    ...failure,\n    encodedAttributes: failure.encodedAttributes\n      ? (await decode(codecs, [failure.encodedAttributes], context))[0]\n      : undefined,\n    cause: failure.cause ? await decodeFailure(codecs, failure.cause, context) : null,\n    applicationFailureInfo: failure.applicationFailureInfo\n      ? {\n          ...failure.applicationFailureInfo,\n          details: failure.applicationFailureInfo.details\n            ? {\n                payloads: await decode(codecs, failure.applicationFailureInfo.details.payloads ?? [], context),\n              }\n            : undefined,\n        }\n      : undefined,\n    timeoutFailureInfo: failure.timeoutFailureInfo\n      ? {\n          ...failure.timeoutFailureInfo,\n          lastHeartbeatDetails: failure.timeoutFailureInfo.lastHeartbeatDetails\n            ? {\n                payloads: await decode(codecs, failure.timeoutFailureInfo.lastHeartbeatDetails.payloads ?? [], context),\n              }\n            : undefined,\n        }\n      : undefined,\n    canceledFailureInfo: failure.canceledFailureInfo\n      ? {\n          ...failure.canceledFailureInfo,\n          details: failure.canceledFailureInfo.details\n            ? {\n                payloads: await decode(codecs, failure.canceledFailureInfo.details.payloads ?? [], context),\n              }\n            : undefined,\n        }\n      : undefined,\n    resetWorkflowFailureInfo: failure.resetWorkflowFailureInfo\n      ? {\n          ...failure.resetWorkflowFailureInfo,\n          lastHeartbeatDetails: failure.resetWorkflowFailureInfo.lastHeartbeatDetails\n            ? {\n                payloads: await decode(\n                  codecs,\n                  failure.resetWorkflowFailureInfo.lastHeartbeatDetails.payloads ?? [],\n                  context\n                ),\n              }\n            : undefined,\n        }\n      : undefined,\n  };\n}\n\n/**\n * Return a new {@link ProtoFailure} with `codec.encode()` run on all the {@link Payload}s.\n */\nexport async function encodeOptionalFailure(\n  codecs: PayloadCodec[],\n  failure: ProtoFailure | null | undefined,\n  context?: SerializationContext\n): Promise<EncodedProtoFailure | null | undefined> {\n  if (failure == null) return failure;\n  return await encodeFailure(codecs, failure, context);\n}\n\n/**\n * Return a new {@link ProtoFailure} with `codec.encode()` run on all the {@link Payload}s.\n */\nexport async function decodeOptionalFailure(\n  codecs: PayloadCodec[],\n  failure: ProtoFailure | null | undefined,\n  context?: SerializationContext\n): Promise<DecodedProtoFailure | null | undefined> {\n  if (failure == null) return failure;\n  return await decodeFailure(codecs, failure, context);\n}\n\n/**\n * Mark all values in the map as encoded.\n * Use this for headers, which we don't encode.\n */\nexport function noopEncodeMap<K extends string>(\n  map: Record<K, Payload> | null | undefined\n): Record<K, EncodedPayload> | null | undefined {\n  return map as Record<K, EncodedPayload> | null | undefined;\n}\n\nexport function noopEncodeSearchAttrs(\n  attrs: temporal.api.common.v1.ISearchAttributes | null | undefined\n): temporal.api.common.v1.ISearchAttributes | null | undefined {\n  if (!attrs) {\n    return attrs;\n  }\n  return {\n    indexedFields: noopEncodeMap(attrs.indexedFields),\n  };\n}\n\n/**\n * Mark all values in the map as decoded.\n * Use this for headers, which we don't encode.\n */\nexport function noopDecodeMap<K extends string>(\n  map: Record<K, Payload> | null | undefined\n): Record<K, DecodedPayload> | null | undefined {\n  return map as Record<K, DecodedPayload> | null | undefined;\n}\n\nexport async function encodeUserMetadata(\n  dataConverter: LoadedDataConverter,\n  staticSummary: string | undefined,\n  staticDetails: string | undefined,\n  context?: SerializationContext\n): Promise<temporal.api.sdk.v1.IUserMetadata | undefined> {\n  if (staticSummary == null && staticDetails == null) return undefined;\n\n  const { payloadConverter, payloadCodecs } = dataConverter;\n  const summary = await encodeOptionalSingle(\n    payloadCodecs,\n    convertOptionalToPayload(payloadConverter, staticSummary, context),\n    context\n  );\n  const details = await encodeOptionalSingle(\n    payloadCodecs,\n    convertOptionalToPayload(payloadConverter, staticDetails, context),\n    context\n  );\n\n  if (summary == null && details == null) return undefined;\n\n  return { summary, details };\n}\n\nexport async function decodeUserMetadata(\n  dataConverter: LoadedDataConverter,\n  metadata: temporal.api.sdk.v1.IUserMetadata | undefined | null,\n  context?: SerializationContext\n): Promise<UserMetadata> {\n  const res = { staticSummary: undefined, staticDetails: undefined };\n  if (metadata == null) return res;\n\n  const staticSummary =\n    (await decodeOptionalSinglePayload<string>(dataConverter, metadata.summary, context)) ?? undefined;\n  const staticDetails =\n    (await decodeOptionalSinglePayload<string>(dataConverter, metadata.details, context)) ?? undefined;\n\n  return { staticSummary, staticDetails };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=codec-types.js.map","import type { PayloadConverter } from '../converter/payload-converter';\nimport { defaultPayloadConverter } from '../converter/payload-converter';\nimport type { DataConverter, LoadedDataConverter } from '../converter/data-converter';\nimport { defaultFailureConverter } from '../converter/data-converter';\nimport type { FailureConverter } from '../converter/failure-converter';\nimport { errorCode, hasOwnProperty, isRecord } from '../type-helpers';\nimport { ValueError } from '../errors';\n\nconst isValidPayloadConverter = (converter: unknown, path: string): asserts converter is PayloadConverter => {\n  const isValid =\n    typeof converter === 'object' &&\n    converter !== null &&\n    ['toPayload', 'fromPayload'].every(\n      (method) => typeof (converter as Record<string, unknown>)[method] === 'function'\n    );\n  if (!isValid) {\n    throw new ValueError(`payloadConverter export at ${path} must be an object with toPayload and fromPayload methods`);\n  }\n};\n\nconst isValidFailureConverter = (converter: unknown, path: string): asserts converter is FailureConverter => {\n  const isValid =\n    typeof converter === 'object' &&\n    converter !== null &&\n    ['errorToFailure', 'failureToError'].every(\n      (method) => typeof (converter as Record<string, unknown>)[method] === 'function'\n    );\n  if (!isValid) {\n    throw new ValueError(\n      `failureConverter export at ${path} must be an object with errorToFailure and failureToError methods`\n    );\n  }\n};\n\nfunction requireConverter<T>(\n  path: string,\n  type: string,\n  validator: (converter: unknown, path: string) => asserts converter is T\n): T {\n  let module;\n  try {\n    module = require(path); // eslint-disable-line @typescript-eslint/no-require-imports\n  } catch (error) {\n    if (errorCode(error) === 'MODULE_NOT_FOUND') {\n      throw new ValueError(`Could not find a file at the specified ${type}Path: '${path}'.`);\n    }\n    throw error;\n  }\n\n  if (isRecord(module) && hasOwnProperty(module, type)) {\n    const converter = module[type];\n    validator(converter, path);\n    return converter;\n  } else {\n    throw new ValueError(`Module ${path} does not have a \\`${type}\\` named export`);\n  }\n}\n\n/**\n * If {@link DataConverter.payloadConverterPath} is specified, `require()` it and validate that the module has a `payloadConverter` named export.\n * If not, use {@link defaultPayloadConverter}.\n * If {@link DataConverter.payloadCodecs} is unspecified, use an empty array.\n */\nexport function loadDataConverter(dataConverter?: DataConverter): LoadedDataConverter {\n  let payloadConverter: PayloadConverter = defaultPayloadConverter;\n  if (dataConverter?.payloadConverterPath) {\n    payloadConverter = requireConverter(\n      dataConverter.payloadConverterPath,\n      'payloadConverter',\n      isValidPayloadConverter\n    );\n  }\n  let failureConverter: FailureConverter = defaultFailureConverter;\n  if (dataConverter?.failureConverterPath) {\n    failureConverter = requireConverter(\n      dataConverter.failureConverterPath,\n      'failureConverter',\n      isValidFailureConverter\n    );\n  }\n  return {\n    payloadConverter,\n    failureConverter,\n    payloadCodecs: dataConverter?.payloadCodecs ?? [],\n  };\n}\n\n/**\n * Returns true if the converter is already \"loaded\"\n */\nexport function isLoadedDataConverter(\n  dataConverter?: DataConverter | LoadedDataConverter\n): dataConverter is LoadedDataConverter {\n  return isRecord(dataConverter) && hasOwnProperty(dataConverter, 'payloadConverter');\n}\n","/**\n * This file contain helper functions to parse specific subsets of URIs.\n *\n * The ECMAScript-compliant URL class don't properly handle some syntaxes that\n * we care about, such as not providing a protocol (e.g. '127.0.0.1:7233'), and\n * performs some normalizations that are not desirable for our use cases\n * (e.g. parsing 'http://127.0.0.1:7233' adds a '/' path). On the other side,\n * simply using `split(':')` breaks on IPv6 addresses. Hence these helpers.\n */\n\n/**\n * Scheme. Requires but doesn't capture the ':' or '://' separator that follows.\n * e.g. `http:` will be captured as 'http'.\n */\nconst scheme = '(?:(?<scheme>[a-z][a-z0-9]+):(?:\\\\/\\\\/)?)';\n\n/**\n * IPv4-style hostname. Not captured.\n * e.g.: `192.168.1.100`.\n */\nconst ipv4Hostname = '(?:\\\\d{1,3}(?:\\\\.\\\\d{1,3}){3})';\n\n/**\n * IPv6-style hostname; must be enclosed in square brackets. Not captured.\n * e.g.: `[::1]`, `[2001:db8::1]`, `[::FFFF:129.144.52.38]`, etc.\n */\nconst ipv6Hostname = '(?:\\\\[(?<ipv6>[0-9a-fA-F.:]+)\\\\])';\n\n// DNS-style hostname. Not captured.\n// e.g.: `test.com` or `localhost`.\nconst dnsHostname = '(?:[^:/]+)';\n\nconst hostname = `(?:${ipv4Hostname}|${ipv6Hostname}|${dnsHostname})`;\n\n// Port number. Requires but don't capture a preceeding ':' separator.\n// For example, `:7233` will be captured as `7233`.\nconst port = '(?::(?<port>\\\\d+))';\n\nconst protoHostPortRegex = new RegExp(`^${scheme}??(?<hostname>${hostname})${port}?$`);\n\nexport interface ProtoHostPort {\n  scheme?: string;\n  hostname: string;\n  port?: number;\n}\n\n/**\n * Split a URI composed only of a scheme, a hostname, and port.\n * The scheme and port are optional.\n *\n * Examples of valid URIs for HTTP CONNECT proxies:\n *\n * ```\n * http://test.com:8080 => { scheme: 'http', host: 'test.com', port: 8080 }\n * http://192.168.0.1:8080 => { scheme: 'http', host: '192.168.0.1', port: 8080 }\n * [::1]:8080 => { scheme: 'http', host: '::1', port: 8080 }\n * [::ffff:192.0.2.128]:8080 => { scheme: 'http', host: '::ffff:192.0.2.128', port: 8080 }\n * 192.168.0.1:8080 => { scheme: 'http', host: '192.168.0.1', port: 8080 }\n * ```\n */\nexport function splitProtoHostPort(uri: string): ProtoHostPort | undefined {\n  const match = protoHostPortRegex.exec(uri);\n  if (!match?.groups) return undefined;\n  return {\n    scheme: match.groups.scheme,\n    hostname: match.groups.ipv6 ?? match.groups.hostname!,\n    port: match.groups.port !== undefined ? Number(match.groups.port) : undefined,\n  };\n}\n\nexport function joinProtoHostPort(components: ProtoHostPort): string {\n  const { scheme, hostname, port } = components;\n  const schemeText = scheme ? `${scheme}:` : '';\n  const hostnameText = hostname.includes(':') ? `[${hostname}]` : hostname;\n  const portText = port !== undefined ? `:${port}` : '';\n  return `${schemeText}${hostnameText}${portText}`;\n}\n\n/**\n * Parse the address for the gRPC endpoint of a Temporal server.\n *\n * - The URI may only contain a hostname and a port.\n * - Port is optional; if not specified, set it to `defaultPort`.\n *\n * Examples of valid URIs (assuming `defaultPort` is 7233):\n *\n * ```\n * 127.0.0.1 => { host: '127.0.0.1', port: 7233 }\n * 192.168.0.1:7233 => { host: '192.168.0.1', port: 7233 }\n * my.temporal.service.com:7233 => { host: 'my.temporal.service.com', port: 7233 }\n * [::ffff:192.0.2.128]:8080 => { host: '[::ffff:192.0.2.128]', port: 8080 }\n * ```\n */\nexport function normalizeGrpcEndpointAddress(uri: string, defaultPort: number): string {\n  const splitted = splitProtoHostPort(uri);\n  if (!splitted || splitted.scheme !== undefined) {\n    throw new TypeError(\n      `Invalid address for Temporal gRPC endpoint: expected URI of the form 'hostname' or 'hostname:port'; got '${uri}'`\n    );\n  }\n  splitted.port ??= defaultPort;\n  return joinProtoHostPort(splitted);\n}\n","import type { ProtoHostPort } from './parse-host-uri';\nimport { splitProtoHostPort } from './parse-host-uri';\n\n/**\n * Configuration for HTTP CONNECT proxying.\n */\nexport interface HttpConnectProxyConfig {\n  type: 'http-connect';\n\n  /**\n   * Address of the HTTP CONNECT proxy server, in either `hostname:port` or `http://hostname:port` formats.\n   *\n   * Port is required, and only the `http` scheme is supported. Raw IPv6 addresses must be wrapped in square brackets\n   * (e.g. `[ipv6]:port`).\n   */\n  targetHost: string;\n\n  /**\n   * Basic auth for the HTTP CONNECT proxy, if any.\n   *\n   * Neither username nor password may contain `:` or `@`.\n   *\n   * Note that these credentials will be exposed through environment variables, and will be exchanged in non-encrypted\n   * form ovrer the network. The connection to the proxy server is not encrypted.\n   */\n  basicAuth?: {\n    username: string;\n    password: string;\n  };\n}\n\nexport type ProxyConfig = HttpConnectProxyConfig;\n\n/**\n * Parse the address of a HTTP CONNECT proxy endpoint.\n *\n * - The URI may only contain a scheme, a hostname, and a port;\n * - If specified, scheme must be 'http';\n * - Port is required.\n *\n * Examples of valid URIs:\n *\n * ```\n * 127.0.0.1:8080 => { scheme: 'http', host: '192.168.0.1', port: 8080 }\n * my.temporal.service.com:8888 => { scheme: 'http', host: 'my.temporal.service.com', port: 8888 }\n * [::ffff:192.0.2.128]:8080 => { scheme: 'http', host: '::ffff:192.0.2.128', port: 8080 }\n * ```\n */\nexport function parseHttpConnectProxyAddress(target: string): ProtoHostPort {\n  const match = splitProtoHostPort(target);\n  if (!match)\n    throw new TypeError(\n      `Invalid address for HTTP CONNECT proxy: expected 'hostname:port' or '[ipv6 address]:port'; got '${target}'`\n    );\n  const { scheme = 'http', hostname: host, port } = match;\n  if (scheme !== 'http')\n    throw new TypeError(`Invalid address for HTTP CONNECT proxy: scheme must be http'; got '${target}'`);\n  if (port === undefined)\n    throw new TypeError(`Invalid address for HTTP CONNECT proxy: port is required; got '${target}'`);\n  return { scheme, hostname: host, port };\n}\n","/** TLS configuration options. */\nexport interface TLSConfig {\n  /**\n   * Overrides the target name (SNI) used for TLS host name checking.\n   * If this attribute is not specified, the name used for TLS host name checking will be the host from {@link ServerOptions.url}.\n   * This can be useful when you have reverse proxy in front of temporal server, and you may want to override the SNI to\n   * direct traffic to the appropriate backend server based on custom routing rules. Oppositely, connections could be refused\n   * if the provided SNI does not match the expected host. Adding this override should be done with care.\n   */\n  serverNameOverride?: string;\n  /**\n   * Root CA certificate used by the server. If not set, and the server's\n   * cert is issued by someone the operating system trusts, verification will still work (ex: Cloud offering).\n   */\n  serverRootCACertificate?: Uint8Array;\n  /** Sets the client certificate and key for connecting with mTLS */\n  clientCertPair?: {\n    /** The certificate for this client */\n    crt: Uint8Array;\n    /** The private key for this client */\n    key: Uint8Array;\n  };\n}\n\n/**\n * TLS configuration.\n * Pass a falsy value to use a non-encrypted connection or `true` or `{}` to\n * connect with TLS without any customization.\n */\nexport type TLSConfigOption = TLSConfig | boolean | undefined | null;\n\n/**\n * Normalize {@link TLSConfigOption} by turning false and null to undefined and true to and empty object\n */\nexport function normalizeTlsConfig(\n  tls: TLSConfigOption,\n  apiKey?: string | (() => string) | undefined\n): TLSConfig | undefined {\n  tls = tls ?? (apiKey !== undefined ? true : undefined);\n  return typeof tls === 'object' ? (tls === null ? undefined : tls) : tls ? {} : undefined;\n}\n","/**\n * Internal SDK library: users should usually use other packages instead. Not included in Workflow bundle.\n *\n * @module\n */\nexport * from './codec-helpers';\nexport * from './codec-types';\nexport * from './data-converter-helpers';\nexport * from './parse-host-uri';\nexport * from './proxy-config';\nexport * from './tls-config';\n","import type { ServiceError as GrpcServiceError } from '@grpc/grpc-js';\nimport { status } from '@grpc/grpc-js';\nimport type { RetryState } from '@temporalio/common';\nimport { isError, isRecord, SymbolBasedInstanceOfError } from '@temporalio/common/lib/type-helpers';\n\n/**\n * Generic Error class for errors coming from the service\n */\n@SymbolBasedInstanceOfError('ServiceError')\nexport class ServiceError extends Error {\n  public readonly cause?: Error;\n\n  constructor(message: string, opts?: { cause: Error }) {\n    super(message);\n    this.cause = opts?.cause;\n  }\n}\n\n/**\n * Thrown by the client while waiting on Workflow execution result if execution\n * completes with failure.\n *\n * The failure type will be set in the `cause` attribute.\n *\n * For example if the workflow is cancelled, `cause` will be set to\n * {@link CancelledFailure}.\n */\n@SymbolBasedInstanceOfError('WorkflowFailedError')\nexport class WorkflowFailedError extends Error {\n  public constructor(\n    message: string,\n    public readonly cause: Error | undefined,\n    public readonly retryState: RetryState\n  ) {\n    super(message);\n  }\n}\n\n/**\n * Thrown by the client while waiting on Workflow Update result if Update\n * completes with failure.\n */\n@SymbolBasedInstanceOfError('WorkflowUpdateFailedError')\nexport class WorkflowUpdateFailedError extends Error {\n  public constructor(\n    message: string,\n    public readonly cause: Error | undefined\n  ) {\n    super(message);\n  }\n}\n\n/**\n * Thrown by the client if the Update call timed out or was cancelled.\n * This doesn't mean the update itself was timed out or cancelled.\n */\n@SymbolBasedInstanceOfError('WorkflowUpdateRPCTimeoutOrCancelledError')\nexport class WorkflowUpdateRPCTimeoutOrCancelledError extends Error {\n  public readonly cause?: Error;\n\n  public constructor(message: string, opts?: { cause: Error }) {\n    super(message);\n    this.cause = opts?.cause;\n  }\n}\n\n/**\n * Thrown the by client while waiting on Workflow execution result if Workflow\n * continues as new.\n *\n * Only thrown if asked not to follow the chain of execution (see {@link WorkflowOptions.followRuns}).\n */\n@SymbolBasedInstanceOfError('WorkflowExecutionContinuedAsNewError')\nexport class WorkflowContinuedAsNewError extends Error {\n  public constructor(\n    message: string,\n    public readonly newExecutionRunId: string\n  ) {\n    super(message);\n  }\n}\n\n/**\n * Thrown when the requested Activity could not be found.\n */\n@SymbolBasedInstanceOfError('ActivityNotFoundError')\nexport class ActivityNotFoundError extends Error {}\n\n/**\n * Thrown by {@link AsyncCompletionClient} when trying to complete or heartbeat\n * an Activity for any reason apart from {@link ActivityNotFoundError}.\n */\n@SymbolBasedInstanceOfError('ActivityCompletionError')\nexport class ActivityCompletionError extends Error {}\n\n/**\n * Thrown by {@link AsyncCompletionClient.heartbeat} when the Workflow has\n * requested to cancel the reporting Activity.\n */\n@SymbolBasedInstanceOfError('ActivityCancelledError')\nexport class ActivityCancelledError extends Error {}\n\n/**\n * Thrown by {@link AsyncCompletionClient.heartbeat} when the reporting Activity\n * has been paused.\n */\n@SymbolBasedInstanceOfError('ActivityPausedError')\nexport class ActivityPausedError extends Error {}\n\n/**\n * Thrown by {@link AsyncCompletionClient.heartbeat} when the reporting Activity\n * has been reset.\n */\n@SymbolBasedInstanceOfError('ActivityResetError')\nexport class ActivityResetError extends Error {}\n\n/**\n * Thrown by the {@link ActivityClient} while waiting on Activity execution result if execution completes with failure.\n * The failure is stored in the `cause` property.\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\n@SymbolBasedInstanceOfError('ActivityExecutionFailedError')\nexport class ActivityExecutionFailedError extends Error {\n  constructor(\n    message: string,\n    public readonly cause: Error | undefined,\n    public readonly activityId: string,\n    public readonly runId?: string\n  ) {\n    super(message);\n  }\n}\n\n/**\n * Thrown when starting an Activity failed because another Activity with the same ID already exists and reusing the ID\n * is not allowed under chosen ID reuse policy and ID conflict policy. See {@link ActivityOptions.idReusePolicy} and\n * {@link ActivityOptions.idConflictPolicy}.\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\n@SymbolBasedInstanceOfError('ActivityExecutionAlreadyStartedError')\nexport class ActivityExecutionAlreadyStartedError extends Error {\n  constructor(\n    message: string,\n    /**\n     * ID of the Activity that failed to start.\n     */\n    public readonly activityId: string,\n    /**\n     * Run ID of the existing Activity execution with the same Activity ID.\n     */\n    public readonly runId: string\n  ) {\n    super(message);\n  }\n}\n\n/**\n * Returns true if the provided error is a {@link GrpcServiceError}.\n */\nexport function isGrpcServiceError(err: unknown): err is GrpcServiceError {\n  return (\n    isError(err) &&\n    typeof (err as GrpcServiceError)?.details === 'string' &&\n    isRecord((err as GrpcServiceError).metadata)\n  );\n}\n\n/**\n * Returns true if the provided error or its cause is a {@link GrpcServiceError} with code DEADLINE_EXCEEDED.\n *\n * @see {@link Connection.withDeadline}\n */\nexport function isGrpcDeadlineError(err: unknown): err is Error {\n  while (isError(err)) {\n    if (isGrpcServiceError(err) && (err as GrpcServiceError).code === status.DEADLINE_EXCEEDED) {\n      return true;\n    }\n    err = (err as any).cause;\n  }\n  return false;\n}\n\n/**\n * Returns true if the provided error or its cause is a {@link GrpcServiceError} with code CANCELLED.\n *\n * @see {@link Connection.withAbortSignal}\n */\nexport function isGrpcCancelledError(err: unknown): err is Error {\n  while (isError(err)) {\n    if (isGrpcServiceError(err) && (err as GrpcServiceError).code === status.CANCELLED) {\n      return true;\n    }\n    err = (err as any).cause;\n  }\n  return false;\n}\n\n/**\n * @deprecated Use `isGrpcServiceError` instead\n */\nexport const isServerErrorResponse = isGrpcServiceError;\n","import type { Interceptor, StatusObject } from '@grpc/grpc-js';\nimport { InterceptingCall, ListenerBuilder, RequesterBuilder } from '@grpc/grpc-js';\nimport * as grpc from '@grpc/grpc-js';\n\nexport interface GrpcRetryOptions {\n  /**\n   * A function which accepts the current retry attempt (starts at 1) and returns the millisecond\n   * delay that should be applied before the next retry.\n   */\n  delayFunction: (attempt: number, status: StatusObject) => number;\n\n  /**\n   * A function which accepts a failed status object and returns true if the call should be retried\n   */\n  retryableDecider: (attempt: number, status: StatusObject) => boolean;\n}\n\n/**\n * Options for the backoff formula: `factor ^ attempt * initialIntervalMs(status) * jitter(maxJitter)`\n */\nexport interface BackoffOptions {\n  /**\n   * Exponential backoff factor\n   *\n   * @default 1.7\n   */\n  factor: number;\n\n  /**\n   * Maximum number of attempts\n   *\n   * @default 10\n   */\n  maxAttempts: number;\n  /**\n   * Maximum amount of jitter to apply\n   *\n   * @default 0.2\n   */\n  maxJitter: number;\n  /**\n   * Function that returns the \"initial\" backoff interval based on the returned status.\n   *\n   * The default is 1 second for RESOURCE_EXHAUSTED errors and 100 millis for other retryable errors.\n   */\n  initialIntervalMs(status: StatusObject): number;\n\n  /**\n   * Function that returns the \"maximum\" backoff interval based on the returned status.\n   *\n   * The default is 5 seconds regardless of the status.\n   */\n  maxIntervalMs(status: StatusObject): number;\n}\n\n/**\n * Add defaults as documented in {@link BackoffOptions}\n */\nfunction withDefaultBackoffOptions({\n  maxAttempts,\n  factor,\n  maxJitter,\n  initialIntervalMs,\n}: Partial<BackoffOptions>): BackoffOptions {\n  return {\n    maxAttempts: maxAttempts ?? 10,\n    factor: factor ?? 1.7,\n    maxJitter: maxJitter ?? 0.2,\n    initialIntervalMs: initialIntervalMs ?? defaultInitialIntervalMs,\n    maxIntervalMs() {\n      return 5_000;\n    },\n  };\n}\n\n/**\n * Generates the default retry behavior based on given backoff options\n */\nexport function defaultGrpcRetryOptions(options: Partial<BackoffOptions> = {}): GrpcRetryOptions {\n  const { maxAttempts, factor, maxJitter, initialIntervalMs, maxIntervalMs } = withDefaultBackoffOptions(options);\n  return {\n    delayFunction(attempt, status) {\n      return Math.min(maxIntervalMs(status), factor ** attempt * initialIntervalMs(status)) * jitter(maxJitter);\n    },\n    retryableDecider(attempt, status) {\n      return attempt < maxAttempts && isRetryableError(status);\n    },\n  };\n}\n\n/**\n * Set of retryable gRPC status codes\n */\nconst retryableCodes = new Set([\n  grpc.status.UNKNOWN,\n  grpc.status.RESOURCE_EXHAUSTED,\n  grpc.status.UNAVAILABLE,\n  grpc.status.ABORTED,\n  grpc.status.DATA_LOSS,\n  grpc.status.OUT_OF_RANGE,\n]);\n\nexport function isRetryableError(status: StatusObject): boolean {\n  // gRPC INTERNAL status is ambiguous and may be used in many unrelated situations, including:\n  // - TLS errors\n  // - Compression errors\n  // - Errors decoding protobuf messages (either client-side or server-side)\n  // - Transient HTTP/2 network errors\n  // - Failing some server-side request validation\n  // - etc.\n  //\n  // In most case, retrying is useless and would only be a waste of resource.\n  // However, in case of transient network errors, retrying is highly desirable.\n  // Unfortunately, the only way of differenciating between those various cases\n  // is pattern matching the error messages.\n  if (status.code === grpc.status.INTERNAL) {\n    // RST_STREAM code 0 means the HTTP2 request completed with HTTP status 200, but without\n    // the mandatory `grpc-status` header. That's generally due to some HTTP2 proxy or load balancer\n    // that doesn't know about gRPC-specifics. Retrying may help.\n    if (/RST_STREAM with code 0|Call ended without gRPC status/i.test(status.details)) return true;\n\n    // RST_STREAM code 2 is pretty generic and encompasses most HTTP2 protocol errors.\n    // That may for example happen if the client tries to reuse the connection at the\n    // same time as the server initiate graceful closing. Retrying may help.\n    if (/RST_STREAM with code 2/i.test(status.details)) {\n      // Some TLS errors surfaces with message:\n      // \"Received RST_STREAM with code 2 triggered by internal client error: […] SSL alert number XX\"\n      // At this time, no TLS error is worth retrying, so dismiss those.\n      if (/SSL alert number/i.test(status.details)) return false;\n\n      return true;\n    }\n\n    return false;\n  }\n\n  return retryableCodes.has(status.code);\n}\n\n/**\n * Calculates random amount of jitter between 0 and `max`\n */\nfunction jitter(max: number) {\n  return 1 - max + Math.random() * max * 2;\n}\n\n/**\n * Default implementation - backs off more on RESOURCE_EXHAUSTED errors\n */\nfunction defaultInitialIntervalMs({ code }: StatusObject) {\n  // Backoff more on RESOURCE_EXHAUSTED\n  if (code === grpc.status.RESOURCE_EXHAUSTED) {\n    return 1000;\n  }\n  return 100;\n}\n\n/**\n * Returns a GRPC interceptor that will perform automatic retries for some types of failed calls\n *\n * @param retryOptions Options for the retry interceptor\n */\nexport function makeGrpcRetryInterceptor(retryOptions: GrpcRetryOptions): Interceptor {\n  return (options, nextCall) => {\n    let savedSendMessage: any;\n    let savedReceiveMessage: any;\n    let savedMessageNext: (message: any) => void;\n\n    const requester = new RequesterBuilder()\n      .withStart(function (metadata, _listener, next) {\n        // First attempt\n        let attempt = 1;\n\n        const listener = new ListenerBuilder()\n          .withOnReceiveMessage((message, next) => {\n            savedReceiveMessage = message;\n            savedMessageNext = next;\n          })\n          .withOnReceiveStatus((status, next) => {\n            const retry = () => {\n              attempt++;\n              const call = nextCall(options);\n              call.start(metadata, {\n                onReceiveMessage(message) {\n                  savedReceiveMessage = message;\n                },\n                onReceiveStatus,\n              });\n              call.sendMessage(savedSendMessage);\n              call.halfClose();\n            };\n\n            const onReceiveStatus = (status: StatusObject) => {\n              if (retryOptions.retryableDecider(attempt, status)) {\n                setTimeout(retry, retryOptions.delayFunction(attempt, status));\n              } else {\n                savedMessageNext(savedReceiveMessage);\n                // TODO: For reasons that are completely unclear to me, if you pass a handcrafted\n                // status object here, node will magically just exit at the end of this line.\n                // No warning, no nothing. Here be dragons.\n                next(status);\n              }\n            };\n\n            onReceiveStatus(status);\n          })\n          .build();\n        next(metadata, listener);\n      })\n      .withSendMessage((message, next) => {\n        savedSendMessage = message;\n        next(message);\n      })\n      .build();\n    return new InterceptingCall(nextCall(options), requester);\n  };\n}\n","{\n  \"name\": \"@temporalio/client\",\n  \"version\": \"1.18.1\",\n  \"description\": \"Temporal.io SDK Client sub-package\",\n  \"main\": \"lib/index.js\",\n  \"types\": \"./lib/index.d.ts\",\n  \"keywords\": [\n    \"temporal\",\n    \"workflow\",\n    \"client\"\n  ],\n  \"author\": \"Temporal Technologies Inc. <sdk@temporal.io>\",\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"@grpc/grpc-js\": \"^1.12.4\",\n    \"abort-controller\": \"^3.0.0\",\n    \"long\": \"^5.2.3\",\n    \"nexus-rpc\": \"^0.0.2\",\n    \"uuid\": \"^11.1.0\",\n    \"@temporalio/proto\": \"1.18.1\",\n    \"@temporalio/common\": \"1.18.1\"\n  },\n  \"devDependencies\": {\n    \"protobufjs\": \"^7.5.8\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/temporalio/sdk-typescript/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/temporalio/sdk-typescript.git\",\n    \"directory\": \"packages/client\"\n  },\n  \"homepage\": \"https://github.com/temporalio/sdk-typescript/tree/main/packages/client\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"files\": [\n    \"src\",\n    \"lib\"\n  ],\n  \"engines\": {\n    \"node\": \">= 20.0.0\"\n  },\n  \"scripts\": {\n    \"build\": \"tsc --build\"\n  }\n}","// ../package.json is outside of the TS project rootDir which causes TS to complain about this import.\n// We do not want to change the rootDir because it messes up the output structure.\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport pkg from '../package.json';\n\nexport default pkg as { name: string; version: string };\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n * @deprecated Legacy optional require helper. Will be removed in a future release.\r\n */\r\nfunction inquire(moduleName) {\r\n  try {\r\n    if (typeof require !== \"function\") {\r\n      return null;\r\n    }\r\n    var mod = require(moduleName);\r\n    if (mod && (mod.length || Object.keys(mod).length)) return mod;\r\n    return null;\r\n  } catch (err) {\r\n    // ignore\r\n    return null;\r\n  }\r\n}\r\n\r\n/*\r\n// maybe worth a shot to prevent renaming issues:\r\n// see: https://github.com/webpack/webpack/blob/master/lib/dependencies/CommonJsRequireDependencyParserPlugin.js\r\n// triggers on:\r\n// - expression require.cache\r\n// - expression require (???)\r\n// - call require\r\n// - call require:commonjs:item\r\n// - call require:commonjs:context\r\n\r\nObject.defineProperty(Function.prototype, \"__self\", { get: function() { return this; } });\r\nvar r = require.__self;\r\ndelete Function.prototype.__self;\r\n*/\r\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n    // note that the casts below are theoretically unnecessary as of today, but older statically\n    // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n    /**\n     * Low bits.\n     * @type {number}\n     */\n    this.lo = lo >>> 0;\n\n    /**\n     * High bits.\n     * @type {number}\n     */\n    this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n    if (value === 0)\n        return zero;\n    var sign = value < 0;\n    if (sign)\n        value = -value;\n    var lo = value >>> 0,\n        hi = (value - lo) / 4294967296 >>> 0;\n    if (sign) {\n        hi = ~hi >>> 0;\n        lo = ~lo >>> 0;\n        if (++lo > 4294967295) {\n            lo = 0;\n            if (++hi > 4294967295)\n                hi = 0;\n        }\n    }\n    return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n    if (typeof value === \"number\")\n        return LongBits.fromNumber(value);\n    if (util.isString(value)) {\n        /* istanbul ignore else */\n        if (util.Long)\n            value = util.Long.fromString(value);\n        else\n            return LongBits.fromNumber(parseInt(value, 10));\n    }\n    return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n    if (!unsigned && this.hi >>> 31) {\n        var lo = ~this.lo + 1 >>> 0,\n            hi = ~this.hi     >>> 0;\n        if (!lo)\n            hi = hi + 1 >>> 0;\n        return -(lo + hi * 4294967296);\n    }\n    return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n    return util.Long\n        ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n        /* istanbul ignore next */\n        : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n    if (hash === zeroHash)\n        return zero;\n    return new LongBits(\n        ( charCodeAt.call(hash, 0)\n        | charCodeAt.call(hash, 1) << 8\n        | charCodeAt.call(hash, 2) << 16\n        | charCodeAt.call(hash, 3) << 24) >>> 0\n    ,\n        ( charCodeAt.call(hash, 4)\n        | charCodeAt.call(hash, 5) << 8\n        | charCodeAt.call(hash, 6) << 16\n        | charCodeAt.call(hash, 7) << 24) >>> 0\n    );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n    return String.fromCharCode(\n        this.lo        & 255,\n        this.lo >>> 8  & 255,\n        this.lo >>> 16 & 255,\n        this.lo >>> 24      ,\n        this.hi        & 255,\n        this.hi >>> 8  & 255,\n        this.hi >>> 16 & 255,\n        this.hi >>> 24\n    );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n    var mask =   this.hi >> 31;\n    this.hi  = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n    this.lo  = ( this.lo << 1                   ^ mask) >>> 0;\n    return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n    var mask = -(this.lo & 1);\n    this.lo  = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n    this.hi  = ( this.hi >>> 1                  ^ mask) >>> 0;\n    return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n    var part0 =  this.lo,\n        part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n        part2 =  this.hi >>> 24;\n    return part2 === 0\n         ? part1 === 0\n           ? part0 < 16384\n             ? part0 < 128 ? 1 : 2\n             : part0 < 2097152 ? 3 : 4\n           : part1 < 16384\n             ? part1 < 128 ? 5 : 6\n             : part1 < 2097152 ? 7 : 8\n         : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n                   && global\n                   && global.process\n                   && global.process.versions\n                   && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n           || typeof window !== \"undefined\" && window\n           || typeof self   !== \"undefined\" && self\n           || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n    return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n    return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n    return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n    var value = obj[prop];\n    if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n        return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n    return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor<Buffer>}\n */\nutil.Buffer = (function() {\n    try {\n        var Buffer = util.inquire(\"buffer\").Buffer;\n        // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n        return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n    } catch (e) {\n        /* istanbul ignore next */\n        return null;\n    }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n    /* istanbul ignore next */\n    return typeof sizeOrArray === \"number\"\n        ? util.Buffer\n            ? util._Buffer_allocUnsafe(sizeOrArray)\n            : new util.Array(sizeOrArray)\n        : util.Buffer\n            ? util._Buffer_from(sizeOrArray)\n            : typeof Uint8Array === \"undefined\"\n                ? sizeOrArray\n                : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor<Uint8Array>}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor<Long>}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n         || /* istanbul ignore next */ util.global.Long\n         || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n    return value\n        ? util.LongBits.from(value).toHash()\n        : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n    var bits = util.LongBits.fromHash(hash);\n    if (util.Long)\n        return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n    return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {Object.<string,*>} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n    for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n        if (dst[keys[i]] === undefined || !ifNotSet)\n            if (keys[i] !== \"__proto__\")\n                dst[keys[i]] = src[keys[i]];\n    return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Recursion limit.\n * @memberof util\n * @type {number}\n */\nutil.recursionLimit = 100;\n\n/**\n * Makes a property safe for assignment as an own property.\n * @memberof util\n * @param {Object.<string,*>} obj Object\n * @param {string} key Property key\n * @returns {undefined}\n */\nutil.makeProp = function makeProp(obj, key) {\n    Object.defineProperty(obj, key, {\n        enumerable: true,\n        configurable: true,\n        writable: true\n    });\n};\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n    return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor<Error>} Custom error constructor\n */\nfunction newError(name) {\n\n    function CustomError(message, properties) {\n\n        if (!(this instanceof CustomError))\n            return new CustomError(message, properties);\n\n        // Error.call(this, message);\n        // ^ just returns a new error instance because the ctor can be called as a function\n\n        Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n        /* istanbul ignore next */\n        if (Error.captureStackTrace) // node\n            Error.captureStackTrace(this, CustomError);\n        else\n            Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n        if (properties)\n            merge(this, properties);\n    }\n\n    CustomError.prototype = Object.create(Error.prototype, {\n        constructor: {\n            value: CustomError,\n            writable: true,\n            enumerable: false,\n            configurable: true,\n        },\n        name: {\n            get: function get() { return name; },\n            set: undefined,\n            enumerable: false,\n            // configurable: false would accurately preserve the behavior of\n            // the original, but I'm guessing that was not intentional.\n            // For an actual error subclass, this property would\n            // be configurable.\n            configurable: true,\n        },\n        toString: {\n            value: function value() { return this.name + \": \" + this.message; },\n            writable: true,\n            enumerable: false,\n            configurable: true,\n        },\n    });\n\n    return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [properties] Additional properties\n * @example\n * try {\n *     MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n *     if (e instanceof ProtocolError && e.instance)\n *         console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message<T>}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n    var fieldMap = {};\n    for (var i = 0; i < fieldNames.length; ++i)\n        fieldMap[fieldNames[i]] = 1;\n\n    /**\n     * @returns {string|undefined} Set field name, if any\n     * @this Object\n     * @ignore\n     */\n    return function() { // eslint-disable-line consistent-return\n        for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n            if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n                return keys[i];\n    };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n    /**\n     * @param {string} name Field name\n     * @returns {undefined}\n     * @this Object\n     * @ignore\n     */\n    return function(name) {\n        for (var i = 0; i < fieldNames.length; ++i)\n            if (fieldNames[i] !== name)\n                delete this[fieldNames[i]];\n    };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n    longs: String,\n    enums: String,\n    bytes: String,\n    json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n    var Buffer = util.Buffer;\n    /* istanbul ignore if */\n    if (!Buffer) {\n        util._Buffer_from = util._Buffer_allocUnsafe = null;\n        return;\n    }\n    // because node 4.x buffers are incompatible & immutable\n    // see: https://github.com/dcodeIO/protobuf.js/pull/665\n    util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n        /* istanbul ignore next */\n        function Buffer_from(value, encoding) {\n            return new Buffer(value, encoding);\n        };\n    util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n        /* istanbul ignore next */\n        function Buffer_allocUnsafe(size) {\n            return new Buffer(size);\n        };\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util      = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits  = util.LongBits,\n    base64    = util.base64,\n    utf8      = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n    /**\n     * Function to call.\n     * @type {function(Uint8Array, number, *)}\n     */\n    this.fn = fn;\n\n    /**\n     * Value byte length.\n     * @type {number}\n     */\n    this.len = len;\n\n    /**\n     * Next operation.\n     * @type {Writer.Op|undefined}\n     */\n    this.next = undefined;\n\n    /**\n     * Value to write.\n     * @type {*}\n     */\n    this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n    /**\n     * Current head.\n     * @type {Writer.Op}\n     */\n    this.head = writer.head;\n\n    /**\n     * Current tail.\n     * @type {Writer.Op}\n     */\n    this.tail = writer.tail;\n\n    /**\n     * Current buffer length.\n     * @type {number}\n     */\n    this.len = writer.len;\n\n    /**\n     * Next state.\n     * @type {State|null}\n     */\n    this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n    /**\n     * Current length.\n     * @type {number}\n     */\n    this.len = 0;\n\n    /**\n     * Operations head.\n     * @type {Object}\n     */\n    this.head = new Op(noop, 0, 0);\n\n    /**\n     * Operations tail\n     * @type {Object}\n     */\n    this.tail = this.head;\n\n    /**\n     * Linked forked states.\n     * @type {Object|null}\n     */\n    this.states = null;\n\n    // When a value is written, the writer calculates its byte length and puts it into a linked\n    // list of operations to perform when finish() is called. This both allows us to allocate\n    // buffers of the exact required size and reduces the amount of work we have to do compared\n    // to first calculating over objects and then encoding over objects. In our case, the encoding\n    // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n    return util.Buffer\n        ? function create_buffer_setup() {\n            return (Writer.create = function create_buffer() {\n                return new BufferWriter();\n            })();\n        }\n        /* istanbul ignore next */\n        : function create_array() {\n            return new Writer();\n        };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n    return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n    Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n    this.tail = this.tail.next = new Op(fn, len, val);\n    this.len += len;\n    return this;\n};\n\nfunction writeByte(val, buf, pos) {\n    buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n    while (val > 127) {\n        buf[pos++] = val & 127 | 128;\n        val >>>= 7;\n    }\n    buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n    this.len = len;\n    this.next = undefined;\n    this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n    // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n    // uint32 is by far the most frequently used operation and benefits significantly from this.\n    this.len += (this.tail = this.tail.next = new VarintOp(\n        (value = value >>> 0)\n                < 128       ? 1\n        : value < 16384     ? 2\n        : value < 2097152   ? 3\n        : value < 268435456 ? 4\n        :                     5,\n    value)).len;\n    return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n    return value < 0\n        ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n        : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n    return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n    while (val.hi) {\n        buf[pos++] = val.lo & 127 | 128;\n        val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n        val.hi >>>= 7;\n    }\n    while (val.lo > 127) {\n        buf[pos++] = val.lo & 127 | 128;\n        val.lo = val.lo >>> 7;\n    }\n    buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n    var bits = LongBits.from(value);\n    return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n    var bits = LongBits.from(value).zzEncode();\n    return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n    return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n    buf[pos    ] =  val         & 255;\n    buf[pos + 1] =  val >>> 8   & 255;\n    buf[pos + 2] =  val >>> 16  & 255;\n    buf[pos + 3] =  val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n    return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n    var bits = LongBits.from(value);\n    return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n    return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n    return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n    ? function writeBytes_set(val, buf, pos) {\n        buf.set(val, pos); // also works for plain array values\n    }\n    /* istanbul ignore next */\n    : function writeBytes_for(val, buf, pos) {\n        for (var i = 0; i < val.length; ++i)\n            buf[pos + i] = val[i];\n    };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n    var len = value.length >>> 0;\n    if (!len)\n        return this._push(writeByte, 1, 0);\n    if (util.isString(value)) {\n        var buf = Writer.alloc(len = base64.length(value));\n        base64.decode(value, buf, 0);\n        value = buf;\n    }\n    return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n    var len = utf8.length(value);\n    return len\n        ? this.uint32(len)._push(utf8.write, len, value)\n        : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n    this.states = new State(this);\n    this.head = this.tail = new Op(noop, 0, 0);\n    this.len = 0;\n    return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n    if (this.states) {\n        this.head   = this.states.head;\n        this.tail   = this.states.tail;\n        this.len    = this.states.len;\n        this.states = this.states.next;\n    } else {\n        this.head = this.tail = new Op(noop, 0, 0);\n        this.len  = 0;\n    }\n    return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n    var head = this.head,\n        tail = this.tail,\n        len  = this.len;\n    this.reset().uint32(len);\n    if (len) {\n        this.tail.next = head.next; // skip noop\n        this.tail = tail;\n        this.len += len;\n    }\n    return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n    var head = this.head.next, // skip noop\n        buf  = this.constructor.alloc(this.len),\n        pos  = 0;\n    while (head) {\n        head.fn(head.val, buf, pos);\n        pos += head.len;\n        head = head.next;\n    }\n    // this.head = this.tail = null;\n    return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n    BufferWriter = BufferWriter_;\n    Writer.create = create();\n    BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n    Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n    /**\n     * Allocates a buffer of the specified size.\n     * @function\n     * @param {number} size Buffer size\n     * @returns {Buffer} Buffer\n     */\n    BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n    BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n        ? function writeBytesBuffer_set(val, buf, pos) {\n          buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n          // also works for plain array values\n        }\n        /* istanbul ignore next */\n        : function writeBytesBuffer_copy(val, buf, pos) {\n          if (val.copy) // Buffer values\n            val.copy(buf, pos, 0, val.length);\n          else for (var i = 0; i < val.length;) // plain array values\n            buf[pos++] = val[i++];\n        };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n    if (util.isString(value))\n        value = util._Buffer_from(value, \"base64\");\n    var len = value.length >>> 0;\n    this.uint32(len);\n    if (len)\n        this._push(BufferWriter.writeBytesBuffer, len, value);\n    return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n    if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n        util.utf8.write(val, buf, pos);\n    else if (buf.utf8Write)\n        buf.utf8Write(val, pos);\n    else\n        buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n    var len = util.Buffer.byteLength(value);\n    this.uint32(len);\n    if (len)\n        this._push(writeStringBuffer, len, value);\n    return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util      = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits  = util.LongBits,\n    utf8      = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n    return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n    /**\n     * Read buffer.\n     * @type {Uint8Array}\n     */\n    this.buf = buffer;\n\n    /**\n     * Read buffer position.\n     * @type {number}\n     */\n    this.pos = 0;\n\n    /**\n     * Read buffer length.\n     * @type {number}\n     */\n    this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n    ? function create_typed_array(buffer) {\n        if (buffer instanceof Uint8Array || Array.isArray(buffer))\n            return new Reader(buffer);\n        throw Error(\"illegal buffer\");\n    }\n    /* istanbul ignore next */\n    : function create_array(buffer) {\n        if (Array.isArray(buffer))\n            return new Reader(buffer);\n        throw Error(\"illegal buffer\");\n    };\n\nvar create = function create() {\n    return util.Buffer\n        ? function create_buffer_setup(buffer) {\n            return (Reader.create = function create_buffer(buffer) {\n                return util.Buffer.isBuffer(buffer)\n                    ? new BufferReader(buffer)\n                    /* istanbul ignore next */\n                    : create_array(buffer);\n            })(buffer);\n        }\n        /* istanbul ignore next */\n        : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n    var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n    return function read_uint32() {\n        value = (         this.buf[this.pos] & 127       ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n        value = (value | (this.buf[this.pos] & 127) <<  7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n        value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n        value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n        value = (value | (this.buf[this.pos] &  15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n        /* istanbul ignore if */\n        if ((this.pos += 5) > this.len) {\n            this.pos = this.len;\n            throw indexOutOfRange(this, 10);\n        }\n        return value;\n    };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n    return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n    var value = this.uint32();\n    return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n    // tends to deopt with local vars for octet etc.\n    var bits = new LongBits(0, 0);\n    var i = 0;\n    if (this.len - this.pos > 4) { // fast route (lo)\n        for (; i < 4; ++i) {\n            // 1st..4th\n            bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n        // 5th\n        bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n        bits.hi = (bits.hi | (this.buf[this.pos] & 127) >>  4) >>> 0;\n        if (this.buf[this.pos++] < 128)\n            return bits;\n        i = 0;\n    } else {\n        for (; i < 3; ++i) {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n            // 1st..3th\n            bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n        // 4th\n        bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n        return bits;\n    }\n    if (this.len - this.pos > 4) { // fast route (hi)\n        for (; i < 5; ++i) {\n            // 6th..10th\n            bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n    } else {\n        for (; i < 5; ++i) {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n            // 6th..10th\n            bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n    }\n    /* istanbul ignore next */\n    throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n    return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n    return (buf[end - 4]\n          | buf[end - 3] << 8\n          | buf[end - 2] << 16\n          | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n    /* istanbul ignore if */\n    if (this.pos + 8 > this.len)\n        throw indexOutOfRange(this, 8);\n\n    return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    var value = util.float.readFloatLE(this.buf, this.pos);\n    this.pos += 4;\n    return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n    /* istanbul ignore if */\n    if (this.pos + 8 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    var value = util.float.readDoubleLE(this.buf, this.pos);\n    this.pos += 8;\n    return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n    var length = this.uint32(),\n        start  = this.pos,\n        end    = this.pos + length;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw indexOutOfRange(this, length);\n\n    this.pos += length;\n    if (Array.isArray(this.buf)) // plain array\n        return this.buf.slice(start, end);\n\n    if (start === end) { // fix for IE 10/Win8 and others' subarray returning array of size 1\n        var nativeBuffer = util.Buffer;\n        return nativeBuffer\n            ? nativeBuffer.alloc(0)\n            : new this.buf.constructor(0);\n    }\n    return this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n    var bytes = this.bytes();\n    return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n    if (typeof length === \"number\") {\n        /* istanbul ignore if */\n        if (this.pos + length > this.len)\n            throw indexOutOfRange(this, length);\n        this.pos += length;\n    } else {\n        do {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n        } while (this.buf[this.pos++] & 128);\n    }\n    return this;\n};\n\n/**\n * Recursion limit.\n * @type {number}\n */\nReader.recursionLimit = util.recursionLimit;\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @param {number} [depth] Depth of recursion to control nested calls; 0 if omitted\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType, depth) {\n    if (depth === undefined) depth = 0;\n    if (depth > Reader.recursionLimit)\n        throw Error(\"maximum nesting depth exceeded\");\n    switch (wireType) {\n        case 0:\n            this.skip();\n            break;\n        case 1:\n            this.skip(8);\n            break;\n        case 2:\n            this.skip(this.uint32());\n            break;\n        case 3:\n            while ((wireType = this.uint32() & 7) !== 4) {\n                this.skipType(wireType, depth + 1);\n            }\n            break;\n        case 5:\n            this.skip(4);\n            break;\n\n        /* istanbul ignore next */\n        default:\n            throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n    }\n    return this;\n};\n\nReader._configure = function(BufferReader_) {\n    BufferReader = BufferReader_;\n    Reader.create = create();\n    BufferReader._configure();\n\n    var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n    util.merge(Reader.prototype, {\n\n        int64: function read_int64() {\n            return readLongVarint.call(this)[fn](false);\n        },\n\n        uint64: function read_uint64() {\n            return readLongVarint.call(this)[fn](true);\n        },\n\n        sint64: function read_sint64() {\n            return readLongVarint.call(this).zzDecode()[fn](false);\n        },\n\n        fixed64: function read_fixed64() {\n            return readFixed64.call(this)[fn](true);\n        },\n\n        sfixed64: function read_sfixed64() {\n            return readFixed64.call(this)[fn](false);\n        }\n\n    });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n    Reader.call(this, buffer);\n\n    /**\n     * Read buffer.\n     * @name BufferReader#buf\n     * @type {Buffer}\n     */\n}\n\nBufferReader._configure = function () {\n    /* istanbul ignore else */\n    if (util.Buffer)\n        BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n    var len = this.uint32(); // modifies pos\n    return this.buf.utf8Slice\n        ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n        : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise<Message<TRes>>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n    if (typeof rpcImpl !== \"function\")\n        throw TypeError(\"rpcImpl must be a function\");\n\n    util.EventEmitter.call(this);\n\n    /**\n     * RPC implementation. Becomes `null` once the service is ended.\n     * @type {RPCImpl|null}\n     */\n    this.rpcImpl = rpcImpl;\n\n    /**\n     * Whether requests are length-delimited.\n     * @type {boolean}\n     */\n    this.requestDelimited = Boolean(requestDelimited);\n\n    /**\n     * Whether responses are length-delimited.\n     * @type {boolean}\n     */\n    this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod<TReq,TRes>} method Reflected or static method\n * @param {Constructor<TReq>} requestCtor Request constructor\n * @param {Constructor<TRes>} responseCtor Response constructor\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n    if (!request)\n        throw TypeError(\"request must be specified\");\n\n    var self = this;\n    if (!callback)\n        return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n    if (!self.rpcImpl) {\n        setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n        return undefined;\n    }\n\n    try {\n        return self.rpcImpl(\n            method,\n            requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n            function rpcCallback(err, response) {\n\n                if (err) {\n                    self.emit(\"error\", err, method);\n                    return callback(err);\n                }\n\n                if (response === null) {\n                    self.end(/* endedByRPC */ true);\n                    return undefined;\n                }\n\n                if (!(response instanceof responseCtor)) {\n                    try {\n                        response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n                    } catch (err) {\n                        self.emit(\"error\", err, method);\n                        return callback(err);\n                    }\n                }\n\n                self.emit(\"data\", response, method);\n                return callback(null, response);\n            }\n        );\n    } catch (err) {\n        self.emit(\"error\", err, method);\n        setTimeout(function() { callback(err); }, 0);\n        return undefined;\n    }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n    if (this.rpcImpl) {\n        if (!endedByRPC) // signal end to rpcImpl\n            this.rpcImpl(null, null, null);\n        this.rpcImpl = null;\n        this.emit(\"end\").off();\n    }\n    return this;\n};\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod<Message<{}>,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n *     if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n *         throw Error(\"no such method\");\n *     asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n *         callback(err, responseData);\n *     });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available across modules.\n * @name roots\n * @type {Object.<string,Root>}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer       = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader       = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util         = require(\"./util/minimal\");\nprotobuf.rpc          = require(\"./rpc\");\nprotobuf.roots        = require(\"./roots\");\nprotobuf.configure    = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n    protobuf.util._configure();\n    protobuf.Writer._configure(protobuf.BufferWriter);\n    protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","\"use strict\";\n\nvar patterns = exports;\n\npatterns.numberRe    = /^(?![eE])[0-9]*(?:\\.[0-9]*)?(?:[eE][+-]?[0-9]+)?$/;\npatterns.typeRefRe   = /^(?:\\.?[a-zA-Z_][a-zA-Z_0-9]*)(?:\\.[a-zA-Z_][a-zA-Z_0-9]*)*$/;\npatterns.reservedRe  = /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/;\npatterns.unsafePropertyRe = /^(?:__proto__|prototype|constructor)$/;\n","\"use strict\";\nmodule.exports = Namespace;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Namespace.prototype = Object.create(ReflectionObject.prototype)).constructor = Namespace).className = \"Namespace\";\n\nvar Field    = require(\"./field\"),\n    util     = require(\"./util\"),\n    OneOf    = require(\"./oneof\");\n\nvar Type,    // cyclic\n    Service,\n    Enum;\n\n/**\n * Constructs a new namespace instance.\n * @name Namespace\n * @classdesc Reflected namespace.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.<string,*>} [options] Declared options\n */\n\n/**\n * Constructs a namespace from JSON.\n * @memberof Namespace\n * @function\n * @param {string} name Namespace name\n * @param {Object.<string,*>} json JSON object\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Namespace} Created namespace\n * @throws {TypeError} If arguments are invalid\n */\nNamespace.fromJSON = function fromJSON(name, json, depth) {\n    depth = util.checkDepth(depth);\n    return new Namespace(name, json.options).addJSON(json.nested, depth);\n};\n\n/**\n * Converts an array of reflection objects to JSON.\n * @memberof Namespace\n * @param {ReflectionObject[]} array Object array\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {Object.<string,*>|undefined} JSON object or `undefined` when array is empty\n */\nfunction arrayToJSON(array, toJSONOptions) {\n    if (!(array && array.length))\n        return undefined;\n    var obj = {};\n    for (var i = 0; i < array.length; ++i)\n        obj[array[i].name] = array[i].toJSON(toJSONOptions);\n    return obj;\n}\n\nNamespace.arrayToJSON = arrayToJSON;\n\n/**\n * Tests if the specified id is reserved.\n * @param {Array.<number[]|string>|undefined} reserved Array of reserved ranges and names\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedId = function isReservedId(reserved, id) {\n    if (reserved)\n        for (var i = 0; i < reserved.length; ++i)\n            if (typeof reserved[i] !== \"string\" && reserved[i][0] <= id && reserved[i][1] > id)\n                return true;\n    return false;\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {Array.<number[]|string>|undefined} reserved Array of reserved ranges and names\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedName = function isReservedName(reserved, name) {\n    if (reserved)\n        for (var i = 0; i < reserved.length; ++i)\n            if (reserved[i] === name)\n                return true;\n    return false;\n};\n\n/**\n * Not an actual constructor. Use {@link Namespace} instead.\n * @classdesc Base class of all reflection objects containing nested objects. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports NamespaceBase\n * @extends ReflectionObject\n * @abstract\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.<string,*>} [options] Declared options\n * @see {@link Namespace}\n */\nfunction Namespace(name, options) {\n    ReflectionObject.call(this, name, options);\n\n    /**\n     * Nested objects by name.\n     * @type {Object.<string,ReflectionObject>|undefined}\n     */\n    this.nested = undefined; // toJSON\n\n    /**\n     * Cached nested objects as an array.\n     * @type {ReflectionObject[]|null}\n     * @private\n     */\n    this._nestedArray = null;\n\n    /**\n     * Cache lookup calls for any objects contains anywhere under this namespace.\n     * This drastically speeds up resolve for large cross-linked protos where the same\n     * types are looked up repeatedly.\n     * @type {Object.<string,ReflectionObject|null>}\n     * @private\n     */\n    this._lookupCache = Object.create(null);\n\n    /**\n     * Whether or not objects contained in this namespace need feature resolution.\n     * @type {boolean}\n     * @protected\n     */\n    this._needsRecursiveFeatureResolution = true;\n\n    /**\n     * Whether or not objects contained in this namespace need a resolve.\n     * @type {boolean}\n     * @protected\n     */\n    this._needsRecursiveResolve = true;\n}\n\nfunction clearCache(namespace) {\n    namespace._nestedArray = null;\n    namespace._lookupCache = Object.create(null);\n\n    // Also clear parent caches, since they include nested lookups.\n    var parent = namespace;\n    while(parent = parent.parent) {\n        parent._lookupCache = Object.create(null);\n    }\n    return namespace;\n}\n\n/**\n * Nested objects of this namespace as an array for iteration.\n * @name NamespaceBase#nestedArray\n * @type {ReflectionObject[]}\n * @readonly\n */\nObject.defineProperty(Namespace.prototype, \"nestedArray\", {\n    get: function() {\n        return this._nestedArray || (this._nestedArray = util.toArray(this.nested));\n    }\n});\n\n/**\n * Namespace descriptor.\n * @interface INamespace\n * @property {Object.<string,*>} [options] Namespace options\n * @property {Object.<string,AnyNestedObject>} [nested] Nested object descriptors\n */\n\n/**\n * Any extension field descriptor.\n * @typedef AnyExtensionField\n * @type {IExtensionField|IExtensionMapField}\n */\n\n/**\n * Any nested object descriptor.\n * @typedef AnyNestedObject\n * @type {IEnum|IType|IService|AnyExtensionField|INamespace|IOneOf}\n */\n\n/**\n * Converts this namespace to a namespace descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {INamespace} Namespace descriptor\n */\nNamespace.prototype.toJSON = function toJSON(toJSONOptions) {\n    return util.toObject([\n        \"options\" , this.options,\n        \"nested\"  , arrayToJSON(this.nestedArray, toJSONOptions)\n    ]);\n};\n\n/**\n * Adds nested objects to this namespace from nested object descriptors.\n * @param {Object.<string,AnyNestedObject>} nestedJson Any nested object descriptors\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Namespace} `this`\n */\nNamespace.prototype.addJSON = function addJSON(nestedJson, depth) {\n    depth = util.checkDepth(depth);\n    var ns = this;\n    /* istanbul ignore else */\n    if (nestedJson) {\n        for (var names = Object.keys(nestedJson), i = 0, nested; i < names.length; ++i) {\n            nested = nestedJson[names[i]];\n            ns.add( // most to least likely\n                ( nested.fields !== undefined\n                ? Type.fromJSON\n                : nested.values !== undefined\n                ? Enum.fromJSON\n                : nested.methods !== undefined\n                ? Service.fromJSON\n                : nested.id !== undefined\n                ? Field.fromJSON\n                : Namespace.fromJSON )(names[i], nested, depth + 1)\n            );\n        }\n    }\n    return this;\n};\n\n/**\n * Gets the nested object of the specified name.\n * @param {string} name Nested object name\n * @returns {ReflectionObject|null} The reflection object or `null` if it doesn't exist\n */\nNamespace.prototype.get = function get(name) {\n    return this.nested && Object.prototype.hasOwnProperty.call(this.nested, name)\n        ? this.nested[name]\n        : null;\n};\n\n/**\n * Gets the values of the nested {@link Enum|enum} of the specified name.\n * This methods differs from {@link Namespace#get|get} in that it returns an enum's values directly and throws instead of returning `null`.\n * @param {string} name Nested enum name\n * @returns {Object.<string,number>} Enum values\n * @throws {Error} If there is no such enum\n */\nNamespace.prototype.getEnum = function getEnum(name) {\n    if (this.nested && Object.prototype.hasOwnProperty.call(this.nested, name) && this.nested[name] instanceof Enum)\n        return this.nested[name].values;\n    throw Error(\"no such enum: \" + name);\n};\n\n/**\n * Adds a nested object to this namespace.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name\n */\nNamespace.prototype.add = function add(object) {\n\n    if (!(object instanceof Field && object.extend !== undefined || object instanceof Type  || object instanceof OneOf || object instanceof Enum || object instanceof Service || object instanceof Namespace))\n        throw TypeError(\"object must be a valid nested object\");\n\n    if (object.name === \"__proto__\")\n        return this;\n\n    if (!this.nested)\n        this.nested = {};\n    else {\n        var prev = this.get(object.name);\n        if (prev) {\n            if (prev instanceof Namespace && object instanceof Namespace && !(prev instanceof Type || prev instanceof Service)) {\n                // replace plain namespace but keep existing nested elements and options\n                var nested = prev.nestedArray;\n                for (var i = 0; i < nested.length; ++i)\n                    object.add(nested[i]);\n                this.remove(prev);\n                if (!this.nested)\n                    this.nested = {};\n                object.setOptions(prev.options, true);\n\n            } else\n                throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n        }\n    }\n    this.nested[object.name] = object;\n\n    if (!(this instanceof Type || this instanceof Service || this instanceof Enum || this instanceof Field)) {\n        // This is a package or a root namespace.\n        if (!object._edition) {\n            // Make sure that some edition is set if it hasn't already been specified.\n            object._edition = object._defaultEdition;\n        }\n    }\n\n    this._needsRecursiveFeatureResolution = true;\n    this._needsRecursiveResolve = true;\n\n    // Also clear parent caches, since they need to recurse down.\n    var parent = this;\n    while(parent = parent.parent) {\n        parent._needsRecursiveFeatureResolution = true;\n        parent._needsRecursiveResolve = true;\n    }\n\n    object.onAdd(this);\n    return clearCache(this);\n};\n\n/**\n * Removes a nested object from this namespace.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this namespace\n */\nNamespace.prototype.remove = function remove(object) {\n\n    if (!(object instanceof ReflectionObject))\n        throw TypeError(\"object must be a ReflectionObject\");\n    if (object.parent !== this)\n        throw Error(object + \" is not a member of \" + this);\n\n    delete this.nested[object.name];\n    if (!Object.keys(this.nested).length)\n        this.nested = undefined;\n\n    object.onRemove(this);\n    return clearCache(this);\n};\n\n/**\n * Defines additial namespaces within this one if not yet existing.\n * @param {string|string[]} path Path to create\n * @param {*} [json] Nested types to create from JSON\n * @returns {Namespace} Pointer to the last namespace created or `this` if path is empty\n */\nNamespace.prototype.define = function define(path, json) {\n\n    if (util.isString(path))\n        path = path.split(\".\");\n    else if (!Array.isArray(path))\n        throw TypeError(\"illegal path\");\n    if (path && path.length && path[0] === \"\")\n        throw Error(\"path must be relative\");\n\n    var ptr = this;\n    while (path.length > 0) {\n        var part = path.shift();\n        if (ptr.nested && ptr.nested[part]) {\n            ptr = ptr.nested[part];\n            if (!(ptr instanceof Namespace))\n                throw Error(\"path conflicts with non-namespace objects\");\n        } else\n            ptr.add(ptr = new Namespace(part));\n    }\n    if (json)\n        ptr.addJSON(json);\n    return ptr;\n};\n\n/**\n * Resolves this namespace's and all its nested objects' type references. Useful to validate a reflection tree, but comes at a cost.\n * @returns {Namespace} `this`\n */\nNamespace.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    this._resolveFeaturesRecursive(this._edition);\n\n    var nested = this.nestedArray, i = 0;\n    this.resolve();\n    while (i < nested.length)\n        if (nested[i] instanceof Namespace)\n            nested[i++].resolveAll();\n        else\n            nested[i++].resolve();\n    this._needsRecursiveResolve = false;\n    return this;\n};\n\n/**\n * @override\n */\nNamespace.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    if (!this._needsRecursiveFeatureResolution) return this;\n    this._needsRecursiveFeatureResolution = false;\n\n    edition = this._edition || edition;\n\n    ReflectionObject.prototype._resolveFeaturesRecursive.call(this, edition);\n    this.nestedArray.forEach(nested => {\n        nested._resolveFeaturesRecursive(edition);\n    });\n    return this;\n};\n\n/**\n * Recursively looks up the reflection object matching the specified path in the scope of this namespace.\n * @param {string|string[]} path Path to look up\n * @param {*|Array.<*>} filterTypes Filter types, any combination of the constructors of `protobuf.Type`, `protobuf.Enum`, `protobuf.Service` etc.\n * @param {boolean} [parentAlreadyChecked=false] If known, whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n */\nNamespace.prototype.lookup = function lookup(path, filterTypes, parentAlreadyChecked) {\n    /* istanbul ignore next */\n    if (typeof filterTypes === \"boolean\") {\n        parentAlreadyChecked = filterTypes;\n        filterTypes = undefined;\n    } else if (filterTypes && !Array.isArray(filterTypes))\n        filterTypes = [ filterTypes ];\n\n    if (util.isString(path) && path.length) {\n        if (path === \".\")\n            return this.root;\n        path = path.split(\".\");\n    } else if (!path.length)\n        return this;\n\n    var flatPath = path.join(\".\");\n\n    // Start at root if path is absolute\n    if (path[0] === \"\")\n        return this.root.lookup(path.slice(1), filterTypes);\n\n    // Early bailout for objects with matching absolute paths\n    var found = this.root._fullyQualifiedObjects && this.root._fullyQualifiedObjects[\".\" + flatPath];\n    if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) {\n        return found;\n    }\n\n    // Do a regular lookup at this namespace and below\n    found = this._lookupImpl(path, flatPath);\n    if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) {\n        return found;\n    }\n\n    if (parentAlreadyChecked)\n        return null;\n\n    // If there hasn't been a match, walk up the tree and look more broadly\n    var current = this;\n    while (current.parent) {\n        found = current.parent._lookupImpl(path, flatPath);\n        if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) {\n            return found;\n        }\n        current = current.parent;\n    }\n    return null;\n};\n\n/**\n * Internal helper for lookup that handles searching just at this namespace and below along with caching.\n * @param {string[]} path Path to look up\n * @param {string} flatPath Flattened version of the path to use as a cache key\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n * @private\n */\nNamespace.prototype._lookupImpl = function lookup(path, flatPath) {\n    if(Object.prototype.hasOwnProperty.call(this._lookupCache, flatPath)) {\n        return this._lookupCache[flatPath];\n    }\n\n    // Test if the first part matches any nested object, and if so, traverse if path contains more\n    var found = this.get(path[0]);\n    var exact = null;\n    if (found) {\n        if (path.length === 1) {\n            exact = found;\n        } else if (found instanceof Namespace) {\n            path = path.slice(1);\n            exact = found._lookupImpl(path, path.join(\".\"));\n        }\n\n    // Otherwise try each nested namespace\n    } else {\n        for (var i = 0; i < this.nestedArray.length; ++i)\n            if (this._nestedArray[i] instanceof Namespace && (found = this._nestedArray[i]._lookupImpl(path, flatPath))) {\n                exact = found;\n                break;\n            }\n    }\n\n    // Set this even when null, so that when we walk up the tree we can quickly bail on repeated checks back down.\n    this._lookupCache[flatPath] = exact;\n    return exact;\n};\n\n/**\n * Looks up the reflection object at the specified path, relative to this namespace.\n * @name NamespaceBase#lookup\n * @function\n * @param {string|string[]} path Path to look up\n * @param {boolean} [parentAlreadyChecked=false] Whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n * @variation 2\n */\n// lookup(path: string, [parentAlreadyChecked: boolean])\n\n/**\n * Looks up the {@link Type|type} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type\n * @throws {Error} If `path` does not point to a type\n */\nNamespace.prototype.lookupType = function lookupType(path) {\n    var found = this.lookup(path, [ Type ]);\n    if (!found)\n        throw Error(\"no such type: \" + path);\n    return found;\n};\n\n/**\n * Looks up the values of the {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Enum} Looked up enum\n * @throws {Error} If `path` does not point to an enum\n */\nNamespace.prototype.lookupEnum = function lookupEnum(path) {\n    var found = this.lookup(path, [ Enum ]);\n    if (!found)\n        throw Error(\"no such Enum '\" + path + \"' in \" + this);\n    return found;\n};\n\n/**\n * Looks up the {@link Type|type} or {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type or enum\n * @throws {Error} If `path` does not point to a type or enum\n */\nNamespace.prototype.lookupTypeOrEnum = function lookupTypeOrEnum(path) {\n    var found = this.lookup(path, [ Type, Enum ]);\n    if (!found)\n        throw Error(\"no such Type or Enum '\" + path + \"' in \" + this);\n    return found;\n};\n\n/**\n * Looks up the {@link Service|service} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Service} Looked up service\n * @throws {Error} If `path` does not point to a service\n */\nNamespace.prototype.lookupService = function lookupService(path) {\n    var found = this.lookup(path, [ Service ]);\n    if (!found)\n        throw Error(\"no such Service '\" + path + \"' in \" + this);\n    return found;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nNamespace._configure = function(Type_, Service_, Enum_) {\n    Type    = Type_;\n    Service = Service_;\n    Enum    = Enum_;\n};\n","\"use strict\";\nmodule.exports = MapField;\n\n// extends Field\nvar Field = require(\"./field\");\n((MapField.prototype = Object.create(Field.prototype)).constructor = MapField).className = \"MapField\";\n\nvar types   = require(\"./types\"),\n    util    = require(\"./util\");\n\n/**\n * Constructs a new map field instance.\n * @classdesc Reflected map field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} keyType Key type\n * @param {string} type Value type\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction MapField(name, id, keyType, type, options, comment) {\n    Field.call(this, name, id, type, undefined, undefined, options, comment);\n\n    /* istanbul ignore if */\n    if (!util.isString(keyType))\n        throw TypeError(\"keyType must be a string\");\n\n    /**\n     * Key type.\n     * @type {string}\n     */\n    this.keyType = keyType; // toJSON, marker\n\n    /**\n     * Resolved key type if not a basic type.\n     * @type {ReflectionObject|null}\n     */\n    this.resolvedKeyType = null;\n\n    // Overrides Field#map\n    this.map = true;\n}\n\n/**\n * Map field descriptor.\n * @interface IMapField\n * @extends {IField}\n * @property {string} keyType Key type\n */\n\n/**\n * Extension map field descriptor.\n * @interface IExtensionMapField\n * @extends IMapField\n * @property {string} extend Extended type\n */\n\n/**\n * Constructs a map field from a map field descriptor.\n * @param {string} name Field name\n * @param {IMapField} json Map field descriptor\n * @returns {MapField} Created map field\n * @throws {TypeError} If arguments are invalid\n */\nMapField.fromJSON = function fromJSON(name, json) {\n    return new MapField(name, json.id, json.keyType, json.type, json.options, json.comment);\n};\n\n/**\n * Converts this map field to a map field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMapField} Map field descriptor\n */\nMapField.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"keyType\" , this.keyType,\n        \"type\"    , this.type,\n        \"id\"      , this.id,\n        \"extend\"  , this.extend,\n        \"options\" , this.options,\n        \"comment\" , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * @override\n */\nMapField.prototype.resolve = function resolve() {\n    if (this.resolved)\n        return this;\n\n    // Besides a value type, map fields have a key type that may be \"any scalar type except for floating point types and bytes\"\n    if (types.mapKey[this.keyType] === undefined)\n        throw Error(\"invalid key type: \" + this.keyType);\n\n    return Field.prototype.resolve.call(this);\n};\n\n/**\n * Map field decorator (TypeScript).\n * @name MapField.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"} fieldKeyType Field key type\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"|\"bytes\"|Object|Constructor<{}>} fieldValueType Field value type\n * @returns {FieldDecorator} Decorator function\n * @template T extends { [key: string]: number | Long | string | boolean | Uint8Array | Buffer | number[] | Message<{}> }\n */\nMapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) {\n\n    // submessage value: decorate the submessage and use its name as the type\n    if (typeof fieldValueType === \"function\")\n        fieldValueType = util.decorateType(fieldValueType).name;\n\n    // enum reference value: create a reflected copy of the enum and keep reuseing it\n    else if (fieldValueType && typeof fieldValueType === \"object\")\n        fieldValueType = util.decorateEnum(fieldValueType).name;\n\n    return function mapFieldDecorator(prototype, fieldName) {\n        util.decorateType(prototype.constructor)\n            .add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType));\n    };\n};\n","\"use strict\";\nmodule.exports = Method;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Method.prototype = Object.create(ReflectionObject.prototype)).constructor = Method).className = \"Method\";\n\nvar util = require(\"./util\");\n\n/**\n * Constructs a new service method instance.\n * @classdesc Reflected service method.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Method name\n * @param {string|undefined} type Method type, usually `\"rpc\"`\n * @param {string} requestType Request message type\n * @param {string} responseType Response message type\n * @param {boolean|Object.<string,*>} [requestStream] Whether the request is streamed\n * @param {boolean|Object.<string,*>} [responseStream] Whether the response is streamed\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] The comment for this method\n * @param {Object.<string,*>} [parsedOptions] Declared options, properly parsed into an object\n */\nfunction Method(name, type, requestType, responseType, requestStream, responseStream, options, comment, parsedOptions) {\n\n    /* istanbul ignore next */\n    if (util.isObject(requestStream)) {\n        options = requestStream;\n        requestStream = responseStream = undefined;\n    } else if (util.isObject(responseStream)) {\n        options = responseStream;\n        responseStream = undefined;\n    }\n\n    /* istanbul ignore if */\n    if (!(type === undefined || util.isString(type)))\n        throw TypeError(\"type must be a string\");\n\n    /* istanbul ignore if */\n    if (!util.isString(requestType))\n        throw TypeError(\"requestType must be a string\");\n\n    /* istanbul ignore if */\n    if (!util.isString(responseType))\n        throw TypeError(\"responseType must be a string\");\n\n    ReflectionObject.call(this, name, options);\n\n    /**\n     * Method type.\n     * @type {string}\n     */\n    this.type = type || \"rpc\"; // toJSON\n\n    /**\n     * Request type.\n     * @type {string}\n     */\n    this.requestType = requestType; // toJSON, marker\n\n    /**\n     * Whether requests are streamed or not.\n     * @type {boolean|undefined}\n     */\n    this.requestStream = requestStream ? true : undefined; // toJSON\n\n    /**\n     * Response type.\n     * @type {string}\n     */\n    this.responseType = responseType; // toJSON\n\n    /**\n     * Whether responses are streamed or not.\n     * @type {boolean|undefined}\n     */\n    this.responseStream = responseStream ? true : undefined; // toJSON\n\n    /**\n     * Resolved request type.\n     * @type {Type|null}\n     */\n    this.resolvedRequestType = null;\n\n    /**\n     * Resolved response type.\n     * @type {Type|null}\n     */\n    this.resolvedResponseType = null;\n\n    /**\n     * Comment for this method\n     * @type {string|null}\n     */\n    this.comment = comment;\n\n    /**\n     * Options properly parsed into an object\n     */\n    this.parsedOptions = parsedOptions;\n}\n\n/**\n * Method descriptor.\n * @interface IMethod\n * @property {string} [type=\"rpc\"] Method type\n * @property {string} requestType Request type\n * @property {string} responseType Response type\n * @property {boolean} [requestStream=false] Whether requests are streamed\n * @property {boolean} [responseStream=false] Whether responses are streamed\n * @property {Object.<string,*>} [options] Method options\n * @property {string} comment Method comments\n * @property {Object.<string,*>} [parsedOptions] Method options properly parsed into an object\n */\n\n/**\n * Constructs a method from a method descriptor.\n * @param {string} name Method name\n * @param {IMethod} json Method descriptor\n * @returns {Method} Created method\n * @throws {TypeError} If arguments are invalid\n */\nMethod.fromJSON = function fromJSON(name, json) {\n    return new Method(name, json.type, json.requestType, json.responseType, json.requestStream, json.responseStream, json.options, json.comment, json.parsedOptions);\n};\n\n/**\n * Converts this method to a method descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMethod} Method descriptor\n */\nMethod.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"type\"           , this.type !== \"rpc\" && /* istanbul ignore next */ this.type || undefined,\n        \"requestType\"    , this.requestType,\n        \"requestStream\"  , this.requestStream,\n        \"responseType\"   , this.responseType,\n        \"responseStream\" , this.responseStream,\n        \"options\"        , this.options,\n        \"comment\"        , keepComments ? this.comment : undefined,\n        \"parsedOptions\"  , this.parsedOptions,\n    ]);\n};\n\n/**\n * @override\n */\nMethod.prototype.resolve = function resolve() {\n\n    /* istanbul ignore if */\n    if (this.resolved)\n        return this;\n\n    this.resolvedRequestType = this.parent.lookupType(this.requestType);\n    this.resolvedResponseType = this.parent.lookupType(this.responseType);\n\n    return ReflectionObject.prototype.resolve.call(this);\n};\n","\"use strict\";\nmodule.exports = Service;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Service.prototype = Object.create(Namespace.prototype)).constructor = Service).className = \"Service\";\n\nvar Method = require(\"./method\"),\n    util   = require(\"./util\"),\n    rpc    = require(\"./rpc\");\n\nvar reservedRe = util.patterns.reservedRe;\n\n/**\n * Constructs a new service instance.\n * @classdesc Reflected service.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Service name\n * @param {Object.<string,*>} [options] Service options\n * @throws {TypeError} If arguments are invalid\n */\nfunction Service(name, options) {\n    Namespace.call(this, name, options);\n\n    /**\n     * Service methods.\n     * @type {Object.<string,Method>}\n     */\n    this.methods = {}; // toJSON, marker\n\n    /**\n     * Cached methods as an array.\n     * @type {Method[]|null}\n     * @private\n     */\n    this._methodsArray = null;\n}\n\n/**\n * Service descriptor.\n * @interface IService\n * @extends INamespace\n * @property {Object.<string,IMethod>} methods Method descriptors\n */\n\n/**\n * Constructs a service from a service descriptor.\n * @param {string} name Service name\n * @param {IService} json Service descriptor\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Service} Created service\n * @throws {TypeError} If arguments are invalid\n */\nService.fromJSON = function fromJSON(name, json, depth) {\n    depth = util.checkDepth(depth);\n    var service = new Service(name, json.options);\n    /* istanbul ignore else */\n    if (json.methods)\n        for (var names = Object.keys(json.methods), i = 0; i < names.length; ++i)\n            service.add(Method.fromJSON(names[i], json.methods[names[i]]));\n    if (json.nested)\n        service.addJSON(json.nested, depth);\n    if (json.edition)\n        service._edition = json.edition;\n    service.comment = json.comment;\n    service._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return service;\n};\n\n/**\n * Converts this service to a service descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IService} Service descriptor\n */\nService.prototype.toJSON = function toJSON(toJSONOptions) {\n    var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\" , this._editionToJSON(),\n        \"options\" , inherited && inherited.options || undefined,\n        \"methods\" , Namespace.arrayToJSON(this.methodsArray, toJSONOptions) || /* istanbul ignore next */ {},\n        \"nested\"  , inherited && inherited.nested || undefined,\n        \"comment\" , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * Methods of this service as an array for iteration.\n * @name Service#methodsArray\n * @type {Method[]}\n * @readonly\n */\nObject.defineProperty(Service.prototype, \"methodsArray\", {\n    get: function() {\n        return this._methodsArray || (this._methodsArray = util.toArray(this.methods));\n    }\n});\n\nfunction clearCache(service) {\n    service._methodsArray = null;\n    return service;\n}\n\n/**\n * @override\n */\nService.prototype.get = function get(name) {\n    return Object.prototype.hasOwnProperty.call(this.methods, name)\n        ? this.methods[name]\n        : Namespace.prototype.get.call(this, name);\n};\n\n/**\n * @override\n */\nService.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    Namespace.prototype.resolve.call(this);\n    var methods = this.methodsArray;\n    for (var i = 0; i < methods.length; ++i)\n        methods[i].resolve();\n    return this;\n};\n\n/**\n * @override\n */\nService.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    if (!this._needsRecursiveFeatureResolution) return this;\n\n    edition = this._edition || edition;\n\n    Namespace.prototype._resolveFeaturesRecursive.call(this, edition);\n    this.methodsArray.forEach(method => {\n        method._resolveFeaturesRecursive(edition);\n    });\n    return this;\n};\n\n/**\n * @override\n */\nService.prototype.add = function add(object) {\n    /* istanbul ignore if */\n    if (this.get(object.name))\n        throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n    if (object instanceof Method) {\n        if (object.name === \"__proto__\")\n            return this;\n        this.methods[object.name] = object;\n        object.parent = this;\n        return clearCache(this);\n    }\n    return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * @override\n */\nService.prototype.remove = function remove(object) {\n    if (object instanceof Method) {\n\n        /* istanbul ignore if */\n        if (this.methods[object.name] !== object)\n            throw Error(object + \" is not a member of \" + this);\n\n        delete this.methods[object.name];\n        object.parent = null;\n        return clearCache(this);\n    }\n    return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Creates a runtime service using the specified rpc implementation.\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n * @returns {rpc.Service} RPC service. Useful where requests and/or responses are streamed.\n */\nService.prototype.create = function create(rpcImpl, requestDelimited, responseDelimited) {\n    var rpcService = new rpc.Service(rpcImpl, requestDelimited, responseDelimited);\n    for (var i = 0, method; i < /* initializes */ this.methodsArray.length; ++i) {\n        var methodName = util.lcFirst((method = this._methodsArray[i]).resolve().name).replace(/[^$\\w_]/g, \"\");\n        rpcService[methodName] = util.codegen([\"r\",\"c\"], reservedRe.test(methodName) ? methodName + \"_\" : methodName)(\"return this.rpcCall(m,q,s,r,c)\")({\n            m: method,\n            q: method.resolvedRequestType.ctor,\n            s: method.resolvedResponseType.ctor\n        });\n    }\n    return rpcService;\n};\n","\"use strict\";\nmodule.exports = Message;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new message instance.\n * @classdesc Abstract runtime message.\n * @constructor\n * @param {Properties<T>} [properties] Properties to set\n * @template T extends object = object\n */\nfunction Message(properties) {\n    // not used internally\n    if (properties)\n        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) {\n            var key = keys[i];\n            if (key === \"__proto__\")\n                continue;\n            this[key] = properties[key];\n        }\n}\n\n/**\n * Reference to the reflected type.\n * @name Message.$type\n * @type {Type}\n * @readonly\n */\n\n/**\n * Reference to the reflected type.\n * @name Message#$type\n * @type {Type}\n * @readonly\n */\n\n/*eslint-disable valid-jsdoc*/\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.<string,*>} [properties] Properties to set\n * @returns {Message<T>} Message instance\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.create = function create(properties) {\n    return this.$type.create(properties);\n};\n\n/**\n * Encodes a message of this type.\n * @param {T|Object.<string,*>} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.encode = function encode(message, writer) {\n    return this.$type.encode(message, writer);\n};\n\n/**\n * Encodes a message of this type preceeded by its length as a varint.\n * @param {T|Object.<string,*>} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.encodeDelimited = function encodeDelimited(message, writer) {\n    return this.$type.encodeDelimited(message, writer);\n};\n\n/**\n * Decodes a message of this type.\n * @name Message.decode\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.decode = function decode(reader) {\n    return this.$type.decode(reader);\n};\n\n/**\n * Decodes a message of this type preceeded by its length as a varint.\n * @name Message.decodeDelimited\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.decodeDelimited = function decodeDelimited(reader) {\n    return this.$type.decodeDelimited(reader);\n};\n\n/**\n * Verifies a message of this type.\n * @name Message.verify\n * @function\n * @param {Object.<string,*>} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\nMessage.verify = function verify(message) {\n    return this.$type.verify(message);\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.<string,*>} object Plain object\n * @returns {T} Message instance\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.fromObject = function fromObject(object) {\n    return this.$type.fromObject(object);\n};\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {T} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.<string,*>} Plain object\n * @template T extends Message<T>\n * @this Constructor<T>\n */\nMessage.toObject = function toObject(message, options) {\n    return this.$type.toObject(message, options);\n};\n\n/**\n * Converts this message to JSON.\n * @returns {Object.<string,*>} JSON object\n */\nMessage.prototype.toJSON = function toJSON() {\n    return this.$type.toObject(this, util.toJSONOptions);\n};\n\n/*eslint-enable valid-jsdoc*/\n","\"use strict\";\nmodule.exports = decoder;\n\nvar Enum    = require(\"./enum\"),\n    types   = require(\"./types\"),\n    util    = require(\"./util\");\n\nfunction missing(field) {\n    return \"missing required '\" + field.name + \"'\";\n}\n\n/**\n * Generates a decoder specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction decoder(mtype) {\n    /* eslint-disable no-unexpected-multiline */\n    var gen = util.codegen([\"r\", \"l\", \"e\", \"n\"], mtype.name + \"$decode\")\n    (\"if(!(r instanceof Reader))\")\n        (\"r=Reader.create(r)\")\n    (\"if(n===undefined)n=0\")\n    (\"if(n>Reader.recursionLimit)\")\n        (\"throw Error(\\\"maximum nesting depth exceeded\\\")\")\n    (\"var c=l===undefined?r.len:r.pos+l,m=new this.ctor\" + (mtype.fieldsArray.filter(function(field) { return field.map; }).length ? \",k,value\" : \"\"))\n    (\"while(r.pos<c){\")\n        (\"var t=r.uint32()\")\n        (\"if(t===e)\")\n            (\"break\")\n        (\"switch(t>>>3){\");\n\n    var i = 0;\n    for (; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n        var field = mtype._fieldsArray[i].resolve(),\n            type  = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n            ref   = \"m\" + util.safeProp(field.name); gen\n            (\"case %i: {\", field.id);\n\n        // Map fields\n        if (field.map) { gen\n                (\"if(%s===util.emptyObject)\", ref)\n                    (\"%s={}\", ref)\n                (\"var c2 = r.uint32()+r.pos\");\n\n            if (types.defaults[field.keyType] !== undefined) gen\n                (\"k=%j\", types.defaults[field.keyType]);\n            else gen\n                (\"k=null\");\n\n            if (types.defaults[type] !== undefined) gen\n                (\"value=%j\", types.defaults[type]);\n            else gen\n                (\"value=null\");\n\n            gen\n                (\"while(r.pos<c2){\")\n                    (\"var tag2=r.uint32()\")\n                    (\"switch(tag2>>>3){\")\n                        (\"case 1: k=r.%s(); break\", field.keyType)\n                        (\"case 2:\");\n\n            if (types.basic[type] === undefined) gen\n                            (\"value=types[%i].decode(r,r.uint32(),undefined,n+1)\", i); // can't be groups\n            else gen\n                            (\"value=r.%s()\", type);\n\n            gen\n                            (\"break\")\n                        (\"default:\")\n                            (\"r.skipType(tag2&7,n)\")\n                            (\"break\")\n                    (\"}\")\n                (\"}\");\n\n            if (types.long[field.keyType] !== undefined) gen\n                (\"%s[typeof k===\\\"object\\\"?util.longToHash(k):k]=value\", ref);\n            else {\n                if (field.keyType === \"string\") gen\n                (\"if(k===\\\"__proto__\\\")\")\n                    (\"util.makeProp(%s,k)\", ref);\n                gen\n                (\"%s[k]=value\", ref);\n            }\n\n        // Repeated fields\n        } else if (field.repeated) { gen\n\n                (\"if(!(%s&&%s.length))\", ref, ref)\n                    (\"%s=[]\", ref);\n\n            // Packable (always check for forward and backward compatiblity)\n            if (types.packed[type] !== undefined) gen\n                (\"if((t&7)===2){\")\n                    (\"var c2=r.uint32()+r.pos\")\n                    (\"while(r.pos<c2)\")\n                        (\"%s.push(r.%s())\", ref, type)\n                (\"}else\");\n\n            // Non-packed\n            if (types.basic[type] === undefined) gen(field.delimited\n                    ? \"%s.push(types[%i].decode(r,undefined,((t&~7)|4),n+1))\"\n                    : \"%s.push(types[%i].decode(r,r.uint32(),undefined,n+1))\", ref, i);\n            else gen\n                    (\"%s.push(r.%s())\", ref, type);\n\n        // Non-repeated\n        } else if (types.basic[type] === undefined) gen(field.delimited\n                ? \"%s=types[%i].decode(r,undefined,((t&~7)|4),n+1)\"\n                : \"%s=types[%i].decode(r,r.uint32(),undefined,n+1)\", ref, i);\n        else gen\n                (\"%s=r.%s()\", ref, type);\n        gen\n                (\"break\")\n            (\"}\");\n        // Unknown fields\n    } gen\n            (\"default:\")\n                (\"r.skipType(t&7,n)\")\n                (\"break\")\n\n        (\"}\")\n    (\"}\");\n\n    // Field presence\n    for (i = 0; i < mtype._fieldsArray.length; ++i) {\n        var rfield = mtype._fieldsArray[i];\n        if (rfield.required) gen\n    (\"if(!m.hasOwnProperty(%j))\", rfield.name)\n        (\"throw util.ProtocolError(%j,{instance:m})\", missing(rfield));\n    }\n\n    return gen\n    (\"return m\");\n    /* eslint-enable no-unexpected-multiline */\n}\n","\"use strict\";\nmodule.exports = verifier;\n\nvar Enum      = require(\"./enum\"),\n    util      = require(\"./util\");\n\nfunction invalid(field, expected) {\n    return field.name + \": \" + expected + (field.repeated && expected !== \"array\" ? \"[]\" : field.map && expected !== \"object\" ? \"{k:\"+field.keyType+\"}\" : \"\") + \" expected\";\n}\n\n/**\n * Generates a partial value verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyValue(gen, field, fieldIndex, ref) {\n    /* eslint-disable no-unexpected-multiline */\n    if (field.resolvedType) {\n        if (field.resolvedType instanceof Enum) { gen\n            (\"switch(%s){\", ref)\n                (\"default:\")\n                    (\"return%j\", invalid(field, \"enum value\"));\n            for (var keys = Object.keys(field.resolvedType.values), j = 0; j < keys.length; ++j) gen\n                (\"case %i:\", field.resolvedType.values[keys[j]]);\n            gen\n                    (\"break\")\n            (\"}\");\n        } else {\n            gen\n            (\"{\")\n                (\"var e=types[%i].verify(%s,n+1);\", fieldIndex, ref)\n                (\"if(e)\")\n                    (\"return%j+e\", field.name + \".\")\n            (\"}\");\n        }\n    } else {\n        switch (field.type) {\n            case \"int32\":\n            case \"uint32\":\n            case \"sint32\":\n            case \"fixed32\":\n            case \"sfixed32\": gen\n                (\"if(!util.isInteger(%s))\", ref)\n                    (\"return%j\", invalid(field, \"integer\"));\n                break;\n            case \"int64\":\n            case \"uint64\":\n            case \"sint64\":\n            case \"fixed64\":\n            case \"sfixed64\": gen\n                (\"if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))\", ref, ref, ref, ref)\n                    (\"return%j\", invalid(field, \"integer|Long\"));\n                break;\n            case \"float\":\n            case \"double\": gen\n                (\"if(typeof %s!==\\\"number\\\")\", ref)\n                    (\"return%j\", invalid(field, \"number\"));\n                break;\n            case \"bool\": gen\n                (\"if(typeof %s!==\\\"boolean\\\")\", ref)\n                    (\"return%j\", invalid(field, \"boolean\"));\n                break;\n            case \"string\": gen\n                (\"if(!util.isString(%s))\", ref)\n                    (\"return%j\", invalid(field, \"string\"));\n                break;\n            case \"bytes\": gen\n                (\"if(!(%s&&typeof %s.length===\\\"number\\\"||util.isString(%s)))\", ref, ref, ref)\n                    (\"return%j\", invalid(field, \"buffer\"));\n                break;\n        }\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a partial key verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyKey(gen, field, ref) {\n    /* eslint-disable no-unexpected-multiline */\n    switch (field.keyType) {\n        case \"int32\":\n        case \"uint32\":\n        case \"sint32\":\n        case \"fixed32\":\n        case \"sfixed32\": gen\n            (\"if(!util.key32Re.test(%s))\", ref)\n                (\"return%j\", invalid(field, \"integer key\"));\n            break;\n        case \"int64\":\n        case \"uint64\":\n        case \"sint64\":\n        case \"fixed64\":\n        case \"sfixed64\": gen\n            (\"if(!util.key64Re.test(%s))\", ref) // see comment above: x is ok, d is not\n                (\"return%j\", invalid(field, \"integer|Long key\"));\n            break;\n        case \"bool\": gen\n            (\"if(!util.key2Re.test(%s))\", ref)\n                (\"return%j\", invalid(field, \"boolean key\"));\n            break;\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a verifier specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction verifier(mtype) {\n    /* eslint-disable no-unexpected-multiline */\n\n    var gen = util.codegen([\"m\", \"n\"], mtype.name + \"$verify\")\n    (\"if(typeof m!==\\\"object\\\"||m===null)\")\n        (\"return%j\", \"object expected\")\n    (\"if(n===undefined)n=0\")\n    (\"if(n>util.recursionLimit)\")\n        (\"return%j\", \"maximum nesting depth exceeded\");\n    var oneofs = mtype.oneofsArray,\n        seenFirstField = {};\n    if (oneofs.length) gen\n    (\"var p={}\");\n\n    for (var i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n        var field = mtype._fieldsArray[i].resolve(),\n            ref   = \"m\" + util.safeProp(field.name);\n\n        if (field.optional) gen\n        (\"if(%s!=null&&m.hasOwnProperty(%j)){\", ref, field.name); // !== undefined && !== null\n\n        // map fields\n        if (field.map) { gen\n            (\"if(!util.isObject(%s))\", ref)\n                (\"return%j\", invalid(field, \"object\"))\n            (\"var k=Object.keys(%s)\", ref)\n            (\"for(var i=0;i<k.length;++i){\");\n                genVerifyKey(gen, field, \"k[i]\");\n                genVerifyValue(gen, field, i, ref + \"[k[i]]\")\n            (\"}\");\n\n        // repeated fields\n        } else if (field.repeated) { gen\n            (\"if(!Array.isArray(%s))\", ref)\n                (\"return%j\", invalid(field, \"array\"))\n            (\"for(var i=0;i<%s.length;++i){\", ref);\n                genVerifyValue(gen, field, i, ref + \"[i]\")\n            (\"}\");\n\n        // required or present fields\n        } else {\n            if (field.partOf) {\n                var oneofProp = util.safeProp(field.partOf.name);\n                if (seenFirstField[field.partOf.name] === 1) gen\n            (\"if(p%s===1)\", oneofProp)\n                (\"return%j\", field.partOf.name + \": multiple values\");\n                seenFirstField[field.partOf.name] = 1;\n                gen\n            (\"p%s=1\", oneofProp);\n            }\n            genVerifyValue(gen, field, i, ref);\n        }\n        if (field.optional) gen\n        (\"}\");\n    }\n    return gen\n    (\"return null\");\n    /* eslint-enable no-unexpected-multiline */\n}\n","\"use strict\";\n/**\n * Runtime message from/to plain object converters.\n * @namespace\n */\nvar converter = exports;\n\nvar Enum = require(\"./enum\"),\n    util = require(\"./util\");\n\n/**\n * Generates a partial value fromObject conveter.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} prop Property reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genValuePartial_fromObject(gen, field, fieldIndex, prop) {\n    var defaultAlreadyEmitted = false;\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    if (field.resolvedType) {\n        if (field.resolvedType instanceof Enum) { gen\n            (\"switch(d%s){\", prop);\n            for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) {\n                // enum unknown values passthrough\n                if (values[keys[i]] === field.typeDefault && !defaultAlreadyEmitted) { gen\n                    (\"default:\")\n                        (\"if(typeof(d%s)===\\\"number\\\"){m%s=d%s;break}\", prop, prop, prop);\n                    if (!field.repeated) gen // fallback to default value only for\n                                             // arrays, to avoid leaving holes.\n                        (\"break\");           // for non-repeated fields, just ignore\n                    defaultAlreadyEmitted = true;\n                }\n                gen\n                (\"case%j:\", keys[i])\n                (\"case %i:\", values[keys[i]])\n                    (\"m%s=%j\", prop, values[keys[i]])\n                    (\"break\");\n            } gen\n            (\"}\");\n        } else gen\n            (\"if(typeof d%s!==\\\"object\\\")\", prop)\n                (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n            (\"m%s=types[%i].fromObject(d%s,n+1)\", prop, fieldIndex, prop);\n    } else {\n        var isUnsigned = false;\n        switch (field.type) {\n            case \"double\":\n            case \"float\": gen\n                (\"m%s=Number(d%s)\", prop, prop); // also catches \"NaN\", \"Infinity\"\n                break;\n            case \"uint32\":\n            case \"fixed32\": gen\n                (\"m%s=d%s>>>0\", prop, prop);\n                break;\n            case \"int32\":\n            case \"sint32\":\n            case \"sfixed32\": gen\n                (\"m%s=d%s|0\", prop, prop);\n                break;\n            case \"uint64\":\n                isUnsigned = true;\n                // eslint-disable-next-line no-fallthrough\n            case \"int64\":\n            case \"sint64\":\n            case \"fixed64\":\n            case \"sfixed64\": gen\n                (\"if(util.Long)\")\n                    (\"(m%s=util.Long.fromValue(d%s)).unsigned=%j\", prop, prop, isUnsigned)\n                (\"else if(typeof d%s===\\\"string\\\")\", prop)\n                    (\"m%s=parseInt(d%s,10)\", prop, prop)\n                (\"else if(typeof d%s===\\\"number\\\")\", prop)\n                    (\"m%s=d%s\", prop, prop)\n                (\"else if(typeof d%s===\\\"object\\\")\", prop)\n                    (\"m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)\", prop, prop, prop, isUnsigned ? \"true\" : \"\");\n                break;\n            case \"bytes\": gen\n                (\"if(typeof d%s===\\\"string\\\")\", prop)\n                    (\"util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)\", prop, prop, prop)\n                (\"else if(d%s.length >= 0)\", prop)\n                    (\"m%s=d%s\", prop, prop);\n                break;\n            case \"string\": gen\n                (\"m%s=String(d%s)\", prop, prop);\n                break;\n            case \"bool\": gen\n                (\"m%s=Boolean(d%s)\", prop, prop);\n                break;\n            /* default: gen\n                (\"m%s=d%s\", prop, prop);\n                break; */\n        }\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a plain object to runtime message converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.fromObject = function fromObject(mtype) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    var fields = mtype.fieldsArray;\n    var gen = util.codegen([\"d\", \"n\"], mtype.name + \"$fromObject\")\n    (\"if(d instanceof this.ctor)\")\n        (\"return d\")\n    (\"if(n===undefined)n=0\")\n    (\"if(n>util.recursionLimit)\")\n        (\"throw Error(\\\"maximum nesting depth exceeded\\\")\");\n    if (!fields.length) return gen\n    (\"return new this.ctor\");\n    gen\n    (\"var m=new this.ctor\");\n    for (var i = 0; i < fields.length; ++i) {\n        var field  = fields[i].resolve(),\n            prop   = util.safeProp(field.name);\n\n        // Map fields\n        if (field.map) { gen\n    (\"if(d%s){\", prop)\n        (\"if(typeof d%s!==\\\"object\\\")\", prop)\n            (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n        (\"m%s={}\", prop)\n        (\"for(var ks=Object.keys(d%s),i=0;i<ks.length;++i){\", prop);\n            gen\n        (\"if(ks[i]===\\\"__proto__\\\")\")\n            (\"util.makeProp(m%s,ks[i])\", prop);\n            genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + \"[ks[i]]\")\n        (\"}\")\n    (\"}\");\n\n        // Repeated fields\n        } else if (field.repeated) { gen\n    (\"if(d%s){\", prop)\n        (\"if(!Array.isArray(d%s))\", prop)\n            (\"throw TypeError(%j)\", field.fullName + \": array expected\")\n        (\"m%s=[]\", prop)\n        (\"for(var i=0;i<d%s.length;++i){\", prop);\n            genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + \"[i]\")\n        (\"}\")\n    (\"}\");\n\n        // Non-repeated fields\n        } else {\n            if (!(field.resolvedType instanceof Enum)) gen // no need to test for null/undefined if an enum (uses switch)\n    (\"if(d%s!=null){\", prop); // !== undefined && !== null\n        genValuePartial_fromObject(gen, field, /* not sorted */ i, prop);\n            if (!(field.resolvedType instanceof Enum)) gen\n    (\"}\");\n        }\n    } return gen\n    (\"return m\");\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n};\n\n/**\n * Generates a partial value toObject converter.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} prop Property reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genValuePartial_toObject(gen, field, fieldIndex, prop) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    if (field.resolvedType) {\n        if (field.resolvedType instanceof Enum) gen\n            (\"d%s=o.enums===String?(types[%i].values[m%s]===undefined?m%s:types[%i].values[m%s]):m%s\", prop, fieldIndex, prop, prop, fieldIndex, prop, prop);\n        else gen\n            (\"d%s=types[%i].toObject(m%s,o)\", prop, fieldIndex, prop);\n    } else {\n        var isUnsigned = false;\n        switch (field.type) {\n            case \"double\":\n            case \"float\": gen\n            (\"d%s=o.json&&!isFinite(m%s)?String(m%s):m%s\", prop, prop, prop, prop);\n                break;\n            case \"uint64\":\n                isUnsigned = true;\n                // eslint-disable-next-line no-fallthrough\n            case \"int64\":\n            case \"sint64\":\n            case \"fixed64\":\n            case \"sfixed64\": gen\n            (\"if(typeof m%s===\\\"number\\\")\", prop)\n                (\"d%s=o.longs===String?String(m%s):m%s\", prop, prop, prop)\n            (\"else\") // Long-like\n                (\"d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s\", prop, prop, prop, prop, isUnsigned ? \"true\": \"\", prop);\n                break;\n            case \"bytes\": gen\n            (\"d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s\", prop, prop, prop, prop, prop);\n                break;\n            default: gen\n            (\"d%s=m%s\", prop, prop);\n                break;\n        }\n    }\n    return gen;\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a runtime message to plain object converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.toObject = function toObject(mtype) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);\n    if (!fields.length)\n        return util.codegen()(\"return {}\");\n    var gen = util.codegen([\"m\", \"o\"], mtype.name + \"$toObject\")\n    (\"if(!o)\")\n        (\"o={}\")\n    (\"var d={}\");\n\n    var repeatedFields = [],\n        mapFields = [],\n        normalFields = [],\n        i = 0;\n    for (; i < fields.length; ++i)\n        if (!fields[i].partOf)\n            ( fields[i].resolve().repeated ? repeatedFields\n            : fields[i].map ? mapFields\n            : normalFields).push(fields[i]);\n\n    if (repeatedFields.length) { gen\n    (\"if(o.arrays||o.defaults){\");\n        for (i = 0; i < repeatedFields.length; ++i) gen\n        (\"d%s=[]\", util.safeProp(repeatedFields[i].name));\n        gen\n    (\"}\");\n    }\n\n    if (mapFields.length) { gen\n    (\"if(o.objects||o.defaults){\");\n        for (i = 0; i < mapFields.length; ++i) gen\n        (\"d%s={}\", util.safeProp(mapFields[i].name));\n        gen\n    (\"}\");\n    }\n\n    if (normalFields.length) { gen\n    (\"if(o.defaults){\");\n        for (i = 0; i < normalFields.length; ++i) {\n            var field = normalFields[i],\n                prop  = util.safeProp(field.name);\n            if (field.resolvedType instanceof Enum) gen\n        (\"d%s=o.enums===String?%j:%j\", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);\n            else if (field.long) gen\n        (\"if(util.Long){\")\n            (\"var n=new util.Long(%i,%i,%j)\", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)\n            (\"d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():n\", prop)\n        (\"}else\")\n            (\"d%s=o.longs===String?%j:%i\", prop, field.typeDefault.toString(), field.typeDefault.toNumber());\n            else if (field.bytes) {\n                var arrayDefault = Array.prototype.slice.call(field.typeDefault);\n                gen\n        (\"if(o.bytes===String)d%s=%j\", prop, String.fromCharCode.apply(String, field.typeDefault))\n        (\"else{\")\n            (\"d%s=%j\", prop, arrayDefault)\n            (\"if(o.bytes!==Array)d%s=util.newBuffer(d%s)\", prop, prop)\n        (\"}\");\n            } else gen\n        (\"d%s=%j\", prop, field.typeDefault); // also messages (=null)\n        } gen\n    (\"}\");\n    }\n    var hasKs2 = false;\n    for (i = 0; i < fields.length; ++i) {\n        var field = fields[i],\n            index = mtype._fieldsArray.indexOf(field),\n            prop  = util.safeProp(field.name);\n        if (field.map) {\n            if (!hasKs2) { hasKs2 = true; gen\n    (\"var ks2\");\n            } gen\n    (\"if(m%s&&(ks2=Object.keys(m%s)).length){\", prop, prop)\n        (\"d%s={}\", prop)\n        (\"for(var j=0;j<ks2.length;++j){\");\n            gen\n        (\"if(ks2[j]===\\\"__proto__\\\")\")\n            (\"util.makeProp(d%s,ks2[j])\", prop);\n            genValuePartial_toObject(gen, field, /* sorted */ index, prop + \"[ks2[j]]\")\n        (\"}\");\n        } else if (field.repeated) { gen\n    (\"if(m%s&&m%s.length){\", prop, prop)\n        (\"d%s=[]\", prop)\n        (\"for(var j=0;j<m%s.length;++j){\", prop);\n            genValuePartial_toObject(gen, field, /* sorted */ index, prop + \"[j]\")\n        (\"}\");\n        } else { gen\n    (\"if(m%s!=null&&m.hasOwnProperty(%j)){\", prop, field.name); // !== undefined && !== null\n        genValuePartial_toObject(gen, field, /* sorted */ index, prop);\n        if (field.partOf) gen\n        (\"if(o.oneofs)\")\n            (\"d%s=%j\", util.safeProp(field.partOf.name), field.name);\n        }\n        gen\n    (\"}\");\n    }\n    return gen\n    (\"return d\");\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n};\n","\"use strict\";\n\n/**\n * Wrappers for common types.\n * @type {Object.<string,IWrapper>}\n * @const\n */\nvar wrappers = exports;\n\nvar Message = require(\"./message\");\n\n/**\n * From object converter part of an {@link IWrapper}.\n * @typedef WrapperFromObjectConverter\n * @type {function}\n * @param {Object.<string,*>} object Plain object\n * @returns {Message<{}>} Message instance\n * @this Type\n */\n\n/**\n * To object converter part of an {@link IWrapper}.\n * @typedef WrapperToObjectConverter\n * @type {function}\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.<string,*>} Plain object\n * @this Type\n */\n\n/**\n * Common type wrapper part of {@link wrappers}.\n * @interface IWrapper\n * @property {WrapperFromObjectConverter} [fromObject] From object converter\n * @property {WrapperToObjectConverter} [toObject] To object converter\n */\n\n// Custom wrapper for Any\nwrappers[\".google.protobuf.Any\"] = {\n\n    fromObject: function(object, depth) {\n\n        // unwrap value type if mapped\n        if (object && object[\"@type\"]) {\n             // Only use fully qualified type name after the last '/'\n            var name = object[\"@type\"].substring(object[\"@type\"].lastIndexOf(\"/\") + 1);\n            var type = this.lookup(name);\n            /* istanbul ignore else */\n            if (type) {\n                // type_url does not accept leading \".\"\n                var type_url = object[\"@type\"].charAt(0) === \".\" ?\n                    object[\"@type\"].slice(1) : object[\"@type\"];\n                // type_url prefix is optional, but path seperator is required\n                if (type_url.indexOf(\"/\") === -1) {\n                    type_url = \"/\" + type_url;\n                }\n                var nextDepth = depth === undefined ? 1 : depth + 1;\n                return this.create({\n                    type_url: type_url,\n                    value: type.encode(type.fromObject(object, nextDepth)).finish()\n                });\n            }\n        }\n\n        return this.fromObject(object, depth);\n    },\n\n    toObject: function(message, options) {\n\n        // Default prefix\n        var googleApi = \"type.googleapis.com/\";\n        var prefix = \"\";\n        var name = \"\";\n\n        // decode value if requested and unmapped\n        if (options && options.json && message.type_url && message.value) {\n            // Only use fully qualified type name after the last '/'\n            name = message.type_url.substring(message.type_url.lastIndexOf(\"/\") + 1);\n            // Separate the prefix used\n            prefix = message.type_url.substring(0, message.type_url.lastIndexOf(\"/\") + 1);\n            var type = this.lookup(name);\n            /* istanbul ignore else */\n            if (type)\n                message = type.decode(message.value);\n        }\n\n        // wrap value if unmapped\n        if (!(message instanceof this.ctor) && message instanceof Message) {\n            var object = message.$type.toObject(message, options);\n            var messageName = message.$type.fullName[0] === \".\" ?\n                message.$type.fullName.slice(1) : message.$type.fullName;\n            // Default to type.googleapis.com prefix if no prefix is used\n            if (prefix === \"\") {\n                prefix = googleApi;\n            }\n            name = prefix + messageName;\n            object[\"@type\"] = name;\n            return object;\n        }\n\n        return this.toObject(message, options);\n    }\n};\n","\"use strict\";\nmodule.exports = Type;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Type.prototype = Object.create(Namespace.prototype)).constructor = Type).className = \"Type\";\n\nvar Enum      = require(\"./enum\"),\n    OneOf     = require(\"./oneof\"),\n    Field     = require(\"./field\"),\n    MapField  = require(\"./mapfield\"),\n    Service   = require(\"./service\"),\n    Message   = require(\"./message\"),\n    Reader    = require(\"./reader\"),\n    Writer    = require(\"./writer\"),\n    util      = require(\"./util\"),\n    encoder   = require(\"./encoder\"),\n    decoder   = require(\"./decoder\"),\n    verifier  = require(\"./verifier\"),\n    converter = require(\"./converter\"),\n    wrappers  = require(\"./wrappers\");\n\n/**\n * Constructs a new reflected message type instance.\n * @classdesc Reflected message type.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Message name\n * @param {Object.<string,*>} [options] Declared options\n */\nfunction Type(name, options) {\n    name = name.replace(/\\W/g, \"\");\n    Namespace.call(this, name, options);\n\n    /**\n     * Message fields.\n     * @type {Object.<string,Field>}\n     */\n    this.fields = {};  // toJSON, marker\n\n    /**\n     * Oneofs declared within this namespace, if any.\n     * @type {Object.<string,OneOf>}\n     */\n    this.oneofs = undefined; // toJSON\n\n    /**\n     * Extension ranges, if any.\n     * @type {number[][]}\n     */\n    this.extensions = undefined; // toJSON\n\n    /**\n     * Reserved ranges, if any.\n     * @type {Array.<number[]|string>}\n     */\n    this.reserved = undefined; // toJSON\n\n    /*?\n     * Whether this type is a legacy group.\n     * @type {boolean|undefined}\n     */\n    this.group = undefined; // toJSON\n\n    /**\n     * Cached fields by id.\n     * @type {Object.<number,Field>|null}\n     * @private\n     */\n    this._fieldsById = null;\n\n    /**\n     * Cached fields as an array.\n     * @type {Field[]|null}\n     * @private\n     */\n    this._fieldsArray = null;\n\n    /**\n     * Cached oneofs as an array.\n     * @type {OneOf[]|null}\n     * @private\n     */\n    this._oneofsArray = null;\n\n    /**\n     * Cached constructor.\n     * @type {Constructor<{}>}\n     * @private\n     */\n    this._ctor = null;\n}\n\nObject.defineProperties(Type.prototype, {\n\n    /**\n     * Message fields by id.\n     * @name Type#fieldsById\n     * @type {Object.<number,Field>}\n     * @readonly\n     */\n    fieldsById: {\n        get: function() {\n\n            /* istanbul ignore if */\n            if (this._fieldsById)\n                return this._fieldsById;\n\n            this._fieldsById = {};\n            for (var names = Object.keys(this.fields), i = 0; i < names.length; ++i) {\n                var field = this.fields[names[i]],\n                    id = field.id;\n\n                /* istanbul ignore if */\n                if (this._fieldsById[id])\n                    throw Error(\"duplicate id \" + id + \" in \" + this);\n\n                this._fieldsById[id] = field;\n            }\n            return this._fieldsById;\n        }\n    },\n\n    /**\n     * Fields of this message as an array for iteration.\n     * @name Type#fieldsArray\n     * @type {Field[]}\n     * @readonly\n     */\n    fieldsArray: {\n        get: function() {\n            return this._fieldsArray || (this._fieldsArray = util.toArray(this.fields));\n        }\n    },\n\n    /**\n     * Oneofs of this message as an array for iteration.\n     * @name Type#oneofsArray\n     * @type {OneOf[]}\n     * @readonly\n     */\n    oneofsArray: {\n        get: function() {\n            return this._oneofsArray || (this._oneofsArray = util.toArray(this.oneofs));\n        }\n    },\n\n    /**\n     * The registered constructor, if any registered, otherwise a generic constructor.\n     * Assigning a function replaces the internal constructor. If the function does not extend {@link Message} yet, its prototype will be setup accordingly and static methods will be populated. If it already extends {@link Message}, it will just replace the internal constructor.\n     * @name Type#ctor\n     * @type {Constructor<{}>}\n     */\n    ctor: {\n        get: function() {\n            return this._ctor || (this.ctor = Type.generateConstructor(this)());\n        },\n        set: function(ctor) {\n\n            // Ensure proper prototype\n            var prototype = ctor.prototype;\n            if (!(prototype instanceof Message)) {\n                (ctor.prototype = new Message()).constructor = ctor;\n                util.merge(ctor.prototype, prototype);\n            }\n\n            // Classes and messages reference their reflected type\n            ctor.$type = ctor.prototype.$type = this;\n\n            // Mix in static methods\n            util.merge(ctor, Message, true);\n\n            this._ctor = ctor;\n\n            // Messages have non-enumerable default values on their prototype\n            var i = 0;\n            for (; i < /* initializes */ this.fieldsArray.length; ++i)\n                this._fieldsArray[i].resolve(); // ensures a proper value\n\n            // Messages have non-enumerable getters and setters for each virtual oneof field\n            var ctorProperties = {};\n            for (i = 0; i < /* initializes */ this.oneofsArray.length; ++i)\n                ctorProperties[this._oneofsArray[i].resolve().name] = {\n                    get: util.oneOfGetter(this._oneofsArray[i].oneof),\n                    set: util.oneOfSetter(this._oneofsArray[i].oneof)\n                };\n            if (i)\n                Object.defineProperties(ctor.prototype, ctorProperties);\n        }\n    }\n});\n\n/**\n * Generates a constructor function for the specified type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nType.generateConstructor = function generateConstructor(mtype) {\n    /* eslint-disable no-unexpected-multiline */\n    var gen = util.codegen([\"p\"], mtype.name);\n    // explicitly initialize mutable object/array fields so that these aren't just inherited from the prototype\n    for (var i = 0, field; i < mtype.fieldsArray.length; ++i)\n        if ((field = mtype._fieldsArray[i]).map) gen\n            (\"this%s={}\", util.safeProp(field.name));\n        else if (field.repeated) gen\n            (\"this%s=[]\", util.safeProp(field.name));\n    return gen\n    (\"if(p)for(var ks=Object.keys(p),i=0;i<ks.length;++i)if(p[ks[i]]!=null&&ks[i]!==\\\"__proto__\\\")\") // omit undefined or null\n        (\"this[ks[i]]=p[ks[i]]\");\n    /* eslint-enable no-unexpected-multiline */\n};\n\nfunction clearCache(type) {\n    type._fieldsById = type._fieldsArray = type._oneofsArray = null;\n    delete type.encode;\n    delete type.decode;\n    delete type.verify;\n    return type;\n}\n\n/**\n * Message type descriptor.\n * @interface IType\n * @extends INamespace\n * @property {Object.<string,IOneOf>} [oneofs] Oneof descriptors\n * @property {Object.<string,IField>} fields Field descriptors\n * @property {number[][]} [extensions] Extension ranges\n * @property {Array.<number[]|string>} [reserved] Reserved ranges\n * @property {boolean} [group=false] Whether a legacy group or not\n */\n\n/**\n * Creates a message type from a message type descriptor.\n * @param {string} name Message name\n * @param {IType} json Message type descriptor\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Type} Created message type\n */\nType.fromJSON = function fromJSON(name, json, depth) {\n    depth = util.checkDepth(depth);\n    var type = new Type(name, json.options);\n    type.extensions = json.extensions;\n    type.reserved = json.reserved;\n    var names = Object.keys(json.fields),\n        i = 0;\n    for (; i < names.length; ++i)\n        type.add(\n            ( typeof json.fields[names[i]].keyType !== \"undefined\"\n            ? MapField.fromJSON\n            : Field.fromJSON )(names[i], json.fields[names[i]])\n        );\n    if (json.oneofs)\n        for (names = Object.keys(json.oneofs), i = 0; i < names.length; ++i)\n            type.add(OneOf.fromJSON(names[i], json.oneofs[names[i]]));\n    if (json.nested)\n        for (names = Object.keys(json.nested), i = 0; i < names.length; ++i) {\n            var nested = json.nested[names[i]];\n            type.add( // most to least likely\n                ( nested.id !== undefined\n                ? Field.fromJSON\n                : nested.fields !== undefined\n                ? Type.fromJSON\n                : nested.values !== undefined\n                ? Enum.fromJSON\n                : nested.methods !== undefined\n                ? Service.fromJSON\n                : Namespace.fromJSON )(names[i], nested, depth + 1)\n            );\n        }\n    if (json.extensions && json.extensions.length)\n        type.extensions = json.extensions;\n    if (json.reserved && json.reserved.length)\n        type.reserved = json.reserved;\n    if (json.group)\n        type.group = true;\n    if (json.comment)\n        type.comment = json.comment;\n    if (json.edition)\n        type._edition = json.edition;\n    type._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return type;\n};\n\n/**\n * Converts this message type to a message type descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IType} Message type descriptor\n */\nType.prototype.toJSON = function toJSON(toJSONOptions) {\n    var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\"    , this._editionToJSON(),\n        \"options\"    , inherited && inherited.options || undefined,\n        \"oneofs\"     , Namespace.arrayToJSON(this.oneofsArray, toJSONOptions),\n        \"fields\"     , Namespace.arrayToJSON(this.fieldsArray.filter(function(obj) { return !obj.declaringField; }), toJSONOptions) || {},\n        \"extensions\" , this.extensions && this.extensions.length ? this.extensions : undefined,\n        \"reserved\"   , this.reserved && this.reserved.length ? this.reserved : undefined,\n        \"group\"      , this.group || undefined,\n        \"nested\"     , inherited && inherited.nested || undefined,\n        \"comment\"    , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * @override\n */\nType.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    Namespace.prototype.resolveAll.call(this);\n    var oneofs = this.oneofsArray; i = 0;\n    while (i < oneofs.length)\n        oneofs[i++].resolve();\n    var fields = this.fieldsArray, i = 0;\n    while (i < fields.length)\n        fields[i++].resolve();\n    return this;\n};\n\n/**\n * @override\n */\nType.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    if (!this._needsRecursiveFeatureResolution) return this;\n\n    edition = this._edition || edition;\n\n    Namespace.prototype._resolveFeaturesRecursive.call(this, edition);\n    this.oneofsArray.forEach(oneof => {\n        oneof._resolveFeatures(edition);\n    });\n    this.fieldsArray.forEach(field => {\n        field._resolveFeatures(edition);\n    });\n    return this;\n};\n\n/**\n * @override\n */\nType.prototype.get = function get(name) {\n    if (Object.prototype.hasOwnProperty.call(this.fields, name))\n        return this.fields[name];\n    if (this.oneofs && Object.prototype.hasOwnProperty.call(this.oneofs, name))\n        return this.oneofs[name];\n    if (this.nested && Object.prototype.hasOwnProperty.call(this.nested, name))\n        return this.nested[name];\n    return null;\n};\n\n/**\n * Adds a nested object to this type.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name or, if a field, when there is already a field with this id\n */\nType.prototype.add = function add(object) {\n    if (this.get(object.name))\n        throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n    if (object instanceof Field && object.extend === undefined) {\n        // NOTE: Extension fields aren't actual fields on the declaring type, but nested objects.\n        // The root object takes care of adding distinct sister-fields to the respective extended\n        // type instead.\n\n        // avoids calling the getter if not absolutely necessary because it's called quite frequently\n        if (this._fieldsById ? /* istanbul ignore next */ this._fieldsById[object.id] : this.fieldsById[object.id])\n            throw Error(\"duplicate id \" + object.id + \" in \" + this);\n        if (this.isReservedId(object.id))\n            throw Error(\"id \" + object.id + \" is reserved in \" + this);\n        if (this.isReservedName(object.name))\n            throw Error(\"name '\" + object.name + \"' is reserved in \" + this);\n        if (object.name === \"__proto__\")\n            return this;\n\n        if (object.parent)\n            object.parent.remove(object);\n        this.fields[object.name] = object;\n        object.message = this;\n        object.onAdd(this);\n        return clearCache(this);\n    }\n    if (object instanceof OneOf) {\n        if (object.name === \"__proto__\")\n            return this;\n        if (!this.oneofs)\n            this.oneofs = {};\n        this.oneofs[object.name] = object;\n        object.onAdd(this);\n        return clearCache(this);\n    }\n    return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * Removes a nested object from this type.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this type\n */\nType.prototype.remove = function remove(object) {\n    if (object instanceof Field && object.extend === undefined) {\n        // See Type#add for the reason why extension fields are excluded here.\n\n        /* istanbul ignore if */\n        if (!this.fields || this.fields[object.name] !== object)\n            throw Error(object + \" is not a member of \" + this);\n\n        delete this.fields[object.name];\n        object.parent = null;\n        object.onRemove(this);\n        return clearCache(this);\n    }\n    if (object instanceof OneOf) {\n\n        /* istanbul ignore if */\n        if (!this.oneofs || this.oneofs[object.name] !== object)\n            throw Error(object + \" is not a member of \" + this);\n\n        delete this.oneofs[object.name];\n        object.parent = null;\n        object.onRemove(this);\n        return clearCache(this);\n    }\n    return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedId = function isReservedId(id) {\n    return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedName = function isReservedName(name) {\n    return Namespace.isReservedName(this.reserved, name);\n};\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.<string,*>} [properties] Properties to set\n * @returns {Message<{}>} Message instance\n */\nType.prototype.create = function create(properties) {\n    return new this.ctor(properties);\n};\n\n/**\n * Sets up {@link Type#encode|encode}, {@link Type#decode|decode} and {@link Type#verify|verify}.\n * @returns {Type} `this`\n */\nType.prototype.setup = function setup() {\n    // Sets up everything at once so that the prototype chain does not have to be re-evaluated\n    // multiple times (V8, soft-deopt prototype-check).\n\n    var fullName = this.fullName,\n        types    = [];\n    for (var i = 0; i < /* initializes */ this.fieldsArray.length; ++i)\n        types.push(this._fieldsArray[i].resolve().resolvedType);\n\n    // Replace setup methods with type-specific generated functions\n    this.encode = encoder(this)({\n        Writer : Writer,\n        types  : types,\n        util   : util\n    });\n    this.decode = decoder(this)({\n        Reader : Reader,\n        types  : types,\n        util   : util\n    });\n    this.verify = verifier(this)({\n        types : types,\n        util  : util\n    });\n    this.fromObject = converter.fromObject(this)({\n        types : types,\n        util  : util\n    });\n    this.toObject = converter.toObject(this)({\n        types : types,\n        util  : util\n    });\n\n    // Inject custom wrappers for common types\n    var wrapper = wrappers[fullName];\n    if (wrapper) {\n        var originalThis = Object.create(this);\n        // if (wrapper.fromObject) {\n            originalThis.fromObject = this.fromObject;\n            this.fromObject = wrapper.fromObject.bind(originalThis);\n        // }\n        // if (wrapper.toObject) {\n            originalThis.toObject = this.toObject;\n            this.toObject = wrapper.toObject.bind(originalThis);\n        // }\n    }\n\n    return this;\n};\n\n/**\n * Encodes a message of this type. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.<string,*>} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encode = function encode_setup(message, writer) {\n    return this.setup().encode(message, writer); // overrides this method\n};\n\n/**\n * Encodes a message of this type preceeded by its byte length as a varint. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.<string,*>} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encodeDelimited = function encodeDelimited(message, writer) {\n    return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();\n};\n\n/**\n * Decodes a message of this type.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Length of the message, if known beforehand\n * @param {number} [end] Expected group end tag, if decoding a group\n * @param {number} [depth] Current nesting depth\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError<{}>} If required fields are missing\n */\nType.prototype.decode = function decode_setup(reader, length, end, depth) {\n    return this.setup().decode(reader, length, end, depth); // overrides this method\n};\n\n/**\n * Decodes a message of this type preceeded by its byte length as a varint.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError} If required fields are missing\n */\nType.prototype.decodeDelimited = function decodeDelimited(reader) {\n    if (!(reader instanceof Reader))\n        reader = Reader.create(reader);\n    return this.decode(reader, reader.uint32());\n};\n\n/**\n * Verifies that field values are valid and that required fields are present.\n * @param {Object.<string,*>} message Plain object to verify\n * @param {number} [depth] Current nesting depth\n * @returns {null|string} `null` if valid, otherwise the reason why it is not\n */\nType.prototype.verify = function verify_setup(message, depth) {\n    return this.setup().verify(message, depth); // overrides this method\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.<string,*>} object Plain object to convert\n * @param {number} [depth] Current nesting depth\n * @returns {Message<{}>} Message instance\n */\nType.prototype.fromObject = function fromObject(object, depth) {\n    return this.setup().fromObject(object, depth);\n};\n\n/**\n * Conversion options as used by {@link Type#toObject} and {@link Message.toObject}.\n * @interface IConversionOptions\n * @property {Function} [longs] Long conversion type.\n * Valid values are `String` and `Number` (the global types).\n * Defaults to copy the present value, which is a possibly unsafe number without and a {@link Long} with a long library.\n * @property {Function} [enums] Enum value conversion type.\n * Only valid value is `String` (the global type).\n * Defaults to copy the present value, which is the numeric id.\n * @property {Function} [bytes] Bytes value conversion type.\n * Valid values are `Array` and (a base64 encoded) `String` (the global types).\n * Defaults to copy the present value, which usually is a Buffer under node and an Uint8Array in the browser.\n * @property {boolean} [defaults=false] Also sets default values on the resulting object\n * @property {boolean} [arrays=false] Sets empty arrays for missing repeated fields even if `defaults=false`\n * @property {boolean} [objects=false] Sets empty objects for missing map fields even if `defaults=false`\n * @property {boolean} [oneofs=false] Includes virtual oneof properties set to the present field's name, if any\n * @property {boolean} [json=false] Performs additional JSON compatibility conversions, i.e. NaN and Infinity to strings\n */\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\nType.prototype.toObject = function toObject(message, options) {\n    return this.setup().toObject(message, options);\n};\n\n/**\n * Decorator function as returned by {@link Type.d} (TypeScript).\n * @typedef TypeDecorator\n * @type {function}\n * @param {Constructor<T>} target Target constructor\n * @returns {undefined}\n * @template T extends Message<T>\n */\n\n/**\n * Type decorator (TypeScript).\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {TypeDecorator<T>} Decorator function\n * @template T extends Message<T>\n */\nType.d = function decorateType(typeName) {\n    return function typeDecorator(target) {\n        util.decorateType(target, typeName);\n    };\n};\n","\"use strict\";\nmodule.exports = Root;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Root.prototype = Object.create(Namespace.prototype)).constructor = Root).className = \"Root\";\n\nvar Field   = require(\"./field\"),\n    Enum    = require(\"./enum\"),\n    OneOf   = require(\"./oneof\"),\n    util    = require(\"./util\");\n\nvar Type,   // cyclic\n    parse,  // might be excluded\n    common; // \"\n\n/**\n * Constructs a new root namespace instance.\n * @classdesc Root namespace wrapping all types, enums, services, sub-namespaces etc. that belong together.\n * @extends NamespaceBase\n * @constructor\n * @param {Object.<string,*>} [options] Top level options\n */\nfunction Root(options) {\n    Namespace.call(this, \"\", options);\n\n    /**\n     * Deferred extension fields.\n     * @type {Field[]}\n     */\n    this.deferred = [];\n\n    /**\n     * Resolved file names of loaded files.\n     * @type {string[]}\n     */\n    this.files = [];\n\n    /**\n     * Edition, defaults to proto2 if unspecified.\n     * @type {string}\n     * @private\n     */\n    this._edition = \"proto2\";\n\n    /**\n     * Global lookup cache of fully qualified names.\n     * @type {Object.<string,ReflectionObject>}\n     * @private\n     */\n    this._fullyQualifiedObjects = {};\n}\n\n/**\n * Loads a namespace descriptor into a root namespace.\n * @param {INamespace} json Namespace descriptor\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted\n * @param {number} [depth] Current nesting depth, defaults to `0`\n * @returns {Root} Root namespace\n */\nRoot.fromJSON = function fromJSON(json, root, depth) {\n    depth = util.checkDepth(depth);\n    if (!root)\n        root = new Root();\n    if (json.options)\n        root.setOptions(json.options);\n    return root.addJSON(json.nested, depth).resolveAll();\n};\n\n/**\n * Resolves the path of an imported file, relative to the importing origin.\n * This method exists so you can override it with your own logic in case your imports are scattered over multiple directories.\n * @function\n * @param {string} origin The file name of the importing file\n * @param {string} target The file name being imported\n * @returns {string|null} Resolved path to `target` or `null` to skip the file\n */\nRoot.prototype.resolvePath = util.path.resolve;\n\n/**\n * Fetch content from file path or url\n * This method exists so you can override it with your own logic.\n * @function\n * @param {string} path File path or url\n * @param {FetchCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.fetch = util.fetch;\n\n// A symbol-like function to safely signal synchronous loading\n/* istanbul ignore next */\nfunction SYNC() {} // eslint-disable-line no-empty-function\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} options Parse options\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.load = function load(filename, options, callback) {\n    if (typeof options === \"function\") {\n        callback = options;\n        options = undefined;\n    }\n    var self = this;\n    if (!callback) {\n        return util.asPromise(load, self, filename, options);\n    }\n\n    var sync = callback === SYNC; // undocumented\n\n    // Finishes loading by calling the callback (exactly once)\n    function finish(err, root) {\n        /* istanbul ignore if */\n        if (!callback) {\n            return;\n        }\n        if (sync) {\n            throw err;\n        }\n        if (root) {\n            root.resolveAll();\n        }\n        var cb = callback;\n        callback = null;\n        cb(err, root);\n    }\n\n    // Bundled definition existence checking\n    function getBundledFileName(filename) {\n        var idx = filename.lastIndexOf(\"google/protobuf/\");\n        if (idx > -1) {\n            var altname = filename.substring(idx);\n            if (altname in common) return altname;\n        }\n        return null;\n    }\n\n    // Processes a single file\n    function process(filename, source) {\n        try {\n            if (util.isString(source) && source.charAt(0) === \"{\")\n                source = JSON.parse(source);\n            if (!util.isString(source))\n                self.setOptions(source.options).addJSON(source.nested);\n            else {\n                parse.filename = filename;\n                var parsed = parse(source, self, options),\n                    resolved,\n                    i = 0;\n                if (parsed.imports)\n                    for (; i < parsed.imports.length; ++i)\n                        if (resolved = getBundledFileName(parsed.imports[i]) || self.resolvePath(filename, parsed.imports[i]))\n                            fetch(resolved);\n                if (parsed.weakImports)\n                    for (i = 0; i < parsed.weakImports.length; ++i)\n                        if (resolved = getBundledFileName(parsed.weakImports[i]) || self.resolvePath(filename, parsed.weakImports[i]))\n                            fetch(resolved, true);\n            }\n        } catch (err) {\n            finish(err);\n        }\n        if (!sync && !queued) {\n            finish(null, self); // only once anyway\n        }\n    }\n\n    // Fetches a single file\n    function fetch(filename, weak) {\n        filename = getBundledFileName(filename) || filename;\n\n        // Skip if already loaded / attempted\n        if (self.files.indexOf(filename) > -1) {\n            return;\n        }\n        self.files.push(filename);\n\n        // Shortcut bundled definitions\n        if (filename in common) {\n            if (sync) {\n                process(filename, common[filename]);\n            } else {\n                ++queued;\n                setTimeout(function() {\n                    --queued;\n                    process(filename, common[filename]);\n                });\n            }\n            return;\n        }\n\n        // Otherwise fetch from disk or network\n        if (sync) {\n            var source;\n            try {\n                source = util.fs.readFileSync(filename).toString(\"utf8\");\n            } catch (err) {\n                if (!weak)\n                    finish(err);\n                return;\n            }\n            process(filename, source);\n        } else {\n            ++queued;\n            self.fetch(filename, function(err, source) {\n                --queued;\n                /* istanbul ignore if */\n                if (!callback) {\n                    return; // terminated meanwhile\n                }\n                if (err) {\n                    /* istanbul ignore else */\n                    if (!weak)\n                        finish(err);\n                    else if (!queued) // can't be covered reliably\n                        finish(null, self);\n                    return;\n                }\n                process(filename, source);\n            });\n        }\n    }\n    var queued = 0;\n\n    // Assembling the root namespace doesn't require working type\n    // references anymore, so we can load everything in parallel\n    if (util.isString(filename)) {\n        filename = [ filename ];\n    }\n    for (var i = 0, resolved; i < filename.length; ++i)\n        if (resolved = self.resolvePath(\"\", filename[i]))\n            fetch(resolved);\n    if (sync) {\n        self.resolveAll();\n        return self;\n    }\n    if (!queued) {\n        finish(null, self);\n    }\n\n    return self;\n};\n// function load(filename:string, options:IParseOptions, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and returns a promise.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Promise<Root>} Promise\n * @variation 3\n */\n// function load(filename:string, [options:IParseOptions]):Promise<Root>\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into this root namespace (node only).\n * @function Root#loadSync\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n */\nRoot.prototype.loadSync = function loadSync(filename, options) {\n    if (!util.isNode)\n        throw Error(\"not supported\");\n    return this.load(filename, options, SYNC);\n};\n\n/**\n * @override\n */\nRoot.prototype.resolveAll = function resolveAll() {\n    if (!this._needsRecursiveResolve) return this;\n\n    if (this.deferred.length)\n        throw Error(\"unresolvable extensions: \" + this.deferred.map(function(field) {\n            return \"'extend \" + field.extend + \"' in \" + field.parent.fullName;\n        }).join(\", \"));\n    return Namespace.prototype.resolveAll.call(this);\n};\n\n// only uppercased (and thus conflict-free) children are exposed, see below\nvar exposeRe = /^[A-Z]/;\n\n/**\n * Handles a deferred declaring extension field by creating a sister field to represent it within its extended type.\n * @param {Root} root Root instance\n * @param {Field} field Declaring extension field witin the declaring type\n * @returns {boolean} `true` if successfully added to the extended type, `false` otherwise\n * @inner\n * @ignore\n */\nfunction tryHandleExtension(root, field) {\n    var extendedType = field.parent.lookup(field.extend);\n    if (extendedType) {\n        var sisterField = new Field(field.fullName, field.id, field.type, field.rule, undefined, field.options);\n        //do not allow to extend same field twice to prevent the error\n        if (extendedType.get(sisterField.name)) {\n            return true;\n        }\n        sisterField.declaringField = field;\n        field.extensionField = sisterField;\n        extendedType.add(sisterField);\n        return true;\n    }\n    return false;\n}\n\n/**\n * Called when any object is added to this root or its sub-namespaces.\n * @param {ReflectionObject} object Object added\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleAdd = function _handleAdd(object) {\n    if (object instanceof Field) {\n\n        if (/* an extension field (implies not part of a oneof) */ object.extend !== undefined && /* not already handled */ !object.extensionField)\n            if (!tryHandleExtension(this, object))\n                this.deferred.push(object);\n\n    } else if (object instanceof Enum) {\n\n        if (exposeRe.test(object.name))\n            object.parent[object.name] = object.values; // expose enum values as property of its parent\n\n    } else if (!(object instanceof OneOf)) /* everything else is a namespace */ {\n\n        if (object instanceof Type) // Try to handle any deferred extensions\n            for (var i = 0; i < this.deferred.length;)\n                if (tryHandleExtension(this, this.deferred[i]))\n                    this.deferred.splice(i, 1);\n                else\n                    ++i;\n        for (var j = 0; j < /* initializes */ object.nestedArray.length; ++j) // recurse into the namespace\n            this._handleAdd(object._nestedArray[j]);\n        if (exposeRe.test(object.name))\n            object.parent[object.name] = object; // expose namespace as property of its parent\n    }\n\n    if (object instanceof Type || object instanceof Enum || object instanceof Field) {\n        // Only store types and enums for quick lookup during resolve.\n        this._fullyQualifiedObjects[object.fullName] = object;\n    }\n\n    // The above also adds uppercased (and thus conflict-free) nested types, services and enums as\n    // properties of namespaces just like static code does. This allows using a .d.ts generated for\n    // a static module with reflection-based solutions where the condition is met.\n};\n\n/**\n * Called when any object is removed from this root or its sub-namespaces.\n * @param {ReflectionObject} object Object removed\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleRemove = function _handleRemove(object) {\n    if (object instanceof Field) {\n\n        if (/* an extension field */ object.extend !== undefined) {\n            if (/* already handled */ object.extensionField) { // remove its sister field\n                object.extensionField.parent.remove(object.extensionField);\n                object.extensionField = null;\n            } else { // cancel the extension\n                var index = this.deferred.indexOf(object);\n                /* istanbul ignore else */\n                if (index > -1)\n                    this.deferred.splice(index, 1);\n            }\n        }\n\n    } else if (object instanceof Enum) {\n\n        if (exposeRe.test(object.name))\n            delete object.parent[object.name]; // unexpose enum values\n\n    } else if (object instanceof Namespace) {\n\n        for (var i = 0; i < /* initializes */ object.nestedArray.length; ++i) // recurse into the namespace\n            this._handleRemove(object._nestedArray[i]);\n\n        if (exposeRe.test(object.name))\n            delete object.parent[object.name]; // unexpose namespaces\n\n    }\n\n    delete this._fullyQualifiedObjects[object.fullName];\n};\n\n// Sets up cyclic dependencies (called in index-light)\nRoot._configure = function(Type_, parse_, common_) {\n    Type   = Type_;\n    parse  = parse_;\n    common = common_;\n};\n","\"use strict\";\n\n/**\n * Various utility functions.\n * @namespace\n */\nvar util = module.exports = require(\"./util/minimal\");\n\nvar roots = require(\"./roots\");\n\nvar Type, // cyclic\n    Enum;\n\nutil.codegen = require(\"@protobufjs/codegen\");\nutil.fetch   = require(\"@protobufjs/fetch\");\nutil.path    = require(\"@protobufjs/path\");\nutil.patterns = require(\"./util/patterns\");\n\nvar reservedRe = util.patterns.reservedRe,\n    unsafePropertyRe = util.patterns.unsafePropertyRe;\n\n/**\n * Node's fs module if available.\n * @type {Object.<string,*>}\n */\nutil.fs = util.inquire(\"fs\");\n\n/**\n * Checks a recursion depth.\n * @param {number|undefined} depth Depth of recursion\n * @returns {number} Depth of recursion\n * @throws {Error} If depth exceeds util.recursionLimit\n */\nutil.checkDepth = function checkDepth(depth) {\n    if (depth === undefined)\n        depth = 0;\n    if (depth > util.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    return depth;\n};\n\n/**\n * Converts an object's values to an array.\n * @param {Object.<string,*>} object Object to convert\n * @returns {Array.<*>} Converted array\n */\nutil.toArray = function toArray(object) {\n    if (object) {\n        var keys  = Object.keys(object),\n            array = new Array(keys.length),\n            index = 0;\n        while (index < keys.length)\n            array[index] = object[keys[index++]];\n        return array;\n    }\n    return [];\n};\n\n/**\n * Converts an array of keys immediately followed by their respective value to an object, omitting undefined values.\n * @param {Array.<*>} array Array to convert\n * @returns {Object.<string,*>} Converted object\n */\nutil.toObject = function toObject(array) {\n    var object = {},\n        index  = 0;\n    while (index < array.length) {\n        var key = array[index++],\n            val = array[index++];\n        if (val !== undefined)\n            object[key] = val;\n    }\n    return object;\n};\n\n/**\n * Tests whether the specified name is a reserved word in JS.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nutil.isReserved = function isReserved(name) {\n    return reservedRe.test(name);\n};\n\n/**\n * Returns a safe property accessor for the specified property name.\n * @param {string} prop Property name\n * @returns {string} Safe accessor\n */\nutil.safeProp = function safeProp(prop) {\n    if (!/^[$\\w_]+$/.test(prop) || reservedRe.test(prop))\n        return \"[\" + JSON.stringify(prop) + \"]\";\n    return \".\" + prop;\n};\n\n/**\n * Converts the first character of a string to upper case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.ucFirst = function ucFirst(str) {\n    return str.charAt(0).toUpperCase() + str.substring(1);\n};\n\nvar camelCaseRe = /_([a-z])/g;\n\n/**\n * Converts a string to camel case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.camelCase = function camelCase(str) {\n    return str.substring(0, 1)\n         + str.substring(1)\n               .replace(camelCaseRe, function($0, $1) { return $1.toUpperCase(); });\n};\n\n/**\n * Compares reflected fields by id.\n * @param {Field} a First field\n * @param {Field} b Second field\n * @returns {number} Comparison value\n */\nutil.compareFieldsById = function compareFieldsById(a, b) {\n    return a.id - b.id;\n};\n\n/**\n * Decorator helper for types (TypeScript).\n * @param {Constructor<T>} ctor Constructor function\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {Type} Reflected type\n * @template T extends Message<T>\n * @property {Root} root Decorators root\n */\nutil.decorateType = function decorateType(ctor, typeName) {\n\n    /* istanbul ignore if */\n    if (ctor.$type) {\n        if (typeName && ctor.$type.name !== typeName) {\n            util.decorateRoot.remove(ctor.$type);\n            ctor.$type.name = typeName;\n            util.decorateRoot.add(ctor.$type);\n        }\n        return ctor.$type;\n    }\n\n    /* istanbul ignore next */\n    if (!Type)\n        Type = require(\"./type\");\n\n    var type = new Type(typeName || ctor.name);\n    util.decorateRoot.add(type);\n    type.ctor = ctor; // sets up .encode, .decode etc.\n    Object.defineProperty(ctor, \"$type\", { value: type, enumerable: false });\n    Object.defineProperty(ctor.prototype, \"$type\", { value: type, enumerable: false });\n    return type;\n};\n\nvar decorateEnumIndex = 0;\n\n/**\n * Decorator helper for enums (TypeScript).\n * @param {Object} object Enum object\n * @returns {Enum} Reflected enum\n */\nutil.decorateEnum = function decorateEnum(object) {\n\n    /* istanbul ignore if */\n    if (object.$type)\n        return object.$type;\n\n    /* istanbul ignore next */\n    if (!Enum)\n        Enum = require(\"./enum\");\n\n    var enm = new Enum(\"Enum\" + decorateEnumIndex++, object);\n    util.decorateRoot.add(enm);\n    Object.defineProperty(object, \"$type\", { value: enm, enumerable: false });\n    return enm;\n};\n\n\n/**\n * Sets the value of a property by property path. If a value already exists, it is turned to an array\n * @param {Object.<string,*>} dst Destination object\n * @param {string} path dot '.' delimited path of the property to set\n * @param {Object} value the value to set\n * @param {boolean|undefined} [ifNotSet] Sets the option only if it isn't currently set\n * @returns {Object.<string,*>} Destination object\n */\nutil.setProperty = function setProperty(dst, path, value, ifNotSet) {\n    function setProp(dst, path, value) {\n        var part = path.shift();\n        if (unsafePropertyRe.test(part))\n            return dst;\n        if (path.length > 0) {\n            dst[part] = setProp(dst[part] || {}, path, value);\n        } else {\n            var prevValue = dst[part];\n            if (prevValue && ifNotSet)\n                return dst;\n            if (prevValue)\n                value = [].concat(prevValue).concat(value);\n            dst[part] = value;\n        }\n        return dst;\n    }\n\n    if (typeof dst !== \"object\")\n        throw TypeError(\"dst must be an object\");\n    if (!path)\n        throw TypeError(\"path must be specified\");\n\n    path = path.split(\".\");\n    return setProp(dst, path, value);\n};\n\n/**\n * Decorator root (TypeScript).\n * @name util.decorateRoot\n * @type {Root}\n * @readonly\n */\nObject.defineProperty(util, \"decorateRoot\", {\n    get: function() {\n        return roots[\"decorated\"] || (roots[\"decorated\"] = new (require(\"./root\"))());\n    }\n});\n","\"use strict\";\n\n/**\n * Common type constants.\n * @namespace\n */\nvar types = exports;\n\nvar util = require(\"./util\");\n\nvar s = [\n    \"double\",   // 0\n    \"float\",    // 1\n    \"int32\",    // 2\n    \"uint32\",   // 3\n    \"sint32\",   // 4\n    \"fixed32\",  // 5\n    \"sfixed32\", // 6\n    \"int64\",    // 7\n    \"uint64\",   // 8\n    \"sint64\",   // 9\n    \"fixed64\",  // 10\n    \"sfixed64\", // 11\n    \"bool\",     // 12\n    \"string\",   // 13\n    \"bytes\"     // 14\n];\n\nfunction bake(values, offset) {\n    var i = 0, o = Object.create(null);\n    offset |= 0;\n    while (i < values.length) o[s[i + offset]] = values[i++];\n    return o;\n}\n\n/**\n * Basic type wire types.\n * @type {Object.<string,number>}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n * @property {number} bytes=2 Ldelim wire type\n */\ntypes.basic = bake([\n    /* double   */ 1,\n    /* float    */ 5,\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 5,\n    /* sfixed32 */ 5,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1,\n    /* bool     */ 0,\n    /* string   */ 2,\n    /* bytes    */ 2\n]);\n\n/**\n * Basic type defaults.\n * @type {Object.<string,*>}\n * @const\n * @property {number} double=0 Double default\n * @property {number} float=0 Float default\n * @property {number} int32=0 Int32 default\n * @property {number} uint32=0 Uint32 default\n * @property {number} sint32=0 Sint32 default\n * @property {number} fixed32=0 Fixed32 default\n * @property {number} sfixed32=0 Sfixed32 default\n * @property {number} int64=0 Int64 default\n * @property {number} uint64=0 Uint64 default\n * @property {number} sint64=0 Sint32 default\n * @property {number} fixed64=0 Fixed64 default\n * @property {number} sfixed64=0 Sfixed64 default\n * @property {boolean} bool=false Bool default\n * @property {string} string=\"\" String default\n * @property {Array.<number>} bytes=Array(0) Bytes default\n * @property {null} message=null Message default\n */\ntypes.defaults = bake([\n    /* double   */ 0,\n    /* float    */ 0,\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 0,\n    /* sfixed32 */ 0,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 0,\n    /* sfixed64 */ 0,\n    /* bool     */ false,\n    /* string   */ \"\",\n    /* bytes    */ util.emptyArray,\n    /* message  */ null\n]);\n\n/**\n * Basic long type wire types.\n * @type {Object.<string,number>}\n * @const\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n */\ntypes.long = bake([\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1\n], 7);\n\n/**\n * Allowed types for map keys with their associated wire type.\n * @type {Object.<string,number>}\n * @const\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n */\ntypes.mapKey = bake([\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 5,\n    /* sfixed32 */ 5,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1,\n    /* bool     */ 0,\n    /* string   */ 2\n], 2);\n\n/**\n * Allowed types for packed repeated fields with their associated wire type.\n * @type {Object.<string,number>}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n */\ntypes.packed = bake([\n    /* double   */ 1,\n    /* float    */ 5,\n    /* int32    */ 0,\n    /* uint32   */ 0,\n    /* sint32   */ 0,\n    /* fixed32  */ 5,\n    /* sfixed32 */ 5,\n    /* int64    */ 0,\n    /* uint64   */ 0,\n    /* sint64   */ 0,\n    /* fixed64  */ 1,\n    /* sfixed64 */ 1,\n    /* bool     */ 0\n]);\n","\"use strict\";\nmodule.exports = Field;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Field.prototype = Object.create(ReflectionObject.prototype)).constructor = Field).className = \"Field\";\n\nvar Enum  = require(\"./enum\"),\n    types = require(\"./types\"),\n    util  = require(\"./util\");\n\nvar Type; // cyclic\n\nvar ruleRe = /^required|optional|repeated$/;\n\n/**\n * Constructs a new message field instance. Note that {@link MapField|map fields} have their own class.\n * @name Field\n * @classdesc Reflected message field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.<string,*>} [rule=\"optional\"] Field rule\n * @param {string|Object.<string,*>} [extend] Extended type if different from parent\n * @param {Object.<string,*>} [options] Declared options\n */\n\n/**\n * Constructs a field from a field descriptor.\n * @param {string} name Field name\n * @param {IField} json Field descriptor\n * @returns {Field} Created field\n * @throws {TypeError} If arguments are invalid\n */\nField.fromJSON = function fromJSON(name, json) {\n    var field = new Field(name, json.id, json.type, json.rule, json.extend, json.options, json.comment);\n    if (json.edition)\n        field._edition = json.edition;\n    field._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return field;\n};\n\n/**\n * Not an actual constructor. Use {@link Field} instead.\n * @classdesc Base class of all reflected message fields. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports FieldBase\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.<string,*>} [rule=\"optional\"] Field rule\n * @param {string|Object.<string,*>} [extend] Extended type if different from parent\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction Field(name, id, type, rule, extend, options, comment) {\n\n    if (util.isObject(rule)) {\n        comment = extend;\n        options = rule;\n        rule = extend = undefined;\n    } else if (util.isObject(extend)) {\n        comment = options;\n        options = extend;\n        extend = undefined;\n    }\n\n    ReflectionObject.call(this, name, options);\n\n    if (!util.isInteger(id) || id < 0)\n        throw TypeError(\"id must be a non-negative integer\");\n\n    if (!util.isString(type))\n        throw TypeError(\"type must be a string\");\n\n    if (rule !== undefined && !ruleRe.test(rule = rule.toString().toLowerCase()))\n        throw TypeError(\"rule must be a string rule\");\n\n    if (extend !== undefined && !util.isString(extend))\n        throw TypeError(\"extend must be a string\");\n\n    /**\n     * Field rule, if any.\n     * @type {string|undefined}\n     */\n    if (rule === \"proto3_optional\") {\n        rule = \"optional\";\n    }\n    this.rule = rule && rule !== \"optional\" ? rule : undefined; // toJSON\n\n    /**\n     * Field type.\n     * @type {string}\n     */\n    this.type = type; // toJSON\n\n    /**\n     * Unique field id.\n     * @type {number}\n     */\n    this.id = id; // toJSON, marker\n\n    /**\n     * Extended type if different from parent.\n     * @type {string|undefined}\n     */\n    this.extend = extend || undefined; // toJSON\n\n    /**\n     * Whether this field is repeated.\n     * @type {boolean}\n     */\n    this.repeated = rule === \"repeated\";\n\n    /**\n     * Whether this field is a map or not.\n     * @type {boolean}\n     */\n    this.map = false;\n\n    /**\n     * Message this field belongs to.\n     * @type {Type|null}\n     */\n    this.message = null;\n\n    /**\n     * OneOf this field belongs to, if any,\n     * @type {OneOf|null}\n     */\n    this.partOf = null;\n\n    /**\n     * The field type's default value.\n     * @type {*}\n     */\n    this.typeDefault = null;\n\n    /**\n     * The field's default value on prototypes.\n     * @type {*}\n     */\n    this.defaultValue = null;\n\n    /**\n     * Whether this field's value should be treated as a long.\n     * @type {boolean}\n     */\n    this.long = util.Long ? types.long[type] !== undefined : /* istanbul ignore next */ false;\n\n    /**\n     * Whether this field's value is a buffer.\n     * @type {boolean}\n     */\n    this.bytes = type === \"bytes\";\n\n    /**\n     * Resolved type if not a basic type.\n     * @type {Type|Enum|null}\n     */\n    this.resolvedType = null;\n\n    /**\n     * Sister-field within the extended type if a declaring extension field.\n     * @type {Field|null}\n     */\n    this.extensionField = null;\n\n    /**\n     * Sister-field within the declaring namespace if an extended field.\n     * @type {Field|null}\n     */\n    this.declaringField = null;\n\n    /**\n     * Comment for this field.\n     * @type {string|null}\n     */\n    this.comment = comment;\n}\n\n/**\n * Determines whether this field is required.\n * @name Field#required\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"required\", {\n    get: function() {\n        return this._features.field_presence === \"LEGACY_REQUIRED\";\n    }\n});\n\n/**\n * Determines whether this field is not required.\n * @name Field#optional\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"optional\", {\n    get: function() {\n        return !this.required;\n    }\n});\n\n/**\n * Determines whether this field uses tag-delimited encoding.  In proto2 this\n * corresponded to group syntax.\n * @name Field#delimited\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"delimited\", {\n    get: function() {\n        return this.resolvedType instanceof Type &&\n            this._features.message_encoding === \"DELIMITED\";\n    }\n});\n\n/**\n * Determines whether this field is packed. Only relevant when repeated.\n * @name Field#packed\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"packed\", {\n    get: function() {\n        return this._features.repeated_field_encoding === \"PACKED\";\n    }\n});\n\n/**\n * Determines whether this field tracks presence.\n * @name Field#hasPresence\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"hasPresence\", {\n    get: function() {\n        if (this.repeated || this.map) {\n            return false;\n        }\n        return this.partOf || // oneofs\n            this.declaringField || this.extensionField || // extensions\n            this._features.field_presence !== \"IMPLICIT\";\n    }\n});\n\n/**\n * @override\n */\nField.prototype.setOption = function setOption(name, value, ifNotSet) {\n    return ReflectionObject.prototype.setOption.call(this, name, value, ifNotSet);\n};\n\n/**\n * Field descriptor.\n * @interface IField\n * @property {string} [rule=\"optional\"] Field rule\n * @property {string} type Field type\n * @property {number} id Field id\n * @property {Object.<string,*>} [options] Field options\n */\n\n/**\n * Extension field descriptor.\n * @interface IExtensionField\n * @extends IField\n * @property {string} extend Extended type\n */\n\n/**\n * Converts this field to a field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IField} Field descriptor\n */\nField.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\" , this._editionToJSON(),\n        \"rule\"    , this.rule !== \"optional\" && this.rule || undefined,\n        \"type\"    , this.type,\n        \"id\"      , this.id,\n        \"extend\"  , this.extend,\n        \"options\" , this.options,\n        \"comment\" , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * Resolves this field's type references.\n * @returns {Field} `this`\n * @throws {Error} If any reference cannot be resolved\n */\nField.prototype.resolve = function resolve() {\n\n    if (this.resolved)\n        return this;\n\n    if ((this.typeDefault = types.defaults[this.type]) === undefined) { // if not a basic type, resolve it\n        this.resolvedType = (this.declaringField ? this.declaringField.parent : this.parent).lookupTypeOrEnum(this.type);\n        if (this.resolvedType instanceof Type)\n            this.typeDefault = null;\n        else // instanceof Enum\n            this.typeDefault = this.resolvedType.values[Object.keys(this.resolvedType.values)[0]]; // first defined\n    } else if (this.options && this.options.proto3_optional) {\n        // proto3 scalar value marked optional; should default to null\n        this.typeDefault = null;\n    }\n\n    // use explicitly set default value if present\n    if (this.options && this.options[\"default\"] != null) {\n        this.typeDefault = this.options[\"default\"];\n        if (this.resolvedType instanceof Enum && typeof this.typeDefault === \"string\")\n            this.typeDefault = this.resolvedType.values[this.typeDefault];\n    }\n\n    // remove unnecessary options\n    if (this.options) {\n        if (this.options.packed !== undefined && this.resolvedType && !(this.resolvedType instanceof Enum))\n            delete this.options.packed;\n        if (!Object.keys(this.options).length)\n            this.options = undefined;\n    }\n\n    // convert to internal data type if necesssary\n    if (this.long) {\n        this.typeDefault = util.Long.fromNumber(this.typeDefault, this.type.charAt(0) === \"u\");\n\n        /* istanbul ignore else */\n        if (Object.freeze)\n            Object.freeze(this.typeDefault); // long instances are meant to be immutable anyway (i.e. use small int cache that even requires it)\n\n    } else if (this.bytes && typeof this.typeDefault === \"string\") {\n        var buf;\n        if (util.base64.test(this.typeDefault))\n            util.base64.decode(this.typeDefault, buf = util.newBuffer(util.base64.length(this.typeDefault)), 0);\n        else\n            util.utf8.write(this.typeDefault, buf = util.newBuffer(util.utf8.length(this.typeDefault)), 0);\n        this.typeDefault = buf;\n    }\n\n    // take special care of maps and repeated fields\n    if (this.map)\n        this.defaultValue = util.emptyObject;\n    else if (this.repeated)\n        this.defaultValue = util.emptyArray;\n    else\n        this.defaultValue = this.typeDefault;\n\n    // ensure proper value on prototype\n    if (this.parent instanceof Type)\n        this.parent.ctor.prototype[this.name] = this.defaultValue;\n\n    return ReflectionObject.prototype.resolve.call(this);\n};\n\n/**\n * Infers field features from legacy syntax that may have been specified differently.\n * in older editions.\n * @param {string|undefined} edition The edition this proto is on, or undefined if pre-editions\n * @returns {object} The feature values to override\n */\nField.prototype._inferLegacyProtoFeatures = function _inferLegacyProtoFeatures(edition) {\n    if (edition !== \"proto2\" && edition !== \"proto3\") {\n        return {};\n    }\n\n    var features = {};\n\n    if (this.rule === \"required\") {\n        features.field_presence = \"LEGACY_REQUIRED\";\n    }\n    if (this.parent && types.defaults[this.type] === undefined) {\n        // We can't use resolvedType because types may not have been resolved yet.  However,\n        // legacy groups are always in the same scope as the field so we don't have to do a\n        // full scan of the tree.\n        var type = this.parent.get(this.type.split(\".\").pop());\n        if (type && type instanceof Type && type.group) {\n            features.message_encoding = \"DELIMITED\";\n        }\n    }\n    if (this.getOption(\"packed\") === true) {\n        features.repeated_field_encoding = \"PACKED\";\n    } else if (this.getOption(\"packed\") === false) {\n        features.repeated_field_encoding = \"EXPANDED\";\n    }\n    return features;\n};\n\n/**\n * @override\n */\nField.prototype._resolveFeatures = function _resolveFeatures(edition) {\n    return ReflectionObject.prototype._resolveFeatures.call(this, this._edition || edition);\n};\n\n/**\n * Decorator function as returned by {@link Field.d} and {@link MapField.d} (TypeScript).\n * @typedef FieldDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} fieldName Field name\n * @returns {undefined}\n */\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"string\"|\"bool\"|\"bytes\"|Object} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @param {T} [defaultValue] Default value\n * @returns {FieldDecorator} Decorator function\n * @template T extends number | number[] | Long | Long[] | string | string[] | boolean | boolean[] | Uint8Array | Uint8Array[] | Buffer | Buffer[]\n */\nField.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) {\n\n    // submessage: decorate the submessage and use its name as the type\n    if (typeof fieldType === \"function\")\n        fieldType = util.decorateType(fieldType).name;\n\n    // enum reference: create a reflected copy of the enum and keep reuseing it\n    else if (fieldType && typeof fieldType === \"object\")\n        fieldType = util.decorateEnum(fieldType).name;\n\n    return function fieldDecorator(prototype, fieldName) {\n        util.decorateType(prototype.constructor)\n            .add(new Field(fieldName, fieldId, fieldType, fieldRule, { \"default\": defaultValue }));\n    };\n};\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {Constructor<T>|string} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @returns {FieldDecorator} Decorator function\n * @template T extends Message<T>\n * @variation 2\n */\n// like Field.d but without a default value\n\n// Sets up cyclic dependencies (called in index-light)\nField._configure = function configure(Type_) {\n    Type = Type_;\n};\n","\"use strict\";\nmodule.exports = OneOf;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((OneOf.prototype = Object.create(ReflectionObject.prototype)).constructor = OneOf).className = \"OneOf\";\n\nvar Field = require(\"./field\"),\n    util  = require(\"./util\");\n\n/**\n * Constructs a new oneof instance.\n * @classdesc Reflected oneof.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Oneof name\n * @param {string[]|Object.<string,*>} [fieldNames] Field names\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction OneOf(name, fieldNames, options, comment) {\n    if (!Array.isArray(fieldNames)) {\n        options = fieldNames;\n        fieldNames = undefined;\n    }\n    ReflectionObject.call(this, name, options);\n\n    /* istanbul ignore if */\n    if (!(fieldNames === undefined || Array.isArray(fieldNames)))\n        throw TypeError(\"fieldNames must be an Array\");\n\n    /**\n     * Field names that belong to this oneof.\n     * @type {string[]}\n     */\n    this.oneof = fieldNames || []; // toJSON, marker\n\n    /**\n     * Fields that belong to this oneof as an array for iteration.\n     * @type {Field[]}\n     * @readonly\n     */\n    this.fieldsArray = []; // declared readonly for conformance, possibly not yet added to parent\n\n    /**\n     * Comment for this field.\n     * @type {string|null}\n     */\n    this.comment = comment;\n}\n\n/**\n * Oneof descriptor.\n * @interface IOneOf\n * @property {Array.<string>} oneof Oneof field names\n * @property {Object.<string,*>} [options] Oneof options\n */\n\n/**\n * Constructs a oneof from a oneof descriptor.\n * @param {string} name Oneof name\n * @param {IOneOf} json Oneof descriptor\n * @returns {OneOf} Created oneof\n * @throws {TypeError} If arguments are invalid\n */\nOneOf.fromJSON = function fromJSON(name, json) {\n    return new OneOf(name, json.oneof, json.options, json.comment);\n};\n\n/**\n * Converts this oneof to a oneof descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IOneOf} Oneof descriptor\n */\nOneOf.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"options\" , this.options,\n        \"oneof\"   , this.oneof,\n        \"comment\" , keepComments ? this.comment : undefined\n    ]);\n};\n\n/**\n * Adds the fields of the specified oneof to the parent if not already done so.\n * @param {OneOf} oneof The oneof\n * @returns {undefined}\n * @inner\n * @ignore\n */\nfunction addFieldsToParent(oneof) {\n    if (oneof.parent)\n        for (var i = 0; i < oneof.fieldsArray.length; ++i)\n            if (!oneof.fieldsArray[i].parent)\n                oneof.parent.add(oneof.fieldsArray[i]);\n}\n\n/**\n * Adds a field to this oneof and removes it from its current parent, if any.\n * @param {Field} field Field to add\n * @returns {OneOf} `this`\n */\nOneOf.prototype.add = function add(field) {\n\n    /* istanbul ignore if */\n    if (!(field instanceof Field))\n        throw TypeError(\"field must be a Field\");\n\n    if (field.parent && field.parent !== this.parent)\n        field.parent.remove(field);\n    this.oneof.push(field.name);\n    this.fieldsArray.push(field);\n    field.partOf = this; // field.parent remains null\n    addFieldsToParent(this);\n    return this;\n};\n\n/**\n * Removes a field from this oneof and puts it back to the oneof's parent.\n * @param {Field} field Field to remove\n * @returns {OneOf} `this`\n */\nOneOf.prototype.remove = function remove(field) {\n\n    /* istanbul ignore if */\n    if (!(field instanceof Field))\n        throw TypeError(\"field must be a Field\");\n\n    var index = this.fieldsArray.indexOf(field);\n\n    /* istanbul ignore if */\n    if (index < 0)\n        throw Error(field + \" is not a member of \" + this);\n\n    this.fieldsArray.splice(index, 1);\n    index = this.oneof.indexOf(field.name);\n\n    /* istanbul ignore else */\n    if (index > -1) // theoretical\n        this.oneof.splice(index, 1);\n\n    field.partOf = null;\n    return this;\n};\n\n/**\n * @override\n */\nOneOf.prototype.onAdd = function onAdd(parent) {\n    ReflectionObject.prototype.onAdd.call(this, parent);\n    var self = this;\n    // Collect present fields\n    for (var i = 0; i < this.oneof.length; ++i) {\n        var field = parent.get(this.oneof[i]);\n        if (field && !field.partOf) {\n            field.partOf = self;\n            self.fieldsArray.push(field);\n        }\n    }\n    // Add not yet present fields\n    addFieldsToParent(this);\n};\n\n/**\n * @override\n */\nOneOf.prototype.onRemove = function onRemove(parent) {\n    for (var i = 0, field; i < this.fieldsArray.length; ++i)\n        if ((field = this.fieldsArray[i]).parent)\n            field.parent.remove(field);\n    ReflectionObject.prototype.onRemove.call(this, parent);\n};\n\n/**\n * Determines whether this field corresponds to a synthetic oneof created for\n * a proto3 optional field.  No behavioral logic should depend on this, but it\n * can be relevant for reflection.\n * @name OneOf#isProto3Optional\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(OneOf.prototype, \"isProto3Optional\", {\n    get: function() {\n        if (this.fieldsArray == null || this.fieldsArray.length !== 1) {\n            return false;\n        }\n\n        var field = this.fieldsArray[0];\n        return field.options != null && field.options[\"proto3_optional\"] === true;\n    }\n});\n\n/**\n * Decorator function as returned by {@link OneOf.d} (TypeScript).\n * @typedef OneOfDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} oneofName OneOf name\n * @returns {undefined}\n */\n\n/**\n * OneOf decorator (TypeScript).\n * @function\n * @param {...string} fieldNames Field names\n * @returns {OneOfDecorator} Decorator function\n * @template T extends string\n */\nOneOf.d = function decorateOneOf() {\n    var fieldNames = new Array(arguments.length),\n        index = 0;\n    while (index < arguments.length)\n        fieldNames[index] = arguments[index++];\n    return function oneOfDecorator(prototype, oneofName) {\n        util.decorateType(prototype.constructor)\n            .add(new OneOf(oneofName, fieldNames));\n        Object.defineProperty(prototype, oneofName, {\n            get: util.oneOfGetter(fieldNames),\n            set: util.oneOfSetter(fieldNames)\n        });\n    };\n};\n","\"use strict\";\nmodule.exports = ReflectionObject;\n\nReflectionObject.className = \"ReflectionObject\";\n\nconst OneOf = require(\"./oneof\");\nvar util = require(\"./util\");\n\nvar Root; // cyclic\n\n/* eslint-disable no-warning-comments */\n// TODO: Replace with embedded proto.\nvar editions2023Defaults = {enum_type: \"OPEN\", field_presence: \"EXPLICIT\", json_format: \"ALLOW\", message_encoding: \"LENGTH_PREFIXED\", repeated_field_encoding: \"PACKED\", utf8_validation: \"VERIFY\"};\nvar proto2Defaults = {enum_type: \"CLOSED\", field_presence: \"EXPLICIT\", json_format: \"LEGACY_BEST_EFFORT\", message_encoding: \"LENGTH_PREFIXED\", repeated_field_encoding: \"EXPANDED\", utf8_validation: \"NONE\"};\nvar proto3Defaults = {enum_type: \"OPEN\", field_presence: \"IMPLICIT\", json_format: \"ALLOW\", message_encoding: \"LENGTH_PREFIXED\", repeated_field_encoding: \"PACKED\", utf8_validation: \"VERIFY\"};\n\n/**\n * Constructs a new reflection object instance.\n * @classdesc Base class of all reflection objects.\n * @constructor\n * @param {string} name Object name\n * @param {Object.<string,*>} [options] Declared options\n * @abstract\n */\nfunction ReflectionObject(name, options) {\n\n    if (!util.isString(name))\n        throw TypeError(\"name must be a string\");\n\n    if (options && !util.isObject(options))\n        throw TypeError(\"options must be an object\");\n\n    /**\n     * Options.\n     * @type {Object.<string,*>|undefined}\n     */\n    this.options = options; // toJSON\n\n    /**\n     * Parsed Options.\n     * @type {Array.<Object.<string,*>>|undefined}\n     */\n    this.parsedOptions = null;\n\n    /**\n     * Unique name within its namespace.\n     * @type {string}\n     */\n    this.name = name;\n\n    /**\n     * The edition specified for this object.  Only relevant for top-level objects.\n     * @type {string}\n     * @private\n     */\n    this._edition = null;\n\n    /**\n     * The default edition to use for this object if none is specified.  For legacy reasons,\n     * this is proto2 except in the JSON parsing case where it was proto3.\n     * @type {string}\n     * @private\n     */\n    this._defaultEdition = \"proto2\";\n\n    /**\n     * Resolved Features.\n     * @type {object}\n     * @private\n     */\n    this._features = {};\n\n    /**\n     * Whether or not features have been resolved.\n     * @type {boolean}\n     * @private\n     */\n    this._featuresResolved = false;\n\n    /**\n     * Parent namespace.\n     * @type {Namespace|null}\n     */\n    this.parent = null;\n\n    /**\n     * Whether already resolved or not.\n     * @type {boolean}\n     */\n    this.resolved = false;\n\n    /**\n     * Comment text, if any.\n     * @type {string|null}\n     */\n    this.comment = null;\n\n    /**\n     * Defining file name.\n     * @type {string|null}\n     */\n    this.filename = null;\n}\n\nObject.defineProperties(ReflectionObject.prototype, {\n\n    /**\n     * Reference to the root namespace.\n     * @name ReflectionObject#root\n     * @type {Root}\n     * @readonly\n     */\n    root: {\n        get: function() {\n            var ptr = this;\n            while (ptr.parent !== null)\n                ptr = ptr.parent;\n            return ptr;\n        }\n    },\n\n    /**\n     * Full name including leading dot.\n     * @name ReflectionObject#fullName\n     * @type {string}\n     * @readonly\n     */\n    fullName: {\n        get: function() {\n            var path = [ this.name ],\n                ptr = this.parent;\n            while (ptr) {\n                path.unshift(ptr.name);\n                ptr = ptr.parent;\n            }\n            return path.join(\".\");\n        }\n    }\n});\n\n/**\n * Converts this reflection object to its descriptor representation.\n * @returns {Object.<string,*>} Descriptor\n * @abstract\n */\nReflectionObject.prototype.toJSON = /* istanbul ignore next */ function toJSON() {\n    throw Error(); // not implemented, shouldn't happen\n};\n\n/**\n * Called when this object is added to a parent.\n * @param {ReflectionObject} parent Parent added to\n * @returns {undefined}\n */\nReflectionObject.prototype.onAdd = function onAdd(parent) {\n    if (this.parent && this.parent !== parent)\n        this.parent.remove(this);\n    this.parent = parent;\n    this.resolved = false;\n    var root = parent.root;\n    if (root instanceof Root)\n        root._handleAdd(this);\n};\n\n/**\n * Called when this object is removed from a parent.\n * @param {ReflectionObject} parent Parent removed from\n * @returns {undefined}\n */\nReflectionObject.prototype.onRemove = function onRemove(parent) {\n    var root = parent.root;\n    if (root instanceof Root)\n        root._handleRemove(this);\n    this.parent = null;\n    this.resolved = false;\n};\n\n/**\n * Resolves this objects type references.\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.resolve = function resolve() {\n    if (this.resolved)\n        return this;\n    if (this.root instanceof Root)\n        this.resolved = true; // only if part of a root\n    return this;\n};\n\n/**\n * Resolves this objects editions features.\n * @param {string} edition The edition we're currently resolving for.\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) {\n    return this._resolveFeatures(this._edition || edition);\n};\n\n/**\n * Resolves child features from parent features\n * @param {string} edition The edition we're currently resolving for.\n * @returns {undefined}\n */\nReflectionObject.prototype._resolveFeatures = function _resolveFeatures(edition) {\n    if (this._featuresResolved) {\n        return;\n    }\n\n    var defaults = {};\n\n    /* istanbul ignore if */\n    if (!edition) {\n        throw new Error(\"Unknown edition for \" + this.fullName);\n    }\n\n    var protoFeatures = Object.assign(this.options ? Object.assign({},  this.options.features) : {},\n        this._inferLegacyProtoFeatures(edition));\n\n    if (this._edition) {\n        // For a namespace marked with a specific edition, reset defaults.\n        /* istanbul ignore else */\n        if (edition === \"proto2\") {\n            defaults = Object.assign({}, proto2Defaults);\n        } else if (edition === \"proto3\") {\n            defaults = Object.assign({}, proto3Defaults);\n        } else if (edition === \"2023\") {\n            defaults = Object.assign({}, editions2023Defaults);\n        } else {\n            throw new Error(\"Unknown edition: \" + edition);\n        }\n        this._features = Object.assign(defaults, protoFeatures || {});\n        this._featuresResolved = true;\n        return;\n    }\n\n    // fields in Oneofs aren't actually children of them, so we have to\n    // special-case it\n    /* istanbul ignore else */\n    if (this.partOf instanceof OneOf) {\n        var lexicalParentFeaturesCopy = Object.assign({}, this.partOf._features);\n        this._features = Object.assign(lexicalParentFeaturesCopy, protoFeatures || {});\n    } else if (this.declaringField) {\n        // Skip feature resolution of sister fields.\n    } else if (this.parent) {\n        var parentFeaturesCopy = Object.assign({}, this.parent._features);\n        this._features = Object.assign(parentFeaturesCopy, protoFeatures || {});\n    } else {\n        throw new Error(\"Unable to find a parent for \" + this.fullName);\n    }\n    if (this.extensionField) {\n        // Sister fields should have the same features as their extensions.\n        this.extensionField._features = this._features;\n    }\n    this._featuresResolved = true;\n};\n\n/**\n * Infers features from legacy syntax that may have been specified differently.\n * in older editions.\n * @param {string|undefined} edition The edition this proto is on, or undefined if pre-editions\n * @returns {object} The feature values to override\n */\nReflectionObject.prototype._inferLegacyProtoFeatures = function _inferLegacyProtoFeatures(/*edition*/) {\n    return {};\n};\n\n/**\n * Gets an option value.\n * @param {string} name Option name\n * @returns {*} Option value or `undefined` if not set\n */\nReflectionObject.prototype.getOption = function getOption(name) {\n    if (this.options)\n        return this.options[name];\n    return undefined;\n};\n\n/**\n * Sets an option.\n * @param {string} name Option name\n * @param {*} value Option value\n * @param {boolean|undefined} [ifNotSet] Sets the option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOption = function setOption(name, value, ifNotSet) {\n    if (name === \"__proto__\")\n        return this;\n    if (!this.options)\n        this.options = {};\n    if (/^features\\./.test(name)) {\n        util.setProperty(this.options, name, value, ifNotSet);\n    } else if (!ifNotSet || this.options[name] === undefined) {\n        if (this.getOption(name) !== value) this.resolved = false;\n        this.options[name] = value;\n    }\n\n    return this;\n};\n\n/**\n * Sets a parsed option.\n * @param {string} name parsed Option name\n * @param {*} value Option value\n * @param {string} propName dot '.' delimited full path of property within the option to set. if undefined\\empty, will add a new option with that value\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setParsedOption = function setParsedOption(name, value, propName) {\n    if (name === \"__proto__\")\n        return this;\n    if (!this.parsedOptions) {\n        this.parsedOptions = [];\n    }\n    var parsedOptions = this.parsedOptions;\n    if (propName) {\n        // If setting a sub property of an option then try to merge it\n        // with an existing option\n        var opt = parsedOptions.find(function (opt) {\n            return Object.prototype.hasOwnProperty.call(opt, name);\n        });\n        if (opt) {\n            // If we found an existing option - just merge the property value\n            // (If it's a feature, will just write over)\n            var newValue = opt[name];\n            util.setProperty(newValue, propName, value);\n        } else {\n            // otherwise, create a new option, set its property and add it to the list\n            opt = {};\n            opt[name] = util.setProperty({}, propName, value);\n            parsedOptions.push(opt);\n        }\n    } else {\n        // Always create a new option when setting the value of the option itself\n        var newOpt = {};\n        newOpt[name] = value;\n        parsedOptions.push(newOpt);\n    }\n\n    return this;\n};\n\n/**\n * Sets multiple options.\n * @param {Object.<string,*>} options Options to set\n * @param {boolean} [ifNotSet] Sets an option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOptions = function setOptions(options, ifNotSet) {\n    if (options)\n        for (var keys = Object.keys(options), i = 0; i < keys.length; ++i)\n            this.setOption(keys[i], options[keys[i]], ifNotSet);\n    return this;\n};\n\n/**\n * Converts this instance to its string representation.\n * @returns {string} Class name[, space, full name]\n */\nReflectionObject.prototype.toString = function toString() {\n    var className = this.constructor.className,\n        fullName  = this.fullName;\n    if (fullName.length)\n        return className + \" \" + fullName;\n    return className;\n};\n\n/**\n * Converts the edition this object is pinned to for JSON format.\n * @returns {string|undefined} The edition string for JSON representation\n */\nReflectionObject.prototype._editionToJSON = function _editionToJSON() {\n    if (!this._edition || this._edition === \"proto3\") {\n        // Avoid emitting proto3 since we need to default to it for backwards\n        // compatibility anyway.\n        return undefined;\n    }\n    return this._edition;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nReflectionObject._configure = function(Root_) {\n    Root = Root_;\n};\n","\"use strict\";\nmodule.exports = Enum;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Enum.prototype = Object.create(ReflectionObject.prototype)).constructor = Enum).className = \"Enum\";\n\nvar Namespace = require(\"./namespace\"),\n    util = require(\"./util\");\n\n/**\n * Constructs a new enum instance.\n * @classdesc Reflected enum.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {Object.<string,number>} [values] Enum values as an object, by name\n * @param {Object.<string,*>} [options] Declared options\n * @param {string} [comment] The comment for this enum\n * @param {Object.<string,string>} [comments] The value comments for this enum\n * @param {Object.<string,Object<string,*>>|undefined} [valuesOptions] The value options for this enum\n */\nfunction Enum(name, values, options, comment, comments, valuesOptions) {\n    ReflectionObject.call(this, name, options);\n\n    if (values && typeof values !== \"object\")\n        throw TypeError(\"values must be an object\");\n\n    /**\n     * Enum values by id.\n     * @type {Object.<number,string>}\n     */\n    this.valuesById = {};\n\n    /**\n     * Enum values by name.\n     * @type {Object.<string,number>}\n     */\n    this.values = Object.create(this.valuesById); // toJSON, marker\n\n    /**\n     * Enum comment text.\n     * @type {string|null}\n     */\n    this.comment = comment;\n\n    /**\n     * Value comment texts, if any.\n     * @type {Object.<string,string>}\n     */\n    this.comments = comments || {};\n\n    /**\n     * Values options, if any\n     * @type {Object<string, Object<string, *>>|undefined}\n     */\n    this.valuesOptions = valuesOptions;\n\n    /**\n     * Resolved values features, if any\n     * @type {Object<string, Object<string, *>>|undefined}\n     */\n    this._valuesFeatures = {};\n\n    /**\n     * Reserved ranges, if any.\n     * @type {Array.<number[]|string>}\n     */\n    this.reserved = undefined; // toJSON\n\n    // Note that values inherit valuesById on their prototype which makes them a TypeScript-\n    // compatible enum. This is used by pbts to write actual enum definitions that work for\n    // static and reflection code alike instead of emitting generic object definitions.\n\n    if (values)\n        for (var keys = Object.keys(values), i = 0; i < keys.length; ++i)\n            if (keys[i] !== \"__proto__\" && typeof values[keys[i]] === \"number\") // use forward entries only\n                this.valuesById[ this.values[keys[i]] = values[keys[i]] ] = keys[i];\n}\n\n/**\n * @override\n */\nEnum.prototype._resolveFeatures = function _resolveFeatures(edition) {\n    edition = this._edition || edition;\n    ReflectionObject.prototype._resolveFeatures.call(this, edition);\n\n    Object.keys(this.values).forEach(key => {\n        var parentFeaturesCopy = Object.assign({}, this._features);\n        this._valuesFeatures[key] = Object.assign(parentFeaturesCopy, this.valuesOptions && this.valuesOptions[key] && this.valuesOptions[key].features);\n    });\n\n    return this;\n};\n\n/**\n * Enum descriptor.\n * @interface IEnum\n * @property {Object.<string,number>} values Enum values\n * @property {Object.<string,*>} [options] Enum options\n */\n\n/**\n * Constructs an enum from an enum descriptor.\n * @param {string} name Enum name\n * @param {IEnum} json Enum descriptor\n * @returns {Enum} Created enum\n * @throws {TypeError} If arguments are invalid\n */\nEnum.fromJSON = function fromJSON(name, json) {\n    var enm = new Enum(name, json.values, json.options, json.comment, json.comments);\n    enm.reserved = json.reserved;\n    if (json.edition)\n        enm._edition = json.edition;\n    enm._defaultEdition = \"proto3\";  // For backwards-compatibility.\n    return enm;\n};\n\n/**\n * Converts this enum to an enum descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IEnum} Enum descriptor\n */\nEnum.prototype.toJSON = function toJSON(toJSONOptions) {\n    var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n    return util.toObject([\n        \"edition\"       , this._editionToJSON(),\n        \"options\"       , this.options,\n        \"valuesOptions\" , this.valuesOptions,\n        \"values\"        , this.values,\n        \"reserved\"      , this.reserved && this.reserved.length ? this.reserved : undefined,\n        \"comment\"       , keepComments ? this.comment : undefined,\n        \"comments\"      , keepComments ? this.comments : undefined\n    ]);\n};\n\n/**\n * Adds a value to this enum.\n * @param {string} name Value name\n * @param {number} id Value id\n * @param {string} [comment] Comment, if any\n * @param {Object.<string, *>|undefined} [options] Options, if any\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a value with this name or id\n */\nEnum.prototype.add = function add(name, id, comment, options) {\n    // utilized by the parser but not by .fromJSON\n\n    if (!util.isString(name))\n        throw TypeError(\"name must be a string\");\n\n    if (!util.isInteger(id))\n        throw TypeError(\"id must be an integer\");\n\n    if (name === \"__proto__\")\n        return this;\n\n    if (this.values[name] !== undefined)\n        throw Error(\"duplicate name '\" + name + \"' in \" + this);\n\n    if (this.isReservedId(id))\n        throw Error(\"id \" + id + \" is reserved in \" + this);\n\n    if (this.isReservedName(name))\n        throw Error(\"name '\" + name + \"' is reserved in \" + this);\n\n    if (this.valuesById[id] !== undefined) {\n        if (!(this.options && this.options.allow_alias))\n            throw Error(\"duplicate id \" + id + \" in \" + this);\n        this.values[name] = id;\n    } else\n        this.valuesById[this.values[name] = id] = name;\n\n    if (options) {\n        if (this.valuesOptions === undefined)\n            this.valuesOptions = {};\n        this.valuesOptions[name] = options || null;\n    }\n\n    this.comments[name] = comment || null;\n    return this;\n};\n\n/**\n * Removes a value from this enum\n * @param {string} name Value name\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `name` is not a name of this enum\n */\nEnum.prototype.remove = function remove(name) {\n\n    if (!util.isString(name))\n        throw TypeError(\"name must be a string\");\n\n    var val = this.values[name];\n    if (val == null)\n        throw Error(\"name '\" + name + \"' does not exist in \" + this);\n\n    delete this.valuesById[val];\n    delete this.values[name];\n    delete this.comments[name];\n    if (this.valuesOptions)\n        delete this.valuesOptions[name];\n\n    return this;\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedId = function isReservedId(id) {\n    return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedName = function isReservedName(name) {\n    return Namespace.isReservedName(this.reserved, name);\n};\n","\"use strict\";\nmodule.exports = encoder;\n\nvar Enum     = require(\"./enum\"),\n    types    = require(\"./types\"),\n    util     = require(\"./util\");\n\n/**\n * Generates a partial message type encoder.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genTypePartial(gen, field, fieldIndex, ref) {\n    return field.delimited\n        ? gen(\"types[%i].encode(%s,w.uint32(%i)).uint32(%i)\", fieldIndex, ref, (field.id << 3 | 3) >>> 0, (field.id << 3 | 4) >>> 0)\n        : gen(\"types[%i].encode(%s,w.uint32(%i).fork()).ldelim()\", fieldIndex, ref, (field.id << 3 | 2) >>> 0);\n}\n\n/**\n * Generates an encoder specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction encoder(mtype) {\n    /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n    var gen = util.codegen([\"m\", \"w\"], mtype.name + \"$encode\")\n    (\"if(!w)\")\n        (\"w=Writer.create()\");\n\n    var i, ref;\n\n    // \"when a message is serialized its known fields should be written sequentially by field number\"\n    var fields = /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById);\n\n    for (var i = 0; i < fields.length; ++i) {\n        var field    = fields[i].resolve(),\n            index    = mtype._fieldsArray.indexOf(field),\n            type     = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n            wireType = types.basic[type];\n            ref      = \"m\" + util.safeProp(field.name);\n\n        // Map fields\n        if (field.map) {\n            gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)){\", ref, field.name) // !== undefined && !== null\n        (\"for(var ks=Object.keys(%s),i=0;i<ks.length;++i){\", ref)\n            (\"w.uint32(%i).fork().uint32(%i).%s(ks[i])\", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType], field.keyType);\n            if (wireType === undefined) gen\n            (\"types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()\", index, ref); // can't be groups\n            else gen\n            (\".uint32(%i).%s(%s[ks[i]]).ldelim()\", 16 | wireType, type, ref);\n            gen\n        (\"}\")\n    (\"}\");\n\n            // Repeated fields\n        } else if (field.repeated) { gen\n    (\"if(%s!=null&&%s.length){\", ref, ref); // !== undefined && !== null\n\n            // Packed repeated\n            if (field.packed && types.packed[type] !== undefined) { gen\n\n        (\"w.uint32(%i).fork()\", (field.id << 3 | 2) >>> 0)\n        (\"for(var i=0;i<%s.length;++i)\", ref)\n            (\"w.%s(%s[i])\", type, ref)\n        (\"w.ldelim()\");\n\n            // Non-packed\n            } else { gen\n\n        (\"for(var i=0;i<%s.length;++i)\", ref);\n                if (wireType === undefined)\n            genTypePartial(gen, field, index, ref + \"[i]\");\n                else gen\n            (\"w.uint32(%i).%s(%s[i])\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n            } gen\n    (\"}\");\n\n        // Non-repeated\n        } else {\n            if (field.optional) gen\n    (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j))\", ref, field.name); // !== undefined && !== null\n\n            if (wireType === undefined)\n        genTypePartial(gen, field, index, ref);\n            else gen\n        (\"w.uint32(%i).%s(%s)\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n        }\n    }\n\n    return gen\n    (\"return w\");\n    /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n","\"use strict\";\nvar protobuf = module.exports = require(\"./index-minimal\");\n\nprotobuf.build = \"light\";\n\n/**\n * A node-style callback as used by {@link load} and {@link Root#load}.\n * @typedef LoadCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Root} [root] Root, if there hasn't been an error\n * @returns {undefined}\n */\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} root Root namespace, defaults to create a new one if omitted.\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n */\nfunction load(filename, root, callback) {\n    if (typeof root === \"function\") {\n        callback = root;\n        root = new protobuf.Root();\n    } else if (!root)\n        root = new protobuf.Root();\n    return root.load(filename, callback);\n}\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and returns a promise.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Promise<Root>} Promise\n * @see {@link Root#load}\n * @variation 3\n */\n// function load(filename:string, [root:Root]):Promise<Root>\n\nprotobuf.load = load;\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into a common root namespace (node only).\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n * @see {@link Root#loadSync}\n */\nfunction loadSync(filename, root) {\n    if (!root)\n        root = new protobuf.Root();\n    return root.loadSync(filename);\n}\n\nprotobuf.loadSync = loadSync;\n\n// Serialization\nprotobuf.encoder          = require(\"./encoder\");\nprotobuf.decoder          = require(\"./decoder\");\nprotobuf.verifier         = require(\"./verifier\");\nprotobuf.converter        = require(\"./converter\");\n\n// Reflection\nprotobuf.ReflectionObject = require(\"./object\");\nprotobuf.Namespace        = require(\"./namespace\");\nprotobuf.Root             = require(\"./root\");\nprotobuf.Enum             = require(\"./enum\");\nprotobuf.Type             = require(\"./type\");\nprotobuf.Field            = require(\"./field\");\nprotobuf.OneOf            = require(\"./oneof\");\nprotobuf.MapField         = require(\"./mapfield\");\nprotobuf.Service          = require(\"./service\");\nprotobuf.Method           = require(\"./method\");\n\n// Runtime\nprotobuf.Message          = require(\"./message\");\nprotobuf.wrappers         = require(\"./wrappers\");\n\n// Utility\nprotobuf.types            = require(\"./types\");\nprotobuf.util             = require(\"./util\");\n\n// Set up possibly cyclic reflection dependencies\nprotobuf.ReflectionObject._configure(protobuf.Root);\nprotobuf.Namespace._configure(protobuf.Type, protobuf.Service, protobuf.Enum);\nprotobuf.Root._configure(protobuf.Type);\nprotobuf.Field._configure(protobuf.Type);\n","// light library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-light\");","// Properties used internally by protobufjs on Namespace/ReflectionObject instances.\n// A protobuf package component that happens to share one of these names must not be\n// promoted to a direct property, or it would corrupt protobufjs's internal state.\n// (Such types are still reachable via root.lookup() or root.nested traversal.)\nconst ROOT_PROPS = new Set([\n  'options',\n  'parsedOptions',\n  'name',\n  'parent',\n  'resolved',\n  'comment',\n  'filename',\n  'nested',\n  '_nestedArray',\n]);\n\n/**\n * Create a version of `root` with non-nested namespaces to match the generated types.\n * For more information, see:\n * https://github.com/temporalio/sdk-typescript/blob/main/docs/protobuf-libraries.md#current-solution\n * @param root Generated by `pbjs -t json-module -w commonjs -o json-module.js *.proto`\n * @returns A new patched `root`\n */\nexport function patchProtobufRoot<T extends Record<string, unknown>>(root: T): T {\n  const patched = _patchProtobufRoot(root);\n\n  // Protobufjs >=7.5.2 added a fast-path cache in Namespace#lookup() that accesses\n  // `this.root._fullyQualifiedObjects`. The `root` accessor is defined as a non-enumerable\n  // getter on `ReflectionObject.prototype`, so it is not copied by `for...in` loops.\n  // When the patched root is imported via `import * as proto from '@temporalio/proto'`,\n  // TypeScript's `__importStar` helper wraps the CJS module in a plain object by iterating\n  // own enumerable properties with `for...in` + `hasOwnProperty`. Because `root` is\n  // non-enumerable, it is skipped, the wrapper's `root` is `undefined`, and any subsequent\n  // `this.root._fullyQualifiedObjects` access crashes.\n  // Defining `root` as an own **enumerable** getter ensures `__importStar` includes it in\n  // the wrapper, so that `wrapper.root` delegates back to the patched root (which has the\n  // proper `_fullyQualifiedObjects` map and full prototype chain).\n  if (!Object.getOwnPropertyDescriptor(patched, 'root')) {\n    Object.defineProperty(patched, 'root', {\n      get(this: any) {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        let ptr = this;\n        while (ptr.parent !== null) ptr = ptr.parent;\n        return ptr;\n      },\n      enumerable: true,\n      configurable: true,\n    });\n  }\n\n  return patched;\n}\n\nfunction _patchProtobufRoot<T extends Record<string, unknown>>(root: T, name?: string): T {\n  const newRoot = new (root.constructor as any)(isNamespace(root) ? name : {});\n  for (const key in root) {\n    // 'root' is a getter-only accessor defined on ReflectionObject.prototype. Trying to\n    // assign it as a plain property on a new Root/Namespace instance throws in strict mode.\n    // It is also safe to skip because each object correctly resolves its own root at runtime\n    // by traversing the parent chain. The top-level own enumerable getter is added separately\n    // by patchProtobufRoot() after recursion completes.\n    if (key === 'root') continue;\n    newRoot[key] = root[key];\n  }\n\n  if (isRecord(root.nested)) {\n    for (const typeOrNamespace in root.nested) {\n      // Skip names that protobufjs uses internally — overriding them would corrupt\n      // the namespace object's internal state. Types/namespaces with these names are\n      // still reachable via root.lookup() or by traversing root.nested manually.\n      if (ROOT_PROPS.has(typeOrNamespace)) continue;\n\n      const value = root.nested[typeOrNamespace];\n      if (isNamespace(value)) {\n        newRoot[typeOrNamespace] = _patchProtobufRoot(value, typeOrNamespace);\n      } else if (isType(value)) {\n        newRoot[typeOrNamespace] = value;\n      }\n    }\n  }\n\n  return newRoot;\n}\n\ntype Type = Record<string, unknown>;\ntype Namespace = { nested: Record<string, unknown> };\n\nfunction isType(value: unknown): value is Type {\n  // constructor.name may get mangled by minifiers; thanksfuly protobufjs also sets a constructor.className property\n  return isRecord(value) && (value.constructor as any).className === 'Type';\n}\n\nfunction isNamespace(value: unknown): value is Namespace {\n  // constructor.name may get mangled by minifiers; thanksfuly protobufjs also sets a constructor.className property\n  return isRecord(value) && (value.constructor as any).className === 'Namespace';\n}\n\n// Duplicate from type-helpers instead of importing in order to avoid circular dependency\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null;\n}\n","/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/\n\"use strict\";\n\nvar $protobuf = require(\"protobufjs/light\");\n\nvar $root = ($protobuf.roots.__temporal || ($protobuf.roots.__temporal = new $protobuf.Root()))\n.addJSON({\n  coresdk: {\n    options: {\n      ruby_package: \"Temporalio::Internal::Bridge::Api::CoreInterface\"\n    },\n    nested: {\n      ActivityHeartbeat: {\n        fields: {\n          taskToken: {\n            type: \"bytes\",\n            id: 1\n          },\n          details: {\n            rule: \"repeated\",\n            type: \"temporal.api.common.v1.Payload\",\n            id: 2\n          }\n        }\n      },\n      ActivityTaskCompletion: {\n        fields: {\n          taskToken: {\n            type: \"bytes\",\n            id: 1\n          },\n          result: {\n            type: \"activity_result.ActivityExecutionResult\",\n            id: 2\n          }\n        }\n      },\n      WorkflowSlotInfo: {\n        fields: {\n          workflowType: {\n            type: \"string\",\n            id: 1\n          },\n          isSticky: {\n            type: \"bool\",\n            id: 2\n          }\n        }\n      },\n      ActivitySlotInfo: {\n        fields: {\n          activityType: {\n            type: \"string\",\n            id: 1\n          }\n        }\n      },\n      LocalActivitySlotInfo: {\n        fields: {\n          activityType: {\n            type: \"string\",\n            id: 1\n          }\n        }\n      },\n      NexusSlotInfo: {\n        fields: {\n          service: {\n            type: \"string\",\n            id: 1\n          },\n          operation: {\n            type: \"string\",\n            id: 2\n          }\n        }\n      },\n      NamespaceInfo: {\n        fields: {\n          limits: {\n            type: \"Limits\",\n            id: 1\n          }\n        },\n        nested: {\n          Limits: {\n            fields: {\n              blobSizeLimitError: {\n                type: \"int64\",\n                id: 1\n              },\n              memoSizeLimitError: {\n                type: \"int64\",\n                id: 2\n              }\n            }\n          }\n        }\n      },\n      activity_result: {\n        options: {\n          ruby_package: \"Temporalio::Internal::Bridge::Api::ActivityResult\"\n        },\n        nested: {\n          ActivityExecutionResult: {\n            oneofs: {\n              status: {\n                oneof: [\n                  \"completed\",\n                  \"failed\",\n                  \"cancelled\",\n                  \"willCompleteAsync\"\n                ]\n              }\n            },\n            fields: {\n              completed: {\n                type: \"Success\",\n                id: 1\n              },\n              failed: {\n                type: \"Failure\",\n                id: 2\n              },\n              cancelled: {\n                type: \"Cancellation\",\n                id: 3\n              },\n              willCompleteAsync: {\n                type: \"WillCompleteAsync\",\n                id: 4\n              }\n            }\n          },\n          ActivityResolution: {\n            oneofs: {\n              status: {\n                oneof: [\n                  \"completed\",\n                  \"failed\",\n                  \"cancelled\",\n                  \"backoff\"\n                ]\n              }\n            },\n            fields: {\n              completed: {\n                type: \"Success\",\n                id: 1\n              },\n              failed: {\n                type: \"Failure\",\n                id: 2\n              },\n              cancelled: {\n                type: \"Cancellation\",\n                id: 3\n              },\n              backoff: {\n                type: \"DoBackoff\",\n                id: 4\n              }\n            }\n          },\n          Success: {\n            fields: {\n              result: {\n                type: \"temporal.api.common.v1.Payload\",\n                id: 1\n              }\n            }\n          },\n          Failure: {\n            fields: {\n              failure: {\n                type: \"temporal.api.failure.v1.Failure\",\n                id: 1\n              }\n            }\n          },\n          Cancellation: {\n            fields: {\n              failure: {\n                type: \"temporal.api.failure.v1.Failure\",\n                id: 1\n              }\n            }\n          },\n          WillCompleteAsync: {\n            fields: {}\n          },\n          DoBackoff: {\n            fields: {\n              attempt: {\n                type: \"uint32\",\n                id: 1\n              },\n              backoffDuration: {\n                type: \"google.protobuf.Duration\",\n                id: 2\n              },\n              originalScheduleTime: {\n                type: \"google.protobuf.Timestamp\",\n                id: 3\n              }\n            }\n          }\n        }\n      },\n      activity_task: {\n        options: {\n          ruby_package: \"Temporalio::Internal::Bridge::Api::ActivityTask\"\n        },\n        nested: {\n          ActivityTask: {\n            oneofs: {\n              variant: {\n                oneof: [\n                  \"start\",\n                  \"cancel\"\n                ]\n              }\n            },\n            fields: {\n              taskToken: {\n                type: \"bytes\",\n                id: 1\n              },\n              start: {\n                type: \"Start\",\n                id: 3\n              },\n              cancel: {\n                type: \"Cancel\",\n                id: 4\n              }\n            }\n          },\n          Start: {\n            fields: {\n              workflowNamespace: {\n                type: \"string\",\n                id: 1\n              },\n              workflowType: {\n                type: \"string\",\n                id: 2\n              },\n              workflowExecution: {\n                type: \"temporal.api.common.v1.WorkflowExecution\",\n                id: 3\n              },\n              activityId: {\n                type: \"string\",\n                id: 4\n              },\n              activityType: {\n                type: \"string\",\n                id: 5\n              },\n              headerFields: {\n                keyType: \"string\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 6\n              },\n              input: {\n                rule: \"repeated\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 7\n              },\n              heartbeatDetails: {\n                rule: \"repeated\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 8\n              },\n              scheduledTime: {\n                type: \"google.protobuf.Timestamp\",\n                id: 9\n              },\n              currentAttemptScheduledTime: {\n                type: \"google.protobuf.Timestamp\",\n                id: 10\n              },\n              startedTime: {\n                type: \"google.protobuf.Timestamp\",\n                id: 11\n              },\n              attempt: {\n                type: \"uint32\",\n                id: 12\n              },\n              scheduleToCloseTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 13\n              },\n              startToCloseTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 14\n              },\n              heartbeatTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 15\n              },\n              retryPolicy: {\n                type: \"temporal.api.common.v1.RetryPolicy\",\n                id: 16\n              },\n              priority: {\n                type: \"temporal.api.common.v1.Priority\",\n                id: 18\n              },\n              isLocal: {\n                type: \"bool\",\n                id: 17\n              },\n              runId: {\n                type: \"string\",\n                id: 19\n              }\n            }\n          },\n          Cancel: {\n            fields: {\n              reason: {\n                type: \"ActivityCancelReason\",\n                id: 1\n              },\n              details: {\n                type: \"ActivityCancellationDetails\",\n                id: 2\n              }\n            }\n          },\n          ActivityCancellationDetails: {\n            fields: {\n              isNotFound: {\n                type: \"bool\",\n                id: 1\n              },\n              isCancelled: {\n                type: \"bool\",\n                id: 2\n              },\n              isPaused: {\n                type: \"bool\",\n                id: 3\n              },\n              isTimedOut: {\n                type: \"bool\",\n                id: 4\n              },\n              isWorkerShutdown: {\n                type: \"bool\",\n                id: 5\n              },\n              isReset: {\n                type: \"bool\",\n                id: 6\n              }\n            }\n          },\n          ActivityCancelReason: {\n            values: {\n              NOT_FOUND: 0,\n              CANCELLED: 1,\n              TIMED_OUT: 2,\n              WORKER_SHUTDOWN: 3,\n              PAUSED: 4,\n              RESET: 5\n            }\n          }\n        }\n      },\n      common: {\n        options: {\n          ruby_package: \"Temporalio::Internal::Bridge::Api::Common\"\n        },\n        nested: {\n          NamespacedWorkflowExecution: {\n            fields: {\n              namespace: {\n                type: \"string\",\n                id: 1\n              },\n              workflowId: {\n                type: \"string\",\n                id: 2\n              },\n              runId: {\n                type: \"string\",\n                id: 3\n              }\n            }\n          },\n          VersioningIntent: {\n            values: {\n              UNSPECIFIED: 0,\n              COMPATIBLE: 1,\n              DEFAULT: 2\n            }\n          },\n          WorkerDeploymentVersion: {\n            fields: {\n              deploymentName: {\n                type: \"string\",\n                id: 1\n              },\n              buildId: {\n                type: \"string\",\n                id: 2\n              }\n            }\n          }\n        }\n      },\n      external_data: {\n        options: {\n          ruby_package: \"Temporalio::Internal::Bridge::Api::ExternalData\"\n        },\n        nested: {\n          LocalActivityMarkerData: {\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              },\n              attempt: {\n                type: \"uint32\",\n                id: 2\n              },\n              activityId: {\n                type: \"string\",\n                id: 3\n              },\n              activityType: {\n                type: \"string\",\n                id: 4\n              },\n              completeTime: {\n                type: \"google.protobuf.Timestamp\",\n                id: 5\n              },\n              backoff: {\n                type: \"google.protobuf.Duration\",\n                id: 6\n              },\n              originalScheduleTime: {\n                type: \"google.protobuf.Timestamp\",\n                id: 7\n              }\n            }\n          },\n          PatchedMarkerData: {\n            fields: {\n              id: {\n                type: \"string\",\n                id: 1\n              },\n              deprecated: {\n                type: \"bool\",\n                id: 2\n              }\n            }\n          }\n        }\n      },\n      workflow_activation: {\n        options: {\n          ruby_package: \"Temporalio::Internal::Bridge::Api::WorkflowActivation\"\n        },\n        nested: {\n          WorkflowActivation: {\n            fields: {\n              runId: {\n                type: \"string\",\n                id: 1\n              },\n              timestamp: {\n                type: \"google.protobuf.Timestamp\",\n                id: 2\n              },\n              isReplaying: {\n                type: \"bool\",\n                id: 3\n              },\n              historyLength: {\n                type: \"uint32\",\n                id: 4\n              },\n              jobs: {\n                rule: \"repeated\",\n                type: \"WorkflowActivationJob\",\n                id: 5\n              },\n              availableInternalFlags: {\n                rule: \"repeated\",\n                type: \"uint32\",\n                id: 6\n              },\n              historySizeBytes: {\n                type: \"uint64\",\n                id: 7\n              },\n              continueAsNewSuggested: {\n                type: \"bool\",\n                id: 8\n              },\n              deploymentVersionForCurrentTask: {\n                type: \"common.WorkerDeploymentVersion\",\n                id: 9\n              },\n              lastSdkVersion: {\n                type: \"string\",\n                id: 10\n              },\n              suggestContinueAsNewReasons: {\n                rule: \"repeated\",\n                type: \"temporal.api.enums.v1.SuggestContinueAsNewReason\",\n                id: 11\n              },\n              targetWorkerDeploymentVersionChanged: {\n                type: \"bool\",\n                id: 12\n              }\n            }\n          },\n          WorkflowActivationJob: {\n            oneofs: {\n              variant: {\n                oneof: [\n                  \"initializeWorkflow\",\n                  \"fireTimer\",\n                  \"updateRandomSeed\",\n                  \"queryWorkflow\",\n                  \"cancelWorkflow\",\n                  \"signalWorkflow\",\n                  \"resolveActivity\",\n                  \"notifyHasPatch\",\n                  \"resolveChildWorkflowExecutionStart\",\n                  \"resolveChildWorkflowExecution\",\n                  \"resolveSignalExternalWorkflow\",\n                  \"resolveRequestCancelExternalWorkflow\",\n                  \"doUpdate\",\n                  \"resolveNexusOperationStart\",\n                  \"resolveNexusOperation\",\n                  \"removeFromCache\"\n                ]\n              }\n            },\n            fields: {\n              initializeWorkflow: {\n                type: \"InitializeWorkflow\",\n                id: 1\n              },\n              fireTimer: {\n                type: \"FireTimer\",\n                id: 2\n              },\n              updateRandomSeed: {\n                type: \"UpdateRandomSeed\",\n                id: 4\n              },\n              queryWorkflow: {\n                type: \"QueryWorkflow\",\n                id: 5\n              },\n              cancelWorkflow: {\n                type: \"CancelWorkflow\",\n                id: 6\n              },\n              signalWorkflow: {\n                type: \"SignalWorkflow\",\n                id: 7\n              },\n              resolveActivity: {\n                type: \"ResolveActivity\",\n                id: 8\n              },\n              notifyHasPatch: {\n                type: \"NotifyHasPatch\",\n                id: 9\n              },\n              resolveChildWorkflowExecutionStart: {\n                type: \"ResolveChildWorkflowExecutionStart\",\n                id: 10\n              },\n              resolveChildWorkflowExecution: {\n                type: \"ResolveChildWorkflowExecution\",\n                id: 11\n              },\n              resolveSignalExternalWorkflow: {\n                type: \"ResolveSignalExternalWorkflow\",\n                id: 12\n              },\n              resolveRequestCancelExternalWorkflow: {\n                type: \"ResolveRequestCancelExternalWorkflow\",\n                id: 13\n              },\n              doUpdate: {\n                type: \"DoUpdate\",\n                id: 14\n              },\n              resolveNexusOperationStart: {\n                type: \"ResolveNexusOperationStart\",\n                id: 15\n              },\n              resolveNexusOperation: {\n                type: \"ResolveNexusOperation\",\n                id: 16\n              },\n              removeFromCache: {\n                type: \"RemoveFromCache\",\n                id: 50\n              }\n            }\n          },\n          InitializeWorkflow: {\n            fields: {\n              workflowType: {\n                type: \"string\",\n                id: 1\n              },\n              workflowId: {\n                type: \"string\",\n                id: 2\n              },\n              \"arguments\": {\n                rule: \"repeated\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 3\n              },\n              randomnessSeed: {\n                type: \"uint64\",\n                id: 4\n              },\n              headers: {\n                keyType: \"string\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 5\n              },\n              identity: {\n                type: \"string\",\n                id: 6\n              },\n              parentWorkflowInfo: {\n                type: \"common.NamespacedWorkflowExecution\",\n                id: 7\n              },\n              workflowExecutionTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 8\n              },\n              workflowRunTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 9\n              },\n              workflowTaskTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 10\n              },\n              continuedFromExecutionRunId: {\n                type: \"string\",\n                id: 11\n              },\n              continuedInitiator: {\n                type: \"temporal.api.enums.v1.ContinueAsNewInitiator\",\n                id: 12\n              },\n              continuedFailure: {\n                type: \"temporal.api.failure.v1.Failure\",\n                id: 13\n              },\n              lastCompletionResult: {\n                type: \"temporal.api.common.v1.Payloads\",\n                id: 14\n              },\n              firstExecutionRunId: {\n                type: \"string\",\n                id: 15\n              },\n              retryPolicy: {\n                type: \"temporal.api.common.v1.RetryPolicy\",\n                id: 16\n              },\n              attempt: {\n                type: \"int32\",\n                id: 17\n              },\n              cronSchedule: {\n                type: \"string\",\n                id: 18\n              },\n              workflowExecutionExpirationTime: {\n                type: \"google.protobuf.Timestamp\",\n                id: 19\n              },\n              cronScheduleToScheduleInterval: {\n                type: \"google.protobuf.Duration\",\n                id: 20\n              },\n              memo: {\n                type: \"temporal.api.common.v1.Memo\",\n                id: 21\n              },\n              searchAttributes: {\n                type: \"temporal.api.common.v1.SearchAttributes\",\n                id: 22\n              },\n              startTime: {\n                type: \"google.protobuf.Timestamp\",\n                id: 23\n              },\n              rootWorkflow: {\n                type: \"temporal.api.common.v1.WorkflowExecution\",\n                id: 24\n              },\n              priority: {\n                type: \"temporal.api.common.v1.Priority\",\n                id: 25\n              }\n            }\n          },\n          FireTimer: {\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              }\n            }\n          },\n          ResolveActivity: {\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              },\n              result: {\n                type: \"activity_result.ActivityResolution\",\n                id: 2\n              },\n              isLocal: {\n                type: \"bool\",\n                id: 3\n              }\n            }\n          },\n          ResolveChildWorkflowExecutionStart: {\n            oneofs: {\n              status: {\n                oneof: [\n                  \"succeeded\",\n                  \"failed\",\n                  \"cancelled\"\n                ]\n              }\n            },\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              },\n              succeeded: {\n                type: \"ResolveChildWorkflowExecutionStartSuccess\",\n                id: 2\n              },\n              failed: {\n                type: \"ResolveChildWorkflowExecutionStartFailure\",\n                id: 3\n              },\n              cancelled: {\n                type: \"ResolveChildWorkflowExecutionStartCancelled\",\n                id: 4\n              }\n            }\n          },\n          ResolveChildWorkflowExecutionStartSuccess: {\n            fields: {\n              runId: {\n                type: \"string\",\n                id: 1\n              }\n            }\n          },\n          ResolveChildWorkflowExecutionStartFailure: {\n            fields: {\n              workflowId: {\n                type: \"string\",\n                id: 1\n              },\n              workflowType: {\n                type: \"string\",\n                id: 2\n              },\n              cause: {\n                type: \"child_workflow.StartChildWorkflowExecutionFailedCause\",\n                id: 3\n              }\n            }\n          },\n          ResolveChildWorkflowExecutionStartCancelled: {\n            fields: {\n              failure: {\n                type: \"temporal.api.failure.v1.Failure\",\n                id: 1\n              }\n            }\n          },\n          ResolveChildWorkflowExecution: {\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              },\n              result: {\n                type: \"child_workflow.ChildWorkflowResult\",\n                id: 2\n              }\n            }\n          },\n          UpdateRandomSeed: {\n            fields: {\n              randomnessSeed: {\n                type: \"uint64\",\n                id: 1\n              }\n            }\n          },\n          QueryWorkflow: {\n            fields: {\n              queryId: {\n                type: \"string\",\n                id: 1\n              },\n              queryType: {\n                type: \"string\",\n                id: 2\n              },\n              \"arguments\": {\n                rule: \"repeated\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 3\n              },\n              headers: {\n                keyType: \"string\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 5\n              }\n            }\n          },\n          CancelWorkflow: {\n            fields: {\n              reason: {\n                type: \"string\",\n                id: 1\n              }\n            }\n          },\n          SignalWorkflow: {\n            fields: {\n              signalName: {\n                type: \"string\",\n                id: 1\n              },\n              input: {\n                rule: \"repeated\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 2\n              },\n              identity: {\n                type: \"string\",\n                id: 3\n              },\n              headers: {\n                keyType: \"string\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 5\n              }\n            }\n          },\n          NotifyHasPatch: {\n            fields: {\n              patchId: {\n                type: \"string\",\n                id: 1\n              }\n            }\n          },\n          ResolveSignalExternalWorkflow: {\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              },\n              failure: {\n                type: \"temporal.api.failure.v1.Failure\",\n                id: 2\n              }\n            }\n          },\n          ResolveRequestCancelExternalWorkflow: {\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              },\n              failure: {\n                type: \"temporal.api.failure.v1.Failure\",\n                id: 2\n              }\n            }\n          },\n          DoUpdate: {\n            fields: {\n              id: {\n                type: \"string\",\n                id: 1\n              },\n              protocolInstanceId: {\n                type: \"string\",\n                id: 2\n              },\n              name: {\n                type: \"string\",\n                id: 3\n              },\n              input: {\n                rule: \"repeated\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 4\n              },\n              headers: {\n                keyType: \"string\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 5\n              },\n              meta: {\n                type: \"temporal.api.update.v1.Meta\",\n                id: 6\n              },\n              runValidator: {\n                type: \"bool\",\n                id: 7\n              }\n            }\n          },\n          ResolveNexusOperationStart: {\n            oneofs: {\n              status: {\n                oneof: [\n                  \"operationToken\",\n                  \"startedSync\",\n                  \"failed\"\n                ]\n              }\n            },\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              },\n              operationToken: {\n                type: \"string\",\n                id: 2\n              },\n              startedSync: {\n                type: \"bool\",\n                id: 3\n              },\n              failed: {\n                type: \"temporal.api.failure.v1.Failure\",\n                id: 4\n              }\n            }\n          },\n          ResolveNexusOperation: {\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              },\n              result: {\n                type: \"nexus.NexusOperationResult\",\n                id: 2\n              }\n            }\n          },\n          RemoveFromCache: {\n            fields: {\n              message: {\n                type: \"string\",\n                id: 1\n              },\n              reason: {\n                type: \"EvictionReason\",\n                id: 2\n              }\n            },\n            nested: {\n              EvictionReason: {\n                values: {\n                  UNSPECIFIED: 0,\n                  CACHE_FULL: 1,\n                  CACHE_MISS: 2,\n                  NONDETERMINISM: 3,\n                  LANG_FAIL: 4,\n                  LANG_REQUESTED: 5,\n                  TASK_NOT_FOUND: 6,\n                  UNHANDLED_COMMAND: 7,\n                  FATAL: 8,\n                  PAGINATION_OR_HISTORY_FETCH: 9,\n                  WORKFLOW_EXECUTION_ENDING: 10\n                }\n              }\n            }\n          }\n        }\n      },\n      child_workflow: {\n        options: {\n          ruby_package: \"Temporalio::Internal::Bridge::Api::ChildWorkflow\"\n        },\n        nested: {\n          ChildWorkflowResult: {\n            oneofs: {\n              status: {\n                oneof: [\n                  \"completed\",\n                  \"failed\",\n                  \"cancelled\"\n                ]\n              }\n            },\n            fields: {\n              completed: {\n                type: \"Success\",\n                id: 1\n              },\n              failed: {\n                type: \"Failure\",\n                id: 2\n              },\n              cancelled: {\n                type: \"Cancellation\",\n                id: 3\n              }\n            }\n          },\n          Success: {\n            fields: {\n              result: {\n                type: \"temporal.api.common.v1.Payload\",\n                id: 1\n              }\n            }\n          },\n          Failure: {\n            fields: {\n              failure: {\n                type: \"temporal.api.failure.v1.Failure\",\n                id: 1\n              }\n            }\n          },\n          Cancellation: {\n            fields: {\n              failure: {\n                type: \"temporal.api.failure.v1.Failure\",\n                id: 1\n              }\n            }\n          },\n          ParentClosePolicy: {\n            values: {\n              PARENT_CLOSE_POLICY_UNSPECIFIED: 0,\n              PARENT_CLOSE_POLICY_TERMINATE: 1,\n              PARENT_CLOSE_POLICY_ABANDON: 2,\n              PARENT_CLOSE_POLICY_REQUEST_CANCEL: 3\n            }\n          },\n          StartChildWorkflowExecutionFailedCause: {\n            values: {\n              START_CHILD_WORKFLOW_EXECUTION_FAILED_CAUSE_UNSPECIFIED: 0,\n              START_CHILD_WORKFLOW_EXECUTION_FAILED_CAUSE_WORKFLOW_ALREADY_EXISTS: 1\n            }\n          },\n          ChildWorkflowCancellationType: {\n            values: {\n              ABANDON: 0,\n              TRY_CANCEL: 1,\n              WAIT_CANCELLATION_COMPLETED: 2,\n              WAIT_CANCELLATION_REQUESTED: 3\n            }\n          }\n        }\n      },\n      nexus: {\n        options: {\n          ruby_package: \"Temporalio::Internal::Bridge::Api::Nexus\"\n        },\n        nested: {\n          NexusOperationResult: {\n            oneofs: {\n              status: {\n                oneof: [\n                  \"completed\",\n                  \"failed\",\n                  \"cancelled\",\n                  \"timedOut\"\n                ]\n              }\n            },\n            fields: {\n              completed: {\n                type: \"temporal.api.common.v1.Payload\",\n                id: 1\n              },\n              failed: {\n                type: \"temporal.api.failure.v1.Failure\",\n                id: 2\n              },\n              cancelled: {\n                type: \"temporal.api.failure.v1.Failure\",\n                id: 3\n              },\n              timedOut: {\n                type: \"temporal.api.failure.v1.Failure\",\n                id: 4\n              }\n            }\n          },\n          NexusTaskCompletion: {\n            oneofs: {\n              status: {\n                oneof: [\n                  \"completed\",\n                  \"error\",\n                  \"ackCancel\",\n                  \"failure\"\n                ]\n              }\n            },\n            fields: {\n              taskToken: {\n                type: \"bytes\",\n                id: 1\n              },\n              completed: {\n                type: \"temporal.api.nexus.v1.Response\",\n                id: 2\n              },\n              error: {\n                type: \"temporal.api.nexus.v1.HandlerError\",\n                id: 3,\n                options: {\n                  deprecated: true\n                }\n              },\n              ackCancel: {\n                type: \"bool\",\n                id: 4\n              },\n              failure: {\n                type: \"temporal.api.failure.v1.Failure\",\n                id: 5\n              }\n            }\n          },\n          NexusTask: {\n            oneofs: {\n              variant: {\n                oneof: [\n                  \"task\",\n                  \"cancelTask\"\n                ]\n              }\n            },\n            fields: {\n              task: {\n                type: \"temporal.api.workflowservice.v1.PollNexusTaskQueueResponse\",\n                id: 1\n              },\n              cancelTask: {\n                type: \"CancelNexusTask\",\n                id: 2\n              },\n              requestDeadline: {\n                type: \"google.protobuf.Timestamp\",\n                id: 3\n              },\n              endpoint: {\n                type: \"string\",\n                id: 4\n              }\n            }\n          },\n          CancelNexusTask: {\n            fields: {\n              taskToken: {\n                type: \"bytes\",\n                id: 1\n              },\n              reason: {\n                type: \"NexusTaskCancelReason\",\n                id: 2\n              }\n            }\n          },\n          NexusTaskCancelReason: {\n            values: {\n              TIMED_OUT: 0,\n              WORKER_SHUTDOWN: 1\n            }\n          },\n          NexusOperationCancellationType: {\n            values: {\n              WAIT_CANCELLATION_COMPLETED: 0,\n              ABANDON: 1,\n              TRY_CANCEL: 2,\n              WAIT_CANCELLATION_REQUESTED: 3\n            }\n          }\n        }\n      },\n      workflow_commands: {\n        options: {\n          ruby_package: \"Temporalio::Internal::Bridge::Api::WorkflowCommands\"\n        },\n        nested: {\n          WorkflowCommand: {\n            oneofs: {\n              variant: {\n                oneof: [\n                  \"startTimer\",\n                  \"scheduleActivity\",\n                  \"respondToQuery\",\n                  \"requestCancelActivity\",\n                  \"cancelTimer\",\n                  \"completeWorkflowExecution\",\n                  \"failWorkflowExecution\",\n                  \"continueAsNewWorkflowExecution\",\n                  \"cancelWorkflowExecution\",\n                  \"setPatchMarker\",\n                  \"startChildWorkflowExecution\",\n                  \"cancelChildWorkflowExecution\",\n                  \"requestCancelExternalWorkflowExecution\",\n                  \"signalExternalWorkflowExecution\",\n                  \"cancelSignalWorkflow\",\n                  \"scheduleLocalActivity\",\n                  \"requestCancelLocalActivity\",\n                  \"upsertWorkflowSearchAttributes\",\n                  \"modifyWorkflowProperties\",\n                  \"updateResponse\",\n                  \"scheduleNexusOperation\",\n                  \"requestCancelNexusOperation\"\n                ]\n              }\n            },\n            fields: {\n              userMetadata: {\n                type: \"temporal.api.sdk.v1.UserMetadata\",\n                id: 100\n              },\n              startTimer: {\n                type: \"StartTimer\",\n                id: 1\n              },\n              scheduleActivity: {\n                type: \"ScheduleActivity\",\n                id: 2\n              },\n              respondToQuery: {\n                type: \"QueryResult\",\n                id: 3\n              },\n              requestCancelActivity: {\n                type: \"RequestCancelActivity\",\n                id: 4\n              },\n              cancelTimer: {\n                type: \"CancelTimer\",\n                id: 5\n              },\n              completeWorkflowExecution: {\n                type: \"CompleteWorkflowExecution\",\n                id: 6\n              },\n              failWorkflowExecution: {\n                type: \"FailWorkflowExecution\",\n                id: 7\n              },\n              continueAsNewWorkflowExecution: {\n                type: \"ContinueAsNewWorkflowExecution\",\n                id: 8\n              },\n              cancelWorkflowExecution: {\n                type: \"CancelWorkflowExecution\",\n                id: 9\n              },\n              setPatchMarker: {\n                type: \"SetPatchMarker\",\n                id: 10\n              },\n              startChildWorkflowExecution: {\n                type: \"StartChildWorkflowExecution\",\n                id: 11\n              },\n              cancelChildWorkflowExecution: {\n                type: \"CancelChildWorkflowExecution\",\n                id: 12\n              },\n              requestCancelExternalWorkflowExecution: {\n                type: \"RequestCancelExternalWorkflowExecution\",\n                id: 13\n              },\n              signalExternalWorkflowExecution: {\n                type: \"SignalExternalWorkflowExecution\",\n                id: 14\n              },\n              cancelSignalWorkflow: {\n                type: \"CancelSignalWorkflow\",\n                id: 15\n              },\n              scheduleLocalActivity: {\n                type: \"ScheduleLocalActivity\",\n                id: 16\n              },\n              requestCancelLocalActivity: {\n                type: \"RequestCancelLocalActivity\",\n                id: 17\n              },\n              upsertWorkflowSearchAttributes: {\n                type: \"UpsertWorkflowSearchAttributes\",\n                id: 18\n              },\n              modifyWorkflowProperties: {\n                type: \"ModifyWorkflowProperties\",\n                id: 19\n              },\n              updateResponse: {\n                type: \"UpdateResponse\",\n                id: 20\n              },\n              scheduleNexusOperation: {\n                type: \"ScheduleNexusOperation\",\n                id: 21\n              },\n              requestCancelNexusOperation: {\n                type: \"RequestCancelNexusOperation\",\n                id: 22\n              }\n            }\n          },\n          StartTimer: {\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              },\n              startToFireTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 2\n              }\n            }\n          },\n          CancelTimer: {\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              }\n            }\n          },\n          ScheduleActivity: {\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              },\n              activityId: {\n                type: \"string\",\n                id: 2\n              },\n              activityType: {\n                type: \"string\",\n                id: 3\n              },\n              taskQueue: {\n                type: \"string\",\n                id: 5\n              },\n              headers: {\n                keyType: \"string\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 6\n              },\n              \"arguments\": {\n                rule: \"repeated\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 7\n              },\n              scheduleToCloseTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 8\n              },\n              scheduleToStartTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 9\n              },\n              startToCloseTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 10\n              },\n              heartbeatTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 11\n              },\n              retryPolicy: {\n                type: \"temporal.api.common.v1.RetryPolicy\",\n                id: 12\n              },\n              cancellationType: {\n                type: \"ActivityCancellationType\",\n                id: 13\n              },\n              doNotEagerlyExecute: {\n                type: \"bool\",\n                id: 14\n              },\n              versioningIntent: {\n                type: \"coresdk.common.VersioningIntent\",\n                id: 15\n              },\n              priority: {\n                type: \"temporal.api.common.v1.Priority\",\n                id: 16\n              }\n            }\n          },\n          ScheduleLocalActivity: {\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              },\n              activityId: {\n                type: \"string\",\n                id: 2\n              },\n              activityType: {\n                type: \"string\",\n                id: 3\n              },\n              attempt: {\n                type: \"uint32\",\n                id: 4\n              },\n              originalScheduleTime: {\n                type: \"google.protobuf.Timestamp\",\n                id: 5\n              },\n              headers: {\n                keyType: \"string\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 6\n              },\n              \"arguments\": {\n                rule: \"repeated\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 7\n              },\n              scheduleToCloseTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 8\n              },\n              scheduleToStartTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 9\n              },\n              startToCloseTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 10\n              },\n              retryPolicy: {\n                type: \"temporal.api.common.v1.RetryPolicy\",\n                id: 11\n              },\n              localRetryThreshold: {\n                type: \"google.protobuf.Duration\",\n                id: 12\n              },\n              cancellationType: {\n                type: \"ActivityCancellationType\",\n                id: 13\n              }\n            }\n          },\n          ActivityCancellationType: {\n            values: {\n              TRY_CANCEL: 0,\n              WAIT_CANCELLATION_COMPLETED: 1,\n              ABANDON: 2\n            }\n          },\n          RequestCancelActivity: {\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              }\n            }\n          },\n          RequestCancelLocalActivity: {\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              }\n            }\n          },\n          QueryResult: {\n            oneofs: {\n              variant: {\n                oneof: [\n                  \"succeeded\",\n                  \"failed\"\n                ]\n              }\n            },\n            fields: {\n              queryId: {\n                type: \"string\",\n                id: 1\n              },\n              succeeded: {\n                type: \"QuerySuccess\",\n                id: 2\n              },\n              failed: {\n                type: \"temporal.api.failure.v1.Failure\",\n                id: 3\n              }\n            }\n          },\n          QuerySuccess: {\n            fields: {\n              response: {\n                type: \"temporal.api.common.v1.Payload\",\n                id: 1\n              }\n            }\n          },\n          CompleteWorkflowExecution: {\n            fields: {\n              result: {\n                type: \"temporal.api.common.v1.Payload\",\n                id: 1\n              }\n            }\n          },\n          FailWorkflowExecution: {\n            fields: {\n              failure: {\n                type: \"temporal.api.failure.v1.Failure\",\n                id: 1\n              }\n            }\n          },\n          ContinueAsNewWorkflowExecution: {\n            fields: {\n              workflowType: {\n                type: \"string\",\n                id: 1\n              },\n              taskQueue: {\n                type: \"string\",\n                id: 2\n              },\n              \"arguments\": {\n                rule: \"repeated\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 3\n              },\n              workflowRunTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 4\n              },\n              workflowTaskTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 5\n              },\n              memo: {\n                keyType: \"string\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 6\n              },\n              headers: {\n                keyType: \"string\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 7\n              },\n              searchAttributes: {\n                type: \"temporal.api.common.v1.SearchAttributes\",\n                id: 8\n              },\n              retryPolicy: {\n                type: \"temporal.api.common.v1.RetryPolicy\",\n                id: 9\n              },\n              versioningIntent: {\n                type: \"coresdk.common.VersioningIntent\",\n                id: 10\n              },\n              initialVersioningBehavior: {\n                type: \"temporal.api.enums.v1.ContinueAsNewVersioningBehavior\",\n                id: 11\n              }\n            }\n          },\n          CancelWorkflowExecution: {\n            fields: {}\n          },\n          SetPatchMarker: {\n            fields: {\n              patchId: {\n                type: \"string\",\n                id: 1\n              },\n              deprecated: {\n                type: \"bool\",\n                id: 2\n              }\n            }\n          },\n          StartChildWorkflowExecution: {\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              },\n              namespace: {\n                type: \"string\",\n                id: 2\n              },\n              workflowId: {\n                type: \"string\",\n                id: 3\n              },\n              workflowType: {\n                type: \"string\",\n                id: 4\n              },\n              taskQueue: {\n                type: \"string\",\n                id: 5\n              },\n              input: {\n                rule: \"repeated\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 6\n              },\n              workflowExecutionTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 7\n              },\n              workflowRunTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 8\n              },\n              workflowTaskTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 9\n              },\n              parentClosePolicy: {\n                type: \"child_workflow.ParentClosePolicy\",\n                id: 10\n              },\n              workflowIdReusePolicy: {\n                type: \"temporal.api.enums.v1.WorkflowIdReusePolicy\",\n                id: 12\n              },\n              retryPolicy: {\n                type: \"temporal.api.common.v1.RetryPolicy\",\n                id: 13\n              },\n              cronSchedule: {\n                type: \"string\",\n                id: 14\n              },\n              headers: {\n                keyType: \"string\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 15\n              },\n              memo: {\n                keyType: \"string\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 16\n              },\n              searchAttributes: {\n                type: \"temporal.api.common.v1.SearchAttributes\",\n                id: 17\n              },\n              cancellationType: {\n                type: \"child_workflow.ChildWorkflowCancellationType\",\n                id: 18\n              },\n              versioningIntent: {\n                type: \"coresdk.common.VersioningIntent\",\n                id: 19\n              },\n              priority: {\n                type: \"temporal.api.common.v1.Priority\",\n                id: 20\n              }\n            }\n          },\n          CancelChildWorkflowExecution: {\n            fields: {\n              childWorkflowSeq: {\n                type: \"uint32\",\n                id: 1\n              },\n              reason: {\n                type: \"string\",\n                id: 2\n              }\n            }\n          },\n          RequestCancelExternalWorkflowExecution: {\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              },\n              workflowExecution: {\n                type: \"common.NamespacedWorkflowExecution\",\n                id: 2\n              },\n              reason: {\n                type: \"string\",\n                id: 3\n              }\n            }\n          },\n          SignalExternalWorkflowExecution: {\n            oneofs: {\n              target: {\n                oneof: [\n                  \"workflowExecution\",\n                  \"childWorkflowId\"\n                ]\n              }\n            },\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              },\n              workflowExecution: {\n                type: \"common.NamespacedWorkflowExecution\",\n                id: 2\n              },\n              childWorkflowId: {\n                type: \"string\",\n                id: 3\n              },\n              signalName: {\n                type: \"string\",\n                id: 4\n              },\n              args: {\n                rule: \"repeated\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 5\n              },\n              headers: {\n                keyType: \"string\",\n                type: \"temporal.api.common.v1.Payload\",\n                id: 6\n              }\n            }\n          },\n          CancelSignalWorkflow: {\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              }\n            }\n          },\n          UpsertWorkflowSearchAttributes: {\n            fields: {\n              searchAttributes: {\n                type: \"temporal.api.common.v1.SearchAttributes\",\n                id: 1\n              }\n            }\n          },\n          ModifyWorkflowProperties: {\n            fields: {\n              upsertedMemo: {\n                type: \"temporal.api.common.v1.Memo\",\n                id: 1\n              }\n            }\n          },\n          UpdateResponse: {\n            oneofs: {\n              response: {\n                oneof: [\n                  \"accepted\",\n                  \"rejected\",\n                  \"completed\"\n                ]\n              }\n            },\n            fields: {\n              protocolInstanceId: {\n                type: \"string\",\n                id: 1\n              },\n              accepted: {\n                type: \"google.protobuf.Empty\",\n                id: 2\n              },\n              rejected: {\n                type: \"temporal.api.failure.v1.Failure\",\n                id: 3\n              },\n              completed: {\n                type: \"temporal.api.common.v1.Payload\",\n                id: 4\n              }\n            }\n          },\n          ScheduleNexusOperation: {\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              },\n              endpoint: {\n                type: \"string\",\n                id: 2\n              },\n              service: {\n                type: \"string\",\n                id: 3\n              },\n              operation: {\n                type: \"string\",\n                id: 4\n              },\n              input: {\n                type: \"temporal.api.common.v1.Payload\",\n                id: 5\n              },\n              scheduleToCloseTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 6\n              },\n              nexusHeader: {\n                keyType: \"string\",\n                type: \"string\",\n                id: 7\n              },\n              cancellationType: {\n                type: \"nexus.NexusOperationCancellationType\",\n                id: 8\n              },\n              scheduleToStartTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 9\n              },\n              startToCloseTimeout: {\n                type: \"google.protobuf.Duration\",\n                id: 10\n              }\n            }\n          },\n          RequestCancelNexusOperation: {\n            fields: {\n              seq: {\n                type: \"uint32\",\n                id: 1\n              }\n            }\n          }\n        }\n      },\n      workflow_completion: {\n        options: {\n          ruby_package: \"Temporalio::Internal::Bridge::Api::WorkflowCompletion\"\n        },\n        nested: {\n          WorkflowActivationCompletion: {\n            oneofs: {\n              status: {\n                oneof: [\n                  \"successful\",\n                  \"failed\"\n                ]\n              }\n            },\n            fields: {\n              runId: {\n                type: \"string\",\n                id: 1\n              },\n              successful: {\n                type: \"Success\",\n                id: 2\n              },\n              failed: {\n                type: \"Failure\",\n                id: 3\n              }\n            }\n          },\n          Success: {\n            fields: {\n              commands: {\n                rule: \"repeated\",\n                type: \"workflow_commands.WorkflowCommand\",\n                id: 1\n              },\n              usedInternalFlags: {\n                rule: \"repeated\",\n                type: \"uint32\",\n                id: 6\n              },\n              versioningBehavior: {\n                type: \"temporal.api.enums.v1.VersioningBehavior\",\n                id: 7\n              }\n            }\n          },\n          Failure: {\n            fields: {\n              failure: {\n                type: \"temporal.api.failure.v1.Failure\",\n                id: 1\n              },\n              forceCause: {\n                type: \"temporal.api.enums.v1.WorkflowTaskFailedCause\",\n                id: 2\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  temporal: {\n    nested: {\n      api: {\n        nested: {\n          common: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/common/v1;common\",\n                  java_package: \"io.temporal.api.common.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::Common::V1\",\n                  csharp_namespace: \"Temporalio.Api.Common.V1\"\n                },\n                nested: {\n                  DataBlob: {\n                    fields: {\n                      encodingType: {\n                        type: \"temporal.api.enums.v1.EncodingType\",\n                        id: 1\n                      },\n                      data: {\n                        type: \"bytes\",\n                        id: 2\n                      }\n                    }\n                  },\n                  Payloads: {\n                    fields: {\n                      payloads: {\n                        rule: \"repeated\",\n                        type: \"Payload\",\n                        id: 1\n                      }\n                    }\n                  },\n                  Payload: {\n                    fields: {\n                      metadata: {\n                        keyType: \"string\",\n                        type: \"bytes\",\n                        id: 1\n                      },\n                      data: {\n                        type: \"bytes\",\n                        id: 2\n                      },\n                      externalPayloads: {\n                        rule: \"repeated\",\n                        type: \"ExternalPayloadDetails\",\n                        id: 3\n                      }\n                    },\n                    nested: {\n                      ExternalPayloadDetails: {\n                        fields: {\n                          sizeBytes: {\n                            type: \"int64\",\n                            id: 1\n                          }\n                        }\n                      }\n                    }\n                  },\n                  SearchAttributes: {\n                    fields: {\n                      indexedFields: {\n                        keyType: \"string\",\n                        type: \"Payload\",\n                        id: 1\n                      }\n                    }\n                  },\n                  Memo: {\n                    fields: {\n                      fields: {\n                        keyType: \"string\",\n                        type: \"Payload\",\n                        id: 1\n                      }\n                    }\n                  },\n                  Header: {\n                    fields: {\n                      fields: {\n                        keyType: \"string\",\n                        type: \"Payload\",\n                        id: 1\n                      }\n                    }\n                  },\n                  WorkflowExecution: {\n                    fields: {\n                      workflowId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  WorkflowType: {\n                    fields: {\n                      name: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  ActivityType: {\n                    fields: {\n                      name: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  RetryPolicy: {\n                    fields: {\n                      initialInterval: {\n                        type: \"google.protobuf.Duration\",\n                        id: 1\n                      },\n                      backoffCoefficient: {\n                        type: \"double\",\n                        id: 2\n                      },\n                      maximumInterval: {\n                        type: \"google.protobuf.Duration\",\n                        id: 3\n                      },\n                      maximumAttempts: {\n                        type: \"int32\",\n                        id: 4\n                      },\n                      nonRetryableErrorTypes: {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 5\n                      }\n                    }\n                  },\n                  MeteringMetadata: {\n                    fields: {\n                      nonfirstLocalActivityExecutionAttempts: {\n                        type: \"uint32\",\n                        id: 13\n                      }\n                    }\n                  },\n                  WorkerVersionStamp: {\n                    fields: {\n                      buildId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      useVersioning: {\n                        type: \"bool\",\n                        id: 3\n                      }\n                    }\n                  },\n                  WorkerVersionCapabilities: {\n                    fields: {\n                      buildId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      useVersioning: {\n                        type: \"bool\",\n                        id: 2\n                      },\n                      deploymentSeriesName: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  ResetOptions: {\n                    oneofs: {\n                      target: {\n                        oneof: [\n                          \"firstWorkflowTask\",\n                          \"lastWorkflowTask\",\n                          \"workflowTaskId\",\n                          \"buildId\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      firstWorkflowTask: {\n                        type: \"google.protobuf.Empty\",\n                        id: 1\n                      },\n                      lastWorkflowTask: {\n                        type: \"google.protobuf.Empty\",\n                        id: 2\n                      },\n                      workflowTaskId: {\n                        type: \"int64\",\n                        id: 3\n                      },\n                      buildId: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      resetReapplyType: {\n                        type: \"temporal.api.enums.v1.ResetReapplyType\",\n                        id: 10,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      currentRunOnly: {\n                        type: \"bool\",\n                        id: 11\n                      },\n                      resetReapplyExcludeTypes: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.enums.v1.ResetReapplyExcludeType\",\n                        id: 12\n                      }\n                    }\n                  },\n                  Callback: {\n                    oneofs: {\n                      variant: {\n                        oneof: [\n                          \"nexus\",\n                          \"internal\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      nexus: {\n                        type: \"Nexus\",\n                        id: 2\n                      },\n                      internal: {\n                        type: \"Internal\",\n                        id: 3\n                      },\n                      links: {\n                        rule: \"repeated\",\n                        type: \"Link\",\n                        id: 100\n                      }\n                    },\n                    reserved: [\n                      [\n                        1,\n                        1\n                      ]\n                    ],\n                    nested: {\n                      Nexus: {\n                        fields: {\n                          url: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          header: {\n                            keyType: \"string\",\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      Internal: {\n                        fields: {\n                          data: {\n                            type: \"bytes\",\n                            id: 1\n                          }\n                        }\n                      }\n                    }\n                  },\n                  Link: {\n                    oneofs: {\n                      variant: {\n                        oneof: [\n                          \"workflowEvent\",\n                          \"batchJob\",\n                          \"activity\",\n                          \"nexusOperation\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      workflowEvent: {\n                        type: \"WorkflowEvent\",\n                        id: 1\n                      },\n                      batchJob: {\n                        type: \"BatchJob\",\n                        id: 2\n                      },\n                      activity: {\n                        type: \"Activity\",\n                        id: 3\n                      },\n                      nexusOperation: {\n                        type: \"NexusOperation\",\n                        id: 4\n                      }\n                    },\n                    nested: {\n                      WorkflowEvent: {\n                        oneofs: {\n                          reference: {\n                            oneof: [\n                              \"eventRef\",\n                              \"requestIdRef\"\n                            ]\n                          }\n                        },\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          workflowId: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          runId: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          eventRef: {\n                            type: \"EventReference\",\n                            id: 100\n                          },\n                          requestIdRef: {\n                            type: \"RequestIdReference\",\n                            id: 101\n                          }\n                        },\n                        nested: {\n                          EventReference: {\n                            fields: {\n                              eventId: {\n                                type: \"int64\",\n                                id: 1\n                              },\n                              eventType: {\n                                type: \"temporal.api.enums.v1.EventType\",\n                                id: 2\n                              }\n                            }\n                          },\n                          RequestIdReference: {\n                            fields: {\n                              requestId: {\n                                type: \"string\",\n                                id: 1\n                              },\n                              eventType: {\n                                type: \"temporal.api.enums.v1.EventType\",\n                                id: 2\n                              }\n                            }\n                          }\n                        }\n                      },\n                      BatchJob: {\n                        fields: {\n                          jobId: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      },\n                      Activity: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          activityId: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          runId: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      NexusOperation: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          operationId: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          runId: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      }\n                    }\n                  },\n                  Principal: {\n                    fields: {\n                      type: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      name: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  Priority: {\n                    fields: {\n                      priorityKey: {\n                        type: \"int32\",\n                        id: 1\n                      },\n                      fairnessKey: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      fairnessWeight: {\n                        type: \"float\",\n                        id: 3\n                      }\n                    }\n                  },\n                  WorkerSelector: {\n                    oneofs: {\n                      selector: {\n                        oneof: [\n                          \"workerInstanceKey\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      workerInstanceKey: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  OnConflictOptions: {\n                    fields: {\n                      attachRequestId: {\n                        type: \"bool\",\n                        id: 1\n                      },\n                      attachCompletionCallbacks: {\n                        type: \"bool\",\n                        id: 2\n                      },\n                      attachLinks: {\n                        type: \"bool\",\n                        id: 3\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          enums: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/enums/v1;enums\",\n                  java_package: \"io.temporal.api.enums.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"ScheduleProto\",\n                  ruby_package: \"Temporalio::Api::Enums::V1\",\n                  csharp_namespace: \"Temporalio.Api.Enums.V1\"\n                },\n                nested: {\n                  EncodingType: {\n                    values: {\n                      ENCODING_TYPE_UNSPECIFIED: 0,\n                      ENCODING_TYPE_PROTO3: 1,\n                      ENCODING_TYPE_JSON: 2\n                    }\n                  },\n                  IndexedValueType: {\n                    values: {\n                      INDEXED_VALUE_TYPE_UNSPECIFIED: 0,\n                      INDEXED_VALUE_TYPE_TEXT: 1,\n                      INDEXED_VALUE_TYPE_KEYWORD: 2,\n                      INDEXED_VALUE_TYPE_INT: 3,\n                      INDEXED_VALUE_TYPE_DOUBLE: 4,\n                      INDEXED_VALUE_TYPE_BOOL: 5,\n                      INDEXED_VALUE_TYPE_DATETIME: 6,\n                      INDEXED_VALUE_TYPE_KEYWORD_LIST: 7\n                    }\n                  },\n                  Severity: {\n                    values: {\n                      SEVERITY_UNSPECIFIED: 0,\n                      SEVERITY_HIGH: 1,\n                      SEVERITY_MEDIUM: 2,\n                      SEVERITY_LOW: 3\n                    }\n                  },\n                  CallbackState: {\n                    values: {\n                      CALLBACK_STATE_UNSPECIFIED: 0,\n                      CALLBACK_STATE_STANDBY: 1,\n                      CALLBACK_STATE_SCHEDULED: 2,\n                      CALLBACK_STATE_BACKING_OFF: 3,\n                      CALLBACK_STATE_FAILED: 4,\n                      CALLBACK_STATE_SUCCEEDED: 5,\n                      CALLBACK_STATE_BLOCKED: 6\n                    }\n                  },\n                  PendingNexusOperationState: {\n                    values: {\n                      PENDING_NEXUS_OPERATION_STATE_UNSPECIFIED: 0,\n                      PENDING_NEXUS_OPERATION_STATE_SCHEDULED: 1,\n                      PENDING_NEXUS_OPERATION_STATE_BACKING_OFF: 2,\n                      PENDING_NEXUS_OPERATION_STATE_STARTED: 3,\n                      PENDING_NEXUS_OPERATION_STATE_BLOCKED: 4\n                    }\n                  },\n                  NexusOperationCancellationState: {\n                    values: {\n                      NEXUS_OPERATION_CANCELLATION_STATE_UNSPECIFIED: 0,\n                      NEXUS_OPERATION_CANCELLATION_STATE_SCHEDULED: 1,\n                      NEXUS_OPERATION_CANCELLATION_STATE_BACKING_OFF: 2,\n                      NEXUS_OPERATION_CANCELLATION_STATE_SUCCEEDED: 3,\n                      NEXUS_OPERATION_CANCELLATION_STATE_FAILED: 4,\n                      NEXUS_OPERATION_CANCELLATION_STATE_TIMED_OUT: 5,\n                      NEXUS_OPERATION_CANCELLATION_STATE_BLOCKED: 6\n                    }\n                  },\n                  WorkflowRuleActionScope: {\n                    values: {\n                      WORKFLOW_RULE_ACTION_SCOPE_UNSPECIFIED: 0,\n                      WORKFLOW_RULE_ACTION_SCOPE_WORKFLOW: 1,\n                      WORKFLOW_RULE_ACTION_SCOPE_ACTIVITY: 2\n                    }\n                  },\n                  ApplicationErrorCategory: {\n                    values: {\n                      APPLICATION_ERROR_CATEGORY_UNSPECIFIED: 0,\n                      APPLICATION_ERROR_CATEGORY_BENIGN: 1\n                    }\n                  },\n                  WorkerStatus: {\n                    values: {\n                      WORKER_STATUS_UNSPECIFIED: 0,\n                      WORKER_STATUS_RUNNING: 1,\n                      WORKER_STATUS_SHUTTING_DOWN: 2,\n                      WORKER_STATUS_SHUTDOWN: 3\n                    }\n                  },\n                  EventType: {\n                    values: {\n                      EVENT_TYPE_UNSPECIFIED: 0,\n                      EVENT_TYPE_WORKFLOW_EXECUTION_STARTED: 1,\n                      EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED: 2,\n                      EVENT_TYPE_WORKFLOW_EXECUTION_FAILED: 3,\n                      EVENT_TYPE_WORKFLOW_EXECUTION_TIMED_OUT: 4,\n                      EVENT_TYPE_WORKFLOW_TASK_SCHEDULED: 5,\n                      EVENT_TYPE_WORKFLOW_TASK_STARTED: 6,\n                      EVENT_TYPE_WORKFLOW_TASK_COMPLETED: 7,\n                      EVENT_TYPE_WORKFLOW_TASK_TIMED_OUT: 8,\n                      EVENT_TYPE_WORKFLOW_TASK_FAILED: 9,\n                      EVENT_TYPE_ACTIVITY_TASK_SCHEDULED: 10,\n                      EVENT_TYPE_ACTIVITY_TASK_STARTED: 11,\n                      EVENT_TYPE_ACTIVITY_TASK_COMPLETED: 12,\n                      EVENT_TYPE_ACTIVITY_TASK_FAILED: 13,\n                      EVENT_TYPE_ACTIVITY_TASK_TIMED_OUT: 14,\n                      EVENT_TYPE_ACTIVITY_TASK_CANCEL_REQUESTED: 15,\n                      EVENT_TYPE_ACTIVITY_TASK_CANCELED: 16,\n                      EVENT_TYPE_TIMER_STARTED: 17,\n                      EVENT_TYPE_TIMER_FIRED: 18,\n                      EVENT_TYPE_TIMER_CANCELED: 19,\n                      EVENT_TYPE_WORKFLOW_EXECUTION_CANCEL_REQUESTED: 20,\n                      EVENT_TYPE_WORKFLOW_EXECUTION_CANCELED: 21,\n                      EVENT_TYPE_REQUEST_CANCEL_EXTERNAL_WORKFLOW_EXECUTION_INITIATED: 22,\n                      EVENT_TYPE_REQUEST_CANCEL_EXTERNAL_WORKFLOW_EXECUTION_FAILED: 23,\n                      EVENT_TYPE_EXTERNAL_WORKFLOW_EXECUTION_CANCEL_REQUESTED: 24,\n                      EVENT_TYPE_MARKER_RECORDED: 25,\n                      EVENT_TYPE_WORKFLOW_EXECUTION_SIGNALED: 26,\n                      EVENT_TYPE_WORKFLOW_EXECUTION_TERMINATED: 27,\n                      EVENT_TYPE_WORKFLOW_EXECUTION_CONTINUED_AS_NEW: 28,\n                      EVENT_TYPE_START_CHILD_WORKFLOW_EXECUTION_INITIATED: 29,\n                      EVENT_TYPE_START_CHILD_WORKFLOW_EXECUTION_FAILED: 30,\n                      EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_STARTED: 31,\n                      EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_COMPLETED: 32,\n                      EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_FAILED: 33,\n                      EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_CANCELED: 34,\n                      EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_TIMED_OUT: 35,\n                      EVENT_TYPE_CHILD_WORKFLOW_EXECUTION_TERMINATED: 36,\n                      EVENT_TYPE_SIGNAL_EXTERNAL_WORKFLOW_EXECUTION_INITIATED: 37,\n                      EVENT_TYPE_SIGNAL_EXTERNAL_WORKFLOW_EXECUTION_FAILED: 38,\n                      EVENT_TYPE_EXTERNAL_WORKFLOW_EXECUTION_SIGNALED: 39,\n                      EVENT_TYPE_UPSERT_WORKFLOW_SEARCH_ATTRIBUTES: 40,\n                      EVENT_TYPE_WORKFLOW_EXECUTION_UPDATE_ADMITTED: 47,\n                      EVENT_TYPE_WORKFLOW_EXECUTION_UPDATE_ACCEPTED: 41,\n                      EVENT_TYPE_WORKFLOW_EXECUTION_UPDATE_REJECTED: 42,\n                      EVENT_TYPE_WORKFLOW_EXECUTION_UPDATE_COMPLETED: 43,\n                      EVENT_TYPE_WORKFLOW_PROPERTIES_MODIFIED_EXTERNALLY: 44,\n                      EVENT_TYPE_ACTIVITY_PROPERTIES_MODIFIED_EXTERNALLY: 45,\n                      EVENT_TYPE_WORKFLOW_PROPERTIES_MODIFIED: 46,\n                      EVENT_TYPE_NEXUS_OPERATION_SCHEDULED: 48,\n                      EVENT_TYPE_NEXUS_OPERATION_STARTED: 49,\n                      EVENT_TYPE_NEXUS_OPERATION_COMPLETED: 50,\n                      EVENT_TYPE_NEXUS_OPERATION_FAILED: 51,\n                      EVENT_TYPE_NEXUS_OPERATION_CANCELED: 52,\n                      EVENT_TYPE_NEXUS_OPERATION_TIMED_OUT: 53,\n                      EVENT_TYPE_NEXUS_OPERATION_CANCEL_REQUESTED: 54,\n                      EVENT_TYPE_WORKFLOW_EXECUTION_OPTIONS_UPDATED: 55,\n                      EVENT_TYPE_NEXUS_OPERATION_CANCEL_REQUEST_COMPLETED: 56,\n                      EVENT_TYPE_NEXUS_OPERATION_CANCEL_REQUEST_FAILED: 57,\n                      EVENT_TYPE_WORKFLOW_EXECUTION_PAUSED: 58,\n                      EVENT_TYPE_WORKFLOW_EXECUTION_UNPAUSED: 59,\n                      EVENT_TYPE_WORKFLOW_EXECUTION_TIME_SKIPPING_TRANSITIONED: 60\n                    }\n                  },\n                  ResetReapplyExcludeType: {\n                    valuesOptions: {\n                      RESET_REAPPLY_EXCLUDE_TYPE_CANCEL_REQUEST: {\n                        deprecated: true\n                      }\n                    },\n                    values: {\n                      RESET_REAPPLY_EXCLUDE_TYPE_UNSPECIFIED: 0,\n                      RESET_REAPPLY_EXCLUDE_TYPE_SIGNAL: 1,\n                      RESET_REAPPLY_EXCLUDE_TYPE_UPDATE: 2,\n                      RESET_REAPPLY_EXCLUDE_TYPE_NEXUS: 3,\n                      RESET_REAPPLY_EXCLUDE_TYPE_CANCEL_REQUEST: 4\n                    }\n                  },\n                  ResetReapplyType: {\n                    values: {\n                      RESET_REAPPLY_TYPE_UNSPECIFIED: 0,\n                      RESET_REAPPLY_TYPE_SIGNAL: 1,\n                      RESET_REAPPLY_TYPE_NONE: 2,\n                      RESET_REAPPLY_TYPE_ALL_ELIGIBLE: 3\n                    }\n                  },\n                  ResetType: {\n                    values: {\n                      RESET_TYPE_UNSPECIFIED: 0,\n                      RESET_TYPE_FIRST_WORKFLOW_TASK: 1,\n                      RESET_TYPE_LAST_WORKFLOW_TASK: 2\n                    }\n                  },\n                  WorkflowIdReusePolicy: {\n                    valuesOptions: {\n                      WORKFLOW_ID_REUSE_POLICY_TERMINATE_IF_RUNNING: {\n                        deprecated: true\n                      }\n                    },\n                    values: {\n                      WORKFLOW_ID_REUSE_POLICY_UNSPECIFIED: 0,\n                      WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE: 1,\n                      WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE_FAILED_ONLY: 2,\n                      WORKFLOW_ID_REUSE_POLICY_REJECT_DUPLICATE: 3,\n                      WORKFLOW_ID_REUSE_POLICY_TERMINATE_IF_RUNNING: 4\n                    }\n                  },\n                  WorkflowIdConflictPolicy: {\n                    values: {\n                      WORKFLOW_ID_CONFLICT_POLICY_UNSPECIFIED: 0,\n                      WORKFLOW_ID_CONFLICT_POLICY_FAIL: 1,\n                      WORKFLOW_ID_CONFLICT_POLICY_USE_EXISTING: 2,\n                      WORKFLOW_ID_CONFLICT_POLICY_TERMINATE_EXISTING: 3\n                    }\n                  },\n                  ParentClosePolicy: {\n                    values: {\n                      PARENT_CLOSE_POLICY_UNSPECIFIED: 0,\n                      PARENT_CLOSE_POLICY_TERMINATE: 1,\n                      PARENT_CLOSE_POLICY_ABANDON: 2,\n                      PARENT_CLOSE_POLICY_REQUEST_CANCEL: 3\n                    }\n                  },\n                  ContinueAsNewInitiator: {\n                    values: {\n                      CONTINUE_AS_NEW_INITIATOR_UNSPECIFIED: 0,\n                      CONTINUE_AS_NEW_INITIATOR_WORKFLOW: 1,\n                      CONTINUE_AS_NEW_INITIATOR_RETRY: 2,\n                      CONTINUE_AS_NEW_INITIATOR_CRON_SCHEDULE: 3\n                    }\n                  },\n                  WorkflowExecutionStatus: {\n                    values: {\n                      WORKFLOW_EXECUTION_STATUS_UNSPECIFIED: 0,\n                      WORKFLOW_EXECUTION_STATUS_RUNNING: 1,\n                      WORKFLOW_EXECUTION_STATUS_COMPLETED: 2,\n                      WORKFLOW_EXECUTION_STATUS_FAILED: 3,\n                      WORKFLOW_EXECUTION_STATUS_CANCELED: 4,\n                      WORKFLOW_EXECUTION_STATUS_TERMINATED: 5,\n                      WORKFLOW_EXECUTION_STATUS_CONTINUED_AS_NEW: 6,\n                      WORKFLOW_EXECUTION_STATUS_TIMED_OUT: 7,\n                      WORKFLOW_EXECUTION_STATUS_PAUSED: 8\n                    }\n                  },\n                  PendingActivityState: {\n                    values: {\n                      PENDING_ACTIVITY_STATE_UNSPECIFIED: 0,\n                      PENDING_ACTIVITY_STATE_SCHEDULED: 1,\n                      PENDING_ACTIVITY_STATE_STARTED: 2,\n                      PENDING_ACTIVITY_STATE_CANCEL_REQUESTED: 3,\n                      PENDING_ACTIVITY_STATE_PAUSED: 4,\n                      PENDING_ACTIVITY_STATE_PAUSE_REQUESTED: 5\n                    }\n                  },\n                  PendingWorkflowTaskState: {\n                    values: {\n                      PENDING_WORKFLOW_TASK_STATE_UNSPECIFIED: 0,\n                      PENDING_WORKFLOW_TASK_STATE_SCHEDULED: 1,\n                      PENDING_WORKFLOW_TASK_STATE_STARTED: 2\n                    }\n                  },\n                  HistoryEventFilterType: {\n                    values: {\n                      HISTORY_EVENT_FILTER_TYPE_UNSPECIFIED: 0,\n                      HISTORY_EVENT_FILTER_TYPE_ALL_EVENT: 1,\n                      HISTORY_EVENT_FILTER_TYPE_CLOSE_EVENT: 2\n                    }\n                  },\n                  RetryState: {\n                    values: {\n                      RETRY_STATE_UNSPECIFIED: 0,\n                      RETRY_STATE_IN_PROGRESS: 1,\n                      RETRY_STATE_NON_RETRYABLE_FAILURE: 2,\n                      RETRY_STATE_TIMEOUT: 3,\n                      RETRY_STATE_MAXIMUM_ATTEMPTS_REACHED: 4,\n                      RETRY_STATE_RETRY_POLICY_NOT_SET: 5,\n                      RETRY_STATE_INTERNAL_SERVER_ERROR: 6,\n                      RETRY_STATE_CANCEL_REQUESTED: 7\n                    }\n                  },\n                  TimeoutType: {\n                    values: {\n                      TIMEOUT_TYPE_UNSPECIFIED: 0,\n                      TIMEOUT_TYPE_START_TO_CLOSE: 1,\n                      TIMEOUT_TYPE_SCHEDULE_TO_START: 2,\n                      TIMEOUT_TYPE_SCHEDULE_TO_CLOSE: 3,\n                      TIMEOUT_TYPE_HEARTBEAT: 4\n                    }\n                  },\n                  VersioningBehavior: {\n                    values: {\n                      VERSIONING_BEHAVIOR_UNSPECIFIED: 0,\n                      VERSIONING_BEHAVIOR_PINNED: 1,\n                      VERSIONING_BEHAVIOR_AUTO_UPGRADE: 2\n                    }\n                  },\n                  ContinueAsNewVersioningBehavior: {\n                    values: {\n                      CONTINUE_AS_NEW_VERSIONING_BEHAVIOR_UNSPECIFIED: 0,\n                      CONTINUE_AS_NEW_VERSIONING_BEHAVIOR_AUTO_UPGRADE: 1,\n                      CONTINUE_AS_NEW_VERSIONING_BEHAVIOR_USE_RAMPING_VERSION: 2\n                    }\n                  },\n                  SuggestContinueAsNewReason: {\n                    values: {\n                      SUGGEST_CONTINUE_AS_NEW_REASON_UNSPECIFIED: 0,\n                      SUGGEST_CONTINUE_AS_NEW_REASON_HISTORY_SIZE_TOO_LARGE: 1,\n                      SUGGEST_CONTINUE_AS_NEW_REASON_TOO_MANY_HISTORY_EVENTS: 2,\n                      SUGGEST_CONTINUE_AS_NEW_REASON_TOO_MANY_UPDATES: 3\n                    },\n                    reserved: [\n                      [\n                        4,\n                        4\n                      ],\n                      \"SUGGEST_CONTINUE_AS_NEW_REASON_TARGET_WORKER_DEPLOYMENT_VERSION_CHANGED\"\n                    ]\n                  },\n                  NexusHandlerErrorRetryBehavior: {\n                    values: {\n                      NEXUS_HANDLER_ERROR_RETRY_BEHAVIOR_UNSPECIFIED: 0,\n                      NEXUS_HANDLER_ERROR_RETRY_BEHAVIOR_RETRYABLE: 1,\n                      NEXUS_HANDLER_ERROR_RETRY_BEHAVIOR_NON_RETRYABLE: 2\n                    }\n                  },\n                  NexusOperationExecutionStatus: {\n                    values: {\n                      NEXUS_OPERATION_EXECUTION_STATUS_UNSPECIFIED: 0,\n                      NEXUS_OPERATION_EXECUTION_STATUS_RUNNING: 1,\n                      NEXUS_OPERATION_EXECUTION_STATUS_COMPLETED: 2,\n                      NEXUS_OPERATION_EXECUTION_STATUS_FAILED: 3,\n                      NEXUS_OPERATION_EXECUTION_STATUS_CANCELED: 4,\n                      NEXUS_OPERATION_EXECUTION_STATUS_TERMINATED: 5,\n                      NEXUS_OPERATION_EXECUTION_STATUS_TIMED_OUT: 6\n                    }\n                  },\n                  NexusOperationWaitStage: {\n                    values: {\n                      NEXUS_OPERATION_WAIT_STAGE_UNSPECIFIED: 0,\n                      NEXUS_OPERATION_WAIT_STAGE_STARTED: 1,\n                      NEXUS_OPERATION_WAIT_STAGE_CLOSED: 2\n                    }\n                  },\n                  NexusOperationIdReusePolicy: {\n                    values: {\n                      NEXUS_OPERATION_ID_REUSE_POLICY_UNSPECIFIED: 0,\n                      NEXUS_OPERATION_ID_REUSE_POLICY_ALLOW_DUPLICATE: 1,\n                      NEXUS_OPERATION_ID_REUSE_POLICY_ALLOW_DUPLICATE_FAILED_ONLY: 2,\n                      NEXUS_OPERATION_ID_REUSE_POLICY_REJECT_DUPLICATE: 3\n                    }\n                  },\n                  NexusOperationIdConflictPolicy: {\n                    values: {\n                      NEXUS_OPERATION_ID_CONFLICT_POLICY_UNSPECIFIED: 0,\n                      NEXUS_OPERATION_ID_CONFLICT_POLICY_FAIL: 1,\n                      NEXUS_OPERATION_ID_CONFLICT_POLICY_USE_EXISTING: 2\n                    }\n                  },\n                  UpdateWorkflowExecutionLifecycleStage: {\n                    values: {\n                      UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_UNSPECIFIED: 0,\n                      UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_ADMITTED: 1,\n                      UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_ACCEPTED: 2,\n                      UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_COMPLETED: 3\n                    }\n                  },\n                  UpdateAdmittedEventOrigin: {\n                    values: {\n                      UPDATE_ADMITTED_EVENT_ORIGIN_UNSPECIFIED: 0,\n                      UPDATE_ADMITTED_EVENT_ORIGIN_REAPPLY: 1\n                    }\n                  },\n                  BatchOperationType: {\n                    values: {\n                      BATCH_OPERATION_TYPE_UNSPECIFIED: 0,\n                      BATCH_OPERATION_TYPE_TERMINATE: 1,\n                      BATCH_OPERATION_TYPE_CANCEL: 2,\n                      BATCH_OPERATION_TYPE_SIGNAL: 3,\n                      BATCH_OPERATION_TYPE_DELETE: 4,\n                      BATCH_OPERATION_TYPE_RESET: 5,\n                      BATCH_OPERATION_TYPE_UPDATE_EXECUTION_OPTIONS: 6,\n                      BATCH_OPERATION_TYPE_UNPAUSE_ACTIVITY: 7,\n                      BATCH_OPERATION_TYPE_UPDATE_ACTIVITY_OPTIONS: 8,\n                      BATCH_OPERATION_TYPE_RESET_ACTIVITY: 9\n                    }\n                  },\n                  BatchOperationState: {\n                    values: {\n                      BATCH_OPERATION_STATE_UNSPECIFIED: 0,\n                      BATCH_OPERATION_STATE_RUNNING: 1,\n                      BATCH_OPERATION_STATE_COMPLETED: 2,\n                      BATCH_OPERATION_STATE_FAILED: 3\n                    }\n                  },\n                  NamespaceState: {\n                    values: {\n                      NAMESPACE_STATE_UNSPECIFIED: 0,\n                      NAMESPACE_STATE_REGISTERED: 1,\n                      NAMESPACE_STATE_DEPRECATED: 2,\n                      NAMESPACE_STATE_DELETED: 3\n                    }\n                  },\n                  ArchivalState: {\n                    values: {\n                      ARCHIVAL_STATE_UNSPECIFIED: 0,\n                      ARCHIVAL_STATE_DISABLED: 1,\n                      ARCHIVAL_STATE_ENABLED: 2\n                    }\n                  },\n                  ReplicationState: {\n                    values: {\n                      REPLICATION_STATE_UNSPECIFIED: 0,\n                      REPLICATION_STATE_NORMAL: 1,\n                      REPLICATION_STATE_HANDOVER: 2\n                    }\n                  },\n                  WorkflowTaskFailedCause: {\n                    values: {\n                      WORKFLOW_TASK_FAILED_CAUSE_UNSPECIFIED: 0,\n                      WORKFLOW_TASK_FAILED_CAUSE_UNHANDLED_COMMAND: 1,\n                      WORKFLOW_TASK_FAILED_CAUSE_BAD_SCHEDULE_ACTIVITY_ATTRIBUTES: 2,\n                      WORKFLOW_TASK_FAILED_CAUSE_BAD_REQUEST_CANCEL_ACTIVITY_ATTRIBUTES: 3,\n                      WORKFLOW_TASK_FAILED_CAUSE_BAD_START_TIMER_ATTRIBUTES: 4,\n                      WORKFLOW_TASK_FAILED_CAUSE_BAD_CANCEL_TIMER_ATTRIBUTES: 5,\n                      WORKFLOW_TASK_FAILED_CAUSE_BAD_RECORD_MARKER_ATTRIBUTES: 6,\n                      WORKFLOW_TASK_FAILED_CAUSE_BAD_COMPLETE_WORKFLOW_EXECUTION_ATTRIBUTES: 7,\n                      WORKFLOW_TASK_FAILED_CAUSE_BAD_FAIL_WORKFLOW_EXECUTION_ATTRIBUTES: 8,\n                      WORKFLOW_TASK_FAILED_CAUSE_BAD_CANCEL_WORKFLOW_EXECUTION_ATTRIBUTES: 9,\n                      WORKFLOW_TASK_FAILED_CAUSE_BAD_REQUEST_CANCEL_EXTERNAL_WORKFLOW_EXECUTION_ATTRIBUTES: 10,\n                      WORKFLOW_TASK_FAILED_CAUSE_BAD_CONTINUE_AS_NEW_ATTRIBUTES: 11,\n                      WORKFLOW_TASK_FAILED_CAUSE_START_TIMER_DUPLICATE_ID: 12,\n                      WORKFLOW_TASK_FAILED_CAUSE_RESET_STICKY_TASK_QUEUE: 13,\n                      WORKFLOW_TASK_FAILED_CAUSE_WORKFLOW_WORKER_UNHANDLED_FAILURE: 14,\n                      WORKFLOW_TASK_FAILED_CAUSE_BAD_SIGNAL_WORKFLOW_EXECUTION_ATTRIBUTES: 15,\n                      WORKFLOW_TASK_FAILED_CAUSE_BAD_START_CHILD_EXECUTION_ATTRIBUTES: 16,\n                      WORKFLOW_TASK_FAILED_CAUSE_FORCE_CLOSE_COMMAND: 17,\n                      WORKFLOW_TASK_FAILED_CAUSE_FAILOVER_CLOSE_COMMAND: 18,\n                      WORKFLOW_TASK_FAILED_CAUSE_BAD_SIGNAL_INPUT_SIZE: 19,\n                      WORKFLOW_TASK_FAILED_CAUSE_RESET_WORKFLOW: 20,\n                      WORKFLOW_TASK_FAILED_CAUSE_BAD_BINARY: 21,\n                      WORKFLOW_TASK_FAILED_CAUSE_SCHEDULE_ACTIVITY_DUPLICATE_ID: 22,\n                      WORKFLOW_TASK_FAILED_CAUSE_BAD_SEARCH_ATTRIBUTES: 23,\n                      WORKFLOW_TASK_FAILED_CAUSE_NON_DETERMINISTIC_ERROR: 24,\n                      WORKFLOW_TASK_FAILED_CAUSE_BAD_MODIFY_WORKFLOW_PROPERTIES_ATTRIBUTES: 25,\n                      WORKFLOW_TASK_FAILED_CAUSE_PENDING_CHILD_WORKFLOWS_LIMIT_EXCEEDED: 26,\n                      WORKFLOW_TASK_FAILED_CAUSE_PENDING_ACTIVITIES_LIMIT_EXCEEDED: 27,\n                      WORKFLOW_TASK_FAILED_CAUSE_PENDING_SIGNALS_LIMIT_EXCEEDED: 28,\n                      WORKFLOW_TASK_FAILED_CAUSE_PENDING_REQUEST_CANCEL_LIMIT_EXCEEDED: 29,\n                      WORKFLOW_TASK_FAILED_CAUSE_BAD_UPDATE_WORKFLOW_EXECUTION_MESSAGE: 30,\n                      WORKFLOW_TASK_FAILED_CAUSE_UNHANDLED_UPDATE: 31,\n                      WORKFLOW_TASK_FAILED_CAUSE_BAD_SCHEDULE_NEXUS_OPERATION_ATTRIBUTES: 32,\n                      WORKFLOW_TASK_FAILED_CAUSE_PENDING_NEXUS_OPERATIONS_LIMIT_EXCEEDED: 33,\n                      WORKFLOW_TASK_FAILED_CAUSE_BAD_REQUEST_CANCEL_NEXUS_OPERATION_ATTRIBUTES: 34,\n                      WORKFLOW_TASK_FAILED_CAUSE_FEATURE_DISABLED: 35,\n                      WORKFLOW_TASK_FAILED_CAUSE_GRPC_MESSAGE_TOO_LARGE: 36,\n                      WORKFLOW_TASK_FAILED_CAUSE_PAYLOADS_TOO_LARGE: 37\n                    }\n                  },\n                  StartChildWorkflowExecutionFailedCause: {\n                    values: {\n                      START_CHILD_WORKFLOW_EXECUTION_FAILED_CAUSE_UNSPECIFIED: 0,\n                      START_CHILD_WORKFLOW_EXECUTION_FAILED_CAUSE_WORKFLOW_ALREADY_EXISTS: 1,\n                      START_CHILD_WORKFLOW_EXECUTION_FAILED_CAUSE_NAMESPACE_NOT_FOUND: 2\n                    }\n                  },\n                  CancelExternalWorkflowExecutionFailedCause: {\n                    values: {\n                      CANCEL_EXTERNAL_WORKFLOW_EXECUTION_FAILED_CAUSE_UNSPECIFIED: 0,\n                      CANCEL_EXTERNAL_WORKFLOW_EXECUTION_FAILED_CAUSE_EXTERNAL_WORKFLOW_EXECUTION_NOT_FOUND: 1,\n                      CANCEL_EXTERNAL_WORKFLOW_EXECUTION_FAILED_CAUSE_NAMESPACE_NOT_FOUND: 2\n                    }\n                  },\n                  SignalExternalWorkflowExecutionFailedCause: {\n                    values: {\n                      SIGNAL_EXTERNAL_WORKFLOW_EXECUTION_FAILED_CAUSE_UNSPECIFIED: 0,\n                      SIGNAL_EXTERNAL_WORKFLOW_EXECUTION_FAILED_CAUSE_EXTERNAL_WORKFLOW_EXECUTION_NOT_FOUND: 1,\n                      SIGNAL_EXTERNAL_WORKFLOW_EXECUTION_FAILED_CAUSE_NAMESPACE_NOT_FOUND: 2,\n                      SIGNAL_EXTERNAL_WORKFLOW_EXECUTION_FAILED_CAUSE_SIGNAL_COUNT_LIMIT_EXCEEDED: 3\n                    }\n                  },\n                  ResourceExhaustedCause: {\n                    values: {\n                      RESOURCE_EXHAUSTED_CAUSE_UNSPECIFIED: 0,\n                      RESOURCE_EXHAUSTED_CAUSE_RPS_LIMIT: 1,\n                      RESOURCE_EXHAUSTED_CAUSE_CONCURRENT_LIMIT: 2,\n                      RESOURCE_EXHAUSTED_CAUSE_SYSTEM_OVERLOADED: 3,\n                      RESOURCE_EXHAUSTED_CAUSE_PERSISTENCE_LIMIT: 4,\n                      RESOURCE_EXHAUSTED_CAUSE_BUSY_WORKFLOW: 5,\n                      RESOURCE_EXHAUSTED_CAUSE_APS_LIMIT: 6,\n                      RESOURCE_EXHAUSTED_CAUSE_PERSISTENCE_STORAGE_LIMIT: 7,\n                      RESOURCE_EXHAUSTED_CAUSE_CIRCUIT_BREAKER_OPEN: 8,\n                      RESOURCE_EXHAUSTED_CAUSE_OPS_LIMIT: 9,\n                      RESOURCE_EXHAUSTED_CAUSE_WORKER_DEPLOYMENT_LIMITS: 10\n                    }\n                  },\n                  ResourceExhaustedScope: {\n                    values: {\n                      RESOURCE_EXHAUSTED_SCOPE_UNSPECIFIED: 0,\n                      RESOURCE_EXHAUSTED_SCOPE_NAMESPACE: 1,\n                      RESOURCE_EXHAUSTED_SCOPE_SYSTEM: 2\n                    }\n                  },\n                  QueryResultType: {\n                    values: {\n                      QUERY_RESULT_TYPE_UNSPECIFIED: 0,\n                      QUERY_RESULT_TYPE_ANSWERED: 1,\n                      QUERY_RESULT_TYPE_FAILED: 2\n                    }\n                  },\n                  QueryRejectCondition: {\n                    values: {\n                      QUERY_REJECT_CONDITION_UNSPECIFIED: 0,\n                      QUERY_REJECT_CONDITION_NONE: 1,\n                      QUERY_REJECT_CONDITION_NOT_OPEN: 2,\n                      QUERY_REJECT_CONDITION_NOT_COMPLETED_CLEANLY: 3\n                    }\n                  },\n                  TaskQueueKind: {\n                    values: {\n                      TASK_QUEUE_KIND_UNSPECIFIED: 0,\n                      TASK_QUEUE_KIND_NORMAL: 1,\n                      TASK_QUEUE_KIND_STICKY: 2,\n                      TASK_QUEUE_KIND_WORKER_COMMANDS: 3\n                    }\n                  },\n                  TaskQueueType: {\n                    values: {\n                      TASK_QUEUE_TYPE_UNSPECIFIED: 0,\n                      TASK_QUEUE_TYPE_WORKFLOW: 1,\n                      TASK_QUEUE_TYPE_ACTIVITY: 2,\n                      TASK_QUEUE_TYPE_NEXUS: 3\n                    }\n                  },\n                  TaskReachability: {\n                    values: {\n                      TASK_REACHABILITY_UNSPECIFIED: 0,\n                      TASK_REACHABILITY_NEW_WORKFLOWS: 1,\n                      TASK_REACHABILITY_EXISTING_WORKFLOWS: 2,\n                      TASK_REACHABILITY_OPEN_WORKFLOWS: 3,\n                      TASK_REACHABILITY_CLOSED_WORKFLOWS: 4\n                    }\n                  },\n                  BuildIdTaskReachability: {\n                    values: {\n                      BUILD_ID_TASK_REACHABILITY_UNSPECIFIED: 0,\n                      BUILD_ID_TASK_REACHABILITY_REACHABLE: 1,\n                      BUILD_ID_TASK_REACHABILITY_CLOSED_WORKFLOWS_ONLY: 2,\n                      BUILD_ID_TASK_REACHABILITY_UNREACHABLE: 3\n                    }\n                  },\n                  DescribeTaskQueueMode: {\n                    values: {\n                      DESCRIBE_TASK_QUEUE_MODE_UNSPECIFIED: 0,\n                      DESCRIBE_TASK_QUEUE_MODE_ENHANCED: 1\n                    }\n                  },\n                  RateLimitSource: {\n                    values: {\n                      RATE_LIMIT_SOURCE_UNSPECIFIED: 0,\n                      RATE_LIMIT_SOURCE_API: 1,\n                      RATE_LIMIT_SOURCE_WORKER: 2,\n                      RATE_LIMIT_SOURCE_SYSTEM: 3\n                    }\n                  },\n                  RoutingConfigUpdateState: {\n                    values: {\n                      ROUTING_CONFIG_UPDATE_STATE_UNSPECIFIED: 0,\n                      ROUTING_CONFIG_UPDATE_STATE_IN_PROGRESS: 1,\n                      ROUTING_CONFIG_UPDATE_STATE_COMPLETED: 2\n                    }\n                  },\n                  DeploymentReachability: {\n                    values: {\n                      DEPLOYMENT_REACHABILITY_UNSPECIFIED: 0,\n                      DEPLOYMENT_REACHABILITY_REACHABLE: 1,\n                      DEPLOYMENT_REACHABILITY_CLOSED_WORKFLOWS_ONLY: 2,\n                      DEPLOYMENT_REACHABILITY_UNREACHABLE: 3\n                    }\n                  },\n                  VersionDrainageStatus: {\n                    values: {\n                      VERSION_DRAINAGE_STATUS_UNSPECIFIED: 0,\n                      VERSION_DRAINAGE_STATUS_DRAINING: 1,\n                      VERSION_DRAINAGE_STATUS_DRAINED: 2\n                    }\n                  },\n                  WorkerVersioningMode: {\n                    values: {\n                      WORKER_VERSIONING_MODE_UNSPECIFIED: 0,\n                      WORKER_VERSIONING_MODE_UNVERSIONED: 1,\n                      WORKER_VERSIONING_MODE_VERSIONED: 2\n                    }\n                  },\n                  WorkerDeploymentVersionStatus: {\n                    values: {\n                      WORKER_DEPLOYMENT_VERSION_STATUS_UNSPECIFIED: 0,\n                      WORKER_DEPLOYMENT_VERSION_STATUS_INACTIVE: 1,\n                      WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT: 2,\n                      WORKER_DEPLOYMENT_VERSION_STATUS_RAMPING: 3,\n                      WORKER_DEPLOYMENT_VERSION_STATUS_DRAINING: 4,\n                      WORKER_DEPLOYMENT_VERSION_STATUS_DRAINED: 5,\n                      WORKER_DEPLOYMENT_VERSION_STATUS_CREATED: 6\n                    }\n                  },\n                  ActivityExecutionStatus: {\n                    values: {\n                      ACTIVITY_EXECUTION_STATUS_UNSPECIFIED: 0,\n                      ACTIVITY_EXECUTION_STATUS_RUNNING: 1,\n                      ACTIVITY_EXECUTION_STATUS_COMPLETED: 2,\n                      ACTIVITY_EXECUTION_STATUS_FAILED: 3,\n                      ACTIVITY_EXECUTION_STATUS_CANCELED: 4,\n                      ACTIVITY_EXECUTION_STATUS_TERMINATED: 5,\n                      ACTIVITY_EXECUTION_STATUS_TIMED_OUT: 6\n                    }\n                  },\n                  ActivityIdReusePolicy: {\n                    values: {\n                      ACTIVITY_ID_REUSE_POLICY_UNSPECIFIED: 0,\n                      ACTIVITY_ID_REUSE_POLICY_ALLOW_DUPLICATE: 1,\n                      ACTIVITY_ID_REUSE_POLICY_ALLOW_DUPLICATE_FAILED_ONLY: 2,\n                      ACTIVITY_ID_REUSE_POLICY_REJECT_DUPLICATE: 3\n                    }\n                  },\n                  ActivityIdConflictPolicy: {\n                    values: {\n                      ACTIVITY_ID_CONFLICT_POLICY_UNSPECIFIED: 0,\n                      ACTIVITY_ID_CONFLICT_POLICY_FAIL: 1,\n                      ACTIVITY_ID_CONFLICT_POLICY_USE_EXISTING: 2\n                    }\n                  },\n                  CommandType: {\n                    values: {\n                      COMMAND_TYPE_UNSPECIFIED: 0,\n                      COMMAND_TYPE_SCHEDULE_ACTIVITY_TASK: 1,\n                      COMMAND_TYPE_REQUEST_CANCEL_ACTIVITY_TASK: 2,\n                      COMMAND_TYPE_START_TIMER: 3,\n                      COMMAND_TYPE_COMPLETE_WORKFLOW_EXECUTION: 4,\n                      COMMAND_TYPE_FAIL_WORKFLOW_EXECUTION: 5,\n                      COMMAND_TYPE_CANCEL_TIMER: 6,\n                      COMMAND_TYPE_CANCEL_WORKFLOW_EXECUTION: 7,\n                      COMMAND_TYPE_REQUEST_CANCEL_EXTERNAL_WORKFLOW_EXECUTION: 8,\n                      COMMAND_TYPE_RECORD_MARKER: 9,\n                      COMMAND_TYPE_CONTINUE_AS_NEW_WORKFLOW_EXECUTION: 10,\n                      COMMAND_TYPE_START_CHILD_WORKFLOW_EXECUTION: 11,\n                      COMMAND_TYPE_SIGNAL_EXTERNAL_WORKFLOW_EXECUTION: 12,\n                      COMMAND_TYPE_UPSERT_WORKFLOW_SEARCH_ATTRIBUTES: 13,\n                      COMMAND_TYPE_PROTOCOL_MESSAGE: 14,\n                      COMMAND_TYPE_MODIFY_WORKFLOW_PROPERTIES: 16,\n                      COMMAND_TYPE_SCHEDULE_NEXUS_OPERATION: 17,\n                      COMMAND_TYPE_REQUEST_CANCEL_NEXUS_OPERATION: 18\n                    }\n                  },\n                  ScheduleOverlapPolicy: {\n                    values: {\n                      SCHEDULE_OVERLAP_POLICY_UNSPECIFIED: 0,\n                      SCHEDULE_OVERLAP_POLICY_SKIP: 1,\n                      SCHEDULE_OVERLAP_POLICY_BUFFER_ONE: 2,\n                      SCHEDULE_OVERLAP_POLICY_BUFFER_ALL: 3,\n                      SCHEDULE_OVERLAP_POLICY_CANCEL_OTHER: 4,\n                      SCHEDULE_OVERLAP_POLICY_TERMINATE_OTHER: 5,\n                      SCHEDULE_OVERLAP_POLICY_ALLOW_ALL: 6\n                    }\n                  }\n                }\n              }\n            }\n          },\n          failure: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/failure/v1;failure\",\n                  java_package: \"io.temporal.api.failure.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::Failure::V1\",\n                  csharp_namespace: \"Temporalio.Api.Failure.V1\"\n                },\n                nested: {\n                  ApplicationFailureInfo: {\n                    fields: {\n                      type: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      nonRetryable: {\n                        type: \"bool\",\n                        id: 2\n                      },\n                      details: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 3\n                      },\n                      nextRetryDelay: {\n                        type: \"google.protobuf.Duration\",\n                        id: 4\n                      },\n                      category: {\n                        type: \"temporal.api.enums.v1.ApplicationErrorCategory\",\n                        id: 5\n                      }\n                    }\n                  },\n                  TimeoutFailureInfo: {\n                    fields: {\n                      timeoutType: {\n                        type: \"temporal.api.enums.v1.TimeoutType\",\n                        id: 1\n                      },\n                      lastHeartbeatDetails: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 2\n                      }\n                    }\n                  },\n                  CanceledFailureInfo: {\n                    fields: {\n                      details: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 1\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  TerminatedFailureInfo: {\n                    fields: {\n                      identity: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  ServerFailureInfo: {\n                    fields: {\n                      nonRetryable: {\n                        type: \"bool\",\n                        id: 1\n                      }\n                    }\n                  },\n                  ResetWorkflowFailureInfo: {\n                    fields: {\n                      lastHeartbeatDetails: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 1\n                      }\n                    }\n                  },\n                  ActivityFailureInfo: {\n                    fields: {\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      startedEventId: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      activityType: {\n                        type: \"temporal.api.common.v1.ActivityType\",\n                        id: 4\n                      },\n                      activityId: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      retryState: {\n                        type: \"temporal.api.enums.v1.RetryState\",\n                        id: 6\n                      }\n                    }\n                  },\n                  ChildWorkflowExecutionFailureInfo: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      },\n                      workflowType: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 3\n                      },\n                      initiatedEventId: {\n                        type: \"int64\",\n                        id: 4\n                      },\n                      startedEventId: {\n                        type: \"int64\",\n                        id: 5\n                      },\n                      retryState: {\n                        type: \"temporal.api.enums.v1.RetryState\",\n                        id: 6\n                      }\n                    }\n                  },\n                  NexusOperationFailureInfo: {\n                    fields: {\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      endpoint: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      service: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      operation: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      operationId: {\n                        type: \"string\",\n                        id: 5,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      operationToken: {\n                        type: \"string\",\n                        id: 6\n                      }\n                    }\n                  },\n                  NexusHandlerFailureInfo: {\n                    fields: {\n                      type: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      retryBehavior: {\n                        type: \"temporal.api.enums.v1.NexusHandlerErrorRetryBehavior\",\n                        id: 2\n                      }\n                    }\n                  },\n                  Failure: {\n                    oneofs: {\n                      failureInfo: {\n                        oneof: [\n                          \"applicationFailureInfo\",\n                          \"timeoutFailureInfo\",\n                          \"canceledFailureInfo\",\n                          \"terminatedFailureInfo\",\n                          \"serverFailureInfo\",\n                          \"resetWorkflowFailureInfo\",\n                          \"activityFailureInfo\",\n                          \"childWorkflowExecutionFailureInfo\",\n                          \"nexusOperationExecutionFailureInfo\",\n                          \"nexusHandlerFailureInfo\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      message: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      source: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      stackTrace: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      encodedAttributes: {\n                        type: \"temporal.api.common.v1.Payload\",\n                        id: 20\n                      },\n                      cause: {\n                        type: \"Failure\",\n                        id: 4\n                      },\n                      applicationFailureInfo: {\n                        type: \"ApplicationFailureInfo\",\n                        id: 5\n                      },\n                      timeoutFailureInfo: {\n                        type: \"TimeoutFailureInfo\",\n                        id: 6\n                      },\n                      canceledFailureInfo: {\n                        type: \"CanceledFailureInfo\",\n                        id: 7\n                      },\n                      terminatedFailureInfo: {\n                        type: \"TerminatedFailureInfo\",\n                        id: 8\n                      },\n                      serverFailureInfo: {\n                        type: \"ServerFailureInfo\",\n                        id: 9\n                      },\n                      resetWorkflowFailureInfo: {\n                        type: \"ResetWorkflowFailureInfo\",\n                        id: 10\n                      },\n                      activityFailureInfo: {\n                        type: \"ActivityFailureInfo\",\n                        id: 11\n                      },\n                      childWorkflowExecutionFailureInfo: {\n                        type: \"ChildWorkflowExecutionFailureInfo\",\n                        id: 12\n                      },\n                      nexusOperationExecutionFailureInfo: {\n                        type: \"NexusOperationFailureInfo\",\n                        id: 13\n                      },\n                      nexusHandlerFailureInfo: {\n                        type: \"NexusHandlerFailureInfo\",\n                        id: 14\n                      }\n                    }\n                  },\n                  MultiOperationExecutionAborted: {\n                    fields: {}\n                  }\n                }\n              }\n            }\n          },\n          update: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/update/v1;update\",\n                  java_package: \"io.temporal.api.update.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::Update::V1\",\n                  csharp_namespace: \"Temporalio.Api.Update.V1\"\n                },\n                nested: {\n                  WaitPolicy: {\n                    fields: {\n                      lifecycleStage: {\n                        type: \"temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage\",\n                        id: 1\n                      }\n                    }\n                  },\n                  UpdateRef: {\n                    fields: {\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 1\n                      },\n                      updateId: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  Outcome: {\n                    oneofs: {\n                      value: {\n                        oneof: [\n                          \"success\",\n                          \"failure\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      success: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 1\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 2\n                      }\n                    }\n                  },\n                  Meta: {\n                    fields: {\n                      updateId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  Input: {\n                    fields: {\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 1\n                      },\n                      name: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      args: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 3\n                      }\n                    }\n                  },\n                  Request: {\n                    fields: {\n                      meta: {\n                        type: \"Meta\",\n                        id: 1\n                      },\n                      input: {\n                        type: \"Input\",\n                        id: 2\n                      }\n                    }\n                  },\n                  Rejection: {\n                    fields: {\n                      rejectedRequestMessageId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      rejectedRequestSequencingEventId: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      rejectedRequest: {\n                        type: \"Request\",\n                        id: 3\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 4\n                      }\n                    }\n                  },\n                  Acceptance: {\n                    fields: {\n                      acceptedRequestMessageId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      acceptedRequestSequencingEventId: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      acceptedRequest: {\n                        type: \"Request\",\n                        id: 3\n                      }\n                    }\n                  },\n                  Response: {\n                    fields: {\n                      meta: {\n                        type: \"Meta\",\n                        id: 1\n                      },\n                      outcome: {\n                        type: \"Outcome\",\n                        id: 2\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          nexus: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/nexus/v1;nexus\",\n                  java_package: \"io.temporal.api.nexus.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::Nexus::V1\",\n                  csharp_namespace: \"Temporalio.Api.Nexus.V1\"\n                },\n                nested: {\n                  Failure: {\n                    fields: {\n                      message: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      stackTrace: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      metadata: {\n                        keyType: \"string\",\n                        type: \"string\",\n                        id: 2\n                      },\n                      details: {\n                        type: \"bytes\",\n                        id: 3\n                      },\n                      cause: {\n                        type: \"Failure\",\n                        id: 5\n                      }\n                    }\n                  },\n                  HandlerError: {\n                    fields: {\n                      errorType: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      failure: {\n                        type: \"Failure\",\n                        id: 2\n                      },\n                      retryBehavior: {\n                        type: \"temporal.api.enums.v1.NexusHandlerErrorRetryBehavior\",\n                        id: 3\n                      }\n                    }\n                  },\n                  UnsuccessfulOperationError: {\n                    fields: {\n                      operationState: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      failure: {\n                        type: \"Failure\",\n                        id: 2\n                      }\n                    }\n                  },\n                  Link: {\n                    fields: {\n                      url: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      type: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  StartOperationRequest: {\n                    fields: {\n                      service: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      operation: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      callback: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      payload: {\n                        type: \"temporal.api.common.v1.Payload\",\n                        id: 5\n                      },\n                      callbackHeader: {\n                        keyType: \"string\",\n                        type: \"string\",\n                        id: 6\n                      },\n                      links: {\n                        rule: \"repeated\",\n                        type: \"Link\",\n                        id: 7\n                      }\n                    }\n                  },\n                  CancelOperationRequest: {\n                    fields: {\n                      service: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      operation: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      operationId: {\n                        type: \"string\",\n                        id: 3,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      operationToken: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  Request: {\n                    oneofs: {\n                      variant: {\n                        oneof: [\n                          \"startOperation\",\n                          \"cancelOperation\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      header: {\n                        keyType: \"string\",\n                        type: \"string\",\n                        id: 1\n                      },\n                      scheduledTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 2\n                      },\n                      capabilities: {\n                        type: \"Capabilities\",\n                        id: 100\n                      },\n                      startOperation: {\n                        type: \"StartOperationRequest\",\n                        id: 3\n                      },\n                      cancelOperation: {\n                        type: \"CancelOperationRequest\",\n                        id: 4\n                      },\n                      endpoint: {\n                        type: \"string\",\n                        id: 10\n                      }\n                    },\n                    nested: {\n                      Capabilities: {\n                        fields: {\n                          temporalFailureResponses: {\n                            type: \"bool\",\n                            id: 1\n                          }\n                        }\n                      }\n                    }\n                  },\n                  StartOperationResponse: {\n                    oneofs: {\n                      variant: {\n                        oneof: [\n                          \"syncSuccess\",\n                          \"asyncSuccess\",\n                          \"operationError\",\n                          \"failure\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      syncSuccess: {\n                        type: \"Sync\",\n                        id: 1\n                      },\n                      asyncSuccess: {\n                        type: \"Async\",\n                        id: 2\n                      },\n                      operationError: {\n                        type: \"UnsuccessfulOperationError\",\n                        id: 3,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 4\n                      }\n                    },\n                    nested: {\n                      Sync: {\n                        fields: {\n                          payload: {\n                            type: \"temporal.api.common.v1.Payload\",\n                            id: 1\n                          },\n                          links: {\n                            rule: \"repeated\",\n                            type: \"Link\",\n                            id: 2\n                          }\n                        }\n                      },\n                      Async: {\n                        fields: {\n                          operationId: {\n                            type: \"string\",\n                            id: 1,\n                            options: {\n                              deprecated: true\n                            }\n                          },\n                          links: {\n                            rule: \"repeated\",\n                            type: \"Link\",\n                            id: 2\n                          },\n                          operationToken: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      }\n                    }\n                  },\n                  CancelOperationResponse: {\n                    fields: {}\n                  },\n                  Response: {\n                    oneofs: {\n                      variant: {\n                        oneof: [\n                          \"startOperation\",\n                          \"cancelOperation\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      startOperation: {\n                        type: \"StartOperationResponse\",\n                        id: 1\n                      },\n                      cancelOperation: {\n                        type: \"CancelOperationResponse\",\n                        id: 2\n                      }\n                    }\n                  },\n                  Endpoint: {\n                    fields: {\n                      version: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      id: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      spec: {\n                        type: \"EndpointSpec\",\n                        id: 3\n                      },\n                      createdTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 4\n                      },\n                      lastModifiedTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 5\n                      },\n                      urlPrefix: {\n                        type: \"string\",\n                        id: 6\n                      }\n                    }\n                  },\n                  EndpointSpec: {\n                    fields: {\n                      name: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      description: {\n                        type: \"temporal.api.common.v1.Payload\",\n                        id: 2\n                      },\n                      target: {\n                        type: \"EndpointTarget\",\n                        id: 3\n                      }\n                    }\n                  },\n                  EndpointTarget: {\n                    oneofs: {\n                      variant: {\n                        oneof: [\n                          \"worker\",\n                          \"external\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      worker: {\n                        type: \"Worker\",\n                        id: 1\n                      },\n                      external: {\n                        type: \"External\",\n                        id: 2\n                      }\n                    },\n                    nested: {\n                      Worker: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          taskQueue: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      External: {\n                        fields: {\n                          url: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      }\n                    }\n                  },\n                  NexusOperationExecutionCancellationInfo: {\n                    fields: {\n                      requestedTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 1\n                      },\n                      state: {\n                        type: \"temporal.api.enums.v1.NexusOperationCancellationState\",\n                        id: 2\n                      },\n                      attempt: {\n                        type: \"int32\",\n                        id: 3\n                      },\n                      lastAttemptCompleteTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 4\n                      },\n                      lastAttemptFailure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 5\n                      },\n                      nextAttemptScheduleTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 6\n                      },\n                      blockedReason: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 8\n                      }\n                    }\n                  },\n                  NexusOperationExecutionInfo: {\n                    fields: {\n                      operationId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      endpoint: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      service: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      operation: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      status: {\n                        type: \"temporal.api.enums.v1.NexusOperationExecutionStatus\",\n                        id: 6\n                      },\n                      state: {\n                        type: \"temporal.api.enums.v1.PendingNexusOperationState\",\n                        id: 7\n                      },\n                      scheduleToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 8\n                      },\n                      scheduleToStartTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 9\n                      },\n                      startToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 10\n                      },\n                      attempt: {\n                        type: \"int32\",\n                        id: 11\n                      },\n                      scheduleTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 12\n                      },\n                      expirationTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 13\n                      },\n                      closeTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 14\n                      },\n                      lastAttemptCompleteTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 15\n                      },\n                      lastAttemptFailure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 16\n                      },\n                      nextAttemptScheduleTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 17\n                      },\n                      executionDuration: {\n                        type: \"google.protobuf.Duration\",\n                        id: 18\n                      },\n                      cancellationInfo: {\n                        type: \"NexusOperationExecutionCancellationInfo\",\n                        id: 19\n                      },\n                      blockedReason: {\n                        type: \"string\",\n                        id: 20\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 21\n                      },\n                      operationToken: {\n                        type: \"string\",\n                        id: 22\n                      },\n                      stateTransitionCount: {\n                        type: \"int64\",\n                        id: 23\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 24\n                      },\n                      nexusHeader: {\n                        keyType: \"string\",\n                        type: \"string\",\n                        id: 25\n                      },\n                      userMetadata: {\n                        type: \"temporal.api.sdk.v1.UserMetadata\",\n                        id: 26\n                      },\n                      links: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.common.v1.Link\",\n                        id: 27\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 28\n                      }\n                    }\n                  },\n                  NexusOperationExecutionListInfo: {\n                    fields: {\n                      operationId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      endpoint: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      service: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      operation: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      scheduleTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 6\n                      },\n                      closeTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 7\n                      },\n                      status: {\n                        type: \"temporal.api.enums.v1.NexusOperationExecutionStatus\",\n                        id: 8\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 9\n                      },\n                      stateTransitionCount: {\n                        type: \"int64\",\n                        id: 10\n                      },\n                      executionDuration: {\n                        type: \"google.protobuf.Duration\",\n                        id: 11\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          sdk: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/sdk/v1;sdk\",\n                  java_package: \"io.temporal.api.sdk.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"WorkflowMetadataProto\",\n                  ruby_package: \"Temporalio::Api::Sdk::V1\",\n                  csharp_namespace: \"Temporalio.Api.Sdk.V1\"\n                },\n                nested: {\n                  UserMetadata: {\n                    fields: {\n                      summary: {\n                        type: \"temporal.api.common.v1.Payload\",\n                        id: 1\n                      },\n                      details: {\n                        type: \"temporal.api.common.v1.Payload\",\n                        id: 2\n                      }\n                    }\n                  },\n                  WorkflowTaskCompletedMetadata: {\n                    fields: {\n                      coreUsedFlags: {\n                        rule: \"repeated\",\n                        type: \"uint32\",\n                        id: 1\n                      },\n                      langUsedFlags: {\n                        rule: \"repeated\",\n                        type: \"uint32\",\n                        id: 2\n                      },\n                      sdkName: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      sdkVersion: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  WorkerConfig: {\n                    oneofs: {\n                      pollerBehavior: {\n                        oneof: [\n                          \"simplePollerBehavior\",\n                          \"autoscalingPollerBehavior\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      workflowCacheSize: {\n                        type: \"int32\",\n                        id: 1\n                      },\n                      simplePollerBehavior: {\n                        type: \"SimplePollerBehavior\",\n                        id: 2\n                      },\n                      autoscalingPollerBehavior: {\n                        type: \"AutoscalingPollerBehavior\",\n                        id: 3\n                      }\n                    },\n                    nested: {\n                      SimplePollerBehavior: {\n                        fields: {\n                          maxPollers: {\n                            type: \"int32\",\n                            id: 1\n                          }\n                        }\n                      },\n                      AutoscalingPollerBehavior: {\n                        fields: {\n                          minPollers: {\n                            type: \"int32\",\n                            id: 1\n                          },\n                          maxPollers: {\n                            type: \"int32\",\n                            id: 2\n                          },\n                          initialPollers: {\n                            type: \"int32\",\n                            id: 3\n                          }\n                        }\n                      }\n                    }\n                  },\n                  WorkflowMetadata: {\n                    fields: {\n                      definition: {\n                        type: \"WorkflowDefinition\",\n                        id: 1\n                      },\n                      currentDetails: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  WorkflowDefinition: {\n                    fields: {\n                      type: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      queryDefinitions: {\n                        rule: \"repeated\",\n                        type: \"WorkflowInteractionDefinition\",\n                        id: 2\n                      },\n                      signalDefinitions: {\n                        rule: \"repeated\",\n                        type: \"WorkflowInteractionDefinition\",\n                        id: 3\n                      },\n                      updateDefinitions: {\n                        rule: \"repeated\",\n                        type: \"WorkflowInteractionDefinition\",\n                        id: 4\n                      }\n                    }\n                  },\n                  WorkflowInteractionDefinition: {\n                    fields: {\n                      name: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      description: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          workflowservice: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/workflowservice/v1;workflowservice\",\n                  java_package: \"io.temporal.api.workflowservice.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"ServiceProto\",\n                  ruby_package: \"Temporalio::Api::WorkflowService::V1\",\n                  csharp_namespace: \"Temporalio.Api.WorkflowService.V1\"\n                },\n                nested: {\n                  RegisterNamespaceRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      description: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      ownerEmail: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      workflowExecutionRetentionPeriod: {\n                        type: \"google.protobuf.Duration\",\n                        id: 4\n                      },\n                      clusters: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.replication.v1.ClusterReplicationConfig\",\n                        id: 5\n                      },\n                      activeClusterName: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      data: {\n                        keyType: \"string\",\n                        type: \"string\",\n                        id: 7\n                      },\n                      securityToken: {\n                        type: \"string\",\n                        id: 8\n                      },\n                      isGlobalNamespace: {\n                        type: \"bool\",\n                        id: 9\n                      },\n                      historyArchivalState: {\n                        type: \"temporal.api.enums.v1.ArchivalState\",\n                        id: 10\n                      },\n                      historyArchivalUri: {\n                        type: \"string\",\n                        id: 11\n                      },\n                      visibilityArchivalState: {\n                        type: \"temporal.api.enums.v1.ArchivalState\",\n                        id: 12\n                      },\n                      visibilityArchivalUri: {\n                        type: \"string\",\n                        id: 13\n                      }\n                    }\n                  },\n                  RegisterNamespaceResponse: {\n                    fields: {}\n                  },\n                  ListNamespacesRequest: {\n                    fields: {\n                      pageSize: {\n                        type: \"int32\",\n                        id: 1\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 2\n                      },\n                      namespaceFilter: {\n                        type: \"temporal.api.namespace.v1.NamespaceFilter\",\n                        id: 3\n                      }\n                    }\n                  },\n                  ListNamespacesResponse: {\n                    fields: {\n                      namespaces: {\n                        rule: \"repeated\",\n                        type: \"DescribeNamespaceResponse\",\n                        id: 1\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 2\n                      }\n                    }\n                  },\n                  DescribeNamespaceRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      id: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  DescribeNamespaceResponse: {\n                    fields: {\n                      namespaceInfo: {\n                        type: \"temporal.api.namespace.v1.NamespaceInfo\",\n                        id: 1\n                      },\n                      config: {\n                        type: \"temporal.api.namespace.v1.NamespaceConfig\",\n                        id: 2\n                      },\n                      replicationConfig: {\n                        type: \"temporal.api.replication.v1.NamespaceReplicationConfig\",\n                        id: 3\n                      },\n                      failoverVersion: {\n                        type: \"int64\",\n                        id: 4\n                      },\n                      isGlobalNamespace: {\n                        type: \"bool\",\n                        id: 5\n                      },\n                      failoverHistory: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.replication.v1.FailoverStatus\",\n                        id: 6\n                      }\n                    }\n                  },\n                  UpdateNamespaceRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      updateInfo: {\n                        type: \"temporal.api.namespace.v1.UpdateNamespaceInfo\",\n                        id: 2\n                      },\n                      config: {\n                        type: \"temporal.api.namespace.v1.NamespaceConfig\",\n                        id: 3\n                      },\n                      replicationConfig: {\n                        type: \"temporal.api.replication.v1.NamespaceReplicationConfig\",\n                        id: 4\n                      },\n                      securityToken: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      deleteBadBinary: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      promoteNamespace: {\n                        type: \"bool\",\n                        id: 7\n                      }\n                    }\n                  },\n                  UpdateNamespaceResponse: {\n                    fields: {\n                      namespaceInfo: {\n                        type: \"temporal.api.namespace.v1.NamespaceInfo\",\n                        id: 1\n                      },\n                      config: {\n                        type: \"temporal.api.namespace.v1.NamespaceConfig\",\n                        id: 2\n                      },\n                      replicationConfig: {\n                        type: \"temporal.api.replication.v1.NamespaceReplicationConfig\",\n                        id: 3\n                      },\n                      failoverVersion: {\n                        type: \"int64\",\n                        id: 4\n                      },\n                      isGlobalNamespace: {\n                        type: \"bool\",\n                        id: 5\n                      }\n                    }\n                  },\n                  DeprecateNamespaceRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      securityToken: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  DeprecateNamespaceResponse: {\n                    fields: {}\n                  },\n                  StartWorkflowExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workflowId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      workflowType: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 3\n                      },\n                      taskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 4\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 5\n                      },\n                      workflowExecutionTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 6\n                      },\n                      workflowRunTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 7\n                      },\n                      workflowTaskTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 8\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 9\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 10\n                      },\n                      workflowIdReusePolicy: {\n                        type: \"temporal.api.enums.v1.WorkflowIdReusePolicy\",\n                        id: 11\n                      },\n                      workflowIdConflictPolicy: {\n                        type: \"temporal.api.enums.v1.WorkflowIdConflictPolicy\",\n                        id: 22\n                      },\n                      retryPolicy: {\n                        type: \"temporal.api.common.v1.RetryPolicy\",\n                        id: 12\n                      },\n                      cronSchedule: {\n                        type: \"string\",\n                        id: 13\n                      },\n                      memo: {\n                        type: \"temporal.api.common.v1.Memo\",\n                        id: 14\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 15\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 16\n                      },\n                      requestEagerExecution: {\n                        type: \"bool\",\n                        id: 17\n                      },\n                      continuedFailure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 18\n                      },\n                      lastCompletionResult: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 19\n                      },\n                      workflowStartDelay: {\n                        type: \"google.protobuf.Duration\",\n                        id: 20\n                      },\n                      completionCallbacks: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.common.v1.Callback\",\n                        id: 21\n                      },\n                      userMetadata: {\n                        type: \"temporal.api.sdk.v1.UserMetadata\",\n                        id: 23\n                      },\n                      links: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.common.v1.Link\",\n                        id: 24\n                      },\n                      versioningOverride: {\n                        type: \"temporal.api.workflow.v1.VersioningOverride\",\n                        id: 25\n                      },\n                      onConflictOptions: {\n                        type: \"temporal.api.workflow.v1.OnConflictOptions\",\n                        id: 26\n                      },\n                      priority: {\n                        type: \"temporal.api.common.v1.Priority\",\n                        id: 27\n                      },\n                      eagerWorkerDeploymentOptions: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        id: 28\n                      },\n                      timeSkippingConfig: {\n                        type: \"temporal.api.workflow.v1.TimeSkippingConfig\",\n                        id: 29\n                      }\n                    }\n                  },\n                  StartWorkflowExecutionResponse: {\n                    fields: {\n                      runId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      started: {\n                        type: \"bool\",\n                        id: 3\n                      },\n                      status: {\n                        type: \"temporal.api.enums.v1.WorkflowExecutionStatus\",\n                        id: 5\n                      },\n                      eagerWorkflowTask: {\n                        type: \"PollWorkflowTaskQueueResponse\",\n                        id: 2\n                      },\n                      link: {\n                        type: \"temporal.api.common.v1.Link\",\n                        id: 4\n                      }\n                    }\n                  },\n                  GetWorkflowExecutionHistoryRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      execution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      },\n                      maximumPageSize: {\n                        type: \"int32\",\n                        id: 3\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 4\n                      },\n                      waitNewEvent: {\n                        type: \"bool\",\n                        id: 5\n                      },\n                      historyEventFilterType: {\n                        type: \"temporal.api.enums.v1.HistoryEventFilterType\",\n                        id: 6\n                      },\n                      skipArchival: {\n                        type: \"bool\",\n                        id: 7\n                      }\n                    }\n                  },\n                  GetWorkflowExecutionHistoryResponse: {\n                    fields: {\n                      history: {\n                        type: \"temporal.api.history.v1.History\",\n                        id: 1\n                      },\n                      rawHistory: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.common.v1.DataBlob\",\n                        id: 2\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 3\n                      },\n                      archived: {\n                        type: \"bool\",\n                        id: 4\n                      }\n                    }\n                  },\n                  GetWorkflowExecutionHistoryReverseRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      execution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      },\n                      maximumPageSize: {\n                        type: \"int32\",\n                        id: 3\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 4\n                      }\n                    }\n                  },\n                  GetWorkflowExecutionHistoryReverseResponse: {\n                    fields: {\n                      history: {\n                        type: \"temporal.api.history.v1.History\",\n                        id: 1\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 3\n                      }\n                    }\n                  },\n                  PollWorkflowTaskQueueRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      taskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 2\n                      },\n                      pollerGroupId: {\n                        type: \"string\",\n                        id: 10\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      workerInstanceKey: {\n                        type: \"string\",\n                        id: 8\n                      },\n                      workerControlTaskQueue: {\n                        type: \"string\",\n                        id: 9\n                      },\n                      binaryChecksum: {\n                        type: \"string\",\n                        id: 4,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      workerVersionCapabilities: {\n                        type: \"temporal.api.common.v1.WorkerVersionCapabilities\",\n                        id: 5,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      deploymentOptions: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        id: 6\n                      }\n                    },\n                    reserved: [\n                      [\n                        7,\n                        7\n                      ],\n                      \"worker_heartbeat\"\n                    ]\n                  },\n                  PollWorkflowTaskQueueResponse: {\n                    fields: {\n                      taskToken: {\n                        type: \"bytes\",\n                        id: 1\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      },\n                      workflowType: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 3\n                      },\n                      previousStartedEventId: {\n                        type: \"int64\",\n                        id: 4\n                      },\n                      startedEventId: {\n                        type: \"int64\",\n                        id: 5\n                      },\n                      attempt: {\n                        type: \"int32\",\n                        id: 6\n                      },\n                      backlogCountHint: {\n                        type: \"int64\",\n                        id: 7\n                      },\n                      history: {\n                        type: \"temporal.api.history.v1.History\",\n                        id: 8\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 9\n                      },\n                      query: {\n                        type: \"temporal.api.query.v1.WorkflowQuery\",\n                        id: 10\n                      },\n                      workflowExecutionTaskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 11\n                      },\n                      scheduledTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 12\n                      },\n                      startedTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 13\n                      },\n                      queries: {\n                        keyType: \"string\",\n                        type: \"temporal.api.query.v1.WorkflowQuery\",\n                        id: 14\n                      },\n                      messages: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.protocol.v1.Message\",\n                        id: 15\n                      },\n                      pollerScalingDecision: {\n                        type: \"temporal.api.taskqueue.v1.PollerScalingDecision\",\n                        id: 16\n                      },\n                      pollerGroupId: {\n                        type: \"string\",\n                        id: 17\n                      },\n                      pollerGroupInfos: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.taskqueue.v1.PollerGroupInfo\",\n                        id: 18\n                      }\n                    }\n                  },\n                  RespondWorkflowTaskCompletedRequest: {\n                    fields: {\n                      taskToken: {\n                        type: \"bytes\",\n                        id: 1\n                      },\n                      commands: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.command.v1.Command\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      stickyAttributes: {\n                        type: \"temporal.api.taskqueue.v1.StickyExecutionAttributes\",\n                        id: 4\n                      },\n                      returnNewWorkflowTask: {\n                        type: \"bool\",\n                        id: 5\n                      },\n                      forceCreateNewWorkflowTask: {\n                        type: \"bool\",\n                        id: 6\n                      },\n                      binaryChecksum: {\n                        type: \"string\",\n                        id: 7,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      queryResults: {\n                        keyType: \"string\",\n                        type: \"temporal.api.query.v1.WorkflowQueryResult\",\n                        id: 8\n                      },\n                      namespace: {\n                        type: \"string\",\n                        id: 9\n                      },\n                      resourceId: {\n                        type: \"string\",\n                        id: 18\n                      },\n                      workerVersionStamp: {\n                        type: \"temporal.api.common.v1.WorkerVersionStamp\",\n                        id: 10,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      messages: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.protocol.v1.Message\",\n                        id: 11\n                      },\n                      sdkMetadata: {\n                        type: \"temporal.api.sdk.v1.WorkflowTaskCompletedMetadata\",\n                        id: 12\n                      },\n                      meteringMetadata: {\n                        type: \"temporal.api.common.v1.MeteringMetadata\",\n                        id: 13\n                      },\n                      capabilities: {\n                        type: \"Capabilities\",\n                        id: 14\n                      },\n                      deployment: {\n                        type: \"temporal.api.deployment.v1.Deployment\",\n                        id: 15,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      versioningBehavior: {\n                        type: \"temporal.api.enums.v1.VersioningBehavior\",\n                        id: 16\n                      },\n                      deploymentOptions: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        id: 17\n                      },\n                      workerInstanceKey: {\n                        type: \"string\",\n                        id: 19\n                      },\n                      workerControlTaskQueue: {\n                        type: \"string\",\n                        id: 20\n                      }\n                    },\n                    nested: {\n                      Capabilities: {\n                        fields: {\n                          discardSpeculativeWorkflowTaskWithEvents: {\n                            type: \"bool\",\n                            id: 1\n                          }\n                        }\n                      }\n                    }\n                  },\n                  RespondWorkflowTaskCompletedResponse: {\n                    fields: {\n                      workflowTask: {\n                        type: \"PollWorkflowTaskQueueResponse\",\n                        id: 1\n                      },\n                      activityTasks: {\n                        rule: \"repeated\",\n                        type: \"PollActivityTaskQueueResponse\",\n                        id: 2\n                      },\n                      resetHistoryEventId: {\n                        type: \"int64\",\n                        id: 3\n                      }\n                    }\n                  },\n                  RespondWorkflowTaskFailedRequest: {\n                    fields: {\n                      taskToken: {\n                        type: \"bytes\",\n                        id: 1\n                      },\n                      cause: {\n                        type: \"temporal.api.enums.v1.WorkflowTaskFailedCause\",\n                        id: 2\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 3\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      binaryChecksum: {\n                        type: \"string\",\n                        id: 5,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      namespace: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      resourceId: {\n                        type: \"string\",\n                        id: 11\n                      },\n                      messages: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.protocol.v1.Message\",\n                        id: 7\n                      },\n                      workerVersion: {\n                        type: \"temporal.api.common.v1.WorkerVersionStamp\",\n                        id: 8,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      deployment: {\n                        type: \"temporal.api.deployment.v1.Deployment\",\n                        id: 9,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      deploymentOptions: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        id: 10\n                      }\n                    }\n                  },\n                  RespondWorkflowTaskFailedResponse: {\n                    fields: {}\n                  },\n                  PollActivityTaskQueueRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      taskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 2\n                      },\n                      pollerGroupId: {\n                        type: \"string\",\n                        id: 10\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      workerInstanceKey: {\n                        type: \"string\",\n                        id: 8\n                      },\n                      workerControlTaskQueue: {\n                        type: \"string\",\n                        id: 9\n                      },\n                      taskQueueMetadata: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueueMetadata\",\n                        id: 4\n                      },\n                      workerVersionCapabilities: {\n                        type: \"temporal.api.common.v1.WorkerVersionCapabilities\",\n                        id: 5,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      deploymentOptions: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        id: 6\n                      }\n                    },\n                    reserved: [\n                      [\n                        7,\n                        7\n                      ],\n                      \"worker_heartbeat\"\n                    ]\n                  },\n                  PollActivityTaskQueueResponse: {\n                    fields: {\n                      taskToken: {\n                        type: \"bytes\",\n                        id: 1\n                      },\n                      workflowNamespace: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      workflowType: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 3\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 4\n                      },\n                      activityType: {\n                        type: \"temporal.api.common.v1.ActivityType\",\n                        id: 5\n                      },\n                      activityId: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 7\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 8\n                      },\n                      heartbeatDetails: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 9\n                      },\n                      scheduledTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 10\n                      },\n                      currentAttemptScheduledTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 11\n                      },\n                      startedTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 12\n                      },\n                      attempt: {\n                        type: \"int32\",\n                        id: 13\n                      },\n                      scheduleToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 14\n                      },\n                      startToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 15\n                      },\n                      heartbeatTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 16\n                      },\n                      retryPolicy: {\n                        type: \"temporal.api.common.v1.RetryPolicy\",\n                        id: 17\n                      },\n                      pollerScalingDecision: {\n                        type: \"temporal.api.taskqueue.v1.PollerScalingDecision\",\n                        id: 18\n                      },\n                      priority: {\n                        type: \"temporal.api.common.v1.Priority\",\n                        id: 19\n                      },\n                      activityRunId: {\n                        type: \"string\",\n                        id: 20\n                      },\n                      pollerGroupInfos: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.taskqueue.v1.PollerGroupInfo\",\n                        id: 21\n                      }\n                    }\n                  },\n                  RecordActivityTaskHeartbeatRequest: {\n                    fields: {\n                      taskToken: {\n                        type: \"bytes\",\n                        id: 1\n                      },\n                      details: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      namespace: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      resourceId: {\n                        type: \"string\",\n                        id: 5\n                      }\n                    }\n                  },\n                  RecordActivityTaskHeartbeatResponse: {\n                    fields: {\n                      cancelRequested: {\n                        type: \"bool\",\n                        id: 1\n                      },\n                      activityPaused: {\n                        type: \"bool\",\n                        id: 2\n                      },\n                      activityReset: {\n                        type: \"bool\",\n                        id: 3\n                      }\n                    }\n                  },\n                  RecordActivityTaskHeartbeatByIdRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workflowId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      activityId: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      details: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 5\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      resourceId: {\n                        type: \"string\",\n                        id: 7\n                      }\n                    }\n                  },\n                  RecordActivityTaskHeartbeatByIdResponse: {\n                    fields: {\n                      cancelRequested: {\n                        type: \"bool\",\n                        id: 1\n                      },\n                      activityPaused: {\n                        type: \"bool\",\n                        id: 2\n                      },\n                      activityReset: {\n                        type: \"bool\",\n                        id: 3\n                      }\n                    }\n                  },\n                  RespondActivityTaskCompletedRequest: {\n                    fields: {\n                      taskToken: {\n                        type: \"bytes\",\n                        id: 1\n                      },\n                      result: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      namespace: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      resourceId: {\n                        type: \"string\",\n                        id: 8\n                      },\n                      workerVersion: {\n                        type: \"temporal.api.common.v1.WorkerVersionStamp\",\n                        id: 5,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      deployment: {\n                        type: \"temporal.api.deployment.v1.Deployment\",\n                        id: 6,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      deploymentOptions: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        id: 7\n                      }\n                    }\n                  },\n                  RespondActivityTaskCompletedResponse: {\n                    fields: {}\n                  },\n                  RespondActivityTaskCompletedByIdRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workflowId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      activityId: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      result: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 5\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      resourceId: {\n                        type: \"string\",\n                        id: 7\n                      }\n                    }\n                  },\n                  RespondActivityTaskCompletedByIdResponse: {\n                    fields: {}\n                  },\n                  RespondActivityTaskFailedRequest: {\n                    fields: {\n                      taskToken: {\n                        type: \"bytes\",\n                        id: 1\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      namespace: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      resourceId: {\n                        type: \"string\",\n                        id: 9\n                      },\n                      lastHeartbeatDetails: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 5\n                      },\n                      workerVersion: {\n                        type: \"temporal.api.common.v1.WorkerVersionStamp\",\n                        id: 6,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      deployment: {\n                        type: \"temporal.api.deployment.v1.Deployment\",\n                        id: 7,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      deploymentOptions: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        id: 8\n                      }\n                    }\n                  },\n                  RespondActivityTaskFailedResponse: {\n                    fields: {\n                      failures: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 1\n                      }\n                    }\n                  },\n                  RespondActivityTaskFailedByIdRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workflowId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      activityId: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 5\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      lastHeartbeatDetails: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 7\n                      },\n                      resourceId: {\n                        type: \"string\",\n                        id: 8\n                      }\n                    }\n                  },\n                  RespondActivityTaskFailedByIdResponse: {\n                    fields: {\n                      failures: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 1\n                      }\n                    }\n                  },\n                  RespondActivityTaskCanceledRequest: {\n                    fields: {\n                      taskToken: {\n                        type: \"bytes\",\n                        id: 1\n                      },\n                      details: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      namespace: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      resourceId: {\n                        type: \"string\",\n                        id: 8\n                      },\n                      workerVersion: {\n                        type: \"temporal.api.common.v1.WorkerVersionStamp\",\n                        id: 5,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      deployment: {\n                        type: \"temporal.api.deployment.v1.Deployment\",\n                        id: 6,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      deploymentOptions: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        id: 7\n                      }\n                    }\n                  },\n                  RespondActivityTaskCanceledResponse: {\n                    fields: {}\n                  },\n                  RespondActivityTaskCanceledByIdRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workflowId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      activityId: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      details: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 5\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      deploymentOptions: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        id: 7\n                      },\n                      resourceId: {\n                        type: \"string\",\n                        id: 8\n                      }\n                    }\n                  },\n                  RespondActivityTaskCanceledByIdResponse: {\n                    fields: {}\n                  },\n                  RequestCancelWorkflowExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      firstExecutionRunId: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      links: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.common.v1.Link\",\n                        id: 7\n                      }\n                    }\n                  },\n                  RequestCancelWorkflowExecutionResponse: {\n                    fields: {}\n                  },\n                  SignalWorkflowExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      },\n                      signalName: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 4\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      control: {\n                        type: \"string\",\n                        id: 7,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 8\n                      },\n                      links: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.common.v1.Link\",\n                        id: 10\n                      }\n                    },\n                    reserved: [\n                      [\n                        9,\n                        9\n                      ]\n                    ]\n                  },\n                  SignalWorkflowExecutionResponse: {\n                    fields: {\n                      link: {\n                        type: \"temporal.api.common.v1.Link\",\n                        id: 1\n                      }\n                    }\n                  },\n                  SignalWithStartWorkflowExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workflowId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      workflowType: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 3\n                      },\n                      taskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 4\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 5\n                      },\n                      workflowExecutionTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 6\n                      },\n                      workflowRunTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 7\n                      },\n                      workflowTaskTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 8\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 9\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 10\n                      },\n                      workflowIdReusePolicy: {\n                        type: \"temporal.api.enums.v1.WorkflowIdReusePolicy\",\n                        id: 11\n                      },\n                      workflowIdConflictPolicy: {\n                        type: \"temporal.api.enums.v1.WorkflowIdConflictPolicy\",\n                        id: 22\n                      },\n                      signalName: {\n                        type: \"string\",\n                        id: 12\n                      },\n                      signalInput: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 13\n                      },\n                      control: {\n                        type: \"string\",\n                        id: 14,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      retryPolicy: {\n                        type: \"temporal.api.common.v1.RetryPolicy\",\n                        id: 15\n                      },\n                      cronSchedule: {\n                        type: \"string\",\n                        id: 16\n                      },\n                      memo: {\n                        type: \"temporal.api.common.v1.Memo\",\n                        id: 17\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 18\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 19\n                      },\n                      workflowStartDelay: {\n                        type: \"google.protobuf.Duration\",\n                        id: 20\n                      },\n                      userMetadata: {\n                        type: \"temporal.api.sdk.v1.UserMetadata\",\n                        id: 23\n                      },\n                      links: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.common.v1.Link\",\n                        id: 24\n                      },\n                      versioningOverride: {\n                        type: \"temporal.api.workflow.v1.VersioningOverride\",\n                        id: 25\n                      },\n                      priority: {\n                        type: \"temporal.api.common.v1.Priority\",\n                        id: 26\n                      },\n                      timeSkippingConfig: {\n                        type: \"temporal.api.workflow.v1.TimeSkippingConfig\",\n                        id: 27\n                      }\n                    },\n                    reserved: [\n                      [\n                        21,\n                        21\n                      ]\n                    ]\n                  },\n                  SignalWithStartWorkflowExecutionResponse: {\n                    fields: {\n                      runId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      started: {\n                        type: \"bool\",\n                        id: 2\n                      },\n                      signalLink: {\n                        type: \"temporal.api.common.v1.Link\",\n                        id: 3\n                      }\n                    }\n                  },\n                  ResetWorkflowExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      workflowTaskFinishEventId: {\n                        type: \"int64\",\n                        id: 4\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      resetReapplyType: {\n                        type: \"temporal.api.enums.v1.ResetReapplyType\",\n                        id: 6,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      resetReapplyExcludeTypes: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.enums.v1.ResetReapplyExcludeType\",\n                        id: 7\n                      },\n                      postResetOperations: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.workflow.v1.PostResetOperation\",\n                        id: 8\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 9\n                      }\n                    }\n                  },\n                  ResetWorkflowExecutionResponse: {\n                    fields: {\n                      runId: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  TerminateWorkflowExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      details: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 4\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      firstExecutionRunId: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      links: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.common.v1.Link\",\n                        id: 7\n                      }\n                    }\n                  },\n                  TerminateWorkflowExecutionResponse: {\n                    fields: {}\n                  },\n                  DeleteWorkflowExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      }\n                    }\n                  },\n                  DeleteWorkflowExecutionResponse: {\n                    fields: {}\n                  },\n                  ListOpenWorkflowExecutionsRequest: {\n                    oneofs: {\n                      filters: {\n                        oneof: [\n                          \"executionFilter\",\n                          \"typeFilter\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      maximumPageSize: {\n                        type: \"int32\",\n                        id: 2\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 3\n                      },\n                      startTimeFilter: {\n                        type: \"temporal.api.filter.v1.StartTimeFilter\",\n                        id: 4\n                      },\n                      executionFilter: {\n                        type: \"temporal.api.filter.v1.WorkflowExecutionFilter\",\n                        id: 5\n                      },\n                      typeFilter: {\n                        type: \"temporal.api.filter.v1.WorkflowTypeFilter\",\n                        id: 6\n                      }\n                    }\n                  },\n                  ListOpenWorkflowExecutionsResponse: {\n                    fields: {\n                      executions: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.workflow.v1.WorkflowExecutionInfo\",\n                        id: 1\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 2\n                      }\n                    }\n                  },\n                  ListClosedWorkflowExecutionsRequest: {\n                    oneofs: {\n                      filters: {\n                        oneof: [\n                          \"executionFilter\",\n                          \"typeFilter\",\n                          \"statusFilter\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      maximumPageSize: {\n                        type: \"int32\",\n                        id: 2\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 3\n                      },\n                      startTimeFilter: {\n                        type: \"temporal.api.filter.v1.StartTimeFilter\",\n                        id: 4\n                      },\n                      executionFilter: {\n                        type: \"temporal.api.filter.v1.WorkflowExecutionFilter\",\n                        id: 5\n                      },\n                      typeFilter: {\n                        type: \"temporal.api.filter.v1.WorkflowTypeFilter\",\n                        id: 6\n                      },\n                      statusFilter: {\n                        type: \"temporal.api.filter.v1.StatusFilter\",\n                        id: 7\n                      }\n                    }\n                  },\n                  ListClosedWorkflowExecutionsResponse: {\n                    fields: {\n                      executions: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.workflow.v1.WorkflowExecutionInfo\",\n                        id: 1\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 2\n                      }\n                    }\n                  },\n                  ListWorkflowExecutionsRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      pageSize: {\n                        type: \"int32\",\n                        id: 2\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 3\n                      },\n                      query: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  ListWorkflowExecutionsResponse: {\n                    fields: {\n                      executions: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.workflow.v1.WorkflowExecutionInfo\",\n                        id: 1\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 2\n                      }\n                    }\n                  },\n                  ListArchivedWorkflowExecutionsRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      pageSize: {\n                        type: \"int32\",\n                        id: 2\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 3\n                      },\n                      query: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  ListArchivedWorkflowExecutionsResponse: {\n                    fields: {\n                      executions: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.workflow.v1.WorkflowExecutionInfo\",\n                        id: 1\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 2\n                      }\n                    }\n                  },\n                  ScanWorkflowExecutionsRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      pageSize: {\n                        type: \"int32\",\n                        id: 2\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 3\n                      },\n                      query: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  ScanWorkflowExecutionsResponse: {\n                    fields: {\n                      executions: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.workflow.v1.WorkflowExecutionInfo\",\n                        id: 1\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 2\n                      }\n                    }\n                  },\n                  CountWorkflowExecutionsRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      query: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  CountWorkflowExecutionsResponse: {\n                    fields: {\n                      count: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      groups: {\n                        rule: \"repeated\",\n                        type: \"AggregationGroup\",\n                        id: 2\n                      }\n                    },\n                    nested: {\n                      AggregationGroup: {\n                        fields: {\n                          groupValues: {\n                            rule: \"repeated\",\n                            type: \"temporal.api.common.v1.Payload\",\n                            id: 1\n                          },\n                          count: {\n                            type: \"int64\",\n                            id: 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  GetSearchAttributesRequest: {\n                    fields: {}\n                  },\n                  GetSearchAttributesResponse: {\n                    fields: {\n                      keys: {\n                        keyType: \"string\",\n                        type: \"temporal.api.enums.v1.IndexedValueType\",\n                        id: 1\n                      }\n                    }\n                  },\n                  RespondQueryTaskCompletedRequest: {\n                    fields: {\n                      taskToken: {\n                        type: \"bytes\",\n                        id: 1\n                      },\n                      completedType: {\n                        type: \"temporal.api.enums.v1.QueryResultType\",\n                        id: 2\n                      },\n                      queryResult: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 3\n                      },\n                      errorMessage: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      namespace: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 7\n                      },\n                      cause: {\n                        type: \"temporal.api.enums.v1.WorkflowTaskFailedCause\",\n                        id: 8\n                      },\n                      pollerGroupId: {\n                        type: \"string\",\n                        id: 9\n                      }\n                    },\n                    reserved: [\n                      [\n                        5,\n                        5\n                      ]\n                    ]\n                  },\n                  RespondQueryTaskCompletedResponse: {\n                    fields: {}\n                  },\n                  ResetStickyTaskQueueRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      execution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      }\n                    }\n                  },\n                  ResetStickyTaskQueueResponse: {\n                    fields: {}\n                  },\n                  ShutdownWorkerRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      stickyTaskQueue: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      workerHeartbeat: {\n                        type: \"temporal.api.worker.v1.WorkerHeartbeat\",\n                        id: 5\n                      },\n                      workerInstanceKey: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      taskQueue: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      taskQueueTypes: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.enums.v1.TaskQueueType\",\n                        id: 8\n                      }\n                    }\n                  },\n                  ShutdownWorkerResponse: {\n                    fields: {}\n                  },\n                  QueryWorkflowRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      execution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      },\n                      query: {\n                        type: \"temporal.api.query.v1.WorkflowQuery\",\n                        id: 3\n                      },\n                      queryRejectCondition: {\n                        type: \"temporal.api.enums.v1.QueryRejectCondition\",\n                        id: 4\n                      }\n                    }\n                  },\n                  QueryWorkflowResponse: {\n                    fields: {\n                      queryResult: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 1\n                      },\n                      queryRejected: {\n                        type: \"temporal.api.query.v1.QueryRejected\",\n                        id: 2\n                      }\n                    }\n                  },\n                  DescribeWorkflowExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      execution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      }\n                    }\n                  },\n                  DescribeWorkflowExecutionResponse: {\n                    fields: {\n                      executionConfig: {\n                        type: \"temporal.api.workflow.v1.WorkflowExecutionConfig\",\n                        id: 1\n                      },\n                      workflowExecutionInfo: {\n                        type: \"temporal.api.workflow.v1.WorkflowExecutionInfo\",\n                        id: 2\n                      },\n                      pendingActivities: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.workflow.v1.PendingActivityInfo\",\n                        id: 3\n                      },\n                      pendingChildren: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.workflow.v1.PendingChildExecutionInfo\",\n                        id: 4\n                      },\n                      pendingWorkflowTask: {\n                        type: \"temporal.api.workflow.v1.PendingWorkflowTaskInfo\",\n                        id: 5\n                      },\n                      callbacks: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.workflow.v1.CallbackInfo\",\n                        id: 6\n                      },\n                      pendingNexusOperations: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.workflow.v1.PendingNexusOperationInfo\",\n                        id: 7\n                      },\n                      workflowExtendedInfo: {\n                        type: \"temporal.api.workflow.v1.WorkflowExecutionExtendedInfo\",\n                        id: 8\n                      }\n                    }\n                  },\n                  DescribeTaskQueueRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      taskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 2\n                      },\n                      taskQueueType: {\n                        type: \"temporal.api.enums.v1.TaskQueueType\",\n                        id: 3\n                      },\n                      reportStats: {\n                        type: \"bool\",\n                        id: 8\n                      },\n                      reportConfig: {\n                        type: \"bool\",\n                        id: 11\n                      },\n                      includeTaskQueueStatus: {\n                        type: \"bool\",\n                        id: 4,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      apiMode: {\n                        type: \"temporal.api.enums.v1.DescribeTaskQueueMode\",\n                        id: 5,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      versions: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueueVersionSelection\",\n                        id: 6,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      taskQueueTypes: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.enums.v1.TaskQueueType\",\n                        id: 7,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      reportPollers: {\n                        type: \"bool\",\n                        id: 9,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      reportTaskReachability: {\n                        type: \"bool\",\n                        id: 10,\n                        options: {\n                          deprecated: true\n                        }\n                      }\n                    }\n                  },\n                  DescribeTaskQueueResponse: {\n                    fields: {\n                      pollers: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.taskqueue.v1.PollerInfo\",\n                        id: 1\n                      },\n                      stats: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueueStats\",\n                        id: 5\n                      },\n                      statsByPriorityKey: {\n                        keyType: \"int32\",\n                        type: \"temporal.api.taskqueue.v1.TaskQueueStats\",\n                        id: 8\n                      },\n                      versioningInfo: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueueVersioningInfo\",\n                        id: 4\n                      },\n                      config: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueueConfig\",\n                        id: 6\n                      },\n                      effectiveRateLimit: {\n                        type: \"EffectiveRateLimit\",\n                        id: 7\n                      },\n                      taskQueueStatus: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueueStatus\",\n                        id: 2,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      versionsInfo: {\n                        keyType: \"string\",\n                        type: \"temporal.api.taskqueue.v1.TaskQueueVersionInfo\",\n                        id: 3,\n                        options: {\n                          deprecated: true\n                        }\n                      }\n                    },\n                    nested: {\n                      EffectiveRateLimit: {\n                        fields: {\n                          requestsPerSecond: {\n                            type: \"float\",\n                            id: 1\n                          },\n                          rateLimitSource: {\n                            type: \"temporal.api.enums.v1.RateLimitSource\",\n                            id: 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  GetClusterInfoRequest: {\n                    fields: {}\n                  },\n                  GetClusterInfoResponse: {\n                    fields: {\n                      supportedClients: {\n                        keyType: \"string\",\n                        type: \"string\",\n                        id: 1\n                      },\n                      serverVersion: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      clusterId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      versionInfo: {\n                        type: \"temporal.api.version.v1.VersionInfo\",\n                        id: 4\n                      },\n                      clusterName: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      historyShardCount: {\n                        type: \"int32\",\n                        id: 6\n                      },\n                      persistenceStore: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      visibilityStore: {\n                        type: \"string\",\n                        id: 8\n                      },\n                      initialFailoverVersion: {\n                        type: \"int64\",\n                        id: 9\n                      },\n                      failoverVersionIncrement: {\n                        type: \"int64\",\n                        id: 10\n                      }\n                    }\n                  },\n                  GetSystemInfoRequest: {\n                    fields: {}\n                  },\n                  GetSystemInfoResponse: {\n                    fields: {\n                      serverVersion: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      capabilities: {\n                        type: \"Capabilities\",\n                        id: 2\n                      }\n                    },\n                    nested: {\n                      Capabilities: {\n                        fields: {\n                          signalAndQueryHeader: {\n                            type: \"bool\",\n                            id: 1\n                          },\n                          internalErrorDifferentiation: {\n                            type: \"bool\",\n                            id: 2\n                          },\n                          activityFailureIncludeHeartbeat: {\n                            type: \"bool\",\n                            id: 3\n                          },\n                          supportsSchedules: {\n                            type: \"bool\",\n                            id: 4\n                          },\n                          encodedFailureAttributes: {\n                            type: \"bool\",\n                            id: 5\n                          },\n                          buildIdBasedVersioning: {\n                            type: \"bool\",\n                            id: 6\n                          },\n                          upsertMemo: {\n                            type: \"bool\",\n                            id: 7\n                          },\n                          eagerWorkflowStart: {\n                            type: \"bool\",\n                            id: 8\n                          },\n                          sdkMetadata: {\n                            type: \"bool\",\n                            id: 9\n                          },\n                          countGroupByExecutionStatus: {\n                            type: \"bool\",\n                            id: 10\n                          },\n                          nexus: {\n                            type: \"bool\",\n                            id: 11\n                          },\n                          serverScaledDeployments: {\n                            type: \"bool\",\n                            id: 12\n                          }\n                        }\n                      }\n                    }\n                  },\n                  ListTaskQueuePartitionsRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      taskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 2\n                      }\n                    }\n                  },\n                  ListTaskQueuePartitionsResponse: {\n                    fields: {\n                      activityTaskQueuePartitions: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.taskqueue.v1.TaskQueuePartitionMetadata\",\n                        id: 1\n                      },\n                      workflowTaskQueuePartitions: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.taskqueue.v1.TaskQueuePartitionMetadata\",\n                        id: 2\n                      }\n                    }\n                  },\n                  CreateScheduleRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      scheduleId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      schedule: {\n                        type: \"temporal.api.schedule.v1.Schedule\",\n                        id: 3\n                      },\n                      initialPatch: {\n                        type: \"temporal.api.schedule.v1.SchedulePatch\",\n                        id: 4\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      memo: {\n                        type: \"temporal.api.common.v1.Memo\",\n                        id: 7\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 8\n                      }\n                    }\n                  },\n                  CreateScheduleResponse: {\n                    fields: {\n                      conflictToken: {\n                        type: \"bytes\",\n                        id: 1\n                      }\n                    }\n                  },\n                  DescribeScheduleRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      scheduleId: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  DescribeScheduleResponse: {\n                    fields: {\n                      schedule: {\n                        type: \"temporal.api.schedule.v1.Schedule\",\n                        id: 1\n                      },\n                      info: {\n                        type: \"temporal.api.schedule.v1.ScheduleInfo\",\n                        id: 2\n                      },\n                      memo: {\n                        type: \"temporal.api.common.v1.Memo\",\n                        id: 3\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 4\n                      },\n                      conflictToken: {\n                        type: \"bytes\",\n                        id: 5\n                      }\n                    }\n                  },\n                  UpdateScheduleRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      scheduleId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      schedule: {\n                        type: \"temporal.api.schedule.v1.Schedule\",\n                        id: 3\n                      },\n                      conflictToken: {\n                        type: \"bytes\",\n                        id: 4\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 7\n                      },\n                      memo: {\n                        type: \"temporal.api.common.v1.Memo\",\n                        id: 8\n                      }\n                    }\n                  },\n                  UpdateScheduleResponse: {\n                    fields: {}\n                  },\n                  PatchScheduleRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      scheduleId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      patch: {\n                        type: \"temporal.api.schedule.v1.SchedulePatch\",\n                        id: 3\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 5\n                      }\n                    }\n                  },\n                  PatchScheduleResponse: {\n                    fields: {}\n                  },\n                  ListScheduleMatchingTimesRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      scheduleId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      startTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 3\n                      },\n                      endTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 4\n                      }\n                    }\n                  },\n                  ListScheduleMatchingTimesResponse: {\n                    fields: {\n                      startTime: {\n                        rule: \"repeated\",\n                        type: \"google.protobuf.Timestamp\",\n                        id: 1\n                      }\n                    }\n                  },\n                  DeleteScheduleRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      scheduleId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  DeleteScheduleResponse: {\n                    fields: {}\n                  },\n                  ListSchedulesRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      maximumPageSize: {\n                        type: \"int32\",\n                        id: 2\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 3\n                      },\n                      query: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  ListSchedulesResponse: {\n                    fields: {\n                      schedules: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.schedule.v1.ScheduleListEntry\",\n                        id: 1\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 2\n                      }\n                    }\n                  },\n                  CountSchedulesRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      query: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  CountSchedulesResponse: {\n                    fields: {\n                      count: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      groups: {\n                        rule: \"repeated\",\n                        type: \"AggregationGroup\",\n                        id: 2\n                      }\n                    },\n                    nested: {\n                      AggregationGroup: {\n                        fields: {\n                          groupValues: {\n                            rule: \"repeated\",\n                            type: \"temporal.api.common.v1.Payload\",\n                            id: 1\n                          },\n                          count: {\n                            type: \"int64\",\n                            id: 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  UpdateWorkerBuildIdCompatibilityRequest: {\n                    oneofs: {\n                      operation: {\n                        oneof: [\n                          \"addNewBuildIdInNewDefaultSet\",\n                          \"addNewCompatibleBuildId\",\n                          \"promoteSetByBuildId\",\n                          \"promoteBuildIdWithinSet\",\n                          \"mergeSets\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      taskQueue: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      addNewBuildIdInNewDefaultSet: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      addNewCompatibleBuildId: {\n                        type: \"AddNewCompatibleVersion\",\n                        id: 4\n                      },\n                      promoteSetByBuildId: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      promoteBuildIdWithinSet: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      mergeSets: {\n                        type: \"MergeSets\",\n                        id: 7\n                      }\n                    },\n                    nested: {\n                      AddNewCompatibleVersion: {\n                        fields: {\n                          newBuildId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          existingCompatibleBuildId: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          makeSetDefault: {\n                            type: \"bool\",\n                            id: 3\n                          }\n                        }\n                      },\n                      MergeSets: {\n                        fields: {\n                          primarySetBuildId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          secondarySetBuildId: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  UpdateWorkerBuildIdCompatibilityResponse: {\n                    fields: {},\n                    reserved: [\n                      [\n                        1,\n                        1\n                      ],\n                      \"version_set_id\"\n                    ]\n                  },\n                  GetWorkerBuildIdCompatibilityRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      taskQueue: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      maxSets: {\n                        type: \"int32\",\n                        id: 3\n                      }\n                    }\n                  },\n                  GetWorkerBuildIdCompatibilityResponse: {\n                    fields: {\n                      majorVersionSets: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.taskqueue.v1.CompatibleVersionSet\",\n                        id: 1\n                      }\n                    }\n                  },\n                  UpdateWorkerVersioningRulesRequest: {\n                    oneofs: {\n                      operation: {\n                        oneof: [\n                          \"insertAssignmentRule\",\n                          \"replaceAssignmentRule\",\n                          \"deleteAssignmentRule\",\n                          \"addCompatibleRedirectRule\",\n                          \"replaceCompatibleRedirectRule\",\n                          \"deleteCompatibleRedirectRule\",\n                          \"commitBuildId\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      taskQueue: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      conflictToken: {\n                        type: \"bytes\",\n                        id: 3\n                      },\n                      insertAssignmentRule: {\n                        type: \"InsertBuildIdAssignmentRule\",\n                        id: 4\n                      },\n                      replaceAssignmentRule: {\n                        type: \"ReplaceBuildIdAssignmentRule\",\n                        id: 5\n                      },\n                      deleteAssignmentRule: {\n                        type: \"DeleteBuildIdAssignmentRule\",\n                        id: 6\n                      },\n                      addCompatibleRedirectRule: {\n                        type: \"AddCompatibleBuildIdRedirectRule\",\n                        id: 7\n                      },\n                      replaceCompatibleRedirectRule: {\n                        type: \"ReplaceCompatibleBuildIdRedirectRule\",\n                        id: 8\n                      },\n                      deleteCompatibleRedirectRule: {\n                        type: \"DeleteCompatibleBuildIdRedirectRule\",\n                        id: 9\n                      },\n                      commitBuildId: {\n                        type: \"CommitBuildId\",\n                        id: 10\n                      }\n                    },\n                    nested: {\n                      InsertBuildIdAssignmentRule: {\n                        fields: {\n                          ruleIndex: {\n                            type: \"int32\",\n                            id: 1\n                          },\n                          rule: {\n                            type: \"temporal.api.taskqueue.v1.BuildIdAssignmentRule\",\n                            id: 2\n                          }\n                        }\n                      },\n                      ReplaceBuildIdAssignmentRule: {\n                        fields: {\n                          ruleIndex: {\n                            type: \"int32\",\n                            id: 1\n                          },\n                          rule: {\n                            type: \"temporal.api.taskqueue.v1.BuildIdAssignmentRule\",\n                            id: 2\n                          },\n                          force: {\n                            type: \"bool\",\n                            id: 3\n                          }\n                        }\n                      },\n                      DeleteBuildIdAssignmentRule: {\n                        fields: {\n                          ruleIndex: {\n                            type: \"int32\",\n                            id: 1\n                          },\n                          force: {\n                            type: \"bool\",\n                            id: 2\n                          }\n                        }\n                      },\n                      AddCompatibleBuildIdRedirectRule: {\n                        fields: {\n                          rule: {\n                            type: \"temporal.api.taskqueue.v1.CompatibleBuildIdRedirectRule\",\n                            id: 1\n                          }\n                        }\n                      },\n                      ReplaceCompatibleBuildIdRedirectRule: {\n                        fields: {\n                          rule: {\n                            type: \"temporal.api.taskqueue.v1.CompatibleBuildIdRedirectRule\",\n                            id: 1\n                          }\n                        }\n                      },\n                      DeleteCompatibleBuildIdRedirectRule: {\n                        fields: {\n                          sourceBuildId: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      },\n                      CommitBuildId: {\n                        fields: {\n                          targetBuildId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          force: {\n                            type: \"bool\",\n                            id: 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  UpdateWorkerVersioningRulesResponse: {\n                    fields: {\n                      assignmentRules: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.taskqueue.v1.TimestampedBuildIdAssignmentRule\",\n                        id: 1\n                      },\n                      compatibleRedirectRules: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.taskqueue.v1.TimestampedCompatibleBuildIdRedirectRule\",\n                        id: 2\n                      },\n                      conflictToken: {\n                        type: \"bytes\",\n                        id: 3\n                      }\n                    }\n                  },\n                  GetWorkerVersioningRulesRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      taskQueue: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  GetWorkerVersioningRulesResponse: {\n                    fields: {\n                      assignmentRules: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.taskqueue.v1.TimestampedBuildIdAssignmentRule\",\n                        id: 1\n                      },\n                      compatibleRedirectRules: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.taskqueue.v1.TimestampedCompatibleBuildIdRedirectRule\",\n                        id: 2\n                      },\n                      conflictToken: {\n                        type: \"bytes\",\n                        id: 3\n                      }\n                    }\n                  },\n                  GetWorkerTaskReachabilityRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      buildIds: {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 2\n                      },\n                      taskQueues: {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 3\n                      },\n                      reachability: {\n                        type: \"temporal.api.enums.v1.TaskReachability\",\n                        id: 4\n                      }\n                    }\n                  },\n                  GetWorkerTaskReachabilityResponse: {\n                    fields: {\n                      buildIdReachability: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.taskqueue.v1.BuildIdReachability\",\n                        id: 1\n                      }\n                    }\n                  },\n                  UpdateWorkflowExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      },\n                      firstExecutionRunId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      waitPolicy: {\n                        type: \"temporal.api.update.v1.WaitPolicy\",\n                        id: 4\n                      },\n                      request: {\n                        type: \"temporal.api.update.v1.Request\",\n                        id: 5\n                      }\n                    }\n                  },\n                  UpdateWorkflowExecutionResponse: {\n                    fields: {\n                      updateRef: {\n                        type: \"temporal.api.update.v1.UpdateRef\",\n                        id: 1\n                      },\n                      outcome: {\n                        type: \"temporal.api.update.v1.Outcome\",\n                        id: 2\n                      },\n                      stage: {\n                        type: \"temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage\",\n                        id: 3\n                      }\n                    }\n                  },\n                  StartBatchOperationRequest: {\n                    oneofs: {\n                      operation: {\n                        oneof: [\n                          \"terminationOperation\",\n                          \"signalOperation\",\n                          \"cancellationOperation\",\n                          \"deletionOperation\",\n                          \"resetOperation\",\n                          \"updateWorkflowOptionsOperation\",\n                          \"unpauseActivitiesOperation\",\n                          \"resetActivitiesOperation\",\n                          \"updateActivityOptionsOperation\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      visibilityQuery: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      jobId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      executions: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 5\n                      },\n                      maxOperationsPerSecond: {\n                        type: \"float\",\n                        id: 6\n                      },\n                      terminationOperation: {\n                        type: \"temporal.api.batch.v1.BatchOperationTermination\",\n                        id: 10\n                      },\n                      signalOperation: {\n                        type: \"temporal.api.batch.v1.BatchOperationSignal\",\n                        id: 11\n                      },\n                      cancellationOperation: {\n                        type: \"temporal.api.batch.v1.BatchOperationCancellation\",\n                        id: 12\n                      },\n                      deletionOperation: {\n                        type: \"temporal.api.batch.v1.BatchOperationDeletion\",\n                        id: 13\n                      },\n                      resetOperation: {\n                        type: \"temporal.api.batch.v1.BatchOperationReset\",\n                        id: 14\n                      },\n                      updateWorkflowOptionsOperation: {\n                        type: \"temporal.api.batch.v1.BatchOperationUpdateWorkflowExecutionOptions\",\n                        id: 15\n                      },\n                      unpauseActivitiesOperation: {\n                        type: \"temporal.api.batch.v1.BatchOperationUnpauseActivities\",\n                        id: 16\n                      },\n                      resetActivitiesOperation: {\n                        type: \"temporal.api.batch.v1.BatchOperationResetActivities\",\n                        id: 17\n                      },\n                      updateActivityOptionsOperation: {\n                        type: \"temporal.api.batch.v1.BatchOperationUpdateActivityOptions\",\n                        id: 18\n                      }\n                    }\n                  },\n                  StartBatchOperationResponse: {\n                    fields: {}\n                  },\n                  StopBatchOperationRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      jobId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  StopBatchOperationResponse: {\n                    fields: {}\n                  },\n                  DescribeBatchOperationRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      jobId: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  DescribeBatchOperationResponse: {\n                    fields: {\n                      operationType: {\n                        type: \"temporal.api.enums.v1.BatchOperationType\",\n                        id: 1\n                      },\n                      jobId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      state: {\n                        type: \"temporal.api.enums.v1.BatchOperationState\",\n                        id: 3\n                      },\n                      startTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 4\n                      },\n                      closeTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 5\n                      },\n                      totalOperationCount: {\n                        type: \"int64\",\n                        id: 6\n                      },\n                      completeOperationCount: {\n                        type: \"int64\",\n                        id: 7\n                      },\n                      failureOperationCount: {\n                        type: \"int64\",\n                        id: 8\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 9\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 10\n                      }\n                    }\n                  },\n                  ListBatchOperationsRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      pageSize: {\n                        type: \"int32\",\n                        id: 2\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 3\n                      }\n                    }\n                  },\n                  ListBatchOperationsResponse: {\n                    fields: {\n                      operationInfo: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.batch.v1.BatchOperationInfo\",\n                        id: 1\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 2\n                      }\n                    }\n                  },\n                  PollWorkflowExecutionUpdateRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      updateRef: {\n                        type: \"temporal.api.update.v1.UpdateRef\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      waitPolicy: {\n                        type: \"temporal.api.update.v1.WaitPolicy\",\n                        id: 4\n                      }\n                    }\n                  },\n                  PollWorkflowExecutionUpdateResponse: {\n                    fields: {\n                      outcome: {\n                        type: \"temporal.api.update.v1.Outcome\",\n                        id: 1\n                      },\n                      stage: {\n                        type: \"temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage\",\n                        id: 2\n                      },\n                      updateRef: {\n                        type: \"temporal.api.update.v1.UpdateRef\",\n                        id: 3\n                      }\n                    }\n                  },\n                  PollNexusTaskQueueRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      taskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 3\n                      },\n                      pollerGroupId: {\n                        type: \"string\",\n                        id: 9\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      workerInstanceKey: {\n                        type: \"string\",\n                        id: 8\n                      },\n                      workerVersionCapabilities: {\n                        type: \"temporal.api.common.v1.WorkerVersionCapabilities\",\n                        id: 4,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      deploymentOptions: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        id: 6\n                      },\n                      workerHeartbeat: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.worker.v1.WorkerHeartbeat\",\n                        id: 7\n                      }\n                    }\n                  },\n                  PollNexusTaskQueueResponse: {\n                    fields: {\n                      taskToken: {\n                        type: \"bytes\",\n                        id: 1\n                      },\n                      request: {\n                        type: \"temporal.api.nexus.v1.Request\",\n                        id: 2\n                      },\n                      pollerScalingDecision: {\n                        type: \"temporal.api.taskqueue.v1.PollerScalingDecision\",\n                        id: 3\n                      },\n                      pollerGroupId: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      pollerGroupInfos: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.taskqueue.v1.PollerGroupInfo\",\n                        id: 5\n                      }\n                    }\n                  },\n                  RespondNexusTaskCompletedRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      taskToken: {\n                        type: \"bytes\",\n                        id: 3\n                      },\n                      response: {\n                        type: \"temporal.api.nexus.v1.Response\",\n                        id: 4\n                      },\n                      pollerGroupId: {\n                        type: \"string\",\n                        id: 5\n                      }\n                    }\n                  },\n                  RespondNexusTaskCompletedResponse: {\n                    fields: {}\n                  },\n                  RespondNexusTaskFailedRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      taskToken: {\n                        type: \"bytes\",\n                        id: 3\n                      },\n                      error: {\n                        type: \"temporal.api.nexus.v1.HandlerError\",\n                        id: 4,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 5\n                      },\n                      pollerGroupId: {\n                        type: \"string\",\n                        id: 6\n                      }\n                    }\n                  },\n                  RespondNexusTaskFailedResponse: {\n                    fields: {}\n                  },\n                  ExecuteMultiOperationRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      operations: {\n                        rule: \"repeated\",\n                        type: \"Operation\",\n                        id: 2\n                      },\n                      resourceId: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    },\n                    nested: {\n                      Operation: {\n                        oneofs: {\n                          operation: {\n                            oneof: [\n                              \"startWorkflow\",\n                              \"updateWorkflow\"\n                            ]\n                          }\n                        },\n                        fields: {\n                          startWorkflow: {\n                            type: \"StartWorkflowExecutionRequest\",\n                            id: 1\n                          },\n                          updateWorkflow: {\n                            type: \"UpdateWorkflowExecutionRequest\",\n                            id: 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  ExecuteMultiOperationResponse: {\n                    fields: {\n                      responses: {\n                        rule: \"repeated\",\n                        type: \"Response\",\n                        id: 1\n                      }\n                    },\n                    nested: {\n                      Response: {\n                        oneofs: {\n                          response: {\n                            oneof: [\n                              \"startWorkflow\",\n                              \"updateWorkflow\"\n                            ]\n                          }\n                        },\n                        fields: {\n                          startWorkflow: {\n                            type: \"StartWorkflowExecutionResponse\",\n                            id: 1\n                          },\n                          updateWorkflow: {\n                            type: \"UpdateWorkflowExecutionResponse\",\n                            id: 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  UpdateActivityOptionsRequest: {\n                    oneofs: {\n                      activity: {\n                        oneof: [\n                          \"id\",\n                          \"type\",\n                          \"matchAll\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      execution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      activityOptions: {\n                        type: \"temporal.api.activity.v1.ActivityOptions\",\n                        id: 4\n                      },\n                      updateMask: {\n                        type: \"google.protobuf.FieldMask\",\n                        id: 5\n                      },\n                      id: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      type: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      matchAll: {\n                        type: \"bool\",\n                        id: 9\n                      },\n                      restoreOriginal: {\n                        type: \"bool\",\n                        id: 8\n                      }\n                    }\n                  },\n                  UpdateActivityOptionsResponse: {\n                    fields: {\n                      activityOptions: {\n                        type: \"temporal.api.activity.v1.ActivityOptions\",\n                        id: 1\n                      }\n                    }\n                  },\n                  PauseActivityRequest: {\n                    oneofs: {\n                      activity: {\n                        oneof: [\n                          \"id\",\n                          \"type\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      execution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      id: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      type: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 6\n                      }\n                    }\n                  },\n                  PauseActivityResponse: {\n                    fields: {}\n                  },\n                  UnpauseActivityRequest: {\n                    oneofs: {\n                      activity: {\n                        oneof: [\n                          \"id\",\n                          \"type\",\n                          \"unpauseAll\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      execution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      id: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      type: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      unpauseAll: {\n                        type: \"bool\",\n                        id: 6\n                      },\n                      resetAttempts: {\n                        type: \"bool\",\n                        id: 7\n                      },\n                      resetHeartbeat: {\n                        type: \"bool\",\n                        id: 8\n                      },\n                      jitter: {\n                        type: \"google.protobuf.Duration\",\n                        id: 9\n                      }\n                    }\n                  },\n                  UnpauseActivityResponse: {\n                    fields: {}\n                  },\n                  ResetActivityRequest: {\n                    oneofs: {\n                      activity: {\n                        oneof: [\n                          \"id\",\n                          \"type\",\n                          \"matchAll\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      execution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      id: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      type: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      matchAll: {\n                        type: \"bool\",\n                        id: 10\n                      },\n                      resetHeartbeat: {\n                        type: \"bool\",\n                        id: 6\n                      },\n                      keepPaused: {\n                        type: \"bool\",\n                        id: 7\n                      },\n                      jitter: {\n                        type: \"google.protobuf.Duration\",\n                        id: 8\n                      },\n                      restoreOriginalOptions: {\n                        type: \"bool\",\n                        id: 9\n                      }\n                    }\n                  },\n                  ResetActivityResponse: {\n                    fields: {}\n                  },\n                  UpdateWorkflowExecutionOptionsRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      },\n                      workflowExecutionOptions: {\n                        type: \"temporal.api.workflow.v1.WorkflowExecutionOptions\",\n                        id: 3\n                      },\n                      updateMask: {\n                        type: \"google.protobuf.FieldMask\",\n                        id: 4\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 5\n                      }\n                    }\n                  },\n                  UpdateWorkflowExecutionOptionsResponse: {\n                    fields: {\n                      workflowExecutionOptions: {\n                        type: \"temporal.api.workflow.v1.WorkflowExecutionOptions\",\n                        id: 1\n                      }\n                    }\n                  },\n                  DescribeDeploymentRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      deployment: {\n                        type: \"deployment.v1.Deployment\",\n                        id: 2\n                      }\n                    }\n                  },\n                  DescribeDeploymentResponse: {\n                    fields: {\n                      deploymentInfo: {\n                        type: \"deployment.v1.DeploymentInfo\",\n                        id: 1\n                      }\n                    }\n                  },\n                  DescribeWorkerDeploymentVersionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      version: {\n                        type: \"string\",\n                        id: 2,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      deploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 3\n                      },\n                      reportTaskQueueStats: {\n                        type: \"bool\",\n                        id: 4\n                      }\n                    }\n                  },\n                  DescribeWorkerDeploymentVersionResponse: {\n                    fields: {\n                      workerDeploymentVersionInfo: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersionInfo\",\n                        id: 1\n                      },\n                      versionTaskQueues: {\n                        rule: \"repeated\",\n                        type: \"VersionTaskQueue\",\n                        id: 2\n                      }\n                    },\n                    nested: {\n                      VersionTaskQueue: {\n                        fields: {\n                          name: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          type: {\n                            type: \"temporal.api.enums.v1.TaskQueueType\",\n                            id: 2\n                          },\n                          stats: {\n                            type: \"temporal.api.taskqueue.v1.TaskQueueStats\",\n                            id: 3\n                          },\n                          statsByPriorityKey: {\n                            keyType: \"int32\",\n                            type: \"temporal.api.taskqueue.v1.TaskQueueStats\",\n                            id: 4\n                          }\n                        }\n                      }\n                    }\n                  },\n                  DescribeWorkerDeploymentRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      deploymentName: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  DescribeWorkerDeploymentResponse: {\n                    fields: {\n                      conflictToken: {\n                        type: \"bytes\",\n                        id: 1\n                      },\n                      workerDeploymentInfo: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentInfo\",\n                        id: 2\n                      }\n                    }\n                  },\n                  ListDeploymentsRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      pageSize: {\n                        type: \"int32\",\n                        id: 2\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 3\n                      },\n                      seriesName: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  ListDeploymentsResponse: {\n                    fields: {\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 1\n                      },\n                      deployments: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.deployment.v1.DeploymentListInfo\",\n                        id: 2\n                      }\n                    }\n                  },\n                  SetCurrentDeploymentRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      deployment: {\n                        type: \"temporal.api.deployment.v1.Deployment\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      updateMetadata: {\n                        type: \"temporal.api.deployment.v1.UpdateDeploymentMetadata\",\n                        id: 4\n                      }\n                    }\n                  },\n                  SetCurrentDeploymentResponse: {\n                    fields: {\n                      currentDeploymentInfo: {\n                        type: \"temporal.api.deployment.v1.DeploymentInfo\",\n                        id: 1\n                      },\n                      previousDeploymentInfo: {\n                        type: \"temporal.api.deployment.v1.DeploymentInfo\",\n                        id: 2\n                      }\n                    }\n                  },\n                  SetWorkerDeploymentCurrentVersionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      deploymentName: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      version: {\n                        type: \"string\",\n                        id: 3,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      buildId: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      conflictToken: {\n                        type: \"bytes\",\n                        id: 4\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      ignoreMissingTaskQueues: {\n                        type: \"bool\",\n                        id: 6\n                      },\n                      allowNoPollers: {\n                        type: \"bool\",\n                        id: 9\n                      }\n                    }\n                  },\n                  SetWorkerDeploymentCurrentVersionResponse: {\n                    fields: {\n                      conflictToken: {\n                        type: \"bytes\",\n                        id: 1\n                      },\n                      previousVersion: {\n                        type: \"string\",\n                        id: 2,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      previousDeploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 3,\n                        options: {\n                          deprecated: true\n                        }\n                      }\n                    }\n                  },\n                  SetWorkerDeploymentRampingVersionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      deploymentName: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      version: {\n                        type: \"string\",\n                        id: 3,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      buildId: {\n                        type: \"string\",\n                        id: 8\n                      },\n                      percentage: {\n                        type: \"float\",\n                        id: 4\n                      },\n                      conflictToken: {\n                        type: \"bytes\",\n                        id: 5\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      ignoreMissingTaskQueues: {\n                        type: \"bool\",\n                        id: 7\n                      },\n                      allowNoPollers: {\n                        type: \"bool\",\n                        id: 10\n                      }\n                    }\n                  },\n                  SetWorkerDeploymentRampingVersionResponse: {\n                    fields: {\n                      conflictToken: {\n                        type: \"bytes\",\n                        id: 1\n                      },\n                      previousVersion: {\n                        type: \"string\",\n                        id: 2,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      previousDeploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 4,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      previousPercentage: {\n                        type: \"float\",\n                        id: 3,\n                        options: {\n                          deprecated: true\n                        }\n                      }\n                    }\n                  },\n                  CreateWorkerDeploymentRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      deploymentName: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 5\n                      }\n                    }\n                  },\n                  CreateWorkerDeploymentResponse: {\n                    fields: {\n                      conflictToken: {\n                        type: \"bytes\",\n                        id: 1\n                      }\n                    }\n                  },\n                  ListWorkerDeploymentsRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      pageSize: {\n                        type: \"int32\",\n                        id: 2\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 3\n                      }\n                    }\n                  },\n                  ListWorkerDeploymentsResponse: {\n                    fields: {\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 1\n                      },\n                      workerDeployments: {\n                        rule: \"repeated\",\n                        type: \"WorkerDeploymentSummary\",\n                        id: 2\n                      }\n                    },\n                    nested: {\n                      WorkerDeploymentSummary: {\n                        fields: {\n                          name: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          createTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 2\n                          },\n                          routingConfig: {\n                            type: \"temporal.api.deployment.v1.RoutingConfig\",\n                            id: 3\n                          },\n                          latestVersionSummary: {\n                            type: \"temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary\",\n                            id: 4\n                          },\n                          currentVersionSummary: {\n                            type: \"temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary\",\n                            id: 5\n                          },\n                          rampingVersionSummary: {\n                            type: \"temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary\",\n                            id: 6\n                          }\n                        }\n                      }\n                    }\n                  },\n                  CreateWorkerDeploymentVersionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      deploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 2\n                      },\n                      computeConfig: {\n                        type: \"temporal.api.compute.v1.ComputeConfig\",\n                        id: 4\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 5\n                      }\n                    }\n                  },\n                  CreateWorkerDeploymentVersionResponse: {\n                    fields: {}\n                  },\n                  DeleteWorkerDeploymentVersionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      version: {\n                        type: \"string\",\n                        id: 2,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      deploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 5\n                      },\n                      skipDrainage: {\n                        type: \"bool\",\n                        id: 3\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  DeleteWorkerDeploymentVersionResponse: {\n                    fields: {}\n                  },\n                  DeleteWorkerDeploymentRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      deploymentName: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  DeleteWorkerDeploymentResponse: {\n                    fields: {}\n                  },\n                  UpdateWorkerDeploymentVersionComputeConfigRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      deploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 2\n                      },\n                      computeConfigScalingGroups: {\n                        keyType: \"string\",\n                        type: \"temporal.api.compute.v1.ComputeConfigScalingGroupUpdate\",\n                        id: 6\n                      },\n                      removeComputeConfigScalingGroups: {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 7\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  UpdateWorkerDeploymentVersionComputeConfigResponse: {\n                    fields: {}\n                  },\n                  ValidateWorkerDeploymentVersionComputeConfigRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      deploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 2\n                      },\n                      computeConfigScalingGroups: {\n                        keyType: \"string\",\n                        type: \"temporal.api.compute.v1.ComputeConfigScalingGroupUpdate\",\n                        id: 6\n                      },\n                      removeComputeConfigScalingGroups: {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 7\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  ValidateWorkerDeploymentVersionComputeConfigResponse: {\n                    fields: {}\n                  },\n                  UpdateWorkerDeploymentVersionMetadataRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      version: {\n                        type: \"string\",\n                        id: 2,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      deploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 5\n                      },\n                      upsertEntries: {\n                        keyType: \"string\",\n                        type: \"temporal.api.common.v1.Payload\",\n                        id: 3\n                      },\n                      removeEntries: {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 4\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 6\n                      }\n                    }\n                  },\n                  UpdateWorkerDeploymentVersionMetadataResponse: {\n                    fields: {\n                      metadata: {\n                        type: \"temporal.api.deployment.v1.VersionMetadata\",\n                        id: 1\n                      }\n                    }\n                  },\n                  SetWorkerDeploymentManagerRequest: {\n                    oneofs: {\n                      newManagerIdentity: {\n                        oneof: [\n                          \"managerIdentity\",\n                          \"self\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      deploymentName: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      managerIdentity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      self: {\n                        type: \"bool\",\n                        id: 4\n                      },\n                      conflictToken: {\n                        type: \"bytes\",\n                        id: 5\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 6\n                      }\n                    }\n                  },\n                  SetWorkerDeploymentManagerResponse: {\n                    fields: {\n                      conflictToken: {\n                        type: \"bytes\",\n                        id: 1\n                      },\n                      previousManagerIdentity: {\n                        type: \"string\",\n                        id: 2,\n                        options: {\n                          deprecated: true\n                        }\n                      }\n                    }\n                  },\n                  GetCurrentDeploymentRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      seriesName: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  GetCurrentDeploymentResponse: {\n                    fields: {\n                      currentDeploymentInfo: {\n                        type: \"temporal.api.deployment.v1.DeploymentInfo\",\n                        id: 1\n                      }\n                    }\n                  },\n                  GetDeploymentReachabilityRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      deployment: {\n                        type: \"temporal.api.deployment.v1.Deployment\",\n                        id: 2\n                      }\n                    }\n                  },\n                  GetDeploymentReachabilityResponse: {\n                    fields: {\n                      deploymentInfo: {\n                        type: \"temporal.api.deployment.v1.DeploymentInfo\",\n                        id: 1\n                      },\n                      reachability: {\n                        type: \"enums.v1.DeploymentReachability\",\n                        id: 2\n                      },\n                      lastUpdateTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 3\n                      }\n                    }\n                  },\n                  CreateWorkflowRuleRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      spec: {\n                        type: \"temporal.api.rules.v1.WorkflowRuleSpec\",\n                        id: 2\n                      },\n                      forceScan: {\n                        type: \"bool\",\n                        id: 3\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      description: {\n                        type: \"string\",\n                        id: 6\n                      }\n                    }\n                  },\n                  CreateWorkflowRuleResponse: {\n                    fields: {\n                      rule: {\n                        type: \"temporal.api.rules.v1.WorkflowRule\",\n                        id: 1\n                      },\n                      jobId: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  DescribeWorkflowRuleRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      ruleId: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  DescribeWorkflowRuleResponse: {\n                    fields: {\n                      rule: {\n                        type: \"temporal.api.rules.v1.WorkflowRule\",\n                        id: 1\n                      }\n                    }\n                  },\n                  DeleteWorkflowRuleRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      ruleId: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  DeleteWorkflowRuleResponse: {\n                    fields: {}\n                  },\n                  ListWorkflowRulesRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 2\n                      }\n                    }\n                  },\n                  ListWorkflowRulesResponse: {\n                    fields: {\n                      rules: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.rules.v1.WorkflowRule\",\n                        id: 1\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 2\n                      }\n                    }\n                  },\n                  TriggerWorkflowRuleRequest: {\n                    oneofs: {\n                      rule: {\n                        oneof: [\n                          \"id\",\n                          \"spec\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      execution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      },\n                      id: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      spec: {\n                        type: \"temporal.api.rules.v1.WorkflowRuleSpec\",\n                        id: 5\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  TriggerWorkflowRuleResponse: {\n                    fields: {\n                      applied: {\n                        type: \"bool\",\n                        id: 1\n                      }\n                    }\n                  },\n                  RecordWorkerHeartbeatRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      workerHeartbeat: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.worker.v1.WorkerHeartbeat\",\n                        id: 3\n                      },\n                      resourceId: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  RecordWorkerHeartbeatResponse: {\n                    fields: {}\n                  },\n                  ListWorkersRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      pageSize: {\n                        type: \"int32\",\n                        id: 2\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 3\n                      },\n                      query: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  ListWorkersResponse: {\n                    fields: {\n                      workersInfo: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.worker.v1.WorkerInfo\",\n                        id: 1,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      workers: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.worker.v1.WorkerListInfo\",\n                        id: 3\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 2\n                      }\n                    }\n                  },\n                  UpdateTaskQueueConfigRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      taskQueue: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      taskQueueType: {\n                        type: \"temporal.api.enums.v1.TaskQueueType\",\n                        id: 4\n                      },\n                      updateQueueRateLimit: {\n                        type: \"RateLimitUpdate\",\n                        id: 5\n                      },\n                      updateFairnessKeyRateLimitDefault: {\n                        type: \"RateLimitUpdate\",\n                        id: 6\n                      },\n                      setFairnessWeightOverrides: {\n                        keyType: \"string\",\n                        type: \"float\",\n                        id: 7\n                      },\n                      unsetFairnessWeightOverrides: {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 8\n                      }\n                    },\n                    nested: {\n                      RateLimitUpdate: {\n                        fields: {\n                          rateLimit: {\n                            type: \"temporal.api.taskqueue.v1.RateLimit\",\n                            id: 1\n                          },\n                          reason: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  UpdateTaskQueueConfigResponse: {\n                    fields: {\n                      config: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueueConfig\",\n                        id: 1\n                      }\n                    }\n                  },\n                  FetchWorkerConfigRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      selector: {\n                        type: \"temporal.api.common.v1.WorkerSelector\",\n                        id: 6\n                      },\n                      resourceId: {\n                        type: \"string\",\n                        id: 7\n                      }\n                    }\n                  },\n                  FetchWorkerConfigResponse: {\n                    fields: {\n                      workerConfig: {\n                        type: \"temporal.api.sdk.v1.WorkerConfig\",\n                        id: 1\n                      }\n                    }\n                  },\n                  UpdateWorkerConfigRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      workerConfig: {\n                        type: \"temporal.api.sdk.v1.WorkerConfig\",\n                        id: 4\n                      },\n                      updateMask: {\n                        type: \"google.protobuf.FieldMask\",\n                        id: 5\n                      },\n                      selector: {\n                        type: \"temporal.api.common.v1.WorkerSelector\",\n                        id: 6\n                      },\n                      resourceId: {\n                        type: \"string\",\n                        id: 7\n                      }\n                    }\n                  },\n                  UpdateWorkerConfigResponse: {\n                    oneofs: {\n                      response: {\n                        oneof: [\n                          \"workerConfig\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      workerConfig: {\n                        type: \"temporal.api.sdk.v1.WorkerConfig\",\n                        id: 1\n                      }\n                    }\n                  },\n                  DescribeWorkerRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workerInstanceKey: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  DescribeWorkerResponse: {\n                    fields: {\n                      workerInfo: {\n                        type: \"temporal.api.worker.v1.WorkerInfo\",\n                        id: 1\n                      }\n                    }\n                  },\n                  PauseWorkflowExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workflowId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 6\n                      }\n                    }\n                  },\n                  PauseWorkflowExecutionResponse: {\n                    fields: {}\n                  },\n                  UnpauseWorkflowExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workflowId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 6\n                      }\n                    }\n                  },\n                  UnpauseWorkflowExecutionResponse: {\n                    fields: {}\n                  },\n                  StartActivityExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      activityId: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      activityType: {\n                        type: \"temporal.api.common.v1.ActivityType\",\n                        id: 5\n                      },\n                      taskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 6\n                      },\n                      scheduleToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 7\n                      },\n                      scheduleToStartTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 8\n                      },\n                      startToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 9\n                      },\n                      heartbeatTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 10\n                      },\n                      retryPolicy: {\n                        type: \"temporal.api.common.v1.RetryPolicy\",\n                        id: 11\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 12\n                      },\n                      idReusePolicy: {\n                        type: \"temporal.api.enums.v1.ActivityIdReusePolicy\",\n                        id: 13\n                      },\n                      idConflictPolicy: {\n                        type: \"temporal.api.enums.v1.ActivityIdConflictPolicy\",\n                        id: 14\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 15\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 16\n                      },\n                      userMetadata: {\n                        type: \"temporal.api.sdk.v1.UserMetadata\",\n                        id: 17\n                      },\n                      priority: {\n                        type: \"temporal.api.common.v1.Priority\",\n                        id: 18\n                      },\n                      completionCallbacks: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.common.v1.Callback\",\n                        id: 19\n                      },\n                      links: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.common.v1.Link\",\n                        id: 20\n                      },\n                      onConflictOptions: {\n                        type: \"temporal.api.common.v1.OnConflictOptions\",\n                        id: 21\n                      },\n                      startDelay: {\n                        type: \"google.protobuf.Duration\",\n                        id: 22\n                      }\n                    }\n                  },\n                  StartActivityExecutionResponse: {\n                    fields: {\n                      runId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      started: {\n                        type: \"bool\",\n                        id: 2\n                      },\n                      link: {\n                        type: \"temporal.api.common.v1.Link\",\n                        id: 3\n                      }\n                    }\n                  },\n                  DescribeActivityExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      activityId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      includeInput: {\n                        type: \"bool\",\n                        id: 4\n                      },\n                      includeOutcome: {\n                        type: \"bool\",\n                        id: 5\n                      },\n                      longPollToken: {\n                        type: \"bytes\",\n                        id: 6\n                      }\n                    }\n                  },\n                  DescribeActivityExecutionResponse: {\n                    fields: {\n                      runId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      info: {\n                        type: \"temporal.api.activity.v1.ActivityExecutionInfo\",\n                        id: 2\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 3\n                      },\n                      outcome: {\n                        type: \"temporal.api.activity.v1.ActivityExecutionOutcome\",\n                        id: 4\n                      },\n                      longPollToken: {\n                        type: \"bytes\",\n                        id: 5\n                      },\n                      callbacks: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.activity.v1.CallbackInfo\",\n                        id: 6\n                      }\n                    }\n                  },\n                  PollActivityExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      activityId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  PollActivityExecutionResponse: {\n                    fields: {\n                      runId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      outcome: {\n                        type: \"temporal.api.activity.v1.ActivityExecutionOutcome\",\n                        id: 2\n                      }\n                    }\n                  },\n                  ListActivityExecutionsRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      pageSize: {\n                        type: \"int32\",\n                        id: 2\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 3\n                      },\n                      query: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  ListActivityExecutionsResponse: {\n                    fields: {\n                      executions: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.activity.v1.ActivityExecutionListInfo\",\n                        id: 1\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 2\n                      }\n                    }\n                  },\n                  StartNexusOperationExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      operationId: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      endpoint: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      service: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      operation: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      scheduleToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 8\n                      },\n                      scheduleToStartTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 9\n                      },\n                      startToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 10\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payload\",\n                        id: 11\n                      },\n                      idReusePolicy: {\n                        type: \"temporal.api.enums.v1.NexusOperationIdReusePolicy\",\n                        id: 12\n                      },\n                      idConflictPolicy: {\n                        type: \"temporal.api.enums.v1.NexusOperationIdConflictPolicy\",\n                        id: 13\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 14\n                      },\n                      nexusHeader: {\n                        keyType: \"string\",\n                        type: \"string\",\n                        id: 15\n                      },\n                      userMetadata: {\n                        type: \"temporal.api.sdk.v1.UserMetadata\",\n                        id: 16\n                      }\n                    }\n                  },\n                  StartNexusOperationExecutionResponse: {\n                    fields: {\n                      runId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      started: {\n                        type: \"bool\",\n                        id: 2\n                      }\n                    }\n                  },\n                  DescribeNexusOperationExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      operationId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      includeInput: {\n                        type: \"bool\",\n                        id: 4\n                      },\n                      includeOutcome: {\n                        type: \"bool\",\n                        id: 5\n                      },\n                      longPollToken: {\n                        type: \"bytes\",\n                        id: 6\n                      }\n                    }\n                  },\n                  DescribeNexusOperationExecutionResponse: {\n                    oneofs: {\n                      outcome: {\n                        oneof: [\n                          \"result\",\n                          \"failure\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      runId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      info: {\n                        type: \"temporal.api.nexus.v1.NexusOperationExecutionInfo\",\n                        id: 2\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payload\",\n                        id: 3\n                      },\n                      result: {\n                        type: \"temporal.api.common.v1.Payload\",\n                        id: 4\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 5\n                      },\n                      longPollToken: {\n                        type: \"bytes\",\n                        id: 6\n                      }\n                    }\n                  },\n                  PollNexusOperationExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      operationId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      waitStage: {\n                        type: \"temporal.api.enums.v1.NexusOperationWaitStage\",\n                        id: 4\n                      }\n                    }\n                  },\n                  PollNexusOperationExecutionResponse: {\n                    oneofs: {\n                      outcome: {\n                        oneof: [\n                          \"result\",\n                          \"failure\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      runId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      waitStage: {\n                        type: \"temporal.api.enums.v1.NexusOperationWaitStage\",\n                        id: 2\n                      },\n                      operationToken: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      result: {\n                        type: \"temporal.api.common.v1.Payload\",\n                        id: 4\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 5\n                      }\n                    }\n                  },\n                  ListNexusOperationExecutionsRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      pageSize: {\n                        type: \"int32\",\n                        id: 2\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 3\n                      },\n                      query: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  ListNexusOperationExecutionsResponse: {\n                    fields: {\n                      operations: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.nexus.v1.NexusOperationExecutionListInfo\",\n                        id: 1\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 2\n                      }\n                    }\n                  },\n                  CountActivityExecutionsRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      query: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  CountActivityExecutionsResponse: {\n                    fields: {\n                      count: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      groups: {\n                        rule: \"repeated\",\n                        type: \"AggregationGroup\",\n                        id: 2\n                      }\n                    },\n                    nested: {\n                      AggregationGroup: {\n                        fields: {\n                          groupValues: {\n                            rule: \"repeated\",\n                            type: \"temporal.api.common.v1.Payload\",\n                            id: 1\n                          },\n                          count: {\n                            type: \"int64\",\n                            id: 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  CountNexusOperationExecutionsRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      query: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  CountNexusOperationExecutionsResponse: {\n                    fields: {\n                      count: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      groups: {\n                        rule: \"repeated\",\n                        type: \"AggregationGroup\",\n                        id: 2\n                      }\n                    },\n                    nested: {\n                      AggregationGroup: {\n                        fields: {\n                          groupValues: {\n                            rule: \"repeated\",\n                            type: \"temporal.api.common.v1.Payload\",\n                            id: 1\n                          },\n                          count: {\n                            type: \"int64\",\n                            id: 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  RequestCancelActivityExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      activityId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 6\n                      }\n                    }\n                  },\n                  RequestCancelActivityExecutionResponse: {\n                    fields: {}\n                  },\n                  TerminateActivityExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      activityId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 6\n                      }\n                    }\n                  },\n                  TerminateActivityExecutionResponse: {\n                    fields: {}\n                  },\n                  DeleteActivityExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      activityId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  DeleteActivityExecutionResponse: {\n                    fields: {}\n                  },\n                  RequestCancelNexusOperationExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      operationId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 6\n                      }\n                    }\n                  },\n                  RequestCancelNexusOperationExecutionResponse: {\n                    fields: {}\n                  },\n                  TerminateNexusOperationExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      operationId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 6\n                      }\n                    }\n                  },\n                  TerminateNexusOperationExecutionResponse: {\n                    fields: {}\n                  },\n                  DeleteNexusOperationExecutionRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      operationId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  DeleteNexusOperationExecutionResponse: {\n                    fields: {}\n                  },\n                  WorkflowService: {\n                    methods: {\n                      RegisterNamespace: {\n                        requestType: \"RegisterNamespaceRequest\",\n                        responseType: \"RegisterNamespaceResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/cluster/namespaces\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/cluster/namespaces\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces\",\n                                body: \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      DescribeNamespace: {\n                        requestType: \"DescribeNamespaceRequest\",\n                        responseType: \"DescribeNamespaceResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/cluster/namespaces/{namespace}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/cluster/namespaces/{namespace}\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      ListNamespaces: {\n                        requestType: \"ListNamespacesRequest\",\n                        responseType: \"ListNamespacesResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/cluster/namespaces\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/cluster/namespaces\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      UpdateNamespace: {\n                        requestType: \"UpdateNamespaceRequest\",\n                        responseType: \"UpdateNamespaceResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/cluster/namespaces/{namespace}/update\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/update\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/cluster/namespaces/{namespace}/update\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/update\",\n                                body: \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      DeprecateNamespace: {\n                        requestType: \"DeprecateNamespaceRequest\",\n                        responseType: \"DeprecateNamespaceResponse\"\n                      },\n                      StartWorkflowExecution: {\n                        requestType: \"StartWorkflowExecutionRequest\",\n                        responseType: \"StartWorkflowExecutionResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_id}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/workflows/{workflow_id}\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      ExecuteMultiOperation: {\n                        requestType: \"ExecuteMultiOperationRequest\",\n                        responseType: \"ExecuteMultiOperationResponse\",\n                        options: {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      GetWorkflowExecutionHistory: {\n                        requestType: \"GetWorkflowExecutionHistoryRequest\",\n                        responseType: \"GetWorkflowExecutionHistoryResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/workflows/{execution.workflow_id}/history\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}/history\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{execution.workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/workflows/{execution.workflow_id}/history\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}/history\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      GetWorkflowExecutionHistoryReverse: {\n                        requestType: \"GetWorkflowExecutionHistoryReverseRequest\",\n                        responseType: \"GetWorkflowExecutionHistoryReverseResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/workflows/{execution.workflow_id}/history-reverse\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}/history-reverse\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{execution.workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/workflows/{execution.workflow_id}/history-reverse\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}/history-reverse\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      PollWorkflowTaskQueue: {\n                        requestType: \"PollWorkflowTaskQueueRequest\",\n                        responseType: \"PollWorkflowTaskQueueResponse\",\n                        options: {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"poller:{poller_group_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"poller:{poller_group_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      RespondWorkflowTaskCompleted: {\n                        requestType: \"RespondWorkflowTaskCompletedRequest\",\n                        responseType: \"RespondWorkflowTaskCompletedResponse\",\n                        options: {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      RespondWorkflowTaskFailed: {\n                        requestType: \"RespondWorkflowTaskFailedRequest\",\n                        responseType: \"RespondWorkflowTaskFailedResponse\",\n                        options: {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      PollActivityTaskQueue: {\n                        requestType: \"PollActivityTaskQueueRequest\",\n                        responseType: \"PollActivityTaskQueueResponse\",\n                        options: {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"poller:{poller_group_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"poller:{poller_group_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      RecordActivityTaskHeartbeat: {\n                        requestType: \"RecordActivityTaskHeartbeatRequest\",\n                        responseType: \"RecordActivityTaskHeartbeatResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activity-heartbeat\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activity-heartbeat\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/activity-heartbeat\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/activity-heartbeat\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      RecordActivityTaskHeartbeatById: {\n                        requestType: \"RecordActivityTaskHeartbeatByIdRequest\",\n                        responseType: \"RecordActivityTaskHeartbeatByIdResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities/{activity_id}/heartbeat\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/heartbeat\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/activities/{activity_id}/heartbeat\",\n                              body: \"*\",\n                              additional_bindings: [\n                                {\n                                  post: \"/api/v1/namespaces/{namespace}/activities/{activity_id}/heartbeat\",\n                                  body: \"*\"\n                                },\n                                {\n                                  post: \"/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/heartbeat\",\n                                  body: \"*\"\n                                },\n                                {\n                                  post: \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/heartbeat\",\n                                  body: \"*\"\n                                }\n                              ]\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      RespondActivityTaskCompleted: {\n                        requestType: \"RespondActivityTaskCompletedRequest\",\n                        responseType: \"RespondActivityTaskCompletedResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activity-complete\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activity-complete\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/activity-complete\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/activity-complete\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      RespondActivityTaskCompletedById: {\n                        requestType: \"RespondActivityTaskCompletedByIdRequest\",\n                        responseType: \"RespondActivityTaskCompletedByIdResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities/{activity_id}/complete\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/complete\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/activities/{activity_id}/complete\",\n                              body: \"*\",\n                              additional_bindings: [\n                                {\n                                  post: \"/api/v1/namespaces/{namespace}/activities/{activity_id}/complete\",\n                                  body: \"*\"\n                                },\n                                {\n                                  post: \"/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/complete\",\n                                  body: \"*\"\n                                },\n                                {\n                                  post: \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/complete\",\n                                  body: \"*\"\n                                }\n                              ]\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      RespondActivityTaskFailed: {\n                        requestType: \"RespondActivityTaskFailedRequest\",\n                        responseType: \"RespondActivityTaskFailedResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activity-fail\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activity-fail\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/activity-fail\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/activity-fail\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      RespondActivityTaskFailedById: {\n                        requestType: \"RespondActivityTaskFailedByIdRequest\",\n                        responseType: \"RespondActivityTaskFailedByIdResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities/{activity_id}/fail\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/fail\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/activities/{activity_id}/fail\",\n                              body: \"*\",\n                              additional_bindings: [\n                                {\n                                  post: \"/api/v1/namespaces/{namespace}/activities/{activity_id}/fail\",\n                                  body: \"*\"\n                                },\n                                {\n                                  post: \"/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/fail\",\n                                  body: \"*\"\n                                },\n                                {\n                                  post: \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/fail\",\n                                  body: \"*\"\n                                }\n                              ]\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      RespondActivityTaskCanceled: {\n                        requestType: \"RespondActivityTaskCanceledRequest\",\n                        responseType: \"RespondActivityTaskCanceledResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activity-resolve-as-canceled\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activity-resolve-as-canceled\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/activity-resolve-as-canceled\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/activity-resolve-as-canceled\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      RespondActivityTaskCanceledById: {\n                        requestType: \"RespondActivityTaskCanceledByIdRequest\",\n                        responseType: \"RespondActivityTaskCanceledByIdResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities/{activity_id}/resolve-as-canceled\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/resolve-as-canceled\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/activities/{activity_id}/resolve-as-canceled\",\n                              body: \"*\",\n                              additional_bindings: [\n                                {\n                                  post: \"/api/v1/namespaces/{namespace}/activities/{activity_id}/resolve-as-canceled\",\n                                  body: \"*\"\n                                },\n                                {\n                                  post: \"/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/resolve-as-canceled\",\n                                  body: \"*\"\n                                },\n                                {\n                                  post: \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/activities/{activity_id}/resolve-as-canceled\",\n                                  body: \"*\"\n                                }\n                              ]\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      RequestCancelWorkflowExecution: {\n                        requestType: \"RequestCancelWorkflowExecutionRequest\",\n                        responseType: \"RequestCancelWorkflowExecutionResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/cancel\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/cancel\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_execution.workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/cancel\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/cancel\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{workflow_execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      SignalWorkflowExecution: {\n                        requestType: \"SignalWorkflowExecutionRequest\",\n                        responseType: \"SignalWorkflowExecutionResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/signal/{signal_name}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/signal/{signal_name}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_execution.workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/signal/{signal_name}\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/signal/{signal_name}\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{workflow_execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      SignalWithStartWorkflowExecution: {\n                        requestType: \"SignalWithStartWorkflowExecutionRequest\",\n                        responseType: \"SignalWithStartWorkflowExecutionResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_id}/signal-with-start/{signal_name}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/signal-with-start/{signal_name}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/workflows/{workflow_id}/signal-with-start/{signal_name}\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/signal-with-start/{signal_name}\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      ResetWorkflowExecution: {\n                        requestType: \"ResetWorkflowExecutionRequest\",\n                        responseType: \"ResetWorkflowExecutionResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/reset\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/reset\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_execution.workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/reset\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/reset\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{workflow_execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      TerminateWorkflowExecution: {\n                        requestType: \"TerminateWorkflowExecutionRequest\",\n                        responseType: \"TerminateWorkflowExecutionResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/terminate\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/terminate\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_execution.workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/terminate\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/terminate\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{workflow_execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      DeleteWorkflowExecution: {\n                        requestType: \"DeleteWorkflowExecutionRequest\",\n                        responseType: \"DeleteWorkflowExecutionResponse\",\n                        options: {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_execution.workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{workflow_execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      ListOpenWorkflowExecutions: {\n                        requestType: \"ListOpenWorkflowExecutionsRequest\",\n                        responseType: \"ListOpenWorkflowExecutionsResponse\"\n                      },\n                      ListClosedWorkflowExecutions: {\n                        requestType: \"ListClosedWorkflowExecutionsRequest\",\n                        responseType: \"ListClosedWorkflowExecutionsResponse\"\n                      },\n                      ListWorkflowExecutions: {\n                        requestType: \"ListWorkflowExecutionsRequest\",\n                        responseType: \"ListWorkflowExecutionsResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/workflows\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/workflows\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/workflows\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/workflows\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      ListArchivedWorkflowExecutions: {\n                        requestType: \"ListArchivedWorkflowExecutionsRequest\",\n                        responseType: \"ListArchivedWorkflowExecutionsResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/archived-workflows\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/archived-workflows\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/archived-workflows\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/archived-workflows\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      ScanWorkflowExecutions: {\n                        requestType: \"ScanWorkflowExecutionsRequest\",\n                        responseType: \"ScanWorkflowExecutionsResponse\"\n                      },\n                      CountWorkflowExecutions: {\n                        requestType: \"CountWorkflowExecutionsRequest\",\n                        responseType: \"CountWorkflowExecutionsResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/workflow-count\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/workflow-count\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/workflow-count\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/workflow-count\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      GetSearchAttributes: {\n                        requestType: \"GetSearchAttributesRequest\",\n                        responseType: \"GetSearchAttributesResponse\"\n                      },\n                      RespondQueryTaskCompleted: {\n                        requestType: \"RespondQueryTaskCompletedRequest\",\n                        responseType: \"RespondQueryTaskCompletedResponse\",\n                        options: {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"poller:{poller_group_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"poller:{poller_group_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      ResetStickyTaskQueue: {\n                        requestType: \"ResetStickyTaskQueueRequest\",\n                        responseType: \"ResetStickyTaskQueueResponse\",\n                        options: {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{execution.workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      ShutdownWorker: {\n                        requestType: \"ShutdownWorkerRequest\",\n                        responseType: \"ShutdownWorkerResponse\"\n                      },\n                      QueryWorkflow: {\n                        requestType: \"QueryWorkflowRequest\",\n                        responseType: \"QueryWorkflowResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{execution.workflow_id}/query/{query.query_type}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}/query/{query.query_type}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{execution.workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/workflows/{execution.workflow_id}/query/{query.query_type}\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}/query/{query.query_type}\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      DescribeWorkflowExecution: {\n                        requestType: \"DescribeWorkflowExecutionRequest\",\n                        responseType: \"DescribeWorkflowExecutionResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/workflows/{execution.workflow_id}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{execution.workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/workflows/{execution.workflow_id}\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      DescribeTaskQueue: {\n                        requestType: \"DescribeTaskQueueRequest\",\n                        responseType: \"DescribeTaskQueueResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/task-queues/{task_queue.name}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/task-queues/{task_queue.name}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"taskqueue:{task_queue.name}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/task-queues/{task_queue.name}\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/task-queues/{task_queue.name}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"taskqueue:{task_queue.name}\"\n                            }\n                          }\n                        ]\n                      },\n                      GetClusterInfo: {\n                        requestType: \"GetClusterInfoRequest\",\n                        responseType: \"GetClusterInfoResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/cluster\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/cluster-info\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/cluster\",\n                              additional_bindings: {\n                                get: \"/api/v1/cluster-info\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      GetSystemInfo: {\n                        requestType: \"GetSystemInfoRequest\",\n                        responseType: \"GetSystemInfoResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/system-info\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/system-info\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/system-info\",\n                              additional_bindings: {\n                                get: \"/api/v1/system-info\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      ListTaskQueuePartitions: {\n                        requestType: \"ListTaskQueuePartitionsRequest\",\n                        responseType: \"ListTaskQueuePartitionsResponse\",\n                        options: {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"taskqueue:{task_queue.name}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"taskqueue:{task_queue.name}\"\n                            }\n                          }\n                        ]\n                      },\n                      CreateSchedule: {\n                        requestType: \"CreateScheduleRequest\",\n                        responseType: \"CreateScheduleResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/schedules/{schedule_id}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"schedule:{schedule_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/schedules/{schedule_id}\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"schedule:{schedule_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      DescribeSchedule: {\n                        requestType: \"DescribeScheduleRequest\",\n                        responseType: \"DescribeScheduleResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/schedules/{schedule_id}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"schedule:{schedule_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/schedules/{schedule_id}\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"schedule:{schedule_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      UpdateSchedule: {\n                        requestType: \"UpdateScheduleRequest\",\n                        responseType: \"UpdateScheduleResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/schedules/{schedule_id}/update\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}/update\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"schedule:{schedule_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/schedules/{schedule_id}/update\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}/update\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"schedule:{schedule_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      PatchSchedule: {\n                        requestType: \"PatchScheduleRequest\",\n                        responseType: \"PatchScheduleResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/schedules/{schedule_id}/patch\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}/patch\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"schedule:{schedule_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/schedules/{schedule_id}/patch\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}/patch\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"schedule:{schedule_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      ListScheduleMatchingTimes: {\n                        requestType: \"ListScheduleMatchingTimesRequest\",\n                        responseType: \"ListScheduleMatchingTimesResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/schedules/{schedule_id}/matching-times\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}/matching-times\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"schedule:{schedule_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/schedules/{schedule_id}/matching-times\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}/matching-times\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"schedule:{schedule_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      DeleteSchedule: {\n                        requestType: \"DeleteScheduleRequest\",\n                        responseType: \"DeleteScheduleResponse\",\n                        options: {\n                          \"(google.api.http).delete\": \"/namespaces/{namespace}/schedules/{schedule_id}\",\n                          \"(google.api.http).additional_bindings.delete\": \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"schedule:{schedule_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              \"delete\": \"/namespaces/{namespace}/schedules/{schedule_id}\",\n                              additional_bindings: {\n                                \"delete\": \"/api/v1/namespaces/{namespace}/schedules/{schedule_id}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"schedule:{schedule_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      ListSchedules: {\n                        requestType: \"ListSchedulesRequest\",\n                        responseType: \"ListSchedulesResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/schedules\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/schedules\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/schedules\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/schedules\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      CountSchedules: {\n                        requestType: \"CountSchedulesRequest\",\n                        responseType: \"CountSchedulesResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/schedule-count\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/schedule-count\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/schedule-count\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/schedule-count\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      UpdateWorkerBuildIdCompatibility: {\n                        requestType: \"UpdateWorkerBuildIdCompatibilityRequest\",\n                        responseType: \"UpdateWorkerBuildIdCompatibilityResponse\"\n                      },\n                      GetWorkerBuildIdCompatibility: {\n                        requestType: \"GetWorkerBuildIdCompatibilityRequest\",\n                        responseType: \"GetWorkerBuildIdCompatibilityResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/task-queues/{task_queue}/worker-build-id-compatibility\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/task-queues/{task_queue}/worker-build-id-compatibility\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/task-queues/{task_queue}/worker-build-id-compatibility\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/task-queues/{task_queue}/worker-build-id-compatibility\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      UpdateWorkerVersioningRules: {\n                        requestType: \"UpdateWorkerVersioningRulesRequest\",\n                        responseType: \"UpdateWorkerVersioningRulesResponse\"\n                      },\n                      GetWorkerVersioningRules: {\n                        requestType: \"GetWorkerVersioningRulesRequest\",\n                        responseType: \"GetWorkerVersioningRulesResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/task-queues/{task_queue}/worker-versioning-rules\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/task-queues/{task_queue}/worker-versioning-rules\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/task-queues/{task_queue}/worker-versioning-rules\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/task-queues/{task_queue}/worker-versioning-rules\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      GetWorkerTaskReachability: {\n                        requestType: \"GetWorkerTaskReachabilityRequest\",\n                        responseType: \"GetWorkerTaskReachabilityResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/worker-task-reachability\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/worker-task-reachability\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/worker-task-reachability\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/worker-task-reachability\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      DescribeDeployment: {\n                        requestType: \"DescribeDeploymentRequest\",\n                        responseType: \"DescribeDeploymentResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/deployments/{deployment.series_name}/{deployment.build_id}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/deployments/{deployment.series_name}/{deployment.build_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/deployments/{deployment.series_name}/{deployment.build_id}\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/deployments/{deployment.series_name}/{deployment.build_id}\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      DescribeWorkerDeploymentVersion: {\n                        requestType: \"DescribeWorkerDeploymentVersionRequest\",\n                        responseType: \"DescribeWorkerDeploymentVersionResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"deployment:{deployment_version.deployment_name}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"deployment:{deployment_version.deployment_name}\"\n                            }\n                          }\n                        ]\n                      },\n                      ListDeployments: {\n                        requestType: \"ListDeploymentsRequest\",\n                        responseType: \"ListDeploymentsResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/deployments\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/deployments\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/deployments\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/deployments\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      GetDeploymentReachability: {\n                        requestType: \"GetDeploymentReachabilityRequest\",\n                        responseType: \"GetDeploymentReachabilityResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/deployments/{deployment.series_name}/{deployment.build_id}/reachability\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/deployments/{deployment.series_name}/{deployment.build_id}/reachability\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/deployments/{deployment.series_name}/{deployment.build_id}/reachability\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/deployments/{deployment.series_name}/{deployment.build_id}/reachability\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      GetCurrentDeployment: {\n                        requestType: \"GetCurrentDeploymentRequest\",\n                        responseType: \"GetCurrentDeploymentResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/current-deployment/{series_name}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/current-deployment/{series_name}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/current-deployment/{series_name}\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/current-deployment/{series_name}\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      SetCurrentDeployment: {\n                        requestType: \"SetCurrentDeploymentRequest\",\n                        responseType: \"SetCurrentDeploymentResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/current-deployment/{deployment.series_name}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/current-deployment/{deployment.series_name}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/current-deployment/{deployment.series_name}\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/current-deployment/{deployment.series_name}\",\n                                body: \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      SetWorkerDeploymentCurrentVersion: {\n                        requestType: \"SetWorkerDeploymentCurrentVersionRequest\",\n                        responseType: \"SetWorkerDeploymentCurrentVersionResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/worker-deployments/{deployment_name}/set-current-version\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}/set-current-version\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"deployment:{deployment_name}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/worker-deployments/{deployment_name}/set-current-version\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}/set-current-version\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"deployment:{deployment_name}\"\n                            }\n                          }\n                        ]\n                      },\n                      DescribeWorkerDeployment: {\n                        requestType: \"DescribeWorkerDeploymentRequest\",\n                        responseType: \"DescribeWorkerDeploymentResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"deployment:{deployment_name}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"deployment:{deployment_name}\"\n                            }\n                          }\n                        ]\n                      },\n                      DeleteWorkerDeployment: {\n                        requestType: \"DeleteWorkerDeploymentRequest\",\n                        responseType: \"DeleteWorkerDeploymentResponse\",\n                        options: {\n                          \"(google.api.http).delete\": \"/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                          \"(google.api.http).additional_bindings.delete\": \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"deployment:{deployment_name}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              \"delete\": \"/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                              additional_bindings: {\n                                \"delete\": \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"deployment:{deployment_name}\"\n                            }\n                          }\n                        ]\n                      },\n                      DeleteWorkerDeploymentVersion: {\n                        requestType: \"DeleteWorkerDeploymentVersionRequest\",\n                        responseType: \"DeleteWorkerDeploymentVersionResponse\",\n                        options: {\n                          \"(google.api.http).delete\": \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}\",\n                          \"(google.api.http).additional_bindings.delete\": \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"deployment:{deployment_version.deployment_name}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              \"delete\": \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}\",\n                              additional_bindings: {\n                                \"delete\": \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"deployment:{deployment_version.deployment_name}\"\n                            }\n                          }\n                        ]\n                      },\n                      SetWorkerDeploymentRampingVersion: {\n                        requestType: \"SetWorkerDeploymentRampingVersionRequest\",\n                        responseType: \"SetWorkerDeploymentRampingVersionResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/worker-deployments/{deployment_name}/set-ramping-version\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}/set-ramping-version\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"deployment:{deployment_name}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/worker-deployments/{deployment_name}/set-ramping-version\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}/set-ramping-version\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"deployment:{deployment_name}\"\n                            }\n                          }\n                        ]\n                      },\n                      ListWorkerDeployments: {\n                        requestType: \"ListWorkerDeploymentsRequest\",\n                        responseType: \"ListWorkerDeploymentsResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/worker-deployments\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/worker-deployments\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/worker-deployments\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/worker-deployments\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      CreateWorkerDeployment: {\n                        requestType: \"CreateWorkerDeploymentRequest\",\n                        responseType: \"CreateWorkerDeploymentResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}\",\n                                body: \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      CreateWorkerDeploymentVersion: {\n                        requestType: \"CreateWorkerDeploymentVersionRequest\",\n                        responseType: \"CreateWorkerDeploymentVersionResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}\",\n                                body: \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      UpdateWorkerDeploymentVersionComputeConfig: {\n                        requestType: \"UpdateWorkerDeploymentVersionComputeConfigRequest\",\n                        responseType: \"UpdateWorkerDeploymentVersionComputeConfigResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/update-compute-config\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/update-compute-config\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/update-compute-config\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/update-compute-config\",\n                                body: \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      ValidateWorkerDeploymentVersionComputeConfig: {\n                        requestType: \"ValidateWorkerDeploymentVersionComputeConfigRequest\",\n                        responseType: \"ValidateWorkerDeploymentVersionComputeConfigResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/validate-compute-config\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/validate-compute-config\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/validate-compute-config\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/validate-compute-config\",\n                                body: \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      UpdateWorkerDeploymentVersionMetadata: {\n                        requestType: \"UpdateWorkerDeploymentVersionMetadataRequest\",\n                        responseType: \"UpdateWorkerDeploymentVersionMetadataResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/update-metadata\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/update-metadata\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"deployment:{deployment_version.deployment_name}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/update-metadata\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/worker-deployment-versions/{deployment_version.deployment_name}/{deployment_version.build_id}/update-metadata\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"deployment:{deployment_version.deployment_name}\"\n                            }\n                          }\n                        ]\n                      },\n                      SetWorkerDeploymentManager: {\n                        requestType: \"SetWorkerDeploymentManagerRequest\",\n                        responseType: \"SetWorkerDeploymentManagerResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/worker-deployments/{deployment_name}/set-manager\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}/set-manager\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"deployment:{deployment_name}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/worker-deployments/{deployment_name}/set-manager\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/worker-deployments/{deployment_name}/set-manager\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"deployment:{deployment_name}\"\n                            }\n                          }\n                        ]\n                      },\n                      UpdateWorkflowExecution: {\n                        requestType: \"UpdateWorkflowExecutionRequest\",\n                        responseType: \"UpdateWorkflowExecutionResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/update/{request.input.name}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/update/{request.input.name}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_execution.workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/update/{request.input.name}\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/update/{request.input.name}\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{workflow_execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      PollWorkflowExecutionUpdate: {\n                        requestType: \"PollWorkflowExecutionUpdateRequest\",\n                        responseType: \"PollWorkflowExecutionUpdateResponse\",\n                        options: {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{update_ref.workflow_execution.workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{update_ref.workflow_execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      StartBatchOperation: {\n                        requestType: \"StartBatchOperationRequest\",\n                        responseType: \"StartBatchOperationResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/batch-operations/{job_id}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/batch-operations/{job_id}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"batch:{job_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/batch-operations/{job_id}\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/batch-operations/{job_id}\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"batch:{job_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      StopBatchOperation: {\n                        requestType: \"StopBatchOperationRequest\",\n                        responseType: \"StopBatchOperationResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/batch-operations/{job_id}/stop\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/batch-operations/{job_id}/stop\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"batch:{job_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/batch-operations/{job_id}/stop\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/batch-operations/{job_id}/stop\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"batch:{job_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      DescribeBatchOperation: {\n                        requestType: \"DescribeBatchOperationRequest\",\n                        responseType: \"DescribeBatchOperationResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/batch-operations/{job_id}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/batch-operations/{job_id}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"batch:{job_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/batch-operations/{job_id}\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/batch-operations/{job_id}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"batch:{job_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      ListBatchOperations: {\n                        requestType: \"ListBatchOperationsRequest\",\n                        responseType: \"ListBatchOperationsResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/batch-operations\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/batch-operations\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/batch-operations\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/batch-operations\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      PollNexusTaskQueue: {\n                        requestType: \"PollNexusTaskQueueRequest\",\n                        responseType: \"PollNexusTaskQueueResponse\",\n                        options: {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"poller:{poller_group_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"poller:{poller_group_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      RespondNexusTaskCompleted: {\n                        requestType: \"RespondNexusTaskCompletedRequest\",\n                        responseType: \"RespondNexusTaskCompletedResponse\",\n                        options: {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"poller:{poller_group_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"poller:{poller_group_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      RespondNexusTaskFailed: {\n                        requestType: \"RespondNexusTaskFailedRequest\",\n                        responseType: \"RespondNexusTaskFailedResponse\",\n                        options: {\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"poller:{poller_group_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"poller:{poller_group_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      UpdateActivityOptions: {\n                        requestType: \"UpdateActivityOptionsRequest\",\n                        responseType: \"UpdateActivityOptionsResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities-deprecated/update-options\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activities-deprecated/update-options\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{execution.workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/activities-deprecated/update-options\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/activities-deprecated/update-options\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      UpdateWorkflowExecutionOptions: {\n                        requestType: \"UpdateWorkflowExecutionOptionsRequest\",\n                        responseType: \"UpdateWorkflowExecutionOptionsResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/update-options\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/update-options\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_execution.workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/update-options\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/workflows/{workflow_execution.workflow_id}/update-options\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{workflow_execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      PauseActivity: {\n                        requestType: \"PauseActivityRequest\",\n                        responseType: \"PauseActivityResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities-deprecated/pause\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activities-deprecated/pause\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{execution.workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/activities-deprecated/pause\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/activities-deprecated/pause\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      UnpauseActivity: {\n                        requestType: \"UnpauseActivityRequest\",\n                        responseType: \"UnpauseActivityResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities-deprecated/unpause\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activities-deprecated/unpause\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{execution.workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/activities-deprecated/unpause\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/activities-deprecated/unpause\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      ResetActivity: {\n                        requestType: \"ResetActivityRequest\",\n                        responseType: \"ResetActivityResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities-deprecated/reset\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activities-deprecated/reset\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{execution.workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/activities-deprecated/reset\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/activities-deprecated/reset\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{execution.workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      CreateWorkflowRule: {\n                        requestType: \"CreateWorkflowRuleRequest\",\n                        responseType: \"CreateWorkflowRuleResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflow-rules\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflow-rules\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/workflow-rules\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/workflow-rules\",\n                                body: \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      DescribeWorkflowRule: {\n                        requestType: \"DescribeWorkflowRuleRequest\",\n                        responseType: \"DescribeWorkflowRuleResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/workflow-rules/{rule_id}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/workflow-rules/{rule_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/workflow-rules/{rule_id}\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/workflow-rules/{rule_id}\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      DeleteWorkflowRule: {\n                        requestType: \"DeleteWorkflowRuleRequest\",\n                        responseType: \"DeleteWorkflowRuleResponse\",\n                        options: {\n                          \"(google.api.http).delete\": \"/namespaces/{namespace}/workflow-rules/{rule_id}\",\n                          \"(google.api.http).additional_bindings.delete\": \"/api/v1/namespaces/{namespace}/workflow-rules/{rule_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              \"delete\": \"/namespaces/{namespace}/workflow-rules/{rule_id}\",\n                              additional_bindings: {\n                                \"delete\": \"/api/v1/namespaces/{namespace}/workflow-rules/{rule_id}\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      ListWorkflowRules: {\n                        requestType: \"ListWorkflowRulesRequest\",\n                        responseType: \"ListWorkflowRulesResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/workflow-rules\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/workflow-rules\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/workflow-rules\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/workflow-rules\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      TriggerWorkflowRule: {\n                        requestType: \"TriggerWorkflowRuleRequest\",\n                        responseType: \"TriggerWorkflowRuleResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{execution.workflow_id}/trigger-rule\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}/trigger-rule\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/workflows/{execution.workflow_id}/trigger-rule\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/workflows/{execution.workflow_id}/trigger-rule\",\n                                body: \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      RecordWorkerHeartbeat: {\n                        requestType: \"RecordWorkerHeartbeatRequest\",\n                        responseType: \"RecordWorkerHeartbeatResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workers/heartbeat\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workers/heartbeat\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/workers/heartbeat\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/workers/heartbeat\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      ListWorkers: {\n                        requestType: \"ListWorkersRequest\",\n                        responseType: \"ListWorkersResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/workers\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/workers\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/workers\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/workers\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      UpdateTaskQueueConfig: {\n                        requestType: \"UpdateTaskQueueConfigRequest\",\n                        responseType: \"UpdateTaskQueueConfigResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/task-queues/{task_queue}/update-config\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/task-queues/{task_queue}/update-config\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"taskqueue:{task_queue}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/task-queues/{task_queue}/update-config\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/task-queues/{task_queue}/update-config\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"taskqueue:{task_queue}\"\n                            }\n                          }\n                        ]\n                      },\n                      FetchWorkerConfig: {\n                        requestType: \"FetchWorkerConfigRequest\",\n                        responseType: \"FetchWorkerConfigResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workers/fetch-config\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workers/fetch-config\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/workers/fetch-config\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/workers/fetch-config\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      UpdateWorkerConfig: {\n                        requestType: \"UpdateWorkerConfigRequest\",\n                        responseType: \"UpdateWorkerConfigResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workers/update-config\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workers/update-config\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"{resource_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/workers/update-config\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/workers/update-config\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"{resource_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      DescribeWorker: {\n                        requestType: \"DescribeWorkerRequest\",\n                        responseType: \"DescribeWorkerResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/workers/describe/{worker_instance_key}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/workers/describe/{worker_instance_key}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"worker:{worker_instance_key}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/workers/describe/{worker_instance_key}\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/workers/describe/{worker_instance_key}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"worker:{worker_instance_key}\"\n                            }\n                          }\n                        ]\n                      },\n                      PauseWorkflowExecution: {\n                        requestType: \"PauseWorkflowExecutionRequest\",\n                        responseType: \"PauseWorkflowExecutionResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_id}/pause\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/pause\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/workflows/{workflow_id}/pause\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/pause\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      UnpauseWorkflowExecution: {\n                        requestType: \"UnpauseWorkflowExecutionRequest\",\n                        responseType: \"UnpauseWorkflowExecutionResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/workflows/{workflow_id}/unpause\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/unpause\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"workflow:{workflow_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/workflows/{workflow_id}/unpause\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/workflows/{workflow_id}/unpause\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"workflow:{workflow_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      StartActivityExecution: {\n                        requestType: \"StartActivityExecutionRequest\",\n                        responseType: \"StartActivityExecutionResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities/{activity_id}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"activity:{activity_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/activities/{activity_id}\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/activities/{activity_id}\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"activity:{activity_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      StartNexusOperationExecution: {\n                        requestType: \"StartNexusOperationExecutionRequest\",\n                        responseType: \"StartNexusOperationExecutionResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/nexus-operations/{operation_id}\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/nexus-operations/{operation_id}\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}\",\n                                body: \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      DescribeActivityExecution: {\n                        requestType: \"DescribeActivityExecutionRequest\",\n                        responseType: \"DescribeActivityExecutionResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/activities/{activity_id}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"activity:{activity_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/activities/{activity_id}\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/activities/{activity_id}\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"activity:{activity_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      DescribeNexusOperationExecution: {\n                        requestType: \"DescribeNexusOperationExecutionRequest\",\n                        responseType: \"DescribeNexusOperationExecutionResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/nexus-operations/{operation_id}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/nexus-operations/{operation_id}\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      PollActivityExecution: {\n                        requestType: \"PollActivityExecutionRequest\",\n                        responseType: \"PollActivityExecutionResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/activities/{activity_id}/outcome\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}/outcome\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"activity:{activity_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/activities/{activity_id}/outcome\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/activities/{activity_id}/outcome\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"activity:{activity_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      PollNexusOperationExecution: {\n                        requestType: \"PollNexusOperationExecutionRequest\",\n                        responseType: \"PollNexusOperationExecutionResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/nexus-operations/{operation_id}/poll\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}/poll\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/nexus-operations/{operation_id}/poll\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}/poll\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      ListActivityExecutions: {\n                        requestType: \"ListActivityExecutionsRequest\",\n                        responseType: \"ListActivityExecutionsResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/activities\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/activities\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/activities\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/activities\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      ListNexusOperationExecutions: {\n                        requestType: \"ListNexusOperationExecutionsRequest\",\n                        responseType: \"ListNexusOperationExecutionsResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/nexus-operations\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/nexus-operations\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/nexus-operations\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/nexus-operations\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      CountActivityExecutions: {\n                        requestType: \"CountActivityExecutionsRequest\",\n                        responseType: \"CountActivityExecutionsResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/activity-count\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/activity-count\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/activity-count\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/activity-count\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      CountNexusOperationExecutions: {\n                        requestType: \"CountNexusOperationExecutionsRequest\",\n                        responseType: \"CountNexusOperationExecutionsResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/namespaces/{namespace}/nexus-operation-count\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/nexus-operation-count\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/namespaces/{namespace}/nexus-operation-count\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/nexus-operation-count\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      RequestCancelActivityExecution: {\n                        requestType: \"RequestCancelActivityExecutionRequest\",\n                        responseType: \"RequestCancelActivityExecutionResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities/{activity_id}/cancel\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}/cancel\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"activity:{activity_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/activities/{activity_id}/cancel\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/activities/{activity_id}/cancel\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"activity:{activity_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      RequestCancelNexusOperationExecution: {\n                        requestType: \"RequestCancelNexusOperationExecutionRequest\",\n                        responseType: \"RequestCancelNexusOperationExecutionResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/nexus-operations/{operation_id}/cancel\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}/cancel\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/nexus-operations/{operation_id}/cancel\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}/cancel\",\n                                body: \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      TerminateActivityExecution: {\n                        requestType: \"TerminateActivityExecutionRequest\",\n                        responseType: \"TerminateActivityExecutionResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/activities/{activity_id}/terminate\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/activities/{activity_id}/terminate\",\n                          \"(google.api.http).additional_bindings.body\": \"*\",\n                          \"(temporal.api.protometa.v1.request_header).header\": \"temporal-resource-id\",\n                          \"(temporal.api.protometa.v1.request_header).value\": \"activity:{activity_id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/activities/{activity_id}/terminate\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/activities/{activity_id}/terminate\",\n                                body: \"*\"\n                              }\n                            }\n                          },\n                          {\n                            \"(temporal.api.protometa.v1.request_header)\": {\n                              header: \"temporal-resource-id\",\n                              value: \"activity:{activity_id}\"\n                            }\n                          }\n                        ]\n                      },\n                      DeleteActivityExecution: {\n                        requestType: \"DeleteActivityExecutionRequest\",\n                        responseType: \"DeleteActivityExecutionResponse\"\n                      },\n                      TerminateNexusOperationExecution: {\n                        requestType: \"TerminateNexusOperationExecutionRequest\",\n                        responseType: \"TerminateNexusOperationExecutionResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/namespaces/{namespace}/nexus-operations/{operation_id}/terminate\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}/terminate\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/namespaces/{namespace}/nexus-operations/{operation_id}/terminate\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/namespaces/{namespace}/nexus-operations/{operation_id}/terminate\",\n                                body: \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      DeleteNexusOperationExecution: {\n                        requestType: \"DeleteNexusOperationExecutionRequest\",\n                        responseType: \"DeleteNexusOperationExecutionResponse\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          activity: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/activity/v1;activity\",\n                  java_package: \"io.temporal.api.activity.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::Activity::V1\",\n                  csharp_namespace: \"Temporalio.Api.Activity.V1\"\n                },\n                nested: {\n                  ActivityExecutionOutcome: {\n                    oneofs: {\n                      value: {\n                        oneof: [\n                          \"result\",\n                          \"failure\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      result: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 1\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 2\n                      }\n                    }\n                  },\n                  ActivityOptions: {\n                    fields: {\n                      taskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 1\n                      },\n                      scheduleToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 2\n                      },\n                      scheduleToStartTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 3\n                      },\n                      startToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 4\n                      },\n                      heartbeatTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 5\n                      },\n                      retryPolicy: {\n                        type: \"temporal.api.common.v1.RetryPolicy\",\n                        id: 6\n                      },\n                      priority: {\n                        type: \"temporal.api.common.v1.Priority\",\n                        id: 7\n                      }\n                    }\n                  },\n                  ActivityExecutionInfo: {\n                    fields: {\n                      activityId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      activityType: {\n                        type: \"temporal.api.common.v1.ActivityType\",\n                        id: 3\n                      },\n                      status: {\n                        type: \"temporal.api.enums.v1.ActivityExecutionStatus\",\n                        id: 4\n                      },\n                      runState: {\n                        type: \"temporal.api.enums.v1.PendingActivityState\",\n                        id: 5\n                      },\n                      taskQueue: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      scheduleToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 7\n                      },\n                      scheduleToStartTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 8\n                      },\n                      startToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 9\n                      },\n                      heartbeatTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 10\n                      },\n                      retryPolicy: {\n                        type: \"temporal.api.common.v1.RetryPolicy\",\n                        id: 11\n                      },\n                      heartbeatDetails: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 12\n                      },\n                      lastHeartbeatTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 13\n                      },\n                      lastStartedTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 14\n                      },\n                      attempt: {\n                        type: \"int32\",\n                        id: 15\n                      },\n                      executionDuration: {\n                        type: \"google.protobuf.Duration\",\n                        id: 16\n                      },\n                      scheduleTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 17\n                      },\n                      expirationTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 18\n                      },\n                      closeTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 19\n                      },\n                      lastFailure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 20\n                      },\n                      lastWorkerIdentity: {\n                        type: \"string\",\n                        id: 21\n                      },\n                      currentRetryInterval: {\n                        type: \"google.protobuf.Duration\",\n                        id: 22\n                      },\n                      lastAttemptCompleteTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 23\n                      },\n                      nextAttemptScheduleTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 24\n                      },\n                      lastDeploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 25\n                      },\n                      priority: {\n                        type: \"temporal.api.common.v1.Priority\",\n                        id: 26\n                      },\n                      stateTransitionCount: {\n                        type: \"int64\",\n                        id: 27\n                      },\n                      stateSizeBytes: {\n                        type: \"int64\",\n                        id: 28\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 29\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 30\n                      },\n                      userMetadata: {\n                        type: \"temporal.api.sdk.v1.UserMetadata\",\n                        id: 31\n                      },\n                      canceledReason: {\n                        type: \"string\",\n                        id: 32\n                      },\n                      links: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.common.v1.Link\",\n                        id: 33\n                      },\n                      totalHeartbeatCount: {\n                        type: \"int64\",\n                        id: 34\n                      }\n                    }\n                  },\n                  ActivityExecutionListInfo: {\n                    fields: {\n                      activityId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      activityType: {\n                        type: \"temporal.api.common.v1.ActivityType\",\n                        id: 3\n                      },\n                      scheduleTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 4\n                      },\n                      closeTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 5\n                      },\n                      status: {\n                        type: \"temporal.api.enums.v1.ActivityExecutionStatus\",\n                        id: 6\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 7\n                      },\n                      taskQueue: {\n                        type: \"string\",\n                        id: 8\n                      },\n                      stateTransitionCount: {\n                        type: \"int64\",\n                        id: 9\n                      },\n                      stateSizeBytes: {\n                        type: \"int64\",\n                        id: 10\n                      },\n                      executionDuration: {\n                        type: \"google.protobuf.Duration\",\n                        id: 11\n                      }\n                    }\n                  },\n                  CallbackInfo: {\n                    fields: {\n                      trigger: {\n                        type: \"Trigger\",\n                        id: 1\n                      },\n                      info: {\n                        type: \"temporal.api.callback.v1.CallbackInfo\",\n                        id: 2\n                      }\n                    },\n                    nested: {\n                      ActivityClosed: {\n                        fields: {}\n                      },\n                      Trigger: {\n                        oneofs: {\n                          variant: {\n                            oneof: [\n                              \"activityClosed\"\n                            ]\n                          }\n                        },\n                        fields: {\n                          activityClosed: {\n                            type: \"ActivityClosed\",\n                            id: 1\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          deployment: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/deployment/v1;deployment\",\n                  java_package: \"io.temporal.api.deployment.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::Deployment::V1\",\n                  csharp_namespace: \"Temporalio.Api.Deployment.V1\"\n                },\n                nested: {\n                  WorkerDeploymentOptions: {\n                    fields: {\n                      deploymentName: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      buildId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      workerVersioningMode: {\n                        type: \"temporal.api.enums.v1.WorkerVersioningMode\",\n                        id: 3\n                      }\n                    }\n                  },\n                  Deployment: {\n                    fields: {\n                      seriesName: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      buildId: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  DeploymentInfo: {\n                    fields: {\n                      deployment: {\n                        type: \"Deployment\",\n                        id: 1\n                      },\n                      createTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 2\n                      },\n                      taskQueueInfos: {\n                        rule: \"repeated\",\n                        type: \"TaskQueueInfo\",\n                        id: 3\n                      },\n                      metadata: {\n                        keyType: \"string\",\n                        type: \"temporal.api.common.v1.Payload\",\n                        id: 4\n                      },\n                      isCurrent: {\n                        type: \"bool\",\n                        id: 5\n                      }\n                    },\n                    nested: {\n                      TaskQueueInfo: {\n                        fields: {\n                          name: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          type: {\n                            type: \"temporal.api.enums.v1.TaskQueueType\",\n                            id: 2\n                          },\n                          firstPollerTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 3\n                          }\n                        }\n                      }\n                    }\n                  },\n                  UpdateDeploymentMetadata: {\n                    fields: {\n                      upsertEntries: {\n                        keyType: \"string\",\n                        type: \"temporal.api.common.v1.Payload\",\n                        id: 1\n                      },\n                      removeEntries: {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  DeploymentListInfo: {\n                    fields: {\n                      deployment: {\n                        type: \"deployment.v1.Deployment\",\n                        id: 1\n                      },\n                      createTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 2\n                      },\n                      isCurrent: {\n                        type: \"bool\",\n                        id: 3\n                      }\n                    }\n                  },\n                  WorkerDeploymentVersionInfo: {\n                    fields: {\n                      version: {\n                        type: \"string\",\n                        id: 1,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      status: {\n                        type: \"temporal.api.enums.v1.WorkerDeploymentVersionStatus\",\n                        id: 14\n                      },\n                      deploymentVersion: {\n                        type: \"WorkerDeploymentVersion\",\n                        id: 11\n                      },\n                      deploymentName: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      createTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 3\n                      },\n                      routingChangedTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 4\n                      },\n                      currentSinceTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 5\n                      },\n                      rampingSinceTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 6\n                      },\n                      firstActivationTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 12\n                      },\n                      lastCurrentTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 15\n                      },\n                      lastDeactivationTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 13\n                      },\n                      rampPercentage: {\n                        type: \"float\",\n                        id: 7\n                      },\n                      taskQueueInfos: {\n                        rule: \"repeated\",\n                        type: \"VersionTaskQueueInfo\",\n                        id: 8\n                      },\n                      drainageInfo: {\n                        type: \"VersionDrainageInfo\",\n                        id: 9\n                      },\n                      metadata: {\n                        type: \"VersionMetadata\",\n                        id: 10\n                      },\n                      computeConfig: {\n                        type: \"temporal.api.compute.v1.ComputeConfig\",\n                        id: 16\n                      },\n                      lastModifierIdentity: {\n                        type: \"string\",\n                        id: 17\n                      }\n                    },\n                    nested: {\n                      VersionTaskQueueInfo: {\n                        fields: {\n                          name: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          type: {\n                            type: \"temporal.api.enums.v1.TaskQueueType\",\n                            id: 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  VersionDrainageInfo: {\n                    fields: {\n                      status: {\n                        type: \"enums.v1.VersionDrainageStatus\",\n                        id: 1\n                      },\n                      lastChangedTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 2\n                      },\n                      lastCheckedTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 3\n                      }\n                    }\n                  },\n                  WorkerDeploymentInfo: {\n                    fields: {\n                      name: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      versionSummaries: {\n                        rule: \"repeated\",\n                        type: \"WorkerDeploymentVersionSummary\",\n                        id: 2\n                      },\n                      createTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 3\n                      },\n                      routingConfig: {\n                        type: \"RoutingConfig\",\n                        id: 4\n                      },\n                      lastModifierIdentity: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      managerIdentity: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      routingConfigUpdateState: {\n                        type: \"temporal.api.enums.v1.RoutingConfigUpdateState\",\n                        id: 7\n                      }\n                    },\n                    nested: {\n                      WorkerDeploymentVersionSummary: {\n                        fields: {\n                          version: {\n                            type: \"string\",\n                            id: 1,\n                            options: {\n                              deprecated: true\n                            }\n                          },\n                          status: {\n                            type: \"temporal.api.enums.v1.WorkerDeploymentVersionStatus\",\n                            id: 11\n                          },\n                          deploymentVersion: {\n                            type: \"WorkerDeploymentVersion\",\n                            id: 4\n                          },\n                          createTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 2\n                          },\n                          drainageStatus: {\n                            type: \"enums.v1.VersionDrainageStatus\",\n                            id: 3\n                          },\n                          drainageInfo: {\n                            type: \"VersionDrainageInfo\",\n                            id: 5\n                          },\n                          currentSinceTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 6\n                          },\n                          rampingSinceTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 7\n                          },\n                          routingUpdateTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 8\n                          },\n                          firstActivationTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 9\n                          },\n                          lastCurrentTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 12\n                          },\n                          lastDeactivationTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 10\n                          },\n                          computeConfig: {\n                            type: \"temporal.api.compute.v1.ComputeConfigSummary\",\n                            id: 13\n                          }\n                        }\n                      }\n                    }\n                  },\n                  WorkerDeploymentVersion: {\n                    fields: {\n                      buildId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      deploymentName: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  VersionMetadata: {\n                    fields: {\n                      entries: {\n                        keyType: \"string\",\n                        type: \"temporal.api.common.v1.Payload\",\n                        id: 1\n                      }\n                    }\n                  },\n                  RoutingConfig: {\n                    fields: {\n                      currentDeploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 7\n                      },\n                      currentVersion: {\n                        type: \"string\",\n                        id: 1,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      rampingDeploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 9\n                      },\n                      rampingVersion: {\n                        type: \"string\",\n                        id: 2,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      rampingVersionPercentage: {\n                        type: \"float\",\n                        id: 3\n                      },\n                      currentVersionChangedTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 4\n                      },\n                      rampingVersionChangedTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 5\n                      },\n                      rampingVersionPercentageChangedTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 6\n                      },\n                      revisionNumber: {\n                        type: \"int64\",\n                        id: 10\n                      }\n                    }\n                  },\n                  InheritedAutoUpgradeInfo: {\n                    fields: {\n                      sourceDeploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 1\n                      },\n                      sourceDeploymentRevisionNumber: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      continueAsNewInitialVersioningBehavior: {\n                        type: \"temporal.api.enums.v1.ContinueAsNewVersioningBehavior\",\n                        id: 3\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          compute: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/compute/v1;compute\",\n                  java_package: \"io.temporal.api.compute.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"ScalerProto\",\n                  ruby_package: \"Temporalio::Api::Compute::V1\",\n                  csharp_namespace: \"Temporalio.Api.Compute.V1\"\n                },\n                nested: {\n                  ComputeConfigScalingGroup: {\n                    fields: {\n                      taskQueueTypes: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.enums.v1.TaskQueueType\",\n                        id: 1\n                      },\n                      provider: {\n                        type: \"temporal.api.compute.v1.ComputeProvider\",\n                        id: 3\n                      },\n                      scaler: {\n                        type: \"temporal.api.compute.v1.ComputeScaler\",\n                        id: 4\n                      }\n                    }\n                  },\n                  ComputeConfig: {\n                    fields: {\n                      scalingGroups: {\n                        keyType: \"string\",\n                        type: \"ComputeConfigScalingGroup\",\n                        id: 1\n                      }\n                    }\n                  },\n                  ComputeConfigScalingGroupUpdate: {\n                    fields: {\n                      scalingGroup: {\n                        type: \"ComputeConfigScalingGroup\",\n                        id: 1\n                      },\n                      updateMask: {\n                        type: \"google.protobuf.FieldMask\",\n                        id: 2\n                      }\n                    }\n                  },\n                  ComputeConfigSummary: {\n                    fields: {\n                      scalingGroups: {\n                        keyType: \"string\",\n                        type: \"ComputeConfigScalingGroupSummary\",\n                        id: 1\n                      }\n                    }\n                  },\n                  ComputeConfigScalingGroupSummary: {\n                    fields: {\n                      taskQueueTypes: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.enums.v1.TaskQueueType\",\n                        id: 1\n                      },\n                      providerType: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  ComputeProvider: {\n                    fields: {\n                      type: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      details: {\n                        type: \"temporal.api.common.v1.Payload\",\n                        id: 2\n                      },\n                      nexusEndpoint: {\n                        type: \"string\",\n                        id: 10\n                      }\n                    }\n                  },\n                  ComputeScaler: {\n                    fields: {\n                      type: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      details: {\n                        type: \"temporal.api.common.v1.Payload\",\n                        id: 2\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          callback: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/callback/v1;callback\",\n                  java_package: \"io.temporal.api.callback.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::Callback::V1\",\n                  csharp_namespace: \"Temporalio.Api.Callback.V1\"\n                },\n                nested: {\n                  CallbackInfo: {\n                    fields: {\n                      callback: {\n                        type: \"temporal.api.common.v1.Callback\",\n                        id: 1\n                      },\n                      registrationTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 2\n                      },\n                      state: {\n                        type: \"temporal.api.enums.v1.CallbackState\",\n                        id: 3\n                      },\n                      attempt: {\n                        type: \"int32\",\n                        id: 4\n                      },\n                      lastAttemptCompleteTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 5\n                      },\n                      lastAttemptFailure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 6\n                      },\n                      nextAttemptScheduleTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 7\n                      },\n                      blockedReason: {\n                        type: \"string\",\n                        id: 8\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          taskqueue: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/taskqueue/v1;taskqueue\",\n                  java_package: \"io.temporal.api.taskqueue.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::TaskQueue::V1\",\n                  csharp_namespace: \"Temporalio.Api.TaskQueue.V1\"\n                },\n                nested: {\n                  TaskQueue: {\n                    fields: {\n                      name: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      kind: {\n                        type: \"temporal.api.enums.v1.TaskQueueKind\",\n                        id: 2\n                      },\n                      normalName: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  TaskQueueMetadata: {\n                    fields: {\n                      maxTasksPerSecond: {\n                        type: \"google.protobuf.DoubleValue\",\n                        id: 1\n                      }\n                    }\n                  },\n                  TaskQueueVersioningInfo: {\n                    fields: {\n                      currentDeploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 7\n                      },\n                      currentVersion: {\n                        type: \"string\",\n                        id: 1,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      rampingDeploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 9\n                      },\n                      rampingVersion: {\n                        type: \"string\",\n                        id: 2,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      rampingVersionPercentage: {\n                        type: \"float\",\n                        id: 3\n                      },\n                      updateTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 4\n                      }\n                    }\n                  },\n                  TaskQueueVersionSelection: {\n                    fields: {\n                      buildIds: {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 1\n                      },\n                      unversioned: {\n                        type: \"bool\",\n                        id: 2\n                      },\n                      allActive: {\n                        type: \"bool\",\n                        id: 3\n                      }\n                    }\n                  },\n                  TaskQueueVersionInfo: {\n                    fields: {\n                      typesInfo: {\n                        keyType: \"int32\",\n                        type: \"TaskQueueTypeInfo\",\n                        id: 1\n                      },\n                      taskReachability: {\n                        type: \"temporal.api.enums.v1.BuildIdTaskReachability\",\n                        id: 2\n                      }\n                    }\n                  },\n                  TaskQueueTypeInfo: {\n                    fields: {\n                      pollers: {\n                        rule: \"repeated\",\n                        type: \"PollerInfo\",\n                        id: 1\n                      },\n                      stats: {\n                        type: \"TaskQueueStats\",\n                        id: 2\n                      }\n                    }\n                  },\n                  TaskQueueStats: {\n                    fields: {\n                      approximateBacklogCount: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      approximateBacklogAge: {\n                        type: \"google.protobuf.Duration\",\n                        id: 2\n                      },\n                      tasksAddRate: {\n                        type: \"float\",\n                        id: 3\n                      },\n                      tasksDispatchRate: {\n                        type: \"float\",\n                        id: 4\n                      }\n                    }\n                  },\n                  TaskQueueStatus: {\n                    fields: {\n                      backlogCountHint: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      readLevel: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      ackLevel: {\n                        type: \"int64\",\n                        id: 3\n                      },\n                      ratePerSecond: {\n                        type: \"double\",\n                        id: 4\n                      },\n                      taskIdBlock: {\n                        type: \"TaskIdBlock\",\n                        id: 5\n                      }\n                    }\n                  },\n                  TaskIdBlock: {\n                    fields: {\n                      startId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      endId: {\n                        type: \"int64\",\n                        id: 2\n                      }\n                    }\n                  },\n                  TaskQueuePartitionMetadata: {\n                    fields: {\n                      key: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      ownerHostName: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  PollerInfo: {\n                    fields: {\n                      lastAccessTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 1\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      ratePerSecond: {\n                        type: \"double\",\n                        id: 3\n                      },\n                      workerVersionCapabilities: {\n                        type: \"temporal.api.common.v1.WorkerVersionCapabilities\",\n                        id: 4,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      deploymentOptions: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentOptions\",\n                        id: 5\n                      }\n                    }\n                  },\n                  StickyExecutionAttributes: {\n                    fields: {\n                      workerTaskQueue: {\n                        type: \"TaskQueue\",\n                        id: 1\n                      },\n                      scheduleToStartTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 2\n                      }\n                    }\n                  },\n                  CompatibleVersionSet: {\n                    fields: {\n                      buildIds: {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  TaskQueueReachability: {\n                    fields: {\n                      taskQueue: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      reachability: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.enums.v1.TaskReachability\",\n                        id: 2\n                      }\n                    }\n                  },\n                  BuildIdReachability: {\n                    fields: {\n                      buildId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      taskQueueReachability: {\n                        rule: \"repeated\",\n                        type: \"TaskQueueReachability\",\n                        id: 2\n                      }\n                    }\n                  },\n                  RampByPercentage: {\n                    fields: {\n                      rampPercentage: {\n                        type: \"float\",\n                        id: 1\n                      }\n                    }\n                  },\n                  BuildIdAssignmentRule: {\n                    oneofs: {\n                      ramp: {\n                        oneof: [\n                          \"percentageRamp\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      targetBuildId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      percentageRamp: {\n                        type: \"RampByPercentage\",\n                        id: 3\n                      }\n                    }\n                  },\n                  CompatibleBuildIdRedirectRule: {\n                    fields: {\n                      sourceBuildId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      targetBuildId: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  TimestampedBuildIdAssignmentRule: {\n                    fields: {\n                      rule: {\n                        type: \"BuildIdAssignmentRule\",\n                        id: 1\n                      },\n                      createTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 2\n                      }\n                    }\n                  },\n                  TimestampedCompatibleBuildIdRedirectRule: {\n                    fields: {\n                      rule: {\n                        type: \"CompatibleBuildIdRedirectRule\",\n                        id: 1\n                      },\n                      createTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 2\n                      }\n                    }\n                  },\n                  PollerGroupInfo: {\n                    fields: {\n                      id: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      weight: {\n                        type: \"float\",\n                        id: 2\n                      }\n                    }\n                  },\n                  PollerScalingDecision: {\n                    fields: {\n                      pollRequestDeltaSuggestion: {\n                        type: \"int32\",\n                        id: 1\n                      }\n                    }\n                  },\n                  RateLimit: {\n                    fields: {\n                      requestsPerSecond: {\n                        type: \"float\",\n                        id: 1\n                      }\n                    }\n                  },\n                  ConfigMetadata: {\n                    fields: {\n                      reason: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      updateIdentity: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      updateTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 3\n                      }\n                    }\n                  },\n                  RateLimitConfig: {\n                    fields: {\n                      rateLimit: {\n                        type: \"RateLimit\",\n                        id: 1\n                      },\n                      metadata: {\n                        type: \"ConfigMetadata\",\n                        id: 2\n                      }\n                    }\n                  },\n                  TaskQueueConfig: {\n                    fields: {\n                      queueRateLimit: {\n                        type: \"RateLimitConfig\",\n                        id: 1\n                      },\n                      fairnessKeysRateLimitDefault: {\n                        type: \"RateLimitConfig\",\n                        id: 2\n                      },\n                      fairnessWeightOverrides: {\n                        keyType: \"string\",\n                        type: \"float\",\n                        id: 3\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          history: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/history/v1;history\",\n                  java_package: \"io.temporal.api.history.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::History::V1\",\n                  csharp_namespace: \"Temporalio.Api.History.V1\"\n                },\n                nested: {\n                  WorkflowExecutionStartedEventAttributes: {\n                    fields: {\n                      workflowType: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 1\n                      },\n                      parentWorkflowNamespace: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      parentWorkflowNamespaceId: {\n                        type: \"string\",\n                        id: 27\n                      },\n                      parentWorkflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 3\n                      },\n                      parentInitiatedEventId: {\n                        type: \"int64\",\n                        id: 4\n                      },\n                      taskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 5\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 6\n                      },\n                      workflowExecutionTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 7\n                      },\n                      workflowRunTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 8\n                      },\n                      workflowTaskTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 9\n                      },\n                      continuedExecutionRunId: {\n                        type: \"string\",\n                        id: 10\n                      },\n                      initiator: {\n                        type: \"temporal.api.enums.v1.ContinueAsNewInitiator\",\n                        id: 11\n                      },\n                      continuedFailure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 12\n                      },\n                      lastCompletionResult: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 13\n                      },\n                      originalExecutionRunId: {\n                        type: \"string\",\n                        id: 14\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 15\n                      },\n                      firstExecutionRunId: {\n                        type: \"string\",\n                        id: 16\n                      },\n                      retryPolicy: {\n                        type: \"temporal.api.common.v1.RetryPolicy\",\n                        id: 17\n                      },\n                      attempt: {\n                        type: \"int32\",\n                        id: 18\n                      },\n                      workflowExecutionExpirationTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 19\n                      },\n                      cronSchedule: {\n                        type: \"string\",\n                        id: 20\n                      },\n                      firstWorkflowTaskBackoff: {\n                        type: \"google.protobuf.Duration\",\n                        id: 21\n                      },\n                      memo: {\n                        type: \"temporal.api.common.v1.Memo\",\n                        id: 22\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 23\n                      },\n                      prevAutoResetPoints: {\n                        type: \"temporal.api.workflow.v1.ResetPoints\",\n                        id: 24\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 25\n                      },\n                      parentInitiatedEventVersion: {\n                        type: \"int64\",\n                        id: 26\n                      },\n                      workflowId: {\n                        type: \"string\",\n                        id: 28\n                      },\n                      sourceVersionStamp: {\n                        type: \"temporal.api.common.v1.WorkerVersionStamp\",\n                        id: 29,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      completionCallbacks: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.common.v1.Callback\",\n                        id: 30\n                      },\n                      rootWorkflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 31\n                      },\n                      inheritedBuildId: {\n                        type: \"string\",\n                        id: 32,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      versioningOverride: {\n                        type: \"temporal.api.workflow.v1.VersioningOverride\",\n                        id: 33\n                      },\n                      parentPinnedWorkerDeploymentVersion: {\n                        type: \"string\",\n                        id: 34,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      priority: {\n                        type: \"temporal.api.common.v1.Priority\",\n                        id: 35\n                      },\n                      inheritedPinnedVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 37\n                      },\n                      inheritedAutoUpgradeInfo: {\n                        type: \"temporal.api.deployment.v1.InheritedAutoUpgradeInfo\",\n                        id: 39\n                      },\n                      eagerExecutionAccepted: {\n                        type: \"bool\",\n                        id: 38\n                      },\n                      declinedTargetVersionUpgrade: {\n                        type: \"DeclinedTargetVersionUpgrade\",\n                        id: 40\n                      },\n                      timeSkippingConfig: {\n                        type: \"temporal.api.workflow.v1.TimeSkippingConfig\",\n                        id: 41\n                      },\n                      initialSkippedDuration: {\n                        type: \"google.protobuf.Duration\",\n                        id: 42\n                      }\n                    },\n                    reserved: [\n                      [\n                        36,\n                        36\n                      ],\n                      \"parent_pinned_deployment_version\"\n                    ]\n                  },\n                  DeclinedTargetVersionUpgrade: {\n                    fields: {\n                      deploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 1\n                      },\n                      revisionNumber: {\n                        type: \"int64\",\n                        id: 2\n                      }\n                    }\n                  },\n                  WorkflowExecutionCompletedEventAttributes: {\n                    fields: {\n                      result: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 1\n                      },\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      newExecutionRunId: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  WorkflowExecutionFailedEventAttributes: {\n                    fields: {\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 1\n                      },\n                      retryState: {\n                        type: \"temporal.api.enums.v1.RetryState\",\n                        id: 2\n                      },\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 3\n                      },\n                      newExecutionRunId: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  WorkflowExecutionTimedOutEventAttributes: {\n                    fields: {\n                      retryState: {\n                        type: \"temporal.api.enums.v1.RetryState\",\n                        id: 1\n                      },\n                      newExecutionRunId: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  WorkflowExecutionContinuedAsNewEventAttributes: {\n                    fields: {\n                      newExecutionRunId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workflowType: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 2\n                      },\n                      taskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 3\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 4\n                      },\n                      workflowRunTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 5\n                      },\n                      workflowTaskTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 6\n                      },\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 7\n                      },\n                      backoffStartInterval: {\n                        type: \"google.protobuf.Duration\",\n                        id: 8\n                      },\n                      initiator: {\n                        type: \"temporal.api.enums.v1.ContinueAsNewInitiator\",\n                        id: 9\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 10,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      lastCompletionResult: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 11\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 12\n                      },\n                      memo: {\n                        type: \"temporal.api.common.v1.Memo\",\n                        id: 13\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 14\n                      },\n                      inheritBuildId: {\n                        type: \"bool\",\n                        id: 15,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      initialVersioningBehavior: {\n                        type: \"temporal.api.enums.v1.ContinueAsNewVersioningBehavior\",\n                        id: 16\n                      }\n                    }\n                  },\n                  WorkflowTaskScheduledEventAttributes: {\n                    fields: {\n                      taskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 1\n                      },\n                      startToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 2\n                      },\n                      attempt: {\n                        type: \"int32\",\n                        id: 3\n                      }\n                    }\n                  },\n                  WorkflowTaskStartedEventAttributes: {\n                    fields: {\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      suggestContinueAsNew: {\n                        type: \"bool\",\n                        id: 4\n                      },\n                      suggestContinueAsNewReasons: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.enums.v1.SuggestContinueAsNewReason\",\n                        id: 8\n                      },\n                      targetWorkerDeploymentVersionChanged: {\n                        type: \"bool\",\n                        id: 9\n                      },\n                      historySizeBytes: {\n                        type: \"int64\",\n                        id: 5\n                      },\n                      workerVersion: {\n                        type: \"temporal.api.common.v1.WorkerVersionStamp\",\n                        id: 6,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      buildIdRedirectCounter: {\n                        type: \"int64\",\n                        id: 7,\n                        options: {\n                          deprecated: true\n                        }\n                      }\n                    }\n                  },\n                  WorkflowTaskCompletedEventAttributes: {\n                    fields: {\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      startedEventId: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      binaryChecksum: {\n                        type: \"string\",\n                        id: 4,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      workerVersion: {\n                        type: \"temporal.api.common.v1.WorkerVersionStamp\",\n                        id: 5,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      sdkMetadata: {\n                        type: \"temporal.api.sdk.v1.WorkflowTaskCompletedMetadata\",\n                        id: 6\n                      },\n                      meteringMetadata: {\n                        type: \"temporal.api.common.v1.MeteringMetadata\",\n                        id: 13\n                      },\n                      deployment: {\n                        type: \"temporal.api.deployment.v1.Deployment\",\n                        id: 7,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      versioningBehavior: {\n                        type: \"temporal.api.enums.v1.VersioningBehavior\",\n                        id: 8\n                      },\n                      workerDeploymentVersion: {\n                        type: \"string\",\n                        id: 9,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      workerDeploymentName: {\n                        type: \"string\",\n                        id: 10\n                      },\n                      deploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 11\n                      }\n                    }\n                  },\n                  WorkflowTaskTimedOutEventAttributes: {\n                    fields: {\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      startedEventId: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      timeoutType: {\n                        type: \"temporal.api.enums.v1.TimeoutType\",\n                        id: 3\n                      }\n                    }\n                  },\n                  WorkflowTaskFailedEventAttributes: {\n                    fields: {\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      startedEventId: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      cause: {\n                        type: \"temporal.api.enums.v1.WorkflowTaskFailedCause\",\n                        id: 3\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 4\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      baseRunId: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      newRunId: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      forkEventVersion: {\n                        type: \"int64\",\n                        id: 8\n                      },\n                      binaryChecksum: {\n                        type: \"string\",\n                        id: 9,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      workerVersion: {\n                        type: \"temporal.api.common.v1.WorkerVersionStamp\",\n                        id: 10,\n                        options: {\n                          deprecated: true\n                        }\n                      }\n                    }\n                  },\n                  ActivityTaskScheduledEventAttributes: {\n                    fields: {\n                      activityId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      activityType: {\n                        type: \"temporal.api.common.v1.ActivityType\",\n                        id: 2\n                      },\n                      taskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 4\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 5\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 6\n                      },\n                      scheduleToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 7\n                      },\n                      scheduleToStartTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 8\n                      },\n                      startToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 9\n                      },\n                      heartbeatTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 10\n                      },\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 11\n                      },\n                      retryPolicy: {\n                        type: \"temporal.api.common.v1.RetryPolicy\",\n                        id: 12\n                      },\n                      useWorkflowBuildId: {\n                        type: \"bool\",\n                        id: 13,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      priority: {\n                        type: \"temporal.api.common.v1.Priority\",\n                        id: 14\n                      }\n                    },\n                    reserved: [\n                      [\n                        3,\n                        3\n                      ]\n                    ]\n                  },\n                  ActivityTaskStartedEventAttributes: {\n                    fields: {\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      attempt: {\n                        type: \"int32\",\n                        id: 4\n                      },\n                      lastFailure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 5\n                      },\n                      workerVersion: {\n                        type: \"temporal.api.common.v1.WorkerVersionStamp\",\n                        id: 6,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      buildIdRedirectCounter: {\n                        type: \"int64\",\n                        id: 7,\n                        options: {\n                          deprecated: true\n                        }\n                      }\n                    }\n                  },\n                  ActivityTaskCompletedEventAttributes: {\n                    fields: {\n                      result: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 1\n                      },\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      startedEventId: {\n                        type: \"int64\",\n                        id: 3\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      workerVersion: {\n                        type: \"temporal.api.common.v1.WorkerVersionStamp\",\n                        id: 5,\n                        options: {\n                          deprecated: true\n                        }\n                      }\n                    }\n                  },\n                  ActivityTaskFailedEventAttributes: {\n                    fields: {\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 1\n                      },\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      startedEventId: {\n                        type: \"int64\",\n                        id: 3\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      retryState: {\n                        type: \"temporal.api.enums.v1.RetryState\",\n                        id: 5\n                      },\n                      workerVersion: {\n                        type: \"temporal.api.common.v1.WorkerVersionStamp\",\n                        id: 6,\n                        options: {\n                          deprecated: true\n                        }\n                      }\n                    }\n                  },\n                  ActivityTaskTimedOutEventAttributes: {\n                    fields: {\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 1\n                      },\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      startedEventId: {\n                        type: \"int64\",\n                        id: 3\n                      },\n                      retryState: {\n                        type: \"temporal.api.enums.v1.RetryState\",\n                        id: 4\n                      }\n                    }\n                  },\n                  ActivityTaskCancelRequestedEventAttributes: {\n                    fields: {\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 2\n                      }\n                    }\n                  },\n                  ActivityTaskCanceledEventAttributes: {\n                    fields: {\n                      details: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 1\n                      },\n                      latestCancelRequestedEventId: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 3\n                      },\n                      startedEventId: {\n                        type: \"int64\",\n                        id: 4\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      workerVersion: {\n                        type: \"temporal.api.common.v1.WorkerVersionStamp\",\n                        id: 6,\n                        options: {\n                          deprecated: true\n                        }\n                      }\n                    }\n                  },\n                  TimerStartedEventAttributes: {\n                    fields: {\n                      timerId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      startToFireTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 2\n                      },\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 3\n                      }\n                    }\n                  },\n                  TimerFiredEventAttributes: {\n                    fields: {\n                      timerId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      startedEventId: {\n                        type: \"int64\",\n                        id: 2\n                      }\n                    }\n                  },\n                  TimerCanceledEventAttributes: {\n                    fields: {\n                      timerId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      startedEventId: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 3\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  WorkflowExecutionCancelRequestedEventAttributes: {\n                    fields: {\n                      cause: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      externalInitiatedEventId: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      externalWorkflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 3\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  WorkflowExecutionCanceledEventAttributes: {\n                    fields: {\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      details: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 2\n                      }\n                    }\n                  },\n                  MarkerRecordedEventAttributes: {\n                    fields: {\n                      markerName: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      details: {\n                        keyType: \"string\",\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 2\n                      },\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 3\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 4\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 5\n                      }\n                    }\n                  },\n                  WorkflowExecutionSignaledEventAttributes: {\n                    fields: {\n                      signalName: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 4\n                      },\n                      skipGenerateWorkflowTask: {\n                        type: \"bool\",\n                        id: 5,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      externalWorkflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 6\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 7\n                      }\n                    }\n                  },\n                  WorkflowExecutionTerminatedEventAttributes: {\n                    fields: {\n                      reason: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      details: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 2\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  RequestCancelExternalWorkflowExecutionInitiatedEventAttributes: {\n                    fields: {\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      namespace: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      namespaceId: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 3\n                      },\n                      control: {\n                        type: \"string\",\n                        id: 4,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      childWorkflowOnly: {\n                        type: \"bool\",\n                        id: 5\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 6\n                      }\n                    }\n                  },\n                  RequestCancelExternalWorkflowExecutionFailedEventAttributes: {\n                    fields: {\n                      cause: {\n                        type: \"temporal.api.enums.v1.CancelExternalWorkflowExecutionFailedCause\",\n                        id: 1\n                      },\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      namespace: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      namespaceId: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 4\n                      },\n                      initiatedEventId: {\n                        type: \"int64\",\n                        id: 5\n                      },\n                      control: {\n                        type: \"string\",\n                        id: 6,\n                        options: {\n                          deprecated: true\n                        }\n                      }\n                    }\n                  },\n                  ExternalWorkflowExecutionCancelRequestedEventAttributes: {\n                    fields: {\n                      initiatedEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      namespace: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      namespaceId: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 3\n                      }\n                    }\n                  },\n                  SignalExternalWorkflowExecutionInitiatedEventAttributes: {\n                    fields: {\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      namespace: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      namespaceId: {\n                        type: \"string\",\n                        id: 9\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 3\n                      },\n                      signalName: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 5\n                      },\n                      control: {\n                        type: \"string\",\n                        id: 6,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      childWorkflowOnly: {\n                        type: \"bool\",\n                        id: 7\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 8\n                      }\n                    }\n                  },\n                  SignalExternalWorkflowExecutionFailedEventAttributes: {\n                    fields: {\n                      cause: {\n                        type: \"temporal.api.enums.v1.SignalExternalWorkflowExecutionFailedCause\",\n                        id: 1\n                      },\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      namespace: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      namespaceId: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 4\n                      },\n                      initiatedEventId: {\n                        type: \"int64\",\n                        id: 5\n                      },\n                      control: {\n                        type: \"string\",\n                        id: 6,\n                        options: {\n                          deprecated: true\n                        }\n                      }\n                    }\n                  },\n                  ExternalWorkflowExecutionSignaledEventAttributes: {\n                    fields: {\n                      initiatedEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      namespace: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      namespaceId: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 3\n                      },\n                      control: {\n                        type: \"string\",\n                        id: 4,\n                        options: {\n                          deprecated: true\n                        }\n                      }\n                    }\n                  },\n                  UpsertWorkflowSearchAttributesEventAttributes: {\n                    fields: {\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 2\n                      }\n                    }\n                  },\n                  WorkflowPropertiesModifiedEventAttributes: {\n                    fields: {\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      upsertedMemo: {\n                        type: \"temporal.api.common.v1.Memo\",\n                        id: 2\n                      }\n                    }\n                  },\n                  StartChildWorkflowExecutionInitiatedEventAttributes: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      namespaceId: {\n                        type: \"string\",\n                        id: 18\n                      },\n                      workflowId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      workflowType: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 3\n                      },\n                      taskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 4\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 5\n                      },\n                      workflowExecutionTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 6\n                      },\n                      workflowRunTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 7\n                      },\n                      workflowTaskTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 8\n                      },\n                      parentClosePolicy: {\n                        type: \"temporal.api.enums.v1.ParentClosePolicy\",\n                        id: 9\n                      },\n                      control: {\n                        type: \"string\",\n                        id: 10,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 11\n                      },\n                      workflowIdReusePolicy: {\n                        type: \"temporal.api.enums.v1.WorkflowIdReusePolicy\",\n                        id: 12\n                      },\n                      retryPolicy: {\n                        type: \"temporal.api.common.v1.RetryPolicy\",\n                        id: 13\n                      },\n                      cronSchedule: {\n                        type: \"string\",\n                        id: 14\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 15\n                      },\n                      memo: {\n                        type: \"temporal.api.common.v1.Memo\",\n                        id: 16\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 17\n                      },\n                      inheritBuildId: {\n                        type: \"bool\",\n                        id: 19,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      priority: {\n                        type: \"temporal.api.common.v1.Priority\",\n                        id: 20\n                      },\n                      timeSkippingConfig: {\n                        type: \"temporal.api.workflow.v1.TimeSkippingConfig\",\n                        id: 21\n                      },\n                      initialSkippedDuration: {\n                        type: \"google.protobuf.Duration\",\n                        id: 30\n                      }\n                    }\n                  },\n                  StartChildWorkflowExecutionFailedEventAttributes: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      namespaceId: {\n                        type: \"string\",\n                        id: 8\n                      },\n                      workflowId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      workflowType: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 3\n                      },\n                      cause: {\n                        type: \"temporal.api.enums.v1.StartChildWorkflowExecutionFailedCause\",\n                        id: 4\n                      },\n                      control: {\n                        type: \"string\",\n                        id: 5,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      initiatedEventId: {\n                        type: \"int64\",\n                        id: 6\n                      },\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 7\n                      }\n                    }\n                  },\n                  ChildWorkflowExecutionStartedEventAttributes: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      namespaceId: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      initiatedEventId: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 3\n                      },\n                      workflowType: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 4\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 5\n                      }\n                    }\n                  },\n                  ChildWorkflowExecutionCompletedEventAttributes: {\n                    fields: {\n                      result: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 1\n                      },\n                      namespace: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      namespaceId: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 3\n                      },\n                      workflowType: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 4\n                      },\n                      initiatedEventId: {\n                        type: \"int64\",\n                        id: 5\n                      },\n                      startedEventId: {\n                        type: \"int64\",\n                        id: 6\n                      }\n                    }\n                  },\n                  ChildWorkflowExecutionFailedEventAttributes: {\n                    fields: {\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 1\n                      },\n                      namespace: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      namespaceId: {\n                        type: \"string\",\n                        id: 8\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 3\n                      },\n                      workflowType: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 4\n                      },\n                      initiatedEventId: {\n                        type: \"int64\",\n                        id: 5\n                      },\n                      startedEventId: {\n                        type: \"int64\",\n                        id: 6\n                      },\n                      retryState: {\n                        type: \"temporal.api.enums.v1.RetryState\",\n                        id: 7\n                      }\n                    }\n                  },\n                  ChildWorkflowExecutionCanceledEventAttributes: {\n                    fields: {\n                      details: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 1\n                      },\n                      namespace: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      namespaceId: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 3\n                      },\n                      workflowType: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 4\n                      },\n                      initiatedEventId: {\n                        type: \"int64\",\n                        id: 5\n                      },\n                      startedEventId: {\n                        type: \"int64\",\n                        id: 6\n                      }\n                    }\n                  },\n                  ChildWorkflowExecutionTimedOutEventAttributes: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      namespaceId: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      },\n                      workflowType: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 3\n                      },\n                      initiatedEventId: {\n                        type: \"int64\",\n                        id: 4\n                      },\n                      startedEventId: {\n                        type: \"int64\",\n                        id: 5\n                      },\n                      retryState: {\n                        type: \"temporal.api.enums.v1.RetryState\",\n                        id: 6\n                      }\n                    }\n                  },\n                  ChildWorkflowExecutionTerminatedEventAttributes: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      namespaceId: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      },\n                      workflowType: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 3\n                      },\n                      initiatedEventId: {\n                        type: \"int64\",\n                        id: 4\n                      },\n                      startedEventId: {\n                        type: \"int64\",\n                        id: 5\n                      }\n                    }\n                  },\n                  WorkflowExecutionOptionsUpdatedEventAttributes: {\n                    fields: {\n                      versioningOverride: {\n                        type: \"temporal.api.workflow.v1.VersioningOverride\",\n                        id: 1\n                      },\n                      unsetVersioningOverride: {\n                        type: \"bool\",\n                        id: 2\n                      },\n                      attachedRequestId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      attachedCompletionCallbacks: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.common.v1.Callback\",\n                        id: 4\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      priority: {\n                        type: \"temporal.api.common.v1.Priority\",\n                        id: 6\n                      },\n                      timeSkippingConfig: {\n                        type: \"temporal.api.workflow.v1.TimeSkippingConfig\",\n                        id: 7\n                      }\n                    }\n                  },\n                  WorkflowPropertiesModifiedExternallyEventAttributes: {\n                    fields: {\n                      newTaskQueue: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      newWorkflowTaskTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 2\n                      },\n                      newWorkflowRunTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 3\n                      },\n                      newWorkflowExecutionTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 4\n                      },\n                      upsertedMemo: {\n                        type: \"temporal.api.common.v1.Memo\",\n                        id: 5\n                      }\n                    }\n                  },\n                  ActivityPropertiesModifiedExternallyEventAttributes: {\n                    fields: {\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      newRetryPolicy: {\n                        type: \"temporal.api.common.v1.RetryPolicy\",\n                        id: 2\n                      }\n                    }\n                  },\n                  WorkflowExecutionUpdateAcceptedEventAttributes: {\n                    fields: {\n                      protocolInstanceId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      acceptedRequestMessageId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      acceptedRequestSequencingEventId: {\n                        type: \"int64\",\n                        id: 3\n                      },\n                      acceptedRequest: {\n                        type: \"temporal.api.update.v1.Request\",\n                        id: 4\n                      }\n                    }\n                  },\n                  WorkflowExecutionUpdateCompletedEventAttributes: {\n                    fields: {\n                      meta: {\n                        type: \"temporal.api.update.v1.Meta\",\n                        id: 1\n                      },\n                      acceptedEventId: {\n                        type: \"int64\",\n                        id: 3\n                      },\n                      outcome: {\n                        type: \"temporal.api.update.v1.Outcome\",\n                        id: 2\n                      }\n                    }\n                  },\n                  WorkflowExecutionUpdateRejectedEventAttributes: {\n                    fields: {\n                      protocolInstanceId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      rejectedRequestMessageId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      rejectedRequestSequencingEventId: {\n                        type: \"int64\",\n                        id: 3\n                      },\n                      rejectedRequest: {\n                        type: \"temporal.api.update.v1.Request\",\n                        id: 4\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 5\n                      }\n                    }\n                  },\n                  WorkflowExecutionUpdateAdmittedEventAttributes: {\n                    fields: {\n                      request: {\n                        type: \"temporal.api.update.v1.Request\",\n                        id: 1\n                      },\n                      origin: {\n                        type: \"temporal.api.enums.v1.UpdateAdmittedEventOrigin\",\n                        id: 2\n                      }\n                    }\n                  },\n                  WorkflowExecutionPausedEventAttributes: {\n                    fields: {\n                      identity: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  WorkflowExecutionUnpausedEventAttributes: {\n                    fields: {\n                      identity: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  WorkflowExecutionTimeSkippingTransitionedEventAttributes: {\n                    fields: {\n                      targetTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 1\n                      },\n                      disabledAfterBound: {\n                        type: \"bool\",\n                        id: 2\n                      },\n                      wallClockTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 3\n                      }\n                    }\n                  },\n                  NexusOperationScheduledEventAttributes: {\n                    fields: {\n                      endpoint: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      service: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      operation: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payload\",\n                        id: 4\n                      },\n                      scheduleToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 5\n                      },\n                      nexusHeader: {\n                        keyType: \"string\",\n                        type: \"string\",\n                        id: 6\n                      },\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 7\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 8\n                      },\n                      endpointId: {\n                        type: \"string\",\n                        id: 9\n                      },\n                      scheduleToStartTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 10\n                      },\n                      startToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 11\n                      }\n                    }\n                  },\n                  NexusOperationStartedEventAttributes: {\n                    fields: {\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      operationId: {\n                        type: \"string\",\n                        id: 3,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      operationToken: {\n                        type: \"string\",\n                        id: 5\n                      }\n                    }\n                  },\n                  NexusOperationCompletedEventAttributes: {\n                    fields: {\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      result: {\n                        type: \"temporal.api.common.v1.Payload\",\n                        id: 2\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  NexusOperationFailedEventAttributes: {\n                    fields: {\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 2\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  NexusOperationTimedOutEventAttributes: {\n                    fields: {\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 2\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  NexusOperationCanceledEventAttributes: {\n                    fields: {\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 2\n                      },\n                      requestId: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  NexusOperationCancelRequestedEventAttributes: {\n                    fields: {\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 2\n                      }\n                    }\n                  },\n                  NexusOperationCancelRequestCompletedEventAttributes: {\n                    fields: {\n                      requestedEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 3\n                      }\n                    }\n                  },\n                  NexusOperationCancelRequestFailedEventAttributes: {\n                    fields: {\n                      requestedEventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      workflowTaskCompletedEventId: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 3\n                      },\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 4\n                      }\n                    }\n                  },\n                  HistoryEvent: {\n                    oneofs: {\n                      attributes: {\n                        oneof: [\n                          \"workflowExecutionStartedEventAttributes\",\n                          \"workflowExecutionCompletedEventAttributes\",\n                          \"workflowExecutionFailedEventAttributes\",\n                          \"workflowExecutionTimedOutEventAttributes\",\n                          \"workflowTaskScheduledEventAttributes\",\n                          \"workflowTaskStartedEventAttributes\",\n                          \"workflowTaskCompletedEventAttributes\",\n                          \"workflowTaskTimedOutEventAttributes\",\n                          \"workflowTaskFailedEventAttributes\",\n                          \"activityTaskScheduledEventAttributes\",\n                          \"activityTaskStartedEventAttributes\",\n                          \"activityTaskCompletedEventAttributes\",\n                          \"activityTaskFailedEventAttributes\",\n                          \"activityTaskTimedOutEventAttributes\",\n                          \"timerStartedEventAttributes\",\n                          \"timerFiredEventAttributes\",\n                          \"activityTaskCancelRequestedEventAttributes\",\n                          \"activityTaskCanceledEventAttributes\",\n                          \"timerCanceledEventAttributes\",\n                          \"markerRecordedEventAttributes\",\n                          \"workflowExecutionSignaledEventAttributes\",\n                          \"workflowExecutionTerminatedEventAttributes\",\n                          \"workflowExecutionCancelRequestedEventAttributes\",\n                          \"workflowExecutionCanceledEventAttributes\",\n                          \"requestCancelExternalWorkflowExecutionInitiatedEventAttributes\",\n                          \"requestCancelExternalWorkflowExecutionFailedEventAttributes\",\n                          \"externalWorkflowExecutionCancelRequestedEventAttributes\",\n                          \"workflowExecutionContinuedAsNewEventAttributes\",\n                          \"startChildWorkflowExecutionInitiatedEventAttributes\",\n                          \"startChildWorkflowExecutionFailedEventAttributes\",\n                          \"childWorkflowExecutionStartedEventAttributes\",\n                          \"childWorkflowExecutionCompletedEventAttributes\",\n                          \"childWorkflowExecutionFailedEventAttributes\",\n                          \"childWorkflowExecutionCanceledEventAttributes\",\n                          \"childWorkflowExecutionTimedOutEventAttributes\",\n                          \"childWorkflowExecutionTerminatedEventAttributes\",\n                          \"signalExternalWorkflowExecutionInitiatedEventAttributes\",\n                          \"signalExternalWorkflowExecutionFailedEventAttributes\",\n                          \"externalWorkflowExecutionSignaledEventAttributes\",\n                          \"upsertWorkflowSearchAttributesEventAttributes\",\n                          \"workflowExecutionUpdateAcceptedEventAttributes\",\n                          \"workflowExecutionUpdateRejectedEventAttributes\",\n                          \"workflowExecutionUpdateCompletedEventAttributes\",\n                          \"workflowPropertiesModifiedExternallyEventAttributes\",\n                          \"activityPropertiesModifiedExternallyEventAttributes\",\n                          \"workflowPropertiesModifiedEventAttributes\",\n                          \"workflowExecutionUpdateAdmittedEventAttributes\",\n                          \"nexusOperationScheduledEventAttributes\",\n                          \"nexusOperationStartedEventAttributes\",\n                          \"nexusOperationCompletedEventAttributes\",\n                          \"nexusOperationFailedEventAttributes\",\n                          \"nexusOperationCanceledEventAttributes\",\n                          \"nexusOperationTimedOutEventAttributes\",\n                          \"nexusOperationCancelRequestedEventAttributes\",\n                          \"workflowExecutionOptionsUpdatedEventAttributes\",\n                          \"nexusOperationCancelRequestCompletedEventAttributes\",\n                          \"nexusOperationCancelRequestFailedEventAttributes\",\n                          \"workflowExecutionPausedEventAttributes\",\n                          \"workflowExecutionUnpausedEventAttributes\",\n                          \"workflowExecutionTimeSkippingTransitionedEventAttributes\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      eventId: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      eventTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 2\n                      },\n                      eventType: {\n                        type: \"temporal.api.enums.v1.EventType\",\n                        id: 3\n                      },\n                      version: {\n                        type: \"int64\",\n                        id: 4\n                      },\n                      taskId: {\n                        type: \"int64\",\n                        id: 5\n                      },\n                      workerMayIgnore: {\n                        type: \"bool\",\n                        id: 300\n                      },\n                      userMetadata: {\n                        type: \"temporal.api.sdk.v1.UserMetadata\",\n                        id: 301\n                      },\n                      links: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.common.v1.Link\",\n                        id: 302\n                      },\n                      principal: {\n                        type: \"temporal.api.common.v1.Principal\",\n                        id: 303\n                      },\n                      workflowExecutionStartedEventAttributes: {\n                        type: \"WorkflowExecutionStartedEventAttributes\",\n                        id: 6\n                      },\n                      workflowExecutionCompletedEventAttributes: {\n                        type: \"WorkflowExecutionCompletedEventAttributes\",\n                        id: 7\n                      },\n                      workflowExecutionFailedEventAttributes: {\n                        type: \"WorkflowExecutionFailedEventAttributes\",\n                        id: 8\n                      },\n                      workflowExecutionTimedOutEventAttributes: {\n                        type: \"WorkflowExecutionTimedOutEventAttributes\",\n                        id: 9\n                      },\n                      workflowTaskScheduledEventAttributes: {\n                        type: \"WorkflowTaskScheduledEventAttributes\",\n                        id: 10\n                      },\n                      workflowTaskStartedEventAttributes: {\n                        type: \"WorkflowTaskStartedEventAttributes\",\n                        id: 11\n                      },\n                      workflowTaskCompletedEventAttributes: {\n                        type: \"WorkflowTaskCompletedEventAttributes\",\n                        id: 12\n                      },\n                      workflowTaskTimedOutEventAttributes: {\n                        type: \"WorkflowTaskTimedOutEventAttributes\",\n                        id: 13\n                      },\n                      workflowTaskFailedEventAttributes: {\n                        type: \"WorkflowTaskFailedEventAttributes\",\n                        id: 14\n                      },\n                      activityTaskScheduledEventAttributes: {\n                        type: \"ActivityTaskScheduledEventAttributes\",\n                        id: 15\n                      },\n                      activityTaskStartedEventAttributes: {\n                        type: \"ActivityTaskStartedEventAttributes\",\n                        id: 16\n                      },\n                      activityTaskCompletedEventAttributes: {\n                        type: \"ActivityTaskCompletedEventAttributes\",\n                        id: 17\n                      },\n                      activityTaskFailedEventAttributes: {\n                        type: \"ActivityTaskFailedEventAttributes\",\n                        id: 18\n                      },\n                      activityTaskTimedOutEventAttributes: {\n                        type: \"ActivityTaskTimedOutEventAttributes\",\n                        id: 19\n                      },\n                      timerStartedEventAttributes: {\n                        type: \"TimerStartedEventAttributes\",\n                        id: 20\n                      },\n                      timerFiredEventAttributes: {\n                        type: \"TimerFiredEventAttributes\",\n                        id: 21\n                      },\n                      activityTaskCancelRequestedEventAttributes: {\n                        type: \"ActivityTaskCancelRequestedEventAttributes\",\n                        id: 22\n                      },\n                      activityTaskCanceledEventAttributes: {\n                        type: \"ActivityTaskCanceledEventAttributes\",\n                        id: 23\n                      },\n                      timerCanceledEventAttributes: {\n                        type: \"TimerCanceledEventAttributes\",\n                        id: 24\n                      },\n                      markerRecordedEventAttributes: {\n                        type: \"MarkerRecordedEventAttributes\",\n                        id: 25\n                      },\n                      workflowExecutionSignaledEventAttributes: {\n                        type: \"WorkflowExecutionSignaledEventAttributes\",\n                        id: 26\n                      },\n                      workflowExecutionTerminatedEventAttributes: {\n                        type: \"WorkflowExecutionTerminatedEventAttributes\",\n                        id: 27\n                      },\n                      workflowExecutionCancelRequestedEventAttributes: {\n                        type: \"WorkflowExecutionCancelRequestedEventAttributes\",\n                        id: 28\n                      },\n                      workflowExecutionCanceledEventAttributes: {\n                        type: \"WorkflowExecutionCanceledEventAttributes\",\n                        id: 29\n                      },\n                      requestCancelExternalWorkflowExecutionInitiatedEventAttributes: {\n                        type: \"RequestCancelExternalWorkflowExecutionInitiatedEventAttributes\",\n                        id: 30\n                      },\n                      requestCancelExternalWorkflowExecutionFailedEventAttributes: {\n                        type: \"RequestCancelExternalWorkflowExecutionFailedEventAttributes\",\n                        id: 31\n                      },\n                      externalWorkflowExecutionCancelRequestedEventAttributes: {\n                        type: \"ExternalWorkflowExecutionCancelRequestedEventAttributes\",\n                        id: 32\n                      },\n                      workflowExecutionContinuedAsNewEventAttributes: {\n                        type: \"WorkflowExecutionContinuedAsNewEventAttributes\",\n                        id: 33\n                      },\n                      startChildWorkflowExecutionInitiatedEventAttributes: {\n                        type: \"StartChildWorkflowExecutionInitiatedEventAttributes\",\n                        id: 34\n                      },\n                      startChildWorkflowExecutionFailedEventAttributes: {\n                        type: \"StartChildWorkflowExecutionFailedEventAttributes\",\n                        id: 35\n                      },\n                      childWorkflowExecutionStartedEventAttributes: {\n                        type: \"ChildWorkflowExecutionStartedEventAttributes\",\n                        id: 36\n                      },\n                      childWorkflowExecutionCompletedEventAttributes: {\n                        type: \"ChildWorkflowExecutionCompletedEventAttributes\",\n                        id: 37\n                      },\n                      childWorkflowExecutionFailedEventAttributes: {\n                        type: \"ChildWorkflowExecutionFailedEventAttributes\",\n                        id: 38\n                      },\n                      childWorkflowExecutionCanceledEventAttributes: {\n                        type: \"ChildWorkflowExecutionCanceledEventAttributes\",\n                        id: 39\n                      },\n                      childWorkflowExecutionTimedOutEventAttributes: {\n                        type: \"ChildWorkflowExecutionTimedOutEventAttributes\",\n                        id: 40\n                      },\n                      childWorkflowExecutionTerminatedEventAttributes: {\n                        type: \"ChildWorkflowExecutionTerminatedEventAttributes\",\n                        id: 41\n                      },\n                      signalExternalWorkflowExecutionInitiatedEventAttributes: {\n                        type: \"SignalExternalWorkflowExecutionInitiatedEventAttributes\",\n                        id: 42\n                      },\n                      signalExternalWorkflowExecutionFailedEventAttributes: {\n                        type: \"SignalExternalWorkflowExecutionFailedEventAttributes\",\n                        id: 43\n                      },\n                      externalWorkflowExecutionSignaledEventAttributes: {\n                        type: \"ExternalWorkflowExecutionSignaledEventAttributes\",\n                        id: 44\n                      },\n                      upsertWorkflowSearchAttributesEventAttributes: {\n                        type: \"UpsertWorkflowSearchAttributesEventAttributes\",\n                        id: 45\n                      },\n                      workflowExecutionUpdateAcceptedEventAttributes: {\n                        type: \"WorkflowExecutionUpdateAcceptedEventAttributes\",\n                        id: 46\n                      },\n                      workflowExecutionUpdateRejectedEventAttributes: {\n                        type: \"WorkflowExecutionUpdateRejectedEventAttributes\",\n                        id: 47\n                      },\n                      workflowExecutionUpdateCompletedEventAttributes: {\n                        type: \"WorkflowExecutionUpdateCompletedEventAttributes\",\n                        id: 48\n                      },\n                      workflowPropertiesModifiedExternallyEventAttributes: {\n                        type: \"WorkflowPropertiesModifiedExternallyEventAttributes\",\n                        id: 49\n                      },\n                      activityPropertiesModifiedExternallyEventAttributes: {\n                        type: \"ActivityPropertiesModifiedExternallyEventAttributes\",\n                        id: 50\n                      },\n                      workflowPropertiesModifiedEventAttributes: {\n                        type: \"WorkflowPropertiesModifiedEventAttributes\",\n                        id: 51\n                      },\n                      workflowExecutionUpdateAdmittedEventAttributes: {\n                        type: \"WorkflowExecutionUpdateAdmittedEventAttributes\",\n                        id: 52\n                      },\n                      nexusOperationScheduledEventAttributes: {\n                        type: \"NexusOperationScheduledEventAttributes\",\n                        id: 53\n                      },\n                      nexusOperationStartedEventAttributes: {\n                        type: \"NexusOperationStartedEventAttributes\",\n                        id: 54\n                      },\n                      nexusOperationCompletedEventAttributes: {\n                        type: \"NexusOperationCompletedEventAttributes\",\n                        id: 55\n                      },\n                      nexusOperationFailedEventAttributes: {\n                        type: \"NexusOperationFailedEventAttributes\",\n                        id: 56\n                      },\n                      nexusOperationCanceledEventAttributes: {\n                        type: \"NexusOperationCanceledEventAttributes\",\n                        id: 57\n                      },\n                      nexusOperationTimedOutEventAttributes: {\n                        type: \"NexusOperationTimedOutEventAttributes\",\n                        id: 58\n                      },\n                      nexusOperationCancelRequestedEventAttributes: {\n                        type: \"NexusOperationCancelRequestedEventAttributes\",\n                        id: 59\n                      },\n                      workflowExecutionOptionsUpdatedEventAttributes: {\n                        type: \"WorkflowExecutionOptionsUpdatedEventAttributes\",\n                        id: 60\n                      },\n                      nexusOperationCancelRequestCompletedEventAttributes: {\n                        type: \"NexusOperationCancelRequestCompletedEventAttributes\",\n                        id: 61\n                      },\n                      nexusOperationCancelRequestFailedEventAttributes: {\n                        type: \"NexusOperationCancelRequestFailedEventAttributes\",\n                        id: 62\n                      },\n                      workflowExecutionPausedEventAttributes: {\n                        type: \"WorkflowExecutionPausedEventAttributes\",\n                        id: 63\n                      },\n                      workflowExecutionUnpausedEventAttributes: {\n                        type: \"WorkflowExecutionUnpausedEventAttributes\",\n                        id: 64\n                      },\n                      workflowExecutionTimeSkippingTransitionedEventAttributes: {\n                        type: \"WorkflowExecutionTimeSkippingTransitionedEventAttributes\",\n                        id: 65\n                      }\n                    }\n                  },\n                  History: {\n                    fields: {\n                      events: {\n                        rule: \"repeated\",\n                        type: \"HistoryEvent\",\n                        id: 1\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          workflow: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/workflow/v1;workflow\",\n                  java_package: \"io.temporal.api.workflow.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::Workflow::V1\",\n                  csharp_namespace: \"Temporalio.Api.Workflow.V1\"\n                },\n                nested: {\n                  WorkflowExecutionInfo: {\n                    fields: {\n                      execution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 1\n                      },\n                      type: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 2\n                      },\n                      startTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 3\n                      },\n                      closeTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 4\n                      },\n                      status: {\n                        type: \"temporal.api.enums.v1.WorkflowExecutionStatus\",\n                        id: 5\n                      },\n                      historyLength: {\n                        type: \"int64\",\n                        id: 6\n                      },\n                      parentNamespaceId: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      parentExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 8\n                      },\n                      executionTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 9\n                      },\n                      memo: {\n                        type: \"temporal.api.common.v1.Memo\",\n                        id: 10\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 11\n                      },\n                      autoResetPoints: {\n                        type: \"ResetPoints\",\n                        id: 12\n                      },\n                      taskQueue: {\n                        type: \"string\",\n                        id: 13\n                      },\n                      stateTransitionCount: {\n                        type: \"int64\",\n                        id: 14\n                      },\n                      historySizeBytes: {\n                        type: \"int64\",\n                        id: 15\n                      },\n                      mostRecentWorkerVersionStamp: {\n                        type: \"temporal.api.common.v1.WorkerVersionStamp\",\n                        id: 16,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      executionDuration: {\n                        type: \"google.protobuf.Duration\",\n                        id: 17\n                      },\n                      rootExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 18\n                      },\n                      assignedBuildId: {\n                        type: \"string\",\n                        id: 19,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      inheritedBuildId: {\n                        type: \"string\",\n                        id: 20,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      firstRunId: {\n                        type: \"string\",\n                        id: 21\n                      },\n                      versioningInfo: {\n                        type: \"WorkflowExecutionVersioningInfo\",\n                        id: 22\n                      },\n                      workerDeploymentName: {\n                        type: \"string\",\n                        id: 23\n                      },\n                      priority: {\n                        type: \"temporal.api.common.v1.Priority\",\n                        id: 24\n                      },\n                      externalPayloadSizeBytes: {\n                        type: \"int64\",\n                        id: 25\n                      },\n                      externalPayloadCount: {\n                        type: \"int64\",\n                        id: 26\n                      }\n                    }\n                  },\n                  WorkflowExecutionExtendedInfo: {\n                    fields: {\n                      executionExpirationTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 1\n                      },\n                      runExpirationTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 2\n                      },\n                      cancelRequested: {\n                        type: \"bool\",\n                        id: 3\n                      },\n                      lastResetTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 4\n                      },\n                      originalStartTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 5\n                      },\n                      resetRunId: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      requestIdInfos: {\n                        keyType: \"string\",\n                        type: \"RequestIdInfo\",\n                        id: 7\n                      },\n                      pauseInfo: {\n                        type: \"WorkflowExecutionPauseInfo\",\n                        id: 8\n                      }\n                    }\n                  },\n                  WorkflowExecutionVersioningInfo: {\n                    fields: {\n                      behavior: {\n                        type: \"temporal.api.enums.v1.VersioningBehavior\",\n                        id: 1\n                      },\n                      deployment: {\n                        type: \"temporal.api.deployment.v1.Deployment\",\n                        id: 2,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      version: {\n                        type: \"string\",\n                        id: 5,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      deploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 7\n                      },\n                      versioningOverride: {\n                        type: \"VersioningOverride\",\n                        id: 3\n                      },\n                      deploymentTransition: {\n                        type: \"DeploymentTransition\",\n                        id: 4,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      versionTransition: {\n                        type: \"DeploymentVersionTransition\",\n                        id: 6\n                      },\n                      revisionNumber: {\n                        type: \"int64\",\n                        id: 8\n                      },\n                      continueAsNewInitialVersioningBehavior: {\n                        type: \"temporal.api.enums.v1.ContinueAsNewVersioningBehavior\",\n                        id: 9\n                      }\n                    }\n                  },\n                  DeploymentTransition: {\n                    fields: {\n                      deployment: {\n                        type: \"temporal.api.deployment.v1.Deployment\",\n                        id: 1\n                      }\n                    }\n                  },\n                  DeploymentVersionTransition: {\n                    fields: {\n                      version: {\n                        type: \"string\",\n                        id: 1,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      deploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 2\n                      }\n                    }\n                  },\n                  WorkflowExecutionConfig: {\n                    fields: {\n                      taskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 1\n                      },\n                      workflowExecutionTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 2\n                      },\n                      workflowRunTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 3\n                      },\n                      defaultWorkflowTaskTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 4\n                      },\n                      userMetadata: {\n                        type: \"temporal.api.sdk.v1.UserMetadata\",\n                        id: 5\n                      }\n                    }\n                  },\n                  PendingActivityInfo: {\n                    oneofs: {\n                      assignedBuildId: {\n                        oneof: [\n                          \"useWorkflowBuildId\",\n                          \"lastIndependentlyAssignedBuildId\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      activityId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      activityType: {\n                        type: \"temporal.api.common.v1.ActivityType\",\n                        id: 2\n                      },\n                      state: {\n                        type: \"temporal.api.enums.v1.PendingActivityState\",\n                        id: 3\n                      },\n                      heartbeatDetails: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 4\n                      },\n                      lastHeartbeatTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 5\n                      },\n                      lastStartedTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 6\n                      },\n                      attempt: {\n                        type: \"int32\",\n                        id: 7\n                      },\n                      maximumAttempts: {\n                        type: \"int32\",\n                        id: 8\n                      },\n                      scheduledTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 9\n                      },\n                      expirationTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 10\n                      },\n                      lastFailure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 11\n                      },\n                      lastWorkerIdentity: {\n                        type: \"string\",\n                        id: 12\n                      },\n                      useWorkflowBuildId: {\n                        type: \"google.protobuf.Empty\",\n                        id: 13,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      lastIndependentlyAssignedBuildId: {\n                        type: \"string\",\n                        id: 14,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      lastWorkerVersionStamp: {\n                        type: \"temporal.api.common.v1.WorkerVersionStamp\",\n                        id: 15,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      currentRetryInterval: {\n                        type: \"google.protobuf.Duration\",\n                        id: 16\n                      },\n                      lastAttemptCompleteTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 17\n                      },\n                      nextAttemptScheduleTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 18\n                      },\n                      paused: {\n                        type: \"bool\",\n                        id: 19\n                      },\n                      lastDeployment: {\n                        type: \"temporal.api.deployment.v1.Deployment\",\n                        id: 20,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      lastWorkerDeploymentVersion: {\n                        type: \"string\",\n                        id: 21,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      lastDeploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 25\n                      },\n                      priority: {\n                        type: \"temporal.api.common.v1.Priority\",\n                        id: 22\n                      },\n                      pauseInfo: {\n                        type: \"PauseInfo\",\n                        id: 23\n                      },\n                      activityOptions: {\n                        type: \"temporal.api.activity.v1.ActivityOptions\",\n                        id: 24\n                      }\n                    },\n                    nested: {\n                      PauseInfo: {\n                        oneofs: {\n                          pausedBy: {\n                            oneof: [\n                              \"manual\",\n                              \"rule\"\n                            ]\n                          }\n                        },\n                        fields: {\n                          pauseTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 1\n                          },\n                          manual: {\n                            type: \"Manual\",\n                            id: 2\n                          },\n                          rule: {\n                            type: \"Rule\",\n                            id: 4\n                          }\n                        },\n                        nested: {\n                          Manual: {\n                            fields: {\n                              identity: {\n                                type: \"string\",\n                                id: 1\n                              },\n                              reason: {\n                                type: \"string\",\n                                id: 2\n                              }\n                            }\n                          },\n                          Rule: {\n                            fields: {\n                              ruleId: {\n                                type: \"string\",\n                                id: 1\n                              },\n                              identity: {\n                                type: \"string\",\n                                id: 2\n                              },\n                              reason: {\n                                type: \"string\",\n                                id: 3\n                              }\n                            }\n                          }\n                        }\n                      }\n                    }\n                  },\n                  PendingChildExecutionInfo: {\n                    fields: {\n                      workflowId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      workflowTypeName: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      initiatedId: {\n                        type: \"int64\",\n                        id: 4\n                      },\n                      parentClosePolicy: {\n                        type: \"temporal.api.enums.v1.ParentClosePolicy\",\n                        id: 5\n                      }\n                    }\n                  },\n                  PendingWorkflowTaskInfo: {\n                    fields: {\n                      state: {\n                        type: \"temporal.api.enums.v1.PendingWorkflowTaskState\",\n                        id: 1\n                      },\n                      scheduledTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 2\n                      },\n                      originalScheduledTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 3\n                      },\n                      startedTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 4\n                      },\n                      attempt: {\n                        type: \"int32\",\n                        id: 5\n                      }\n                    }\n                  },\n                  ResetPoints: {\n                    fields: {\n                      points: {\n                        rule: \"repeated\",\n                        type: \"ResetPointInfo\",\n                        id: 1\n                      }\n                    }\n                  },\n                  ResetPointInfo: {\n                    fields: {\n                      buildId: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      binaryChecksum: {\n                        type: \"string\",\n                        id: 1,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      firstWorkflowTaskCompletedId: {\n                        type: \"int64\",\n                        id: 3\n                      },\n                      createTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 4\n                      },\n                      expireTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 5\n                      },\n                      resettable: {\n                        type: \"bool\",\n                        id: 6\n                      }\n                    }\n                  },\n                  NewWorkflowExecutionInfo: {\n                    fields: {\n                      workflowId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workflowType: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 2\n                      },\n                      taskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 3\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 4\n                      },\n                      workflowExecutionTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 5\n                      },\n                      workflowRunTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 6\n                      },\n                      workflowTaskTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 7\n                      },\n                      workflowIdReusePolicy: {\n                        type: \"temporal.api.enums.v1.WorkflowIdReusePolicy\",\n                        id: 8\n                      },\n                      retryPolicy: {\n                        type: \"temporal.api.common.v1.RetryPolicy\",\n                        id: 9\n                      },\n                      cronSchedule: {\n                        type: \"string\",\n                        id: 10\n                      },\n                      memo: {\n                        type: \"temporal.api.common.v1.Memo\",\n                        id: 11\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 12\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 13\n                      },\n                      userMetadata: {\n                        type: \"temporal.api.sdk.v1.UserMetadata\",\n                        id: 14\n                      },\n                      versioningOverride: {\n                        type: \"VersioningOverride\",\n                        id: 15\n                      },\n                      priority: {\n                        type: \"temporal.api.common.v1.Priority\",\n                        id: 16\n                      }\n                    }\n                  },\n                  CallbackInfo: {\n                    fields: {\n                      callback: {\n                        type: \"temporal.api.common.v1.Callback\",\n                        id: 1\n                      },\n                      trigger: {\n                        type: \"Trigger\",\n                        id: 2\n                      },\n                      registrationTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 3\n                      },\n                      state: {\n                        type: \"temporal.api.enums.v1.CallbackState\",\n                        id: 4\n                      },\n                      attempt: {\n                        type: \"int32\",\n                        id: 5\n                      },\n                      lastAttemptCompleteTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 6\n                      },\n                      lastAttemptFailure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 7\n                      },\n                      nextAttemptScheduleTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 8\n                      },\n                      blockedReason: {\n                        type: \"string\",\n                        id: 9\n                      }\n                    },\n                    nested: {\n                      WorkflowClosed: {\n                        fields: {}\n                      },\n                      Trigger: {\n                        oneofs: {\n                          variant: {\n                            oneof: [\n                              \"workflowClosed\"\n                            ]\n                          }\n                        },\n                        fields: {\n                          workflowClosed: {\n                            type: \"WorkflowClosed\",\n                            id: 1\n                          }\n                        }\n                      }\n                    }\n                  },\n                  PendingNexusOperationInfo: {\n                    fields: {\n                      endpoint: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      service: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      operation: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      operationId: {\n                        type: \"string\",\n                        id: 4,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      scheduleToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 5\n                      },\n                      scheduledTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 6\n                      },\n                      state: {\n                        type: \"temporal.api.enums.v1.PendingNexusOperationState\",\n                        id: 7\n                      },\n                      attempt: {\n                        type: \"int32\",\n                        id: 8\n                      },\n                      lastAttemptCompleteTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 9\n                      },\n                      lastAttemptFailure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 10\n                      },\n                      nextAttemptScheduleTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 11\n                      },\n                      cancellationInfo: {\n                        type: \"NexusOperationCancellationInfo\",\n                        id: 12\n                      },\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 13\n                      },\n                      blockedReason: {\n                        type: \"string\",\n                        id: 14\n                      },\n                      operationToken: {\n                        type: \"string\",\n                        id: 15\n                      },\n                      scheduleToStartTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 16\n                      },\n                      startToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 17\n                      }\n                    }\n                  },\n                  NexusOperationCancellationInfo: {\n                    fields: {\n                      requestedTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 1\n                      },\n                      state: {\n                        type: \"temporal.api.enums.v1.NexusOperationCancellationState\",\n                        id: 2\n                      },\n                      attempt: {\n                        type: \"int32\",\n                        id: 3\n                      },\n                      lastAttemptCompleteTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 4\n                      },\n                      lastAttemptFailure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 5\n                      },\n                      nextAttemptScheduleTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 6\n                      },\n                      blockedReason: {\n                        type: \"string\",\n                        id: 7\n                      }\n                    }\n                  },\n                  WorkflowExecutionOptions: {\n                    fields: {\n                      versioningOverride: {\n                        type: \"VersioningOverride\",\n                        id: 1\n                      },\n                      priority: {\n                        type: \"temporal.api.common.v1.Priority\",\n                        id: 2\n                      },\n                      timeSkippingConfig: {\n                        type: \"TimeSkippingConfig\",\n                        id: 3\n                      }\n                    }\n                  },\n                  TimeSkippingConfig: {\n                    oneofs: {\n                      bound: {\n                        oneof: [\n                          \"maxSkippedDuration\",\n                          \"maxElapsedDuration\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      enabled: {\n                        type: \"bool\",\n                        id: 1\n                      },\n                      maxSkippedDuration: {\n                        type: \"google.protobuf.Duration\",\n                        id: 4\n                      },\n                      maxElapsedDuration: {\n                        type: \"google.protobuf.Duration\",\n                        id: 5\n                      }\n                    },\n                    reserved: [\n                      [\n                        2,\n                        2\n                      ],\n                      [\n                        6,\n                        6\n                      ],\n                      \"disable_propagation\",\n                      \"max_target_time\"\n                    ]\n                  },\n                  VersioningOverride: {\n                    oneofs: {\n                      override: {\n                        oneof: [\n                          \"pinned\",\n                          \"autoUpgrade\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      pinned: {\n                        type: \"PinnedOverride\",\n                        id: 3\n                      },\n                      autoUpgrade: {\n                        type: \"bool\",\n                        id: 4\n                      },\n                      behavior: {\n                        type: \"temporal.api.enums.v1.VersioningBehavior\",\n                        id: 1,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      deployment: {\n                        type: \"temporal.api.deployment.v1.Deployment\",\n                        id: 2,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      pinnedVersion: {\n                        type: \"string\",\n                        id: 9,\n                        options: {\n                          deprecated: true\n                        }\n                      }\n                    },\n                    nested: {\n                      PinnedOverride: {\n                        fields: {\n                          behavior: {\n                            type: \"PinnedOverrideBehavior\",\n                            id: 1\n                          },\n                          version: {\n                            type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                            id: 2\n                          }\n                        }\n                      },\n                      PinnedOverrideBehavior: {\n                        values: {\n                          PINNED_OVERRIDE_BEHAVIOR_UNSPECIFIED: 0,\n                          PINNED_OVERRIDE_BEHAVIOR_PINNED: 1\n                        }\n                      }\n                    }\n                  },\n                  OnConflictOptions: {\n                    fields: {\n                      attachRequestId: {\n                        type: \"bool\",\n                        id: 1\n                      },\n                      attachCompletionCallbacks: {\n                        type: \"bool\",\n                        id: 2\n                      },\n                      attachLinks: {\n                        type: \"bool\",\n                        id: 3\n                      }\n                    }\n                  },\n                  RequestIdInfo: {\n                    fields: {\n                      eventType: {\n                        type: \"temporal.api.enums.v1.EventType\",\n                        id: 1\n                      },\n                      eventId: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      buffered: {\n                        type: \"bool\",\n                        id: 3\n                      }\n                    }\n                  },\n                  PostResetOperation: {\n                    oneofs: {\n                      variant: {\n                        oneof: [\n                          \"signalWorkflow\",\n                          \"updateWorkflowOptions\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      signalWorkflow: {\n                        type: \"SignalWorkflow\",\n                        id: 1\n                      },\n                      updateWorkflowOptions: {\n                        type: \"UpdateWorkflowOptions\",\n                        id: 2\n                      }\n                    },\n                    nested: {\n                      SignalWorkflow: {\n                        fields: {\n                          signalName: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          input: {\n                            type: \"temporal.api.common.v1.Payloads\",\n                            id: 2\n                          },\n                          header: {\n                            type: \"temporal.api.common.v1.Header\",\n                            id: 3\n                          },\n                          links: {\n                            rule: \"repeated\",\n                            type: \"temporal.api.common.v1.Link\",\n                            id: 4\n                          }\n                        }\n                      },\n                      UpdateWorkflowOptions: {\n                        fields: {\n                          workflowExecutionOptions: {\n                            type: \"temporal.api.workflow.v1.WorkflowExecutionOptions\",\n                            id: 1\n                          },\n                          updateMask: {\n                            type: \"google.protobuf.FieldMask\",\n                            id: 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  WorkflowExecutionPauseInfo: {\n                    fields: {\n                      identity: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      pausedTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 2\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          command: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/command/v1;command\",\n                  java_package: \"io.temporal.api.command.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::Command::V1\",\n                  csharp_namespace: \"Temporalio.Api.Command.V1\"\n                },\n                nested: {\n                  ScheduleActivityTaskCommandAttributes: {\n                    fields: {\n                      activityId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      activityType: {\n                        type: \"temporal.api.common.v1.ActivityType\",\n                        id: 2\n                      },\n                      taskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 4\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 5\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 6\n                      },\n                      scheduleToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 7\n                      },\n                      scheduleToStartTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 8\n                      },\n                      startToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 9\n                      },\n                      heartbeatTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 10\n                      },\n                      retryPolicy: {\n                        type: \"temporal.api.common.v1.RetryPolicy\",\n                        id: 11\n                      },\n                      requestEagerExecution: {\n                        type: \"bool\",\n                        id: 12\n                      },\n                      useWorkflowBuildId: {\n                        type: \"bool\",\n                        id: 13\n                      },\n                      priority: {\n                        type: \"temporal.api.common.v1.Priority\",\n                        id: 14\n                      }\n                    },\n                    reserved: [\n                      [\n                        3,\n                        3\n                      ]\n                    ]\n                  },\n                  RequestCancelActivityTaskCommandAttributes: {\n                    fields: {\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 1\n                      }\n                    }\n                  },\n                  StartTimerCommandAttributes: {\n                    fields: {\n                      timerId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      startToFireTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 2\n                      }\n                    }\n                  },\n                  CompleteWorkflowExecutionCommandAttributes: {\n                    fields: {\n                      result: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 1\n                      }\n                    }\n                  },\n                  FailWorkflowExecutionCommandAttributes: {\n                    fields: {\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 1\n                      }\n                    }\n                  },\n                  CancelTimerCommandAttributes: {\n                    fields: {\n                      timerId: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  CancelWorkflowExecutionCommandAttributes: {\n                    fields: {\n                      details: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 1\n                      }\n                    }\n                  },\n                  RequestCancelExternalWorkflowExecutionCommandAttributes: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      workflowId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      control: {\n                        type: \"string\",\n                        id: 4,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      childWorkflowOnly: {\n                        type: \"bool\",\n                        id: 5\n                      },\n                      reason: {\n                        type: \"string\",\n                        id: 6\n                      }\n                    }\n                  },\n                  SignalExternalWorkflowExecutionCommandAttributes: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      execution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 2\n                      },\n                      signalName: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 4\n                      },\n                      control: {\n                        type: \"string\",\n                        id: 5,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      childWorkflowOnly: {\n                        type: \"bool\",\n                        id: 6\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 7\n                      }\n                    }\n                  },\n                  UpsertWorkflowSearchAttributesCommandAttributes: {\n                    fields: {\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 1\n                      }\n                    }\n                  },\n                  ModifyWorkflowPropertiesCommandAttributes: {\n                    fields: {\n                      upsertedMemo: {\n                        type: \"temporal.api.common.v1.Memo\",\n                        id: 1\n                      }\n                    }\n                  },\n                  RecordMarkerCommandAttributes: {\n                    fields: {\n                      markerName: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      details: {\n                        keyType: \"string\",\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 2\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 3\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 4\n                      }\n                    }\n                  },\n                  ContinueAsNewWorkflowExecutionCommandAttributes: {\n                    fields: {\n                      workflowType: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 1\n                      },\n                      taskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 2\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 3\n                      },\n                      workflowRunTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 4\n                      },\n                      workflowTaskTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 5\n                      },\n                      backoffStartInterval: {\n                        type: \"google.protobuf.Duration\",\n                        id: 6\n                      },\n                      retryPolicy: {\n                        type: \"temporal.api.common.v1.RetryPolicy\",\n                        id: 7\n                      },\n                      initiator: {\n                        type: \"temporal.api.enums.v1.ContinueAsNewInitiator\",\n                        id: 8\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 9\n                      },\n                      lastCompletionResult: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 10\n                      },\n                      cronSchedule: {\n                        type: \"string\",\n                        id: 11\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 12\n                      },\n                      memo: {\n                        type: \"temporal.api.common.v1.Memo\",\n                        id: 13\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 14\n                      },\n                      inheritBuildId: {\n                        type: \"bool\",\n                        id: 15,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      initialVersioningBehavior: {\n                        type: \"temporal.api.enums.v1.ContinueAsNewVersioningBehavior\",\n                        id: 16\n                      }\n                    }\n                  },\n                  StartChildWorkflowExecutionCommandAttributes: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      workflowId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      workflowType: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 3\n                      },\n                      taskQueue: {\n                        type: \"temporal.api.taskqueue.v1.TaskQueue\",\n                        id: 4\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 5\n                      },\n                      workflowExecutionTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 6\n                      },\n                      workflowRunTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 7\n                      },\n                      workflowTaskTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 8\n                      },\n                      parentClosePolicy: {\n                        type: \"temporal.api.enums.v1.ParentClosePolicy\",\n                        id: 9\n                      },\n                      control: {\n                        type: \"string\",\n                        id: 10\n                      },\n                      workflowIdReusePolicy: {\n                        type: \"temporal.api.enums.v1.WorkflowIdReusePolicy\",\n                        id: 11\n                      },\n                      retryPolicy: {\n                        type: \"temporal.api.common.v1.RetryPolicy\",\n                        id: 12\n                      },\n                      cronSchedule: {\n                        type: \"string\",\n                        id: 13\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 14\n                      },\n                      memo: {\n                        type: \"temporal.api.common.v1.Memo\",\n                        id: 15\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 16\n                      },\n                      inheritBuildId: {\n                        type: \"bool\",\n                        id: 17,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      priority: {\n                        type: \"temporal.api.common.v1.Priority\",\n                        id: 18\n                      }\n                    }\n                  },\n                  ProtocolMessageCommandAttributes: {\n                    fields: {\n                      messageId: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  ScheduleNexusOperationCommandAttributes: {\n                    fields: {\n                      endpoint: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      service: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      operation: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payload\",\n                        id: 4\n                      },\n                      scheduleToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 5\n                      },\n                      nexusHeader: {\n                        keyType: \"string\",\n                        type: \"string\",\n                        id: 6\n                      },\n                      scheduleToStartTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 7\n                      },\n                      startToCloseTimeout: {\n                        type: \"google.protobuf.Duration\",\n                        id: 8\n                      }\n                    }\n                  },\n                  RequestCancelNexusOperationCommandAttributes: {\n                    fields: {\n                      scheduledEventId: {\n                        type: \"int64\",\n                        id: 1\n                      }\n                    }\n                  },\n                  Command: {\n                    oneofs: {\n                      attributes: {\n                        oneof: [\n                          \"scheduleActivityTaskCommandAttributes\",\n                          \"startTimerCommandAttributes\",\n                          \"completeWorkflowExecutionCommandAttributes\",\n                          \"failWorkflowExecutionCommandAttributes\",\n                          \"requestCancelActivityTaskCommandAttributes\",\n                          \"cancelTimerCommandAttributes\",\n                          \"cancelWorkflowExecutionCommandAttributes\",\n                          \"requestCancelExternalWorkflowExecutionCommandAttributes\",\n                          \"recordMarkerCommandAttributes\",\n                          \"continueAsNewWorkflowExecutionCommandAttributes\",\n                          \"startChildWorkflowExecutionCommandAttributes\",\n                          \"signalExternalWorkflowExecutionCommandAttributes\",\n                          \"upsertWorkflowSearchAttributesCommandAttributes\",\n                          \"protocolMessageCommandAttributes\",\n                          \"modifyWorkflowPropertiesCommandAttributes\",\n                          \"scheduleNexusOperationCommandAttributes\",\n                          \"requestCancelNexusOperationCommandAttributes\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      commandType: {\n                        type: \"temporal.api.enums.v1.CommandType\",\n                        id: 1\n                      },\n                      userMetadata: {\n                        type: \"temporal.api.sdk.v1.UserMetadata\",\n                        id: 301\n                      },\n                      scheduleActivityTaskCommandAttributes: {\n                        type: \"ScheduleActivityTaskCommandAttributes\",\n                        id: 2\n                      },\n                      startTimerCommandAttributes: {\n                        type: \"StartTimerCommandAttributes\",\n                        id: 3\n                      },\n                      completeWorkflowExecutionCommandAttributes: {\n                        type: \"CompleteWorkflowExecutionCommandAttributes\",\n                        id: 4\n                      },\n                      failWorkflowExecutionCommandAttributes: {\n                        type: \"FailWorkflowExecutionCommandAttributes\",\n                        id: 5\n                      },\n                      requestCancelActivityTaskCommandAttributes: {\n                        type: \"RequestCancelActivityTaskCommandAttributes\",\n                        id: 6\n                      },\n                      cancelTimerCommandAttributes: {\n                        type: \"CancelTimerCommandAttributes\",\n                        id: 7\n                      },\n                      cancelWorkflowExecutionCommandAttributes: {\n                        type: \"CancelWorkflowExecutionCommandAttributes\",\n                        id: 8\n                      },\n                      requestCancelExternalWorkflowExecutionCommandAttributes: {\n                        type: \"RequestCancelExternalWorkflowExecutionCommandAttributes\",\n                        id: 9\n                      },\n                      recordMarkerCommandAttributes: {\n                        type: \"RecordMarkerCommandAttributes\",\n                        id: 10\n                      },\n                      continueAsNewWorkflowExecutionCommandAttributes: {\n                        type: \"ContinueAsNewWorkflowExecutionCommandAttributes\",\n                        id: 11\n                      },\n                      startChildWorkflowExecutionCommandAttributes: {\n                        type: \"StartChildWorkflowExecutionCommandAttributes\",\n                        id: 12\n                      },\n                      signalExternalWorkflowExecutionCommandAttributes: {\n                        type: \"SignalExternalWorkflowExecutionCommandAttributes\",\n                        id: 13\n                      },\n                      upsertWorkflowSearchAttributesCommandAttributes: {\n                        type: \"UpsertWorkflowSearchAttributesCommandAttributes\",\n                        id: 14\n                      },\n                      protocolMessageCommandAttributes: {\n                        type: \"ProtocolMessageCommandAttributes\",\n                        id: 15\n                      },\n                      modifyWorkflowPropertiesCommandAttributes: {\n                        type: \"ModifyWorkflowPropertiesCommandAttributes\",\n                        id: 17\n                      },\n                      scheduleNexusOperationCommandAttributes: {\n                        type: \"ScheduleNexusOperationCommandAttributes\",\n                        id: 18\n                      },\n                      requestCancelNexusOperationCommandAttributes: {\n                        type: \"RequestCancelNexusOperationCommandAttributes\",\n                        id: 19\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          filter: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/filter/v1;filter\",\n                  java_package: \"io.temporal.api.filter.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::Filter::V1\",\n                  csharp_namespace: \"Temporalio.Api.Filter.V1\"\n                },\n                nested: {\n                  WorkflowExecutionFilter: {\n                    fields: {\n                      workflowId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  WorkflowTypeFilter: {\n                    fields: {\n                      name: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  StartTimeFilter: {\n                    fields: {\n                      earliestTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 1\n                      },\n                      latestTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 2\n                      }\n                    }\n                  },\n                  StatusFilter: {\n                    fields: {\n                      status: {\n                        type: \"temporal.api.enums.v1.WorkflowExecutionStatus\",\n                        id: 1\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          protocol: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/protocol/v1;protocol\",\n                  java_package: \"io.temporal.api.protocol.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::Protocol::V1\",\n                  csharp_namespace: \"Temporalio.Api.Protocol.V1\"\n                },\n                nested: {\n                  Message: {\n                    oneofs: {\n                      sequencingId: {\n                        oneof: [\n                          \"eventId\",\n                          \"commandIndex\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      id: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      protocolInstanceId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      eventId: {\n                        type: \"int64\",\n                        id: 3\n                      },\n                      commandIndex: {\n                        type: \"int64\",\n                        id: 4\n                      },\n                      body: {\n                        type: \"google.protobuf.Any\",\n                        id: 5\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          namespace: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/namespace/v1;namespace\",\n                  java_package: \"io.temporal.api.namespace.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::Namespace::V1\",\n                  csharp_namespace: \"Temporalio.Api.Namespace.V1\"\n                },\n                nested: {\n                  NamespaceInfo: {\n                    fields: {\n                      name: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      state: {\n                        type: \"temporal.api.enums.v1.NamespaceState\",\n                        id: 2\n                      },\n                      description: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      ownerEmail: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      data: {\n                        keyType: \"string\",\n                        type: \"string\",\n                        id: 5\n                      },\n                      id: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      capabilities: {\n                        type: \"Capabilities\",\n                        id: 7\n                      },\n                      limits: {\n                        type: \"Limits\",\n                        id: 8\n                      },\n                      supportsSchedules: {\n                        type: \"bool\",\n                        id: 100\n                      }\n                    },\n                    nested: {\n                      Capabilities: {\n                        fields: {\n                          eagerWorkflowStart: {\n                            type: \"bool\",\n                            id: 1\n                          },\n                          syncUpdate: {\n                            type: \"bool\",\n                            id: 2\n                          },\n                          asyncUpdate: {\n                            type: \"bool\",\n                            id: 3\n                          },\n                          workerHeartbeats: {\n                            type: \"bool\",\n                            id: 4\n                          },\n                          reportedProblemsSearchAttribute: {\n                            type: \"bool\",\n                            id: 5\n                          },\n                          workflowPause: {\n                            type: \"bool\",\n                            id: 6\n                          },\n                          standaloneActivities: {\n                            type: \"bool\",\n                            id: 7\n                          },\n                          workerPollCompleteOnShutdown: {\n                            type: \"bool\",\n                            id: 8\n                          },\n                          pollerAutoscaling: {\n                            type: \"bool\",\n                            id: 9\n                          }\n                        }\n                      },\n                      Limits: {\n                        fields: {\n                          blobSizeLimitError: {\n                            type: \"int64\",\n                            id: 1\n                          },\n                          memoSizeLimitError: {\n                            type: \"int64\",\n                            id: 2\n                          }\n                        }\n                      }\n                    }\n                  },\n                  NamespaceConfig: {\n                    fields: {\n                      workflowExecutionRetentionTtl: {\n                        type: \"google.protobuf.Duration\",\n                        id: 1\n                      },\n                      badBinaries: {\n                        type: \"BadBinaries\",\n                        id: 2\n                      },\n                      historyArchivalState: {\n                        type: \"temporal.api.enums.v1.ArchivalState\",\n                        id: 3\n                      },\n                      historyArchivalUri: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      visibilityArchivalState: {\n                        type: \"temporal.api.enums.v1.ArchivalState\",\n                        id: 5\n                      },\n                      visibilityArchivalUri: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      customSearchAttributeAliases: {\n                        keyType: \"string\",\n                        type: \"string\",\n                        id: 7\n                      }\n                    }\n                  },\n                  BadBinaries: {\n                    fields: {\n                      binaries: {\n                        keyType: \"string\",\n                        type: \"BadBinaryInfo\",\n                        id: 1\n                      }\n                    }\n                  },\n                  BadBinaryInfo: {\n                    fields: {\n                      reason: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      operator: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      createTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 3\n                      }\n                    }\n                  },\n                  UpdateNamespaceInfo: {\n                    fields: {\n                      description: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      ownerEmail: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      data: {\n                        keyType: \"string\",\n                        type: \"string\",\n                        id: 3\n                      },\n                      state: {\n                        type: \"temporal.api.enums.v1.NamespaceState\",\n                        id: 4\n                      }\n                    }\n                  },\n                  NamespaceFilter: {\n                    fields: {\n                      includeDeleted: {\n                        type: \"bool\",\n                        id: 1\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          query: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/query/v1;query\",\n                  java_package: \"io.temporal.api.query.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::Query::V1\",\n                  csharp_namespace: \"Temporalio.Api.Query.V1\"\n                },\n                nested: {\n                  WorkflowQuery: {\n                    fields: {\n                      queryType: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      queryArgs: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 2\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 3\n                      }\n                    }\n                  },\n                  WorkflowQueryResult: {\n                    fields: {\n                      resultType: {\n                        type: \"temporal.api.enums.v1.QueryResultType\",\n                        id: 1\n                      },\n                      answer: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 2\n                      },\n                      errorMessage: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 4\n                      }\n                    }\n                  },\n                  QueryRejected: {\n                    fields: {\n                      status: {\n                        type: \"temporal.api.enums.v1.WorkflowExecutionStatus\",\n                        id: 1\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          replication: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/replication/v1;replication\",\n                  java_package: \"io.temporal.api.replication.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::Replication::V1\",\n                  csharp_namespace: \"Temporalio.Api.Replication.V1\"\n                },\n                nested: {\n                  ClusterReplicationConfig: {\n                    fields: {\n                      clusterName: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  NamespaceReplicationConfig: {\n                    fields: {\n                      activeClusterName: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      clusters: {\n                        rule: \"repeated\",\n                        type: \"ClusterReplicationConfig\",\n                        id: 2\n                      },\n                      state: {\n                        type: \"temporal.api.enums.v1.ReplicationState\",\n                        id: 3\n                      }\n                    }\n                  },\n                  FailoverStatus: {\n                    fields: {\n                      failoverTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 1\n                      },\n                      failoverVersion: {\n                        type: \"int64\",\n                        id: 2\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          rules: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/rules/v1;rules\",\n                  java_package: \"io.temporal.api.rules.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::Rules::V1\",\n                  csharp_namespace: \"Temporalio.Api.Rules.V1\"\n                },\n                nested: {\n                  WorkflowRuleAction: {\n                    oneofs: {\n                      variant: {\n                        oneof: [\n                          \"activityPause\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      activityPause: {\n                        type: \"ActionActivityPause\",\n                        id: 1\n                      }\n                    },\n                    nested: {\n                      ActionActivityPause: {\n                        fields: {}\n                      }\n                    }\n                  },\n                  WorkflowRuleSpec: {\n                    oneofs: {\n                      trigger: {\n                        oneof: [\n                          \"activityStart\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      id: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      activityStart: {\n                        type: \"ActivityStartingTrigger\",\n                        id: 2\n                      },\n                      visibilityQuery: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      actions: {\n                        rule: \"repeated\",\n                        type: \"WorkflowRuleAction\",\n                        id: 4\n                      },\n                      expirationTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 5\n                      }\n                    },\n                    nested: {\n                      ActivityStartingTrigger: {\n                        fields: {\n                          predicate: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      }\n                    }\n                  },\n                  WorkflowRule: {\n                    fields: {\n                      createTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 1\n                      },\n                      spec: {\n                        type: \"WorkflowRuleSpec\",\n                        id: 2\n                      },\n                      createdByIdentity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      description: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          schedule: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/schedule/v1;schedule\",\n                  java_package: \"io.temporal.api.schedule.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::Schedule::V1\",\n                  csharp_namespace: \"Temporalio.Api.Schedule.V1\"\n                },\n                nested: {\n                  CalendarSpec: {\n                    fields: {\n                      second: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      minute: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      hour: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      dayOfMonth: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      month: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      year: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      dayOfWeek: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      comment: {\n                        type: \"string\",\n                        id: 8\n                      }\n                    }\n                  },\n                  Range: {\n                    fields: {\n                      start: {\n                        type: \"int32\",\n                        id: 1\n                      },\n                      end: {\n                        type: \"int32\",\n                        id: 2\n                      },\n                      step: {\n                        type: \"int32\",\n                        id: 3\n                      }\n                    }\n                  },\n                  StructuredCalendarSpec: {\n                    fields: {\n                      second: {\n                        rule: \"repeated\",\n                        type: \"Range\",\n                        id: 1\n                      },\n                      minute: {\n                        rule: \"repeated\",\n                        type: \"Range\",\n                        id: 2\n                      },\n                      hour: {\n                        rule: \"repeated\",\n                        type: \"Range\",\n                        id: 3\n                      },\n                      dayOfMonth: {\n                        rule: \"repeated\",\n                        type: \"Range\",\n                        id: 4\n                      },\n                      month: {\n                        rule: \"repeated\",\n                        type: \"Range\",\n                        id: 5\n                      },\n                      year: {\n                        rule: \"repeated\",\n                        type: \"Range\",\n                        id: 6\n                      },\n                      dayOfWeek: {\n                        rule: \"repeated\",\n                        type: \"Range\",\n                        id: 7\n                      },\n                      comment: {\n                        type: \"string\",\n                        id: 8\n                      }\n                    }\n                  },\n                  IntervalSpec: {\n                    fields: {\n                      interval: {\n                        type: \"google.protobuf.Duration\",\n                        id: 1\n                      },\n                      phase: {\n                        type: \"google.protobuf.Duration\",\n                        id: 2\n                      }\n                    }\n                  },\n                  ScheduleSpec: {\n                    fields: {\n                      structuredCalendar: {\n                        rule: \"repeated\",\n                        type: \"StructuredCalendarSpec\",\n                        id: 7\n                      },\n                      cronString: {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 8\n                      },\n                      calendar: {\n                        rule: \"repeated\",\n                        type: \"CalendarSpec\",\n                        id: 1\n                      },\n                      interval: {\n                        rule: \"repeated\",\n                        type: \"IntervalSpec\",\n                        id: 2\n                      },\n                      excludeCalendar: {\n                        rule: \"repeated\",\n                        type: \"CalendarSpec\",\n                        id: 3,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      excludeStructuredCalendar: {\n                        rule: \"repeated\",\n                        type: \"StructuredCalendarSpec\",\n                        id: 9\n                      },\n                      startTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 4\n                      },\n                      endTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 5\n                      },\n                      jitter: {\n                        type: \"google.protobuf.Duration\",\n                        id: 6\n                      },\n                      timezoneName: {\n                        type: \"string\",\n                        id: 10\n                      },\n                      timezoneData: {\n                        type: \"bytes\",\n                        id: 11\n                      }\n                    }\n                  },\n                  SchedulePolicies: {\n                    fields: {\n                      overlapPolicy: {\n                        type: \"temporal.api.enums.v1.ScheduleOverlapPolicy\",\n                        id: 1\n                      },\n                      catchupWindow: {\n                        type: \"google.protobuf.Duration\",\n                        id: 2\n                      },\n                      pauseOnFailure: {\n                        type: \"bool\",\n                        id: 3\n                      },\n                      keepOriginalWorkflowId: {\n                        type: \"bool\",\n                        id: 4\n                      }\n                    }\n                  },\n                  ScheduleAction: {\n                    oneofs: {\n                      action: {\n                        oneof: [\n                          \"startWorkflow\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      startWorkflow: {\n                        type: \"temporal.api.workflow.v1.NewWorkflowExecutionInfo\",\n                        id: 1\n                      }\n                    }\n                  },\n                  ScheduleActionResult: {\n                    fields: {\n                      scheduleTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 1\n                      },\n                      actualTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 2\n                      },\n                      startWorkflowResult: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 11\n                      },\n                      startWorkflowStatus: {\n                        type: \"temporal.api.enums.v1.WorkflowExecutionStatus\",\n                        id: 12\n                      }\n                    }\n                  },\n                  ScheduleState: {\n                    fields: {\n                      notes: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      paused: {\n                        type: \"bool\",\n                        id: 2\n                      },\n                      limitedActions: {\n                        type: \"bool\",\n                        id: 3\n                      },\n                      remainingActions: {\n                        type: \"int64\",\n                        id: 4\n                      }\n                    }\n                  },\n                  TriggerImmediatelyRequest: {\n                    fields: {\n                      overlapPolicy: {\n                        type: \"temporal.api.enums.v1.ScheduleOverlapPolicy\",\n                        id: 1\n                      },\n                      scheduledTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 2\n                      }\n                    }\n                  },\n                  BackfillRequest: {\n                    fields: {\n                      startTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 1\n                      },\n                      endTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 2\n                      },\n                      overlapPolicy: {\n                        type: \"temporal.api.enums.v1.ScheduleOverlapPolicy\",\n                        id: 3\n                      }\n                    }\n                  },\n                  SchedulePatch: {\n                    fields: {\n                      triggerImmediately: {\n                        type: \"TriggerImmediatelyRequest\",\n                        id: 1\n                      },\n                      backfillRequest: {\n                        rule: \"repeated\",\n                        type: \"BackfillRequest\",\n                        id: 2\n                      },\n                      pause: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      unpause: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  ScheduleInfo: {\n                    fields: {\n                      actionCount: {\n                        type: \"int64\",\n                        id: 1\n                      },\n                      missedCatchupWindow: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      overlapSkipped: {\n                        type: \"int64\",\n                        id: 3\n                      },\n                      bufferDropped: {\n                        type: \"int64\",\n                        id: 10\n                      },\n                      bufferSize: {\n                        type: \"int64\",\n                        id: 11\n                      },\n                      runningWorkflows: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 9\n                      },\n                      recentActions: {\n                        rule: \"repeated\",\n                        type: \"ScheduleActionResult\",\n                        id: 4\n                      },\n                      futureActionTimes: {\n                        rule: \"repeated\",\n                        type: \"google.protobuf.Timestamp\",\n                        id: 5\n                      },\n                      createTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 6\n                      },\n                      updateTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 7\n                      },\n                      invalidScheduleError: {\n                        type: \"string\",\n                        id: 8,\n                        options: {\n                          deprecated: true\n                        }\n                      }\n                    }\n                  },\n                  Schedule: {\n                    fields: {\n                      spec: {\n                        type: \"ScheduleSpec\",\n                        id: 1\n                      },\n                      action: {\n                        type: \"ScheduleAction\",\n                        id: 2\n                      },\n                      policies: {\n                        type: \"SchedulePolicies\",\n                        id: 3\n                      },\n                      state: {\n                        type: \"ScheduleState\",\n                        id: 4\n                      }\n                    }\n                  },\n                  ScheduleListInfo: {\n                    fields: {\n                      spec: {\n                        type: \"ScheduleSpec\",\n                        id: 1\n                      },\n                      workflowType: {\n                        type: \"temporal.api.common.v1.WorkflowType\",\n                        id: 2\n                      },\n                      notes: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      paused: {\n                        type: \"bool\",\n                        id: 4\n                      },\n                      recentActions: {\n                        rule: \"repeated\",\n                        type: \"ScheduleActionResult\",\n                        id: 5\n                      },\n                      futureActionTimes: {\n                        rule: \"repeated\",\n                        type: \"google.protobuf.Timestamp\",\n                        id: 6\n                      }\n                    }\n                  },\n                  ScheduleListEntry: {\n                    fields: {\n                      scheduleId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      memo: {\n                        type: \"temporal.api.common.v1.Memo\",\n                        id: 2\n                      },\n                      searchAttributes: {\n                        type: \"temporal.api.common.v1.SearchAttributes\",\n                        id: 3\n                      },\n                      info: {\n                        type: \"ScheduleListInfo\",\n                        id: 4\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          version: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/version/v1;version\",\n                  java_package: \"io.temporal.api.version.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::Version::V1\",\n                  csharp_namespace: \"Temporalio.Api.Version.V1\"\n                },\n                nested: {\n                  ReleaseInfo: {\n                    fields: {\n                      version: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      releaseTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 2\n                      },\n                      notes: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  Alert: {\n                    fields: {\n                      message: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      severity: {\n                        type: \"temporal.api.enums.v1.Severity\",\n                        id: 2\n                      }\n                    }\n                  },\n                  VersionInfo: {\n                    fields: {\n                      current: {\n                        type: \"ReleaseInfo\",\n                        id: 1\n                      },\n                      recommended: {\n                        type: \"ReleaseInfo\",\n                        id: 2\n                      },\n                      instructions: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      alerts: {\n                        rule: \"repeated\",\n                        type: \"Alert\",\n                        id: 4\n                      },\n                      lastUpdateTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 5\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          batch: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/batch/v1;batch\",\n                  java_package: \"io.temporal.api.batch.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::Batch::V1\",\n                  csharp_namespace: \"Temporalio.Api.Batch.V1\"\n                },\n                nested: {\n                  BatchOperationInfo: {\n                    fields: {\n                      jobId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      state: {\n                        type: \"temporal.api.enums.v1.BatchOperationState\",\n                        id: 2\n                      },\n                      startTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 3\n                      },\n                      closeTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 4\n                      }\n                    }\n                  },\n                  BatchOperationTermination: {\n                    fields: {\n                      details: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 1\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  BatchOperationSignal: {\n                    fields: {\n                      signal: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      input: {\n                        type: \"temporal.api.common.v1.Payloads\",\n                        id: 2\n                      },\n                      header: {\n                        type: \"temporal.api.common.v1.Header\",\n                        id: 3\n                      },\n                      identity: {\n                        type: \"string\",\n                        id: 4\n                      }\n                    }\n                  },\n                  BatchOperationCancellation: {\n                    fields: {\n                      identity: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  BatchOperationDeletion: {\n                    fields: {\n                      identity: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  BatchOperationReset: {\n                    fields: {\n                      identity: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      options: {\n                        type: \"temporal.api.common.v1.ResetOptions\",\n                        id: 4\n                      },\n                      resetType: {\n                        type: \"temporal.api.enums.v1.ResetType\",\n                        id: 1,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      resetReapplyType: {\n                        type: \"temporal.api.enums.v1.ResetReapplyType\",\n                        id: 2,\n                        options: {\n                          deprecated: true\n                        }\n                      },\n                      postResetOperations: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.workflow.v1.PostResetOperation\",\n                        id: 5\n                      }\n                    }\n                  },\n                  BatchOperationUpdateWorkflowExecutionOptions: {\n                    fields: {\n                      identity: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workflowExecutionOptions: {\n                        type: \"temporal.api.workflow.v1.WorkflowExecutionOptions\",\n                        id: 2\n                      },\n                      updateMask: {\n                        type: \"google.protobuf.FieldMask\",\n                        id: 3\n                      }\n                    }\n                  },\n                  BatchOperationUnpauseActivities: {\n                    oneofs: {\n                      activity: {\n                        oneof: [\n                          \"type\",\n                          \"matchAll\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      identity: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      type: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      matchAll: {\n                        type: \"bool\",\n                        id: 3\n                      },\n                      resetAttempts: {\n                        type: \"bool\",\n                        id: 4\n                      },\n                      resetHeartbeat: {\n                        type: \"bool\",\n                        id: 5\n                      },\n                      jitter: {\n                        type: \"google.protobuf.Duration\",\n                        id: 6\n                      }\n                    }\n                  },\n                  BatchOperationTriggerWorkflowRule: {\n                    oneofs: {\n                      rule: {\n                        oneof: [\n                          \"id\",\n                          \"spec\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      identity: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      id: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      spec: {\n                        type: \"temporal.api.rules.v1.WorkflowRuleSpec\",\n                        id: 3\n                      }\n                    }\n                  },\n                  BatchOperationResetActivities: {\n                    oneofs: {\n                      activity: {\n                        oneof: [\n                          \"type\",\n                          \"matchAll\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      identity: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      type: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      matchAll: {\n                        type: \"bool\",\n                        id: 3\n                      },\n                      resetAttempts: {\n                        type: \"bool\",\n                        id: 4\n                      },\n                      resetHeartbeat: {\n                        type: \"bool\",\n                        id: 5\n                      },\n                      keepPaused: {\n                        type: \"bool\",\n                        id: 6\n                      },\n                      jitter: {\n                        type: \"google.protobuf.Duration\",\n                        id: 7\n                      },\n                      restoreOriginalOptions: {\n                        type: \"bool\",\n                        id: 8\n                      }\n                    }\n                  },\n                  BatchOperationUpdateActivityOptions: {\n                    oneofs: {\n                      activity: {\n                        oneof: [\n                          \"type\",\n                          \"matchAll\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      identity: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      type: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      matchAll: {\n                        type: \"bool\",\n                        id: 3\n                      },\n                      activityOptions: {\n                        type: \"temporal.api.activity.v1.ActivityOptions\",\n                        id: 4\n                      },\n                      updateMask: {\n                        type: \"google.protobuf.FieldMask\",\n                        id: 5\n                      },\n                      restoreOriginal: {\n                        type: \"bool\",\n                        id: 6\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          worker: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/worker/v1;worker\",\n                  java_package: \"io.temporal.api.worker.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::Worker::V1\",\n                  csharp_namespace: \"Temporalio.Api.Worker.V1\"\n                },\n                nested: {\n                  WorkerPollerInfo: {\n                    fields: {\n                      currentPollers: {\n                        type: \"int32\",\n                        id: 1\n                      },\n                      lastSuccessfulPollTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 2\n                      },\n                      isAutoscaling: {\n                        type: \"bool\",\n                        id: 3\n                      }\n                    }\n                  },\n                  WorkerSlotsInfo: {\n                    fields: {\n                      currentAvailableSlots: {\n                        type: \"int32\",\n                        id: 1\n                      },\n                      currentUsedSlots: {\n                        type: \"int32\",\n                        id: 2\n                      },\n                      slotSupplierKind: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      totalProcessedTasks: {\n                        type: \"int32\",\n                        id: 4\n                      },\n                      totalFailedTasks: {\n                        type: \"int32\",\n                        id: 5\n                      },\n                      lastIntervalProcessedTasks: {\n                        type: \"int32\",\n                        id: 6\n                      },\n                      lastIntervalFailureTasks: {\n                        type: \"int32\",\n                        id: 7\n                      }\n                    }\n                  },\n                  WorkerHostInfo: {\n                    fields: {\n                      hostName: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workerGroupingKey: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      processId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      currentHostCpuUsage: {\n                        type: \"float\",\n                        id: 3\n                      },\n                      currentHostMemUsage: {\n                        type: \"float\",\n                        id: 4\n                      }\n                    }\n                  },\n                  WorkerHeartbeat: {\n                    fields: {\n                      workerInstanceKey: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workerIdentity: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      hostInfo: {\n                        type: \"WorkerHostInfo\",\n                        id: 3\n                      },\n                      taskQueue: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      deploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 5\n                      },\n                      sdkName: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      sdkVersion: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      status: {\n                        type: \"temporal.api.enums.v1.WorkerStatus\",\n                        id: 8\n                      },\n                      startTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 9\n                      },\n                      heartbeatTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 10\n                      },\n                      elapsedSinceLastHeartbeat: {\n                        type: \"google.protobuf.Duration\",\n                        id: 11\n                      },\n                      workflowTaskSlotsInfo: {\n                        type: \"WorkerSlotsInfo\",\n                        id: 12\n                      },\n                      activityTaskSlotsInfo: {\n                        type: \"WorkerSlotsInfo\",\n                        id: 13\n                      },\n                      nexusTaskSlotsInfo: {\n                        type: \"WorkerSlotsInfo\",\n                        id: 14\n                      },\n                      localActivitySlotsInfo: {\n                        type: \"WorkerSlotsInfo\",\n                        id: 15\n                      },\n                      workflowPollerInfo: {\n                        type: \"WorkerPollerInfo\",\n                        id: 16\n                      },\n                      workflowStickyPollerInfo: {\n                        type: \"WorkerPollerInfo\",\n                        id: 17\n                      },\n                      activityPollerInfo: {\n                        type: \"WorkerPollerInfo\",\n                        id: 18\n                      },\n                      nexusPollerInfo: {\n                        type: \"WorkerPollerInfo\",\n                        id: 19\n                      },\n                      totalStickyCacheHit: {\n                        type: \"int32\",\n                        id: 20\n                      },\n                      totalStickyCacheMiss: {\n                        type: \"int32\",\n                        id: 21\n                      },\n                      currentStickyCacheSize: {\n                        type: \"int32\",\n                        id: 22\n                      },\n                      plugins: {\n                        rule: \"repeated\",\n                        type: \"PluginInfo\",\n                        id: 23\n                      },\n                      drivers: {\n                        rule: \"repeated\",\n                        type: \"StorageDriverInfo\",\n                        id: 24\n                      }\n                    }\n                  },\n                  WorkerInfo: {\n                    fields: {\n                      workerHeartbeat: {\n                        type: \"WorkerHeartbeat\",\n                        id: 1\n                      }\n                    }\n                  },\n                  WorkerListInfo: {\n                    fields: {\n                      workerInstanceKey: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      workerIdentity: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      taskQueue: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      deploymentVersion: {\n                        type: \"temporal.api.deployment.v1.WorkerDeploymentVersion\",\n                        id: 4\n                      },\n                      sdkName: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      sdkVersion: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      status: {\n                        type: \"temporal.api.enums.v1.WorkerStatus\",\n                        id: 7\n                      },\n                      startTime: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 8\n                      },\n                      hostName: {\n                        type: \"string\",\n                        id: 9\n                      },\n                      workerGroupingKey: {\n                        type: \"string\",\n                        id: 10\n                      },\n                      processId: {\n                        type: \"string\",\n                        id: 11\n                      },\n                      plugins: {\n                        rule: \"repeated\",\n                        type: \"PluginInfo\",\n                        id: 12\n                      },\n                      drivers: {\n                        rule: \"repeated\",\n                        type: \"StorageDriverInfo\",\n                        id: 13\n                      }\n                    }\n                  },\n                  PluginInfo: {\n                    fields: {\n                      name: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      version: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  StorageDriverInfo: {\n                    fields: {\n                      type: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  WorkerCommand: {\n                    oneofs: {\n                      type: {\n                        oneof: [\n                          \"cancelActivity\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      cancelActivity: {\n                        type: \"CancelActivityCommand\",\n                        id: 1\n                      }\n                    }\n                  },\n                  CancelActivityCommand: {\n                    fields: {\n                      taskToken: {\n                        type: \"bytes\",\n                        id: 1\n                      }\n                    }\n                  },\n                  WorkerCommandResult: {\n                    oneofs: {\n                      type: {\n                        oneof: [\n                          \"cancelActivity\"\n                        ]\n                      }\n                    },\n                    fields: {\n                      cancelActivity: {\n                        type: \"CancelActivityResult\",\n                        id: 1\n                      }\n                    }\n                  },\n                  CancelActivityResult: {\n                    fields: {}\n                  }\n                }\n              }\n            }\n          },\n          protometa: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/protometa/v1;protometa\",\n                  java_package: \"io.temporal.api.protometa.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"AnnotationsProto\",\n                  ruby_package: \"Temporalio::Api::Protometa::V1\",\n                  csharp_namespace: \"Temporalio.Api.Protometa.V1\"\n                },\n                nested: {\n                  RequestHeaderAnnotation: {\n                    fields: {\n                      header: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      value: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  requestHeader: {\n                    rule: \"repeated\",\n                    type: \"RequestHeaderAnnotation\",\n                    id: 7234001,\n                    extend: \"google.protobuf.MethodOptions\"\n                  }\n                }\n              }\n            }\n          },\n          operatorservice: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/operatorservice/v1;operatorservice\",\n                  java_package: \"io.temporal.api.operatorservice.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"RequestResponseProto\",\n                  ruby_package: \"Temporalio::Api::OperatorService::V1\",\n                  csharp_namespace: \"Temporalio.Api.OperatorService.V1\"\n                },\n                nested: {\n                  OperatorService: {\n                    methods: {\n                      AddSearchAttributes: {\n                        requestType: \"AddSearchAttributesRequest\",\n                        responseType: \"AddSearchAttributesResponse\"\n                      },\n                      RemoveSearchAttributes: {\n                        requestType: \"RemoveSearchAttributesRequest\",\n                        responseType: \"RemoveSearchAttributesResponse\"\n                      },\n                      ListSearchAttributes: {\n                        requestType: \"ListSearchAttributesRequest\",\n                        responseType: \"ListSearchAttributesResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/cluster/namespaces/{namespace}/search-attributes\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/namespaces/{namespace}/search-attributes\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/cluster/namespaces/{namespace}/search-attributes\",\n                              additional_bindings: {\n                                get: \"/api/v1/namespaces/{namespace}/search-attributes\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      DeleteNamespace: {\n                        requestType: \"DeleteNamespaceRequest\",\n                        responseType: \"DeleteNamespaceResponse\"\n                      },\n                      AddOrUpdateRemoteCluster: {\n                        requestType: \"AddOrUpdateRemoteClusterRequest\",\n                        responseType: \"AddOrUpdateRemoteClusterResponse\"\n                      },\n                      RemoveRemoteCluster: {\n                        requestType: \"RemoveRemoteClusterRequest\",\n                        responseType: \"RemoveRemoteClusterResponse\"\n                      },\n                      ListClusters: {\n                        requestType: \"ListClustersRequest\",\n                        responseType: \"ListClustersResponse\"\n                      },\n                      GetNexusEndpoint: {\n                        requestType: \"GetNexusEndpointRequest\",\n                        responseType: \"GetNexusEndpointResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/cluster/nexus/endpoints/{id}\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/nexus/endpoints/{id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/cluster/nexus/endpoints/{id}\",\n                              additional_bindings: {\n                                get: \"/api/v1/nexus/endpoints/{id}\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      CreateNexusEndpoint: {\n                        requestType: \"CreateNexusEndpointRequest\",\n                        responseType: \"CreateNexusEndpointResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/cluster/nexus/endpoints\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/nexus/endpoints\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/cluster/nexus/endpoints\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/nexus/endpoints\",\n                                body: \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      UpdateNexusEndpoint: {\n                        requestType: \"UpdateNexusEndpointRequest\",\n                        responseType: \"UpdateNexusEndpointResponse\",\n                        options: {\n                          \"(google.api.http).post\": \"/cluster/nexus/endpoints/{id}/update\",\n                          \"(google.api.http).body\": \"*\",\n                          \"(google.api.http).additional_bindings.post\": \"/api/v1/nexus/endpoints/{id}/update\",\n                          \"(google.api.http).additional_bindings.body\": \"*\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              post: \"/cluster/nexus/endpoints/{id}/update\",\n                              body: \"*\",\n                              additional_bindings: {\n                                post: \"/api/v1/nexus/endpoints/{id}/update\",\n                                body: \"*\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      DeleteNexusEndpoint: {\n                        requestType: \"DeleteNexusEndpointRequest\",\n                        responseType: \"DeleteNexusEndpointResponse\",\n                        options: {\n                          \"(google.api.http).delete\": \"/cluster/nexus/endpoints/{id}\",\n                          \"(google.api.http).additional_bindings.delete\": \"/api/v1/nexus/endpoints/{id}\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              \"delete\": \"/cluster/nexus/endpoints/{id}\",\n                              additional_bindings: {\n                                \"delete\": \"/api/v1/nexus/endpoints/{id}\"\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      ListNexusEndpoints: {\n                        requestType: \"ListNexusEndpointsRequest\",\n                        responseType: \"ListNexusEndpointsResponse\",\n                        options: {\n                          \"(google.api.http).get\": \"/cluster/nexus/endpoints\",\n                          \"(google.api.http).additional_bindings.get\": \"/api/v1/nexus/endpoints\"\n                        },\n                        parsedOptions: [\n                          {\n                            \"(google.api.http)\": {\n                              get: \"/cluster/nexus/endpoints\",\n                              additional_bindings: {\n                                get: \"/api/v1/nexus/endpoints\"\n                              }\n                            }\n                          }\n                        ]\n                      }\n                    }\n                  },\n                  AddSearchAttributesRequest: {\n                    fields: {\n                      searchAttributes: {\n                        keyType: \"string\",\n                        type: \"temporal.api.enums.v1.IndexedValueType\",\n                        id: 1\n                      },\n                      namespace: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  AddSearchAttributesResponse: {\n                    fields: {}\n                  },\n                  RemoveSearchAttributesRequest: {\n                    fields: {\n                      searchAttributes: {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 1\n                      },\n                      namespace: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  RemoveSearchAttributesResponse: {\n                    fields: {}\n                  },\n                  ListSearchAttributesRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  ListSearchAttributesResponse: {\n                    fields: {\n                      customAttributes: {\n                        keyType: \"string\",\n                        type: \"temporal.api.enums.v1.IndexedValueType\",\n                        id: 1\n                      },\n                      systemAttributes: {\n                        keyType: \"string\",\n                        type: \"temporal.api.enums.v1.IndexedValueType\",\n                        id: 2\n                      },\n                      storageSchema: {\n                        keyType: \"string\",\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  DeleteNamespaceRequest: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      namespaceId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      namespaceDeleteDelay: {\n                        type: \"google.protobuf.Duration\",\n                        id: 3\n                      }\n                    }\n                  },\n                  DeleteNamespaceResponse: {\n                    fields: {\n                      deletedNamespace: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  AddOrUpdateRemoteClusterRequest: {\n                    fields: {\n                      frontendAddress: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      enableRemoteClusterConnection: {\n                        type: \"bool\",\n                        id: 2\n                      },\n                      frontendHttpAddress: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      enableReplication: {\n                        type: \"bool\",\n                        id: 4\n                      }\n                    }\n                  },\n                  AddOrUpdateRemoteClusterResponse: {\n                    fields: {}\n                  },\n                  RemoveRemoteClusterRequest: {\n                    fields: {\n                      clusterName: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  RemoveRemoteClusterResponse: {\n                    fields: {}\n                  },\n                  ListClustersRequest: {\n                    fields: {\n                      pageSize: {\n                        type: \"int32\",\n                        id: 1\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 2\n                      }\n                    }\n                  },\n                  ListClustersResponse: {\n                    fields: {\n                      clusters: {\n                        rule: \"repeated\",\n                        type: \"ClusterMetadata\",\n                        id: 1\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 4\n                      }\n                    }\n                  },\n                  ClusterMetadata: {\n                    fields: {\n                      clusterName: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      clusterId: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      address: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      httpAddress: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      initialFailoverVersion: {\n                        type: \"int64\",\n                        id: 4\n                      },\n                      historyShardCount: {\n                        type: \"int32\",\n                        id: 5\n                      },\n                      isConnectionEnabled: {\n                        type: \"bool\",\n                        id: 6\n                      },\n                      isReplicationEnabled: {\n                        type: \"bool\",\n                        id: 8\n                      }\n                    }\n                  },\n                  GetNexusEndpointRequest: {\n                    fields: {\n                      id: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  GetNexusEndpointResponse: {\n                    fields: {\n                      endpoint: {\n                        type: \"temporal.api.nexus.v1.Endpoint\",\n                        id: 1\n                      }\n                    }\n                  },\n                  CreateNexusEndpointRequest: {\n                    fields: {\n                      spec: {\n                        type: \"temporal.api.nexus.v1.EndpointSpec\",\n                        id: 1\n                      }\n                    }\n                  },\n                  CreateNexusEndpointResponse: {\n                    fields: {\n                      endpoint: {\n                        type: \"temporal.api.nexus.v1.Endpoint\",\n                        id: 1\n                      }\n                    }\n                  },\n                  UpdateNexusEndpointRequest: {\n                    fields: {\n                      id: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      version: {\n                        type: \"int64\",\n                        id: 2\n                      },\n                      spec: {\n                        type: \"temporal.api.nexus.v1.EndpointSpec\",\n                        id: 3\n                      }\n                    }\n                  },\n                  UpdateNexusEndpointResponse: {\n                    fields: {\n                      endpoint: {\n                        type: \"temporal.api.nexus.v1.Endpoint\",\n                        id: 1\n                      }\n                    }\n                  },\n                  DeleteNexusEndpointRequest: {\n                    fields: {\n                      id: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      version: {\n                        type: \"int64\",\n                        id: 2\n                      }\n                    }\n                  },\n                  DeleteNexusEndpointResponse: {\n                    fields: {}\n                  },\n                  ListNexusEndpointsRequest: {\n                    fields: {\n                      pageSize: {\n                        type: \"int32\",\n                        id: 1\n                      },\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 2\n                      },\n                      name: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  ListNexusEndpointsResponse: {\n                    fields: {\n                      nextPageToken: {\n                        type: \"bytes\",\n                        id: 1\n                      },\n                      endpoints: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.nexus.v1.Endpoint\",\n                        id: 2\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          cloud: {\n            nested: {\n              cloudservice: {\n                nested: {\n                  v1: {\n                    options: {\n                      go_package: \"go.temporal.io/api/cloud/cloudservice/v1;cloudservice\",\n                      java_package: \"io.temporal.api.cloud.cloudservice.v1\",\n                      java_multiple_files: true,\n                      java_outer_classname: \"RequestResponseProto\",\n                      ruby_package: \"Temporalio::Api::Cloud::CloudService::V1\",\n                      csharp_namespace: \"Temporalio.Api.Cloud.CloudService.V1\",\n                      \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger).info.title\": \"Temporal Cloud Ops API\",\n                      \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger).info.description\": \"Programmatic access to manage Temporal Cloud control plane resources including namespaces, users, service accounts, and more.\\n\\n## Authentication\\n\\nAll API requests require authentication using an API Key. Include your API key in the `Authorization` header using the Bearer scheme:\\n\\n```\\nAuthorization: Bearer YOUR_API_KEY\\n```\\n\\nAPI keys can be created and managed through the [API Keys endpoints](#tag/API-Keys) or via the Temporal Cloud UI. For more information, see [API Keys Documentation](https://docs.temporal.io/cloud/api-keys).\\n\\n## Authorization\\n\\nThe API uses Role-Based Access Control (RBAC) to manage permissions. Each operation requires specific role-based permissions in addition to a valid API key.\\n\\n### Account-Level Roles\\n\\n- **Account Owner** - Full account administration access\\n- **Account Admin** - Manage namespaces, users, and service accounts  \\n- **Account Developer** - Create namespaces and manage Nexus endpoints\\n- **Finance Admin** - View usage and billing information\\n- **Account Read** - Read-only access to account resources\\n\\n### Namespace-Level Roles\\n\\n- **Namespace Admin** - Full access to namespace configuration and data\\n- **Namespace Write** - Execute workflows and modify workflow data\\n- **Namespace Read** - Read-only access to namespace data\\n\\nNamespace-level permissions are scoped to specific namespaces. A user or service account may have different permission levels across different namespaces.\\n\\nFor detailed information about roles and permissions, see [Access Control Documentation](https://docs.temporal.io/cloud/users).\",\n                      \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger).info.version\": \"1.0\",\n                      \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger).info.extensions.key\": \"x-logo\",\n                      \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger).info.extensions.value.struct_value.fields.key\": \"url\",\n                      \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger).info.extensions.value.struct_value.fields.value.string_value\": \"https://images.ctfassets.net/0uuz8ydxyd9p/4YGUnEoCaH9SyoUDhlJkau/e1600205d17eeee3033d926ef06664a9/Temporal_LogoLockup_Horizontal_dark_1.svg\",\n                      \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger).external_docs.url\": \"https://docs.temporal.io/cloud\",\n                      \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger).external_docs.description\": \"Temporal Cloud Documentation\"\n                    },\n                    nested: {\n                      CloudService: {\n                        methods: {\n                          GetCurrentIdentity: {\n                            requestType: \"GetCurrentIdentityRequest\",\n                            responseType: \"GetCurrentIdentityResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/current-identity\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get current identity\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns information about the currently authenticated user or service account principal\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/current-identity\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Account\"\n                                  ],\n                                  summary: \"Get current identity\",\n                                  description: \"Returns information about the currently authenticated user or service account principal\"\n                                }\n                              }\n                            ]\n                          },\n                          GetUsers: {\n                            requestType: \"GetUsersRequest\",\n                            responseType: \"GetUsersResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List all users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all users in the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).operation_id\": \"listUsers\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User management documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/users\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Users\"\n                                  ],\n                                  summary: \"List all users\",\n                                  description: \"Returns a list of all users in the account\",\n                                  operation_id: \"listUsers\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/users\",\n                                    description: \"User management documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetUser: {\n                            requestType: \"GetUserRequest\",\n                            responseType: \"GetUserResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/users/{user_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get user by ID\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Takes a user ID, returns user details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User management documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/users/{user_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Users\"\n                                  ],\n                                  summary: \"Get user by ID\",\n                                  description: \"Takes a user ID, returns user details\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/users\",\n                                    description: \"User management documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          CreateUser: {\n                            requestType: \"CreateUserRequest\",\n                            responseType: \"CreateUserResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/users\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create a user\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a new user in the account\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/users\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Users\"\n                                  ],\n                                  summary: \"Create a user\",\n                                  description: \"Creates a new user in the account\"\n                                }\n                              }\n                            ]\n                          },\n                          UpdateUser: {\n                            requestType: \"UpdateUserRequest\",\n                            responseType: \"UpdateUserResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/users/{user_id}\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update a user\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates an existing user's details\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/users/{user_id}\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Users\"\n                                  ],\n                                  summary: \"Update a user\",\n                                  description: \"Updates an existing user's details\"\n                                }\n                              }\n                            ]\n                          },\n                          DeleteUser: {\n                            requestType: \"DeleteUserRequest\",\n                            responseType: \"DeleteUserResponse\",\n                            options: {\n                              \"(google.api.http).delete\": \"/cloud/users/{user_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Delete a user\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Removes a user from the account\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/users/{user_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Users\"\n                                  ],\n                                  summary: \"Delete a user\",\n                                  description: \"Removes a user from the account\"\n                                }\n                              }\n                            ]\n                          },\n                          SetUserNamespaceAccess: {\n                            requestType: \"SetUserNamespaceAccessRequest\",\n                            responseType: \"SetUserNamespaceAccessResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/users/{user_id}/access\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Users\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Set user namespace access\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Configures a user's permissions for a specific namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/users-namespace-level-permissions\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Namespace permissions documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/namespaces/{namespace}/users/{user_id}/access\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Users\"\n                                  ],\n                                  summary: \"Set user namespace access\",\n                                  description: \"Configures a user's permissions for a specific namespace\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/users-namespace-level-permissions\",\n                                    description: \"Namespace permissions documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetAsyncOperation: {\n                            requestType: \"GetAsyncOperationRequest\",\n                            responseType: \"GetAsyncOperationResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/operations/{async_operation_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Operations\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get async operation status\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns the current status and details of an asynchronous operation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/operations/{async_operation_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Operations\"\n                                  ],\n                                  summary: \"Get async operation status\",\n                                  description: \"Returns the current status and details of an asynchronous operation\"\n                                }\n                              }\n                            ]\n                          },\n                          CreateNamespace: {\n                            requestType: \"CreateNamespaceRequest\",\n                            responseType: \"CreateNamespaceResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/namespaces\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create a namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a new namespace in the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Namespace management documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/namespaces\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Namespaces\"\n                                  ],\n                                  summary: \"Create a namespace\",\n                                  description: \"Creates a new namespace in the account\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/namespaces\",\n                                    description: \"Namespace management documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetNamespaces: {\n                            requestType: \"GetNamespacesRequest\",\n                            responseType: \"GetNamespacesResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List all namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all namespaces in the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Namespace management documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/namespaces\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Namespaces\"\n                                  ],\n                                  summary: \"List all namespaces\",\n                                  description: \"Returns a list of all namespaces in the account\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/namespaces\",\n                                    description: \"Namespace management documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetNamespace: {\n                            requestType: \"GetNamespaceRequest\",\n                            responseType: \"GetNamespaceResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/namespaces/{namespace}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get namespace details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about a specific namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Namespace management documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/namespaces/{namespace}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Namespaces\"\n                                  ],\n                                  summary: \"Get namespace details\",\n                                  description: \"Returns detailed information about a specific namespace\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/namespaces\",\n                                    description: \"Namespace management documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          UpdateNamespace: {\n                            requestType: \"UpdateNamespaceRequest\",\n                            responseType: \"UpdateNamespaceResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update a namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates configuration for an existing namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Namespace management documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/namespaces/{namespace}\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Namespaces\"\n                                  ],\n                                  summary: \"Update a namespace\",\n                                  description: \"Updates configuration for an existing namespace\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/namespaces\",\n                                    description: \"Namespace management documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          RenameCustomSearchAttribute: {\n                            requestType: \"RenameCustomSearchAttributeRequest\",\n                            responseType: \"RenameCustomSearchAttributeResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/rename-custom-search-attribute\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Rename custom search attribute\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Renames a custom search attribute in a namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/search-attribute#custom-search-attribute\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Custom Search Attributes documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/namespaces/{namespace}/rename-custom-search-attribute\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Namespaces\"\n                                  ],\n                                  summary: \"Rename custom search attribute\",\n                                  description: \"Renames a custom search attribute in a namespace\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/search-attribute#custom-search-attribute\",\n                                    description: \"Custom Search Attributes documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          DeleteNamespace: {\n                            requestType: \"DeleteNamespaceRequest\",\n                            responseType: \"DeleteNamespaceResponse\",\n                            options: {\n                              \"(google.api.http).delete\": \"/cloud/namespaces/{namespace}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Delete a namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Permanently deletes a namespace and all its data\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Namespace management documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/namespaces/{namespace}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Namespaces\"\n                                  ],\n                                  summary: \"Delete a namespace\",\n                                  description: \"Permanently deletes a namespace and all its data\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/namespaces\",\n                                    description: \"Namespace management documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          FailoverNamespaceRegion: {\n                            requestType: \"FailoverNamespaceRegionRequest\",\n                            responseType: \"FailoverNamespaceRegionResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/failover-region\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"High Availability\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Failover namespace region\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Initiates a regional failover for a high availability namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/high-availability\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"High availability namespace documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/namespaces/{namespace}/failover-region\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"High Availability\"\n                                  ],\n                                  summary: \"Failover namespace region\",\n                                  description: \"Initiates a regional failover for a high availability namespace\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/high-availability\",\n                                    description: \"High availability namespace documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          AddNamespaceRegion: {\n                            requestType: \"AddNamespaceRegionRequest\",\n                            responseType: \"AddNamespaceRegionResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/add-region\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"High Availability\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Add namespace replica\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Adds a new replica to an existing namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/high-availability\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"High availability namespace documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/namespaces/{namespace}/add-region\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"High Availability\"\n                                  ],\n                                  summary: \"Add namespace replica\",\n                                  description: \"Adds a new replica to an existing namespace\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/high-availability\",\n                                    description: \"High availability namespace documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          DeleteNamespaceRegion: {\n                            requestType: \"DeleteNamespaceRegionRequest\",\n                            responseType: \"DeleteNamespaceRegionResponse\",\n                            options: {\n                              \"(google.api.http).delete\": \"/cloud/namespaces/{namespace}/regions/{region}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"High Availability\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Remove namespace replica\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Removes a replica from a high availability namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/high-availability\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"High availability namespace documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/namespaces/{namespace}/regions/{region}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"High Availability\"\n                                  ],\n                                  summary: \"Remove namespace replica\",\n                                  description: \"Removes a replica from a high availability namespace\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/high-availability\",\n                                    description: \"High availability namespace documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetRegions: {\n                            requestType: \"GetRegionsRequest\",\n                            responseType: \"GetRegionsResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/regions\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Regions\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List all regions\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all available cloud regions\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/regions\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Regions documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/regions\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Regions\"\n                                  ],\n                                  summary: \"List all regions\",\n                                  description: \"Returns a list of all available cloud regions\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/regions\",\n                                    description: \"Regions documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetRegion: {\n                            requestType: \"GetRegionRequest\",\n                            responseType: \"GetRegionResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/regions/{region}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Regions\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get region details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about a specific region\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/regions\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Regions documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/regions/{region}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Regions\"\n                                  ],\n                                  summary: \"Get region details\",\n                                  description: \"Returns detailed information about a specific region\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/regions\",\n                                    description: \"Regions documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetApiKeys: {\n                            requestType: \"GetApiKeysRequest\",\n                            responseType: \"GetApiKeysResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/api-keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"API Keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List all API keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all API keys in the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/api-keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"API Keys documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/api-keys\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"API Keys\"\n                                  ],\n                                  summary: \"List all API keys\",\n                                  description: \"Returns a list of all API keys in the account\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/api-keys\",\n                                    description: \"API Keys documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetApiKey: {\n                            requestType: \"GetApiKeyRequest\",\n                            responseType: \"GetApiKeyResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/api-keys/{key_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"API Keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get API key details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about a specific API key\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/api-keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"API Keys documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/api-keys/{key_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"API Keys\"\n                                  ],\n                                  summary: \"Get API key details\",\n                                  description: \"Returns detailed information about a specific API key\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/api-keys\",\n                                    description: \"API Keys documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          CreateApiKey: {\n                            requestType: \"CreateApiKeyRequest\",\n                            responseType: \"CreateApiKeyResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/api-keys\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"API Keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create an API key\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a new API key for programmatic access\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/api-keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"API Keys documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/api-keys\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"API Keys\"\n                                  ],\n                                  summary: \"Create an API key\",\n                                  description: \"Creates a new API key for programmatic access\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/api-keys\",\n                                    description: \"API Keys documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          UpdateApiKey: {\n                            requestType: \"UpdateApiKeyRequest\",\n                            responseType: \"UpdateApiKeyResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/api-keys/{key_id}\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"API Keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update an API key\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates an existing API key's properties\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/api-keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"API Keys documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/api-keys/{key_id}\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"API Keys\"\n                                  ],\n                                  summary: \"Update an API key\",\n                                  description: \"Updates an existing API key's properties\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/api-keys\",\n                                    description: \"API Keys documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          DeleteApiKey: {\n                            requestType: \"DeleteApiKeyRequest\",\n                            responseType: \"DeleteApiKeyResponse\",\n                            options: {\n                              \"(google.api.http).delete\": \"/cloud/api-keys/{key_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"API Keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Delete an API key\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Revokes and deletes an API key\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/api-keys\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"API Keys documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/api-keys/{key_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"API Keys\"\n                                  ],\n                                  summary: \"Delete an API key\",\n                                  description: \"Revokes and deletes an API key\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/api-keys\",\n                                    description: \"API Keys documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetNexusEndpoints: {\n                            requestType: \"GetNexusEndpointsRequest\",\n                            responseType: \"GetNexusEndpointsResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/nexus/endpoints\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List all Nexus endpoints\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all Nexus endpoints in the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Nexus documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/nexus/endpoints\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Nexus\"\n                                  ],\n                                  summary: \"List all Nexus endpoints\",\n                                  description: \"Returns a list of all Nexus endpoints in the account\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/nexus\",\n                                    description: \"Nexus documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetNexusEndpoint: {\n                            requestType: \"GetNexusEndpointRequest\",\n                            responseType: \"GetNexusEndpointResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/nexus/endpoints/{endpoint_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get Nexus endpoint details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about a specific Nexus endpoint\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Nexus documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/nexus/endpoints/{endpoint_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Nexus\"\n                                  ],\n                                  summary: \"Get Nexus endpoint details\",\n                                  description: \"Returns detailed information about a specific Nexus endpoint\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/nexus\",\n                                    description: \"Nexus documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          CreateNexusEndpoint: {\n                            requestType: \"CreateNexusEndpointRequest\",\n                            responseType: \"CreateNexusEndpointResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/nexus/endpoints\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create a Nexus endpoint\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a new Nexus endpoint for cross-namespace communication\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Nexus documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/nexus/endpoints\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Nexus\"\n                                  ],\n                                  summary: \"Create a Nexus endpoint\",\n                                  description: \"Creates a new Nexus endpoint for cross-namespace communication\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/nexus\",\n                                    description: \"Nexus documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          UpdateNexusEndpoint: {\n                            requestType: \"UpdateNexusEndpointRequest\",\n                            responseType: \"UpdateNexusEndpointResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/nexus/endpoints/{endpoint_id}\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update a Nexus endpoint\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates an existing Nexus endpoint's configuration\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Nexus documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/nexus/endpoints/{endpoint_id}\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Nexus\"\n                                  ],\n                                  summary: \"Update a Nexus endpoint\",\n                                  description: \"Updates an existing Nexus endpoint's configuration\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/nexus\",\n                                    description: \"Nexus documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          DeleteNexusEndpoint: {\n                            requestType: \"DeleteNexusEndpointRequest\",\n                            responseType: \"DeleteNexusEndpointResponse\",\n                            options: {\n                              \"(google.api.http).delete\": \"/cloud/nexus/endpoints/{endpoint_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Delete a Nexus endpoint\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Removes a Nexus endpoint from the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/nexus\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Nexus documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/nexus/endpoints/{endpoint_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Nexus\"\n                                  ],\n                                  summary: \"Delete a Nexus endpoint\",\n                                  description: \"Removes a Nexus endpoint from the account\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/nexus\",\n                                    description: \"Nexus documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetUserGroups: {\n                            requestType: \"GetUserGroupsRequest\",\n                            responseType: \"GetUserGroupsResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/user-groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List all user groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all user groups in the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/users-account-level-roles\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User groups documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/user-groups\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Groups\"\n                                  ],\n                                  summary: \"List all user groups\",\n                                  description: \"Returns a list of all user groups in the account\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/users-account-level-roles\",\n                                    description: \"User groups documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetUserGroup: {\n                            requestType: \"GetUserGroupRequest\",\n                            responseType: \"GetUserGroupResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/user-groups/{group_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get user group details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about a specific user group\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/user-groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User groups documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/user-groups/{group_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Groups\"\n                                  ],\n                                  summary: \"Get user group details\",\n                                  description: \"Returns detailed information about a specific user group\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/user-groups\",\n                                    description: \"User groups documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          CreateUserGroup: {\n                            requestType: \"CreateUserGroupRequest\",\n                            responseType: \"CreateUserGroupResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/user-groups\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create a user group\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a new user group for managing permissions\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/user-groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User groups documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/user-groups\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Groups\"\n                                  ],\n                                  summary: \"Create a user group\",\n                                  description: \"Creates a new user group for managing permissions\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/user-groups\",\n                                    description: \"User groups documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          UpdateUserGroup: {\n                            requestType: \"UpdateUserGroupRequest\",\n                            responseType: \"UpdateUserGroupResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/user-groups/{group_id}\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update a user group\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates an existing user group's properties\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/user-groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User groups documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/user-groups/{group_id}\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Groups\"\n                                  ],\n                                  summary: \"Update a user group\",\n                                  description: \"Updates an existing user group's properties\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/user-groups\",\n                                    description: \"User groups documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          DeleteUserGroup: {\n                            requestType: \"DeleteUserGroupRequest\",\n                            responseType: \"DeleteUserGroupResponse\",\n                            options: {\n                              \"(google.api.http).delete\": \"/cloud/user-groups/{group_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Delete a user group\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Removes a user group from the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/user-groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User groups documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/user-groups/{group_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Groups\"\n                                  ],\n                                  summary: \"Delete a user group\",\n                                  description: \"Removes a user group from the account\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/user-groups\",\n                                    description: \"User groups documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          SetUserGroupNamespaceAccess: {\n                            requestType: \"SetUserGroupNamespaceAccessRequest\",\n                            responseType: \"SetUserGroupNamespaceAccessResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/user-groups/{group_id}/access\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Set user group namespace access\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Configures a user group's permissions for a specific namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/user-groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User groups documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/namespaces/{namespace}/user-groups/{group_id}/access\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Groups\"\n                                  ],\n                                  summary: \"Set user group namespace access\",\n                                  description: \"Configures a user group's permissions for a specific namespace\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/user-groups\",\n                                    description: \"User groups documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          AddUserGroupMember: {\n                            requestType: \"AddUserGroupMemberRequest\",\n                            responseType: \"AddUserGroupMemberResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/user-groups/{group_id}/members\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Add user to group\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Adds a user to a user group (Cloud groups only)\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/user-groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User groups documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/user-groups/{group_id}/members\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Groups\"\n                                  ],\n                                  summary: \"Add user to group\",\n                                  description: \"Adds a user to a user group (Cloud groups only)\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/user-groups\",\n                                    description: \"User groups documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          RemoveUserGroupMember: {\n                            requestType: \"RemoveUserGroupMemberRequest\",\n                            responseType: \"RemoveUserGroupMemberResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/user-groups/{group_id}/remove-member\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Remove user from group\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Removes a user from a user group (Cloud groups only)\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/user-groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User groups documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/user-groups/{group_id}/remove-member\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Groups\"\n                                  ],\n                                  summary: \"Remove user from group\",\n                                  description: \"Removes a user from a user group (Cloud groups only)\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/user-groups\",\n                                    description: \"User groups documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetUserGroupMembers: {\n                            requestType: \"GetUserGroupMembersRequest\",\n                            responseType: \"GetUserGroupMembersResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/user-groups/{group_id}/members\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List users in a group\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all users in a user group\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/user-groups\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"User groups documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/user-groups/{group_id}/members\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Groups\"\n                                  ],\n                                  summary: \"List users in a group\",\n                                  description: \"Returns a list of all users in a user group\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/user-groups\",\n                                    description: \"User groups documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          CreateServiceAccount: {\n                            requestType: \"CreateServiceAccountRequest\",\n                            responseType: \"CreateServiceAccountResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/service-accounts\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Service Accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create a service account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a new service account for automated access\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Service Accounts documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/service-accounts\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Service Accounts\"\n                                  ],\n                                  summary: \"Create a service account\",\n                                  description: \"Creates a new service account for automated access\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/service-accounts\",\n                                    description: \"Service Accounts documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetServiceAccount: {\n                            requestType: \"GetServiceAccountRequest\",\n                            responseType: \"GetServiceAccountResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/service-accounts/{service_account_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Service Accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get service account details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about a specific service account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Service Accounts documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/service-accounts/{service_account_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Service Accounts\"\n                                  ],\n                                  summary: \"Get service account details\",\n                                  description: \"Returns detailed information about a specific service account\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/service-accounts\",\n                                    description: \"Service Accounts documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetServiceAccounts: {\n                            requestType: \"GetServiceAccountsRequest\",\n                            responseType: \"GetServiceAccountsResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/service-accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Service Accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List all service accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all service accounts in the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Service Accounts documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/service-accounts\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Service Accounts\"\n                                  ],\n                                  summary: \"List all service accounts\",\n                                  description: \"Returns a list of all service accounts in the account\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/service-accounts\",\n                                    description: \"Service Accounts documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          UpdateServiceAccount: {\n                            requestType: \"UpdateServiceAccountRequest\",\n                            responseType: \"UpdateServiceAccountResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/service-accounts/{service_account_id}\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Service Accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update a service account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates an existing service account's properties\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Service Accounts documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/service-accounts/{service_account_id}\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Service Accounts\"\n                                  ],\n                                  summary: \"Update a service account\",\n                                  description: \"Updates an existing service account's properties\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/service-accounts\",\n                                    description: \"Service Accounts documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          SetServiceAccountNamespaceAccess: {\n                            requestType: \"SetServiceAccountNamespaceAccessRequest\",\n                            responseType: \"SetServiceAccountNamespaceAccessResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/service-accounts/{service_account_id}/access\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Service Accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Set service account namespace access\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Configures a service account's permissions for a specific namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Service Accounts documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/namespaces/{namespace}/service-accounts/{service_account_id}/access\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Service Accounts\"\n                                  ],\n                                  summary: \"Set service account namespace access\",\n                                  description: \"Configures a service account's permissions for a specific namespace\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/service-accounts\",\n                                    description: \"Service Accounts documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          DeleteServiceAccount: {\n                            requestType: \"DeleteServiceAccountRequest\",\n                            responseType: \"DeleteServiceAccountResponse\",\n                            options: {\n                              \"(google.api.http).delete\": \"/cloud/service-accounts/{service_account_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Service Accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Delete a service account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Removes a service account from the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/service-accounts\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Service Accounts documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/service-accounts/{service_account_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Service Accounts\"\n                                  ],\n                                  summary: \"Delete a service account\",\n                                  description: \"Removes a service account from the account\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/service-accounts\",\n                                    description: \"Service Accounts documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetUsage: {\n                            requestType: \"GetUsageRequest\",\n                            responseType: \"GetUsageResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/usage\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get usage data\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Get usage data across namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).deprecated\": true\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/usage\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Account\"\n                                  ],\n                                  summary: \"Get usage data\",\n                                  description: \"Get usage data across namespaces\",\n                                  deprecated: true\n                                }\n                              }\n                            ]\n                          },\n                          GetAccount: {\n                            requestType: \"GetAccountRequest\",\n                            responseType: \"GetAccountResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get account details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/billing-and-cost\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Billing documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/account\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Account\"\n                                  ],\n                                  summary: \"Get account details\",\n                                  description: \"Returns detailed information about the account\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/billing-and-cost\",\n                                    description: \"Billing documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          UpdateAccount: {\n                            requestType: \"UpdateAccountRequest\",\n                            responseType: \"UpdateAccountResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/account\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update account details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates account configuration and settings\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/billing-and-cost\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Billing documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/account\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Account\"\n                                  ],\n                                  summary: \"Update account details\",\n                                  description: \"Updates account configuration and settings\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/billing-and-cost\",\n                                    description: \"Billing documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          CreateNamespaceExportSink: {\n                            requestType: \"CreateNamespaceExportSinkRequest\",\n                            responseType: \"CreateNamespaceExportSinkResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/export-sinks\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create history export sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a new workflow history export sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Export documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/namespaces/{namespace}/export-sinks\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Export\"\n                                  ],\n                                  summary: \"Create history export sink\",\n                                  description: \"Creates a new workflow history export sink\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/export\",\n                                    description: \"Export documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetNamespaceExportSink: {\n                            requestType: \"GetNamespaceExportSinkRequest\",\n                            responseType: \"GetNamespaceExportSinkResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/namespaces/{namespace}/export-sinks/{name}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get history sink details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about a specific workflow history export sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Export documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/namespaces/{namespace}/export-sinks/{name}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Export\"\n                                  ],\n                                  summary: \"Get history sink details\",\n                                  description: \"Returns detailed information about a specific workflow history export sink\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/export\",\n                                    description: \"Export documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetNamespaceExportSinks: {\n                            requestType: \"GetNamespaceExportSinksRequest\",\n                            responseType: \"GetNamespaceExportSinksResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/namespaces/{namespace}/export-sinks\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List history export sinks\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all workflow history export sinks for a namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Export documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/namespaces/{namespace}/export-sinks\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Export\"\n                                  ],\n                                  summary: \"List history export sinks\",\n                                  description: \"Returns a list of all workflow history export sinks for a namespace\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/export\",\n                                    description: \"Export documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          UpdateNamespaceExportSink: {\n                            requestType: \"UpdateNamespaceExportSinkRequest\",\n                            responseType: \"UpdateNamespaceExportSinkResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/export-sinks/{spec.name}\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update history export sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates an existing workflow history export sink's configuration\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Export documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/namespaces/{namespace}/export-sinks/{spec.name}\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Export\"\n                                  ],\n                                  summary: \"Update history export sink\",\n                                  description: \"Updates an existing workflow history export sink's configuration\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/export\",\n                                    description: \"Export documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          DeleteNamespaceExportSink: {\n                            requestType: \"DeleteNamespaceExportSinkRequest\",\n                            responseType: \"DeleteNamespaceExportSinkResponse\",\n                            options: {\n                              \"(google.api.http).delete\": \"/cloud/namespaces/{namespace}/export-sinks/{name}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Delete history export sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Removes a workflow history export sink from a namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Export documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/namespaces/{namespace}/export-sinks/{name}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Export\"\n                                  ],\n                                  summary: \"Delete history export sink\",\n                                  description: \"Removes a workflow history export sink from a namespace\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/export\",\n                                    description: \"Export documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          ValidateNamespaceExportSink: {\n                            requestType: \"ValidateNamespaceExportSinkRequest\",\n                            responseType: \"ValidateNamespaceExportSinkResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/export-sink-validate\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Validate history export sink configuration\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Tests workflow history export sink configuration by delivering a test file to verify accessibility\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/export\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Export documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/namespaces/{namespace}/export-sink-validate\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Export\"\n                                  ],\n                                  summary: \"Validate history export sink configuration\",\n                                  description: \"Tests workflow history export sink configuration by delivering a test file to verify accessibility\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/export\",\n                                    description: \"Export documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          UpdateNamespaceTags: {\n                            requestType: \"UpdateNamespaceTagsRequest\",\n                            responseType: \"UpdateNamespaceTagsResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/namespaces/{namespace}/update-tags\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update namespace tags\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates the tags associated with a namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/namespaces#tag-a-namespace\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Namespace tag documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/namespaces/{namespace}/update-tags\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Namespaces\"\n                                  ],\n                                  summary: \"Update namespace tags\",\n                                  description: \"Updates the tags associated with a namespace\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/namespaces#tag-a-namespace\",\n                                    description: \"Namespace tag documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          CreateConnectivityRule: {\n                            requestType: \"CreateConnectivityRuleRequest\",\n                            responseType: \"CreateConnectivityRuleResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/connectivity-rules\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Connectivity Rules\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create connectivity rule\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a new connectivity rule for network access control\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/connectivity\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Connectivity documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/connectivity-rules\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Connectivity Rules\"\n                                  ],\n                                  summary: \"Create connectivity rule\",\n                                  description: \"Creates a new connectivity rule for network access control\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/connectivity\",\n                                    description: \"Connectivity documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetConnectivityRule: {\n                            requestType: \"GetConnectivityRuleRequest\",\n                            responseType: \"GetConnectivityRuleResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/connectivity-rules/{connectivity_rule_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Connectivity Rules\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get connectivity rule details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about a specific connectivity rule\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/connectivity\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Connectivity documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/connectivity-rules/{connectivity_rule_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Connectivity Rules\"\n                                  ],\n                                  summary: \"Get connectivity rule details\",\n                                  description: \"Returns detailed information about a specific connectivity rule\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/connectivity\",\n                                    description: \"Connectivity documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetConnectivityRules: {\n                            requestType: \"GetConnectivityRulesRequest\",\n                            responseType: \"GetConnectivityRulesResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/connectivity-rules\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Connectivity Rules\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List all connectivity rules\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all connectivity rules in the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/connectivity\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Connectivity documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/connectivity-rules\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Connectivity Rules\"\n                                  ],\n                                  summary: \"List all connectivity rules\",\n                                  description: \"Returns a list of all connectivity rules in the account\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/connectivity\",\n                                    description: \"Connectivity documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          DeleteConnectivityRule: {\n                            requestType: \"DeleteConnectivityRuleRequest\",\n                            responseType: \"DeleteConnectivityRuleResponse\",\n                            options: {\n                              \"(google.api.http).delete\": \"/cloud/connectivity-rules/{connectivity_rule_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Connectivity Rules\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Delete connectivity rule\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Removes a connectivity rule from the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/connectivity\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Connectivity documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/connectivity-rules/{connectivity_rule_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Connectivity Rules\"\n                                  ],\n                                  summary: \"Delete connectivity rule\",\n                                  description: \"Removes a connectivity rule from the account\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/connectivity\",\n                                    description: \"Connectivity documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetAuditLogs: {\n                            requestType: \"GetAuditLogsRequest\",\n                            responseType: \"GetAuditLogsResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/audit-logs\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get audit logs\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a paginated list of audit logs for the account, optionally filtered by time range\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Audit logging documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/audit-logs\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Account\"\n                                  ],\n                                  summary: \"Get audit logs\",\n                                  description: \"Returns a paginated list of audit logs for the account, optionally filtered by time range\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/audit-logging\",\n                                    description: \"Audit logging documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          ValidateAccountAuditLogSink: {\n                            requestType: \"ValidateAccountAuditLogSinkRequest\",\n                            responseType: \"ValidateAccountAuditLogSinkResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/audit-log-sink-validate\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Validate audit log sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Validate customer audit log sink is accessible from Temporal's workflow by delivering an empty file to the specified sink. The operation verifies that the sink is correctly configured, accessible and ready to receive audit logs.\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Audit logging documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/audit-log-sink-validate\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Account\"\n                                  ],\n                                  summary: \"Validate audit log sink\",\n                                  description: \"Validate customer audit log sink is accessible from Temporal's workflow by delivering an empty file to the specified sink. The operation verifies that the sink is correctly configured, accessible and ready to receive audit logs.\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/audit-logging\",\n                                    description: \"Audit logging documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          CreateAccountAuditLogSink: {\n                            requestType: \"CreateAccountAuditLogSinkRequest\",\n                            responseType: \"CreateAccountAuditLogSinkResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/audit-log-sinks\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create audit log sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a new audit log sink for exporting audit logs\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Audit logging documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/audit-log-sinks\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Account\"\n                                  ],\n                                  summary: \"Create audit log sink\",\n                                  description: \"Creates a new audit log sink for exporting audit logs\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/audit-logging\",\n                                    description: \"Audit logging documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetAccountAuditLogSink: {\n                            requestType: \"GetAccountAuditLogSinkRequest\",\n                            responseType: \"GetAccountAuditLogSinkResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/audit-log-sinks/{name}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get audit log sink details\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns detailed information about a specific audit log sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Audit logging documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/audit-log-sinks/{name}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Account\"\n                                  ],\n                                  summary: \"Get audit log sink details\",\n                                  description: \"Returns detailed information about a specific audit log sink\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/audit-logging\",\n                                    description: \"Audit logging documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetAccountAuditLogSinks: {\n                            requestType: \"GetAccountAuditLogSinksRequest\",\n                            responseType: \"GetAccountAuditLogSinksResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/audit-log-sinks\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"List audit log sinks\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns a list of all audit log sinks for the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Audit logging documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/audit-log-sinks\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Account\"\n                                  ],\n                                  summary: \"List audit log sinks\",\n                                  description: \"Returns a list of all audit log sinks for the account\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/audit-logging\",\n                                    description: \"Audit logging documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          UpdateAccountAuditLogSink: {\n                            requestType: \"UpdateAccountAuditLogSinkRequest\",\n                            responseType: \"UpdateAccountAuditLogSinkResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/audit-log-sinks/{spec.name}\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Update audit log sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Updates an existing audit log sink's configuration\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Audit logging documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/audit-log-sinks/{spec.name}\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Account\"\n                                  ],\n                                  summary: \"Update audit log sink\",\n                                  description: \"Updates an existing audit log sink's configuration\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/audit-logging\",\n                                    description: \"Audit logging documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          DeleteAccountAuditLogSink: {\n                            requestType: \"DeleteAccountAuditLogSinkRequest\",\n                            responseType: \"DeleteAccountAuditLogSinkResponse\",\n                            options: {\n                              \"(google.api.http).delete\": \"/cloud/audit-log-sinks/{name}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Delete audit log sink\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Removes an audit log sink from the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/audit-logging\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Audit logging documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  \"delete\": \"/cloud/audit-log-sinks/{name}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Account\"\n                                  ],\n                                  summary: \"Delete audit log sink\",\n                                  description: \"Removes an audit log sink from the account\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/audit-logging\",\n                                    description: \"Audit logging documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetNamespaceCapacityInfo: {\n                            requestType: \"GetNamespaceCapacityInfoRequest\",\n                            responseType: \"GetNamespaceCapacityInfoResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/namespaces/{namespace}/capacity-info\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Namespaces\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get namespace capacity information\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Returns capacity information for a namespace. This includes provisioned capacity options, on-demand limits, and 7 day historical APS statistics useful for capacity planning.\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/capacity-modes\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Capacity modes information documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/namespaces/{namespace}/capacity-info\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Namespaces\"\n                                  ],\n                                  summary: \"Get namespace capacity information\",\n                                  description: \"Returns capacity information for a namespace. This includes provisioned capacity options, on-demand limits, and 7 day historical APS statistics useful for capacity planning.\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/capacity-modes\",\n                                    description: \"Capacity modes information documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          CreateBillingReport: {\n                            requestType: \"CreateBillingReportRequest\",\n                            responseType: \"CreateBillingReportResponse\",\n                            options: {\n                              \"(google.api.http).post\": \"/cloud/billing-reports\",\n                              \"(google.api.http).body\": \"*\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Create a billing report\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Creates a billing report for the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/billing-reports\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Billing report documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  post: \"/cloud/billing-reports\",\n                                  body: \"*\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Account\"\n                                  ],\n                                  summary: \"Create a billing report\",\n                                  description: \"Creates a billing report for the account\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/billing-reports\",\n                                    description: \"Billing report documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          GetBillingReport: {\n                            requestType: \"GetBillingReportRequest\",\n                            responseType: \"GetBillingReportResponse\",\n                            options: {\n                              \"(google.api.http).get\": \"/cloud/billing-reports/{billing_report_id}\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).tags\": \"Account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).summary\": \"Get a billing report\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).description\": \"Gets an existing billing report for the account\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.url\": \"https://docs.temporal.io/cloud/billing-reports\",\n                              \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation).external_docs.description\": \"Billing report documentation\"\n                            },\n                            parsedOptions: [\n                              {\n                                \"(google.api.http)\": {\n                                  get: \"/cloud/billing-reports/{billing_report_id}\"\n                                }\n                              },\n                              {\n                                \"(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation)\": {\n                                  tags: [\n                                    \"Account\"\n                                  ],\n                                  summary: \"Get a billing report\",\n                                  description: \"Gets an existing billing report for the account\",\n                                  external_docs: {\n                                    url: \"https://docs.temporal.io/cloud/billing-reports\",\n                                    description: \"Billing report documentation\"\n                                  }\n                                }\n                              }\n                            ]\n                          }\n                        }\n                      },\n                      GetCurrentIdentityRequest: {\n                        fields: {}\n                      },\n                      GetCurrentIdentityResponse: {\n                        oneofs: {\n                          principal: {\n                            oneof: [\n                              \"user\",\n                              \"serviceAccount\"\n                            ]\n                          }\n                        },\n                        fields: {\n                          user: {\n                            type: \"temporal.api.cloud.identity.v1.User\",\n                            id: 1\n                          },\n                          serviceAccount: {\n                            type: \"temporal.api.cloud.identity.v1.ServiceAccount\",\n                            id: 2\n                          },\n                          principalApiKey: {\n                            type: \"temporal.api.cloud.identity.v1.ApiKey\",\n                            id: 3\n                          }\n                        }\n                      },\n                      GetUsersRequest: {\n                        fields: {\n                          pageSize: {\n                            type: \"int32\",\n                            id: 1\n                          },\n                          pageToken: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          email: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          namespace: {\n                            type: \"string\",\n                            id: 4\n                          }\n                        }\n                      },\n                      GetUsersResponse: {\n                        fields: {\n                          users: {\n                            rule: \"repeated\",\n                            type: \"temporal.api.cloud.identity.v1.User\",\n                            id: 1\n                          },\n                          nextPageToken: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      GetUserRequest: {\n                        fields: {\n                          userId: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetUserResponse: {\n                        fields: {\n                          user: {\n                            type: \"temporal.api.cloud.identity.v1.User\",\n                            id: 1\n                          }\n                        }\n                      },\n                      CreateUserRequest: {\n                        fields: {\n                          spec: {\n                            type: \"temporal.api.cloud.identity.v1.UserSpec\",\n                            id: 1\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      CreateUserResponse: {\n                        fields: {\n                          userId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 2\n                          }\n                        }\n                      },\n                      UpdateUserRequest: {\n                        fields: {\n                          userId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          spec: {\n                            type: \"temporal.api.cloud.identity.v1.UserSpec\",\n                            id: 2\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 4\n                          }\n                        }\n                      },\n                      UpdateUserResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      DeleteUserRequest: {\n                        fields: {\n                          userId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      DeleteUserResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      SetUserNamespaceAccessRequest: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          userId: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          access: {\n                            type: \"temporal.api.cloud.identity.v1.NamespaceAccess\",\n                            id: 3\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 4\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 5\n                          }\n                        }\n                      },\n                      SetUserNamespaceAccessResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetAsyncOperationRequest: {\n                        fields: {\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetAsyncOperationResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      CreateNamespaceRequest: {\n                        fields: {\n                          spec: {\n                            type: \"temporal.api.cloud.namespace.v1.NamespaceSpec\",\n                            id: 2\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          tags: {\n                            keyType: \"string\",\n                            type: \"string\",\n                            id: 4\n                          }\n                        }\n                      },\n                      CreateNamespaceResponse: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 2\n                          }\n                        }\n                      },\n                      GetNamespacesRequest: {\n                        fields: {\n                          pageSize: {\n                            type: \"int32\",\n                            id: 1\n                          },\n                          pageToken: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          name: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      GetNamespacesResponse: {\n                        fields: {\n                          namespaces: {\n                            rule: \"repeated\",\n                            type: \"temporal.api.cloud.namespace.v1.Namespace\",\n                            id: 1\n                          },\n                          nextPageToken: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      GetNamespaceRequest: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetNamespaceResponse: {\n                        fields: {\n                          namespace: {\n                            type: \"temporal.api.cloud.namespace.v1.Namespace\",\n                            id: 1\n                          }\n                        }\n                      },\n                      UpdateNamespaceRequest: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          spec: {\n                            type: \"temporal.api.cloud.namespace.v1.NamespaceSpec\",\n                            id: 2\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 4\n                          }\n                        }\n                      },\n                      UpdateNamespaceResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      RenameCustomSearchAttributeRequest: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          existingCustomSearchAttributeName: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          newCustomSearchAttributeName: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 4\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 5\n                          }\n                        }\n                      },\n                      RenameCustomSearchAttributeResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      DeleteNamespaceRequest: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      DeleteNamespaceResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      FailoverNamespaceRegionRequest: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          region: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      FailoverNamespaceRegionResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      AddNamespaceRegionRequest: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          region: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 4\n                          }\n                        }\n                      },\n                      AddNamespaceRegionResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      DeleteNamespaceRegionRequest: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          region: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 4\n                          }\n                        }\n                      },\n                      DeleteNamespaceRegionResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetRegionsRequest: {\n                        fields: {}\n                      },\n                      GetRegionsResponse: {\n                        fields: {\n                          regions: {\n                            rule: \"repeated\",\n                            type: \"temporal.api.cloud.region.v1.Region\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetRegionRequest: {\n                        fields: {\n                          region: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetRegionResponse: {\n                        fields: {\n                          region: {\n                            type: \"temporal.api.cloud.region.v1.Region\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetApiKeysRequest: {\n                        fields: {\n                          pageSize: {\n                            type: \"int32\",\n                            id: 1\n                          },\n                          pageToken: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          ownerId: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          ownerTypeDeprecated: {\n                            type: \"string\",\n                            id: 4,\n                            options: {\n                              deprecated: true\n                            }\n                          },\n                          ownerType: {\n                            type: \"temporal.api.cloud.identity.v1.OwnerType\",\n                            id: 5\n                          }\n                        }\n                      },\n                      GetApiKeysResponse: {\n                        fields: {\n                          apiKeys: {\n                            rule: \"repeated\",\n                            type: \"temporal.api.cloud.identity.v1.ApiKey\",\n                            id: 1\n                          },\n                          nextPageToken: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      GetApiKeyRequest: {\n                        fields: {\n                          keyId: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetApiKeyResponse: {\n                        fields: {\n                          apiKey: {\n                            type: \"temporal.api.cloud.identity.v1.ApiKey\",\n                            id: 1\n                          }\n                        }\n                      },\n                      CreateApiKeyRequest: {\n                        fields: {\n                          spec: {\n                            type: \"temporal.api.cloud.identity.v1.ApiKeySpec\",\n                            id: 1\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      CreateApiKeyResponse: {\n                        fields: {\n                          keyId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          token: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 3\n                          }\n                        }\n                      },\n                      UpdateApiKeyRequest: {\n                        fields: {\n                          keyId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          spec: {\n                            type: \"temporal.api.cloud.identity.v1.ApiKeySpec\",\n                            id: 2\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 4\n                          }\n                        }\n                      },\n                      UpdateApiKeyResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      DeleteApiKeyRequest: {\n                        fields: {\n                          keyId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      DeleteApiKeyResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetNexusEndpointsRequest: {\n                        fields: {\n                          pageSize: {\n                            type: \"int32\",\n                            id: 1\n                          },\n                          pageToken: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          targetNamespaceId: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          targetTaskQueue: {\n                            type: \"string\",\n                            id: 4\n                          },\n                          name: {\n                            type: \"string\",\n                            id: 5\n                          }\n                        }\n                      },\n                      GetNexusEndpointsResponse: {\n                        fields: {\n                          endpoints: {\n                            rule: \"repeated\",\n                            type: \"temporal.api.cloud.nexus.v1.Endpoint\",\n                            id: 1\n                          },\n                          nextPageToken: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      GetNexusEndpointRequest: {\n                        fields: {\n                          endpointId: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetNexusEndpointResponse: {\n                        fields: {\n                          endpoint: {\n                            type: \"temporal.api.cloud.nexus.v1.Endpoint\",\n                            id: 1\n                          }\n                        }\n                      },\n                      CreateNexusEndpointRequest: {\n                        fields: {\n                          spec: {\n                            type: \"temporal.api.cloud.nexus.v1.EndpointSpec\",\n                            id: 1\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      CreateNexusEndpointResponse: {\n                        fields: {\n                          endpointId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 2\n                          }\n                        }\n                      },\n                      UpdateNexusEndpointRequest: {\n                        fields: {\n                          endpointId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          spec: {\n                            type: \"temporal.api.cloud.nexus.v1.EndpointSpec\",\n                            id: 2\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 4\n                          }\n                        }\n                      },\n                      UpdateNexusEndpointResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      DeleteNexusEndpointRequest: {\n                        fields: {\n                          endpointId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      DeleteNexusEndpointResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetUserGroupsRequest: {\n                        fields: {\n                          pageSize: {\n                            type: \"int32\",\n                            id: 1\n                          },\n                          pageToken: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          namespace: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          displayName: {\n                            type: \"string\",\n                            id: 4\n                          },\n                          googleGroup: {\n                            type: \"GoogleGroupFilter\",\n                            id: 5\n                          },\n                          scimGroup: {\n                            type: \"SCIMGroupFilter\",\n                            id: 6\n                          }\n                        },\n                        nested: {\n                          GoogleGroupFilter: {\n                            fields: {\n                              emailAddress: {\n                                type: \"string\",\n                                id: 1\n                              }\n                            }\n                          },\n                          SCIMGroupFilter: {\n                            fields: {\n                              idpId: {\n                                type: \"string\",\n                                id: 1\n                              }\n                            }\n                          }\n                        }\n                      },\n                      GetUserGroupsResponse: {\n                        fields: {\n                          groups: {\n                            rule: \"repeated\",\n                            type: \"temporal.api.cloud.identity.v1.UserGroup\",\n                            id: 1\n                          },\n                          nextPageToken: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      GetUserGroupRequest: {\n                        fields: {\n                          groupId: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetUserGroupResponse: {\n                        fields: {\n                          group: {\n                            type: \"temporal.api.cloud.identity.v1.UserGroup\",\n                            id: 1\n                          }\n                        }\n                      },\n                      CreateUserGroupRequest: {\n                        fields: {\n                          spec: {\n                            type: \"temporal.api.cloud.identity.v1.UserGroupSpec\",\n                            id: 1\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      CreateUserGroupResponse: {\n                        fields: {\n                          groupId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 2\n                          }\n                        }\n                      },\n                      UpdateUserGroupRequest: {\n                        fields: {\n                          groupId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          spec: {\n                            type: \"temporal.api.cloud.identity.v1.UserGroupSpec\",\n                            id: 2\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 4\n                          }\n                        }\n                      },\n                      UpdateUserGroupResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      DeleteUserGroupRequest: {\n                        fields: {\n                          groupId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      DeleteUserGroupResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      SetUserGroupNamespaceAccessRequest: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          groupId: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          access: {\n                            type: \"temporal.api.cloud.identity.v1.NamespaceAccess\",\n                            id: 3\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 4\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 5\n                          }\n                        }\n                      },\n                      SetUserGroupNamespaceAccessResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      AddUserGroupMemberRequest: {\n                        fields: {\n                          groupId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          memberId: {\n                            type: \"temporal.api.cloud.identity.v1.UserGroupMemberId\",\n                            id: 2\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      AddUserGroupMemberResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      RemoveUserGroupMemberRequest: {\n                        fields: {\n                          groupId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          memberId: {\n                            type: \"temporal.api.cloud.identity.v1.UserGroupMemberId\",\n                            id: 2\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      RemoveUserGroupMemberResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetUserGroupMembersRequest: {\n                        fields: {\n                          pageSize: {\n                            type: \"int32\",\n                            id: 1\n                          },\n                          pageToken: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          groupId: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      GetUserGroupMembersResponse: {\n                        fields: {\n                          members: {\n                            rule: \"repeated\",\n                            type: \"temporal.api.cloud.identity.v1.UserGroupMember\",\n                            id: 1\n                          },\n                          nextPageToken: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      CreateServiceAccountRequest: {\n                        fields: {\n                          spec: {\n                            type: \"temporal.api.cloud.identity.v1.ServiceAccountSpec\",\n                            id: 1\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      CreateServiceAccountResponse: {\n                        fields: {\n                          serviceAccountId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 2\n                          }\n                        }\n                      },\n                      GetServiceAccountRequest: {\n                        fields: {\n                          serviceAccountId: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetServiceAccountResponse: {\n                        fields: {\n                          serviceAccount: {\n                            type: \"temporal.api.cloud.identity.v1.ServiceAccount\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetServiceAccountsRequest: {\n                        fields: {\n                          pageSize: {\n                            type: \"int32\",\n                            id: 1\n                          },\n                          pageToken: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      GetServiceAccountsResponse: {\n                        fields: {\n                          serviceAccount: {\n                            rule: \"repeated\",\n                            type: \"temporal.api.cloud.identity.v1.ServiceAccount\",\n                            id: 1\n                          },\n                          nextPageToken: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      UpdateServiceAccountRequest: {\n                        fields: {\n                          serviceAccountId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          spec: {\n                            type: \"temporal.api.cloud.identity.v1.ServiceAccountSpec\",\n                            id: 2\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 4\n                          }\n                        }\n                      },\n                      UpdateServiceAccountResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      SetServiceAccountNamespaceAccessRequest: {\n                        fields: {\n                          serviceAccountId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          namespace: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          access: {\n                            type: \"temporal.api.cloud.identity.v1.NamespaceAccess\",\n                            id: 3\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 4\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 5\n                          }\n                        }\n                      },\n                      SetServiceAccountNamespaceAccessResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      DeleteServiceAccountRequest: {\n                        fields: {\n                          serviceAccountId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      DeleteServiceAccountResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetUsageRequest: {\n                        fields: {\n                          startTimeInclusive: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 1\n                          },\n                          endTimeExclusive: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 2\n                          },\n                          pageSize: {\n                            type: \"int32\",\n                            id: 3\n                          },\n                          pageToken: {\n                            type: \"string\",\n                            id: 4\n                          }\n                        }\n                      },\n                      GetUsageResponse: {\n                        fields: {\n                          summaries: {\n                            rule: \"repeated\",\n                            type: \"temporal.api.cloud.usage.v1.Summary\",\n                            id: 1\n                          },\n                          nextPageToken: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      GetAccountRequest: {\n                        fields: {}\n                      },\n                      GetAccountResponse: {\n                        fields: {\n                          account: {\n                            type: \"temporal.api.cloud.account.v1.Account\",\n                            id: 1\n                          }\n                        }\n                      },\n                      UpdateAccountRequest: {\n                        fields: {\n                          spec: {\n                            type: \"temporal.api.cloud.account.v1.AccountSpec\",\n                            id: 1\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      UpdateAccountResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      CreateNamespaceExportSinkRequest: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          spec: {\n                            type: \"temporal.api.cloud.namespace.v1.ExportSinkSpec\",\n                            id: 2\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      CreateNamespaceExportSinkResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetNamespaceExportSinkRequest: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          name: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      GetNamespaceExportSinkResponse: {\n                        fields: {\n                          sink: {\n                            type: \"temporal.api.cloud.namespace.v1.ExportSink\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetNamespaceExportSinksRequest: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          pageSize: {\n                            type: \"int32\",\n                            id: 2\n                          },\n                          pageToken: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      GetNamespaceExportSinksResponse: {\n                        fields: {\n                          sinks: {\n                            rule: \"repeated\",\n                            type: \"temporal.api.cloud.namespace.v1.ExportSink\",\n                            id: 1\n                          },\n                          nextPageToken: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      UpdateNamespaceExportSinkRequest: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          spec: {\n                            type: \"temporal.api.cloud.namespace.v1.ExportSinkSpec\",\n                            id: 2\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 4\n                          }\n                        }\n                      },\n                      UpdateNamespaceExportSinkResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      DeleteNamespaceExportSinkRequest: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          name: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 4\n                          }\n                        }\n                      },\n                      DeleteNamespaceExportSinkResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      ValidateNamespaceExportSinkRequest: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          spec: {\n                            type: \"temporal.api.cloud.namespace.v1.ExportSinkSpec\",\n                            id: 2\n                          }\n                        }\n                      },\n                      ValidateNamespaceExportSinkResponse: {\n                        fields: {}\n                      },\n                      UpdateNamespaceTagsRequest: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          tagsToUpsert: {\n                            keyType: \"string\",\n                            type: \"string\",\n                            id: 2\n                          },\n                          tagsToRemove: {\n                            rule: \"repeated\",\n                            type: \"string\",\n                            id: 3\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 4\n                          }\n                        }\n                      },\n                      UpdateNamespaceTagsResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      CreateConnectivityRuleRequest: {\n                        fields: {\n                          spec: {\n                            type: \"temporal.api.cloud.connectivityrule.v1.ConnectivityRuleSpec\",\n                            id: 1\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      CreateConnectivityRuleResponse: {\n                        fields: {\n                          connectivityRuleId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 2\n                          }\n                        }\n                      },\n                      GetConnectivityRuleRequest: {\n                        fields: {\n                          connectivityRuleId: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetConnectivityRuleResponse: {\n                        fields: {\n                          connectivityRule: {\n                            type: \"temporal.api.cloud.connectivityrule.v1.ConnectivityRule\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetConnectivityRulesRequest: {\n                        fields: {\n                          pageSize: {\n                            type: \"int32\",\n                            id: 1\n                          },\n                          pageToken: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          namespace: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      GetConnectivityRulesResponse: {\n                        fields: {\n                          connectivityRules: {\n                            rule: \"repeated\",\n                            type: \"temporal.api.cloud.connectivityrule.v1.ConnectivityRule\",\n                            id: 1\n                          },\n                          nextPageToken: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      DeleteConnectivityRuleRequest: {\n                        fields: {\n                          connectivityRuleId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      DeleteConnectivityRuleResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetAuditLogsRequest: {\n                        fields: {\n                          pageSize: {\n                            type: \"int32\",\n                            id: 1\n                          },\n                          pageToken: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          startTimeInclusive: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 3\n                          },\n                          endTimeExclusive: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 4\n                          }\n                        }\n                      },\n                      GetAuditLogsResponse: {\n                        fields: {\n                          logs: {\n                            rule: \"repeated\",\n                            type: \"temporal.api.cloud.auditlog.v1.LogRecord\",\n                            id: 1\n                          },\n                          nextPageToken: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      ValidateAccountAuditLogSinkRequest: {\n                        fields: {\n                          spec: {\n                            type: \"temporal.api.cloud.account.v1.AuditLogSinkSpec\",\n                            id: 1\n                          }\n                        }\n                      },\n                      ValidateAccountAuditLogSinkResponse: {\n                        fields: {}\n                      },\n                      CreateAccountAuditLogSinkRequest: {\n                        fields: {\n                          spec: {\n                            type: \"temporal.api.cloud.account.v1.AuditLogSinkSpec\",\n                            id: 1\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      CreateAccountAuditLogSinkResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetAccountAuditLogSinkRequest: {\n                        fields: {\n                          name: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetAccountAuditLogSinkResponse: {\n                        fields: {\n                          sink: {\n                            type: \"temporal.api.cloud.account.v1.AuditLogSink\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetAccountAuditLogSinksRequest: {\n                        fields: {\n                          pageSize: {\n                            type: \"int32\",\n                            id: 1\n                          },\n                          pageToken: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      GetAccountAuditLogSinksResponse: {\n                        fields: {\n                          sinks: {\n                            rule: \"repeated\",\n                            type: \"temporal.api.cloud.account.v1.AuditLogSink\",\n                            id: 1\n                          },\n                          nextPageToken: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      UpdateAccountAuditLogSinkRequest: {\n                        fields: {\n                          spec: {\n                            type: \"temporal.api.cloud.account.v1.AuditLogSinkSpec\",\n                            id: 1\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      UpdateAccountAuditLogSinkResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      DeleteAccountAuditLogSinkRequest: {\n                        fields: {\n                          name: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      DeleteAccountAuditLogSinkResponse: {\n                        fields: {\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetNamespaceCapacityInfoRequest: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetNamespaceCapacityInfoResponse: {\n                        fields: {\n                          capacityInfo: {\n                            type: \"temporal.api.cloud.namespace.v1.NamespaceCapacityInfo\",\n                            id: 1\n                          }\n                        }\n                      },\n                      CreateBillingReportRequest: {\n                        fields: {\n                          spec: {\n                            type: \"temporal.api.cloud.billing.v1.BillingReportSpec\",\n                            id: 1\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      CreateBillingReportResponse: {\n                        fields: {\n                          billingReportId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          asyncOperation: {\n                            type: \"temporal.api.cloud.operation.v1.AsyncOperation\",\n                            id: 2\n                          }\n                        }\n                      },\n                      GetBillingReportRequest: {\n                        fields: {\n                          billingReportId: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      },\n                      GetBillingReportResponse: {\n                        fields: {\n                          billingReport: {\n                            type: \"temporal.api.cloud.billing.v1.BillingReport\",\n                            id: 1\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              operation: {\n                nested: {\n                  v1: {\n                    options: {\n                      go_package: \"go.temporal.io/api/cloud/operation/v1;operation\",\n                      java_package: \"io.temporal.api.cloud.operation.v1\",\n                      java_multiple_files: true,\n                      java_outer_classname: \"MessageProto\",\n                      ruby_package: \"Temporalio::Api::Cloud::Operation::V1\",\n                      csharp_namespace: \"Temporalio.Api.Cloud.Operation.V1\"\n                    },\n                    nested: {\n                      AsyncOperation: {\n                        fields: {\n                          id: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          stateDeprecated: {\n                            type: \"string\",\n                            id: 2,\n                            options: {\n                              deprecated: true\n                            }\n                          },\n                          state: {\n                            type: \"State\",\n                            id: 9\n                          },\n                          checkDuration: {\n                            type: \"google.protobuf.Duration\",\n                            id: 3\n                          },\n                          operationType: {\n                            type: \"string\",\n                            id: 4\n                          },\n                          operationInput: {\n                            type: \"google.protobuf.Any\",\n                            id: 5\n                          },\n                          failureReason: {\n                            type: \"string\",\n                            id: 6\n                          },\n                          startedTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 7\n                          },\n                          finishedTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 8\n                          }\n                        },\n                        nested: {\n                          State: {\n                            values: {\n                              STATE_UNSPECIFIED: 0,\n                              STATE_PENDING: 1,\n                              STATE_IN_PROGRESS: 2,\n                              STATE_FAILED: 3,\n                              STATE_CANCELLED: 4,\n                              STATE_FULFILLED: 5,\n                              STATE_REJECTED: 6\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              identity: {\n                nested: {\n                  v1: {\n                    options: {\n                      go_package: \"go.temporal.io/api/cloud/identity/v1;identity\",\n                      java_package: \"io.temporal.api.cloud.identity.v1\",\n                      java_multiple_files: true,\n                      java_outer_classname: \"MessageProto\",\n                      ruby_package: \"Temporalio::Api::Cloud::Identity::V1\",\n                      csharp_namespace: \"Temporalio.Api.Cloud.Identity.V1\"\n                    },\n                    nested: {\n                      AccountAccess: {\n                        fields: {\n                          roleDeprecated: {\n                            type: \"string\",\n                            id: 1,\n                            options: {\n                              deprecated: true\n                            }\n                          },\n                          role: {\n                            type: \"Role\",\n                            id: 2\n                          }\n                        },\n                        nested: {\n                          Role: {\n                            values: {\n                              ROLE_UNSPECIFIED: 0,\n                              ROLE_OWNER: 1,\n                              ROLE_ADMIN: 2,\n                              ROLE_DEVELOPER: 3,\n                              ROLE_FINANCE_ADMIN: 4,\n                              ROLE_READ: 5,\n                              ROLE_METRICS_READ: 6\n                            }\n                          }\n                        }\n                      },\n                      NamespaceAccess: {\n                        fields: {\n                          permissionDeprecated: {\n                            type: \"string\",\n                            id: 1,\n                            options: {\n                              deprecated: true\n                            }\n                          },\n                          permission: {\n                            type: \"Permission\",\n                            id: 2\n                          }\n                        },\n                        nested: {\n                          Permission: {\n                            values: {\n                              PERMISSION_UNSPECIFIED: 0,\n                              PERMISSION_ADMIN: 1,\n                              PERMISSION_WRITE: 2,\n                              PERMISSION_READ: 3\n                            }\n                          }\n                        }\n                      },\n                      OwnerType: {\n                        values: {\n                          OWNER_TYPE_UNSPECIFIED: 0,\n                          OWNER_TYPE_USER: 1,\n                          OWNER_TYPE_SERVICE_ACCOUNT: 2\n                        }\n                      },\n                      Access: {\n                        fields: {\n                          accountAccess: {\n                            type: \"AccountAccess\",\n                            id: 1\n                          },\n                          namespaceAccesses: {\n                            keyType: \"string\",\n                            type: \"NamespaceAccess\",\n                            id: 2\n                          }\n                        }\n                      },\n                      NamespaceScopedAccess: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          access: {\n                            type: \"NamespaceAccess\",\n                            id: 2\n                          }\n                        }\n                      },\n                      UserSpec: {\n                        fields: {\n                          email: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          access: {\n                            type: \"Access\",\n                            id: 2\n                          }\n                        }\n                      },\n                      Invitation: {\n                        fields: {\n                          createdTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 1\n                          },\n                          expiredTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 2\n                          }\n                        }\n                      },\n                      User: {\n                        fields: {\n                          id: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          spec: {\n                            type: \"UserSpec\",\n                            id: 3\n                          },\n                          stateDeprecated: {\n                            type: \"string\",\n                            id: 4,\n                            options: {\n                              deprecated: true\n                            }\n                          },\n                          state: {\n                            type: \"temporal.api.cloud.resource.v1.ResourceState\",\n                            id: 9\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 5\n                          },\n                          invitation: {\n                            type: \"Invitation\",\n                            id: 6\n                          },\n                          createdTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 7\n                          },\n                          lastModifiedTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 8\n                          }\n                        }\n                      },\n                      GoogleGroupSpec: {\n                        fields: {\n                          emailAddress: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      },\n                      SCIMGroupSpec: {\n                        fields: {\n                          idpId: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      },\n                      CloudGroupSpec: {\n                        fields: {}\n                      },\n                      UserGroupSpec: {\n                        oneofs: {\n                          groupType: {\n                            oneof: [\n                              \"googleGroup\",\n                              \"scimGroup\",\n                              \"cloudGroup\"\n                            ]\n                          }\n                        },\n                        fields: {\n                          displayName: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          access: {\n                            type: \"Access\",\n                            id: 2\n                          },\n                          googleGroup: {\n                            type: \"GoogleGroupSpec\",\n                            id: 3\n                          },\n                          scimGroup: {\n                            type: \"SCIMGroupSpec\",\n                            id: 4\n                          },\n                          cloudGroup: {\n                            type: \"CloudGroupSpec\",\n                            id: 5\n                          }\n                        }\n                      },\n                      UserGroup: {\n                        fields: {\n                          id: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          spec: {\n                            type: \"UserGroupSpec\",\n                            id: 3\n                          },\n                          stateDeprecated: {\n                            type: \"string\",\n                            id: 4,\n                            options: {\n                              deprecated: true\n                            }\n                          },\n                          state: {\n                            type: \"temporal.api.cloud.resource.v1.ResourceState\",\n                            id: 8\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 5\n                          },\n                          createdTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 6\n                          },\n                          lastModifiedTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 7\n                          }\n                        }\n                      },\n                      UserGroupMemberId: {\n                        oneofs: {\n                          memberType: {\n                            oneof: [\n                              \"userId\"\n                            ]\n                          }\n                        },\n                        fields: {\n                          userId: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      },\n                      UserGroupMember: {\n                        fields: {\n                          memberId: {\n                            type: \"UserGroupMemberId\",\n                            id: 1\n                          },\n                          createdTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 2\n                          }\n                        }\n                      },\n                      ServiceAccount: {\n                        fields: {\n                          id: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          spec: {\n                            type: \"ServiceAccountSpec\",\n                            id: 3\n                          },\n                          stateDeprecated: {\n                            type: \"string\",\n                            id: 4,\n                            options: {\n                              deprecated: true\n                            }\n                          },\n                          state: {\n                            type: \"temporal.api.cloud.resource.v1.ResourceState\",\n                            id: 8\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 5\n                          },\n                          createdTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 6\n                          },\n                          lastModifiedTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 7\n                          }\n                        }\n                      },\n                      ServiceAccountSpec: {\n                        fields: {\n                          name: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          access: {\n                            type: \"Access\",\n                            id: 2\n                          },\n                          namespaceScopedAccess: {\n                            type: \"NamespaceScopedAccess\",\n                            id: 4\n                          },\n                          description: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      ApiKey: {\n                        fields: {\n                          id: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          spec: {\n                            type: \"ApiKeySpec\",\n                            id: 3\n                          },\n                          stateDeprecated: {\n                            type: \"string\",\n                            id: 4,\n                            options: {\n                              deprecated: true\n                            }\n                          },\n                          state: {\n                            type: \"temporal.api.cloud.resource.v1.ResourceState\",\n                            id: 8\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 5\n                          },\n                          createdTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 6\n                          },\n                          lastModifiedTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 7\n                          }\n                        }\n                      },\n                      ApiKeySpec: {\n                        fields: {\n                          ownerId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          ownerTypeDeprecated: {\n                            type: \"string\",\n                            id: 2,\n                            options: {\n                              deprecated: true\n                            }\n                          },\n                          ownerType: {\n                            type: \"OwnerType\",\n                            id: 7\n                          },\n                          displayName: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          description: {\n                            type: \"string\",\n                            id: 4\n                          },\n                          expiryTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 5\n                          },\n                          disabled: {\n                            type: \"bool\",\n                            id: 6\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              resource: {\n                nested: {\n                  v1: {\n                    options: {\n                      go_package: \"go.temporal.io/api/cloud/resource/v1;resource\",\n                      java_package: \"io.temporal.api.cloud.resource.v1\",\n                      java_multiple_files: true,\n                      java_outer_classname: \"MessageProto\",\n                      ruby_package: \"Temporalio::Api::Cloud::Resource::V1\",\n                      csharp_namespace: \"Temporalio.Api.Cloud.Resource.V1\"\n                    },\n                    nested: {\n                      ResourceState: {\n                        values: {\n                          RESOURCE_STATE_UNSPECIFIED: 0,\n                          RESOURCE_STATE_ACTIVATING: 1,\n                          RESOURCE_STATE_ACTIVATION_FAILED: 2,\n                          RESOURCE_STATE_ACTIVE: 3,\n                          RESOURCE_STATE_UPDATING: 4,\n                          RESOURCE_STATE_UPDATE_FAILED: 5,\n                          RESOURCE_STATE_DELETING: 6,\n                          RESOURCE_STATE_DELETE_FAILED: 7,\n                          RESOURCE_STATE_DELETED: 8,\n                          RESOURCE_STATE_SUSPENDED: 9,\n                          RESOURCE_STATE_EXPIRED: 10\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              namespace: {\n                nested: {\n                  v1: {\n                    options: {\n                      go_package: \"go.temporal.io/api/cloud/namespace/v1;namespace\",\n                      java_package: \"io.temporal.api.cloud.namespace.v1\",\n                      java_multiple_files: true,\n                      java_outer_classname: \"MessageProto\",\n                      ruby_package: \"Temporalio::Api::Cloud::Namespace::V1\",\n                      csharp_namespace: \"Temporalio.Api.Cloud.Namespace.V1\"\n                    },\n                    nested: {\n                      CertificateFilterSpec: {\n                        fields: {\n                          commonName: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          organization: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          organizationalUnit: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          subjectAlternativeName: {\n                            type: \"string\",\n                            id: 4\n                          }\n                        }\n                      },\n                      MtlsAuthSpec: {\n                        fields: {\n                          acceptedClientCaDeprecated: {\n                            type: \"string\",\n                            id: 1,\n                            options: {\n                              deprecated: true\n                            }\n                          },\n                          acceptedClientCa: {\n                            type: \"bytes\",\n                            id: 4\n                          },\n                          certificateFilters: {\n                            rule: \"repeated\",\n                            type: \"CertificateFilterSpec\",\n                            id: 2\n                          },\n                          enabled: {\n                            type: \"bool\",\n                            id: 3\n                          }\n                        }\n                      },\n                      ApiKeyAuthSpec: {\n                        fields: {\n                          enabled: {\n                            type: \"bool\",\n                            id: 1\n                          }\n                        }\n                      },\n                      LifecycleSpec: {\n                        fields: {\n                          enableDeleteProtection: {\n                            type: \"bool\",\n                            id: 1\n                          }\n                        }\n                      },\n                      CodecServerSpec: {\n                        fields: {\n                          endpoint: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          passAccessToken: {\n                            type: \"bool\",\n                            id: 2\n                          },\n                          includeCrossOriginCredentials: {\n                            type: \"bool\",\n                            id: 3\n                          },\n                          customErrorMessage: {\n                            type: \"CustomErrorMessage\",\n                            id: 4\n                          }\n                        },\n                        nested: {\n                          CustomErrorMessage: {\n                            fields: {\n                              \"default\": {\n                                type: \"ErrorMessage\",\n                                id: 1\n                              }\n                            },\n                            nested: {\n                              ErrorMessage: {\n                                fields: {\n                                  message: {\n                                    type: \"string\",\n                                    id: 1\n                                  },\n                                  link: {\n                                    type: \"string\",\n                                    id: 2\n                                  }\n                                }\n                              }\n                            }\n                          }\n                        }\n                      },\n                      HighAvailabilitySpec: {\n                        fields: {\n                          disableManagedFailover: {\n                            type: \"bool\",\n                            id: 1\n                          }\n                        }\n                      },\n                      CapacitySpec: {\n                        oneofs: {\n                          spec: {\n                            oneof: [\n                              \"onDemand\",\n                              \"provisioned\"\n                            ]\n                          }\n                        },\n                        fields: {\n                          onDemand: {\n                            type: \"OnDemand\",\n                            id: 1\n                          },\n                          provisioned: {\n                            type: \"Provisioned\",\n                            id: 2\n                          }\n                        },\n                        nested: {\n                          OnDemand: {\n                            fields: {}\n                          },\n                          Provisioned: {\n                            fields: {\n                              value: {\n                                type: \"double\",\n                                id: 1\n                              }\n                            }\n                          }\n                        }\n                      },\n                      Capacity: {\n                        oneofs: {\n                          currentMode: {\n                            oneof: [\n                              \"onDemand\",\n                              \"provisioned\"\n                            ]\n                          }\n                        },\n                        fields: {\n                          onDemand: {\n                            type: \"OnDemand\",\n                            id: 1\n                          },\n                          provisioned: {\n                            type: \"Provisioned\",\n                            id: 2\n                          },\n                          latestRequest: {\n                            type: \"Request\",\n                            id: 3\n                          }\n                        },\n                        nested: {\n                          OnDemand: {\n                            fields: {}\n                          },\n                          Provisioned: {\n                            fields: {\n                              currentValue: {\n                                type: \"double\",\n                                id: 1\n                              }\n                            }\n                          },\n                          Request: {\n                            fields: {\n                              state: {\n                                type: \"State\",\n                                id: 1\n                              },\n                              startTime: {\n                                type: \"google.protobuf.Timestamp\",\n                                id: 2\n                              },\n                              endTime: {\n                                type: \"google.protobuf.Timestamp\",\n                                id: 3\n                              },\n                              asyncOperationId: {\n                                type: \"string\",\n                                id: 4\n                              },\n                              spec: {\n                                type: \"CapacitySpec\",\n                                id: 5\n                              }\n                            },\n                            nested: {\n                              State: {\n                                values: {\n                                  STATE_CAPACITY_REQUEST_UNSPECIFIED: 0,\n                                  STATE_CAPACITY_REQUEST_COMPLETED: 1,\n                                  STATE_CAPACITY_REQUEST_IN_PROGRESS: 2,\n                                  STATE_CAPACITY_REQUEST_FAILED: 3\n                                }\n                              }\n                            }\n                          }\n                        }\n                      },\n                      NamespaceSpec: {\n                        fields: {\n                          name: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          regions: {\n                            rule: \"repeated\",\n                            type: \"string\",\n                            id: 2\n                          },\n                          retentionDays: {\n                            type: \"int32\",\n                            id: 3\n                          },\n                          mtlsAuth: {\n                            type: \"MtlsAuthSpec\",\n                            id: 4\n                          },\n                          apiKeyAuth: {\n                            type: \"ApiKeyAuthSpec\",\n                            id: 7\n                          },\n                          customSearchAttributes: {\n                            keyType: \"string\",\n                            type: \"string\",\n                            id: 5,\n                            options: {\n                              deprecated: true\n                            }\n                          },\n                          searchAttributes: {\n                            keyType: \"string\",\n                            type: \"SearchAttributeType\",\n                            id: 8\n                          },\n                          codecServer: {\n                            type: \"CodecServerSpec\",\n                            id: 6\n                          },\n                          lifecycle: {\n                            type: \"LifecycleSpec\",\n                            id: 9\n                          },\n                          highAvailability: {\n                            type: \"HighAvailabilitySpec\",\n                            id: 10\n                          },\n                          connectivityRuleIds: {\n                            rule: \"repeated\",\n                            type: \"string\",\n                            id: 11\n                          },\n                          capacitySpec: {\n                            type: \"CapacitySpec\",\n                            id: 12\n                          }\n                        },\n                        nested: {\n                          SearchAttributeType: {\n                            values: {\n                              SEARCH_ATTRIBUTE_TYPE_UNSPECIFIED: 0,\n                              SEARCH_ATTRIBUTE_TYPE_TEXT: 1,\n                              SEARCH_ATTRIBUTE_TYPE_KEYWORD: 2,\n                              SEARCH_ATTRIBUTE_TYPE_INT: 3,\n                              SEARCH_ATTRIBUTE_TYPE_DOUBLE: 4,\n                              SEARCH_ATTRIBUTE_TYPE_BOOL: 5,\n                              SEARCH_ATTRIBUTE_TYPE_DATETIME: 6,\n                              SEARCH_ATTRIBUTE_TYPE_KEYWORD_LIST: 7\n                            }\n                          }\n                        }\n                      },\n                      Endpoints: {\n                        fields: {\n                          webAddress: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          mtlsGrpcAddress: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          grpcAddress: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      Limits: {\n                        fields: {\n                          actionsPerSecondLimit: {\n                            type: \"int32\",\n                            id: 1\n                          }\n                        }\n                      },\n                      AWSPrivateLinkInfo: {\n                        fields: {\n                          allowedPrincipalArns: {\n                            rule: \"repeated\",\n                            type: \"string\",\n                            id: 1\n                          },\n                          vpcEndpointServiceNames: {\n                            rule: \"repeated\",\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      PrivateConnectivity: {\n                        fields: {\n                          region: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          awsPrivateLink: {\n                            type: \"AWSPrivateLinkInfo\",\n                            id: 2\n                          }\n                        }\n                      },\n                      Namespace: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          spec: {\n                            type: \"NamespaceSpec\",\n                            id: 3\n                          },\n                          stateDeprecated: {\n                            type: \"string\",\n                            id: 4,\n                            options: {\n                              deprecated: true\n                            }\n                          },\n                          state: {\n                            type: \"temporal.api.cloud.resource.v1.ResourceState\",\n                            id: 13\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 5\n                          },\n                          endpoints: {\n                            type: \"Endpoints\",\n                            id: 6\n                          },\n                          activeRegion: {\n                            type: \"string\",\n                            id: 7\n                          },\n                          limits: {\n                            type: \"Limits\",\n                            id: 8\n                          },\n                          privateConnectivities: {\n                            rule: \"repeated\",\n                            type: \"PrivateConnectivity\",\n                            id: 9\n                          },\n                          createdTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 10\n                          },\n                          lastModifiedTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 11\n                          },\n                          regionStatus: {\n                            keyType: \"string\",\n                            type: \"NamespaceRegionStatus\",\n                            id: 12\n                          },\n                          connectivityRules: {\n                            rule: \"repeated\",\n                            type: \"temporal.api.cloud.connectivityrule.v1.ConnectivityRule\",\n                            id: 14\n                          },\n                          tags: {\n                            keyType: \"string\",\n                            type: \"string\",\n                            id: 15\n                          },\n                          capacity: {\n                            type: \"Capacity\",\n                            id: 16\n                          }\n                        }\n                      },\n                      NamespaceRegionStatus: {\n                        fields: {\n                          stateDeprecated: {\n                            type: \"string\",\n                            id: 1,\n                            options: {\n                              deprecated: true\n                            }\n                          },\n                          state: {\n                            type: \"State\",\n                            id: 3\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        },\n                        nested: {\n                          State: {\n                            values: {\n                              STATE_UNSPECIFIED: 0,\n                              STATE_ADDING: 1,\n                              STATE_ACTIVE: 2,\n                              STATE_PASSIVE: 3,\n                              STATE_REMOVING: 4,\n                              STATE_FAILED: 5\n                            }\n                          }\n                        }\n                      },\n                      ExportSinkSpec: {\n                        fields: {\n                          name: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          enabled: {\n                            type: \"bool\",\n                            id: 2\n                          },\n                          s3: {\n                            type: \"temporal.api.cloud.sink.v1.S3Spec\",\n                            id: 3\n                          },\n                          gcs: {\n                            type: \"temporal.api.cloud.sink.v1.GCSSpec\",\n                            id: 4\n                          }\n                        }\n                      },\n                      ExportSink: {\n                        fields: {\n                          name: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          state: {\n                            type: \"temporal.api.cloud.resource.v1.ResourceState\",\n                            id: 3\n                          },\n                          spec: {\n                            type: \"ExportSinkSpec\",\n                            id: 4\n                          },\n                          health: {\n                            type: \"Health\",\n                            id: 5\n                          },\n                          errorMessage: {\n                            type: \"string\",\n                            id: 6\n                          },\n                          latestDataExportTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 7\n                          },\n                          lastHealthCheckTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 8\n                          }\n                        },\n                        nested: {\n                          Health: {\n                            values: {\n                              HEALTH_UNSPECIFIED: 0,\n                              HEALTH_OK: 1,\n                              HEALTH_ERROR_INTERNAL: 2,\n                              HEALTH_ERROR_USER_CONFIGURATION: 3\n                            }\n                          }\n                        }\n                      },\n                      NamespaceCapacityInfo: {\n                        fields: {\n                          namespace: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          hasLegacyLimits: {\n                            type: \"bool\",\n                            id: 2\n                          },\n                          currentCapacity: {\n                            type: \"Capacity\",\n                            id: 3\n                          },\n                          modeOptions: {\n                            type: \"CapacityModeOptions\",\n                            id: 4\n                          },\n                          stats: {\n                            type: \"Stats\",\n                            id: 5\n                          }\n                        },\n                        nested: {\n                          CapacityModeOptions: {\n                            fields: {\n                              provisioned: {\n                                type: \"Provisioned\",\n                                id: 1\n                              },\n                              onDemand: {\n                                type: \"OnDemand\",\n                                id: 2\n                              }\n                            },\n                            nested: {\n                              Provisioned: {\n                                fields: {\n                                  validTruValues: {\n                                    rule: \"repeated\",\n                                    type: \"double\",\n                                    id: 1\n                                  },\n                                  maxAvailableTruValue: {\n                                    type: \"double\",\n                                    id: 2\n                                  }\n                                }\n                              },\n                              OnDemand: {\n                                fields: {\n                                  apsLimit: {\n                                    type: \"double\",\n                                    id: 1\n                                  }\n                                }\n                              }\n                            }\n                          },\n                          Stats: {\n                            fields: {\n                              aps: {\n                                type: \"Summary\",\n                                id: 1\n                              }\n                            },\n                            nested: {\n                              Summary: {\n                                fields: {\n                                  mean: {\n                                    type: \"double\",\n                                    id: 1\n                                  },\n                                  p90: {\n                                    type: \"double\",\n                                    id: 2\n                                  },\n                                  p99: {\n                                    type: \"double\",\n                                    id: 3\n                                  }\n                                }\n                              }\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              sink: {\n                nested: {\n                  v1: {\n                    options: {\n                      go_package: \"go.temporal.io/api/cloud/sink/v1;sink\",\n                      java_package: \"io.temporal.api.cloud.sink.v1\",\n                      java_multiple_files: true,\n                      java_outer_classname: \"MessageProto\",\n                      ruby_package: \"Temporalio::Api::Cloud::Sink::V1\",\n                      csharp_namespace: \"Temporalio.Api.Cloud.Sink.V1\"\n                    },\n                    nested: {\n                      S3Spec: {\n                        fields: {\n                          roleName: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          bucketName: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          region: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          kmsArn: {\n                            type: \"string\",\n                            id: 4\n                          },\n                          awsAccountId: {\n                            type: \"string\",\n                            id: 5\n                          }\n                        }\n                      },\n                      GCSSpec: {\n                        fields: {\n                          saId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          bucketName: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          gcpProjectId: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          region: {\n                            type: \"string\",\n                            id: 4\n                          }\n                        }\n                      },\n                      KinesisSpec: {\n                        fields: {\n                          roleName: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          destinationUri: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          region: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      },\n                      PubSubSpec: {\n                        fields: {\n                          serviceAccountId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          topicName: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          gcpProjectId: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              connectivityrule: {\n                nested: {\n                  v1: {\n                    options: {\n                      go_package: \"go.temporal.io/api/cloud/connectivityrule/v1;connectivityrule\",\n                      java_package: \"io.temporal.api.cloud.connectivityrule.v1\",\n                      java_multiple_files: true,\n                      java_outer_classname: \"MessageProto\",\n                      ruby_package: \"Temporalio::Api::Cloud::ConnectivityRule::V1\",\n                      csharp_namespace: \"Temporalio.Api.Cloud.ConnectivityRule.V1\"\n                    },\n                    nested: {\n                      ConnectivityRule: {\n                        fields: {\n                          id: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          spec: {\n                            type: \"ConnectivityRuleSpec\",\n                            id: 2\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 4\n                          },\n                          state: {\n                            type: \"temporal.api.cloud.resource.v1.ResourceState\",\n                            id: 5\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 6\n                          },\n                          createdTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 7\n                          }\n                        },\n                        reserved: [\n                          [\n                            3,\n                            3\n                          ]\n                        ]\n                      },\n                      ConnectivityRuleSpec: {\n                        oneofs: {\n                          connectionType: {\n                            oneof: [\n                              \"publicRule\",\n                              \"privateRule\"\n                            ]\n                          }\n                        },\n                        fields: {\n                          publicRule: {\n                            type: \"PublicConnectivityRule\",\n                            id: 1\n                          },\n                          privateRule: {\n                            type: \"PrivateConnectivityRule\",\n                            id: 2\n                          }\n                        }\n                      },\n                      PublicConnectivityRule: {\n                        fields: {}\n                      },\n                      PrivateConnectivityRule: {\n                        fields: {\n                          connectionId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          gcpProjectId: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          region: {\n                            type: \"string\",\n                            id: 3\n                          }\n                        },\n                        reserved: [\n                          [\n                            4,\n                            4\n                          ]\n                        ]\n                      }\n                    }\n                  }\n                }\n              },\n              nexus: {\n                nested: {\n                  v1: {\n                    options: {\n                      go_package: \"go.temporal.io/api/cloud/nexus/v1;nexus\",\n                      java_package: \"io.temporal.api.cloud.nexus.v1\",\n                      java_multiple_files: true,\n                      java_outer_classname: \"MessageProto\",\n                      ruby_package: \"Temporalio::Api::Cloud::Nexus::V1\",\n                      csharp_namespace: \"Temporalio.Api.Cloud.Nexus.V1\"\n                    },\n                    nested: {\n                      EndpointSpec: {\n                        fields: {\n                          name: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          targetSpec: {\n                            type: \"EndpointTargetSpec\",\n                            id: 2\n                          },\n                          policySpecs: {\n                            rule: \"repeated\",\n                            type: \"EndpointPolicySpec\",\n                            id: 3\n                          },\n                          descriptionDeprecated: {\n                            type: \"string\",\n                            id: 4,\n                            options: {\n                              deprecated: true\n                            }\n                          },\n                          description: {\n                            type: \"temporal.api.common.v1.Payload\",\n                            id: 5\n                          }\n                        }\n                      },\n                      EndpointTargetSpec: {\n                        oneofs: {\n                          variant: {\n                            oneof: [\n                              \"workerTargetSpec\"\n                            ]\n                          }\n                        },\n                        fields: {\n                          workerTargetSpec: {\n                            type: \"WorkerTargetSpec\",\n                            id: 1\n                          }\n                        }\n                      },\n                      WorkerTargetSpec: {\n                        fields: {\n                          namespaceId: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          taskQueue: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      EndpointPolicySpec: {\n                        oneofs: {\n                          variant: {\n                            oneof: [\n                              \"allowedCloudNamespacePolicySpec\"\n                            ]\n                          }\n                        },\n                        fields: {\n                          allowedCloudNamespacePolicySpec: {\n                            type: \"AllowedCloudNamespacePolicySpec\",\n                            id: 1\n                          }\n                        }\n                      },\n                      AllowedCloudNamespacePolicySpec: {\n                        fields: {\n                          namespaceId: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      },\n                      Endpoint: {\n                        fields: {\n                          id: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          spec: {\n                            type: \"EndpointSpec\",\n                            id: 3\n                          },\n                          state: {\n                            type: \"temporal.api.cloud.resource.v1.ResourceState\",\n                            id: 4\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 5\n                          },\n                          createdTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 6\n                          },\n                          lastModifiedTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 7\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              region: {\n                nested: {\n                  v1: {\n                    options: {\n                      go_package: \"go.temporal.io/api/cloud/region/v1;region\",\n                      java_package: \"io.temporal.api.cloud.region.v1\",\n                      java_multiple_files: true,\n                      java_outer_classname: \"MessageProto\",\n                      ruby_package: \"Temporalio::Api::Cloud::Region::V1\",\n                      csharp_namespace: \"Temporalio.Api.Cloud.Region.V1\"\n                    },\n                    nested: {\n                      Region: {\n                        fields: {\n                          id: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          cloudProviderDeprecated: {\n                            type: \"string\",\n                            id: 2,\n                            options: {\n                              deprecated: true\n                            }\n                          },\n                          cloudProvider: {\n                            type: \"CloudProvider\",\n                            id: 5\n                          },\n                          cloudProviderRegion: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          location: {\n                            type: \"string\",\n                            id: 4\n                          }\n                        },\n                        nested: {\n                          CloudProvider: {\n                            values: {\n                              CLOUD_PROVIDER_UNSPECIFIED: 0,\n                              CLOUD_PROVIDER_AWS: 1,\n                              CLOUD_PROVIDER_GCP: 2\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              account: {\n                nested: {\n                  v1: {\n                    options: {\n                      go_package: \"go.temporal.io/api/cloud/account/v1;account\",\n                      java_package: \"io.temporal.api.cloud.account.v1\",\n                      java_multiple_files: true,\n                      java_outer_classname: \"MessageProto\",\n                      ruby_package: \"Temporalio::Api::Cloud::Account::V1\",\n                      csharp_namespace: \"Temporalio.Api.Cloud.Account.V1\"\n                    },\n                    nested: {\n                      MetricsSpec: {\n                        fields: {\n                          acceptedClientCa: {\n                            type: \"bytes\",\n                            id: 2\n                          }\n                        }\n                      },\n                      AccountSpec: {\n                        fields: {\n                          metrics: {\n                            type: \"MetricsSpec\",\n                            id: 1\n                          }\n                        }\n                      },\n                      Metrics: {\n                        fields: {\n                          uri: {\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      },\n                      Account: {\n                        fields: {\n                          id: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          spec: {\n                            type: \"AccountSpec\",\n                            id: 2\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          state: {\n                            type: \"temporal.api.cloud.resource.v1.ResourceState\",\n                            id: 4\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 5\n                          },\n                          metrics: {\n                            type: \"Metrics\",\n                            id: 6\n                          }\n                        }\n                      },\n                      AuditLogSinkSpec: {\n                        oneofs: {\n                          sinkType: {\n                            oneof: [\n                              \"kinesisSink\",\n                              \"pubSubSink\"\n                            ]\n                          }\n                        },\n                        fields: {\n                          name: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          kinesisSink: {\n                            type: \"api.cloud.sink.v1.KinesisSpec\",\n                            id: 2\n                          },\n                          pubSubSink: {\n                            type: \"api.cloud.sink.v1.PubSubSpec\",\n                            id: 3\n                          },\n                          enabled: {\n                            type: \"bool\",\n                            id: 4\n                          }\n                        }\n                      },\n                      AuditLogSink: {\n                        fields: {\n                          name: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          resourceVersion: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          state: {\n                            type: \"temporal.api.cloud.resource.v1.ResourceState\",\n                            id: 3\n                          },\n                          spec: {\n                            type: \"AuditLogSinkSpec\",\n                            id: 4\n                          },\n                          health: {\n                            type: \"Health\",\n                            id: 5\n                          },\n                          errorMessage: {\n                            type: \"string\",\n                            id: 6\n                          },\n                          lastSucceededTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 7\n                          }\n                        },\n                        nested: {\n                          Health: {\n                            values: {\n                              HEALTH_UNSPECIFIED: 0,\n                              HEALTH_OK: 1,\n                              HEALTH_ERROR_INTERNAL: 2,\n                              HEALTH_ERROR_USER_CONFIGURATION: 3\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              usage: {\n                nested: {\n                  v1: {\n                    options: {\n                      go_package: \"go.temporal.io/api/cloud/usage/v1;usage\",\n                      java_package: \"io.temporal.api.cloud.usage.v1\",\n                      java_multiple_files: true,\n                      java_outer_classname: \"MessageProto\",\n                      ruby_package: \"Temporalio::Api::Cloud::Usage::V1\",\n                      csharp_namespace: \"Temporalio.Api.Cloud.Usage.V1\"\n                    },\n                    nested: {\n                      Summary: {\n                        fields: {\n                          startTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 1\n                          },\n                          endTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 2\n                          },\n                          recordGroups: {\n                            rule: \"repeated\",\n                            type: \"RecordGroup\",\n                            id: 3\n                          },\n                          incomplete: {\n                            type: \"bool\",\n                            id: 4\n                          }\n                        }\n                      },\n                      RecordGroup: {\n                        fields: {\n                          groupBys: {\n                            rule: \"repeated\",\n                            type: \"GroupBy\",\n                            id: 1\n                          },\n                          records: {\n                            rule: \"repeated\",\n                            type: \"Record\",\n                            id: 2\n                          }\n                        }\n                      },\n                      GroupBy: {\n                        fields: {\n                          key: {\n                            type: \"GroupByKey\",\n                            id: 1\n                          },\n                          value: {\n                            type: \"string\",\n                            id: 2\n                          }\n                        }\n                      },\n                      Record: {\n                        fields: {\n                          type: {\n                            type: \"RecordType\",\n                            id: 1\n                          },\n                          unit: {\n                            type: \"RecordUnit\",\n                            id: 2\n                          },\n                          value: {\n                            type: \"double\",\n                            id: 3\n                          }\n                        }\n                      },\n                      RecordType: {\n                        values: {\n                          RECORD_TYPE_UNSPECIFIED: 0,\n                          RECORD_TYPE_ACTIONS: 1,\n                          RECORD_TYPE_ACTIVE_STORAGE: 2,\n                          RECORD_TYPE_RETAINED_STORAGE: 3\n                        }\n                      },\n                      RecordUnit: {\n                        values: {\n                          RECORD_UNIT_UNSPECIFIED: 0,\n                          RECORD_UNIT_NUMBER: 1,\n                          RECORD_UNIT_BYTE_SECONDS: 2\n                        }\n                      },\n                      GroupByKey: {\n                        values: {\n                          GROUP_BY_KEY_UNSPECIFIED: 0,\n                          GROUP_BY_KEY_NAMESPACE: 1\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              auditlog: {\n                nested: {\n                  v1: {\n                    options: {\n                      go_package: \"go.temporal.io/api/cloud/auditlog/v1;auditlog\",\n                      java_package: \"io.temporal.api.cloud.auditlog.v1\",\n                      java_multiple_files: true,\n                      java_outer_classname: \"MessageProto\",\n                      ruby_package: \"Temporalio::Api::Cloud::AuditLog::V1\",\n                      csharp_namespace: \"Temporalio.Api.Cloud.AuditLog.V1\"\n                    },\n                    nested: {\n                      LogRecord: {\n                        fields: {\n                          emitTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 1\n                          },\n                          operation: {\n                            type: \"string\",\n                            id: 5\n                          },\n                          status: {\n                            type: \"string\",\n                            id: 7\n                          },\n                          version: {\n                            type: \"int32\",\n                            id: 9\n                          },\n                          logId: {\n                            type: \"string\",\n                            id: 10\n                          },\n                          principal: {\n                            type: \"Principal\",\n                            id: 12\n                          },\n                          rawDetails: {\n                            type: \"google.protobuf.Struct\",\n                            id: 13\n                          },\n                          xForwardedFor: {\n                            type: \"string\",\n                            id: 14\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 15\n                          }\n                        }\n                      },\n                      Principal: {\n                        fields: {\n                          type: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          id: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          name: {\n                            type: \"string\",\n                            id: 3\n                          },\n                          apiKeyId: {\n                            type: \"string\",\n                            id: 4\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              billing: {\n                nested: {\n                  v1: {\n                    options: {\n                      go_package: \"go.temporal.io/api/cloud/billing/v1;billing\",\n                      java_package: \"io.temporal.api.cloud.billing.v1\",\n                      java_multiple_files: true,\n                      java_outer_classname: \"MessageProto\",\n                      ruby_package: \"Temporalio::Api::Cloud::Billing::V1\",\n                      csharp_namespace: \"Temporalio.Api.Cloud.Billing.V1\"\n                    },\n                    nested: {\n                      BillingReportSpec: {\n                        fields: {\n                          startTimeInclusive: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 1\n                          },\n                          endTimeExclusive: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 2\n                          },\n                          downloadUrlExpirationDuration: {\n                            type: \"google.protobuf.Duration\",\n                            id: 3\n                          },\n                          description: {\n                            type: \"string\",\n                            id: 4\n                          }\n                        }\n                      },\n                      BillingReport: {\n                        fields: {\n                          id: {\n                            type: \"string\",\n                            id: 1\n                          },\n                          state: {\n                            type: \"BillingReportState\",\n                            id: 2\n                          },\n                          spec: {\n                            type: \"BillingReportSpec\",\n                            id: 3\n                          },\n                          downloadInfo: {\n                            rule: \"repeated\",\n                            type: \"Download\",\n                            id: 4\n                          },\n                          requestedTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 5\n                          },\n                          generatedTime: {\n                            type: \"google.protobuf.Timestamp\",\n                            id: 6\n                          },\n                          asyncOperationId: {\n                            type: \"string\",\n                            id: 7\n                          }\n                        },\n                        nested: {\n                          Download: {\n                            fields: {\n                              url: {\n                                type: \"string\",\n                                id: 1\n                              },\n                              urlExpirationTime: {\n                                type: \"google.protobuf.Timestamp\",\n                                id: 2\n                              },\n                              fileFormat: {\n                                type: \"FileFormat\",\n                                id: 3\n                              },\n                              fileSizeBytes: {\n                                type: \"int64\",\n                                id: 4\n                              }\n                            },\n                            nested: {\n                              FileFormat: {\n                                values: {\n                                  FILE_FORMAT_UNSPECIFIED: 0,\n                                  FILE_FORMAT_CSV: 1\n                                }\n                              }\n                            }\n                          },\n                          BillingReportState: {\n                            values: {\n                              BILLING_REPORT_STATE_UNSPECIFIED: 0,\n                              BILLING_REPORT_STATE_IN_PROGRESS: 1,\n                              BILLING_REPORT_STATE_GENERATED: 2,\n                              BILLING_REPORT_STATE_FAILED: 3\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          errordetails: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/errordetails/v1;errordetails\",\n                  java_package: \"io.temporal.api.errordetails.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"MessageProto\",\n                  ruby_package: \"Temporalio::Api::ErrorDetails::V1\",\n                  csharp_namespace: \"Temporalio.Api.ErrorDetails.V1\"\n                },\n                nested: {\n                  NotFoundFailure: {\n                    fields: {\n                      currentCluster: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      activeCluster: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  WorkflowExecutionAlreadyStartedFailure: {\n                    fields: {\n                      startRequestId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  NamespaceNotActiveFailure: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      currentCluster: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      activeCluster: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  NamespaceUnavailableFailure: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  NamespaceInvalidStateFailure: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      state: {\n                        type: \"temporal.api.enums.v1.NamespaceState\",\n                        id: 2\n                      },\n                      allowedStates: {\n                        rule: \"repeated\",\n                        type: \"temporal.api.enums.v1.NamespaceState\",\n                        id: 3\n                      }\n                    }\n                  },\n                  NamespaceNotFoundFailure: {\n                    fields: {\n                      namespace: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  NamespaceAlreadyExistsFailure: {\n                    fields: {}\n                  },\n                  ClientVersionNotSupportedFailure: {\n                    fields: {\n                      clientVersion: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      clientName: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      supportedVersions: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  ServerVersionNotSupportedFailure: {\n                    fields: {\n                      serverVersion: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      clientSupportedServerVersions: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  CancellationAlreadyRequestedFailure: {\n                    fields: {}\n                  },\n                  QueryFailedFailure: {\n                    fields: {\n                      failure: {\n                        type: \"temporal.api.failure.v1.Failure\",\n                        id: 1\n                      }\n                    }\n                  },\n                  PermissionDeniedFailure: {\n                    fields: {\n                      reason: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  ResourceExhaustedFailure: {\n                    fields: {\n                      cause: {\n                        type: \"temporal.api.enums.v1.ResourceExhaustedCause\",\n                        id: 1\n                      },\n                      scope: {\n                        type: \"temporal.api.enums.v1.ResourceExhaustedScope\",\n                        id: 2\n                      }\n                    }\n                  },\n                  SystemWorkflowFailure: {\n                    fields: {\n                      workflowExecution: {\n                        type: \"temporal.api.common.v1.WorkflowExecution\",\n                        id: 1\n                      },\n                      workflowError: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  WorkflowNotReadyFailure: {\n                    fields: {}\n                  },\n                  NewerBuildExistsFailure: {\n                    fields: {\n                      defaultBuildId: {\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  },\n                  MultiOperationExecutionFailure: {\n                    fields: {\n                      statuses: {\n                        rule: \"repeated\",\n                        type: \"OperationStatus\",\n                        id: 1\n                      }\n                    },\n                    nested: {\n                      OperationStatus: {\n                        fields: {\n                          code: {\n                            type: \"int32\",\n                            id: 1\n                          },\n                          message: {\n                            type: \"string\",\n                            id: 2\n                          },\n                          details: {\n                            rule: \"repeated\",\n                            type: \"google.protobuf.Any\",\n                            id: 3\n                          }\n                        }\n                      }\n                    }\n                  },\n                  ActivityExecutionAlreadyStartedFailure: {\n                    fields: {\n                      startRequestId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  NexusOperationExecutionAlreadyStartedFailure: {\n                    fields: {\n                      startRequestId: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      runId: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          testservice: {\n            nested: {\n              v1: {\n                options: {\n                  go_package: \"go.temporal.io/api/testservice/v1;testservice\",\n                  java_package: \"io.temporal.api.testservice.v1\",\n                  java_multiple_files: true,\n                  java_outer_classname: \"ServiceProto\",\n                  ruby_package: \"Temporalio::Api::TestService::V1\",\n                  csharp_namespace: \"Temporalio.Api.TestService.V1\"\n                },\n                nested: {\n                  LockTimeSkippingRequest: {\n                    fields: {}\n                  },\n                  LockTimeSkippingResponse: {\n                    fields: {}\n                  },\n                  UnlockTimeSkippingRequest: {\n                    fields: {}\n                  },\n                  UnlockTimeSkippingResponse: {\n                    fields: {}\n                  },\n                  SleepUntilRequest: {\n                    fields: {\n                      timestamp: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 1\n                      }\n                    }\n                  },\n                  SleepRequest: {\n                    fields: {\n                      duration: {\n                        type: \"google.protobuf.Duration\",\n                        id: 1\n                      }\n                    }\n                  },\n                  SleepResponse: {\n                    fields: {}\n                  },\n                  GetCurrentTimeResponse: {\n                    fields: {\n                      time: {\n                        type: \"google.protobuf.Timestamp\",\n                        id: 1\n                      }\n                    }\n                  },\n                  TestService: {\n                    methods: {\n                      LockTimeSkipping: {\n                        requestType: \"LockTimeSkippingRequest\",\n                        responseType: \"LockTimeSkippingResponse\"\n                      },\n                      UnlockTimeSkipping: {\n                        requestType: \"UnlockTimeSkippingRequest\",\n                        responseType: \"UnlockTimeSkippingResponse\"\n                      },\n                      Sleep: {\n                        requestType: \"SleepRequest\",\n                        responseType: \"SleepResponse\"\n                      },\n                      SleepUntil: {\n                        requestType: \"SleepUntilRequest\",\n                        responseType: \"SleepResponse\"\n                      },\n                      UnlockTimeSkippingWithSleep: {\n                        requestType: \"SleepRequest\",\n                        responseType: \"SleepResponse\"\n                      },\n                      GetCurrentTime: {\n                        requestType: \"google.protobuf.Empty\",\n                        responseType: \"GetCurrentTimeResponse\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  google: {\n    nested: {\n      protobuf: {\n        options: {\n          go_package: \"google.golang.org/protobuf/types/descriptorpb\",\n          java_package: \"com.google.protobuf\",\n          java_outer_classname: \"DescriptorProtos\",\n          csharp_namespace: \"Google.Protobuf.Reflection\",\n          objc_class_prefix: \"GPB\",\n          cc_enable_arenas: true,\n          optimize_for: \"SPEED\"\n        },\n        nested: {\n          Duration: {\n            fields: {\n              seconds: {\n                type: \"int64\",\n                id: 1\n              },\n              nanos: {\n                type: \"int32\",\n                id: 2\n              }\n            }\n          },\n          Empty: {\n            fields: {}\n          },\n          Timestamp: {\n            fields: {\n              seconds: {\n                type: \"int64\",\n                id: 1\n              },\n              nanos: {\n                type: \"int32\",\n                id: 2\n              }\n            }\n          },\n          FieldMask: {\n            fields: {\n              paths: {\n                rule: \"repeated\",\n                type: \"string\",\n                id: 1\n              }\n            }\n          },\n          DoubleValue: {\n            fields: {\n              value: {\n                type: \"double\",\n                id: 1\n              }\n            }\n          },\n          FloatValue: {\n            fields: {\n              value: {\n                type: \"float\",\n                id: 1\n              }\n            }\n          },\n          Int64Value: {\n            fields: {\n              value: {\n                type: \"int64\",\n                id: 1\n              }\n            }\n          },\n          UInt64Value: {\n            fields: {\n              value: {\n                type: \"uint64\",\n                id: 1\n              }\n            }\n          },\n          Int32Value: {\n            fields: {\n              value: {\n                type: \"int32\",\n                id: 1\n              }\n            }\n          },\n          UInt32Value: {\n            fields: {\n              value: {\n                type: \"uint32\",\n                id: 1\n              }\n            }\n          },\n          BoolValue: {\n            fields: {\n              value: {\n                type: \"bool\",\n                id: 1\n              }\n            }\n          },\n          StringValue: {\n            fields: {\n              value: {\n                type: \"string\",\n                id: 1\n              }\n            }\n          },\n          BytesValue: {\n            fields: {\n              value: {\n                type: \"bytes\",\n                id: 1\n              }\n            }\n          },\n          Any: {\n            fields: {\n              type_url: {\n                type: \"string\",\n                id: 1\n              },\n              value: {\n                type: \"bytes\",\n                id: 2\n              }\n            }\n          },\n          FileDescriptorSet: {\n            edition: \"proto2\",\n            fields: {\n              file: {\n                rule: \"repeated\",\n                type: \"FileDescriptorProto\",\n                id: 1\n              }\n            }\n          },\n          Edition: {\n            edition: \"proto2\",\n            values: {\n              EDITION_UNKNOWN: 0,\n              EDITION_PROTO2: 998,\n              EDITION_PROTO3: 999,\n              EDITION_2023: 1000,\n              EDITION_1_TEST_ONLY: 1,\n              EDITION_2_TEST_ONLY: 2,\n              EDITION_99997_TEST_ONLY: 99997,\n              EDITION_99998_TEST_ONLY: 99998,\n              EDITION_99999_TEST_ONLY: 99999\n            }\n          },\n          FileDescriptorProto: {\n            edition: \"proto2\",\n            fields: {\n              name: {\n                type: \"string\",\n                id: 1\n              },\n              \"package\": {\n                type: \"string\",\n                id: 2\n              },\n              dependency: {\n                rule: \"repeated\",\n                type: \"string\",\n                id: 3\n              },\n              publicDependency: {\n                rule: \"repeated\",\n                type: \"int32\",\n                id: 10\n              },\n              weakDependency: {\n                rule: \"repeated\",\n                type: \"int32\",\n                id: 11\n              },\n              messageType: {\n                rule: \"repeated\",\n                type: \"DescriptorProto\",\n                id: 4\n              },\n              enumType: {\n                rule: \"repeated\",\n                type: \"EnumDescriptorProto\",\n                id: 5\n              },\n              service: {\n                rule: \"repeated\",\n                type: \"ServiceDescriptorProto\",\n                id: 6\n              },\n              extension: {\n                rule: \"repeated\",\n                type: \"FieldDescriptorProto\",\n                id: 7\n              },\n              options: {\n                type: \"FileOptions\",\n                id: 8\n              },\n              sourceCodeInfo: {\n                type: \"SourceCodeInfo\",\n                id: 9\n              },\n              syntax: {\n                type: \"string\",\n                id: 12\n              },\n              edition: {\n                type: \"Edition\",\n                id: 14\n              }\n            }\n          },\n          DescriptorProto: {\n            edition: \"proto2\",\n            fields: {\n              name: {\n                type: \"string\",\n                id: 1\n              },\n              field: {\n                rule: \"repeated\",\n                type: \"FieldDescriptorProto\",\n                id: 2\n              },\n              extension: {\n                rule: \"repeated\",\n                type: \"FieldDescriptorProto\",\n                id: 6\n              },\n              nestedType: {\n                rule: \"repeated\",\n                type: \"DescriptorProto\",\n                id: 3\n              },\n              enumType: {\n                rule: \"repeated\",\n                type: \"EnumDescriptorProto\",\n                id: 4\n              },\n              extensionRange: {\n                rule: \"repeated\",\n                type: \"ExtensionRange\",\n                id: 5\n              },\n              oneofDecl: {\n                rule: \"repeated\",\n                type: \"OneofDescriptorProto\",\n                id: 8\n              },\n              options: {\n                type: \"MessageOptions\",\n                id: 7\n              },\n              reservedRange: {\n                rule: \"repeated\",\n                type: \"ReservedRange\",\n                id: 9\n              },\n              reservedName: {\n                rule: \"repeated\",\n                type: \"string\",\n                id: 10\n              }\n            },\n            nested: {\n              ExtensionRange: {\n                fields: {\n                  start: {\n                    type: \"int32\",\n                    id: 1\n                  },\n                  end: {\n                    type: \"int32\",\n                    id: 2\n                  },\n                  options: {\n                    type: \"ExtensionRangeOptions\",\n                    id: 3\n                  }\n                }\n              },\n              ReservedRange: {\n                fields: {\n                  start: {\n                    type: \"int32\",\n                    id: 1\n                  },\n                  end: {\n                    type: \"int32\",\n                    id: 2\n                  }\n                }\n              }\n            }\n          },\n          ExtensionRangeOptions: {\n            edition: \"proto2\",\n            fields: {\n              uninterpretedOption: {\n                rule: \"repeated\",\n                type: \"UninterpretedOption\",\n                id: 999\n              },\n              declaration: {\n                rule: \"repeated\",\n                type: \"Declaration\",\n                id: 2,\n                options: {\n                  retention: \"RETENTION_SOURCE\"\n                }\n              },\n              features: {\n                type: \"FeatureSet\",\n                id: 50\n              },\n              verification: {\n                type: \"VerificationState\",\n                id: 3,\n                options: {\n                  \"default\": \"UNVERIFIED\"\n                }\n              }\n            },\n            extensions: [\n              [\n                1000,\n                536870911\n              ]\n            ],\n            nested: {\n              Declaration: {\n                fields: {\n                  number: {\n                    type: \"int32\",\n                    id: 1\n                  },\n                  fullName: {\n                    type: \"string\",\n                    id: 2\n                  },\n                  type: {\n                    type: \"string\",\n                    id: 3\n                  },\n                  reserved: {\n                    type: \"bool\",\n                    id: 5\n                  },\n                  repeated: {\n                    type: \"bool\",\n                    id: 6\n                  }\n                },\n                reserved: [\n                  [\n                    4,\n                    4\n                  ]\n                ]\n              },\n              VerificationState: {\n                values: {\n                  DECLARATION: 0,\n                  UNVERIFIED: 1\n                }\n              }\n            }\n          },\n          FieldDescriptorProto: {\n            edition: \"proto2\",\n            fields: {\n              name: {\n                type: \"string\",\n                id: 1\n              },\n              number: {\n                type: \"int32\",\n                id: 3\n              },\n              label: {\n                type: \"Label\",\n                id: 4\n              },\n              type: {\n                type: \"Type\",\n                id: 5\n              },\n              typeName: {\n                type: \"string\",\n                id: 6\n              },\n              extendee: {\n                type: \"string\",\n                id: 2\n              },\n              defaultValue: {\n                type: \"string\",\n                id: 7\n              },\n              oneofIndex: {\n                type: \"int32\",\n                id: 9\n              },\n              jsonName: {\n                type: \"string\",\n                id: 10\n              },\n              options: {\n                type: \"FieldOptions\",\n                id: 8\n              },\n              proto3Optional: {\n                type: \"bool\",\n                id: 17\n              }\n            },\n            nested: {\n              Type: {\n                values: {\n                  TYPE_DOUBLE: 1,\n                  TYPE_FLOAT: 2,\n                  TYPE_INT64: 3,\n                  TYPE_UINT64: 4,\n                  TYPE_INT32: 5,\n                  TYPE_FIXED64: 6,\n                  TYPE_FIXED32: 7,\n                  TYPE_BOOL: 8,\n                  TYPE_STRING: 9,\n                  TYPE_GROUP: 10,\n                  TYPE_MESSAGE: 11,\n                  TYPE_BYTES: 12,\n                  TYPE_UINT32: 13,\n                  TYPE_ENUM: 14,\n                  TYPE_SFIXED32: 15,\n                  TYPE_SFIXED64: 16,\n                  TYPE_SINT32: 17,\n                  TYPE_SINT64: 18\n                }\n              },\n              Label: {\n                values: {\n                  LABEL_OPTIONAL: 1,\n                  LABEL_REQUIRED: 2,\n                  LABEL_REPEATED: 3\n                }\n              }\n            }\n          },\n          OneofDescriptorProto: {\n            edition: \"proto2\",\n            fields: {\n              name: {\n                type: \"string\",\n                id: 1\n              },\n              options: {\n                type: \"OneofOptions\",\n                id: 2\n              }\n            }\n          },\n          EnumDescriptorProto: {\n            edition: \"proto2\",\n            fields: {\n              name: {\n                type: \"string\",\n                id: 1\n              },\n              value: {\n                rule: \"repeated\",\n                type: \"EnumValueDescriptorProto\",\n                id: 2\n              },\n              options: {\n                type: \"EnumOptions\",\n                id: 3\n              },\n              reservedRange: {\n                rule: \"repeated\",\n                type: \"EnumReservedRange\",\n                id: 4\n              },\n              reservedName: {\n                rule: \"repeated\",\n                type: \"string\",\n                id: 5\n              }\n            },\n            nested: {\n              EnumReservedRange: {\n                fields: {\n                  start: {\n                    type: \"int32\",\n                    id: 1\n                  },\n                  end: {\n                    type: \"int32\",\n                    id: 2\n                  }\n                }\n              }\n            }\n          },\n          EnumValueDescriptorProto: {\n            edition: \"proto2\",\n            fields: {\n              name: {\n                type: \"string\",\n                id: 1\n              },\n              number: {\n                type: \"int32\",\n                id: 2\n              },\n              options: {\n                type: \"EnumValueOptions\",\n                id: 3\n              }\n            }\n          },\n          ServiceDescriptorProto: {\n            edition: \"proto2\",\n            fields: {\n              name: {\n                type: \"string\",\n                id: 1\n              },\n              method: {\n                rule: \"repeated\",\n                type: \"MethodDescriptorProto\",\n                id: 2\n              },\n              options: {\n                type: \"ServiceOptions\",\n                id: 3\n              }\n            }\n          },\n          MethodDescriptorProto: {\n            edition: \"proto2\",\n            fields: {\n              name: {\n                type: \"string\",\n                id: 1\n              },\n              inputType: {\n                type: \"string\",\n                id: 2\n              },\n              outputType: {\n                type: \"string\",\n                id: 3\n              },\n              options: {\n                type: \"MethodOptions\",\n                id: 4\n              },\n              clientStreaming: {\n                type: \"bool\",\n                id: 5,\n                options: {\n                  \"default\": false\n                }\n              },\n              serverStreaming: {\n                type: \"bool\",\n                id: 6,\n                options: {\n                  \"default\": false\n                }\n              }\n            }\n          },\n          FileOptions: {\n            edition: \"proto2\",\n            fields: {\n              javaPackage: {\n                type: \"string\",\n                id: 1\n              },\n              javaOuterClassname: {\n                type: \"string\",\n                id: 8\n              },\n              javaMultipleFiles: {\n                type: \"bool\",\n                id: 10,\n                options: {\n                  \"default\": false\n                }\n              },\n              javaGenerateEqualsAndHash: {\n                type: \"bool\",\n                id: 20,\n                options: {\n                  deprecated: true\n                }\n              },\n              javaStringCheckUtf8: {\n                type: \"bool\",\n                id: 27,\n                options: {\n                  \"default\": false\n                }\n              },\n              optimizeFor: {\n                type: \"OptimizeMode\",\n                id: 9,\n                options: {\n                  \"default\": \"SPEED\"\n                }\n              },\n              goPackage: {\n                type: \"string\",\n                id: 11\n              },\n              ccGenericServices: {\n                type: \"bool\",\n                id: 16,\n                options: {\n                  \"default\": false\n                }\n              },\n              javaGenericServices: {\n                type: \"bool\",\n                id: 17,\n                options: {\n                  \"default\": false\n                }\n              },\n              pyGenericServices: {\n                type: \"bool\",\n                id: 18,\n                options: {\n                  \"default\": false\n                }\n              },\n              phpGenericServices: {\n                type: \"bool\",\n                id: 42,\n                options: {\n                  \"default\": false\n                }\n              },\n              deprecated: {\n                type: \"bool\",\n                id: 23,\n                options: {\n                  \"default\": false\n                }\n              },\n              ccEnableArenas: {\n                type: \"bool\",\n                id: 31,\n                options: {\n                  \"default\": true\n                }\n              },\n              objcClassPrefix: {\n                type: \"string\",\n                id: 36\n              },\n              csharpNamespace: {\n                type: \"string\",\n                id: 37\n              },\n              swiftPrefix: {\n                type: \"string\",\n                id: 39\n              },\n              phpClassPrefix: {\n                type: \"string\",\n                id: 40\n              },\n              phpNamespace: {\n                type: \"string\",\n                id: 41\n              },\n              phpMetadataNamespace: {\n                type: \"string\",\n                id: 44\n              },\n              rubyPackage: {\n                type: \"string\",\n                id: 45\n              },\n              features: {\n                type: \"FeatureSet\",\n                id: 50\n              },\n              uninterpretedOption: {\n                rule: \"repeated\",\n                type: \"UninterpretedOption\",\n                id: 999\n              }\n            },\n            extensions: [\n              [\n                1000,\n                536870911\n              ]\n            ],\n            reserved: [\n              [\n                38,\n                38\n              ]\n            ],\n            nested: {\n              OptimizeMode: {\n                values: {\n                  SPEED: 1,\n                  CODE_SIZE: 2,\n                  LITE_RUNTIME: 3\n                }\n              }\n            }\n          },\n          MessageOptions: {\n            edition: \"proto2\",\n            fields: {\n              messageSetWireFormat: {\n                type: \"bool\",\n                id: 1,\n                options: {\n                  \"default\": false\n                }\n              },\n              noStandardDescriptorAccessor: {\n                type: \"bool\",\n                id: 2,\n                options: {\n                  \"default\": false\n                }\n              },\n              deprecated: {\n                type: \"bool\",\n                id: 3,\n                options: {\n                  \"default\": false\n                }\n              },\n              mapEntry: {\n                type: \"bool\",\n                id: 7\n              },\n              deprecatedLegacyJsonFieldConflicts: {\n                type: \"bool\",\n                id: 11,\n                options: {\n                  deprecated: true\n                }\n              },\n              features: {\n                type: \"FeatureSet\",\n                id: 12\n              },\n              uninterpretedOption: {\n                rule: \"repeated\",\n                type: \"UninterpretedOption\",\n                id: 999\n              }\n            },\n            extensions: [\n              [\n                1000,\n                536870911\n              ]\n            ],\n            reserved: [\n              [\n                4,\n                4\n              ],\n              [\n                5,\n                5\n              ],\n              [\n                6,\n                6\n              ],\n              [\n                8,\n                8\n              ],\n              [\n                9,\n                9\n              ]\n            ]\n          },\n          FieldOptions: {\n            edition: \"proto2\",\n            fields: {\n              ctype: {\n                type: \"CType\",\n                id: 1,\n                options: {\n                  \"default\": \"STRING\"\n                }\n              },\n              packed: {\n                type: \"bool\",\n                id: 2\n              },\n              jstype: {\n                type: \"JSType\",\n                id: 6,\n                options: {\n                  \"default\": \"JS_NORMAL\"\n                }\n              },\n              lazy: {\n                type: \"bool\",\n                id: 5,\n                options: {\n                  \"default\": false\n                }\n              },\n              unverifiedLazy: {\n                type: \"bool\",\n                id: 15,\n                options: {\n                  \"default\": false\n                }\n              },\n              deprecated: {\n                type: \"bool\",\n                id: 3,\n                options: {\n                  \"default\": false\n                }\n              },\n              weak: {\n                type: \"bool\",\n                id: 10,\n                options: {\n                  \"default\": false\n                }\n              },\n              debugRedact: {\n                type: \"bool\",\n                id: 16,\n                options: {\n                  \"default\": false\n                }\n              },\n              retention: {\n                type: \"OptionRetention\",\n                id: 17\n              },\n              targets: {\n                rule: \"repeated\",\n                type: \"OptionTargetType\",\n                id: 19\n              },\n              editionDefaults: {\n                rule: \"repeated\",\n                type: \"EditionDefault\",\n                id: 20\n              },\n              features: {\n                type: \"FeatureSet\",\n                id: 21\n              },\n              uninterpretedOption: {\n                rule: \"repeated\",\n                type: \"UninterpretedOption\",\n                id: 999\n              }\n            },\n            extensions: [\n              [\n                1000,\n                536870911\n              ]\n            ],\n            reserved: [\n              [\n                4,\n                4\n              ],\n              [\n                18,\n                18\n              ]\n            ],\n            nested: {\n              CType: {\n                values: {\n                  STRING: 0,\n                  CORD: 1,\n                  STRING_PIECE: 2\n                }\n              },\n              JSType: {\n                values: {\n                  JS_NORMAL: 0,\n                  JS_STRING: 1,\n                  JS_NUMBER: 2\n                }\n              },\n              OptionRetention: {\n                values: {\n                  RETENTION_UNKNOWN: 0,\n                  RETENTION_RUNTIME: 1,\n                  RETENTION_SOURCE: 2\n                }\n              },\n              OptionTargetType: {\n                values: {\n                  TARGET_TYPE_UNKNOWN: 0,\n                  TARGET_TYPE_FILE: 1,\n                  TARGET_TYPE_EXTENSION_RANGE: 2,\n                  TARGET_TYPE_MESSAGE: 3,\n                  TARGET_TYPE_FIELD: 4,\n                  TARGET_TYPE_ONEOF: 5,\n                  TARGET_TYPE_ENUM: 6,\n                  TARGET_TYPE_ENUM_ENTRY: 7,\n                  TARGET_TYPE_SERVICE: 8,\n                  TARGET_TYPE_METHOD: 9\n                }\n              },\n              EditionDefault: {\n                fields: {\n                  edition: {\n                    type: \"Edition\",\n                    id: 3\n                  },\n                  value: {\n                    type: \"string\",\n                    id: 2\n                  }\n                }\n              }\n            }\n          },\n          OneofOptions: {\n            edition: \"proto2\",\n            fields: {\n              features: {\n                type: \"FeatureSet\",\n                id: 1\n              },\n              uninterpretedOption: {\n                rule: \"repeated\",\n                type: \"UninterpretedOption\",\n                id: 999\n              }\n            },\n            extensions: [\n              [\n                1000,\n                536870911\n              ]\n            ]\n          },\n          EnumOptions: {\n            edition: \"proto2\",\n            fields: {\n              allowAlias: {\n                type: \"bool\",\n                id: 2\n              },\n              deprecated: {\n                type: \"bool\",\n                id: 3,\n                options: {\n                  \"default\": false\n                }\n              },\n              deprecatedLegacyJsonFieldConflicts: {\n                type: \"bool\",\n                id: 6,\n                options: {\n                  deprecated: true\n                }\n              },\n              features: {\n                type: \"FeatureSet\",\n                id: 7\n              },\n              uninterpretedOption: {\n                rule: \"repeated\",\n                type: \"UninterpretedOption\",\n                id: 999\n              }\n            },\n            extensions: [\n              [\n                1000,\n                536870911\n              ]\n            ],\n            reserved: [\n              [\n                5,\n                5\n              ]\n            ]\n          },\n          EnumValueOptions: {\n            edition: \"proto2\",\n            fields: {\n              deprecated: {\n                type: \"bool\",\n                id: 1,\n                options: {\n                  \"default\": false\n                }\n              },\n              features: {\n                type: \"FeatureSet\",\n                id: 2\n              },\n              debugRedact: {\n                type: \"bool\",\n                id: 3,\n                options: {\n                  \"default\": false\n                }\n              },\n              uninterpretedOption: {\n                rule: \"repeated\",\n                type: \"UninterpretedOption\",\n                id: 999\n              }\n            },\n            extensions: [\n              [\n                1000,\n                536870911\n              ]\n            ]\n          },\n          ServiceOptions: {\n            edition: \"proto2\",\n            fields: {\n              features: {\n                type: \"FeatureSet\",\n                id: 34\n              },\n              deprecated: {\n                type: \"bool\",\n                id: 33,\n                options: {\n                  \"default\": false\n                }\n              },\n              uninterpretedOption: {\n                rule: \"repeated\",\n                type: \"UninterpretedOption\",\n                id: 999\n              }\n            },\n            extensions: [\n              [\n                1000,\n                536870911\n              ]\n            ]\n          },\n          MethodOptions: {\n            edition: \"proto2\",\n            fields: {\n              deprecated: {\n                type: \"bool\",\n                id: 33,\n                options: {\n                  \"default\": false\n                }\n              },\n              idempotencyLevel: {\n                type: \"IdempotencyLevel\",\n                id: 34,\n                options: {\n                  \"default\": \"IDEMPOTENCY_UNKNOWN\"\n                }\n              },\n              features: {\n                type: \"FeatureSet\",\n                id: 35\n              },\n              uninterpretedOption: {\n                rule: \"repeated\",\n                type: \"UninterpretedOption\",\n                id: 999\n              }\n            },\n            extensions: [\n              [\n                1000,\n                536870911\n              ]\n            ],\n            nested: {\n              IdempotencyLevel: {\n                values: {\n                  IDEMPOTENCY_UNKNOWN: 0,\n                  NO_SIDE_EFFECTS: 1,\n                  IDEMPOTENT: 2\n                }\n              }\n            }\n          },\n          UninterpretedOption: {\n            edition: \"proto2\",\n            fields: {\n              name: {\n                rule: \"repeated\",\n                type: \"NamePart\",\n                id: 2\n              },\n              identifierValue: {\n                type: \"string\",\n                id: 3\n              },\n              positiveIntValue: {\n                type: \"uint64\",\n                id: 4\n              },\n              negativeIntValue: {\n                type: \"int64\",\n                id: 5\n              },\n              doubleValue: {\n                type: \"double\",\n                id: 6\n              },\n              stringValue: {\n                type: \"bytes\",\n                id: 7\n              },\n              aggregateValue: {\n                type: \"string\",\n                id: 8\n              }\n            },\n            nested: {\n              NamePart: {\n                fields: {\n                  namePart: {\n                    rule: \"required\",\n                    type: \"string\",\n                    id: 1\n                  },\n                  isExtension: {\n                    rule: \"required\",\n                    type: \"bool\",\n                    id: 2\n                  }\n                }\n              }\n            }\n          },\n          FeatureSet: {\n            edition: \"proto2\",\n            fields: {\n              fieldPresence: {\n                type: \"FieldPresence\",\n                id: 1,\n                options: {\n                  retention: \"RETENTION_RUNTIME\",\n                  targets: \"TARGET_TYPE_FILE\",\n                  \"edition_defaults.edition\": \"EDITION_2023\",\n                  \"edition_defaults.value\": \"EXPLICIT\"\n                }\n              },\n              enumType: {\n                type: \"EnumType\",\n                id: 2,\n                options: {\n                  retention: \"RETENTION_RUNTIME\",\n                  targets: \"TARGET_TYPE_FILE\",\n                  \"edition_defaults.edition\": \"EDITION_PROTO3\",\n                  \"edition_defaults.value\": \"OPEN\"\n                }\n              },\n              repeatedFieldEncoding: {\n                type: \"RepeatedFieldEncoding\",\n                id: 3,\n                options: {\n                  retention: \"RETENTION_RUNTIME\",\n                  targets: \"TARGET_TYPE_FILE\",\n                  \"edition_defaults.edition\": \"EDITION_PROTO3\",\n                  \"edition_defaults.value\": \"PACKED\"\n                }\n              },\n              utf8Validation: {\n                type: \"Utf8Validation\",\n                id: 4,\n                options: {\n                  retention: \"RETENTION_RUNTIME\",\n                  targets: \"TARGET_TYPE_FILE\",\n                  \"edition_defaults.edition\": \"EDITION_PROTO3\",\n                  \"edition_defaults.value\": \"VERIFY\"\n                }\n              },\n              messageEncoding: {\n                type: \"MessageEncoding\",\n                id: 5,\n                options: {\n                  retention: \"RETENTION_RUNTIME\",\n                  targets: \"TARGET_TYPE_FILE\",\n                  \"edition_defaults.edition\": \"EDITION_PROTO2\",\n                  \"edition_defaults.value\": \"LENGTH_PREFIXED\"\n                }\n              },\n              jsonFormat: {\n                type: \"JsonFormat\",\n                id: 6,\n                options: {\n                  retention: \"RETENTION_RUNTIME\",\n                  targets: \"TARGET_TYPE_FILE\",\n                  \"edition_defaults.edition\": \"EDITION_PROTO3\",\n                  \"edition_defaults.value\": \"ALLOW\"\n                }\n              }\n            },\n            extensions: [\n              [\n                1000,\n                1000\n              ],\n              [\n                1001,\n                1001\n              ],\n              [\n                9995,\n                9999\n              ]\n            ],\n            reserved: [\n              [\n                999,\n                999\n              ]\n            ],\n            nested: {\n              FieldPresence: {\n                values: {\n                  FIELD_PRESENCE_UNKNOWN: 0,\n                  EXPLICIT: 1,\n                  IMPLICIT: 2,\n                  LEGACY_REQUIRED: 3\n                }\n              },\n              EnumType: {\n                values: {\n                  ENUM_TYPE_UNKNOWN: 0,\n                  OPEN: 1,\n                  CLOSED: 2\n                }\n              },\n              RepeatedFieldEncoding: {\n                values: {\n                  REPEATED_FIELD_ENCODING_UNKNOWN: 0,\n                  PACKED: 1,\n                  EXPANDED: 2\n                }\n              },\n              Utf8Validation: {\n                values: {\n                  UTF8_VALIDATION_UNKNOWN: 0,\n                  UNVERIFIED: 1,\n                  VERIFY: 2\n                }\n              },\n              MessageEncoding: {\n                values: {\n                  MESSAGE_ENCODING_UNKNOWN: 0,\n                  LENGTH_PREFIXED: 1,\n                  DELIMITED: 2\n                }\n              },\n              JsonFormat: {\n                values: {\n                  JSON_FORMAT_UNKNOWN: 0,\n                  ALLOW: 1,\n                  LEGACY_BEST_EFFORT: 2\n                }\n              }\n            }\n          },\n          FeatureSetDefaults: {\n            edition: \"proto2\",\n            fields: {\n              defaults: {\n                rule: \"repeated\",\n                type: \"FeatureSetEditionDefault\",\n                id: 1\n              },\n              minimumEdition: {\n                type: \"Edition\",\n                id: 4\n              },\n              maximumEdition: {\n                type: \"Edition\",\n                id: 5\n              }\n            },\n            nested: {\n              FeatureSetEditionDefault: {\n                fields: {\n                  edition: {\n                    type: \"Edition\",\n                    id: 3\n                  },\n                  features: {\n                    type: \"FeatureSet\",\n                    id: 2\n                  }\n                }\n              }\n            }\n          },\n          SourceCodeInfo: {\n            edition: \"proto2\",\n            fields: {\n              location: {\n                rule: \"repeated\",\n                type: \"Location\",\n                id: 1\n              }\n            },\n            nested: {\n              Location: {\n                fields: {\n                  path: {\n                    rule: \"repeated\",\n                    type: \"int32\",\n                    id: 1,\n                    options: {\n                      packed: true\n                    }\n                  },\n                  span: {\n                    rule: \"repeated\",\n                    type: \"int32\",\n                    id: 2,\n                    options: {\n                      packed: true\n                    }\n                  },\n                  leadingComments: {\n                    type: \"string\",\n                    id: 3\n                  },\n                  trailingComments: {\n                    type: \"string\",\n                    id: 4\n                  },\n                  leadingDetachedComments: {\n                    rule: \"repeated\",\n                    type: \"string\",\n                    id: 6\n                  }\n                }\n              }\n            }\n          },\n          GeneratedCodeInfo: {\n            edition: \"proto2\",\n            fields: {\n              annotation: {\n                rule: \"repeated\",\n                type: \"Annotation\",\n                id: 1\n              }\n            },\n            nested: {\n              Annotation: {\n                fields: {\n                  path: {\n                    rule: \"repeated\",\n                    type: \"int32\",\n                    id: 1,\n                    options: {\n                      packed: true\n                    }\n                  },\n                  sourceFile: {\n                    type: \"string\",\n                    id: 2\n                  },\n                  begin: {\n                    type: \"int32\",\n                    id: 3\n                  },\n                  end: {\n                    type: \"int32\",\n                    id: 4\n                  },\n                  semantic: {\n                    type: \"Semantic\",\n                    id: 5\n                  }\n                },\n                nested: {\n                  Semantic: {\n                    values: {\n                      NONE: 0,\n                      SET: 1,\n                      ALIAS: 2\n                    }\n                  }\n                }\n              }\n            }\n          },\n          Struct: {\n            fields: {\n              fields: {\n                keyType: \"string\",\n                type: \"Value\",\n                id: 1\n              }\n            }\n          },\n          Value: {\n            oneofs: {\n              kind: {\n                oneof: [\n                  \"nullValue\",\n                  \"numberValue\",\n                  \"stringValue\",\n                  \"boolValue\",\n                  \"structValue\",\n                  \"listValue\"\n                ]\n              }\n            },\n            fields: {\n              nullValue: {\n                type: \"NullValue\",\n                id: 1\n              },\n              numberValue: {\n                type: \"double\",\n                id: 2\n              },\n              stringValue: {\n                type: \"string\",\n                id: 3\n              },\n              boolValue: {\n                type: \"bool\",\n                id: 4\n              },\n              structValue: {\n                type: \"Struct\",\n                id: 5\n              },\n              listValue: {\n                type: \"ListValue\",\n                id: 6\n              }\n            }\n          },\n          NullValue: {\n            values: {\n              NULL_VALUE: 0\n            }\n          },\n          ListValue: {\n            fields: {\n              values: {\n                rule: \"repeated\",\n                type: \"Value\",\n                id: 1\n              }\n            }\n          }\n        }\n      },\n      api: {\n        options: {\n          go_package: \"google.golang.org/genproto/googleapis/api/annotations;annotations\",\n          java_multiple_files: true,\n          java_outer_classname: \"HttpProto\",\n          java_package: \"com.google.api\",\n          objc_class_prefix: \"GAPI\",\n          cc_enable_arenas: true\n        },\n        nested: {\n          http: {\n            type: \"HttpRule\",\n            id: 72295728,\n            extend: \"google.protobuf.MethodOptions\"\n          },\n          Http: {\n            fields: {\n              rules: {\n                rule: \"repeated\",\n                type: \"HttpRule\",\n                id: 1\n              },\n              fullyDecodeReservedExpansion: {\n                type: \"bool\",\n                id: 2\n              }\n            }\n          },\n          HttpRule: {\n            oneofs: {\n              pattern: {\n                oneof: [\n                  \"get\",\n                  \"put\",\n                  \"post\",\n                  \"delete\",\n                  \"patch\",\n                  \"custom\"\n                ]\n              }\n            },\n            fields: {\n              selector: {\n                type: \"string\",\n                id: 1\n              },\n              get: {\n                type: \"string\",\n                id: 2\n              },\n              put: {\n                type: \"string\",\n                id: 3\n              },\n              post: {\n                type: \"string\",\n                id: 4\n              },\n              \"delete\": {\n                type: \"string\",\n                id: 5\n              },\n              patch: {\n                type: \"string\",\n                id: 6\n              },\n              custom: {\n                type: \"CustomHttpPattern\",\n                id: 8\n              },\n              body: {\n                type: \"string\",\n                id: 7\n              },\n              responseBody: {\n                type: \"string\",\n                id: 12\n              },\n              additionalBindings: {\n                rule: \"repeated\",\n                type: \"HttpRule\",\n                id: 11\n              }\n            }\n          },\n          CustomHttpPattern: {\n            fields: {\n              kind: {\n                type: \"string\",\n                id: 1\n              },\n              path: {\n                type: \"string\",\n                id: 2\n              }\n            }\n          }\n        }\n      },\n      rpc: {\n        options: {\n          cc_enable_arenas: true,\n          go_package: \"google.golang.org/genproto/googleapis/rpc/status;status\",\n          java_multiple_files: true,\n          java_outer_classname: \"StatusProto\",\n          java_package: \"com.google.rpc\",\n          objc_class_prefix: \"RPC\"\n        },\n        nested: {\n          Status: {\n            fields: {\n              code: {\n                type: \"int32\",\n                id: 1\n              },\n              message: {\n                type: \"string\",\n                id: 2\n              },\n              details: {\n                rule: \"repeated\",\n                type: \"google.protobuf.Any\",\n                id: 3\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  grpc: {\n    nested: {\n      gateway: {\n        nested: {\n          protoc_gen_openapiv2: {\n            nested: {\n              options: {\n                options: {\n                  go_package: \"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options\"\n                },\n                nested: {\n                  openapiv2Swagger: {\n                    type: \"Swagger\",\n                    id: 1042,\n                    extend: \"google.protobuf.FileOptions\"\n                  },\n                  openapiv2Operation: {\n                    type: \"Operation\",\n                    id: 1042,\n                    extend: \"google.protobuf.MethodOptions\"\n                  },\n                  openapiv2Schema: {\n                    type: \"Schema\",\n                    id: 1042,\n                    extend: \"google.protobuf.MessageOptions\"\n                  },\n                  openapiv2Enum: {\n                    type: \"EnumSchema\",\n                    id: 1042,\n                    extend: \"google.protobuf.EnumOptions\"\n                  },\n                  openapiv2Tag: {\n                    type: \"Tag\",\n                    id: 1042,\n                    extend: \"google.protobuf.ServiceOptions\"\n                  },\n                  openapiv2Field: {\n                    type: \"JSONSchema\",\n                    id: 1042,\n                    extend: \"google.protobuf.FieldOptions\"\n                  },\n                  Scheme: {\n                    values: {\n                      UNKNOWN: 0,\n                      HTTP: 1,\n                      HTTPS: 2,\n                      WS: 3,\n                      WSS: 4\n                    }\n                  },\n                  Swagger: {\n                    fields: {\n                      swagger: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      info: {\n                        type: \"Info\",\n                        id: 2\n                      },\n                      host: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      basePath: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      schemes: {\n                        rule: \"repeated\",\n                        type: \"Scheme\",\n                        id: 5\n                      },\n                      consumes: {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 6\n                      },\n                      produces: {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 7\n                      },\n                      responses: {\n                        keyType: \"string\",\n                        type: \"Response\",\n                        id: 10\n                      },\n                      securityDefinitions: {\n                        type: \"SecurityDefinitions\",\n                        id: 11\n                      },\n                      security: {\n                        rule: \"repeated\",\n                        type: \"SecurityRequirement\",\n                        id: 12\n                      },\n                      tags: {\n                        rule: \"repeated\",\n                        type: \"Tag\",\n                        id: 13\n                      },\n                      externalDocs: {\n                        type: \"ExternalDocumentation\",\n                        id: 14\n                      },\n                      extensions: {\n                        keyType: \"string\",\n                        type: \"google.protobuf.Value\",\n                        id: 15\n                      }\n                    },\n                    reserved: [\n                      [\n                        8,\n                        8\n                      ],\n                      [\n                        9,\n                        9\n                      ]\n                    ]\n                  },\n                  Operation: {\n                    fields: {\n                      tags: {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 1\n                      },\n                      summary: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      description: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      externalDocs: {\n                        type: \"ExternalDocumentation\",\n                        id: 4\n                      },\n                      operationId: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      consumes: {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 6\n                      },\n                      produces: {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 7\n                      },\n                      responses: {\n                        keyType: \"string\",\n                        type: \"Response\",\n                        id: 9\n                      },\n                      schemes: {\n                        rule: \"repeated\",\n                        type: \"Scheme\",\n                        id: 10\n                      },\n                      deprecated: {\n                        type: \"bool\",\n                        id: 11\n                      },\n                      security: {\n                        rule: \"repeated\",\n                        type: \"SecurityRequirement\",\n                        id: 12\n                      },\n                      extensions: {\n                        keyType: \"string\",\n                        type: \"google.protobuf.Value\",\n                        id: 13\n                      },\n                      parameters: {\n                        type: \"Parameters\",\n                        id: 14\n                      }\n                    },\n                    reserved: [\n                      [\n                        8,\n                        8\n                      ]\n                    ]\n                  },\n                  Parameters: {\n                    fields: {\n                      headers: {\n                        rule: \"repeated\",\n                        type: \"HeaderParameter\",\n                        id: 1\n                      }\n                    }\n                  },\n                  HeaderParameter: {\n                    fields: {\n                      name: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      description: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      type: {\n                        type: \"Type\",\n                        id: 3\n                      },\n                      format: {\n                        type: \"string\",\n                        id: 4\n                      },\n                      required: {\n                        type: \"bool\",\n                        id: 5\n                      }\n                    },\n                    reserved: [\n                      [\n                        6,\n                        6\n                      ],\n                      [\n                        7,\n                        7\n                      ]\n                    ],\n                    nested: {\n                      Type: {\n                        values: {\n                          UNKNOWN: 0,\n                          STRING: 1,\n                          NUMBER: 2,\n                          INTEGER: 3,\n                          BOOLEAN: 4\n                        }\n                      }\n                    }\n                  },\n                  Header: {\n                    fields: {\n                      description: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      type: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      format: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      \"default\": {\n                        type: \"string\",\n                        id: 6\n                      },\n                      pattern: {\n                        type: \"string\",\n                        id: 13\n                      }\n                    },\n                    reserved: [\n                      [\n                        4,\n                        4\n                      ],\n                      [\n                        5,\n                        5\n                      ],\n                      [\n                        7,\n                        7\n                      ],\n                      [\n                        8,\n                        8\n                      ],\n                      [\n                        9,\n                        9\n                      ],\n                      [\n                        10,\n                        10\n                      ],\n                      [\n                        11,\n                        11\n                      ],\n                      [\n                        12,\n                        12\n                      ],\n                      [\n                        14,\n                        14\n                      ],\n                      [\n                        15,\n                        15\n                      ],\n                      [\n                        16,\n                        16\n                      ],\n                      [\n                        17,\n                        17\n                      ],\n                      [\n                        18,\n                        18\n                      ]\n                    ]\n                  },\n                  Response: {\n                    fields: {\n                      description: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      schema: {\n                        type: \"Schema\",\n                        id: 2\n                      },\n                      headers: {\n                        keyType: \"string\",\n                        type: \"Header\",\n                        id: 3\n                      },\n                      examples: {\n                        keyType: \"string\",\n                        type: \"string\",\n                        id: 4\n                      },\n                      extensions: {\n                        keyType: \"string\",\n                        type: \"google.protobuf.Value\",\n                        id: 5\n                      }\n                    }\n                  },\n                  Info: {\n                    fields: {\n                      title: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      description: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      termsOfService: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      contact: {\n                        type: \"Contact\",\n                        id: 4\n                      },\n                      license: {\n                        type: \"License\",\n                        id: 5\n                      },\n                      version: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      extensions: {\n                        keyType: \"string\",\n                        type: \"google.protobuf.Value\",\n                        id: 7\n                      }\n                    }\n                  },\n                  Contact: {\n                    fields: {\n                      name: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      url: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      email: {\n                        type: \"string\",\n                        id: 3\n                      }\n                    }\n                  },\n                  License: {\n                    fields: {\n                      name: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      url: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  ExternalDocumentation: {\n                    fields: {\n                      description: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      url: {\n                        type: \"string\",\n                        id: 2\n                      }\n                    }\n                  },\n                  Schema: {\n                    fields: {\n                      jsonSchema: {\n                        type: \"JSONSchema\",\n                        id: 1\n                      },\n                      discriminator: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      readOnly: {\n                        type: \"bool\",\n                        id: 3\n                      },\n                      externalDocs: {\n                        type: \"ExternalDocumentation\",\n                        id: 5\n                      },\n                      example: {\n                        type: \"string\",\n                        id: 6\n                      }\n                    },\n                    reserved: [\n                      [\n                        4,\n                        4\n                      ]\n                    ]\n                  },\n                  EnumSchema: {\n                    fields: {\n                      description: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      \"default\": {\n                        type: \"string\",\n                        id: 2\n                      },\n                      title: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      required: {\n                        type: \"bool\",\n                        id: 4\n                      },\n                      readOnly: {\n                        type: \"bool\",\n                        id: 5\n                      },\n                      externalDocs: {\n                        type: \"ExternalDocumentation\",\n                        id: 6\n                      },\n                      example: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      ref: {\n                        type: \"string\",\n                        id: 8\n                      },\n                      extensions: {\n                        keyType: \"string\",\n                        type: \"google.protobuf.Value\",\n                        id: 9\n                      }\n                    }\n                  },\n                  JSONSchema: {\n                    fields: {\n                      ref: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      title: {\n                        type: \"string\",\n                        id: 5\n                      },\n                      description: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      \"default\": {\n                        type: \"string\",\n                        id: 7\n                      },\n                      readOnly: {\n                        type: \"bool\",\n                        id: 8\n                      },\n                      example: {\n                        type: \"string\",\n                        id: 9\n                      },\n                      multipleOf: {\n                        type: \"double\",\n                        id: 10\n                      },\n                      maximum: {\n                        type: \"double\",\n                        id: 11\n                      },\n                      exclusiveMaximum: {\n                        type: \"bool\",\n                        id: 12\n                      },\n                      minimum: {\n                        type: \"double\",\n                        id: 13\n                      },\n                      exclusiveMinimum: {\n                        type: \"bool\",\n                        id: 14\n                      },\n                      maxLength: {\n                        type: \"uint64\",\n                        id: 15\n                      },\n                      minLength: {\n                        type: \"uint64\",\n                        id: 16\n                      },\n                      pattern: {\n                        type: \"string\",\n                        id: 17\n                      },\n                      maxItems: {\n                        type: \"uint64\",\n                        id: 20\n                      },\n                      minItems: {\n                        type: \"uint64\",\n                        id: 21\n                      },\n                      uniqueItems: {\n                        type: \"bool\",\n                        id: 22\n                      },\n                      maxProperties: {\n                        type: \"uint64\",\n                        id: 24\n                      },\n                      minProperties: {\n                        type: \"uint64\",\n                        id: 25\n                      },\n                      required: {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 26\n                      },\n                      array: {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 34\n                      },\n                      type: {\n                        rule: \"repeated\",\n                        type: \"JSONSchemaSimpleTypes\",\n                        id: 35\n                      },\n                      format: {\n                        type: \"string\",\n                        id: 36\n                      },\n                      \"enum\": {\n                        rule: \"repeated\",\n                        type: \"string\",\n                        id: 46\n                      },\n                      fieldConfiguration: {\n                        type: \"FieldConfiguration\",\n                        id: 1001\n                      },\n                      extensions: {\n                        keyType: \"string\",\n                        type: \"google.protobuf.Value\",\n                        id: 48\n                      }\n                    },\n                    reserved: [\n                      [\n                        1,\n                        1\n                      ],\n                      [\n                        2,\n                        2\n                      ],\n                      [\n                        4,\n                        4\n                      ],\n                      [\n                        18,\n                        18\n                      ],\n                      [\n                        19,\n                        19\n                      ],\n                      [\n                        23,\n                        23\n                      ],\n                      [\n                        27,\n                        27\n                      ],\n                      [\n                        28,\n                        28\n                      ],\n                      [\n                        29,\n                        29\n                      ],\n                      [\n                        30,\n                        33\n                      ],\n                      [\n                        37,\n                        41\n                      ],\n                      [\n                        42,\n                        42\n                      ],\n                      [\n                        43,\n                        45\n                      ]\n                    ],\n                    nested: {\n                      JSONSchemaSimpleTypes: {\n                        values: {\n                          UNKNOWN: 0,\n                          ARRAY: 1,\n                          BOOLEAN: 2,\n                          INTEGER: 3,\n                          NULL: 4,\n                          NUMBER: 5,\n                          OBJECT: 6,\n                          STRING: 7\n                        }\n                      },\n                      FieldConfiguration: {\n                        fields: {\n                          pathParamName: {\n                            type: \"string\",\n                            id: 47\n                          }\n                        }\n                      }\n                    }\n                  },\n                  Tag: {\n                    fields: {\n                      name: {\n                        type: \"string\",\n                        id: 1\n                      },\n                      description: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      externalDocs: {\n                        type: \"ExternalDocumentation\",\n                        id: 3\n                      },\n                      extensions: {\n                        keyType: \"string\",\n                        type: \"google.protobuf.Value\",\n                        id: 4\n                      }\n                    }\n                  },\n                  SecurityDefinitions: {\n                    fields: {\n                      security: {\n                        keyType: \"string\",\n                        type: \"SecurityScheme\",\n                        id: 1\n                      }\n                    }\n                  },\n                  SecurityScheme: {\n                    fields: {\n                      type: {\n                        type: \"Type\",\n                        id: 1\n                      },\n                      description: {\n                        type: \"string\",\n                        id: 2\n                      },\n                      name: {\n                        type: \"string\",\n                        id: 3\n                      },\n                      \"in\": {\n                        type: \"In\",\n                        id: 4\n                      },\n                      flow: {\n                        type: \"Flow\",\n                        id: 5\n                      },\n                      authorizationUrl: {\n                        type: \"string\",\n                        id: 6\n                      },\n                      tokenUrl: {\n                        type: \"string\",\n                        id: 7\n                      },\n                      scopes: {\n                        type: \"Scopes\",\n                        id: 8\n                      },\n                      extensions: {\n                        keyType: \"string\",\n                        type: \"google.protobuf.Value\",\n                        id: 9\n                      }\n                    },\n                    nested: {\n                      Type: {\n                        values: {\n                          TYPE_INVALID: 0,\n                          TYPE_BASIC: 1,\n                          TYPE_API_KEY: 2,\n                          TYPE_OAUTH2: 3\n                        }\n                      },\n                      In: {\n                        values: {\n                          IN_INVALID: 0,\n                          IN_QUERY: 1,\n                          IN_HEADER: 2\n                        }\n                      },\n                      Flow: {\n                        values: {\n                          FLOW_INVALID: 0,\n                          FLOW_IMPLICIT: 1,\n                          FLOW_PASSWORD: 2,\n                          FLOW_APPLICATION: 3,\n                          FLOW_ACCESS_CODE: 4\n                        }\n                      }\n                    }\n                  },\n                  SecurityRequirement: {\n                    fields: {\n                      securityRequirement: {\n                        keyType: \"string\",\n                        type: \"SecurityRequirementValue\",\n                        id: 1\n                      }\n                    },\n                    nested: {\n                      SecurityRequirementValue: {\n                        fields: {\n                          scope: {\n                            rule: \"repeated\",\n                            type: \"string\",\n                            id: 1\n                          }\n                        }\n                      }\n                    }\n                  },\n                  Scopes: {\n                    fields: {\n                      scope: {\n                        keyType: \"string\",\n                        type: \"string\",\n                        id: 1\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      health: {\n        nested: {\n          v1: {\n            options: {\n              csharp_namespace: \"Grpc.Health.V1\",\n              go_package: \"google.golang.org/grpc/health/grpc_health_v1\",\n              java_multiple_files: true,\n              java_outer_classname: \"HealthProto\",\n              java_package: \"io.grpc.health.v1\"\n            },\n            nested: {\n              HealthCheckRequest: {\n                fields: {\n                  service: {\n                    type: \"string\",\n                    id: 1\n                  }\n                }\n              },\n              HealthCheckResponse: {\n                fields: {\n                  status: {\n                    type: \"ServingStatus\",\n                    id: 1\n                  }\n                },\n                nested: {\n                  ServingStatus: {\n                    values: {\n                      UNKNOWN: 0,\n                      SERVING: 1,\n                      NOT_SERVING: 2,\n                      SERVICE_UNKNOWN: 3\n                    }\n                  }\n                }\n              },\n              Health: {\n                methods: {\n                  Check: {\n                    requestType: \"HealthCheckRequest\",\n                    responseType: \"HealthCheckResponse\"\n                  },\n                  Watch: {\n                    requestType: \"HealthCheckRequest\",\n                    responseType: \"HealthCheckResponse\",\n                    responseStream: true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n});\n\nmodule.exports = $root;\n","// Workaround an issue that prevents protobufjs from loading 'long' in Yarn 3 PnP\n// https://github.com/protobufjs/protobuf.js/issues/1745#issuecomment-1200319399\nconst $protobuf = require('protobufjs/light');\n$protobuf.util.Long = require('long');\n$protobuf.configure();\n\nconst { patchProtobufRoot } = require('../lib/patch-protobuf-root');\nconst unpatchedRoot = require('./json-module');\nmodule.exports = patchProtobufRoot(unpatchedRoot);\n","module.exports = require('./root');\n","import type * as grpc from '@grpc/grpc-js';\nimport type {\n  TypedSearchAttributes,\n  SearchAttributes,\n  SearchAttributeValue,\n  Priority,\n  RetryPolicy,\n  WorkerDeploymentVersion,\n} from '@temporalio/common';\nimport { makeProtoEnumConverters } from '@temporalio/common/lib/internal-workflow';\nimport * as proto from '@temporalio/proto';\nimport type { Replace } from '@temporalio/common/lib/type-helpers';\nimport type { ConnectionPlugin } from './connection';\n\nexport interface WorkflowExecution {\n  workflowId: string;\n  runId?: string;\n}\nexport type StartWorkflowExecutionRequest = proto.temporal.api.workflowservice.v1.IStartWorkflowExecutionRequest;\nexport type GetWorkflowExecutionHistoryRequest =\n  proto.temporal.api.workflowservice.v1.IGetWorkflowExecutionHistoryRequest;\nexport type DescribeWorkflowExecutionResponse =\n  proto.temporal.api.workflowservice.v1.IDescribeWorkflowExecutionResponse;\nexport type RawWorkflowExecutionInfo = proto.temporal.api.workflow.v1.IWorkflowExecutionInfo;\nexport type TerminateWorkflowExecutionResponse =\n  proto.temporal.api.workflowservice.v1.ITerminateWorkflowExecutionResponse;\nexport type RequestCancelWorkflowExecutionResponse =\n  proto.temporal.api.workflowservice.v1.IRequestCancelWorkflowExecutionResponse;\n\nexport type WorkflowExecutionStatusName =\n  | 'UNSPECIFIED'\n  | 'RUNNING'\n  | 'COMPLETED'\n  | 'FAILED'\n  | 'CANCELLED'\n  | 'TERMINATED'\n  | 'CONTINUED_AS_NEW'\n  | 'TIMED_OUT'\n  | 'PAUSED'\n  | 'UNKNOWN'; // UNKNOWN is reserved for future enum values\n\nexport interface WorkflowExecutionInfo {\n  type: string;\n  workflowId: string;\n  runId: string;\n  taskQueue: string;\n  status: { code: proto.temporal.api.enums.v1.WorkflowExecutionStatus; name: WorkflowExecutionStatusName };\n  historyLength: number;\n  /**\n￼   * Size of Workflow history in bytes.\n￼   *\n￼   * This value is only available in server versions >= 1.20\n￼   */\n  historySize?: number;\n  startTime: Date;\n  executionTime?: Date;\n  closeTime?: Date;\n  memo?: Record<string, unknown>;\n  /** @deprecated Use {@link typedSearchAttributes} instead. */\n  searchAttributes: SearchAttributes;\n  typedSearchAttributes: TypedSearchAttributes;\n  parentExecution?: Required<proto.temporal.api.common.v1.IWorkflowExecution>;\n  rootExecution?: Required<proto.temporal.api.common.v1.IWorkflowExecution>;\n  raw: RawWorkflowExecutionInfo;\n  priority?: Priority;\n}\n\nexport interface CountWorkflowExecution {\n  count: number;\n  groups: {\n    count: number;\n    groupValues: SearchAttributeValue[];\n  }[];\n}\n\nexport type WorkflowExecutionDescription = Replace<\n  WorkflowExecutionInfo,\n  {\n    raw: DescribeWorkflowExecutionResponse;\n  }\n> & {\n  /**\n   * General fixed details for this workflow execution that may appear in UI/CLI.\n   * This can be in Temporal markdown format and can span multiple lines.\n   *\n   * @experimental User metadata is a new API and susceptible to change.\n   */\n  staticDetails: () => Promise<string | undefined>;\n\n  /**\n   * A single-line fixed summary for this workflow execution that may appear in the UI/CLI.\n   * This can be in single-line Temporal markdown format.\n   *\n   * @experimental User metadata is a new API and susceptible to change.\n   */\n  staticSummary: () => Promise<string | undefined>;\n};\n\nexport type WorkflowService = proto.temporal.api.workflowservice.v1.WorkflowService;\nexport const { WorkflowService } = proto.temporal.api.workflowservice.v1;\nexport type OperatorService = proto.temporal.api.operatorservice.v1.OperatorService;\nexport const { OperatorService } = proto.temporal.api.operatorservice.v1;\nexport type TestService = proto.temporal.api.testservice.v1.TestService;\nexport const { TestService } = proto.temporal.api.testservice.v1;\nexport type HealthService = proto.grpc.health.v1.Health;\nexport const { Health: HealthService } = proto.grpc.health.v1;\n\n/**\n * Mapping of string to valid gRPC metadata value\n */\nexport type Metadata = Record<string, grpc.MetadataValue>;\n\n/**\n * User defined context for gRPC client calls\n */\nexport interface CallContext {\n  /**\n   * {@link Deadline | https://grpc.io/blog/deadlines/} for gRPC client calls\n   */\n  deadline?: number | Date;\n  /**\n   * Metadata to set on gRPC requests\n   */\n  metadata?: Metadata;\n\n  abortSignal?: AbortSignal;\n}\n\n/**\n * Connection interface used by high level SDK clients.\n */\nexport interface ConnectionLike {\n  workflowService: WorkflowService;\n  operatorService: OperatorService;\n  plugins: ConnectionPlugin[];\n  close(): Promise<void>;\n  ensureConnected(): Promise<void>;\n\n  /**\n   * Set a deadline for any service requests executed in `fn`'s scope.\n   *\n   * The deadline is a point in time after which any pending gRPC request will be considered as failed;\n   * this will locally result in the request call throwing a {@link grpc.ServiceError|ServiceError}\n   * with code {@link grpc.status.DEADLINE_EXCEEDED|DEADLINE_EXCEEDED}; see {@link isGrpcDeadlineError}.\n   *\n   * It is stronly recommended to explicitly set deadlines. If no deadline is set, then it is\n   * possible for the client to end up waiting forever for a response.\n   *\n   * This method is only a convenience wrapper around {@link Connection.withDeadline}.\n   *\n   * @param deadline a point in time after which the request will be considered as failed; either a\n   *                 Date object, or a number of milliseconds since the Unix epoch (UTC).\n   * @returns the value returned from `fn`\n   *\n   * @see https://grpc.io/docs/guides/deadlines/\n   */\n  withDeadline<R>(deadline: number | Date, fn: () => Promise<R>): Promise<R>;\n\n  /**\n   * Set metadata for any service requests executed in `fn`'s scope.\n   *\n   * @returns returned value of `fn`\n   */\n  withMetadata<R>(metadata: Metadata, fn: () => Promise<R>): Promise<R>;\n\n  /**\n   * Set an {@link AbortSignal} that, when aborted, cancels any ongoing service requests executed in\n   * `fn`'s scope. This will locally result in the request call throwing a {@link grpc.ServiceError|ServiceError}\n   * with code {@link grpc.status.CANCELLED|CANCELLED}; see {@link isGrpcCancelledError}.\n   *\n   * @returns value returned from `fn`\n   *\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal\n   */\n  withAbortSignal<R>(abortSignal: AbortSignal, fn: () => Promise<R>): Promise<R>;\n}\n\nexport const InternalConnectionLikeSymbol = Symbol('__temporal_internal_connection_like');\nexport type InternalConnectionLike = ConnectionLike & {\n  [InternalConnectionLikeSymbol]?: {\n    /**\n     * Capability flag that determines whether the connection supports eager workflow start.\n     * This will only be true if the underlying connection is a {@link NativeConnection}.\n     */\n    readonly supportsEagerStart?: boolean;\n  };\n};\n\nexport const QueryRejectCondition = {\n  NONE: 'NONE',\n  NOT_OPEN: 'NOT_OPEN',\n  NOT_COMPLETED_CLEANLY: 'NOT_COMPLETED_CLEANLY',\n\n  /** @deprecated Use {@link NONE} instead. */\n  QUERY_REJECT_CONDITION_NONE: 'NONE',\n\n  /** @deprecated Use {@link NOT_OPEN} instead. */\n  QUERY_REJECT_CONDITION_NOT_OPEN: 'NOT_OPEN',\n\n  /** @deprecated Use {@link NOT_COMPLETED_CLEANLY} instead. */\n  QUERY_REJECT_CONDITION_NOT_COMPLETED_CLEANLY: 'NOT_COMPLETED_CLEANLY',\n\n  /** @deprecated Use `undefined` instead. */\n  QUERY_REJECT_CONDITION_UNSPECIFIED: undefined,\n} as const;\nexport type QueryRejectCondition = (typeof QueryRejectCondition)[keyof typeof QueryRejectCondition];\n\nexport const [encodeQueryRejectCondition, decodeQueryRejectCondition] = makeProtoEnumConverters<\n  proto.temporal.api.enums.v1.QueryRejectCondition,\n  typeof proto.temporal.api.enums.v1.QueryRejectCondition,\n  keyof typeof proto.temporal.api.enums.v1.QueryRejectCondition,\n  typeof QueryRejectCondition,\n  'QUERY_REJECT_CONDITION_'\n>(\n  {\n    [QueryRejectCondition.NONE]: 1,\n    [QueryRejectCondition.NOT_OPEN]: 2,\n    [QueryRejectCondition.NOT_COMPLETED_CLEANLY]: 3,\n    UNSPECIFIED: 0,\n  } as const,\n  'QUERY_REJECT_CONDITION_'\n);\n\n/**\n * Return type of {@link ActivityClient.count}\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport interface CountActivityExecutions {\n  readonly count: number;\n  readonly groups?: {\n    readonly count: number;\n    readonly groupValues?: any[];\n  }[];\n}\n\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type RawActivityExecutionInfo = proto.temporal.api.activity.v1.IActivityExecutionInfo;\n\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type RawActivityExecutionListInfo = proto.temporal.api.activity.v1.IActivityExecutionListInfo;\n\n/**\n * Type of elements returned by {@link ActivityClient.list}\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport interface ActivityExecutionInfo {\n  rawListInfo?: RawActivityExecutionListInfo;\n  activityId: string;\n  activityRunId: string;\n  activityType: string;\n  scheduleTime?: Date;\n  closeTime?: Date;\n  status: ActivityExecutionStatus;\n  typedSearchAttributes: TypedSearchAttributes;\n  taskQueue: string;\n  executionDurationMs?: number;\n}\n\n/**\n * Return type of {@link ActivityClient.describe}\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport interface ActivityExecutionDescription extends ActivityExecutionInfo {\n  rawInfo: RawActivityExecutionInfo;\n  runState?: PendingActivityState;\n  scheduleToCloseTimeoutMs?: number;\n  scheduleToStartTimeoutMs?: number;\n  startToCloseTimeoutMs?: number;\n  heartbeatTimeoutMs?: number;\n  retryPolicy: RetryPolicy;\n  lastHeartbeatTime?: Date;\n  lastStartedTime?: Date;\n  attempt: number;\n  expirationTime?: Date;\n  lastWorkerIdentity?: string;\n  currentRetryIntervalMs?: number;\n  lastAttemptCompleteTime?: Date;\n  nextAttemptScheduleTime?: Date;\n  lastDeploymentVersion?: WorkerDeploymentVersion;\n  priority: Priority;\n  canceledReason?: string;\n\n  getHeartbeatDetails<T = any>(): Promise<T | undefined>;\n  getLastFailure(): Promise<Error | undefined>;\n}\n\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport const ActivityIdReusePolicy = {\n  ALLOW_DUPLICATE: 'ALLOW_DUPLICATE',\n  ALLOW_DUPLICATE_FAILED_ONLY: 'ALLOW_DUPLICATE_FAILED_ONLY',\n  REJECT_DUPLICATE: 'REJECT_DUPLICATE',\n} as const;\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type ActivityIdReusePolicy = (typeof ActivityIdReusePolicy)[keyof typeof ActivityIdReusePolicy];\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport const [encodeActivityIdReusePolicy, decodeActivityIdReusePolicy] = makeProtoEnumConverters<\n  proto.temporal.api.enums.v1.ActivityIdReusePolicy,\n  typeof proto.temporal.api.enums.v1.ActivityIdReusePolicy,\n  keyof typeof proto.temporal.api.enums.v1.ActivityIdReusePolicy,\n  typeof ActivityIdReusePolicy,\n  'ACTIVITY_ID_REUSE_POLICY_'\n>(\n  {\n    [ActivityIdReusePolicy.ALLOW_DUPLICATE]: 1,\n    [ActivityIdReusePolicy.ALLOW_DUPLICATE_FAILED_ONLY]: 2,\n    [ActivityIdReusePolicy.REJECT_DUPLICATE]: 3,\n    UNSPECIFIED: 0,\n  } as const,\n  'ACTIVITY_ID_REUSE_POLICY_'\n);\n\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport const ActivityIdConflictPolicy = {\n  FAIL: 'FAIL',\n  USE_EXISTING: 'USE_EXISTING',\n} as const;\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type ActivityIdConflictPolicy = (typeof ActivityIdConflictPolicy)[keyof typeof ActivityIdConflictPolicy];\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport const [encodeActivityIdConflictPolicy, decodeActivityIdConflictPolicy] = makeProtoEnumConverters<\n  proto.temporal.api.enums.v1.ActivityIdConflictPolicy,\n  typeof proto.temporal.api.enums.v1.ActivityIdConflictPolicy,\n  keyof typeof proto.temporal.api.enums.v1.ActivityIdConflictPolicy,\n  typeof ActivityIdConflictPolicy,\n  'ACTIVITY_ID_CONFLICT_POLICY_'\n>(\n  {\n    [ActivityIdConflictPolicy.FAIL]: 1,\n    [ActivityIdConflictPolicy.USE_EXISTING]: 2,\n    UNSPECIFIED: 0,\n  } as const,\n  'ACTIVITY_ID_CONFLICT_POLICY_'\n);\n\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport const ActivityExecutionStatus = {\n  RUNNING: 'RUNNING',\n  COMPLETED: 'COMPLETED',\n  FAILED: 'FAILED',\n  CANCELED: 'CANCELED',\n  TERMINATED: 'TERMINATED',\n  TIMED_OUT: 'TIMED_OUT',\n} as const;\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type ActivityExecutionStatus = (typeof ActivityExecutionStatus)[keyof typeof ActivityExecutionStatus];\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport const [encodeActivityExecutionStatus, decodeActivityExecutionStatus] = makeProtoEnumConverters<\n  proto.temporal.api.enums.v1.ActivityExecutionStatus,\n  typeof proto.temporal.api.enums.v1.ActivityExecutionStatus,\n  keyof typeof proto.temporal.api.enums.v1.ActivityExecutionStatus,\n  typeof ActivityExecutionStatus,\n  'ACTIVITY_EXECUTION_STATUS_'\n>(\n  {\n    [ActivityExecutionStatus.RUNNING]: 1,\n    [ActivityExecutionStatus.COMPLETED]: 2,\n    [ActivityExecutionStatus.FAILED]: 3,\n    [ActivityExecutionStatus.CANCELED]: 4,\n    [ActivityExecutionStatus.TERMINATED]: 5,\n    [ActivityExecutionStatus.TIMED_OUT]: 6,\n    UNSPECIFIED: 0,\n  } as const,\n  'ACTIVITY_EXECUTION_STATUS_'\n);\n\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport const PendingActivityState = {\n  SCHEDULED: 'SCHEDULED',\n  STARTED: 'STARTED',\n  CANCEL_REQUESTED: 'CANCEL_REQUESTED',\n  PAUSED: 'PAUSED',\n  PAUSE_REQUESTED: 'PAUSE_REQUESTED',\n} as const;\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type PendingActivityState = (typeof PendingActivityState)[keyof typeof PendingActivityState];\n/**\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport const [encodePendingActivityState, decodePendingActivityState] = makeProtoEnumConverters<\n  proto.temporal.api.enums.v1.PendingActivityState,\n  typeof proto.temporal.api.enums.v1.PendingActivityState,\n  keyof typeof proto.temporal.api.enums.v1.PendingActivityState,\n  typeof PendingActivityState,\n  'PENDING_ACTIVITY_STATE_'\n>(\n  {\n    [PendingActivityState.SCHEDULED]: 1,\n    [PendingActivityState.STARTED]: 2,\n    [PendingActivityState.CANCEL_REQUESTED]: 3,\n    [PendingActivityState.PAUSED]: 4,\n    [PendingActivityState.PAUSE_REQUESTED]: 5,\n    UNSPECIFIED: 0,\n  } as const,\n  'PENDING_ACTIVITY_STATE_'\n);\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport * as grpc from '@grpc/grpc-js';\nimport type * as proto from 'protobufjs';\nimport type { TLSConfig } from '@temporalio/common/lib/internal-non-workflow';\nimport { normalizeTlsConfig, normalizeGrpcEndpointAddress } from '@temporalio/common/lib/internal-non-workflow';\nimport { filterNullAndUndefined } from '@temporalio/common/lib/internal-workflow';\nimport type { Duration } from '@temporalio/common/lib/time';\nimport { msOptionalToNumber } from '@temporalio/common/lib/time';\nimport { type temporal } from '@temporalio/proto';\nimport { isGrpcServiceError, ServiceError } from './errors';\nimport { defaultGrpcRetryOptions, makeGrpcRetryInterceptor } from './grpc-retry';\nimport pkg from './pkg';\nimport type { CallContext, Metadata } from './types';\nimport { HealthService, OperatorService, TestService, WorkflowService } from './types';\n\n/**\n * The default Temporal Server's TCP port for public gRPC connections.\n */\nconst DEFAULT_TEMPORAL_GRPC_PORT = 7233;\n\n/**\n * gRPC and Temporal Server connection options\n */\nexport interface ConnectionOptions {\n  /**\n   * The address of the Temporal server to connect to, in `hostname:port` format.\n   *\n   * Port defaults to 7233. Raw IPv6 addresses must be wrapped in square brackets (e.g. `[ipv6]:port`).\n   *\n   * @default localhost:7233\n   */\n  address?: string;\n\n  /**\n   * TLS configuration. Pass a falsy value to use a non-encrypted connection,\n   * or `true` or `{}` to connect with TLS without any customization.\n   *\n   * For advanced scenario, a prebuilt {@link grpc.ChannelCredentials} object\n   * may instead be specified using the {@link credentials} property.\n   *\n   * Either {@link credentials} or this may be specified for configuring TLS\n   *\n   * @default TLS is disabled\n   */\n  tls?: TLSConfig | boolean | null;\n\n  /**\n   * gRPC channel credentials.\n   *\n   * `ChannelCredentials` are things like SSL credentials that can be used to secure a connection.\n   * There may be only one `ChannelCredentials`. They can be created using some of the factory\n   * methods defined {@link https://grpc.github.io/grpc/node/grpc.credentials.html | here}\n   *\n   * Specifying a prebuilt `ChannelCredentials` should only be required for advanced use cases.\n   * For simple TLS use cases, using the {@link tls} property is recommended. To register\n   * `CallCredentials` (eg. metadata-based authentication), use the {@link callCredentials} property.\n   *\n   * Either {@link tls} or this may be specified for configuring TLS\n   */\n  credentials?: grpc.ChannelCredentials;\n\n  /**\n   * gRPC call credentials.\n   *\n   * `CallCredentials` generaly modify metadata; they can be attached to a connection to affect all method\n   * calls made using that connection. They can be created using some of the factory methods defined\n   * {@link https://grpc.github.io/grpc/node/grpc.credentials.html | here}\n   *\n   * If `callCredentials` are specified, they will be composed with channel credentials\n   * (either the one created implicitely by using the {@link tls} option, or the one specified\n   * explicitly through {@link credentials}). Notice that gRPC doesn't allow registering\n   * `callCredentials` on insecure connections.\n   */\n  callCredentials?: grpc.CallCredentials[];\n\n  /**\n   * GRPC Channel arguments\n   *\n   * @see option descriptions {@link https://grpc.github.io/grpc/core/group__grpc__arg__keys.html | here}\n   *\n   * By default the SDK sets the following keepalive arguments:\n   *\n   * ```\n   * grpc.keepalive_permit_without_calls: 1\n   * grpc.keepalive_time_ms: 30_000\n   * grpc.keepalive_timeout_ms: 15_000\n   * ```\n   *\n   * To opt-out of keepalive, override these keys with `undefined`.\n   */\n  channelArgs?: grpc.ChannelOptions;\n\n  /**\n   * {@link https://grpc.github.io/grpc/node/module-src_client_interceptors.html | gRPC interceptors} which will be\n   * applied to every RPC call performed by this connection. By default, an interceptor will be included which\n   * automatically retries retryable errors. If you do not wish to perform automatic retries, set this to an empty list\n   * (or a list with your own interceptors). If you want to add your own interceptors while keeping the default retry\n   * behavior, add this to your list of interceptors: `makeGrpcRetryInterceptor(defaultGrpcRetryOptions())`. See:\n   *\n   * - {@link makeGrpcRetryInterceptor}\n   * - {@link defaultGrpcRetryOptions}\n   */\n  interceptors?: grpc.Interceptor[];\n\n  /**\n   * Optional mapping of gRPC metadata (HTTP headers) to send with each request to the server.\n   * Setting the `Authorization` header is mutually exclusive with the {@link apiKey} option.\n   *\n   * In order to dynamically set metadata, use {@link Connection.withMetadata}\n   */\n  metadata?: Metadata;\n\n  /**\n   * API key for Temporal. This becomes the \"Authorization\" HTTP header with \"Bearer \" prepended.\n   * This is mutually exclusive with the `Authorization` header in {@link ConnectionOptions.metadata}.\n   *\n   * You may provide a static string or a callback. Also see {@link Connection.withApiKey} or\n   * {@link Connection.setApiKey}\n   */\n  apiKey?: string | (() => string);\n\n  /**\n   * Milliseconds to wait until establishing a connection with the server.\n   *\n   * Used either when connecting eagerly with {@link Connection.connect} or\n   * calling {@link Connection.ensureConnected}.\n   *\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   * @default 10 seconds\n   */\n  connectTimeout?: Duration;\n\n  /**\n   * List of plugins to register with the connection.\n   *\n   * Plugins allow you to configure the connection options.\n   * Any plugins provided will also be passed to any client built from this connection.\n   *\n   * @experimental Plugins is an experimental feature; APIs may change without notice.\n   */\n  plugins?: ConnectionPlugin[];\n}\n\nexport type ConnectionOptionsWithDefaults = Required<\n  Omit<ConnectionOptions, 'tls' | 'connectTimeout' | 'callCredentials' | 'apiKey'>\n> & {\n  connectTimeoutMs: number;\n};\n\n/**\n * A symbol used to attach extra, SDK-internal connection options.\n *\n * @internal\n * @hidden\n */\nexport const InternalConnectionOptionsSymbol = Symbol('__temporal_internal_connection_options');\nexport type InternalConnectionOptions = ConnectionOptions & {\n  [InternalConnectionOptionsSymbol]?: {\n    /**\n     * Indicate whether the `TestService` should be enabled on this connection. This is set to true\n     * on connections created internally by `TestWorkflowEnvironment.createTimeSkipping()`.\n     */\n    supportsTestService?: boolean;\n  };\n};\n\nexport const LOCAL_TARGET = 'localhost:7233';\n\nfunction addDefaults(options: ConnectionOptions): ConnectionOptionsWithDefaults {\n  const { channelArgs, interceptors, connectTimeout, ...rest } = options;\n  return {\n    address: LOCAL_TARGET,\n    credentials: grpc.credentials.createInsecure(),\n    channelArgs: {\n      'grpc.keepalive_permit_without_calls': 1,\n      'grpc.keepalive_time_ms': 30_000,\n      'grpc.keepalive_timeout_ms': 15_000,\n      max_receive_message_length: 128 * 1024 * 1024, // 128 MB\n      ...channelArgs,\n    },\n    interceptors: interceptors ?? [makeGrpcRetryInterceptor(defaultGrpcRetryOptions())],\n    metadata: {},\n    connectTimeoutMs: msOptionalToNumber(connectTimeout) ?? 10_000,\n    plugins: [],\n    ...filterNullAndUndefined(rest),\n  };\n}\n\n/**\n * - Convert {@link ConnectionOptions.tls} to {@link grpc.ChannelCredentials}\n * - Add the grpc.ssl_target_name_override GRPC {@link ConnectionOptions.channelArgs | channel arg}\n * - Add default port to address if port not specified\n * - Set `Authorization` header based on {@link ConnectionOptions.apiKey}\n */\nfunction normalizeGRPCConfig(options: ConnectionOptions): ConnectionOptions {\n  const { tls: tlsFromConfig, credentials, callCredentials, ...rest } = options;\n  if (rest.apiKey) {\n    if (rest.metadata?.['Authorization']) {\n      throw new TypeError(\n        'Both `apiKey` option and `Authorization` header were provided, but only one makes sense to use at a time.'\n      );\n    }\n    if (credentials !== undefined) {\n      throw new TypeError(\n        'Both `apiKey` and `credentials` ConnectionOptions were provided, but only one makes sense to use at a time'\n      );\n    }\n  }\n  if (rest.address) {\n    rest.address = normalizeGrpcEndpointAddress(rest.address, DEFAULT_TEMPORAL_GRPC_PORT);\n  }\n  const tls = normalizeTlsConfig(tlsFromConfig, options.apiKey);\n  if (tls) {\n    if (credentials) {\n      throw new TypeError('Both `tls` and `credentials` ConnectionOptions were provided');\n    }\n    const serverRootCert = tls.serverRootCACertificate && Buffer.from(tls.serverRootCACertificate);\n    const clientCertKey = tls.clientCertPair?.key && Buffer.from(tls.clientCertPair?.key);\n    const clientCertCrt = tls.clientCertPair?.crt && Buffer.from(tls.clientCertPair?.crt);\n    return {\n      ...rest,\n      credentials: grpc.credentials.combineChannelCredentials(\n        grpc.credentials.createSsl(serverRootCert, clientCertKey, clientCertCrt),\n        ...(callCredentials ?? [])\n      ),\n      channelArgs: {\n        ...rest.channelArgs,\n        ...(tls.serverNameOverride\n          ? {\n              'grpc.ssl_target_name_override': tls.serverNameOverride,\n              'grpc.default_authority': tls.serverNameOverride,\n            }\n          : undefined),\n      },\n    };\n  } else {\n    return {\n      ...rest,\n      credentials: grpc.credentials.combineChannelCredentials(\n        credentials ?? grpc.credentials.createInsecure(),\n        ...(callCredentials ?? [])\n      ),\n    };\n  }\n}\n\nexport interface RPCImplOptions {\n  serviceName: string;\n  client: grpc.Client;\n  callContextStorage: AsyncLocalStorage<CallContext>;\n  interceptors?: grpc.Interceptor[];\n  staticMetadata: Metadata;\n  apiKeyFnRef: { fn?: () => string };\n}\n\nexport interface ConnectionCtorOptions {\n  readonly options: ConnectionOptionsWithDefaults;\n  readonly client: grpc.Client;\n\n  /**\n   * Raw gRPC access to the Temporal service.\n   *\n   * **NOTE**: The namespace provided in {@link options} is **not** automatically set on requests made to the service.\n   */\n  readonly workflowService: WorkflowService;\n\n  /**\n   * Raw gRPC access to the Temporal {@link https://github.com/temporalio/api/blob/ddf07ab9933e8230309850e3c579e1ff34b03f53/temporal/api/operatorservice/v1/service.proto | operator service}.\n   */\n  readonly operatorService: OperatorService;\n\n  /**\n   * Raw gRPC access to the Temporal test service.\n   *\n   * Will be `undefined` if connected to a server that does not support the test service.\n   */\n  readonly testService: TestService | undefined;\n\n  /**\n   * Raw gRPC access to the standard gRPC {@link https://github.com/grpc/grpc/blob/92f58c18a8da2728f571138c37760a721c8915a2/doc/health-checking.md | health service}.\n   */\n  readonly healthService: HealthService;\n\n  readonly callContextStorage: AsyncLocalStorage<CallContext>;\n  readonly apiKeyFnRef: { fn?: () => string };\n}\n\n/**\n * Client connection to the Temporal Server\n *\n * ⚠️ Connections are expensive to construct and should be reused.\n * Make sure to {@link close} any unused connections to avoid leaking resources.\n */\nexport class Connection {\n  /**\n   * @internal\n   */\n  public static readonly Client = grpc.makeGenericClientConstructor({}, 'WorkflowService', {});\n\n  public readonly options: ConnectionOptionsWithDefaults;\n  protected readonly client: grpc.Client;\n\n  /**\n   * Used to ensure `ensureConnected` is called once.\n   */\n  protected connectPromise?: Promise<void>;\n\n  /**\n   * Raw gRPC access to Temporal Server's {@link\n   * https://github.com/temporalio/api/blob/master/temporal/api/workflowservice/v1/service.proto | Workflow service}\n   */\n  public readonly workflowService: WorkflowService;\n\n  /**\n   * Raw gRPC access to Temporal Server's\n   * {@link https://github.com/temporalio/api/blob/master/temporal/api/operatorservice/v1/service.proto | Operator service}\n   *\n   * The Operator Service API defines how Temporal SDKs and other clients interact with the Temporal\n   * server to perform administrative functions like registering a search attribute or a namespace.\n   *\n   * This Service API is NOT compatible with Temporal Cloud. Attempt to use it against a Temporal\n   * Cloud namespace will result in gRPC `unauthorized` error.\n   */\n  public readonly operatorService: OperatorService;\n\n  /**\n   * Raw gRPC access to the Temporal test service.\n   *\n   * Will be `undefined` if connected to a server that does not support the test service.\n   */\n  public readonly testService: TestService | undefined;\n\n  /**\n   * Raw gRPC access to the standard gRPC {@link https://github.com/grpc/grpc/blob/92f58c18a8da2728f571138c37760a721c8915a2/doc/health-checking.md | health service}.\n   */\n  public readonly healthService: HealthService;\n\n  public readonly plugins: ConnectionPlugin[];\n\n  readonly callContextStorage: AsyncLocalStorage<CallContext>;\n  private readonly apiKeyFnRef: { fn?: () => string };\n\n  protected static createCtorOptions(options: ConnectionOptions): ConnectionCtorOptions {\n    const normalizedOptions = normalizeGRPCConfig(options);\n    const apiKeyFnRef: { fn?: () => string } = {};\n    if (normalizedOptions.apiKey) {\n      if (typeof normalizedOptions.apiKey === 'string') {\n        const apiKey = normalizedOptions.apiKey;\n        apiKeyFnRef.fn = () => apiKey;\n      } else {\n        apiKeyFnRef.fn = normalizedOptions.apiKey;\n      }\n    }\n    const optionsWithDefaults = addDefaults(normalizedOptions);\n    // Allow overriding this\n    optionsWithDefaults.metadata['client-name'] ??= 'temporal-typescript';\n    optionsWithDefaults.metadata['client-version'] ??= pkg.version;\n\n    const client = new this.Client(\n      optionsWithDefaults.address,\n      optionsWithDefaults.credentials,\n      optionsWithDefaults.channelArgs\n    );\n    const callContextStorage = new AsyncLocalStorage<CallContext>();\n\n    const workflowRpcImpl = this.generateRPCImplementation({\n      serviceName: 'temporal.api.workflowservice.v1.WorkflowService',\n      client,\n      callContextStorage,\n      interceptors: optionsWithDefaults?.interceptors,\n      staticMetadata: optionsWithDefaults.metadata,\n      apiKeyFnRef,\n    });\n    const workflowService = WorkflowService.create(workflowRpcImpl, false, false);\n\n    const operatorRpcImpl = this.generateRPCImplementation({\n      serviceName: 'temporal.api.operatorservice.v1.OperatorService',\n      client,\n      callContextStorage,\n      interceptors: optionsWithDefaults?.interceptors,\n      staticMetadata: optionsWithDefaults.metadata,\n      apiKeyFnRef,\n    });\n    const operatorService = OperatorService.create(operatorRpcImpl, false, false);\n\n    let testService: TestService | undefined = undefined;\n    if ((options as InternalConnectionOptions)?.[InternalConnectionOptionsSymbol]?.supportsTestService) {\n      const testRpcImpl = this.generateRPCImplementation({\n        serviceName: 'temporal.api.testservice.v1.TestService',\n        client,\n        callContextStorage,\n        interceptors: optionsWithDefaults?.interceptors,\n        staticMetadata: optionsWithDefaults.metadata,\n        apiKeyFnRef,\n      });\n      testService = TestService.create(testRpcImpl, false, false);\n    }\n\n    const healthRpcImpl = this.generateRPCImplementation({\n      serviceName: 'grpc.health.v1.Health',\n      client,\n      callContextStorage,\n      interceptors: optionsWithDefaults?.interceptors,\n      staticMetadata: optionsWithDefaults.metadata,\n      apiKeyFnRef,\n    });\n    const healthService = HealthService.create(healthRpcImpl, false, false);\n\n    return {\n      client,\n      callContextStorage,\n      workflowService,\n      operatorService,\n      testService,\n      healthService,\n      options: optionsWithDefaults,\n      apiKeyFnRef,\n    };\n  }\n\n  /**\n   * Ensure connection can be established.\n   *\n   * Does not need to be called if you use {@link connect}.\n   *\n   * This method's result is memoized to ensure it runs only once.\n   *\n   * Calls {@link proto.temporal.api.workflowservice.v1.WorkflowService.getSystemInfo} internally.\n   */\n  async ensureConnected(): Promise<void> {\n    if (this.connectPromise == null) {\n      const deadline = Date.now() + this.options.connectTimeoutMs;\n      this.connectPromise = (async () => {\n        await this.untilReady(deadline);\n\n        try {\n          await this.withDeadline(deadline, () => this.workflowService.getSystemInfo({}));\n        } catch (err) {\n          if (isGrpcServiceError(err)) {\n            // Ignore old servers\n            if (err.code !== grpc.status.UNIMPLEMENTED) {\n              throw new ServiceError('Failed to connect to Temporal server', { cause: err });\n            }\n          } else {\n            throw err;\n          }\n        }\n      })();\n    }\n    return this.connectPromise;\n  }\n\n  /**\n   * Create a lazy `Connection` instance.\n   *\n   * This method does not verify connectivity with the server. We recommend using {@link connect} instead.\n   */\n  static lazy(options?: ConnectionOptions): Connection {\n    options = options ?? {};\n    for (const plugin of options.plugins ?? []) {\n      if (plugin.configureConnection !== undefined) {\n        options = plugin.configureConnection(options);\n      }\n    }\n    return new this(this.createCtorOptions(options));\n  }\n\n  /**\n   * Establish a connection with the server and return a `Connection` instance.\n   *\n   * This is the preferred method of creating connections as it verifies connectivity by calling\n   * {@link ensureConnected}.\n   */\n  static async connect(options?: ConnectionOptions): Promise<Connection> {\n    const conn = this.lazy(options);\n    await conn.ensureConnected();\n    return conn;\n  }\n\n  protected constructor({\n    options,\n    client,\n    workflowService,\n    operatorService,\n    testService,\n    healthService,\n    callContextStorage,\n    apiKeyFnRef,\n  }: ConnectionCtorOptions) {\n    this.options = options;\n    this.client = client;\n    this.workflowService = this.withNamespaceHeaderInjector(workflowService);\n    this.operatorService = operatorService;\n    this.testService = testService;\n    this.healthService = healthService;\n    this.callContextStorage = callContextStorage;\n    this.apiKeyFnRef = apiKeyFnRef;\n    this.plugins = options.plugins ?? [];\n  }\n\n  protected static generateRPCImplementation({\n    serviceName,\n    client,\n    callContextStorage,\n    interceptors,\n    staticMetadata,\n    apiKeyFnRef,\n  }: RPCImplOptions): proto.RPCImpl {\n    return (\n      method: proto.Method | proto.rpc.ServiceMethod<proto.Message<any>, proto.Message<any>>,\n      requestData: Uint8Array,\n      callback: grpc.requestCallback<any>\n    ) => {\n      const metadataContainer = new grpc.Metadata();\n      const { metadata, deadline, abortSignal } = callContextStorage.getStore() ?? {};\n      if (apiKeyFnRef.fn) {\n        const apiKey = apiKeyFnRef.fn();\n        if (apiKey) metadataContainer.set('Authorization', `Bearer ${apiKey}`);\n      }\n      for (const [k, v] of Object.entries(staticMetadata)) {\n        metadataContainer.set(k, v);\n      }\n      if (metadata != null) {\n        for (const [k, v] of Object.entries(metadata)) {\n          metadataContainer.set(k, v);\n        }\n      }\n\n      const call = client.makeUnaryRequest(\n        `/${serviceName}/${method.name}`,\n        (arg: any) => arg,\n        (arg: any) => arg,\n        requestData,\n        metadataContainer,\n        { interceptors, deadline },\n        callback\n      );\n\n      if (abortSignal != null) {\n        abortSignal.addEventListener('abort', () => call.cancel());\n      }\n\n      return call;\n    };\n  }\n\n  /**\n   * Set a deadline for any service requests executed in `fn`'s scope.\n   *\n   * The deadline is a point in time after which any pending gRPC request will be considered as failed;\n   * this will locally result in the request call throwing a {@link grpc.ServiceError|ServiceError}\n   * with code {@link grpc.status.DEADLINE_EXCEEDED|DEADLINE_EXCEEDED}; see {@link isGrpcDeadlineError}.\n   *\n   * It is strongly recommended to explicitly set deadlines. If no deadline is set, then it is\n   * possible for the client to end up waiting forever for a response.\n   *\n   * @param deadline a point in time after which the request will be considered as failed; either a\n   *                 Date object, or a number of milliseconds since the Unix epoch (UTC).\n   * @returns the value returned from `fn`\n   *\n   * @see https://grpc.io/docs/guides/deadlines/\n   */\n  async withDeadline<ReturnType>(deadline: number | Date, fn: () => Promise<ReturnType>): Promise<ReturnType> {\n    const cc = this.callContextStorage.getStore();\n    return await this.callContextStorage.run({ ...cc, deadline }, fn);\n  }\n\n  /**\n   * Set an {@link AbortSignal} that, when aborted, cancels any ongoing service requests executed in\n   * `fn`'s scope. This will locally result in the request call throwing a {@link grpc.ServiceError|ServiceError}\n   * with code {@link grpc.status.CANCELLED|CANCELLED}; see {@link isGrpcCancelledError}.\n   *\n   * This method is only a convenience wrapper around {@link Connection.withAbortSignal}.\n   *\n   * @example\n   *\n   * ```ts\n   * const ctrl = new AbortController();\n   * setTimeout(() => ctrl.abort(), 10_000);\n   * // 👇 throws if incomplete by the timeout.\n   * await conn.withAbortSignal(ctrl.signal, () => client.workflow.execute(myWorkflow, options));\n   * ```\n   *\n   * @returns value returned from `fn`\n   *\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal\n   */\n  // FIXME: `abortSignal` should be cumulative, i.e. if a signal is already set, it should be added\n  //        to the list of signals, and both the new and existing signal should abort the request.\n  async withAbortSignal<ReturnType>(abortSignal: AbortSignal, fn: () => Promise<ReturnType>): Promise<ReturnType> {\n    const cc = this.callContextStorage.getStore();\n    return await this.callContextStorage.run({ ...cc, abortSignal }, fn);\n  }\n\n  /**\n   * Set metadata for any service requests executed in `fn`'s scope.\n   *\n   * The provided metadata is merged on top of any existing metadata in current scope, including metadata provided in\n   * {@link ConnectionOptions.metadata}.\n   *\n   * @returns value returned from `fn`\n   *\n   * @example\n   *\n   * ```ts\n   * const workflowHandle = await conn.withMetadata({ apiKey: 'secret' }, () =>\n   *   conn.withMetadata({ otherKey: 'set' }, () => client.start(options)))\n   * );\n   * ```\n   */\n  async withMetadata<ReturnType>(metadata: Metadata, fn: () => Promise<ReturnType>): Promise<ReturnType> {\n    const cc = this.callContextStorage.getStore();\n    return await this.callContextStorage.run(\n      {\n        ...cc,\n        metadata: { ...cc?.metadata, ...metadata },\n      },\n      fn\n    );\n  }\n\n  /**\n   * Set the apiKey for any service requests executed in `fn`'s scope (thus changing the `Authorization` header).\n   *\n   * @returns value returned from `fn`\n   *\n   * @example\n   *\n   * ```ts\n   * const workflowHandle = await conn.withApiKey('secret', () =>\n   *   conn.withMetadata({ otherKey: 'set' }, () => client.start(options)))\n   * );\n   * ```\n   */\n  async withApiKey<ReturnType>(apiKey: string, fn: () => Promise<ReturnType>): Promise<ReturnType> {\n    const cc = this.callContextStorage.getStore();\n    return await this.callContextStorage.run(\n      {\n        ...cc,\n        metadata: { ...cc?.metadata, Authorization: `Bearer ${apiKey}` },\n      },\n      fn\n    );\n  }\n\n  /**\n   * Set the {@link ConnectionOptions.apiKey} for all subsequent requests. A static string or a\n   * callback function may be provided.\n   */\n  setApiKey(apiKey: string | (() => string)): void {\n    if (typeof apiKey === 'string') {\n      if (apiKey === '') {\n        throw new TypeError('`apiKey` must not be an empty string');\n      }\n      this.apiKeyFnRef.fn = () => apiKey;\n    } else {\n      this.apiKeyFnRef.fn = apiKey;\n    }\n  }\n\n  /**\n   * Wait for successful connection to the server.\n   *\n   * @see https://grpc.github.io/grpc/node/grpc.Client.html#waitForReady__anchor\n   */\n  protected async untilReady(deadline: number): Promise<void> {\n    return new Promise<void>((resolve, reject) => {\n      this.client.waitForReady(deadline, (err) => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve();\n        }\n      });\n    });\n  }\n\n  // This method is async for uniformity with NativeConnection which could be used in the future to power clients\n  /**\n   * Close the underlying gRPC client.\n   *\n   * Make sure to call this method to ensure proper resource cleanup.\n   */\n  public async close(): Promise<void> {\n    this.client.close();\n    this.callContextStorage.disable();\n  }\n\n  private withNamespaceHeaderInjector(\n    workflowService: temporal.api.workflowservice.v1.WorkflowService\n  ): temporal.api.workflowservice.v1.WorkflowService {\n    const wrapper: any = {};\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n    for (const [methodName, methodImpl] of Object.entries(workflowService) as [string, Function][]) {\n      if (typeof methodImpl !== 'function') continue;\n\n      wrapper[methodName] = (...args: any[]) => {\n        const namespace = args[0]?.namespace;\n        if (namespace) {\n          return this.withMetadata({ 'temporal-namespace': namespace }, () => methodImpl.apply(workflowService, args));\n        } else {\n          return methodImpl.apply(workflowService, args);\n        }\n      };\n    }\n    return wrapper as WorkflowService;\n  }\n}\n\n/**\n * Plugin to control the configuration of a connection.\n *\n * @experimental Plugins is an experimental feature; APIs may change without notice.\n */\nexport interface ConnectionPlugin {\n  /**\n   * Gets the name of this plugin.\n   */\n  get name(): string;\n\n  /**\n   * Hook called when creating a connection to allow modification of configuration.\n   */\n  configureConnection?(options: ConnectionOptions): ConnectionOptions;\n}\n","import os from 'node:os';\nimport type * as _grpc from '@grpc/grpc-js'; // For JSDoc only\nimport type { DataConverter, LoadedDataConverter } from '@temporalio/common';\nimport { isLoadedDataConverter, loadDataConverter } from '@temporalio/common/lib/internal-non-workflow';\nimport { Connection } from './connection';\nimport type { ConnectionLike, Metadata } from './types';\n\nexport interface BaseClientOptions {\n  /**\n   * {@link DataConverter} to use for serializing and deserializing payloads\n   */\n  dataConverter?: DataConverter;\n\n  /**\n   * Identity to report to the server\n   *\n   * @default `${process.pid}@${os.hostname()}`\n   */\n  identity?: string;\n\n  /**\n   * Connection to use to communicate with the server.\n   *\n   * By default, connects to localhost.\n   *\n   * Connections are expensive to construct and should be reused.\n   */\n  connection?: ConnectionLike;\n\n  /**\n   * Server namespace\n   *\n   * @default default\n   */\n  namespace?: string;\n}\n\nexport type WithDefaults<Options extends BaseClientOptions> = //\n  Required<Omit<Options, 'connection'>> & Pick<Options, 'connection'>;\n\nexport type LoadedWithDefaults<Options extends BaseClientOptions> = //\n  WithDefaults<Options> & {\n    loadedDataConverter: LoadedDataConverter;\n  };\n\nexport function defaultBaseClientOptions(): WithDefaults<BaseClientOptions> {\n  return {\n    dataConverter: {},\n    identity: `${process.pid}@${os.hostname()}`,\n    namespace: 'default',\n  };\n}\n\nexport class BaseClient {\n  /**\n   * The underlying {@link Connection | connection} or {@link NativeConnection | native connection} used by this client.\n   *\n   * Clients are cheap to create, but connections are expensive. Where it makes sense,\n   * a single connection may and should be reused by multiple `Client`s.\n   */\n  public readonly connection: ConnectionLike;\n\n  private readonly loadedDataConverter: LoadedDataConverter;\n\n  protected constructor(options?: BaseClientOptions) {\n    this.connection = options?.connection ?? Connection.lazy();\n    const dataConverter = options?.dataConverter ?? {};\n    this.loadedDataConverter = isLoadedDataConverter(dataConverter) ? dataConverter : loadDataConverter(dataConverter);\n  }\n\n  /**\n   * Set a deadline for any service requests executed in `fn`'s scope.\n   *\n   * The deadline is a point in time after which any pending gRPC request will be considered as failed;\n   * this will locally result in the request call throwing a {@link _grpc.ServiceError|ServiceError}\n   * with code {@link _grpc.status.DEADLINE_EXCEEDED|DEADLINE_EXCEEDED}; see {@link isGrpcDeadlineError}.\n   *\n   * It is stronly recommended to explicitly set deadlines. If no deadline is set, then it is\n   * possible for the client to end up waiting forever for a response.\n   *\n   * This method is only a convenience wrapper around {@link Connection.withDeadline}.\n   *\n   * @param deadline a point in time after which the request will be considered as failed; either a\n   *                 Date object, or a number of milliseconds since the Unix epoch (UTC).\n   * @returns the value returned from `fn`\n   *\n   * @see https://grpc.io/docs/guides/deadlines/\n   */\n  public async withDeadline<R>(deadline: number | Date, fn: () => Promise<R>): Promise<R> {\n    return await this.connection.withDeadline(deadline, fn);\n  }\n\n  /**\n   * Set an {@link AbortSignal} that, when aborted, cancels any ongoing service requests executed in\n   * `fn`'s scope. This will locally result in the request call throwing a {@link _grpc.ServiceError|ServiceError}\n   * with code {@link _grpc.status.CANCELLED|CANCELLED}; see {@link isGrpcCancelledError}.\n   *\n   * This method is only a convenience wrapper around {@link Connection.withAbortSignal}.\n   *\n   * @returns value returned from `fn`\n   *\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal\n   */\n  async withAbortSignal<R>(abortSignal: AbortSignal, fn: () => Promise<R>): Promise<R> {\n    return await this.connection.withAbortSignal(abortSignal, fn);\n  }\n\n  /**\n   * Set metadata for any service requests executed in `fn`'s scope.\n   *\n   * This method is only a convenience wrapper around {@link Connection.withMetadata}.\n   *\n   * @returns returned value of `fn`\n   */\n  public async withMetadata<R>(metadata: Metadata, fn: () => Promise<R>): Promise<R> {\n    return await this.connection.withMetadata(metadata, fn);\n  }\n\n  protected get dataConverter(): LoadedDataConverter {\n    return this.loadedDataConverter;\n  }\n}\n","import { decode, encode } from '../encoding';\nimport { ValueError } from '../errors';\nimport type { Payload } from '../interfaces';\nimport type { SearchAttributes, SearchAttributePair, SearchAttributeUpdatePair } from '../search-attributes';\nimport {\n  TypedSearchAttributes,\n  SearchAttributeType,\n  isValidValueForType,\n  TypedSearchAttributeValue,\n  TypedSearchAttributeUpdateValue,\n} from '../search-attributes';\nimport type { PayloadConverter } from './payload-converter';\nimport { JsonPayloadConverter, mapFromPayloads, mapToPayloads } from './payload-converter';\n\n/**\n * Converts Search Attribute values using JsonPayloadConverter\n */\nexport class SearchAttributePayloadConverter implements PayloadConverter {\n  jsonConverter = new JsonPayloadConverter();\n  validNonDateTypes = ['string', 'number', 'boolean'];\n\n  public toPayload(values: unknown): Payload {\n    if (!Array.isArray(values)) {\n      throw new ValueError(`SearchAttribute value must be an array`);\n    }\n\n    if (values.length > 0) {\n      const firstValue = values[0];\n      const firstType = typeof firstValue;\n      if (firstType === 'object') {\n        for (const [idx, value] of values.entries()) {\n          if (!(value instanceof Date)) {\n            throw new ValueError(\n              `SearchAttribute values must arrays of strings, numbers, booleans, or Dates. The value ${value} at index ${idx} is of type ${typeof value}`\n            );\n          }\n        }\n      } else {\n        if (!this.validNonDateTypes.includes(firstType)) {\n          throw new ValueError(`SearchAttribute array values must be: string | number | boolean | Date`);\n        }\n\n        for (const [idx, value] of values.entries()) {\n          if (typeof value !== firstType) {\n            throw new ValueError(\n              `All SearchAttribute array values must be of the same type. The first value ${firstValue} of type ${firstType} doesn't match value ${value} of type ${typeof value} at index ${idx}`\n            );\n          }\n        }\n      }\n    }\n\n    // JSON.stringify takes care of converting Dates to ISO strings\n    const ret = this.jsonConverter.toPayload(values);\n    if (ret === undefined) {\n      throw new ValueError('Could not convert search attributes to payloads');\n    }\n    return ret;\n  }\n\n  /**\n   * Datetime Search Attribute values are converted to `Date`s\n   */\n  public fromPayload<T>(payload: Payload): T {\n    if (payload.metadata == null) {\n      throw new ValueError('Missing payload metadata');\n    }\n\n    const value = this.jsonConverter.fromPayload(payload);\n    let arrayWrappedValue = Array.isArray(value) ? value : [value];\n    const searchAttributeType = payload.metadata.type ? decode(payload.metadata.type) : undefined;\n    if (searchAttributeType === 'Datetime') {\n      arrayWrappedValue = arrayWrappedValue.map((dateString) => new Date(dateString));\n    }\n    return arrayWrappedValue as unknown as T;\n  }\n}\n\nexport const searchAttributePayloadConverter = new SearchAttributePayloadConverter();\n\nexport class TypedSearchAttributePayloadConverter implements PayloadConverter {\n  jsonConverter = new JsonPayloadConverter();\n\n  public toPayload<T>(attr: T): Payload {\n    if (!(attr instanceof TypedSearchAttributeValue || attr instanceof TypedSearchAttributeUpdateValue)) {\n      throw new ValueError(\n        `Expect input to be instance of TypedSearchAttributeValue or TypedSearchAttributeUpdateValue, got: ${JSON.stringify(\n          attr\n        )}`\n      );\n    }\n\n    // We check for deletion as well as regular typed search attributes.\n    if (attr.value !== null && !isValidValueForType(attr.type, attr.value)) {\n      throw new ValueError(`Invalid search attribute value ${attr.value} for given type ${attr.type}`);\n    }\n\n    // For server search attributes to work properly, we cannot set the metadata\n    // type when we set null\n    if (attr.value === null) {\n      const payload = this.jsonConverter.toPayload(attr.value);\n      if (payload === undefined) {\n        throw new ValueError('Could not convert typed search attribute to payload');\n      }\n      return payload;\n    }\n\n    // JSON.stringify takes care of converting Dates to ISO strings\n    const payload = this.jsonConverter.toPayload(attr.value);\n    if (payload === undefined) {\n      throw new ValueError('Could not convert typed search attribute to payload');\n    }\n\n    // Note: this shouldn't be the case but the compiler complains without this check.\n    if (payload.metadata == null) {\n      throw new ValueError('Missing payload metadata');\n    }\n    // Add encoded type of search attribute to metatdata\n    payload.metadata['type'] = encode(TypedSearchAttributes.toMetadataType(attr.type));\n    return payload;\n  }\n\n  // Note: type casting undefined values is not clear to caller.\n  // We can't change the typing of the method to return undefined, it's not allowed by the interface.\n  public fromPayload<T>(payload: Payload): T {\n    if (payload.metadata == null) {\n      throw new ValueError('Missing payload metadata');\n    }\n\n    // If no 'type' metadata field or no given value, we skip.\n    if (payload.metadata.type == null) {\n      return undefined as T;\n    }\n    const type = TypedSearchAttributes.toSearchAttributeType(decode(payload.metadata.type));\n    // Unrecognized metadata type (sanity check).\n    if (type === undefined) {\n      return undefined as T;\n    }\n\n    let value = this.jsonConverter.fromPayload(payload);\n\n    // Handle legacy values without KEYWORD_LIST type.\n    if (type !== SearchAttributeType.KEYWORD_LIST && Array.isArray(value)) {\n      // Cannot have an array with multiple values for non-KEYWORD_LIST type.\n      if (value.length > 1) {\n        return undefined as T;\n      }\n      // Unpack single value array.\n      value = value[0];\n    }\n    if (type === SearchAttributeType.DATETIME && value) {\n      value = new Date(value as string);\n    }\n    // Check if the value is a valid for the given type. If not, skip.\n    if (!isValidValueForType(type, value)) {\n      return undefined as T;\n    }\n    return new TypedSearchAttributeValue(type, value) as T;\n  }\n}\n\nexport const typedSearchAttributePayloadConverter = new TypedSearchAttributePayloadConverter();\n\n// If both params are provided, conflicting keys will be overwritten by typedSearchAttributes.\nexport function encodeUnifiedSearchAttributes(\n  searchAttributes?: SearchAttributes,\n  typedSearchAttributes?: TypedSearchAttributes | SearchAttributeUpdatePair[]\n): Record<string, Payload> {\n  return {\n    ...(searchAttributes ? mapToPayloads(searchAttributePayloadConverter, searchAttributes) : {}),\n    ...(typedSearchAttributes\n      ? mapToPayloads<string, TypedSearchAttributeUpdateValue<SearchAttributeType>>(\n          typedSearchAttributePayloadConverter,\n          Object.fromEntries(\n            (Array.isArray(typedSearchAttributes) ? typedSearchAttributes : typedSearchAttributes.getAll()).map(\n              (pair) => {\n                return [pair.key.name, new TypedSearchAttributeUpdateValue(pair.key.type, pair.value)];\n              }\n            )\n          )\n        )\n      : {}),\n  };\n}\n\nexport function decodeSearchAttributes(indexedFields: Record<string, Payload> | undefined | null): SearchAttributes {\n  if (!indexedFields) return {};\n  return Object.fromEntries(\n    Object.entries(mapFromPayloads(searchAttributePayloadConverter, indexedFields) as SearchAttributes).filter(\n      ([_, v]) => v && v.length > 0\n    ) // Filter out empty arrays returned by pre 1.18 servers\n  );\n}\n\nexport function decodeTypedSearchAttributes(\n  indexedFields: Record<string, Payload> | undefined | null\n): TypedSearchAttributes {\n  return new TypedSearchAttributes(\n    Object.entries(\n      mapFromPayloads<string, TypedSearchAttributeValue<SearchAttributeType> | undefined>(\n        typedSearchAttributePayloadConverter,\n        indexedFields\n      ) ?? {}\n    ).reduce<SearchAttributePair[]>((acc, [k, attr]) => {\n      // Filter out undefined values from converter.\n      if (!attr) {\n        return acc;\n      }\n      const key = { name: k, type: attr.type };\n      // Ensure is valid pair.\n      if (isValidValueForType(key.type, attr.value)) {\n        acc.push({ key, value: attr.value } as SearchAttributePair);\n      }\n      return acc;\n    }, [])\n  );\n}\n","import type { ServiceError as GrpcServiceError } from '@grpc/grpc-js';\nimport { status as grpcStatus } from '@grpc/grpc-js';\nimport type { LoadedDataConverter } from '@temporalio/common';\nimport { decodePriority, NamespaceNotFoundError } from '@temporalio/common';\nimport {\n  decodeSearchAttributes,\n  decodeTypedSearchAttributes,\n  searchAttributePayloadConverter,\n} from '@temporalio/common/lib/converter/payload-search-attributes';\nimport type { Replace } from '@temporalio/common/lib/type-helpers';\nimport { optionalTsToDate, requiredTsToDate } from '@temporalio/common/lib/time';\nimport { decodeMapFromPayloads } from '@temporalio/common/lib/internal-non-workflow/codec-helpers';\nimport { temporal, google } from '@temporalio/proto';\nimport type {\n  CountWorkflowExecution,\n  RawWorkflowExecutionInfo,\n  WorkflowExecutionInfo,\n  WorkflowExecutionStatusName,\n} from './types';\n\nfunction workflowStatusCodeToName(code: temporal.api.enums.v1.WorkflowExecutionStatus): WorkflowExecutionStatusName {\n  return workflowStatusCodeToNameInternal(code) ?? 'UNKNOWN';\n}\n\n/**\n * Intentionally leave out `default` branch to get compilation errors when new values are added\n */\nfunction workflowStatusCodeToNameInternal(\n  code: temporal.api.enums.v1.WorkflowExecutionStatus\n): WorkflowExecutionStatusName {\n  switch (code) {\n    case temporal.api.enums.v1.WorkflowExecutionStatus.WORKFLOW_EXECUTION_STATUS_UNSPECIFIED:\n      return 'UNSPECIFIED';\n    case temporal.api.enums.v1.WorkflowExecutionStatus.WORKFLOW_EXECUTION_STATUS_RUNNING:\n      return 'RUNNING';\n    case temporal.api.enums.v1.WorkflowExecutionStatus.WORKFLOW_EXECUTION_STATUS_FAILED:\n      return 'FAILED';\n    case temporal.api.enums.v1.WorkflowExecutionStatus.WORKFLOW_EXECUTION_STATUS_TIMED_OUT:\n      return 'TIMED_OUT';\n    case temporal.api.enums.v1.WorkflowExecutionStatus.WORKFLOW_EXECUTION_STATUS_CANCELED:\n      return 'CANCELLED';\n    case temporal.api.enums.v1.WorkflowExecutionStatus.WORKFLOW_EXECUTION_STATUS_TERMINATED:\n      return 'TERMINATED';\n    case temporal.api.enums.v1.WorkflowExecutionStatus.WORKFLOW_EXECUTION_STATUS_COMPLETED:\n      return 'COMPLETED';\n    case temporal.api.enums.v1.WorkflowExecutionStatus.WORKFLOW_EXECUTION_STATUS_CONTINUED_AS_NEW:\n      return 'CONTINUED_AS_NEW';\n    case temporal.api.enums.v1.WorkflowExecutionStatus.WORKFLOW_EXECUTION_STATUS_PAUSED:\n      return 'PAUSED';\n  }\n}\n\nexport async function executionInfoFromRaw<T>(\n  raw: RawWorkflowExecutionInfo,\n  dataConverter: LoadedDataConverter,\n  rawDataToEmbed: T,\n  namespace: string\n): Promise<Replace<WorkflowExecutionInfo, { raw: T }>> {\n  const workflowId = raw.execution!.workflowId!;\n  return {\n    type: raw.type!.name!,\n    workflowId,\n    runId: raw.execution!.runId!,\n    taskQueue: raw.taskQueue!,\n    status: {\n      code: raw.status!,\n      name: workflowStatusCodeToName(raw.status!),\n    },\n    // Safe to convert to number, max history length is 50k, which is much less than Number.MAX_SAFE_INTEGER\n    historyLength: raw.historyLength!.toNumber(),\n    // Exact truncation for multi-petabyte histories\n    // historySize === 0 means WFT was generated by pre-1.20.0 server, and the history size is unknown\n    historySize: raw.historySizeBytes?.toNumber() || undefined,\n    startTime: requiredTsToDate(raw.startTime, 'startTime'),\n    executionTime: optionalTsToDate(raw.executionTime),\n    closeTime: optionalTsToDate(raw.closeTime),\n    memo: await decodeMapFromPayloads(dataConverter, raw.memo?.fields, {\n      type: 'workflow',\n      namespace,\n      workflowId,\n    }),\n    searchAttributes: decodeSearchAttributes(raw.searchAttributes?.indexedFields),\n    typedSearchAttributes: decodeTypedSearchAttributes(raw.searchAttributes?.indexedFields),\n    parentExecution: raw.parentExecution\n      ? {\n          workflowId: raw.parentExecution.workflowId!,\n          runId: raw.parentExecution.runId!,\n        }\n      : undefined,\n    rootExecution: raw.rootExecution\n      ? {\n          workflowId: raw.rootExecution.workflowId!,\n          runId: raw.rootExecution.runId!,\n        }\n      : undefined,\n    raw: rawDataToEmbed,\n    priority: decodePriority(raw.priority),\n  };\n}\n\nexport function decodeCountWorkflowExecutionsResponse(\n  raw: temporal.api.workflowservice.v1.ICountWorkflowExecutionsResponse\n): CountWorkflowExecution {\n  return {\n    // Note: lossy conversion of Long to number\n    count: raw.count!.toNumber(),\n    groups: raw.groups!.map((group) => {\n      return {\n        // Note: lossy conversion of Long to number\n        count: group.count!.toNumber(),\n        groupValues: group.groupValues!.map((value) => searchAttributePayloadConverter.fromPayload(value)),\n      };\n    }),\n  };\n}\n\nexport type ErrorDetailsName = `temporal.api.errordetails.v1.${keyof typeof temporal.api.errordetails.v1}`;\nexport type FailureName = `temporal.api.failure.v1.${keyof typeof temporal.api.failure.v1}`;\n\n/**\n * If the error type can be determined based on embedded grpc error details,\n * then rethrow the appropriate TypeScript error. Otherwise do nothing.\n *\n * This function should be used before falling back to generic error handling\n * based on grpc error code. Very few error types are currently supported, but\n * this function will be expanded over time as more server error types are added.\n */\nexport function rethrowKnownErrorTypes(err: GrpcServiceError): void {\n  // We really don't expect multiple error details, but this really is an array, so just in case...\n  for (const entry of getGrpcStatusDetails(err) ?? []) {\n    if (!entry.type_url || !entry.value) continue;\n    const type = trimGrpcTypeUrl(entry.type_url) as ErrorDetailsName;\n\n    switch (type) {\n      case 'temporal.api.errordetails.v1.NamespaceNotFoundFailure': {\n        const { namespace } = temporal.api.errordetails.v1.NamespaceNotFoundFailure.decode(entry.value);\n        throw new NamespaceNotFoundError(namespace);\n      }\n      case 'temporal.api.errordetails.v1.MultiOperationExecutionFailure': {\n        // MultiOperationExecutionFailure contains error statuses for multiple\n        // operations. A MultiOperationExecutionAborted error status means that\n        // the corresponding operation was aborted due to an error in one of the\n        // other operations. We rethrow the first operation error that is not\n        // MultiOperationExecutionAborted.\n        const { statuses } = temporal.api.errordetails.v1.MultiOperationExecutionFailure.decode(entry.value);\n        for (const status of statuses) {\n          const detail = status.details?.[0];\n          const statusType = trimGrpcTypeUrl(detail?.type_url) as FailureName | '';\n          if (\n            statusType === 'temporal.api.failure.v1.MultiOperationExecutionAborted' ||\n            status.code === grpcStatus.OK\n          ) {\n            continue;\n          }\n          err.message = status.message ?? err.message;\n          err.code = status.code || err.code;\n          err.details = detail?.value?.toString() || err.details;\n          throw err;\n        }\n      }\n    }\n  }\n}\n\nexport function getGrpcStatusDetails(err: GrpcServiceError): google.rpc.Status['details'] | undefined {\n  const statusBuffer = err.metadata.get('grpc-status-details-bin')?.[0];\n  if (!statusBuffer || typeof statusBuffer === 'string') {\n    return undefined;\n  }\n  return google.rpc.Status.decode(statusBuffer).details;\n}\n\n/**\n * Try to extract the runId field from a gRPC ALREADY_EXISTS error's details containing\n * NexusOperationExecutionAlreadyStartedFailure. Returns undefined if the error details\n * do not include this failure type or cannot be decoded.\n */\nexport function extractNexusOperationAlreadyStartedRunId(err: GrpcServiceError): string | undefined {\n  try {\n    for (const entry of getGrpcStatusDetails(err) ?? []) {\n      if (!entry.type_url || !entry.value) continue;\n      const type = entry.type_url.replace(/^type.googleapis.com\\//, '');\n      if (type !== 'temporal.api.errordetails.v1.NexusOperationExecutionAlreadyStartedFailure') continue;\n\n      const details = temporal.api.errordetails.v1.NexusOperationExecutionAlreadyStartedFailure.decode(entry.value);\n      return details.runId;\n    }\n  } catch {\n    // ignore\n  }\n  return undefined;\n}\n\nexport function trimGrpcTypeUrl(type_url: string | null | undefined): string {\n  return type_url?.replace(/^type.googleapis.com\\//, '') || '';\n}\n","import { status as grpcStatus } from '@grpc/grpc-js';\nimport type { ActivitySerializationContext } from '@temporalio/common';\nimport { ensureTemporalFailure } from '@temporalio/common';\nimport { encodeErrorToFailure, encodeToPayloadsWithContext } from '@temporalio/common/lib/internal-non-workflow';\nimport { filterNullAndUndefined } from '@temporalio/common/lib/internal-workflow';\nimport type { BaseClientOptions, LoadedWithDefaults, WithDefaults } from './base-client';\nimport { BaseClient, defaultBaseClientOptions } from './base-client';\nimport {\n  isGrpcServiceError,\n  ActivityNotFoundError,\n  ActivityCompletionError,\n  ActivityCancelledError,\n  ActivityResetError,\n  ActivityPausedError,\n} from './errors';\nimport type { WorkflowService } from './types';\nimport { rethrowKnownErrorTypes } from './helpers';\n\n/**\n * Options used to configure {@link AsyncCompletionClient}\n */\nexport type AsyncCompletionClientOptions = BaseClientOptions;\n\nexport type LoadedAsyncCompletionClientOptions = LoadedWithDefaults<AsyncCompletionClientOptions>;\n\nfunction defaultAsyncCompletionClientOptions(): WithDefaults<AsyncCompletionClientOptions> {\n  return defaultBaseClientOptions();\n}\n\n/**\n * Options for async Activity completion, failure, cancellation, and heartbeat operations.\n */\nexport interface AsyncCompletionOperationOptions {\n  /**\n   * Serialization context to use when converting payloads and failures for task-token operations.\n   *\n   * By-ID operations infer their Activity serialization context from the supplied IDs.\n   *\n   * @experimental Serialization context is an experimental feature and may change.\n   */\n  serializationContext?: ActivitySerializationContext;\n}\n\n/**\n * A mostly unique Activity identifier. If {@link workflowId} is set, it refers to a Workflow Activity.\n * If {@link workflowId} is unset, it refers to a Standalone Activity. In both cases, it can optionally contain\n * {@link runId}.\n *\n * Activity IDs may be reused in a single Workflow run as long as a previous Activity with the same ID has completed\n * already. Standalone Activity IDs may be reused if `idReusePolicy` is set in Activity options when starting a new\n * Activity, but a combination of Activity ID and Activity run ID is unique.\n */\nexport interface FullActivityId {\n  /**\n   * ID of the Workflow that started the Activity. Unset for Standalone Activities.\n   */\n  workflowId?: string;\n  /**\n   * If {@link workflowId} is set, this optionally specifies the Workflow run ID in order to differentiate between\n   * Workflow runs with the same Workflow ID. If {@link workflowId} is unset, this optionally specifies the\n   * Activity run ID in order to differentiate between Standalone Activity runs with the same Activity ID.\n   *\n   * If {@link runId} is unset, then the {@link FullActivityId} object refers to the latest run of the Workflow or\n   * the Standalone Activity with the specified ID.\n   */\n  runId?: string;\n  /**\n   * ID of the Activity.\n   */\n  activityId: string;\n}\n\nfunction activityContextFromFullActivityId(\n  namespace: string,\n  fullActivityId: FullActivityId\n): ActivitySerializationContext {\n  return {\n    type: 'activity',\n    namespace,\n    workflowId: fullActivityId.workflowId,\n    activityId: fullActivityId.activityId,\n    isLocal: false,\n  };\n}\n\n/**\n * A client for asynchronous completion and heartbeating of Activities.\n *\n * Typically this client should not be instantiated directly, instead create the high level {@link Client} and use\n * {@link Client.activity} to complete async activities.\n */\nexport class AsyncCompletionClient extends BaseClient {\n  public readonly options: LoadedAsyncCompletionClientOptions;\n\n  constructor(options?: AsyncCompletionClientOptions) {\n    super(options);\n    this.options = {\n      ...defaultAsyncCompletionClientOptions(),\n      ...filterNullAndUndefined(options ?? {}),\n      loadedDataConverter: this.dataConverter,\n    };\n  }\n\n  /**\n   * Raw gRPC access to the Temporal service.\n   *\n   * **NOTE**: The namespace provided in {@link options} is **not** automatically set on requests made via this service\n   * object.\n   */\n  get workflowService(): WorkflowService {\n    return this.connection.workflowService;\n  }\n\n  protected serializationContextFor(\n    taskTokenOrFullActivityId: Uint8Array | FullActivityId,\n    options?: AsyncCompletionOperationOptions\n  ): ActivitySerializationContext | undefined {\n    return taskTokenOrFullActivityId instanceof Uint8Array\n      ? options?.serializationContext\n      : activityContextFromFullActivityId(this.options.namespace, taskTokenOrFullActivityId);\n  }\n\n  /**\n   * Transforms grpc errors into well defined TS errors.\n   */\n  protected handleError(err: unknown): never {\n    if (isGrpcServiceError(err)) {\n      rethrowKnownErrorTypes(err);\n\n      if (err.code === grpcStatus.NOT_FOUND) {\n        throw new ActivityNotFoundError('Not found');\n      }\n\n      throw new ActivityCompletionError(err.details || err.message);\n    }\n    throw new ActivityCompletionError('Unexpected failure');\n  }\n\n  /**\n   * Complete an Activity by task token\n   */\n  async complete(taskToken: Uint8Array, result: unknown, options?: AsyncCompletionOperationOptions): Promise<void>;\n  /**\n   * Complete an Activity by full ID\n   */\n  async complete(fullActivityId: FullActivityId, result: unknown): Promise<void>;\n\n  async complete(\n    taskTokenOrFullActivityId: Uint8Array | FullActivityId,\n    result: unknown,\n    options?: AsyncCompletionOperationOptions\n  ): Promise<void> {\n    const payloads = await encodeToPayloadsWithContext(\n      this.dataConverter,\n      this.serializationContextFor(taskTokenOrFullActivityId, options),\n      [result]\n    );\n    try {\n      if (taskTokenOrFullActivityId instanceof Uint8Array) {\n        await this.workflowService.respondActivityTaskCompleted({\n          identity: this.options.identity,\n          namespace: this.options.namespace,\n          taskToken: taskTokenOrFullActivityId,\n          result: { payloads },\n        });\n      } else {\n        await this.workflowService.respondActivityTaskCompletedById({\n          identity: this.options.identity,\n          namespace: this.options.namespace,\n          ...taskTokenOrFullActivityId,\n          result: { payloads },\n        });\n      }\n    } catch (err) {\n      this.handleError(err);\n    }\n  }\n\n  /**\n   * Fail an Activity by task token\n   */\n  async fail(taskToken: Uint8Array, err: unknown, options?: AsyncCompletionOperationOptions): Promise<void>;\n  /**\n   * Fail an Activity by full ID\n   */\n  async fail(fullActivityId: FullActivityId, err: unknown): Promise<void>;\n\n  async fail(\n    taskTokenOrFullActivityId: Uint8Array | FullActivityId,\n    err: unknown,\n    options?: AsyncCompletionOperationOptions\n  ): Promise<void> {\n    const failure = await encodeErrorToFailure(\n      this.dataConverter,\n      ensureTemporalFailure(err),\n      this.serializationContextFor(taskTokenOrFullActivityId, options)\n    );\n    try {\n      if (taskTokenOrFullActivityId instanceof Uint8Array) {\n        await this.workflowService.respondActivityTaskFailed({\n          identity: this.options.identity,\n          namespace: this.options.namespace,\n          taskToken: taskTokenOrFullActivityId,\n          failure,\n        });\n      } else {\n        await this.workflowService.respondActivityTaskFailedById({\n          identity: this.options.identity,\n          namespace: this.options.namespace,\n          ...taskTokenOrFullActivityId,\n          failure,\n        });\n      }\n    } catch (err) {\n      this.handleError(err);\n    }\n  }\n\n  /**\n   * Report Activity cancellation by task token\n   */\n  reportCancellation(\n    taskToken: Uint8Array,\n    details?: unknown,\n    options?: AsyncCompletionOperationOptions\n  ): Promise<void>;\n  /**\n   * Report Activity cancellation by full ID\n   */\n  reportCancellation(fullActivityId: FullActivityId, details?: unknown): Promise<void>;\n\n  async reportCancellation(\n    taskTokenOrFullActivityId: Uint8Array | FullActivityId,\n    details?: unknown,\n    options?: AsyncCompletionOperationOptions\n  ): Promise<void> {\n    const payloads = await encodeToPayloadsWithContext(\n      this.dataConverter,\n      this.serializationContextFor(taskTokenOrFullActivityId, options),\n      [details]\n    );\n    try {\n      if (taskTokenOrFullActivityId instanceof Uint8Array) {\n        await this.workflowService.respondActivityTaskCanceled({\n          identity: this.options.identity,\n          namespace: this.options.namespace,\n          taskToken: taskTokenOrFullActivityId,\n          details: { payloads },\n        });\n      } else {\n        await this.workflowService.respondActivityTaskCanceledById({\n          identity: this.options.identity,\n          namespace: this.options.namespace,\n          ...taskTokenOrFullActivityId,\n          details: { payloads },\n        });\n      }\n    } catch (err) {\n      this.handleError(err);\n    }\n  }\n\n  /**\n   * Send Activity heartbeat by task token\n   */\n  heartbeat(taskToken: Uint8Array, details?: unknown, options?: AsyncCompletionOperationOptions): Promise<void>;\n  /**\n   * Send Activity heartbeat by full ID\n   */\n  heartbeat(fullActivityId: FullActivityId, details?: unknown): Promise<void>;\n\n  async heartbeat(\n    taskTokenOrFullActivityId: Uint8Array | FullActivityId,\n    details?: unknown,\n    options?: AsyncCompletionOperationOptions\n  ): Promise<void> {\n    const payloads = await encodeToPayloadsWithContext(\n      this.dataConverter,\n      this.serializationContextFor(taskTokenOrFullActivityId, options),\n      [details]\n    );\n    let cancelRequested = false;\n    let paused = false;\n    let reset = false;\n    try {\n      if (taskTokenOrFullActivityId instanceof Uint8Array) {\n        const response = await this.workflowService.recordActivityTaskHeartbeat({\n          identity: this.options.identity,\n          namespace: this.options.namespace,\n          taskToken: taskTokenOrFullActivityId,\n          details: { payloads },\n        });\n        cancelRequested = !!response.cancelRequested;\n        paused = !!response.activityPaused;\n        reset = !!response.activityReset;\n      } else {\n        const response = await this.workflowService.recordActivityTaskHeartbeatById({\n          identity: this.options.identity,\n          namespace: this.options.namespace,\n          ...taskTokenOrFullActivityId,\n          details: { payloads },\n        });\n        cancelRequested = !!response.cancelRequested;\n        paused = !!response.activityPaused;\n        reset = !!response.activityReset;\n      }\n    } catch (err) {\n      this.handleError(err);\n    }\n    // Note that it is possible for a heartbeat response to have multiple fields\n    // set as true (i.e. cancelled and pause).\n    if (cancelRequested) {\n      throw new ActivityCancelledError('cancelled');\n    } else if (reset) {\n      throw new ActivityResetError('reset');\n    } else if (paused) {\n      throw new ActivityPausedError('paused');\n    }\n  }\n}\n","import type { AnyFunc, OmitLastParam } from './type-helpers';\nimport type { Payload } from './interfaces';\n\n/**\n * Type of the next function for a given interceptor function\n *\n * Called from an interceptor to continue the interception chain\n */\nexport type Next<IF, FN extends keyof IF> = Required<IF>[FN] extends AnyFunc ? OmitLastParam<Required<IF>[FN]> : never;\n\n/** Headers are just a mapping of header name to Payload */\nexport type Headers = Record<string, Payload>;\n\ntype WrapNext = <F extends AnyFunc>(next: F) => F;\n\n/**\n * Shared implementation for interceptor chaining.\n *\n * The workflow package needs one small behavioral extension over the generic interceptor\n * semantics: every `next(...)` continuation it hands to workflow interceptors must first\n * restore the workflow random scope that was current when that continuation was created.\n *\n * We keep the chain-construction loop here as the single source of truth so ordering and\n * basic composition behavior cannot drift between the generic implementation used by client,\n * worker, activity, and nexus code and the workflow-specific implementation that decorates\n * `next(...)` at each boundary. The only behavior that varies between callers is the\n * `wrapNext` hook: most packages use the identity wrapper, while workflow code supplies a\n * wrapper that re-enters the captured workflow async-local random scope.\n */\nexport function composeInterceptorsWith<I, M extends keyof I>(\n  interceptors: I[],\n  method: M,\n  next: Next<I, M>,\n  wrapNext: WrapNext\n): Next<I, M> {\n  let composedNext: any = next;\n  for (let i = interceptors.length - 1; i >= 0; --i) {\n    const interceptor = interceptors[i];\n    if (interceptor?.[method] !== undefined) {\n      const prev = wrapNext(composedNext);\n      // We lose type safety here because Typescript can't deduce that interceptor[method] is a function that returns\n      // the same type as Next<I, M>\n      composedNext = ((input: any) => (interceptor[method] as any)(input, prev)) as any;\n    }\n  }\n  return composedNext;\n}\n\n/**\n * Compose all interceptor methods into a single function.\n *\n * Calling the composed function results in calling each of the provided interceptor, in order (from the first to\n * the last), followed by the original function provided as argument to `composeInterceptors()`.\n *\n * @param interceptors a list of interceptors\n * @param method the name of the interceptor method to compose\n * @param next the original function to be executed at the end of the interception chain\n */\n// ts-prune-ignore-next (imported via lib/interceptors)\nexport function composeInterceptors<I, M extends keyof I>(interceptors: I[], method: M, next: Next<I, M>): Next<I, M> {\n  return composeInterceptorsWith(interceptors, method, next, ((wrappedNext) => wrappedNext) as WrapNext);\n}\n","import { randomUUID } from 'node:crypto';\nimport { status as grpcStatus } from '@grpc/grpc-js';\nimport type {\n  ActivityFunction,\n  LoadedDataConverter,\n  Next,\n  Priority,\n  RetryPolicy,\n  SearchAttributePair,\n  TypedSearchAttributes,\n} from '@temporalio/common';\nimport {\n  compilePriority,\n  compileRetryPolicy,\n  convertDeploymentVersion,\n  decodePriority,\n  decompileRetryPolicy,\n} from '@temporalio/common';\nimport type { Duration } from '@temporalio/common/lib/time';\nimport { msOptionalToTs, msToNumber, optionalTsToDate, optionalTsToMs } from '@temporalio/common/lib/time';\nimport { composeInterceptors } from '@temporalio/common/lib/interceptors';\nimport {\n  decodeTypedSearchAttributes,\n  encodeUnifiedSearchAttributes,\n  searchAttributePayloadConverter,\n} from '@temporalio/common/lib/converter/payload-search-attributes';\nimport {\n  decodeArrayFromPayloads,\n  decodeFromPayloadsAtIndex,\n  decodeOptionalFailureToOptionalError,\n  encodeToPayloads,\n  encodeUserMetadata,\n} from '@temporalio/common/lib/internal-non-workflow';\nimport { temporal } from '@temporalio/proto';\nimport type { Replace } from '@temporalio/common/lib/type-helpers';\nimport type {\n  ActivityCancelInput,\n  ActivityClientInterceptor,\n  ActivityCountInput,\n  ActivityDescribeInput,\n  ActivityGetResultInput,\n  ActivityListInput,\n  ActivityStartInput,\n  ActivityTerminateInput,\n} from './interceptors';\nimport type { AsyncCompletionClientOptions } from './async-completion-client';\nimport { AsyncCompletionClient } from './async-completion-client';\nimport type {\n  ActivityExecutionDescription,\n  ActivityExecutionInfo,\n  ActivityIdConflictPolicy,\n  ActivityIdReusePolicy,\n  CountActivityExecutions,\n} from './types';\nimport {\n  decodeActivityExecutionStatus,\n  decodePendingActivityState,\n  encodeActivityIdConflictPolicy,\n  encodeActivityIdReusePolicy,\n} from './types';\nimport type { ErrorDetailsName } from './helpers';\nimport { rethrowKnownErrorTypes, trimGrpcTypeUrl, getGrpcStatusDetails } from './helpers';\nimport {\n  isGrpcServiceError,\n  ServiceError,\n  ActivityNotFoundError,\n  ActivityExecutionFailedError,\n  ActivityExecutionAlreadyStartedError,\n} from './errors';\n\n/**\n * Options used to configure {@link ActivityClient}\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport interface ActivityClientOptions extends AsyncCompletionClientOptions {\n  interceptors?: ActivityClientInterceptor[];\n}\n\n/**\n * Client for starting and managing Activities, and for asynchronous completion and heartbeating of Activities.\n * Includes all functionality of {@link AsyncCompletionClient}.\n *\n * Typically this client should not be instantiated directly, instead create the high level {@link Client} and use\n * {@link Client.activity} to interact with Activities.\n */\nexport class ActivityClient extends AsyncCompletionClient implements TypedActivityClient<any> {\n  private readonly interceptedHandlers: {\n    [K in keyof Required<ActivityClientInterceptor>]: Next<ActivityClientInterceptor, K>;\n  };\n\n  constructor(options?: ActivityClientOptions) {\n    super(options);\n\n    const interceptors = options?.interceptors ?? [];\n    this.interceptedHandlers = {\n      start: composeInterceptors(interceptors, 'start', this.startHandler.bind(this)),\n      getResult: composeInterceptors(interceptors, 'getResult', this.getResultHandler.bind(this)),\n      describe: composeInterceptors(interceptors, 'describe', this.describeHandler.bind(this)),\n      cancel: composeInterceptors(interceptors, 'cancel', this.cancelHandler.bind(this)),\n      terminate: composeInterceptors(interceptors, 'terminate', this.terminateHandler.bind(this)),\n      list: composeInterceptors(interceptors, 'list', this.listHandler.bind(this)),\n      count: composeInterceptors(interceptors, 'count', this.countHandler.bind(this)),\n    };\n  }\n\n  /**\n   * Returns this client as a {@link TypedActivityClient}. It enables strong type checking of Activity name, arguments\n   * and result based on the provided Activity interface. Note that no new client object is created - this method only\n   * affects type annotations.\n   * @template T Activity interface to use for type checking. The returned client can only start activities present in\n   * this interface.\n   *\n   * @experimental Standalone Activities are experimental. APIs may be subject to change.\n   */\n  typed<T>(): TypedActivityClient<T> {\n    return this;\n  }\n\n  /**\n   * Starts new Standalone Activity execution.\n   *\n   * @param activity Name of the activity to start.\n   * @param options Options controlling the start and execution of the activity.\n   * @returns Handle to the started activity. The handle's `runId` property will be set to the started run.\n   *\n   * @experimental Standalone Activities are experimental. APIs may be subject to change.\n   */\n  async start<R = any>(activity: string, options: ActivityOptions): Promise<ActivityHandle<R>> {\n    return this.interceptedHandlers.start({\n      activityType: activity,\n      options,\n      headers: {},\n    });\n  }\n\n  /**\n   * Executes a Standalone Activity until completion and returns the result.\n   * @param activity Name of the activity to start.\n   * @param options Options controlling the activity execution.\n   * @returns Result of the activity.\n   *\n   * @experimental Standalone Activities are experimental. APIs may be subject to change.\n   */\n  async execute<R = any>(activity: string, options: ActivityOptions): Promise<R> {\n    const handle = await this.start(activity, options);\n    return handle.result();\n  }\n\n  /**\n   * Creates an Activity handle from ID and optionally from run ID. If `runId` is not set, the handle will refer to the\n   * newest Activity run with the given Activity ID.\n   *\n   * Note 1: this function always succeeds. If the provided ID is invalid, an error will only be thrown when calling\n   * the handle's methods.\n   *\n   * Note 2: if `runID` is not set when calling `getHandle`, then `runId` property of the returned handle will always\n   * remain unset, even after method calls are performed. To get the run ID of the targeted activity execution, call\n   * {@link ActivityHandle.describe} and read the `activityRunId` field of the returned {@link ActivityExecutionDescription}.\n   *\n   * @param activityId ID of the Activity.\n   * @param runId Optional run ID of the specific Activity execution.\n   * @returns Handle to the specified activity execution.\n   *\n   * @experimental Standalone Activities are experimental. APIs may be subject to change.\n   */\n  getHandle<R = any>(activityId: string, runId?: string): ActivityHandle<R> {\n    return this.createHandle(activityId, runId);\n  }\n\n  /**\n   * Return a list of Activity executions matching the given `query`.\n   *\n   * Note that the list of Activity executions returned is approximate and eventually consistent.\n   *\n   * More info on the concept of \"visibility\" and the query syntax on the Temporal documentation site:\n   * https://docs.temporal.io/visibility\n   *\n   * @experimental Standalone Activities are experimental. APIs may be subject to change.\n   */\n  list(query: string): AsyncIterable<ActivityExecutionInfo> {\n    return this.interceptedHandlers.list({\n      query,\n      headers: {},\n    });\n  }\n\n  /**\n   * Return the number of Activity executions matching the given `query`.\n   *\n   * Note that the number of Activity executions returned is approximate and eventually consistent.\n   *\n   * More info on the concept of \"visibility\" and the query syntax on the Temporal documentation site:\n   * https://docs.temporal.io/visibility\n   *\n   * @experimental Standalone Activities are experimental. APIs may be subject to change.\n   */\n  async count(query: string): Promise<CountActivityExecutions> {\n    return await this.interceptedHandlers.count({\n      query,\n      headers: {},\n    });\n  }\n\n  protected createHandle<R>(activityId: string, runId?: string): ActivityHandle<R> {\n    if (!activityId) {\n      throw new TypeError('activityId is required');\n    }\n\n    const handle = {\n      client: this,\n      activityId,\n      runId,\n\n      async result(): Promise<R> {\n        return await this.client.interceptedHandlers.getResult({\n          activityId: this.activityId,\n          activityRunId: this.runId ?? '',\n          headers: {},\n        });\n      },\n\n      async describe(): Promise<ActivityExecutionDescription> {\n        return await this.client.interceptedHandlers.describe({\n          activityId: this.activityId,\n          activityRunId: this.runId ?? '',\n          headers: {},\n        });\n      },\n\n      async cancel(reason: string): Promise<void> {\n        return await this.client.interceptedHandlers.cancel({\n          activityId: this.activityId,\n          activityRunId: this.runId ?? '',\n          reason,\n          headers: {},\n        });\n      },\n\n      async terminate(reason: string): Promise<void> {\n        return await this.client.interceptedHandlers.terminate({\n          activityId: this.activityId,\n          activityRunId: this.runId ?? '',\n          reason,\n          headers: {},\n        });\n      },\n    };\n\n    return handle;\n  }\n\n  protected async startHandler(input: ActivityStartInput): Promise<ActivityHandle> {\n    if (!input.activityType) {\n      throw new TypeError('activityType is required');\n    }\n    validateActivityOptions(input.options);\n\n    try {\n      const resp = await this.workflowService.startActivityExecution(\n        await this.buildStartActivityExecutionRequest(input)\n      );\n      return this.createHandle(input.options.id, resp.runId);\n    } catch (err) {\n      if (isGrpcServiceError(err) && err.code === grpcStatus.ALREADY_EXISTS) {\n        for (const entry of getGrpcStatusDetails(err) ?? []) {\n          if (!entry.type_url || !entry.value) continue;\n          if (\n            (trimGrpcTypeUrl(entry.type_url) as ErrorDetailsName) ===\n            'temporal.api.errordetails.v1.ActivityExecutionAlreadyStartedFailure'\n          ) {\n            const details = temporal.api.errordetails.v1.ActivityExecutionAlreadyStartedFailure.decode(entry.value);\n            throw new ActivityExecutionAlreadyStartedError(\n              'Activity execution already started',\n              input.options.id,\n              details.runId\n            );\n          }\n        }\n      }\n\n      this.rethrowGrpcError(err, 'Failed to start activity');\n    }\n  }\n\n  protected async buildStartActivityExecutionRequest(\n    input: ActivityStartInput\n  ): Promise<temporal.api.workflowservice.v1.IStartActivityExecutionRequest> {\n    const searchAttributes = input.options.typedSearchAttributes\n      ? { indexedFields: encodeUnifiedSearchAttributes(undefined, input.options.typedSearchAttributes) }\n      : undefined;\n\n    return {\n      namespace: this.options.namespace,\n      identity: this.options.identity,\n      requestId: randomUUID(),\n      activityId: input.options.id,\n      activityType: { name: input.activityType },\n      taskQueue: { name: input.options.taskQueue },\n      scheduleToCloseTimeout: msOptionalToTs(input.options.scheduleToCloseTimeout),\n      scheduleToStartTimeout: msOptionalToTs(input.options.scheduleToStartTimeout),\n      startToCloseTimeout: msOptionalToTs(input.options.startToCloseTimeout),\n      heartbeatTimeout: msOptionalToTs(input.options.heartbeatTimeout),\n      retryPolicy: input.options.retry ? compileRetryPolicy(input.options.retry) : undefined,\n      input: { payloads: await encodeToPayloads(this.dataConverter, ...(input.options.args || [])) },\n      idReusePolicy: encodeActivityIdReusePolicy(input.options.idReusePolicy),\n      idConflictPolicy: encodeActivityIdConflictPolicy(input.options.idConflictPolicy),\n      searchAttributes,\n      header: { fields: input.headers },\n      userMetadata: await encodeUserMetadata(this.dataConverter, input.options.summary, undefined),\n      priority: input.options.priority ? compilePriority(input.options.priority) : undefined,\n      startDelay: msOptionalToTs(input.options.startDelay),\n    };\n  }\n\n  protected async getResultHandler(input: ActivityGetResultInput): Promise<any> {\n    if (!input.activityId) {\n      throw new TypeError('activityId is required');\n    }\n\n    const req: temporal.api.workflowservice.v1.IPollActivityExecutionRequest = {\n      namespace: this.options.namespace,\n      activityId: input.activityId,\n      runId: input.activityRunId || undefined,\n    };\n    for (;;) {\n      let failedErr;\n\n      try {\n        const resp = await this.workflowService.pollActivityExecution(req);\n        if (resp.outcome?.result) {\n          const [result] = await decodeArrayFromPayloads(this.dataConverter, resp.outcome.result.payloads ?? []);\n          return result;\n        } else if (resp.outcome?.failure) {\n          // If error conversion throws an exception, we want it to be caught and handled by rethrowGrpcError().\n          // If it succeeds, we want to throw the ActivityExecutionFailedError directly, so outside of try/catch.\n          failedErr = new ActivityExecutionFailedError(\n            'Activity execution failed',\n            await decodeOptionalFailureToOptionalError(this.dataConverter, resp.outcome.failure),\n            input.activityId,\n            resp.runId || input.activityRunId || undefined\n          );\n        }\n      } catch (err) {\n        this.rethrowGrpcError(err, 'Failed to get activity result');\n      }\n\n      if (failedErr) {\n        throw failedErr;\n      }\n    }\n  }\n\n  protected async describeHandler(input: ActivityDescribeInput): Promise<ActivityExecutionDescription> {\n    if (!input.activityId) {\n      throw new TypeError('activityId is required');\n    }\n\n    try {\n      const resp = await this.workflowService.describeActivityExecution({\n        namespace: this.options.namespace,\n        activityId: input.activityId,\n        runId: input.activityRunId || undefined,\n      });\n      return buildActivityDescription(resp.info!, this.dataConverter);\n    } catch (err) {\n      this.rethrowGrpcError(err, 'Failed to describe activity');\n    }\n  }\n\n  protected async cancelHandler(input: ActivityCancelInput): Promise<void> {\n    if (!input.activityId) {\n      throw new TypeError('activityId is required');\n    }\n\n    try {\n      await this.workflowService.requestCancelActivityExecution({\n        namespace: this.options.namespace,\n        activityId: input.activityId,\n        runId: input.activityRunId || undefined,\n        identity: this.options.identity,\n        requestId: randomUUID(),\n        reason: input.reason || undefined,\n      });\n    } catch (err) {\n      this.rethrowGrpcError(err, 'Failed to request activity cancellation');\n    }\n  }\n\n  protected async terminateHandler(input: ActivityTerminateInput): Promise<void> {\n    if (!input.activityId) {\n      throw new TypeError('activityId is required');\n    }\n\n    try {\n      await this.workflowService.terminateActivityExecution({\n        namespace: this.options.namespace,\n        activityId: input.activityId,\n        runId: input.activityRunId || undefined,\n        identity: this.options.identity,\n        requestId: randomUUID(),\n        reason: input.reason || undefined,\n      });\n    } catch (err) {\n      this.rethrowGrpcError(err, 'Failed to terminate activity');\n    }\n  }\n\n  protected async *listHandler(input: ActivityListInput): AsyncIterable<ActivityExecutionInfo> {\n    let nextPageToken: Uint8Array | null | undefined = undefined;\n    do {\n      try {\n        const resp: temporal.api.workflowservice.v1.IListActivityExecutionsResponse =\n          await this.workflowService.listActivityExecutions({\n            namespace: this.options.namespace,\n            query: input.query,\n            nextPageToken,\n          });\n\n        for (const info of resp.executions ?? []) {\n          yield buildActivityExecutionInfo(info);\n        }\n        nextPageToken = resp.nextPageToken;\n      } catch (e) {\n        this.rethrowGrpcError(e, 'Failed to list activities');\n      }\n    } while (nextPageToken && nextPageToken.length > 0);\n  }\n\n  protected async countHandler(input: ActivityCountInput): Promise<CountActivityExecutions> {\n    try {\n      const resp = await this.workflowService.countActivityExecutions({\n        namespace: this.options.namespace,\n        query: input.query,\n      });\n\n      return {\n        count: resp.count?.toNumber() ?? 0,\n        groups: resp.groups?.map((g) => ({\n          count: g.count?.toNumber() ?? 0,\n          groupValues: g.groupValues?.map((v) => searchAttributePayloadConverter.fromPayload(v)),\n        })),\n      };\n    } catch (err) {\n      this.rethrowGrpcError(err, 'Failed to count activities');\n    }\n  }\n\n  protected rethrowGrpcError(err: unknown, fallbackMessage: string): never {\n    if (isGrpcServiceError(err)) {\n      rethrowKnownErrorTypes(err);\n      if (err.code === grpcStatus.NOT_FOUND) {\n        throw new ActivityNotFoundError(err.details ?? 'Activity not found');\n      }\n      throw new ServiceError(fallbackMessage, { cause: err });\n    }\n    throw new ServiceError('Unexpected error while making gRPC request');\n  }\n}\n\n/**\n * Handle that can be used to perform operations on the associated Activity.\n * Can be obtained by calling {@link ActivityClient.start} or {@link ActivityClient.getHandle}.\n * @template R Result type of the activity. Use {@link ActivityClient.typed} to start activities in a type-safe way.\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport interface ActivityHandle<R = any> {\n  /**\n   * ID of the Activity this handle refers to.\n   */\n  readonly activityId: string;\n  /**\n   * Run ID of the specific Activity execution this handle refers to. If empty, this handle refers to the latest\n   * execution of the Activity with given ID.\n   */\n  readonly runId?: string;\n  /**\n   * Waits until the activity completes. If the activity is successful, returns the result of the activity.\n   * If the activity was not successful, throws {@link ActivityExecutionFailedError}. The activity failure is stored in\n   * the `cause` field.\n   */\n  result(): Promise<R>;\n  /**\n   * Returns information about the Activity execution.\n   */\n  describe(): Promise<ActivityExecutionDescription>;\n  /**\n   * Requests cancellation of the Activity execution. Note that cancellations are cooperative and not guaranteed to happen.\n   */\n  cancel(reason: string): Promise<void>;\n  /**\n   * Terminates the Activity execution. Note that the worker is not immediately notified of termination and may continue running the activity.\n   */\n  terminate(reason: string): Promise<void>;\n}\n\n/**\n * Options used by {@link ActivityClient.start}.\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport interface ActivityOptions {\n  /**\n   * Activity ID of the started activity. It's recommended to use a meaningful business ID.\n   */\n  id: string;\n  /**\n   * Task queue to run this activity on.\n   */\n  taskQueue: string;\n  /**\n   * Input arguments to pass to the activity.\n   */\n  args?: any[] | Readonly<any[]>;\n  /**\n   * If set, specifies maximum time between successful heartbeats.\n   */\n  heartbeatTimeout?: Duration;\n  /**\n   * Controls how Activity is retried. If not set, the server will assign default retry policy.\n   */\n  retry?: RetryPolicy;\n  /**\n   * Is set, specifies total time the activity is allowed to run, including retries.\n   *\n   * Note: it is required to set at least one of {@link startToCloseTimeout} and {@link scheduleToCloseTimeout}.\n   */\n  startToCloseTimeout?: Duration;\n  /**\n   * If set, specifies maximum time the activity can wait in the task queue before being picked up by a worker.\n   * This timeout is non-retryable.\n   */\n  scheduleToStartTimeout?: Duration;\n  /**\n   * If set, specifies maximum time for a single execution attempt. This timeout is retryable.\n   *\n   * Note: it is required to set at least one of {@link startToCloseTimeout} and {@link scheduleToCloseTimeout}.\n   */\n  scheduleToCloseTimeout?: Duration;\n  /**\n   * A single-line fixed summary for this activity execution that may appear in UI/CLI.\n   * This can be in single-line Temporal markdown format.\n   */\n  summary?: string;\n  /**\n   * Priority to use when starting this activity.\n   */\n  priority?: Priority;\n  /**\n   * Time to wait before dispatching the first activity task. This delay is not applied to retry attempts.\n   */\n  startDelay?: Duration;\n  /**\n   * Specifies behavior if there's a *closed* activity with the same ID.\n   */\n  idReusePolicy?: ActivityIdReusePolicy;\n  /**\n   * Specifies behavior if there's a *running* activity with the same ID. Note that there can only be one running\n   * Activity for each Activity ID.\n   */\n  idConflictPolicy?: ActivityIdConflictPolicy;\n  /**\n   * Search attributes for the activity.\n   */\n  typedSearchAttributes?: SearchAttributePair[] | TypedSearchAttributes;\n}\n\nfunction validateActivityOptions(options: ActivityOptions): void {\n  if (!options.id) {\n    throw new TypeError('id is required');\n  }\n  if (!options.taskQueue) {\n    throw new TypeError('taskQueue is required');\n  }\n  if (!options.scheduleToCloseTimeout && !options.startToCloseTimeout) {\n    throw new TypeError('Either scheduleToCloseTimeout or startToCloseTimeout is required');\n  }\n  if (options.startDelay !== undefined && msToNumber(options.startDelay) < 0) {\n    throw new TypeError('startDelay must be non-negative');\n  }\n}\n\nfunction buildActivityExecutionInfoCommonPart(\n  info: temporal.api.activity.v1.IActivityExecutionListInfo | temporal.api.activity.v1.IActivityExecutionInfo\n): ActivityExecutionInfo {\n  return {\n    activityId: info.activityId!,\n    activityRunId: info.runId!,\n    activityType: info.activityType!.name!,\n    scheduleTime: optionalTsToDate(info.scheduleTime),\n    closeTime: optionalTsToDate(info.closeTime),\n    status: decodeActivityExecutionStatus(info.status)!,\n    typedSearchAttributes: decodeTypedSearchAttributes(info.searchAttributes?.indexedFields),\n    taskQueue: info.taskQueue!,\n    executionDurationMs: optionalTsToMs(info.executionDuration),\n  };\n}\n\nfunction buildActivityExecutionInfo(info: temporal.api.activity.v1.IActivityExecutionListInfo): ActivityExecutionInfo {\n  return {\n    ...buildActivityExecutionInfoCommonPart(info),\n    rawListInfo: info,\n  };\n}\n\nfunction buildActivityDescription(\n  info: temporal.api.activity.v1.IActivityExecutionInfo,\n  dataConverter: LoadedDataConverter\n): ActivityExecutionDescription {\n  const getHeartbeatDetails: <T>() => Promise<T | undefined> = async <T>() => {\n    const payloads = info.heartbeatDetails?.payloads;\n    if (payloads && payloads.length > 0) {\n      return await decodeFromPayloadsAtIndex<T>(dataConverter, 0, info.heartbeatDetails?.payloads);\n    } else {\n      return undefined;\n    }\n  };\n\n  const getLastFailure: () => Promise<Error | undefined> = async () => {\n    return await decodeOptionalFailureToOptionalError(dataConverter, info.lastFailure);\n  };\n\n  return {\n    ...buildActivityExecutionInfoCommonPart(info),\n    rawInfo: info,\n    runState: decodePendingActivityState(info.runState),\n    scheduleToCloseTimeoutMs: optionalTsToMs(info.scheduleToCloseTimeout),\n    scheduleToStartTimeoutMs: optionalTsToMs(info.scheduleToStartTimeout),\n    startToCloseTimeoutMs: optionalTsToMs(info.startToCloseTimeout),\n    heartbeatTimeoutMs: optionalTsToMs(info.heartbeatTimeout),\n    retryPolicy: decompileRetryPolicy(info.retryPolicy)!,\n    lastHeartbeatTime: optionalTsToDate(info.lastHeartbeatTime),\n    lastStartedTime: optionalTsToDate(info.lastStartedTime),\n    attempt: info.attempt!,\n    expirationTime: optionalTsToDate(info.expirationTime),\n    lastWorkerIdentity: info.lastWorkerIdentity || undefined,\n    currentRetryIntervalMs: optionalTsToMs(info.currentRetryInterval),\n    lastAttemptCompleteTime: optionalTsToDate(info.lastAttemptCompleteTime),\n    nextAttemptScheduleTime: optionalTsToDate(info.nextAttemptScheduleTime),\n    lastDeploymentVersion: convertDeploymentVersion(info.lastDeploymentVersion),\n    priority: decodePriority(info.priority),\n    canceledReason: info.canceledReason || undefined,\n\n    getHeartbeatDetails,\n    getLastFailure,\n  };\n}\n\n/**\n * Sub-interface of {@link ActivityClient} that provides a strongly-typed interface for executing Activities.\n * Argument types in the provided options must match the argument types of the specified Activity as defined in provided\n * interface\n * @template T Activity interface\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport interface TypedActivityClient<T> {\n  start<N extends ActivityName<T>>(\n    activity: N,\n    options: ActivityOptionsFor<T, N>\n  ): Promise<ActivityHandle<ActivityResult<T, N>>>;\n\n  execute<N extends ActivityName<T>>(activity: N, options: ActivityOptionsFor<T, N>): Promise<ActivityResult<T, N>>;\n}\n\n/**\n * Utility type to support strong typing in {@link TypedActivityClient}.\n * Contains names of activities extracted from the specified activity interface.\n * @template T Activity interface\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type ActivityName<T> = {\n  [N in keyof T & string]: T[N] extends ActivityFunction<any, any> ? N : never;\n}[keyof T & string];\n\n/**\n * Utility type to support strong typing in {@link TypedActivityClient}.\n * Extracts argument types of an activity.\n * @template T Activity interface\n * @template N Activity name\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type ActivityArgs<T, N extends ActivityName<T>> = T[N] extends ActivityFunction<infer P, any> ? P : never;\n\n/**\n * Utility type to support strong typing in {@link TypedActivityClient}.\n * Extracts result type of an activity.\n * @template T Activity interface\n * @template N Activity name\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type ActivityResult<T, N extends ActivityName<T>> = T[N] extends ActivityFunction<any, infer R> ? R : never;\n\n/**\n * Utility type to support strong typing in {@link TypedActivityClient}.\n * Represents {@link ActivityOptions} with strongly typed arguments.\n * @template Args Types of activity arguments as an array type.\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type ActivityOptionsWithArgs<Args extends any[]> = Args extends [any, ...any]\n  ? Replace<\n      ActivityOptions,\n      {\n        /**\n         * Arguments to pass to the Activity\n         */\n        args: Args | Readonly<Args>;\n      }\n    >\n  : Replace<\n      ActivityOptions,\n      {\n        /**\n         * Arguments to pass to the Activity\n         */\n        args?: Args | Readonly<Args>;\n      }\n    >;\n\n/**\n * Utility type to support strong typing in {@link TypedActivityClient}.\n * Represents {@link ActivityOptions} with strongly typed arguments matching specified Activity in specified interface.\n * @template T Activity interface\n * @template N Activity name\n *\n * @experimental Standalone Activities are experimental. APIs may be subject to change.\n */\nexport type ActivityOptionsFor<T, N extends ActivityName<T>> = ActivityOptionsWithArgs<ActivityArgs<T, N>>;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = 'ffffffff-ffff-ffff-ffff-ffffffffffff';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = '00000000-0000-0000-0000-000000000000';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst regex_js_1 = require(\"./regex.js\");\nfunction validate(uuid) {\n    return typeof uuid === 'string' && regex_js_1.default.test(uuid);\n}\nexports.default = validate;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst validate_js_1 = require(\"./validate.js\");\nfunction parse(uuid) {\n    if (!(0, validate_js_1.default)(uuid)) {\n        throw TypeError('Invalid UUID');\n    }\n    let v;\n    return Uint8Array.of((v = parseInt(uuid.slice(0, 8), 16)) >>> 24, (v >>> 16) & 0xff, (v >>> 8) & 0xff, v & 0xff, (v = parseInt(uuid.slice(9, 13), 16)) >>> 8, v & 0xff, (v = parseInt(uuid.slice(14, 18), 16)) >>> 8, v & 0xff, (v = parseInt(uuid.slice(19, 23), 16)) >>> 8, v & 0xff, ((v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000) & 0xff, (v / 0x100000000) & 0xff, (v >>> 24) & 0xff, (v >>> 16) & 0xff, (v >>> 8) & 0xff, v & 0xff);\n}\nexports.default = parse;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unsafeStringify = void 0;\nconst validate_js_1 = require(\"./validate.js\");\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n    byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nfunction unsafeStringify(arr, offset = 0) {\n    return (byteToHex[arr[offset + 0]] +\n        byteToHex[arr[offset + 1]] +\n        byteToHex[arr[offset + 2]] +\n        byteToHex[arr[offset + 3]] +\n        '-' +\n        byteToHex[arr[offset + 4]] +\n        byteToHex[arr[offset + 5]] +\n        '-' +\n        byteToHex[arr[offset + 6]] +\n        byteToHex[arr[offset + 7]] +\n        '-' +\n        byteToHex[arr[offset + 8]] +\n        byteToHex[arr[offset + 9]] +\n        '-' +\n        byteToHex[arr[offset + 10]] +\n        byteToHex[arr[offset + 11]] +\n        byteToHex[arr[offset + 12]] +\n        byteToHex[arr[offset + 13]] +\n        byteToHex[arr[offset + 14]] +\n        byteToHex[arr[offset + 15]]).toLowerCase();\n}\nexports.unsafeStringify = unsafeStringify;\nfunction stringify(arr, offset = 0) {\n    const uuid = unsafeStringify(arr, offset);\n    if (!(0, validate_js_1.default)(uuid)) {\n        throw TypeError('Stringified UUID is invalid');\n    }\n    return uuid;\n}\nexports.default = stringify;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst rnds8Pool = new Uint8Array(256);\nlet poolPtr = rnds8Pool.length;\nfunction rng() {\n    if (poolPtr > rnds8Pool.length - 16) {\n        (0, crypto_1.randomFillSync)(rnds8Pool);\n        poolPtr = 0;\n    }\n    return rnds8Pool.slice(poolPtr, (poolPtr += 16));\n}\nexports.default = rng;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.updateV1State = void 0;\nconst rng_js_1 = require(\"./rng.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nconst _state = {};\nfunction v1(options, buf, offset) {\n    let bytes;\n    const isV6 = options?._v6 ?? false;\n    if (options) {\n        const optionsKeys = Object.keys(options);\n        if (optionsKeys.length === 1 && optionsKeys[0] === '_v6') {\n            options = undefined;\n        }\n    }\n    if (options) {\n        bytes = v1Bytes(options.random ?? options.rng?.() ?? (0, rng_js_1.default)(), options.msecs, options.nsecs, options.clockseq, options.node, buf, offset);\n    }\n    else {\n        const now = Date.now();\n        const rnds = (0, rng_js_1.default)();\n        updateV1State(_state, now, rnds);\n        bytes = v1Bytes(rnds, _state.msecs, _state.nsecs, isV6 ? undefined : _state.clockseq, isV6 ? undefined : _state.node, buf, offset);\n    }\n    return buf ?? (0, stringify_js_1.unsafeStringify)(bytes);\n}\nfunction updateV1State(state, now, rnds) {\n    state.msecs ??= -Infinity;\n    state.nsecs ??= 0;\n    if (now === state.msecs) {\n        state.nsecs++;\n        if (state.nsecs >= 10000) {\n            state.node = undefined;\n            state.nsecs = 0;\n        }\n    }\n    else if (now > state.msecs) {\n        state.nsecs = 0;\n    }\n    else if (now < state.msecs) {\n        state.node = undefined;\n    }\n    if (!state.node) {\n        state.node = rnds.slice(10, 16);\n        state.node[0] |= 0x01;\n        state.clockseq = ((rnds[8] << 8) | rnds[9]) & 0x3fff;\n    }\n    state.msecs = now;\n    return state;\n}\nexports.updateV1State = updateV1State;\nfunction v1Bytes(rnds, msecs, nsecs, clockseq, node, buf, offset = 0) {\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    if (!buf) {\n        buf = new Uint8Array(16);\n        offset = 0;\n    }\n    else {\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n    }\n    msecs ??= Date.now();\n    nsecs ??= 0;\n    clockseq ??= ((rnds[8] << 8) | rnds[9]) & 0x3fff;\n    node ??= rnds.slice(10, 16);\n    msecs += 12219292800000;\n    const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n    buf[offset++] = (tl >>> 24) & 0xff;\n    buf[offset++] = (tl >>> 16) & 0xff;\n    buf[offset++] = (tl >>> 8) & 0xff;\n    buf[offset++] = tl & 0xff;\n    const tmh = ((msecs / 0x100000000) * 10000) & 0xfffffff;\n    buf[offset++] = (tmh >>> 8) & 0xff;\n    buf[offset++] = tmh & 0xff;\n    buf[offset++] = ((tmh >>> 24) & 0xf) | 0x10;\n    buf[offset++] = (tmh >>> 16) & 0xff;\n    buf[offset++] = (clockseq >>> 8) | 0x80;\n    buf[offset++] = clockseq & 0xff;\n    for (let n = 0; n < 6; ++n) {\n        buf[offset++] = node[n];\n    }\n    return buf;\n}\nexports.default = v1;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst parse_js_1 = require(\"./parse.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nfunction v1ToV6(uuid) {\n    const v1Bytes = typeof uuid === 'string' ? (0, parse_js_1.default)(uuid) : uuid;\n    const v6Bytes = _v1ToV6(v1Bytes);\n    return typeof uuid === 'string' ? (0, stringify_js_1.unsafeStringify)(v6Bytes) : v6Bytes;\n}\nexports.default = v1ToV6;\nfunction _v1ToV6(v1Bytes) {\n    return Uint8Array.of(((v1Bytes[6] & 0x0f) << 4) | ((v1Bytes[7] >> 4) & 0x0f), ((v1Bytes[7] & 0x0f) << 4) | ((v1Bytes[4] & 0xf0) >> 4), ((v1Bytes[4] & 0x0f) << 4) | ((v1Bytes[5] & 0xf0) >> 4), ((v1Bytes[5] & 0x0f) << 4) | ((v1Bytes[0] & 0xf0) >> 4), ((v1Bytes[0] & 0x0f) << 4) | ((v1Bytes[1] & 0xf0) >> 4), ((v1Bytes[1] & 0x0f) << 4) | ((v1Bytes[2] & 0xf0) >> 4), 0x60 | (v1Bytes[2] & 0x0f), v1Bytes[3], v1Bytes[8], v1Bytes[9], v1Bytes[10], v1Bytes[11], v1Bytes[12], v1Bytes[13], v1Bytes[14], v1Bytes[15]);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nfunction md5(bytes) {\n    if (Array.isArray(bytes)) {\n        bytes = Buffer.from(bytes);\n    }\n    else if (typeof bytes === 'string') {\n        bytes = Buffer.from(bytes, 'utf8');\n    }\n    return (0, crypto_1.createHash)('md5').update(bytes).digest();\n}\nexports.default = md5;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.URL = exports.DNS = exports.stringToBytes = void 0;\nconst parse_js_1 = require(\"./parse.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nfunction stringToBytes(str) {\n    str = unescape(encodeURIComponent(str));\n    const bytes = new Uint8Array(str.length);\n    for (let i = 0; i < str.length; ++i) {\n        bytes[i] = str.charCodeAt(i);\n    }\n    return bytes;\n}\nexports.stringToBytes = stringToBytes;\nexports.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexports.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nfunction v35(version, hash, value, namespace, buf, offset) {\n    const valueBytes = typeof value === 'string' ? stringToBytes(value) : value;\n    const namespaceBytes = typeof namespace === 'string' ? (0, parse_js_1.default)(namespace) : namespace;\n    if (typeof namespace === 'string') {\n        namespace = (0, parse_js_1.default)(namespace);\n    }\n    if (namespace?.length !== 16) {\n        throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n    }\n    let bytes = new Uint8Array(16 + valueBytes.length);\n    bytes.set(namespaceBytes);\n    bytes.set(valueBytes, namespaceBytes.length);\n    bytes = hash(bytes);\n    bytes[6] = (bytes[6] & 0x0f) | version;\n    bytes[8] = (bytes[8] & 0x3f) | 0x80;\n    if (buf) {\n        offset = offset || 0;\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n        for (let i = 0; i < 16; ++i) {\n            buf[offset + i] = bytes[i];\n        }\n        return buf;\n    }\n    return (0, stringify_js_1.unsafeStringify)(bytes);\n}\nexports.default = v35;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.URL = exports.DNS = void 0;\nconst md5_js_1 = require(\"./md5.js\");\nconst v35_js_1 = require(\"./v35.js\");\nvar v35_js_2 = require(\"./v35.js\");\nObject.defineProperty(exports, \"DNS\", { enumerable: true, get: function () { return v35_js_2.DNS; } });\nObject.defineProperty(exports, \"URL\", { enumerable: true, get: function () { return v35_js_2.URL; } });\nfunction v3(value, namespace, buf, offset) {\n    return (0, v35_js_1.default)(0x30, md5_js_1.default, value, namespace, buf, offset);\n}\nv3.DNS = v35_js_1.DNS;\nv3.URL = v35_js_1.URL;\nexports.default = v3;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nexports.default = { randomUUID: crypto_1.randomUUID };\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst native_js_1 = require(\"./native.js\");\nconst rng_js_1 = require(\"./rng.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nfunction v4(options, buf, offset) {\n    if (native_js_1.default.randomUUID && !buf && !options) {\n        return native_js_1.default.randomUUID();\n    }\n    options = options || {};\n    const rnds = options.random ?? options.rng?.() ?? (0, rng_js_1.default)();\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    rnds[6] = (rnds[6] & 0x0f) | 0x40;\n    rnds[8] = (rnds[8] & 0x3f) | 0x80;\n    if (buf) {\n        offset = offset || 0;\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n        for (let i = 0; i < 16; ++i) {\n            buf[offset + i] = rnds[i];\n        }\n        return buf;\n    }\n    return (0, stringify_js_1.unsafeStringify)(rnds);\n}\nexports.default = v4;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nfunction sha1(bytes) {\n    if (Array.isArray(bytes)) {\n        bytes = Buffer.from(bytes);\n    }\n    else if (typeof bytes === 'string') {\n        bytes = Buffer.from(bytes, 'utf8');\n    }\n    return (0, crypto_1.createHash)('sha1').update(bytes).digest();\n}\nexports.default = sha1;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.URL = exports.DNS = void 0;\nconst sha1_js_1 = require(\"./sha1.js\");\nconst v35_js_1 = require(\"./v35.js\");\nvar v35_js_2 = require(\"./v35.js\");\nObject.defineProperty(exports, \"DNS\", { enumerable: true, get: function () { return v35_js_2.DNS; } });\nObject.defineProperty(exports, \"URL\", { enumerable: true, get: function () { return v35_js_2.URL; } });\nfunction v5(value, namespace, buf, offset) {\n    return (0, v35_js_1.default)(0x50, sha1_js_1.default, value, namespace, buf, offset);\n}\nv5.DNS = v35_js_1.DNS;\nv5.URL = v35_js_1.URL;\nexports.default = v5;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stringify_js_1 = require(\"./stringify.js\");\nconst v1_js_1 = require(\"./v1.js\");\nconst v1ToV6_js_1 = require(\"./v1ToV6.js\");\nfunction v6(options, buf, offset) {\n    options ??= {};\n    offset ??= 0;\n    let bytes = (0, v1_js_1.default)({ ...options, _v6: true }, new Uint8Array(16));\n    bytes = (0, v1ToV6_js_1.default)(bytes);\n    if (buf) {\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n        for (let i = 0; i < 16; i++) {\n            buf[offset + i] = bytes[i];\n        }\n        return buf;\n    }\n    return (0, stringify_js_1.unsafeStringify)(bytes);\n}\nexports.default = v6;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst parse_js_1 = require(\"./parse.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nfunction v6ToV1(uuid) {\n    const v6Bytes = typeof uuid === 'string' ? (0, parse_js_1.default)(uuid) : uuid;\n    const v1Bytes = _v6ToV1(v6Bytes);\n    return typeof uuid === 'string' ? (0, stringify_js_1.unsafeStringify)(v1Bytes) : v1Bytes;\n}\nexports.default = v6ToV1;\nfunction _v6ToV1(v6Bytes) {\n    return Uint8Array.of(((v6Bytes[3] & 0x0f) << 4) | ((v6Bytes[4] >> 4) & 0x0f), ((v6Bytes[4] & 0x0f) << 4) | ((v6Bytes[5] & 0xf0) >> 4), ((v6Bytes[5] & 0x0f) << 4) | (v6Bytes[6] & 0x0f), v6Bytes[7], ((v6Bytes[1] & 0x0f) << 4) | ((v6Bytes[2] & 0xf0) >> 4), ((v6Bytes[2] & 0x0f) << 4) | ((v6Bytes[3] & 0xf0) >> 4), 0x10 | ((v6Bytes[0] & 0xf0) >> 4), ((v6Bytes[0] & 0x0f) << 4) | ((v6Bytes[1] & 0xf0) >> 4), v6Bytes[8], v6Bytes[9], v6Bytes[10], v6Bytes[11], v6Bytes[12], v6Bytes[13], v6Bytes[14], v6Bytes[15]);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.updateV7State = void 0;\nconst rng_js_1 = require(\"./rng.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nconst _state = {};\nfunction v7(options, buf, offset) {\n    let bytes;\n    if (options) {\n        bytes = v7Bytes(options.random ?? options.rng?.() ?? (0, rng_js_1.default)(), options.msecs, options.seq, buf, offset);\n    }\n    else {\n        const now = Date.now();\n        const rnds = (0, rng_js_1.default)();\n        updateV7State(_state, now, rnds);\n        bytes = v7Bytes(rnds, _state.msecs, _state.seq, buf, offset);\n    }\n    return buf ?? (0, stringify_js_1.unsafeStringify)(bytes);\n}\nfunction updateV7State(state, now, rnds) {\n    state.msecs ??= -Infinity;\n    state.seq ??= 0;\n    if (now > state.msecs) {\n        state.seq = (rnds[6] << 23) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9];\n        state.msecs = now;\n    }\n    else {\n        state.seq = (state.seq + 1) | 0;\n        if (state.seq === 0) {\n            state.msecs++;\n        }\n    }\n    return state;\n}\nexports.updateV7State = updateV7State;\nfunction v7Bytes(rnds, msecs, seq, buf, offset = 0) {\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    if (!buf) {\n        buf = new Uint8Array(16);\n        offset = 0;\n    }\n    else {\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n    }\n    msecs ??= Date.now();\n    seq ??= ((rnds[6] * 0x7f) << 24) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9];\n    buf[offset++] = (msecs / 0x10000000000) & 0xff;\n    buf[offset++] = (msecs / 0x100000000) & 0xff;\n    buf[offset++] = (msecs / 0x1000000) & 0xff;\n    buf[offset++] = (msecs / 0x10000) & 0xff;\n    buf[offset++] = (msecs / 0x100) & 0xff;\n    buf[offset++] = msecs & 0xff;\n    buf[offset++] = 0x70 | ((seq >>> 28) & 0x0f);\n    buf[offset++] = (seq >>> 20) & 0xff;\n    buf[offset++] = 0x80 | ((seq >>> 14) & 0x3f);\n    buf[offset++] = (seq >>> 6) & 0xff;\n    buf[offset++] = ((seq << 2) & 0xff) | (rnds[10] & 0x03);\n    buf[offset++] = rnds[11];\n    buf[offset++] = rnds[12];\n    buf[offset++] = rnds[13];\n    buf[offset++] = rnds[14];\n    buf[offset++] = rnds[15];\n    return buf;\n}\nexports.default = v7;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst validate_js_1 = require(\"./validate.js\");\nfunction version(uuid) {\n    if (!(0, validate_js_1.default)(uuid)) {\n        throw TypeError('Invalid UUID');\n    }\n    return parseInt(uuid.slice(14, 15), 16);\n}\nexports.default = version;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.version = exports.validate = exports.v7 = exports.v6ToV1 = exports.v6 = exports.v5 = exports.v4 = exports.v3 = exports.v1ToV6 = exports.v1 = exports.stringify = exports.parse = exports.NIL = exports.MAX = void 0;\nvar max_js_1 = require(\"./max.js\");\nObject.defineProperty(exports, \"MAX\", { enumerable: true, get: function () { return max_js_1.default; } });\nvar nil_js_1 = require(\"./nil.js\");\nObject.defineProperty(exports, \"NIL\", { enumerable: true, get: function () { return nil_js_1.default; } });\nvar parse_js_1 = require(\"./parse.js\");\nObject.defineProperty(exports, \"parse\", { enumerable: true, get: function () { return parse_js_1.default; } });\nvar stringify_js_1 = require(\"./stringify.js\");\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return stringify_js_1.default; } });\nvar v1_js_1 = require(\"./v1.js\");\nObject.defineProperty(exports, \"v1\", { enumerable: true, get: function () { return v1_js_1.default; } });\nvar v1ToV6_js_1 = require(\"./v1ToV6.js\");\nObject.defineProperty(exports, \"v1ToV6\", { enumerable: true, get: function () { return v1ToV6_js_1.default; } });\nvar v3_js_1 = require(\"./v3.js\");\nObject.defineProperty(exports, \"v3\", { enumerable: true, get: function () { return v3_js_1.default; } });\nvar v4_js_1 = require(\"./v4.js\");\nObject.defineProperty(exports, \"v4\", { enumerable: true, get: function () { return v4_js_1.default; } });\nvar v5_js_1 = require(\"./v5.js\");\nObject.defineProperty(exports, \"v5\", { enumerable: true, get: function () { return v5_js_1.default; } });\nvar v6_js_1 = require(\"./v6.js\");\nObject.defineProperty(exports, \"v6\", { enumerable: true, get: function () { return v6_js_1.default; } });\nvar v6ToV1_js_1 = require(\"./v6ToV1.js\");\nObject.defineProperty(exports, \"v6ToV1\", { enumerable: true, get: function () { return v6ToV1_js_1.default; } });\nvar v7_js_1 = require(\"./v7.js\");\nObject.defineProperty(exports, \"v7\", { enumerable: true, get: function () { return v7_js_1.default; } });\nvar validate_js_1 = require(\"./validate.js\");\nObject.defineProperty(exports, \"validate\", { enumerable: true, get: function () { return validate_js_1.default; } });\nvar version_js_1 = require(\"./version.js\");\nObject.defineProperty(exports, \"version\", { enumerable: true, get: function () { return version_js_1.default; } });\n","import type { Duration, SearchAttributePair, SearchAttributeType, TypedSearchAttributes } from '@temporalio/common';\nimport type { TypedSearchAttributeValue } from '@temporalio/common/lib/search-attributes';\nimport { makeProtoEnumConverters } from '@temporalio/common/lib/internal-workflow';\nimport type { temporal } from '@temporalio/proto';\nimport type { Replace } from '@temporalio/common/lib/type-helpers';\n\n/**\n * Defines whether to allow re-using an operation ID from a previously *completed* Nexus operation.\n *\n * See {@link NexusOperationIdConflictPolicy} for handling ID duplication with a *running* operation.\n */\nexport const NexusOperationIdReusePolicy = {\n  ALLOW_DUPLICATE: 'ALLOW_DUPLICATE',\n  ALLOW_DUPLICATE_FAILED_ONLY: 'ALLOW_DUPLICATE_FAILED_ONLY',\n  REJECT_DUPLICATE: 'REJECT_DUPLICATE',\n} as const;\nexport type NexusOperationIdReusePolicy =\n  (typeof NexusOperationIdReusePolicy)[keyof typeof NexusOperationIdReusePolicy];\n\nexport const [encodeNexusOperationIdReusePolicy, decodeNexusOperationIdReusePolicy] = makeProtoEnumConverters<\n  temporal.api.enums.v1.NexusOperationIdReusePolicy,\n  typeof temporal.api.enums.v1.NexusOperationIdReusePolicy,\n  keyof typeof temporal.api.enums.v1.NexusOperationIdReusePolicy,\n  typeof NexusOperationIdReusePolicy,\n  'NEXUS_OPERATION_ID_REUSE_POLICY_'\n>(\n  {\n    [NexusOperationIdReusePolicy.ALLOW_DUPLICATE]: 1,\n    [NexusOperationIdReusePolicy.ALLOW_DUPLICATE_FAILED_ONLY]: 2,\n    [NexusOperationIdReusePolicy.REJECT_DUPLICATE]: 3,\n    UNSPECIFIED: 0,\n  } as const,\n  'NEXUS_OPERATION_ID_REUSE_POLICY_'\n);\n\n/**\n * Defines how to resolve an operation ID conflict with a *running* Nexus operation.\n *\n * See {@link NexusOperationIdReusePolicy} for handling operation ID duplication with a *closed* operation.\n */\nexport const NexusOperationIdConflictPolicy = {\n  FAIL: 'FAIL',\n  USE_EXISTING: 'USE_EXISTING',\n} as const;\nexport type NexusOperationIdConflictPolicy =\n  (typeof NexusOperationIdConflictPolicy)[keyof typeof NexusOperationIdConflictPolicy];\n\nexport const [encodeNexusOperationIdConflictPolicy, decodeNexusOperationIdConflictPolicy] = makeProtoEnumConverters<\n  temporal.api.enums.v1.NexusOperationIdConflictPolicy,\n  typeof temporal.api.enums.v1.NexusOperationIdConflictPolicy,\n  keyof typeof temporal.api.enums.v1.NexusOperationIdConflictPolicy,\n  typeof NexusOperationIdConflictPolicy,\n  'NEXUS_OPERATION_ID_CONFLICT_POLICY_'\n>(\n  {\n    [NexusOperationIdConflictPolicy.FAIL]: 1,\n    [NexusOperationIdConflictPolicy.USE_EXISTING]: 2,\n    UNSPECIFIED: 0,\n  } as const,\n  'NEXUS_OPERATION_ID_CONFLICT_POLICY_'\n);\n\n/**\n * A general status for a Nexus operation, indicating whether it is currently running or in a terminal state.\n */\nexport const NexusOperationExecutionStatus = {\n  RUNNING: 'RUNNING',\n  COMPLETED: 'COMPLETED',\n  FAILED: 'FAILED',\n  CANCELED: 'CANCELED',\n  TERMINATED: 'TERMINATED',\n  TIMED_OUT: 'TIMED_OUT',\n} as const;\nexport type NexusOperationExecutionStatus =\n  (typeof NexusOperationExecutionStatus)[keyof typeof NexusOperationExecutionStatus];\n\nexport const [encodeNexusOperationExecutionStatus, decodeNexusOperationExecutionStatus] = makeProtoEnumConverters<\n  temporal.api.enums.v1.NexusOperationExecutionStatus,\n  typeof temporal.api.enums.v1.NexusOperationExecutionStatus,\n  keyof typeof temporal.api.enums.v1.NexusOperationExecutionStatus,\n  typeof NexusOperationExecutionStatus,\n  'NEXUS_OPERATION_EXECUTION_STATUS_'\n>(\n  {\n    [NexusOperationExecutionStatus.RUNNING]: 1,\n    [NexusOperationExecutionStatus.COMPLETED]: 2,\n    [NexusOperationExecutionStatus.FAILED]: 3,\n    [NexusOperationExecutionStatus.CANCELED]: 4,\n    [NexusOperationExecutionStatus.TERMINATED]: 5,\n    [NexusOperationExecutionStatus.TIMED_OUT]: 6,\n    UNSPECIFIED: 0,\n  } as const,\n  'NEXUS_OPERATION_EXECUTION_STATUS_'\n);\n\n/**\n * A more detailed breakdown of {@link NexusOperationExecutionStatus.RUNNING}.\n */\nexport const PendingNexusOperationState = {\n  SCHEDULED: 'SCHEDULED',\n  BACKING_OFF: 'BACKING_OFF',\n  STARTED: 'STARTED',\n  BLOCKED: 'BLOCKED',\n} as const;\nexport type PendingNexusOperationState = (typeof PendingNexusOperationState)[keyof typeof PendingNexusOperationState];\n\nexport const [encodePendingNexusOperationState, decodePendingNexusOperationState] = makeProtoEnumConverters<\n  temporal.api.enums.v1.PendingNexusOperationState,\n  typeof temporal.api.enums.v1.PendingNexusOperationState,\n  keyof typeof temporal.api.enums.v1.PendingNexusOperationState,\n  typeof PendingNexusOperationState,\n  'PENDING_NEXUS_OPERATION_STATE_'\n>(\n  {\n    [PendingNexusOperationState.SCHEDULED]: 1,\n    [PendingNexusOperationState.BACKING_OFF]: 2,\n    [PendingNexusOperationState.STARTED]: 3,\n    [PendingNexusOperationState.BLOCKED]: 4,\n    UNSPECIFIED: 0,\n  } as const,\n  'PENDING_NEXUS_OPERATION_STATE_'\n);\n\n/**\n * State of a Nexus operation cancellation.\n */\nexport const NexusOperationCancellationState = {\n  SCHEDULED: 'SCHEDULED',\n  BACKING_OFF: 'BACKING_OFF',\n  SUCCEEDED: 'SUCCEEDED',\n  FAILED: 'FAILED',\n  TIMED_OUT: 'TIMED_OUT',\n  BLOCKED: 'BLOCKED',\n} as const;\nexport type NexusOperationCancellationState =\n  (typeof NexusOperationCancellationState)[keyof typeof NexusOperationCancellationState];\n\nexport const [encodeNexusOperationCancellationState, decodeNexusOperationCancellationState] = makeProtoEnumConverters<\n  temporal.api.enums.v1.NexusOperationCancellationState,\n  typeof temporal.api.enums.v1.NexusOperationCancellationState,\n  keyof typeof temporal.api.enums.v1.NexusOperationCancellationState,\n  typeof NexusOperationCancellationState,\n  'NEXUS_OPERATION_CANCELLATION_STATE_'\n>(\n  {\n    [NexusOperationCancellationState.SCHEDULED]: 1,\n    [NexusOperationCancellationState.BACKING_OFF]: 2,\n    [NexusOperationCancellationState.SUCCEEDED]: 3,\n    [NexusOperationCancellationState.FAILED]: 4,\n    [NexusOperationCancellationState.TIMED_OUT]: 5,\n    [NexusOperationCancellationState.BLOCKED]: 6,\n    UNSPECIFIED: 0,\n  } as const,\n  'NEXUS_OPERATION_CANCELLATION_STATE_'\n);\n\nexport type RawNexusOperationExecutionInfo = temporal.api.nexus.v1.INexusOperationExecutionInfo;\nexport type RawNexusOperationExecutionListInfo = temporal.api.nexus.v1.INexusOperationExecutionListInfo;\nexport type RawNexusOperationExecutionCancellationInfo = temporal.api.nexus.v1.INexusOperationExecutionCancellationInfo;\n\n/**\n * Cancellation state for a standalone Nexus operation.\n */\nexport interface NexusOperationExecutionCancellationInfo {\n  /**\n   * The time when cancellation was requested.\n   */\n  readonly requestedTime: Date | undefined;\n\n  /**\n   * The current state of the cancellation request.\n   */\n  readonly state: NexusOperationCancellationState | undefined;\n\n  /**\n   * The number of attempts made to deliver the cancel operation request.\n   */\n  readonly attempt: number;\n\n  /**\n   * The time when the last attempt completed.\n   */\n  readonly lastAttemptCompleteTime: Date | undefined;\n\n  /**\n   * The time when the next attempt is scheduled.\n   */\n  readonly nextAttemptScheduleTime: Date | undefined;\n\n  /**\n   * The last attempt's failure, if any.\n   */\n  readonly lastAttemptFailure: Error | undefined;\n\n  /**\n   * Blocked reason provides additional information if the cancellation state is {@link NexusOperationCancellationState.BLOCKED}.\n   */\n  readonly blockedReason: string | undefined;\n\n  /**\n   * The reason specified in the cancellation request.\n   */\n  readonly reason: string;\n\n  /**\n   * Underlying protobuf cancellation info.\n   */\n  readonly raw: RawNexusOperationExecutionCancellationInfo;\n}\n\n/**\n * Info for a standalone Nexus operation execution, from list response.\n */\nexport interface NexusOperationExecution {\n  /**\n   * Unique identifier of this operation.\n   */\n  readonly operationId: string;\n\n  /**\n   * The run ID of the standalone Nexus operation.\n   */\n  readonly runId: string;\n\n  /**\n   * Endpoint name.\n   */\n  readonly endpoint: string;\n\n  /**\n   * Service name.\n   */\n  readonly service: string;\n\n  /**\n   * Operation name.\n   */\n  readonly operation: string;\n\n  /**\n   * The time the operation was originally scheduled.\n   */\n  readonly scheduleTime: Date | undefined;\n\n  /**\n   * Time the operation reached a terminal status, if closed.\n   */\n  readonly closeTime: Date | undefined;\n\n  /**\n   * Current status of the operation.\n   */\n  readonly status: NexusOperationExecutionStatus | undefined;\n\n  /**\n   * Current set of search attributes if any.\n   */\n  readonly searchAttributes: TypedSearchAttributes;\n\n  /**\n   * Number of state transitions.\n   */\n  readonly stateTransitionCount: number;\n\n  /**\n   * Duration from scheduled to close time, only populated if closed.\n   */\n  readonly executionDuration: number | undefined;\n\n  /**\n   * Underlying protobuf info.\n   */\n  readonly raw: RawNexusOperationExecutionListInfo;\n}\n\n/**\n * Detailed information about a standalone Nexus operation execution.\n */\nexport type NexusOperationExecutionDescription = Replace<\n  NexusOperationExecution,\n  {\n    raw: temporal.api.nexus.v1.INexusOperationExecutionInfo;\n  }\n> & {\n  /**\n   * More detailed breakdown if status is {@link NexusOperationExecutionStatus.RUNNING}.\n   */\n  readonly state: PendingNexusOperationState | undefined;\n\n  /**\n   * Schedule-to-close timeout for this operation in milliseconds.\n   */\n  readonly scheduleToCloseTimeout: number | undefined;\n\n  /**\n   * Schedule-to-start timeout for this operation in milliseconds.\n   */\n  readonly scheduleToStartTimeout: number | undefined;\n\n  /**\n   * Start-to-close timeout for this operation in milliseconds.\n   */\n  readonly startToCloseTimeout: number | undefined;\n\n  /**\n   * Current attempt number.\n   */\n  readonly attempt: number;\n\n  /**\n   * Scheduled time plus schedule_to_close_timeout.\n   */\n  readonly expirationTime: Date | undefined;\n\n  /**\n   * Time when the last attempt completed.\n   */\n  readonly lastAttemptCompleteTime: Date | undefined;\n\n  /**\n   * Time when the next attempt will be scheduled.\n   */\n  readonly nextAttemptScheduleTime: Date | undefined;\n\n  /**\n   * Failure from the last failed attempt, if any.\n   */\n  readonly lastAttemptFailure: Error | undefined;\n\n  /**\n   * Reason the operation is blocked, if any.\n   */\n  readonly blockedReason: string | undefined;\n\n  /**\n   * Server-generated request ID used as an idempotency token.\n   */\n  readonly requestId: string;\n\n  /**\n   * operationToken is only set for asynchronous operations after a successful start_operation call.\n   */\n  readonly operationToken: string | undefined;\n\n  /**\n   * Identity of the client that started this operation.\n   */\n  readonly identity: string;\n\n  /**\n   * Cancellation info if cancellation was requested.\n   */\n  readonly cancellationInfo: NexusOperationExecutionCancellationInfo | undefined;\n\n  staticSummary: () => Promise<string | undefined>;\n  staticDetails: () => Promise<string | undefined>;\n};\n\n/**\n * Count of standalone Nexus operation executions, optionally grouped by a search attribute.\n */\nexport interface NexusOperationExecutionCount {\n  readonly count: number;\n  readonly groups: readonly NexusOperationExecutionCountGroup[];\n}\n\n/**\n * A group within a count aggregation.\n */\nexport interface NexusOperationExecutionCountGroup {\n  readonly count: number;\n  readonly groupValues: readonly TypedSearchAttributeValue<SearchAttributeType>[];\n}\n\n/**\n * Options for starting a standalone Nexus operation via\n * {@link NexusServiceClient.startOperation} or {@link NexusServiceClient.executeOperation}.\n */\nexport interface StartNexusOperationOptions {\n  /**\n   * Caller-side identifier for this operation. Must be unique among operations in the\n   * same namespace, subject to {@link idReusePolicy} and {@link idConflictPolicy}.\n   */\n  id: string;\n\n  /**\n   * Schedule-to-close timeout for this operation.\n   */\n  scheduleToCloseTimeout?: Duration;\n\n  /**\n   * Schedule-to-start timeout for this operation.\n   */\n  scheduleToStartTimeout?: Duration;\n\n  /**\n   * Start-to-close timeout for this operation.\n   */\n  startToCloseTimeout?: Duration;\n\n  /**\n   * Single-line Temporal-markdown summary used by user interfaces to display operation metadata.\n   */\n  summary?: string;\n\n  /**\n   * How to handle an operation ID that was used by a previously closed operation.\n   * @default {@link NexusOperationIdReusePolicy.ALLOW_DUPLICATE}\n   */\n  idReusePolicy?: NexusOperationIdReusePolicy;\n\n  /**\n   * How to handle an operation ID that is in use by a currently running operation.\n   * @default {@link NexusOperationIdConflictPolicy.FAIL}\n   */\n  idConflictPolicy?: NexusOperationIdConflictPolicy;\n\n  /**\n   * Search attributes for indexing.\n   */\n  searchAttributes?: SearchAttributePair[] | TypedSearchAttributes;\n\n  /**\n   * Headers to attach to the Nexus request. Transmitted to the handler as-is.\n   * Useful for propagating tracing information.\n   */\n  headers?: Record<string, string>;\n}\n\n/**\n * Options for {@link NexusClient.list}.\n */\nexport interface ListNexusOperationsOptions {\n  /**\n   * Visibility list filter query. See https://docs.temporal.io/list-filter for syntax.\n   */\n  query?: string;\n\n  /**\n   * Maximum number of operations to return per page.\n   */\n  pageSize?: number;\n}\n\n/**\n * Options for {@link NexusClient.getHandle}.\n */\nexport interface GetNexusOperationHandleOptions {\n  /**\n   * If provided, targets this specific run of the operation. If absent, targets the latest run.\n   */\n  runId?: string;\n}\n\n/**\n * Options for {@link NexusOperationHandle.describe}\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface DescribeNexusOperationOptions {}\n","import { status as grpcStatus } from '@grpc/grpc-js';\nimport type * as nexus from 'nexus-rpc';\nimport { v4 as uuid4 } from 'uuid';\nimport { composeInterceptors } from '@temporalio/common/lib/interceptors';\nimport { SymbolBasedInstanceOfError } from '@temporalio/common/lib/type-helpers';\nimport {\n  decodeTypedSearchAttributes,\n  encodeUnifiedSearchAttributes,\n  typedSearchAttributePayloadConverter,\n} from '@temporalio/common/lib/converter/payload-search-attributes';\nimport {\n  decodeFromPayloadsAtIndex,\n  decodeOptionalFailureToOptionalError,\n  decodeOptionalSinglePayload,\n  encodeToPayload,\n} from '@temporalio/common/lib/internal-non-workflow';\nimport { filterNullAndUndefined } from '@temporalio/common/lib/internal-workflow';\nimport { msOptionalToTs, optionalTsToDate, optionalTsToMs } from '@temporalio/common/lib/time';\nimport { temporal } from '@temporalio/proto';\nimport type { LoadedDataConverter } from '@temporalio/common';\nimport type { SearchAttributeType, TypedSearchAttributeValue } from '@temporalio/common/lib/search-attributes';\nimport { decode } from '@temporalio/common/lib/encoding';\nimport type { BaseClientOptions, LoadedWithDefaults, WithDefaults } from './base-client';\nimport { BaseClient, defaultBaseClientOptions } from './base-client';\nimport { isGrpcServiceError, ServiceError } from './errors';\nimport { rethrowKnownErrorTypes, extractNexusOperationAlreadyStartedRunId } from './helpers';\nimport type {\n  CancelNexusOperationInput,\n  CountNexusOperationsInput,\n  DescribeNexusOperationInput,\n  GetNexusOperationResultInput,\n  ListNexusOperationsInput,\n  NexusClientInterceptor,\n  StartNexusOperationInput,\n  TerminateNexusOperationInput,\n} from './interceptors';\nimport {\n  decodeNexusOperationCancellationState,\n  decodeNexusOperationExecutionStatus,\n  decodePendingNexusOperationState,\n  encodeNexusOperationIdConflictPolicy,\n  encodeNexusOperationIdReusePolicy,\n} from './nexus-types';\nimport type {\n  DescribeNexusOperationOptions,\n  GetNexusOperationHandleOptions,\n  ListNexusOperationsOptions,\n  NexusOperationExecutionCancellationInfo,\n  NexusOperationExecutionCount,\n  NexusOperationExecutionDescription,\n  NexusOperationExecution,\n  RawNexusOperationExecutionCancellationInfo,\n  RawNexusOperationExecutionInfo,\n  RawNexusOperationExecutionListInfo,\n  StartNexusOperationOptions,\n} from './nexus-types';\n\nexport interface NexusClientOptions extends BaseClientOptions {\n  /**\n   * Used to override and extend default client behavior.\n   */\n  interceptors?: NexusClientInterceptor[];\n}\n\nexport type LoadedNexusClientOptions = LoadedWithDefaults<NexusClientOptions>;\n\nfunction defaultNexusClientOptions(): WithDefaults<NexusClientOptions> {\n  return {\n    ...defaultBaseClientOptions(),\n    interceptors: [],\n  };\n}\n\n/**\n * Handle to a standalone Nexus operation execution.\n *\n * Use this to poll for results, describe, cancel, or terminate the operation.\n *\n * @experimental Nexus Standalone Operations are experimental.\n */\nexport interface NexusOperationHandle<O = unknown> {\n  readonly operationId: string;\n  readonly runId?: string;\n  readonly client: NexusClient;\n\n  /**\n   * Wait for the operation to complete and return its result.\n   *\n   * @throws {@link NexusOperationFailureError} if the operation completes with a failure outcome.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  result(): Promise<O>;\n\n  /**\n   * Describe the Nexus operation execution.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  describe(options?: DescribeNexusOperationOptions): Promise<NexusOperationExecutionDescription>;\n\n  /**\n   * Request cancellation of the operation.\n   *\n   * @param reason optional reason for the cancellation.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  cancel(reason?: string): Promise<void>;\n\n  /**\n   * Terminate the Nexus operation execution immediately.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  terminate(reason?: string): Promise<void>;\n}\n\n/**\n * Resolves the result type carried by a Nexus operation handle type hint.\n *\n * A NexusOperationHandle cannot infer a result type from an operation ID alone,\n * so callers may provide either the expected result type directly or a\n * Nexus operation definition type when acquiring a handle.\n * Operation definitions are unwrapped to their output type, all other types are\n * treated as the result type itself.\n */\ntype NexusOperationHandleResult<T> = T extends nexus.OperationDefinition<any, infer O> ? O : T;\n\n/**\n * Typed service client for a specific Nexus service + endpoint pair.\n *\n * Created via {@link NexusClient.createServiceClient}. Provides type-safe\n * {@link startOperation} and {@link executeOperation} based on the service definition's operation types.\n *\n * @experimental Nexus Standalone Operations are experimental.\n */\nexport interface NexusServiceClient<T extends nexus.ServiceDefinition> {\n  readonly endpoint: string;\n  readonly service: T;\n\n  /**\n   * Start a Nexus operation and return a handle.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  startOperation<Op extends T['operations'][keyof T['operations']]>(\n    operation: Op,\n    input: nexus.OperationInput<Op>,\n    options: StartNexusOperationOptions\n  ): Promise<NexusOperationHandle<nexus.OperationOutput<Op>>>;\n  startOperation<K extends nexus.OperationKey<T['operations']>>(\n    op: K,\n    input: nexus.OperationInput<T['operations'][K]>,\n    options: StartNexusOperationOptions\n  ): Promise<NexusOperationHandle<nexus.OperationOutput<T['operations'][K]>>>;\n\n  /**\n   * Start a Nexus operation and wait for its result.\n   *\n   * Convenience for {@link startOperation} followed by {@link NexusOperationHandle.result}.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  executeOperation<Op extends T['operations'][keyof T['operations']]>(\n    operation: Op,\n    input: nexus.OperationInput<Op>,\n    options: StartNexusOperationOptions\n  ): Promise<nexus.OperationOutput<Op>>;\n\n  executeOperation<K extends nexus.OperationKey<T['operations']>>(\n    op: K,\n    input: nexus.OperationInput<T['operations'][K]>,\n    options: StartNexusOperationOptions\n  ): Promise<nexus.OperationOutput<T['operations'][K]>>;\n}\n\n/**\n * Client for standalone Nexus operations. Access via {@link Client.nexus}.\n *\n * Use {@link createServiceClient} to get a typed service client, or call the namespace-wide\n * {@link list}, {@link count}, and {@link getHandle} methods directly.\n *\n * @see {@link Client}\n *\n * @experimental Nexus Standalone Operations are experimental.\n */\nexport class NexusClient extends BaseClient {\n  public readonly options: LoadedNexusClientOptions;\n  protected readonly interceptors: NexusClientInterceptor[];\n\n  constructor(options?: NexusClientOptions) {\n    super(options);\n    this.options = {\n      ...defaultNexusClientOptions(),\n      ...filterNullAndUndefined(options ?? {}),\n      loadedDataConverter: this.dataConverter,\n    };\n    this.interceptors = this.options.interceptors;\n  }\n\n  /**\n   * Create a typed service client for starting and executing Nexus operations on a specific endpoint + service.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  public createServiceClient<T extends nexus.ServiceDefinition>(options: {\n    endpoint: string;\n    service: T;\n  }): NexusServiceClient<T> {\n    const { endpoint, service } = options;\n\n    type OperationReference<T extends nexus.ServiceDefinition> =\n      | nexus.OperationKey<T['operations']>\n      | T['operations'][nexus.OperationKey<T['operations']>];\n\n    type OperationInput<\n      T extends nexus.ServiceDefinition,\n      Op extends OperationReference<T>,\n    > = Op extends nexus.OperationKey<T['operations']>\n      ? nexus.OperationInput<T['operations'][Op]>\n      : nexus.OperationInput<Op>;\n\n    type OperationOutput<\n      T extends nexus.ServiceDefinition,\n      Op extends OperationReference<T>,\n    > = Op extends nexus.OperationKey<T['operations']>\n      ? nexus.OperationOutput<T['operations'][Op]>\n      : nexus.OperationOutput<Op>;\n\n    const startOperation = async <Op extends OperationReference<T>>(\n      operation: Op,\n      input: OperationInput<T, Op>,\n      options: StartNexusOperationOptions\n    ): Promise<NexusOperationHandle<OperationOutput<T, Op>>> => {\n      let operationName: string;\n      if (typeof operation === 'string') {\n        const op = service.operations[operation];\n        if (op == null) {\n          // The OperationReference<T> type guarantees that if operation is\n          // a string then it is a key of service.operations. This runtime\n          // check is for extra safety.\n          throw new TypeError(\n            `Unable to resolve Nexus operation name from key ${operation} for service ${service.name}`\n          );\n        }\n        operationName = op.name;\n      } else {\n        operationName = operation.name;\n      }\n\n      const handle = await this.startNexusOperation({\n        endpoint,\n        service: service.name,\n        operation: operationName,\n        arg: input,\n        id: options.id,\n        scheduleToCloseTimeout: options.scheduleToCloseTimeout,\n        scheduleToStartTimeout: options.scheduleToStartTimeout,\n        startToCloseTimeout: options.startToCloseTimeout,\n        summary: options.summary,\n        idReusePolicy: options.idReusePolicy,\n        idConflictPolicy: options.idConflictPolicy,\n        searchAttributes: options.searchAttributes,\n        headers: options.headers,\n      });\n\n      // The interceptor layer returns NexusOperationHandle<unknown>, so reapply\n      // the output type here to match the OperationDefinition contract.\n      return handle as NexusOperationHandle<OperationOutput<T, Op>>;\n    };\n\n    const executeOperation = async <Op extends OperationReference<T>>(\n      operation: Op,\n      input: OperationInput<T, Op>,\n      options: StartNexusOperationOptions\n    ): Promise<OperationOutput<T, Op>> => {\n      const handle = await startOperation(operation, input, options);\n      return await handle.result();\n    };\n\n    return {\n      endpoint,\n      service,\n      startOperation,\n      executeOperation,\n    };\n  }\n\n  /**\n   * Get a handle to an existing standalone Nexus operation.\n   *\n   * If {@link GetNexusOperationHandleOptions.runId} is not provided, operations on the handle\n   * (like {@link NexusOperationHandle.result}) will target the latest run.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  public getHandle<T>(\n    operationId: string,\n    options?: GetNexusOperationHandleOptions\n  ): NexusOperationHandle<NexusOperationHandleResult<T>>;\n  public getHandle(operationId: string, options?: GetNexusOperationHandleOptions): NexusOperationHandle {\n    return this.createNexusOperationHandle({\n      operationId,\n      runId: options?.runId,\n    });\n  }\n\n  /**\n   * List standalone Nexus operations matching a visibility query.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  public list(options?: ListNexusOperationsOptions): AsyncIterable<NexusOperationExecution> {\n    const input: ListNexusOperationsInput = {\n      query: options?.query,\n      pageSize: options?.pageSize,\n    };\n    const next = this.listHandler.bind(this);\n    const list = composeInterceptors(this.interceptors, 'list', next);\n    return list(input);\n  }\n\n  /**\n   * Count standalone Nexus operations matching a visibility query.\n   *\n   * @experimental Nexus Standalone Operations are experimental.\n   */\n  public async count(query?: string): Promise<NexusOperationExecutionCount> {\n    const input: CountNexusOperationsInput = { query };\n    const next = this.countHandler.bind(this);\n    const count = composeInterceptors(this.interceptors, 'count', next);\n    return await count(input);\n  }\n\n  protected async startNexusOperation(input: StartNexusOperationInput): Promise<NexusOperationHandle> {\n    const next = this.startNexusOperationHandler.bind(this);\n    const start = composeInterceptors(this.interceptors, 'startOperation', next);\n    return await start(input);\n  }\n\n  protected async getNexusOperationResult(input: GetNexusOperationResultInput): Promise<unknown> {\n    const next = this.getResultHandler.bind(this);\n    const get = composeInterceptors(this.interceptors, 'getResult', next);\n    return await get(input);\n  }\n\n  protected async describeNexusOperation(\n    input: DescribeNexusOperationInput\n  ): Promise<NexusOperationExecutionDescription> {\n    const next = this.describeHandler.bind(this);\n    const describe = composeInterceptors(this.interceptors, 'describe', next);\n    return await describe(input);\n  }\n\n  protected async cancelNexusOperation(input: CancelNexusOperationInput): Promise<void> {\n    const next = this.cancelHandler.bind(this);\n    const cancel = composeInterceptors(this.interceptors, 'cancel', next);\n    await cancel(input);\n  }\n\n  protected async terminateNexusOperation(input: TerminateNexusOperationInput): Promise<void> {\n    const next = this.terminateHandler.bind(this);\n    const terminate = composeInterceptors(this.interceptors, 'terminate', next);\n    await terminate(input);\n  }\n\n  protected async startNexusOperationHandler(input: StartNexusOperationInput): Promise<NexusOperationHandle> {\n    const inputPayload = await encodeToPayload(this.dataConverter, input.arg);\n    const searchAttributes =\n      input.searchAttributes != null\n        ? { indexedFields: encodeUnifiedSearchAttributes(undefined, input.searchAttributes) }\n        : undefined;\n    const userMetadata =\n      input.summary != null\n        ? {\n            summary: await encodeToPayload(this.dataConverter, input.summary),\n          }\n        : undefined;\n    const req: temporal.api.workflowservice.v1.IStartNexusOperationExecutionRequest = {\n      namespace: this.options.namespace,\n      identity: this.options.identity,\n      requestId: uuid4(),\n      operationId: input.id,\n      endpoint: input.endpoint,\n      service: input.service,\n      operation: input.operation,\n      scheduleToCloseTimeout: msOptionalToTs(input.scheduleToCloseTimeout),\n      scheduleToStartTimeout: msOptionalToTs(input.scheduleToStartTimeout),\n      startToCloseTimeout: msOptionalToTs(input.startToCloseTimeout),\n      input: inputPayload,\n      idReusePolicy: input.idReusePolicy != null ? encodeNexusOperationIdReusePolicy(input.idReusePolicy) : undefined,\n      idConflictPolicy:\n        input.idConflictPolicy != null ? encodeNexusOperationIdConflictPolicy(input.idConflictPolicy) : undefined,\n      searchAttributes,\n      nexusHeader: input.headers ?? {},\n      userMetadata,\n    };\n    let res: temporal.api.workflowservice.v1.IStartNexusOperationExecutionResponse;\n    try {\n      res = await this.connection.workflowService.startNexusOperationExecution(req);\n    } catch (err: unknown) {\n      this.rethrowGrpcError(err, 'Failed to start Nexus operation', input.id);\n    }\n    return this.createNexusOperationHandle({\n      operationId: input.id,\n      runId: res.runId ?? undefined,\n    });\n  }\n\n  protected createNexusOperationHandle<O>(opts: { operationId: string; runId?: string }): NexusOperationHandle<O> {\n    let cachedResult:\n      | { state: 'not-requested' }\n      | { state: 'success'; value: O }\n      | { state: 'failed'; failure: NexusOperationFailureError } = { state: 'not-requested' };\n    return {\n      operationId: opts.operationId,\n      runId: opts.runId,\n      client: this,\n      async result(): Promise<O> {\n        if (cachedResult.state === 'not-requested') {\n          try {\n            const result = (await this.client.getNexusOperationResult({\n              operationId: this.operationId,\n              runId: this.runId,\n            })) as O;\n            cachedResult = { state: 'success', value: result };\n            return result;\n          } catch (err) {\n            if (err instanceof NexusOperationFailureError) {\n              cachedResult = { state: 'failed', failure: err };\n            }\n            throw err;\n          }\n        } else if (cachedResult.state === 'success') {\n          return cachedResult.value;\n        } else {\n          throw cachedResult.failure;\n        }\n      },\n      async describe(_options?: DescribeNexusOperationOptions): Promise<NexusOperationExecutionDescription> {\n        return await this.client.describeNexusOperation({\n          operationId: this.operationId,\n          runId: this.runId,\n        });\n      },\n      async cancel(reason?: string): Promise<void> {\n        return await this.client.cancelNexusOperation({\n          operationId: this.operationId,\n          runId: this.runId,\n          reason,\n        });\n      },\n      async terminate(reason?: string): Promise<void> {\n        return await this.client.terminateNexusOperation({\n          operationId: this.operationId,\n          runId: this.runId,\n          reason,\n        });\n      },\n    };\n  }\n\n  protected async getResultHandler(input: GetNexusOperationResultInput): Promise<unknown> {\n    const req: temporal.api.workflowservice.v1.IPollNexusOperationExecutionRequest = {\n      namespace: this.options.namespace,\n      operationId: input.operationId,\n      runId: input.runId ?? '',\n      waitStage: temporal.api.enums.v1.NexusOperationWaitStage.NEXUS_OPERATION_WAIT_STAGE_CLOSED,\n    };\n    for (;;) {\n      let res: temporal.api.workflowservice.v1.IPollNexusOperationExecutionResponse;\n      try {\n        res = await this.connection.workflowService.pollNexusOperationExecution(req);\n      } catch (err: unknown) {\n        this.rethrowGrpcError(err, 'Failed to poll Nexus operation result', input.operationId);\n      }\n\n      // The operation is closed if we have a result or failure\n      if (res.result) {\n        return await decodeFromPayloadsAtIndex(this.dataConverter, 0, [res.result]);\n      }\n      if (res.failure) {\n        const cause = await decodeOptionalFailureToOptionalError(this.dataConverter, res.failure);\n        throw new NexusOperationFailureError(\n          `Nexus operation failed: ${res.failure.message ?? 'unknown failure'}`,\n          cause ?? new Error(res.failure.message ?? 'unknown failure')\n        );\n      }\n    }\n  }\n\n  protected async describeHandler(input: DescribeNexusOperationInput): Promise<NexusOperationExecutionDescription> {\n    const req: temporal.api.workflowservice.v1.IDescribeNexusOperationExecutionRequest = {\n      namespace: this.options.namespace,\n      operationId: input.operationId,\n      runId: input.runId ?? '',\n    };\n    let res: temporal.api.workflowservice.v1.IDescribeNexusOperationExecutionResponse;\n    try {\n      res = await this.connection.workflowService.describeNexusOperationExecution(req);\n    } catch (err: unknown) {\n      this.rethrowGrpcError(err, 'Failed to describe Nexus operation', input.operationId);\n    }\n    if (!res.info) {\n      throw new ServiceError('Received invalid Nexus operation description from server: missing info');\n    }\n    return await nexusOperationExecutionDescriptionFromProto(res.info, this.dataConverter);\n  }\n\n  protected async cancelHandler(input: CancelNexusOperationInput): Promise<void> {\n    const req: temporal.api.workflowservice.v1.IRequestCancelNexusOperationExecutionRequest = {\n      namespace: this.options.namespace,\n      operationId: input.operationId,\n      runId: input.runId ?? '',\n      identity: this.options.identity,\n      requestId: uuid4(),\n      reason: input.reason,\n    };\n    try {\n      await this.connection.workflowService.requestCancelNexusOperationExecution(req);\n    } catch (err: unknown) {\n      this.rethrowGrpcError(err, 'Failed to cancel Nexus operation', input.operationId);\n    }\n  }\n\n  protected async terminateHandler(input: TerminateNexusOperationInput): Promise<void> {\n    const req: temporal.api.workflowservice.v1.ITerminateNexusOperationExecutionRequest = {\n      namespace: this.options.namespace,\n      operationId: input.operationId,\n      runId: input.runId ?? '',\n      identity: this.options.identity,\n      requestId: uuid4(),\n      reason: input.reason,\n    };\n    try {\n      await this.connection.workflowService.terminateNexusOperationExecution(req);\n    } catch (err: unknown) {\n      this.rethrowGrpcError(err, 'Failed to terminate Nexus operation', input.operationId);\n    }\n  }\n\n  protected async *listHandler(input: ListNexusOperationsInput): AsyncIterable<NexusOperationExecution> {\n    let nextPageToken: Uint8Array | undefined = undefined;\n    for (;;) {\n      let response: temporal.api.workflowservice.v1.IListNexusOperationExecutionsResponse;\n      try {\n        response = await this.connection.workflowService.listNexusOperationExecutions({\n          namespace: this.options.namespace,\n          query: input.query,\n          pageSize: input.pageSize,\n          nextPageToken,\n        });\n      } catch (err: unknown) {\n        this.rethrowGrpcError(err, 'Failed to list Nexus operations', undefined);\n      }\n      for (const raw of response.operations ?? []) {\n        yield nexusOperationListInfoFromProto(raw);\n      }\n      if (response.nextPageToken == null || response.nextPageToken.length === 0) break;\n      nextPageToken = response.nextPageToken;\n    }\n  }\n\n  protected async countHandler(input: CountNexusOperationsInput): Promise<NexusOperationExecutionCount> {\n    try {\n      const res = await this.connection.workflowService.countNexusOperationExecutions({\n        namespace: this.options.namespace,\n        query: input.query,\n      });\n      return nexusCountFromProto(res);\n    } catch (err: unknown) {\n      this.rethrowGrpcError(err, 'Failed to count Nexus operations', undefined);\n    }\n  }\n\n  protected rethrowGrpcError(err: unknown, fallbackMessage: string, operationId?: string, runId?: string): never {\n    if (isGrpcServiceError(err)) {\n      rethrowKnownErrorTypes(err);\n\n      if (err.code === grpcStatus.ALREADY_EXISTS && operationId != null) {\n        throw new NexusOperationAlreadyStartedError(operationId, extractNexusOperationAlreadyStartedRunId(err));\n      }\n\n      if (err.code === grpcStatus.NOT_FOUND && operationId != null) {\n        throw new NexusOperationNotFoundError(operationId, runId);\n      }\n\n      throw new ServiceError(fallbackMessage, { cause: err });\n    }\n\n    throw new ServiceError('Unexpected error while making gRPC request', { cause: err as Error });\n  }\n}\n\nasync function cancellationInfoFromProto(\n  raw: RawNexusOperationExecutionCancellationInfo,\n  dataConverter: LoadedDataConverter\n): Promise<NexusOperationExecutionCancellationInfo> {\n  return {\n    requestedTime: optionalTsToDate(raw.requestedTime),\n    state: decodeNexusOperationCancellationState(raw.state),\n    attempt: raw.attempt ?? 0,\n    lastAttemptCompleteTime: optionalTsToDate(raw.lastAttemptCompleteTime),\n    nextAttemptScheduleTime: optionalTsToDate(raw.nextAttemptScheduleTime),\n    lastAttemptFailure: await decodeOptionalFailureToOptionalError(dataConverter, raw.lastAttemptFailure),\n    blockedReason: raw.blockedReason ?? undefined,\n    reason: raw.reason ?? '',\n    raw,\n  };\n}\n\nasync function nexusOperationExecutionDescriptionFromProto(\n  raw: RawNexusOperationExecutionInfo,\n  dataConverter: LoadedDataConverter\n): Promise<NexusOperationExecutionDescription> {\n  let decodedMetadata:\n    | { state: 'pending' }\n    | { state: 'requested'; value: Promise<{ summary: string | undefined; details: string | undefined }> } = {\n    state: 'pending',\n  };\n  const decodeMetadata = async () => {\n    if (decodedMetadata.state === 'pending') {\n      const metadataPromise = Promise.all([\n        decodeOptionalSinglePayload<string>(dataConverter, raw.userMetadata?.summary),\n        decodeOptionalSinglePayload<string>(dataConverter, raw.userMetadata?.details),\n      ]).then(([summary, details]) => {\n        return {\n          summary: summary ?? undefined,\n          details: details ?? undefined,\n        };\n      });\n      decodedMetadata = {\n        state: 'requested',\n        value: metadataPromise,\n      };\n    }\n    return await decodedMetadata.value;\n  };\n  return {\n    operationId: raw.operationId ?? '',\n    runId: raw.runId ?? '',\n    endpoint: raw.endpoint ?? '',\n    service: raw.service ?? '',\n    operation: raw.operation ?? '',\n    status: decodeNexusOperationExecutionStatus(raw.status),\n    state: decodePendingNexusOperationState(raw.state),\n    scheduleToCloseTimeout: optionalTsToMs(raw.scheduleToCloseTimeout),\n    scheduleToStartTimeout: optionalTsToMs(raw.scheduleToStartTimeout),\n    startToCloseTimeout: optionalTsToMs(raw.startToCloseTimeout),\n    attempt: raw.attempt ?? 0,\n    scheduleTime: optionalTsToDate(raw.scheduleTime),\n    expirationTime: optionalTsToDate(raw.expirationTime),\n    closeTime: optionalTsToDate(raw.closeTime),\n    lastAttemptCompleteTime: optionalTsToDate(raw.lastAttemptCompleteTime),\n    lastAttemptFailure: await decodeOptionalFailureToOptionalError(dataConverter, raw.lastAttemptFailure),\n    nextAttemptScheduleTime: optionalTsToDate(raw.nextAttemptScheduleTime),\n    executionDuration: optionalTsToMs(raw.executionDuration),\n    cancellationInfo: raw.cancellationInfo\n      ? await cancellationInfoFromProto(raw.cancellationInfo, dataConverter)\n      : undefined,\n    blockedReason: raw.blockedReason ?? undefined,\n    requestId: raw.requestId ?? '',\n    operationToken: raw.operationToken ?? undefined,\n    stateTransitionCount: raw.stateTransitionCount?.toNumber() ?? 0,\n    searchAttributes: decodeTypedSearchAttributes(raw.searchAttributes?.indexedFields),\n    identity: raw.identity ?? '',\n    raw,\n    staticDetails: async () => (await decodeMetadata()).details,\n    staticSummary: async () => (await decodeMetadata()).summary,\n  };\n}\n\nfunction nexusOperationListInfoFromProto(raw: RawNexusOperationExecutionListInfo): NexusOperationExecution {\n  return {\n    operationId: raw.operationId ?? '',\n    runId: raw.runId ?? '',\n    endpoint: raw.endpoint ?? '',\n    service: raw.service ?? '',\n    operation: raw.operation ?? '',\n    scheduleTime: optionalTsToDate(raw.scheduleTime),\n    closeTime: optionalTsToDate(raw.closeTime),\n    status: decodeNexusOperationExecutionStatus(raw.status),\n    searchAttributes: decodeTypedSearchAttributes(raw.searchAttributes?.indexedFields),\n    stateTransitionCount: raw.stateTransitionCount?.toNumber() ?? 0,\n    executionDuration: optionalTsToMs(raw.executionDuration),\n    raw,\n  };\n}\n\nfunction nexusCountFromProto(\n  raw: temporal.api.workflowservice.v1.ICountNexusOperationExecutionsResponse\n): NexusOperationExecutionCount {\n  return {\n    count: raw.count?.toNumber() ?? 0,\n    groups: (raw.groups ?? []).map((group) => ({\n      count: group.count?.toNumber() ?? 0,\n      groupValues: (group.groupValues ?? []).map(decodeCountGroupValue),\n    })),\n  };\n}\n\nfunction decodeCountGroupValue(value: temporal.api.common.v1.IPayload): TypedSearchAttributeValue<SearchAttributeType> {\n  const decoded = typedSearchAttributePayloadConverter.fromPayload<\n    TypedSearchAttributeValue<SearchAttributeType> | undefined\n  >(value);\n  if (decoded === undefined) {\n    throw new ServiceError(\n      'Received invalid Nexus operation count group value from server: ' +\n        `metadata.type=${decodePayloadMetadata(value.metadata?.type) ?? '<missing>'}, ` +\n        `metadata.encoding=${decodePayloadMetadata(value.metadata?.encoding) ?? '<missing>'}`\n    );\n  }\n  return decoded;\n}\n\nfunction decodePayloadMetadata(value: Uint8Array | null | undefined): string | undefined {\n  return value == null ? undefined : decode(value);\n}\n\n/**\n * Thrown by {@link NexusOperationHandle.result} when the operation completes with a failure outcome.\n * The original failure is available on `cause`.\n */\n@SymbolBasedInstanceOfError('NexusOperationFailureError')\nexport class NexusOperationFailureError extends Error {\n  public constructor(\n    message: string,\n    public readonly cause: Error\n  ) {\n    super(message, { cause });\n  }\n}\n\n/**\n * Thrown by {@link NexusServiceClient.startOperation} when the server returns ALREADY_EXISTS\n * because an operation with the given ID already exists and the reuse/conflict policies disallow reuse.\n */\n@SymbolBasedInstanceOfError('NexusOperationAlreadyStartedError')\nexport class NexusOperationAlreadyStartedError extends Error {\n  public constructor(\n    public readonly operationId: string,\n    public readonly runId?: string\n  ) {\n    super(`Nexus operation already started: operationId=${operationId}${runId ? ` runId=${runId}` : ''}`);\n  }\n}\n\n/**\n * Thrown when a Nexus Operation with the given operationId and runId is not known by the Temporal Server.\n */\n@SymbolBasedInstanceOfError('NexusOperationNotFoundError')\nexport class NexusOperationNotFoundError extends Error {\n  public constructor(\n    public readonly operationId: string,\n    public readonly runId?: string\n  ) {\n    super(`Nexus operation not found: operationId=${operationId}${runId ? ` runId=${runId}` : ''}`);\n  }\n}\n","import type { Replace } from '@temporalio/common/lib/type-helpers';\nimport { checkExtends } from '@temporalio/common/lib/type-helpers';\nimport type {\n  Duration,\n  SearchAttributes,\n  Workflow,\n  TypedSearchAttributes,\n  SearchAttributePair,\n} from '@temporalio/common';\nimport { makeProtoEnumConverters } from '@temporalio/common/lib/internal-workflow';\nimport type { temporal } from '@temporalio/proto';\nimport type { WorkflowStartOptions } from './workflow-options';\n\n/**\n * The specification of a Schedule to be created, as expected by {@link ScheduleClient.create}.\n */\nexport interface ScheduleOptions<A extends ScheduleOptionsAction = ScheduleOptionsAction> {\n  /**\n   * Schedule Id\n   *\n   * We recommend using a meaningful business identifier.\n   */\n  scheduleId: string;\n\n  /**\n   * When Actions should be taken\n   */\n  spec: ScheduleSpec;\n\n  /**\n   * Which Action to take\n   */\n  action: A;\n\n  policies?: {\n    /**\n     * Controls what happens when an Action would be started by a Schedule at the same time that an older Action is still\n     * running. This can be changed after a Schedule has taken some Actions, and some changes might produce\n     * unintuitive results. In general, the later policy overrides the earlier policy.\n     *\n     * @default ScheduleOverlapPolicy.SKIP\n     */\n    overlap?: ScheduleOverlapPolicy;\n\n    /**\n     * The Temporal Server might be down or unavailable at the time when a Schedule should take an Action. When the Server\n     * comes back up, `catchupWindow` controls which missed Actions should be taken at that point. The default is one\n     * minute, which means that the Schedule attempts to take any Actions that wouldn't be more than one minute late. It\n     * takes those Actions according to the {@link ScheduleOverlapPolicy}. An outage that lasts longer than the Catchup\n     * Window could lead to missed Actions. (But you can always {@link ScheduleHandle.backfill}.)\n     *\n     * @default 1 year\n     * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n     */\n    catchupWindow?: Duration;\n\n    /**\n     * When an Action times out or reaches the end of its Retry Policy, {@link pause}.\n     *\n     * With {@link ScheduleOverlapPolicy.ALLOW_ALL}, this pause might not apply to the next Action, because the next Action\n     * might have already started previous to the failed one finishing. Pausing applies only to Actions that are scheduled\n     * to start after the failed one finishes.\n     *\n     * @default false\n     */\n    pauseOnFailure?: boolean;\n  };\n\n  /**\n   * Additional non-indexed information attached to the Schedule. The values can be anything that is\n   * serializable by the {@link DataConverter}.\n   */\n  memo?: Record<string, unknown>;\n\n  /**\n   * Additional indexed information attached to the Schedule. More info:\n   * https://docs.temporal.io/docs/typescript/search-attributes\n   *\n   * Values are always converted using {@link JsonPayloadConverter}, even when a custom Data Converter is provided.\n   *\n   * @deprecated Use {@link typedSearchAttributes} instead.\n   */\n  searchAttributes?: SearchAttributes;\n\n  /**\n   * Additional indexed information attached to the Schedule. More info:\n   * https://docs.temporal.io/docs/typescript/search-attributes\n   *\n   * Values are always converted using {@link JsonPayloadConverter}, even when a custom Data Converter is provided.\n   *\n   * If both {@link searchAttributes} and {@link typedSearchAttributes} are provided, conflicting keys will be overwritten\n   * by {@link typedSearchAttributes}.\n   */\n  typedSearchAttributes?: SearchAttributePair[] | TypedSearchAttributes;\n\n  /**\n   * The initial state of the schedule, right after creation or update.\n   */\n  state?: {\n    /**\n     * Start in paused state.\n     *\n     * @default false\n     */\n    paused?: boolean;\n\n    /**\n     * Informative human-readable message with contextual notes, e.g. the reason\n     * a Schedule is paused. The system may overwrite this message on certain\n     * conditions, e.g. when pause-on-failure happens.\n     */\n    note?: string;\n\n    /**\n     * Limit the number of Actions to take.\n     *\n     * This number is decremented after each Action is taken, and Actions are not\n     * taken when the number is `0` (unless {@link ScheduleHandle.trigger} is called).\n     *\n     * If `undefined`, then no such limit applies.\n     *\n     * @default undefined, which allows for unlimited exections\n     */\n    remainingActions?: number;\n\n    /**\n     * Trigger one Action immediately on create.\n     *\n     * @default false\n     */\n    triggerImmediately?: boolean;\n\n    /**\n     * Runs though the specified time periods and takes Actions as if that time passed by right now, all at once. The\n     * overlap policy can be overridden for the scope of the backfill.\n     */\n    backfill?: Backfill[];\n  };\n}\n\nexport type CompiledScheduleOptions = Replace<\n  ScheduleOptions,\n  {\n    action: CompiledScheduleAction;\n  }\n>;\n\n/**\n * The specification of an updated Schedule, as expected by {@link ScheduleHandle.update}.\n */\nexport type ScheduleUpdateOptions<A extends ScheduleOptionsAction = ScheduleOptionsAction> = Replace<\n  Omit<ScheduleOptions, 'scheduleId' | 'memo'>,\n  {\n    action: A;\n    state: Omit<ScheduleOptions['state'], 'triggerImmediately' | 'backfill'>;\n  }\n>;\n\nexport type CompiledScheduleUpdateOptions = Replace<\n  ScheduleUpdateOptions,\n  {\n    action: CompiledScheduleAction;\n  }\n>;\n\n/**\n * A summary description of an existing Schedule, as returned by {@link ScheduleClient.list}.\n *\n * Note that schedule listing is eventual consistent; some returned properties may therefore\n * be undefined or incorrect for some time after creating or modifying a schedule.\n */\nexport interface ScheduleSummary {\n  /**\n   * The Schedule Id. We recommend using a meaningful business identifier.\n   */\n  scheduleId: string;\n\n  /**\n   * When will Actions be taken.\n   */\n  spec?: ScheduleSpecDescription;\n\n  /**\n   * The Action that will be taken.\n   */\n  action?: ScheduleSummaryAction;\n\n  /**\n   * Additional non-indexed information attached to the Schedule.\n   * The values can be anything that is serializable by the {@link DataConverter}.\n   */\n  memo?: Record<string, unknown>;\n\n  /**\n   * Additional indexed information attached to the Schedule. More info:\n   * https://docs.temporal.io/docs/typescript/search-attributes\n   *\n   * Values are always converted using {@link JsonPayloadConverter}, even when a custom Data Converter is provided.\n   *\n   * @deprecated Use {@link typedSearchAttributes} instead.\n   */\n  searchAttributes?: SearchAttributes;\n\n  /**\n   * Additional indexed information attached to the Schedule. More info:\n   * https://docs.temporal.io/docs/typescript/search-attributes\n   *\n   * Values are always converted using {@link JsonPayloadConverter}, even when a custom Data Converter is provided.\n   */\n  typedSearchAttributes?: TypedSearchAttributes;\n\n  state: {\n    /**\n     * Whether Schedule is currently paused.\n     */\n    paused: boolean;\n\n    /**\n     * Informative human-readable message with contextual notes, e.g. the reason a Schedule is paused.\n     * The system may overwrite this message on certain conditions, e.g. when pause-on-failure happens.\n     */\n    note?: string;\n  };\n\n  info: {\n    /**\n     * Most recent actions started (including manual triggers), sorted from older start time to newer.\n     */\n    recentActions: ScheduleExecutionResult[];\n\n    /**\n     * Next upcoming scheduled times of this Schedule\n     */\n    nextActionTimes: Date[];\n  };\n}\n\nexport interface ScheduleExecutionResult {\n  /** Time that the Action was scheduled for, including jitter */\n  scheduledAt: Date;\n\n  /** Time that the Action was actually taken */\n  takenAt: Date;\n\n  /** The Action that was taken */\n  action: ScheduleExecutionActionResult;\n}\n\nexport type ScheduleExecutionActionResult = ScheduleExecutionStartWorkflowActionResult;\n\nexport interface ScheduleExecutionStartWorkflowActionResult {\n  type: 'startWorkflow';\n  workflow: {\n    workflowId: string;\n\n    /**\n     * The Run Id of the original execution that was started by the Schedule. If the Workflow retried, did\n     * Continue-As-New, or was Reset, the following runs would have different Run Ids.\n     */\n    firstExecutionRunId: string;\n  };\n}\n\n/**\n * A detailed description of an exisiting Schedule, as returned by {@link ScheduleHandle.describe}.\n */\nexport type ScheduleDescription = {\n  /**\n   * The Schedule Id. We recommend using a meaningful business identifier.\n   */\n  scheduleId: string;\n\n  /**\n   * When will Actions be taken.\n   */\n  spec: ScheduleSpecDescription;\n\n  /**\n   * The Action that will be taken.\n   */\n  action: ScheduleDescriptionAction;\n\n  policies: {\n    /**\n     * Controls what happens when an Action would be started by a Schedule at the same time that an older Action is still\n     * running.\n     */\n    overlap: ScheduleOverlapPolicy;\n\n    /**\n     * The Temporal Server might be down or unavailable at the time when a Schedule should take an Action.\n     * When the Server comes back up, `catchupWindow` controls which missed Actions should be taken at that point.\n     * It takes those Actions according to the {@link ScheduleOverlapPolicy}. An outage that lasts longer than the\n     * Catchup Window could lead to missed Actions. (But you can always {@link ScheduleHandle.backfill}.)\n     *\n     * Unit is miliseconds.\n     */\n    catchupWindow: number;\n\n    /**\n     * When an Action times out or reaches the end of its Retry Policy, {@link pause}.\n     *\n     * With {@link ScheduleOverlapPolicy.ALLOW_ALL}, this pause might not apply to the next Action, because the next Action\n     * might have already started previous to the failed one finishing. Pausing applies only to Actions that are scheduled\n     * to start after the failed one finishes.\n     */\n    pauseOnFailure: boolean;\n  };\n\n  /**\n   * Additional non-indexed information attached to the Schedule.\n   * The values can be anything that is serializable by the {@link DataConverter}.\n   */\n  memo?: Record<string, unknown>;\n\n  /**\n   * Additional indexed information attached to the Schedule. More info:\n   * https://docs.temporal.io/docs/typescript/search-attributes\n   *\n   * Values are always converted using {@link JsonPayloadConverter}, even when a custom Data Converter is provided.\n   *\n   * @deprecated Use {@link typedSearchAttributes} instead.\n   */\n  searchAttributes: SearchAttributes;\n\n  /**\n   * Additional indexed information attached to the Schedule. More info:\n   * https://docs.temporal.io/docs/typescript/search-attributes\n   *\n   * Values are always converted using {@link JsonPayloadConverter}, even when a custom Data Converter is provided.\n   */\n  typedSearchAttributes: TypedSearchAttributes;\n\n  state: {\n    /**\n     * Whether Schedule is currently paused.\n     */\n    paused: boolean;\n\n    /**\n     * Informative human-readable message with contextual notes, e.g. the reason a Schedule is paused.\n     * The system may overwrite this message on certain conditions, e.g. when pause-on-failure happens.\n     */\n    note?: string;\n\n    /**\n     * The Actions remaining in this Schedule.\n     * Once this number hits `0`, no further Actions are taken (unless {@link ScheduleHandle.trigger} is called).\n     *\n     * If `undefined`, then no such limit applies.\n     */\n    remainingActions?: number;\n  };\n\n  info: {\n    /**\n     * Most recent actions started (including manual triggers), sorted from older start time to newer.\n     */\n    recentActions: ScheduleExecutionResult[];\n\n    /**\n     * Next upcoming scheduled times of this Schedule\n     */\n    nextActionTimes: Date[];\n\n    /**\n     * Number of Actions taken so far.\n     */\n    numActionsTaken: number;\n\n    /**\n     * Number of times a scheduled Action was skipped due to missing the catchup window.\n     */\n    numActionsMissedCatchupWindow: number;\n\n    /**\n     * Number of Actions skipped due to overlap.\n     */\n    numActionsSkippedOverlap: number;\n\n    createdAt: Date;\n    lastUpdatedAt: Date | undefined;\n\n    /**\n     * Currently-running workflows started by this schedule. (There might be\n     * more than one if the overlap policy allows overlaps.)\n     */\n    runningActions: ScheduleExecutionActionResult[];\n  };\n\n  /** @internal */\n  raw: temporal.api.workflowservice.v1.IDescribeScheduleResponse;\n};\n\n// Invariant: ScheduleDescription contains at least the same fields as ScheduleSummary\ncheckExtends<ScheduleSummary, ScheduleDescription>();\n\n// Invariant: An existing ScheduleDescription can be used as template to create a new Schedule\ncheckExtends<ScheduleOptions, ScheduleDescription>();\n\n// Invariant: An existing ScheduleDescription can be used as template to update that Schedule\ncheckExtends<ScheduleUpdateOptions, ScheduleDescription>();\n\n/**\n * A complete description of a set of absolute times (possibly infinite) that an Action should occur at.\n * The times are the union of `calendars`, `intervals`, and `cronExpressions`, minus the `skip` times. These times\n * never change, except that the definition of a time zone can change over time (most commonly, when daylight saving\n * time policy changes for an area). To create a totally self-contained `ScheduleSpec`, use UTC.\n */\nexport interface ScheduleSpec {\n  /** Calendar-based specifications of times. */\n  calendars?: CalendarSpec[];\n\n  /** Interval-based specifications of times. */\n  intervals?: IntervalSpec[];\n\n  /**\n   * [Cron expressions](https://crontab.guru/). This is provided for easy migration from legacy Cron Workflows. For new\n   * use cases, we recommend using {@link calendars} or {@link intervals} for readability and maintainability.\n   *\n   * For example, `0 12 * * MON-WED,FRI` is every M/Tu/W/F at noon, and is equivalent to this {@link CalendarSpec}:\n   *\n   * ```ts\n   * {\n   *   hour: 12,\n   *   dayOfWeek: [{\n   *     start: 'MONDAY'\n   *     end: 'WEDNESDAY'\n   *   }, 'FRIDAY']\n   * }\n   * ```\n   *\n   * The string can have 5, 6, or 7 fields, separated by spaces, and they are interpreted in the\n   * same way as a {@link CalendarSpec}.\n   *\n   * - 5 fields:         minute, hour, day_of_month, month, day_of_week\n   * - 6 fields:         minute, hour, day_of_month, month, day_of_week, year\n   * - 7 fields: second, minute, hour, day_of_month, month, day_of_week, year\n   *\n   * Notes:\n   *\n   * - If year is not given, it defaults to *.\n   * - If second is not given, it defaults to 0.\n   * - Shorthands `@yearly`, `@monthly`, `@weekly`, `@daily`, and `@hourly` are also\n   * accepted instead of the 5-7 time fields.\n   * - `@every interval[/<phase>]` is accepted and gets compiled into an\n   * IntervalSpec instead. `<interval>` and `<phase>` should be a decimal integer\n   * with a unit suffix s, m, h, or d.\n   * - Optionally, the string can be preceded by `CRON_TZ=<timezone name>` or\n   * `TZ=<timezone name>`, which will get copied to {@link timezone}.\n   * (In which case the {@link timezone} field should be left empty.)\n   * - Optionally, \"#\" followed by a comment can appear at the end of the string.\n   * - Note that the special case that some cron implementations have for\n   * treating day_of_month and day_of_week as \"or\" instead of \"and\" when both\n   * are set is not implemented.\n   */\n  cronExpressions?: string[];\n\n  /**\n   * Any matching times will be skipped.\n   *\n   * All aspects of the CalendarSpec—including seconds—must match a time for the time to be skipped.\n   */\n  skip?: CalendarSpec[];\n  // TODO see if users want to be able to skip an IntervalSpec\n  // https://github.com/temporalio/api/pull/230/files#r956434347\n\n  /**\n   * Any times before `startAt` will be skipped. Together, `startAt` and `endAt` make an inclusive interval.\n   *\n   * @default The beginning of time\n   */\n  startAt?: Date;\n\n  /**\n   * Any times after `endAt` will be skipped.\n   *\n   * @default The end of time\n   */\n  endAt?: Date;\n\n  /**\n   * All times will be incremented by a random value from 0 to this amount of jitter.\n   *\n   * @default 0\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  jitter?: Duration;\n\n  /**\n   * IANA timezone name, for example `US/Pacific`.\n   *\n   * https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\n   *\n   * The definition will be loaded by Temporal Server from the environment it runs in.\n   *\n   * Calendar spec matching is based on literal matching of the clock time\n   * with no special handling of DST: if you write a calendar spec that fires\n   * at 2:30am and specify a time zone that follows DST, that action will not\n   * be triggered on the day that has no 2:30am. Similarly, an action that\n   * fires at 1:30am will be triggered twice on the day that has two 1:30s.\n   *\n   * Also note that no actions are taken on leap-seconds (e.g. 23:59:60 UTC).\n   *\n   * @default UTC\n   */\n  timezone?: string;\n}\n\n/**\n * The version of {@link ScheduleSpec} that you get back from {@link ScheduleHandle.describe} and {@link ScheduleClient.list}\n */\nexport type ScheduleSpecDescription = Omit<\n  ScheduleSpec,\n  'calendars' | 'intervals' | 'cronExpressions' | 'skip' | 'jitter'\n> & {\n  /** Calendar-based specifications of times. */\n  calendars?: CalendarSpecDescription[];\n\n  /** Interval-based specifications of times. */\n  intervals?: IntervalSpecDescription[];\n\n  /** Any matching times will be skipped. */\n  skip?: CalendarSpecDescription[];\n\n  /**\n   * All times will be incremented by a random value from 0 to this amount of jitter.\n   *\n   * @default 1 second\n   * @format number of milliseconds\n   */\n  jitter?: number;\n};\n\n// Invariant: An existing ScheduleSpec can be used as is to create or update a Schedule\ncheckExtends<ScheduleSpec, ScheduleSpecDescription>();\n\n/**\n * An event specification relative to the calendar, similar to a traditional cron specification.\n *\n * A second in time matches if all fields match. This includes `dayOfMonth` and `dayOfWeek`.\n */\nexport interface CalendarSpec {\n  /**\n   * Valid values: 0–59\n   *\n   * @default 0\n   */\n  second?: LooseRange<number> | LooseRange<number>[] | '*';\n\n  /**\n   * Valid values: 0–59\n   *\n   * @default 0\n   */\n  minute?: LooseRange<number> | LooseRange<number>[] | '*';\n\n  /**\n   * Valid values: 0–23\n   *\n   * @default 0\n   */\n  hour?: LooseRange<number> | LooseRange<number>[] | '*';\n\n  /**\n   * Valid values: 1–31\n   *\n   * @default '*'\n   */\n  dayOfMonth?: LooseRange<number> | LooseRange<number>[] | '*';\n\n  /**\n   * @default '*'\n   */\n  month?: LooseRange<Month> | LooseRange<Month>[] | '*';\n\n  /**\n   * Use full years, like `2030`\n   *\n   * @default '*'\n   */\n  year?: LooseRange<number> | LooseRange<number>[] | '*';\n\n  /**\n   * @default '*'\n   */\n  dayOfWeek?: LooseRange<DayOfWeek> | LooseRange<DayOfWeek>[] | '*';\n\n  /**\n   * Description of the intention of this spec.\n   */\n  comment?: string;\n}\n\n/**\n * An event specification relative to the calendar, similar to a traditional cron specification.\n *\n * A second in time matches if all fields match. This includes `dayOfMonth` and `dayOfWeek`.\n */\nexport interface CalendarSpecDescription {\n  /**\n   * Valid values: 0–59\n   *\n   * @default Match only when second is 0 (ie. `[{ start: 0, end: 0, step: 0 }]`)\n   */\n  second: Range<number>[];\n\n  /**\n   * Valid values: 0–59\n   *\n   * @default Match only when minute is 0 (ie. `[{ start: 0, end: 0, step: 0 }]`)\n   */\n  minute: Range<number>[];\n\n  /**\n   * Valid values: 0–23\n   *\n   * @default Match only when hour is 0 (ie. `[{ start: 0, end: 0, step: 0 }]`)\n   */\n  hour: Range<number>[];\n\n  /**\n   * Valid values: 1–31\n   *\n   * @default Match on any day (ie. `[{ start: 1, end: 31, step: 1 }]`)\n   */\n  dayOfMonth: Range<number>[];\n\n  /**\n   * Valid values are 'JANUARY' to 'DECEMBER'.\n   *\n   * @default Match on any month (ie. `[{ start: 'JANUARY', end: 'DECEMBER', step: 1 }]`)\n   */\n  month: Range<Month>[];\n\n  /**\n   * Use full years, like `2030`\n   *\n   * @default Match on any year\n   */\n  year: Range<number>[];\n\n  /**\n   * Valid values are 'SUNDAY' to 'SATURDAY'.\n   *\n   * @default Match on any day of the week (ie. `[{ start: 'SUNDAY', end: 'SATURDAY', step: 1 }]`)\n   */\n  dayOfWeek: Range<DayOfWeek>[];\n\n  /**\n   * Description of the intention of this spec.\n   */\n  comment?: string;\n}\n\n/**\n * IntervalSpec matches times that can be expressed as:\n *\n * `Epoch + (n * every) + offset`\n *\n * where `n` is all integers ≥ 0.\n *\n * For example, an `every` of 1 hour with `offset` of zero would match every hour, on the hour. The same `every` but an `offset`\n * of 19 minutes would match every `xx:19:00`. An `every` of 28 days with `offset` zero would match `2022-02-17T00:00:00Z`\n * (among other times). The same `every` with `offset` of 3 days, 5 hours, and 23 minutes would match `2022-02-20T05:23:00Z`\n * instead.\n */\nexport interface IntervalSpec {\n  /**\n   * Value is rounded to the nearest second.\n   *\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  every: Duration;\n\n  /**\n   * Value is rounded to the nearest second.\n   *\n   * @default 0\n   * @format number of milliseconds or {@link https://www.npmjs.com/package/ms | ms-formatted string}\n   */\n  offset?: Duration;\n}\n\n/**\n * IntervalSpec matches times that can be expressed as:\n *\n * `Epoch + (n * every) + offset`\n *\n * where `n` is all integers ≥ 0.\n *\n * For example, an `every` of 1 hour with `offset` of zero would match every hour, on the hour. The same `every` but an `offset`\n * of 19 minutes would match every `xx:19:00`. An `every` of 28 days with `offset` zero would match `2022-02-17T00:00:00Z`\n * (among other times). The same `every` with `offset` of 3 days, 5 hours, and 23 minutes would match `2022-02-20T05:23:00Z`\n * instead.\n *\n * This is the version of {@link IntervalSpec} that you get back from {@link ScheduleHandle.describe} and {@link ScheduleClient.list}\n */\nexport interface IntervalSpecDescription {\n  /**\n   * Value is rounded to the nearest second.\n   *\n   * @format number of milliseconds\n   */\n  every: number;\n\n  /**\n   * Value is rounded to the nearest second.\n   *\n   * @format number of milliseconds\n   */\n  offset: number;\n}\n\n/**\n * Range represents a set of values, used to match fields of a calendar. If end < start, then end is\n * interpreted as equal to start. Similarly, if step is less than 1, then step is interpreted as 1.\n */\nexport interface Range<Unit> {\n  /**\n   * Start of range (inclusive)\n   */\n  start: Unit;\n\n  /**\n   * End of range (inclusive)\n   *\n   * @default `start`\n   */\n  end: Unit;\n\n  /**\n   * The step to take between each value.\n   *\n   * @default 1\n   */\n  step: number;\n}\n\n/**\n * A {@link Range} definition, with support for loose syntax.\n *\n * For example:\n * ```\n * 3 ➡️ 3\n * { start: 2 } ➡️ 2\n * { start: 2, end: 4 } ➡️ 2, 3, 4\n * { start: 2, end: 10, step: 3 } ➡️ 2, 5, 8\n * ```\n */\nexport type LooseRange<Unit> =\n  | Range<Unit>\n  | { start: Range<Unit>['start']; end?: Range<Unit>['end']; step?: never }\n  | Unit;\n\nexport const MONTHS = [\n  'JANUARY',\n  'FEBRUARY',\n  'MARCH',\n  'APRIL',\n  'MAY',\n  'JUNE',\n  'JULY',\n  'AUGUST',\n  'SEPTEMBER',\n  'OCTOBER',\n  'NOVEMBER',\n  'DECEMBER',\n] as const;\n\nexport type Month = (typeof MONTHS)[number];\n\nexport const DAYS_OF_WEEK = ['SUNDAY', 'MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY'] as const;\n\nexport type DayOfWeek = (typeof DAYS_OF_WEEK)[number];\n\nexport type ScheduleOptionsAction = ScheduleOptionsStartWorkflowAction<Workflow>;\n\nexport type ScheduleOptionsStartWorkflowAction<W extends Workflow> = {\n  type: 'startWorkflow';\n  workflowType: string | W;\n} & Pick<\n  WorkflowStartOptions<W>,\n  | 'taskQueue'\n  | 'args'\n  | 'memo'\n  | 'searchAttributes'\n  | 'typedSearchAttributes'\n  | 'retry'\n  | 'workflowExecutionTimeout'\n  | 'workflowRunTimeout'\n  | 'workflowTaskTimeout'\n  | 'staticDetails'\n  | 'staticSummary'\n> & {\n    /**\n     * Workflow id to use when starting. Assign a meaningful business id.\n     * This ID can be used to ensure starting Workflows is idempotent.\n     *\n     * @default `${scheduleId}-workflow`\n     */\n    workflowId?: string;\n  };\n\nexport type ScheduleSummaryAction = ScheduleSummaryStartWorkflowAction;\n\nexport interface ScheduleSummaryStartWorkflowAction {\n  type: 'startWorkflow';\n  workflowType: string;\n}\n\nexport type ScheduleDescriptionAction = ScheduleDescriptionStartWorkflowAction;\n\nexport type ScheduleDescriptionStartWorkflowAction = ScheduleSummaryStartWorkflowAction &\n  Pick<\n    WorkflowStartOptions<Workflow>,\n    | 'taskQueue'\n    | 'workflowId'\n    | 'args'\n    | 'memo'\n    | 'searchAttributes'\n    | 'typedSearchAttributes'\n    | 'retry'\n    | 'workflowExecutionTimeout'\n    | 'workflowRunTimeout'\n    | 'workflowTaskTimeout'\n    | 'staticSummary'\n    | 'staticDetails'\n    | 'priority'\n  >;\n\n// Invariant: an existing ScheduleDescriptionAction can be used as is to create or update a schedule\ncheckExtends<ScheduleOptionsAction, ScheduleDescriptionAction>();\n\nexport type CompiledScheduleAction = Replace<\n  ScheduleDescriptionAction,\n  {\n    workflowType: string;\n    args: unknown[];\n  }\n>;\n\n/**\n * Policy for overlapping Actions.\n */\nexport const ScheduleOverlapPolicy = {\n  /**\n   * Don't start a new Action.\n   * @default\n   */\n  SKIP: 'SKIP',\n\n  /**\n   * Start another Action as soon as the current Action completes, but only buffer one Action in this way. If another\n   * Action is supposed to start, but one Action is running and one is already buffered, then only the buffered one will\n   * be started after the running Action finishes.\n   */\n  BUFFER_ONE: 'BUFFER_ONE',\n\n  /**\n   * Allows an unlimited number of Actions to buffer. They are started sequentially.\n   */\n  BUFFER_ALL: 'BUFFER_ALL',\n\n  /**\n   * Cancels the running Action, and then starts the new Action once the cancelled one completes.\n   */\n  CANCEL_OTHER: 'CANCEL_OTHER',\n\n  /**\n   * Terminate the running Action and start the new Action immediately.\n   */\n  TERMINATE_OTHER: 'TERMINATE_OTHER',\n\n  /**\n   * Allow any number of Actions to start immediately.\n   *\n   * This is the only policy under which multiple Actions can run concurrently.\n   */\n  ALLOW_ALL: 'ALLOW_ALL',\n\n  /**\n   * Use server default (currently SKIP).\n   *\n   * @deprecated Either leave property `undefined`, or use {@link SKIP} instead.\n   */\n  UNSPECIFIED: undefined,\n} as const;\nexport type ScheduleOverlapPolicy = (typeof ScheduleOverlapPolicy)[keyof typeof ScheduleOverlapPolicy];\n\nexport const [encodeScheduleOverlapPolicy, decodeScheduleOverlapPolicy] = makeProtoEnumConverters<\n  temporal.api.enums.v1.ScheduleOverlapPolicy,\n  typeof temporal.api.enums.v1.ScheduleOverlapPolicy,\n  keyof typeof temporal.api.enums.v1.ScheduleOverlapPolicy,\n  typeof ScheduleOverlapPolicy,\n  'SCHEDULE_OVERLAP_POLICY_'\n>(\n  {\n    [ScheduleOverlapPolicy.SKIP]: 1,\n    [ScheduleOverlapPolicy.BUFFER_ONE]: 2,\n    [ScheduleOverlapPolicy.BUFFER_ALL]: 3,\n    [ScheduleOverlapPolicy.CANCEL_OTHER]: 4,\n    [ScheduleOverlapPolicy.TERMINATE_OTHER]: 5,\n    [ScheduleOverlapPolicy.ALLOW_ALL]: 6,\n    UNSPECIFIED: 0,\n  } as const,\n  'SCHEDULE_OVERLAP_POLICY_'\n);\n\nexport interface Backfill {\n  /**\n   * Start of the time range to evaluate Schedule in.\n   */\n  start: Date;\n\n  /**\n   * End of the time range to evaluate Schedule in.\n   */\n  end: Date;\n\n  /**\n   * Override the Overlap Policy for this request.\n   *\n   * @default SKIP\n   */\n  overlap?: ScheduleOverlapPolicy;\n}\n","import Long from 'long';\nimport type { LoadedDataConverter, WorkflowSerializationContext } from '@temporalio/common';\nimport {\n  compilePriority,\n  compileRetryPolicy,\n  decodePriority,\n  decompileRetryPolicy,\n  extractWorkflowType,\n} from '@temporalio/common';\nimport { encodeUserMetadata, decodeUserMetadata } from '@temporalio/common/lib/internal-non-workflow/codec-helpers';\nimport {\n  encodeUnifiedSearchAttributes,\n  decodeSearchAttributes,\n  decodeTypedSearchAttributes,\n} from '@temporalio/common/lib/converter/payload-search-attributes';\nimport type { Headers } from '@temporalio/common/lib/interceptors';\nimport {\n  decodeArrayFromPayloads,\n  decodeMapFromPayloads,\n  encodeMapToPayloads,\n  encodeToPayloadsWithContext,\n} from '@temporalio/common/lib/internal-non-workflow';\nimport { temporal } from '@temporalio/proto';\nimport {\n  msOptionalToTs,\n  msToTs,\n  optionalDateToTs,\n  optionalTsToDate,\n  optionalTsToMs,\n  requiredTsToDate,\n} from '@temporalio/common/lib/time';\nimport type {\n  CalendarSpec,\n  CalendarSpecDescription,\n  CompiledScheduleOptions,\n  CompiledScheduleUpdateOptions,\n  Range,\n  ScheduleOptions,\n  ScheduleUpdateOptions,\n  DayOfWeek,\n  Month,\n  LooseRange,\n  ScheduleSpec,\n  CompiledScheduleAction,\n  ScheduleSpecDescription,\n  IntervalSpecDescription,\n  ScheduleDescriptionAction,\n  ScheduleExecutionActionResult,\n  ScheduleExecutionResult,\n  ScheduleExecutionStartWorkflowActionResult,\n} from './schedule-types';\nimport { DAYS_OF_WEEK, MONTHS, encodeScheduleOverlapPolicy } from './schedule-types';\n\nconst [encodeSecond, decodeSecond] = makeCalendarSpecFieldCoders(\n  'second',\n  (x: number) => (typeof x === 'number' && x >= 0 && x <= 59 ? x : undefined),\n  (x: number) => x,\n  [{ start: 0, end: 0, step: 0 }], // default to 0\n  [{ start: 0, end: 59, step: 1 }]\n);\n\nconst [encodeMinute, decodeMinue] = makeCalendarSpecFieldCoders(\n  'minute',\n  (x: number) => (typeof x === 'number' && x >= 0 && x <= 59 ? x : undefined),\n  (x: number) => x,\n  [{ start: 0, end: 0, step: 0 }], // default to 0\n  [{ start: 0, end: 59, step: 1 }]\n);\n\nconst [encodeHour, decodeHour] = makeCalendarSpecFieldCoders(\n  'hour',\n  (x: number) => (typeof x === 'number' && x >= 0 && x <= 23 ? x : undefined),\n  (x: number) => x,\n  [{ start: 0, end: 0, step: 0 }], // default to 0\n  [{ start: 0, end: 23, step: 1 }]\n);\n\nconst [encodeDayOfMonth, decodeDayOfMonth] = makeCalendarSpecFieldCoders(\n  'dayOfMonth',\n  (x: number) => (typeof x === 'number' && x >= 0 && x <= 31 ? x : undefined),\n  (x: number) => x,\n  [{ start: 1, end: 31, step: 1 }], // default to *\n  [{ start: 1, end: 31, step: 1 }]\n);\n\nconst [encodeMonth, decodeMonth] = makeCalendarSpecFieldCoders(\n  'month',\n  function monthNameToNumber(month: Month): number | undefined {\n    const index = MONTHS.indexOf(month);\n    return index >= 0 ? index + 1 : undefined;\n  },\n  (month: number) => MONTHS[month - 1],\n  [{ start: 1, end: 12, step: 1 }], // default to *\n  [{ start: 1, end: 12, step: 1 }]\n);\n\nconst [encodeYear, decodeYear] = makeCalendarSpecFieldCoders(\n  'year',\n  (x: number) => (typeof x === 'number' ? x : undefined),\n  (x: number) => x,\n  [], // default to *\n  [] // special case: * for years is encoded as no range at all\n);\n\nconst [encodeDayOfWeek, decodeDayOfWeek] = makeCalendarSpecFieldCoders(\n  'dayOfWeek',\n  function dayOfWeekNameToNumber(day: DayOfWeek): number | undefined {\n    const index = DAYS_OF_WEEK.indexOf(day);\n    return index >= 0 ? index : undefined;\n  },\n  (day: number) => DAYS_OF_WEEK[day],\n  [{ start: 0, end: 6, step: 1 }], // default to *\n  [{ start: 0, end: 6, step: 1 }]\n);\n\nfunction makeCalendarSpecFieldCoders<Unit>(\n  fieldName: string,\n  encodeValueFn: (x: Unit) => number | undefined,\n  decodeValueFn: (x: number) => Unit | undefined,\n  defaultValue: temporal.api.schedule.v1.IRange[],\n  matchAllValue: temporal.api.schedule.v1.IRange[]\n) {\n  function encoder(\n    input: LooseRange<Unit> | LooseRange<Unit>[] | '*' | undefined\n  ): temporal.api.schedule.v1.IRange[] | undefined {\n    if (input === undefined) return defaultValue;\n    if (input === '*') return matchAllValue;\n\n    return (Array.isArray(input) ? input : [input]).map((item) => {\n      if (typeof item === 'object' && (item as Range<Unit>).start !== undefined) {\n        const range = item as Range<Unit>;\n        const start = encodeValueFn(range.start);\n        if (start !== undefined) {\n          return {\n            start,\n            end: range.end !== undefined ? encodeValueFn(range.end) ?? start : 1,\n            step: typeof range.step === 'number' && range.step > 0 ? range.step : 1,\n          };\n        }\n      }\n      if (item !== undefined) {\n        const value = encodeValueFn(item as Unit);\n        if (value !== undefined) return { start: value, end: value, step: 1 };\n      }\n      throw new TypeError(`Invalid CalendarSpec component for field ${fieldName}: '${item}' of type '${typeof item}'`);\n    });\n  }\n\n  function decoder(input: temporal.api.schedule.v1.IRange[] | undefined | null): Range<Unit>[] {\n    if (!input) return [];\n    return (input as temporal.api.schedule.v1.Range[]).map((pb): Range<Unit> => {\n      const start = decodeValueFn(pb.start);\n      if (start === undefined) {\n        throw new RangeError(`Invalid CalendarSpec component for field ${fieldName}: ${pb.start} is out of bounds`);\n      }\n      const end = pb.end > pb.start ? decodeValueFn(pb.end) ?? start : start;\n      const step = pb.step > 0 ? pb.step : 1;\n      return { start, end, step };\n    });\n  }\n\n  return [encoder, decoder] as const;\n}\n\nexport function encodeOptionalStructuredCalendarSpecs(\n  input: CalendarSpec[] | null | undefined\n): temporal.api.schedule.v1.IStructuredCalendarSpec[] | undefined {\n  if (!input) return undefined;\n  return input.map((spec) => ({\n    second: encodeSecond(spec.second),\n    minute: encodeMinute(spec.minute),\n    hour: encodeHour(spec.hour),\n    dayOfMonth: encodeDayOfMonth(spec.dayOfMonth),\n    month: encodeMonth(spec.month),\n    year: encodeYear(spec.year),\n    dayOfWeek: encodeDayOfWeek(spec.dayOfWeek),\n    comment: spec.comment,\n  }));\n}\n\nexport function decodeOptionalStructuredCalendarSpecs(\n  input: temporal.api.schedule.v1.IStructuredCalendarSpec[] | null | undefined\n): CalendarSpecDescription[] {\n  if (!input) return [];\n\n  return (input as temporal.api.schedule.v1.StructuredCalendarSpec[]).map(\n    (pb): CalendarSpecDescription => ({\n      second: decodeSecond(pb.second),\n      minute: decodeMinue(pb.minute),\n      hour: decodeHour(pb.hour),\n      dayOfMonth: decodeDayOfMonth(pb.dayOfMonth),\n      month: decodeMonth(pb.month),\n      year: decodeYear(pb.year),\n      dayOfWeek: decodeDayOfWeek(pb.dayOfWeek),\n      comment: pb.comment,\n    })\n  );\n}\n\nexport function compileScheduleOptions(options: ScheduleOptions): CompiledScheduleOptions {\n  const workflowType = extractWorkflowType(options.action.workflowType);\n  return {\n    ...options,\n    action: {\n      ...options.action,\n      workflowId: options.action.workflowId ?? `${options.scheduleId}-workflow`,\n      workflowType,\n      args: (options.action.args ?? []) as unknown[],\n    },\n  };\n}\n\nexport function compileUpdatedScheduleOptions(\n  scheduleId: string,\n  options: ScheduleUpdateOptions\n): CompiledScheduleUpdateOptions {\n  const workflowTypeOrFunc = options.action.workflowType;\n  const workflowType = extractWorkflowType(workflowTypeOrFunc);\n  return {\n    ...options,\n    action: {\n      ...options.action,\n      workflowId: options.action.workflowId ?? `${scheduleId}-workflow`,\n      workflowType,\n      args: (options.action.args ?? []) as unknown[],\n    },\n  };\n}\n\nexport function encodeScheduleSpec(spec: ScheduleSpec): temporal.api.schedule.v1.IScheduleSpec {\n  return {\n    structuredCalendar: encodeOptionalStructuredCalendarSpecs(spec.calendars),\n    interval: spec.intervals?.map((interval) => ({\n      interval: msToTs(interval.every),\n      phase: msOptionalToTs(interval.offset),\n    })),\n    cronString: spec.cronExpressions,\n    excludeStructuredCalendar: encodeOptionalStructuredCalendarSpecs(spec.skip),\n    startTime: optionalDateToTs(spec.startAt),\n    endTime: optionalDateToTs(spec.endAt),\n    jitter: msOptionalToTs(spec.jitter),\n    timezoneName: spec.timezone,\n  };\n}\n\nfunction workflowSerializationContext(namespace: string, workflowId: string): WorkflowSerializationContext {\n  return {\n    type: 'workflow',\n    namespace,\n    workflowId,\n  };\n}\n\nexport async function encodeScheduleAction(\n  dataConverter: LoadedDataConverter,\n  namespace: string,\n  action: CompiledScheduleAction,\n  headers: Headers\n): Promise<temporal.api.schedule.v1.IScheduleAction> {\n  const context = workflowSerializationContext(namespace, action.workflowId);\n  return {\n    startWorkflow: {\n      workflowId: action.workflowId,\n      workflowType: {\n        name: action.workflowType,\n      },\n      input: { payloads: await encodeToPayloadsWithContext(dataConverter, context, action.args) },\n      taskQueue: {\n        kind: temporal.api.enums.v1.TaskQueueKind.TASK_QUEUE_KIND_NORMAL,\n        name: action.taskQueue,\n      },\n      workflowExecutionTimeout: msOptionalToTs(action.workflowExecutionTimeout),\n      workflowRunTimeout: msOptionalToTs(action.workflowRunTimeout),\n      workflowTaskTimeout: msOptionalToTs(action.workflowTaskTimeout),\n      retryPolicy: action.retry ? compileRetryPolicy(action.retry) : undefined,\n      memo: action.memo ? { fields: await encodeMapToPayloads(dataConverter, action.memo, context) } : undefined,\n      searchAttributes:\n        action.searchAttributes || action.typedSearchAttributes\n          ? {\n              indexedFields: encodeUnifiedSearchAttributes(action.searchAttributes, action.typedSearchAttributes),\n            }\n          : undefined,\n      header: { fields: headers },\n      userMetadata: await encodeUserMetadata(dataConverter, action.staticSummary, action.staticDetails, context),\n      priority: action.priority ? compilePriority(action.priority) : undefined,\n    },\n  };\n}\n\nexport function encodeSchedulePolicies(\n  policies?: ScheduleOptions['policies']\n): temporal.api.schedule.v1.ISchedulePolicies {\n  return {\n    catchupWindow: msOptionalToTs(policies?.catchupWindow),\n    overlapPolicy: policies?.overlap ? encodeScheduleOverlapPolicy(policies.overlap) : undefined,\n    pauseOnFailure: policies?.pauseOnFailure,\n  };\n}\n\nexport function encodeScheduleState(state?: ScheduleOptions['state']): temporal.api.schedule.v1.IScheduleState {\n  return {\n    paused: state?.paused,\n    notes: state?.note,\n    limitedActions: state?.remainingActions !== undefined,\n    remainingActions: state?.remainingActions ? Long.fromNumber(state?.remainingActions) : undefined,\n  };\n}\n\nexport function decodeScheduleSpec(pb: temporal.api.schedule.v1.IScheduleSpec): ScheduleSpecDescription {\n  // Note: the server will have compiled calendar and cron_string fields into\n  // structured_calendar (and maybe interval and timezone_name), so at this\n  // point, we'll see only structured_calendar, interval, etc.\n  return {\n    calendars: decodeOptionalStructuredCalendarSpecs(pb.structuredCalendar),\n    intervals: (pb.interval ?? []).map(\n      (x) =>\n        <IntervalSpecDescription>{\n          every: optionalTsToMs(x.interval),\n          offset: optionalTsToMs(x.phase),\n        }\n    ),\n    skip: decodeOptionalStructuredCalendarSpecs(pb.excludeStructuredCalendar),\n    startAt: optionalTsToDate(pb.startTime),\n    endAt: optionalTsToDate(pb.endTime),\n    jitter: optionalTsToMs(pb.jitter),\n    timezone: pb.timezoneName ?? undefined,\n  };\n}\n\nexport async function decodeScheduleAction(\n  dataConverter: LoadedDataConverter,\n  namespace: string,\n  pb: temporal.api.schedule.v1.IScheduleAction\n): Promise<ScheduleDescriptionAction> {\n  if (pb.startWorkflow) {\n    const context = workflowSerializationContext(namespace, pb.startWorkflow.workflowId!);\n    const { staticSummary, staticDetails } = await decodeUserMetadata(\n      dataConverter,\n      pb.startWorkflow?.userMetadata,\n      context\n    );\n    return {\n      type: 'startWorkflow',\n\n      workflowId: pb.startWorkflow.workflowId!,\n\n      workflowType: pb.startWorkflow.workflowType!.name!,\n\n      taskQueue: pb.startWorkflow.taskQueue!.name!,\n      args: await decodeArrayFromPayloads(dataConverter, pb.startWorkflow.input?.payloads, context),\n      memo: await decodeMapFromPayloads(dataConverter, pb.startWorkflow.memo?.fields, context),\n      retry: decompileRetryPolicy(pb.startWorkflow.retryPolicy),\n      searchAttributes: decodeSearchAttributes(pb.startWorkflow.searchAttributes?.indexedFields),\n      typedSearchAttributes: decodeTypedSearchAttributes(pb.startWorkflow.searchAttributes?.indexedFields),\n      workflowExecutionTimeout: optionalTsToMs(pb.startWorkflow.workflowExecutionTimeout),\n      workflowRunTimeout: optionalTsToMs(pb.startWorkflow.workflowRunTimeout),\n      workflowTaskTimeout: optionalTsToMs(pb.startWorkflow.workflowTaskTimeout),\n      staticSummary,\n      staticDetails,\n      priority: decodePriority(pb.startWorkflow.priority),\n    };\n  }\n  throw new TypeError('Unsupported schedule action');\n}\n\nexport function decodeScheduleRunningActions(\n  pb?: temporal.api.common.v1.IWorkflowExecution[] | null\n): ScheduleExecutionStartWorkflowActionResult[] {\n  if (!pb) return [];\n  return pb.map(\n    (x): ScheduleExecutionStartWorkflowActionResult => ({\n      type: 'startWorkflow',\n      workflow: {\n        workflowId: x.workflowId!,\n\n        firstExecutionRunId: x.runId!,\n      },\n    })\n  );\n}\n\nexport function decodeScheduleRecentActions(\n  pb?: temporal.api.schedule.v1.IScheduleActionResult[] | null\n): ScheduleExecutionResult[] {\n  if (!pb) return [];\n  return (pb as Required<temporal.api.schedule.v1.IScheduleActionResult>[]).map(\n    (executionResult): ScheduleExecutionResult => {\n      let action: ScheduleExecutionActionResult | undefined;\n      if (executionResult.startWorkflowResult) {\n        action = {\n          type: 'startWorkflow',\n          workflow: {\n            workflowId: executionResult.startWorkflowResult!.workflowId!,\n\n            firstExecutionRunId: executionResult.startWorkflowResult!.runId!,\n          },\n        };\n      } else throw new TypeError('Unsupported schedule action');\n\n      return {\n        scheduledAt: requiredTsToDate(executionResult.scheduleTime, 'scheduleTime'),\n        takenAt: requiredTsToDate(executionResult.actualTime, 'actualTime'),\n        action,\n      };\n    }\n  );\n}\n","import { randomUUID } from 'node:crypto';\nimport { status as grpcStatus } from '@grpc/grpc-js';\nimport type { Workflow } from '@temporalio/common';\nimport {\n  decodeSearchAttributes,\n  decodeTypedSearchAttributes,\n  encodeUnifiedSearchAttributes,\n} from '@temporalio/common/lib/converter/payload-search-attributes';\nimport type { Headers } from '@temporalio/common/lib/interceptors';\nimport { composeInterceptors } from '@temporalio/common/lib/interceptors';\nimport { encodeMapToPayloads, decodeMapFromPayloads } from '@temporalio/common/lib/internal-non-workflow';\nimport { filterNullAndUndefined } from '@temporalio/common/lib/internal-workflow';\nimport { temporal } from '@temporalio/proto';\nimport {\n  optionalDateToTs,\n  optionalTsToDate,\n  optionalTsToMs,\n  requiredTsToDate,\n  tsToDate,\n} from '@temporalio/common/lib/time';\nimport { SymbolBasedInstanceOfError } from '@temporalio/common/lib/type-helpers';\nimport type { CreateScheduleInput, CreateScheduleOutput, ScheduleClientInterceptor } from './interceptors';\nimport type { WorkflowService } from './types';\nimport { isGrpcServiceError, ServiceError } from './errors';\nimport type {\n  Backfill,\n  CompiledScheduleUpdateOptions,\n  ScheduleSummary,\n  ScheduleDescription,\n  ScheduleOptions,\n  ScheduleUpdateOptions,\n  ScheduleOptionsAction,\n  ScheduleOptionsStartWorkflowAction,\n} from './schedule-types';\nimport { ScheduleOverlapPolicy, encodeScheduleOverlapPolicy, decodeScheduleOverlapPolicy } from './schedule-types';\nimport {\n  compileScheduleOptions,\n  compileUpdatedScheduleOptions,\n  decodeScheduleAction,\n  decodeScheduleRecentActions,\n  decodeScheduleRunningActions,\n  decodeScheduleSpec,\n  encodeScheduleAction,\n  encodeSchedulePolicies,\n  encodeScheduleSpec,\n  encodeScheduleState,\n} from './schedule-helpers';\nimport type { BaseClientOptions, LoadedWithDefaults, WithDefaults } from './base-client';\nimport { BaseClient, defaultBaseClientOptions } from './base-client';\nimport { rethrowKnownErrorTypes } from './helpers';\n\n/**\n * Handle to a single Schedule\n */\nexport interface ScheduleHandle {\n  /**\n   * This Schedule's identifier\n   */\n  readonly scheduleId: string;\n\n  /**\n   * Fetch the Schedule's description from the Server\n   */\n  describe(): Promise<ScheduleDescription>;\n\n  /**\n   * Update the Schedule\n   *\n   * This function calls `.describe()`, provides the `Schedule` to the provided `updateFn`, and\n   * sends the returned `UpdatedSchedule` to the Server to update the Schedule definition. Note that,\n   * in the future, `updateFn` might be invoked multiple time, with identical or different input.\n   */\n  update<W extends Workflow = Workflow>(\n    updateFn: (previous: ScheduleDescription) => ScheduleUpdateOptions<ScheduleOptionsStartWorkflowAction<W>>\n  ): Promise<void>;\n\n  /**\n   * Delete the Schedule\n   */\n  delete(): Promise<void>;\n\n  /**\n   * Trigger an Action to be taken immediately\n   *\n   * @param overlap Override the Overlap Policy for this one trigger. Defaults to {@link ScheduleOverlapPolicy.ALLOW_ALL}.\n   */\n  trigger(overlap?: ScheduleOverlapPolicy): Promise<void>;\n\n  /**\n   * Run though the specified time period(s) and take Actions as if that time passed by right now, all at once.\n   * The Overlap Policy can be overridden for the scope of the Backfill.\n   */\n  backfill(options: Backfill | Backfill[]): Promise<void>;\n\n  /**\n   * Pause the Schedule\n   *\n   * @param note A new {@link ScheduleDescription.note}. Defaults to `\"Paused via TypeScript SDK\"`\n   */\n  pause(note?: string): Promise<void>;\n\n  /**\n   * Unpause the Schedule\n   *\n   * @param note A new {@link ScheduleDescription.note}. Defaults to `\"Unpaused via TypeScript SDK\"\n   */\n  unpause(note?: string): Promise<void>;\n\n  /**\n   * Readonly accessor to the underlying ScheduleClient\n   */\n  readonly client: ScheduleClient;\n}\n\nexport interface ScheduleClientOptions extends BaseClientOptions {\n  /**\n   * Used to override and extend default Connection functionality\n   *\n   * Useful for injecting auth headers and tracing Workflow executions\n   */\n  interceptors?: ScheduleClientInterceptor[];\n}\n\nexport type LoadedScheduleClientOptions = LoadedWithDefaults<ScheduleClientOptions>;\n\nfunction defaultScheduleClientOptions(): WithDefaults<ScheduleClientOptions> {\n  return {\n    ...defaultBaseClientOptions(),\n    interceptors: [],\n  };\n}\n\nfunction assertRequiredScheduleOptions(opts: ScheduleOptions, action: 'CREATE'): void;\nfunction assertRequiredScheduleOptions(opts: ScheduleUpdateOptions, action: 'UPDATE'): void;\nfunction assertRequiredScheduleOptions(\n  opts: ScheduleOptions | ScheduleUpdateOptions,\n  action: 'CREATE' | 'UPDATE'\n): void {\n  const structureName = action === 'CREATE' ? 'ScheduleOptions' : 'ScheduleUpdateOptions';\n  if (action === 'CREATE' && !(opts as ScheduleOptions).scheduleId) {\n    throw new TypeError(`Missing ${structureName}.scheduleId`);\n  }\n  switch (opts.action.type) {\n    case 'startWorkflow':\n      if (!opts.action.taskQueue) {\n        throw new TypeError(`Missing ${structureName}.action.taskQueue for 'startWorkflow' action`);\n      }\n      if (!opts.action.workflowType) {\n        throw new TypeError(`Missing ${structureName}.action.workflowType for 'startWorkflow' action`);\n      }\n  }\n}\n\nexport interface ListScheduleOptions {\n  /**\n   * How many results to fetch from the Server at a time.\n   * @default 1000\n   */\n  pageSize?: number;\n  /**\n   * Filter schedules by a query string.\n   */\n  query?: string;\n}\n\n/**\n * Client for starting Workflow executions and creating Workflow handles\n */\nexport class ScheduleClient extends BaseClient {\n  public readonly options: LoadedScheduleClientOptions;\n\n  constructor(options?: ScheduleClientOptions) {\n    super(options);\n    this.options = {\n      ...defaultScheduleClientOptions(),\n      ...filterNullAndUndefined(options ?? {}),\n      loadedDataConverter: this.dataConverter,\n    };\n  }\n\n  /**\n   * Raw gRPC access to the Temporal service. Schedule-related methods are included in {@link WorkflowService}.\n   *\n   * **NOTE**: The namespace provided in {@link options} is **not** automatically set on requests made to the service.\n   */\n  get workflowService(): WorkflowService {\n    return this.connection.workflowService;\n  }\n\n  /**\n   * Create a new Schedule.\n   *\n   * @throws {@link ScheduleAlreadyRunning} if there's a running (not deleted) Schedule with the given `id`\n   * @returns a ScheduleHandle to the created Schedule\n   */\n  public async create<W extends Workflow = Workflow>(\n    options: ScheduleOptions<ScheduleOptionsStartWorkflowAction<W>>\n  ): Promise<ScheduleHandle>;\n  public async create<A extends ScheduleOptionsAction>(options: ScheduleOptions<A>): Promise<ScheduleHandle> {\n    await this._createSchedule(options);\n    return this.getHandle(options.scheduleId);\n  }\n\n  /**\n   * Create a new Schedule.\n   */\n  protected async _createSchedule(options: ScheduleOptions): Promise<void> {\n    assertRequiredScheduleOptions(options, 'CREATE');\n    const compiledOptions = compileScheduleOptions(options);\n\n    const create = composeInterceptors(this.options.interceptors, 'create', this._createScheduleHandler.bind(this));\n    await create({\n      options: compiledOptions,\n      headers: {},\n    });\n  }\n\n  /**\n   * Create a new Schedule.\n   */\n  protected async _createScheduleHandler(input: CreateScheduleInput): Promise<CreateScheduleOutput> {\n    const { options: opts, headers } = input;\n    const { identity } = this.options;\n    const req: temporal.api.workflowservice.v1.ICreateScheduleRequest = {\n      namespace: this.options.namespace,\n      identity,\n      requestId: randomUUID(),\n      scheduleId: opts.scheduleId,\n      schedule: {\n        spec: encodeScheduleSpec(opts.spec),\n        action: await encodeScheduleAction(this.dataConverter, this.options.namespace, opts.action, headers),\n        policies: encodeSchedulePolicies(opts.policies),\n        state: encodeScheduleState(opts.state),\n      },\n      memo: opts.memo ? { fields: await encodeMapToPayloads(this.dataConverter, opts.memo) } : undefined,\n      searchAttributes:\n        opts.searchAttributes || opts.typedSearchAttributes\n          ? {\n              indexedFields: encodeUnifiedSearchAttributes(opts.searchAttributes, opts.typedSearchAttributes),\n            }\n          : undefined,\n      initialPatch: {\n        triggerImmediately: opts.state?.triggerImmediately\n          ? { overlapPolicy: temporal.api.enums.v1.ScheduleOverlapPolicy.SCHEDULE_OVERLAP_POLICY_ALLOW_ALL }\n          : undefined,\n        backfillRequest: opts.state?.backfill\n          ? opts.state.backfill.map((x) => ({\n              startTime: optionalDateToTs(x.start),\n              endTime: optionalDateToTs(x.end),\n              overlapPolicy: x.overlap ? encodeScheduleOverlapPolicy(x.overlap) : undefined,\n            }))\n          : undefined,\n      },\n    };\n    try {\n      const res = await this.workflowService.createSchedule(req);\n      return { conflictToken: res.conflictToken };\n    } catch (err: any) {\n      if (err.code === grpcStatus.ALREADY_EXISTS) {\n        throw new ScheduleAlreadyRunning('Schedule already exists and is running', opts.scheduleId);\n      }\n      this.rethrowGrpcError(err, 'Failed to create schedule', opts.scheduleId);\n    }\n  }\n\n  /**\n   * Describe a Schedule.\n   */\n  protected async _describeSchedule(\n    scheduleId: string\n  ): Promise<temporal.api.workflowservice.v1.IDescribeScheduleResponse> {\n    try {\n      return await this.workflowService.describeSchedule({\n        namespace: this.options.namespace,\n        scheduleId,\n      });\n    } catch (err: any) {\n      this.rethrowGrpcError(err, 'Failed to describe schedule', scheduleId);\n    }\n  }\n\n  /**\n   * Update a Schedule.\n   */\n  protected async _updateSchedule(\n    scheduleId: string,\n    opts: CompiledScheduleUpdateOptions,\n    header: Headers\n  ): Promise<temporal.api.workflowservice.v1.IUpdateScheduleResponse> {\n    const req = {\n      namespace: this.options.namespace,\n      scheduleId,\n      schedule: {\n        spec: encodeScheduleSpec(opts.spec),\n        action: await encodeScheduleAction(this.dataConverter, this.options.namespace, opts.action, header),\n        policies: encodeSchedulePolicies(opts.policies),\n        state: encodeScheduleState(opts.state),\n      },\n      identity: this.options.identity,\n      requestId: randomUUID(),\n      searchAttributes:\n        opts.searchAttributes || opts.typedSearchAttributes\n          ? {\n              indexedFields: encodeUnifiedSearchAttributes(opts.searchAttributes, opts.typedSearchAttributes),\n            }\n          : undefined,\n    };\n    try {\n      return await this.workflowService.updateSchedule(req);\n    } catch (err: any) {\n      this.rethrowGrpcError(err, 'Failed to update schedule', scheduleId);\n    }\n  }\n\n  /**\n   * Patch a Schedule.\n   */\n  protected async _patchSchedule(\n    scheduleId: string,\n    patch: temporal.api.schedule.v1.ISchedulePatch\n  ): Promise<temporal.api.workflowservice.v1.IPatchScheduleResponse> {\n    try {\n      return await this.workflowService.patchSchedule({\n        namespace: this.options.namespace,\n        scheduleId,\n        identity: this.options.identity,\n        requestId: randomUUID(),\n        patch,\n      });\n    } catch (err: any) {\n      this.rethrowGrpcError(err, 'Failed to patch schedule', scheduleId);\n    }\n  }\n\n  /**\n   * Delete a Schedule.\n   */\n  protected async _deleteSchedule(\n    scheduleId: string\n  ): Promise<temporal.api.workflowservice.v1.IDeleteScheduleResponse> {\n    try {\n      return await this.workflowService.deleteSchedule({\n        namespace: this.options.namespace,\n        identity: this.options.identity,\n        scheduleId,\n      });\n    } catch (err: any) {\n      this.rethrowGrpcError(err, 'Failed to delete schedule', scheduleId);\n    }\n  }\n\n  /**\n   * List Schedules with an `AsyncIterator`:\n   *\n   * ```ts\n   * for await (const schedule: Schedule of client.list()) {\n   *   const { id, memo, searchAttributes } = schedule\n   *   // ...\n   * }\n   * ```\n   *\n   * To list one page at a time, instead use the raw gRPC method {@link WorkflowService.listSchedules}:\n   *\n   * ```ts\n   * await { schedules, nextPageToken } = client.scheduleService.listSchedules()\n   * ```\n   */\n  public async *list(options?: ListScheduleOptions): AsyncIterable<ScheduleSummary> {\n    let nextPageToken: Uint8Array | undefined = undefined;\n    for (;;) {\n      let response: temporal.api.workflowservice.v1.ListSchedulesResponse;\n      try {\n        response = await this.workflowService.listSchedules({\n          nextPageToken,\n          namespace: this.options.namespace,\n          maximumPageSize: options?.pageSize,\n          query: options?.query,\n        });\n      } catch (e) {\n        this.rethrowGrpcError(e, 'Failed to list schedules', undefined);\n      }\n\n      for (const raw of response.schedules ?? []) {\n        yield <ScheduleSummary>{\n          scheduleId: raw.scheduleId,\n\n          spec: decodeScheduleSpec(raw.info?.spec ?? {}),\n          action: raw.info?.workflowType && {\n            type: 'startWorkflow',\n            workflowType: raw.info.workflowType.name,\n          },\n          memo: await decodeMapFromPayloads(this.dataConverter, raw.memo?.fields),\n          searchAttributes: decodeSearchAttributes(raw.searchAttributes?.indexedFields),\n          typedSearchAttributes: decodeTypedSearchAttributes(raw.searchAttributes?.indexedFields),\n          state: {\n            paused: raw.info?.paused === true,\n            note: raw.info?.notes ?? undefined,\n          },\n          info: {\n            recentActions: decodeScheduleRecentActions(raw.info?.recentActions),\n            nextActionTimes: raw.info?.futureActionTimes?.map(tsToDate) ?? [],\n          },\n        };\n      }\n\n      if (response.nextPageToken == null || response.nextPageToken.length === 0) break;\n      nextPageToken = response.nextPageToken;\n    }\n  }\n\n  /**\n   * Get a handle to a Schedule\n   *\n   * This method does not validate `scheduleId`. If there is no Schedule with the given `scheduleId`, handle\n   * methods like `handle.describe()` will throw a {@link ScheduleNotFoundError} error.\n   */\n  public getHandle(scheduleId: string): ScheduleHandle {\n    return {\n      client: this,\n      scheduleId,\n\n      async describe(): Promise<ScheduleDescription> {\n        const raw = await this.client._describeSchedule(this.scheduleId);\n        if (!raw.schedule?.spec || !raw.schedule.action)\n          throw new Error('Received invalid Schedule description from server');\n        return {\n          scheduleId,\n          spec: decodeScheduleSpec(raw.schedule.spec),\n          action: await decodeScheduleAction(\n            this.client.dataConverter,\n            this.client.options.namespace,\n            raw.schedule.action\n          ),\n          memo: await decodeMapFromPayloads(this.client.dataConverter, raw.memo?.fields),\n          searchAttributes: decodeSearchAttributes(raw.searchAttributes?.indexedFields),\n          typedSearchAttributes: decodeTypedSearchAttributes(raw.searchAttributes?.indexedFields),\n          policies: {\n            // 'overlap' should never be missing on describe, as the server will replace UNSPECIFIED by an actual value\n            overlap: decodeScheduleOverlapPolicy(raw.schedule.policies?.overlapPolicy) ?? ScheduleOverlapPolicy.SKIP,\n            catchupWindow: optionalTsToMs(raw.schedule.policies?.catchupWindow) ?? 60_000,\n            pauseOnFailure: raw.schedule.policies?.pauseOnFailure === true,\n          },\n          state: {\n            paused: raw.schedule.state?.paused === true,\n            note: raw.schedule.state?.notes ?? undefined,\n            remainingActions: raw.schedule.state?.limitedActions\n              ? raw.schedule.state?.remainingActions?.toNumber() || 0\n              : undefined,\n          },\n          info: {\n            recentActions: decodeScheduleRecentActions(raw.info?.recentActions),\n            nextActionTimes: raw.info?.futureActionTimes?.map(tsToDate) ?? [],\n            createdAt: requiredTsToDate(raw.info?.createTime, 'createTime'),\n            lastUpdatedAt: optionalTsToDate(raw.info?.updateTime),\n            runningActions: decodeScheduleRunningActions(raw.info?.runningWorkflows),\n            numActionsMissedCatchupWindow: raw.info?.missedCatchupWindow?.toNumber() ?? 0,\n            numActionsSkippedOverlap: raw.info?.overlapSkipped?.toNumber() ?? 0,\n            numActionsTaken: raw.info?.actionCount?.toNumber() ?? 0,\n          },\n          raw,\n        };\n      },\n\n      async update(updateFn): Promise<void> {\n        const current = await this.describe();\n        // Keep existing headers\n        const currentHeader: Headers = current.raw.schedule?.action?.startWorkflow?.header?.fields ?? {};\n        const updated = updateFn(current);\n        assertRequiredScheduleOptions(updated, 'UPDATE');\n        await this.client._updateSchedule(\n          scheduleId,\n          compileUpdatedScheduleOptions(scheduleId, updated),\n          currentHeader\n        );\n      },\n\n      async delete(): Promise<void> {\n        await this.client._deleteSchedule(this.scheduleId);\n      },\n\n      async pause(note?: string): Promise<void> {\n        await this.client._patchSchedule(this.scheduleId, {\n          pause: note ?? 'Paused via TypeScript SDK\"',\n        });\n      },\n\n      async unpause(note?): Promise<void> {\n        await this.client._patchSchedule(this.scheduleId, {\n          unpause: note ?? 'Unpaused via TypeScript SDK\"',\n        });\n      },\n\n      async trigger(overlap?): Promise<void> {\n        await this.client._patchSchedule(this.scheduleId, {\n          triggerImmediately: {\n            overlapPolicy: overlap\n              ? encodeScheduleOverlapPolicy(overlap)\n              : temporal.api.enums.v1.ScheduleOverlapPolicy.SCHEDULE_OVERLAP_POLICY_ALLOW_ALL,\n          },\n        });\n      },\n\n      async backfill(options): Promise<void> {\n        const backfills = Array.isArray(options) ? options : [options];\n        await this.client._patchSchedule(this.scheduleId, {\n          backfillRequest: backfills.map((x) => ({\n            startTime: optionalDateToTs(x.start),\n            endTime: optionalDateToTs(x.end),\n            overlapPolicy: x.overlap ? encodeScheduleOverlapPolicy(x.overlap) : undefined,\n          })),\n        });\n      },\n    };\n  }\n\n  protected rethrowGrpcError(err: unknown, fallbackMessage: string, scheduleId?: string): never {\n    if (isGrpcServiceError(err)) {\n      rethrowKnownErrorTypes(err);\n\n      if (err.code === grpcStatus.NOT_FOUND) {\n        throw new ScheduleNotFoundError(err.details ?? 'Schedule not found', scheduleId ?? '');\n      }\n      if (\n        err.code === grpcStatus.INVALID_ARGUMENT &&\n        err.message.match(/^3 INVALID_ARGUMENT: Invalid schedule spec: /)\n      ) {\n        throw new TypeError(err.message.replace(/^3 INVALID_ARGUMENT: Invalid schedule spec: /, ''));\n      }\n\n      throw new ServiceError(fallbackMessage, { cause: err });\n    }\n    throw new ServiceError('Unexpected error while making gRPC request', { cause: err as Error });\n  }\n}\n\n/**\n * Thrown from {@link ScheduleClient.create} if there's a running (not deleted) Schedule with the given `id`.\n */\n@SymbolBasedInstanceOfError('ScheduleAlreadyRunning')\nexport class ScheduleAlreadyRunning extends Error {\n  constructor(\n    message: string,\n    public readonly scheduleId: string\n  ) {\n    super(message);\n  }\n}\n\n/**\n * Thrown when a Schedule with the given Id is not known to Temporal Server.\n * It could be because:\n * - Id passed is incorrect\n * - Schedule was deleted\n */\n@SymbolBasedInstanceOfError('ScheduleNotFoundError')\nexport class ScheduleNotFoundError extends Error {\n  constructor(\n    message: string,\n    public readonly scheduleId: string\n  ) {\n    super(message);\n  }\n}\n","import type {\n  CommonWorkflowOptions,\n  SignalDefinition,\n  WithWorkflowArgs,\n  Workflow,\n  VersioningOverride,\n} from '@temporalio/common';\nimport { toCanonicalString } from '@temporalio/common';\nimport type { Duration } from '@temporalio/common/lib/time';\nimport { msOptionalToTs } from '@temporalio/common/lib/time';\nimport type { Replace } from '@temporalio/common/lib/type-helpers';\nimport type { google } from '@temporalio/proto';\nimport { temporal } from '@temporalio/proto';\n\nexport * from '@temporalio/common/lib/workflow-options';\n\nexport interface CompiledWorkflowOptions extends WithCompiledWorkflowOptions<WorkflowOptions> {\n  args: unknown[];\n}\n\nexport interface WorkflowOptions extends CommonWorkflowOptions {\n  /**\n   * Workflow id to use when starting.\n   *\n   * Assign a meaningful business id.\n   * This ID can be used to ensure starting Workflows is idempotent.\n   * Workflow IDs are unique: see {@link WorkflowOptions.workflowIdReusePolicy}\n   * and {@link WorkflowOptions.workflowIdConflictPolicy}.\n   */\n  workflowId: string;\n\n  /**\n   * Task queue to use for Workflow tasks. It should match a task queue specified when creating a\n   * `Worker` that hosts the Workflow code.\n   */\n  taskQueue: string;\n\n  /**\n   * If set to true, instructs the client to follow the chain of execution before returning a Workflow's result.\n   *\n   * Workflow execution is chained if the Workflow has a cron schedule or continues-as-new or configured to retry\n   * after failure or timeout.\n   *\n   * @default true\n   */\n  followRuns?: boolean;\n\n  /**\n   * Amount of time to wait before starting the workflow.\n   */\n  startDelay?: Duration;\n\n  /**\n   * Override the versioning behavior of the Workflow that is about to be started.\n   */\n  versioningOverride?: VersioningOverride;\n\n  /**\n   * Potentially reduce the latency to start this workflow by requesting that the server\n   * start it on a local worker running with this same client.\n   */\n  requestEagerStart?: boolean;\n}\n\nexport type WithCompiledWorkflowOptions<T extends WorkflowOptions> = Replace<\n  T,\n  {\n    workflowExecutionTimeout?: google.protobuf.IDuration;\n    workflowRunTimeout?: google.protobuf.IDuration;\n    workflowTaskTimeout?: google.protobuf.IDuration;\n    startDelay?: google.protobuf.IDuration;\n    versioningOverride?: temporal.api.workflow.v1.IVersioningOverride;\n  }\n>;\n\nexport function compileWorkflowOptions<T extends WorkflowOptions>(options: T): WithCompiledWorkflowOptions<T> {\n  const { workflowExecutionTimeout, workflowRunTimeout, workflowTaskTimeout, startDelay, versioningOverride, ...rest } =\n    options;\n\n  return {\n    ...rest,\n    workflowExecutionTimeout: msOptionalToTs(workflowExecutionTimeout),\n    workflowRunTimeout: msOptionalToTs(workflowRunTimeout),\n    workflowTaskTimeout: msOptionalToTs(workflowTaskTimeout),\n    startDelay: msOptionalToTs(startDelay),\n    versioningOverride: versioningOverrideToProto(versioningOverride),\n  };\n}\n\nexport interface WorkflowUpdateOptions {\n  /**\n   * The Update Id, which is a unique-per-Workflow-Execution identifier for this Update.\n   *\n   * We recommend setting it to a meaningful business ID or idempotency key (like a request ID) passed from upstream. If\n   * it is not provided, it will be set to a random string by the Client. If the Server receives two Updates with the\n   * same Update Id to a Workflow Execution with the same Run Id, the second Update will return a handle to the first\n   * Update.\n   */\n  readonly updateId?: string;\n}\n\nexport type WorkflowSignalWithStartOptions<SignalArgs extends any[] = []> = SignalArgs extends [any, ...any[]]\n  ? WorkflowSignalWithStartOptionsWithArgs<SignalArgs>\n  : WorkflowSignalWithStartOptionsWithoutArgs<SignalArgs>;\n\nexport interface WorkflowSignalWithStartOptionsWithoutArgs<SignalArgs extends any[]>\n  extends Omit<WorkflowOptions, 'requestEagerStart'> {\n  /**\n   * SignalDefinition or name of signal\n   */\n  signal: SignalDefinition<SignalArgs> | string;\n\n  /**\n   * Arguments to invoke the signal handler with\n   */\n  signalArgs?: SignalArgs;\n}\n\nexport interface WorkflowSignalWithStartOptionsWithArgs<SignalArgs extends any[]>\n  extends Omit<WorkflowOptions, 'requestEagerStart'> {\n  /**\n   * SignalDefinition or name of signal\n   */\n  signal: SignalDefinition<SignalArgs> | string;\n\n  /**\n   * Arguments to invoke the signal handler with\n   */\n  signalArgs: SignalArgs;\n}\n\n/**\n * Options for starting a Workflow\n */\nexport type WorkflowStartOptions<T extends Workflow = Workflow> = WithWorkflowArgs<T, WorkflowOptions>;\n\nfunction versioningOverrideToProto(\n  vo: VersioningOverride | undefined\n): temporal.api.workflow.v1.IVersioningOverride | undefined {\n  if (!vo) return undefined;\n\n  // TODO: Remove deprecated field assignments when versioning is non-experimental\n  if (vo === 'AUTO_UPGRADE') {\n    return {\n      autoUpgrade: true,\n      behavior: temporal.api.enums.v1.VersioningBehavior.VERSIONING_BEHAVIOR_AUTO_UPGRADE,\n    };\n  }\n\n  return {\n    pinned: {\n      version: vo.pinnedTo,\n      behavior: temporal.api.workflow.v1.VersioningOverride.PinnedOverrideBehavior.PINNED_OVERRIDE_BEHAVIOR_PINNED,\n    },\n    behavior: temporal.api.enums.v1.VersioningBehavior.VERSIONING_BEHAVIOR_PINNED,\n    pinnedVersion: toCanonicalString(vo.pinnedTo),\n  };\n}\n","import { EventEmitter, on, once } from 'node:events';\nimport { isAbortError } from '@temporalio/common/lib/type-helpers';\n\nexport interface MapAsyncOptions {\n  /**\n   * How many items to map concurrently. If set to less than 2 (or not set), then items are not mapped concurrently.\n   *\n   * When items are mapped concurrently, mapped items are returned by the resulting iterator in the order they complete\n   * mapping, not the order in which the corresponding source items were obtained from the source iterator.\n   *\n   * @default 1 (ie. items are not mapped concurrently)\n   */\n  concurrency?: number;\n\n  /**\n   * Maximum number of mapped items to keep in buffer, ready for consumption.\n   *\n   * Ignored unless `concurrency > 1`. No limit applies if set to `undefined`.\n   *\n   * @default unlimited\n   */\n  bufferLimit?: number | undefined;\n}\n\nfunction toAsyncIterator<A>(iterable: AsyncIterable<A>): AsyncIterator<A> {\n  return iterable[Symbol.asyncIterator]();\n}\n\n/**\n * Return an async iterable that transforms items from a source iterable by mapping each item\n * through a mapping function.\n *\n * If `concurrency > 1`, then up to `concurrency` items may be mapped concurrently. In that case,\n * items are returned by the resulting iterator in the order they complete processing, not the order\n * in which the corresponding source items were obtained from the source iterator.\n *\n * @param source the source async iterable\n * @param mapFn a mapping function to apply on every item of the source iterable\n */\nexport async function* mapAsyncIterable<A, B>(\n  source: AsyncIterable<A>,\n  mapFn: (val: A) => Promise<B>,\n  options?: MapAsyncOptions\n): AsyncIterable<B> {\n  const { concurrency, bufferLimit } = options ?? {};\n\n  if (!concurrency || concurrency < 2) {\n    for await (const x of source) {\n      yield mapFn(x);\n    }\n    return;\n  }\n\n  const sourceIterator = toAsyncIterator(source);\n\n  const emitter = new EventEmitter();\n  const controller = new AbortController();\n  const emitterEventsIterable = on(emitter, 'result', { signal: controller.signal }) as AsyncIterable<[B]>;\n  const emitterError: Promise<unknown[]> = once(emitter, 'error');\n\n  const bufferLimitSemaphore =\n    typeof bufferLimit === 'number'\n      ? (() => {\n          const releaseEvents = toAsyncIterator(\n            on(emitter, 'released', { signal: controller.signal })\n          ) as AsyncIterator<void>;\n          let value = bufferLimit + concurrency;\n\n          return {\n            acquire: async () => {\n              while (value <= 0) {\n                await Promise.race([releaseEvents.next(), emitterError]);\n              }\n              value--;\n            },\n            release: () => {\n              value++;\n              emitter.emit('released');\n            },\n          };\n        })()\n      : undefined;\n\n  const mapper = async () => {\n    for (;;) {\n      await bufferLimitSemaphore?.acquire();\n      const val = await Promise.race([sourceIterator.next(), emitterError]);\n\n      if (Array.isArray(val)) return;\n      if ((val as IteratorResult<[B]>)?.done) return;\n\n      emitter.emit('result', await mapFn(val.value));\n    }\n  };\n\n  const mappers = Array(concurrency)\n    .fill(mapper)\n    .map((f: typeof mapper) => f());\n\n  Promise.all(mappers).then(\n    () => controller.abort(),\n    (err) => emitter.emit('error', err)\n  );\n\n  try {\n    for await (const [res] of emitterEventsIterable) {\n      bufferLimitSemaphore?.release();\n      yield res;\n    }\n  } catch (err: unknown) {\n    if (isAbortError(err)) {\n      return;\n    }\n    throw err;\n  }\n}\n","import type { temporal } from '@temporalio/proto';\nimport { makeProtoEnumConverters } from '@temporalio/common/lib/internal-workflow';\n\nexport const WorkflowUpdateStage = {\n  /** Admitted stage. This stage is reached when the server accepts the update request. It is not\n   * allowed to wait for this stage when using startUpdate, since the update request has not yet\n   * been durably persisted at this stage. */\n  ADMITTED: 'ADMITTED',\n\n  /** Accepted stage. This stage is reached when a workflow has received the update and either\n   * accepted it (i.e. it has passed validation, or there was no validator configured on the update\n   * handler) or rejected it. This is currently the only allowed value when using startUpdate. */\n  ACCEPTED: 'ACCEPTED',\n\n  /** Completed stage. This stage is reached when a workflow has completed processing the\n   * update with either a success or failure. */\n  COMPLETED: 'COMPLETED',\n\n  /**\n   * This is not an allowed value.\n   * @deprecated\n   */\n  UNSPECIFIED: undefined,\n} as const;\nexport type WorkflowUpdateStage = (typeof WorkflowUpdateStage)[keyof typeof WorkflowUpdateStage];\n\nexport const [encodeWorkflowUpdateStage] = makeProtoEnumConverters<\n  temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage,\n  typeof temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage,\n  keyof typeof temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage,\n  typeof WorkflowUpdateStage,\n  'UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_'\n>(\n  {\n    [WorkflowUpdateStage.ADMITTED]: 1,\n    [WorkflowUpdateStage.ACCEPTED]: 2,\n    [WorkflowUpdateStage.COMPLETED]: 3,\n    UNSPECIFIED: 0,\n  } as const,\n  'UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_'\n);\n","import type { temporal } from '@temporalio/proto';\nimport type { WorkflowOptions } from './workflow-options';\n\n/**\n * A symbol used to attach extra, SDK-internal options to the `WorkflowClient.start()` call.\n *\n * These are notably used by the Temporal Nexus helpers.\n *\n * @internal\n * @hidden\n */\nexport const InternalWorkflowStartOptionsSymbol = Symbol.for('__temporal_internal_client_workflow_start_options');\nexport interface InternalWorkflowStartOptions extends WorkflowOptions {\n  [InternalWorkflowStartOptionsSymbol]?: {\n    /**\n     * Request ID to be used for the workflow.\n     */\n    requestId?: string;\n\n    /**\n     * Callbacks to be called by the server when this workflow reaches a terminal state.\n     * If the workflow continues-as-new, these callbacks will be carried over to the new execution.\n     * Callback addresses must be whitelisted in the server's dynamic configuration.\n     */\n    completionCallbacks?: temporal.api.common.v1.ICallback[];\n\n    /**\n     * Links to be associated with the workflow.\n     */\n    links?: temporal.api.common.v1.ILink[];\n\n    /**\n     * Backlink copied by the client from the StartWorkflowExecutionResponse.\n     * Only populated in servers newer than 1.27.\n     */\n    backLink?: temporal.api.common.v1.ILink;\n\n    /**\n     * Conflict options for when USE_EXISTING is specified.\n     *\n     * Used by the Nexus WorkflowRunOperations to attach to a callback to a running workflow.\n     */\n    onConflictOptions?: temporal.api.workflow.v1.IOnConflictOptions;\n  };\n}\n","import type { WorkflowClientInterceptor, WorkflowStartInput, WorkflowStartOutput } from './interceptors';\n\nexport function adaptWorkflowClientInterceptor(i: WorkflowClientInterceptor): WorkflowClientInterceptor {\n  return adaptLegacyStartInterceptor(i);\n}\n\n// Adapt legacy `start` interceptors to the new `startWithDetails` interceptor.\nfunction adaptLegacyStartInterceptor(i: WorkflowClientInterceptor): WorkflowClientInterceptor {\n  // If it already has the new method, or doesn't have the legacy one, no adaptation is needed.\n  // eslint-disable-next-line @typescript-eslint/no-deprecated\n  if (i.startWithDetails || !i.start) {\n    return i;\n  }\n\n  // This interceptor has a legacy `start` but not `startWithDetails`. We'll adapt it.\n  return {\n    ...i,\n    startWithDetails: async (input, next): Promise<WorkflowStartOutput> => {\n      let downstreamOut: WorkflowStartOutput | undefined;\n\n      // Patched `next` for legacy `start` interceptors.\n      // Captures the full `WorkflowStartOutput` while returning `runId` as a string.\n      const patchedNext = async (patchedInput: WorkflowStartInput): Promise<string> => {\n        downstreamOut = await next(patchedInput);\n        return downstreamOut.runId;\n      };\n\n      const runIdFromLegacyInterceptor = await i.start!(input, patchedNext); // eslint-disable-line @typescript-eslint/no-deprecated\n\n      // If the interceptor short-circuited (didn't call `next`), `downstreamOut` will be undefined.\n      // In that case, we can't have an eager start.\n      if (downstreamOut === undefined) {\n        return { runId: runIdFromLegacyInterceptor, eagerlyStarted: false };\n      }\n\n      // If `next` was called, honor the `runId` from the legacy interceptor but preserve\n      // the `eagerlyStarted` status from the actual downstream call.\n      return { ...downstreamOut, runId: runIdFromLegacyInterceptor };\n    },\n  };\n}\n","import { randomUUID } from 'node:crypto';\nimport { status as grpcStatus } from '@grpc/grpc-js';\nimport type {\n  BaseWorkflowHandle,\n  HistoryAndWorkflowId,\n  QueryDefinition,\n  SignalDefinition,\n  UpdateDefinition,\n  WithWorkflowArgs,\n  Workflow,\n  WorkflowResultType,\n  WorkflowIdConflictPolicy,\n  WorkflowSerializationContext,\n} from '@temporalio/common';\nimport {\n  CancelledFailure,\n  compileRetryPolicy,\n  RetryState,\n  TerminatedFailure,\n  TimeoutFailure,\n  TimeoutType,\n  WorkflowExecutionAlreadyStartedError,\n  WorkflowNotFoundError,\n  extractWorkflowType,\n  encodeWorkflowIdReusePolicy,\n  decodeRetryState,\n  encodeWorkflowIdConflictPolicy,\n  compilePriority,\n} from '@temporalio/common';\nimport { encodeUserMetadata } from '@temporalio/common/lib/internal-non-workflow/codec-helpers';\nimport { encodeUnifiedSearchAttributes } from '@temporalio/common/lib/converter/payload-search-attributes';\nimport { composeInterceptors } from '@temporalio/common/lib/interceptors';\nimport type { History } from '@temporalio/common/lib/proto-utils';\nimport { SymbolBasedInstanceOfError } from '@temporalio/common/lib/type-helpers';\nimport {\n  decodeArrayFromPayloads,\n  decodeFromPayloadsAtIndex,\n  decodeOptionalFailureToOptionalError,\n  decodeOptionalSinglePayload,\n  encodeMapToPayloads,\n  encodeToPayloadsWithContext,\n} from '@temporalio/common/lib/internal-non-workflow';\nimport { filterNullAndUndefined } from '@temporalio/common/lib/internal-workflow';\nimport { temporal } from '@temporalio/proto';\nimport {\n  ServiceError,\n  WorkflowContinuedAsNewError,\n  WorkflowFailedError,\n  WorkflowUpdateFailedError,\n  WorkflowUpdateRPCTimeoutOrCancelledError,\n  isGrpcServiceError,\n} from './errors';\nimport type {\n  WorkflowCancelInput,\n  WorkflowClientInterceptor,\n  WorkflowClientInterceptors,\n  WorkflowDescribeInput,\n  WorkflowQueryInput,\n  WorkflowSignalInput,\n  WorkflowSignalWithStartInput,\n  WorkflowStartInput,\n  WorkflowTerminateInput,\n  WorkflowStartUpdateInput,\n  WorkflowStartUpdateOutput,\n  WorkflowStartUpdateWithStartInput,\n  WorkflowStartUpdateWithStartOutput,\n  WorkflowStartOutput,\n} from './interceptors';\nimport type {\n  CountWorkflowExecution,\n  DescribeWorkflowExecutionResponse,\n  GetWorkflowExecutionHistoryRequest,\n  InternalConnectionLike,\n  QueryRejectCondition,\n  RequestCancelWorkflowExecutionResponse,\n  StartWorkflowExecutionRequest,\n  TerminateWorkflowExecutionResponse,\n  WorkflowExecution,\n  WorkflowExecutionDescription,\n  WorkflowExecutionInfo,\n  WorkflowService,\n} from './types';\nimport { encodeQueryRejectCondition, InternalConnectionLikeSymbol } from './types';\nimport type {\n  WorkflowOptions,\n  WorkflowSignalWithStartOptions,\n  WorkflowStartOptions,\n  WorkflowUpdateOptions,\n} from './workflow-options';\nimport { compileWorkflowOptions } from './workflow-options';\nimport { decodeCountWorkflowExecutionsResponse, executionInfoFromRaw, rethrowKnownErrorTypes } from './helpers';\nimport type { BaseClientOptions, LoadedWithDefaults, WithDefaults } from './base-client';\nimport { BaseClient, defaultBaseClientOptions } from './base-client';\nimport { mapAsyncIterable } from './iterators-utils';\nimport { WorkflowUpdateStage, encodeWorkflowUpdateStage } from './workflow-update-stage';\nimport type { InternalWorkflowStartOptions } from './internal';\nimport { InternalWorkflowStartOptionsSymbol } from './internal';\nimport { adaptWorkflowClientInterceptor } from './interceptor-adapters';\n\nconst UpdateWorkflowExecutionLifecycleStage = temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage;\n\n/**\n * A client side handle to a single Workflow instance.\n * It can be used to start, signal, query, wait for completion, terminate and cancel a Workflow execution.\n *\n * Given the following Workflow definition:\n * ```ts\n * export const incrementSignal = defineSignal<[number]>('increment');\n * export const getValueQuery = defineQuery<number>('getValue');\n * export const incrementAndGetValueUpdate = defineUpdate<number, [number]>('incrementAndGetValue');\n * export async function counterWorkflow(initialValue: number): Promise<void>;\n * ```\n *\n * Create a handle for running and interacting with a single Workflow:\n * ```ts\n * const client = new WorkflowClient();\n * // Start the Workflow with initialValue of 2.\n * const handle = await client.start({\n *   workflowType: counterWorkflow,\n *   args: [2],\n *   taskQueue: 'tutorial',\n * });\n * await handle.signal(incrementSignal, 2);\n * const queryResult = await handle.query(getValueQuery); // 4\n * const firstUpdateResult = await handle.executeUpdate(incrementAndGetValueUpdate, { args: [2] }); // 6\n * const secondUpdateHandle = await handle.startUpdate(incrementAndGetValueUpdate, { args: [2] });\n * const secondUpdateResult = await secondUpdateHandle.result(); // 8\n * await handle.cancel();\n * await handle.result(); // throws a WorkflowFailedError with `cause` set to a CancelledFailure.\n * ```\n */\nexport interface WorkflowHandle<T extends Workflow = Workflow> extends BaseWorkflowHandle<T> {\n  /**\n   * Start an Update and wait for the result.\n   *\n   * @throws {@link WorkflowUpdateFailedError} if Update validation fails or if ApplicationFailure is thrown in the Update handler.\n   * @throws {@link WorkflowUpdateRPCTimeoutOrCancelledError} if this Update call timed out or was cancelled. This doesn't\n   *  mean the update itself was timed out or cancelled.\n   * @param def an Update definition as returned from {@link defineUpdate}\n   * @param options Update arguments\n   *\n   * @example\n   * ```ts\n   * const updateResult = await handle.executeUpdate(incrementAndGetValueUpdate, { args: [2] });\n   * ```\n   */\n  executeUpdate<Ret, Args extends [any, ...any[]], Name extends string = string>(\n    def: UpdateDefinition<Ret, Args, Name> | string,\n    options: WorkflowUpdateOptions & { args: Args }\n  ): Promise<Ret>;\n\n  executeUpdate<Ret, Args extends [], Name extends string = string>(\n    def: UpdateDefinition<Ret, Args, Name> | string,\n    options?: WorkflowUpdateOptions & { args?: Args }\n  ): Promise<Ret>;\n\n  /**\n   * Start an Update and receive a handle to the Update. The Update validator (if present) is run\n   * before the handle is returned.\n   *\n   * @throws {@link WorkflowUpdateFailedError} if Update validation fails.\n   * @throws {@link WorkflowUpdateRPCTimeoutOrCancelledError} if this Update call timed out or was cancelled. This doesn't\n   *  mean the update itself was timed out or cancelled.\n   *\n   * @param def an Update definition as returned from {@link defineUpdate}\n   * @param options update arguments, and update lifecycle stage to wait for\n   *\n   * Currently, startUpdate always waits until a worker is accepting tasks for the workflow and the\n   * update is accepted or rejected, and the options object must be at least\n   * ```ts\n   * {\n   *   waitForStage: WorkflowUpdateStage.ACCEPTED\n   * }\n   * ```\n   * If the update takes arguments, then the options object must additionally contain an `args`\n   * property with an array of argument values.\n   *\n   * @example\n   * ```ts\n   * const updateHandle = await handle.startUpdate(incrementAndGetValueUpdate, {\n   *   args: [2],\n   *   waitForStage: 'ACCEPTED',\n   * });\n   * const updateResult = await updateHandle.result();\n   * ```\n   */\n  startUpdate<Ret, Args extends [any, ...any[]], Name extends string = string>(\n    def: UpdateDefinition<Ret, Args, Name> | string,\n    options: WorkflowUpdateOptions & {\n      args: Args;\n      waitForStage: 'ACCEPTED';\n    }\n  ): Promise<WorkflowUpdateHandle<Ret>>;\n\n  startUpdate<Ret, Args extends [], Name extends string = string>(\n    def: UpdateDefinition<Ret, Args, Name> | string,\n    options: WorkflowUpdateOptions & {\n      args?: Args;\n      waitForStage: typeof WorkflowUpdateStage.ACCEPTED;\n    }\n  ): Promise<WorkflowUpdateHandle<Ret>>;\n\n  /**\n   * Get a handle to an Update of this Workflow.\n   */\n  getUpdateHandle<Ret>(updateId: string): WorkflowUpdateHandle<Ret>;\n\n  /**\n   * Query a running or completed Workflow.\n   *\n   * @param def a query definition as returned from {@link defineQuery} or query name (string)\n   *\n   * @example\n   * ```ts\n   * await handle.query(getValueQuery);\n   * await handle.query<number, []>('getValue');\n   * ```\n   */\n  query<Ret, Args extends any[] = []>(def: QueryDefinition<Ret, Args> | string, ...args: Args): Promise<Ret>;\n\n  /**\n   * Terminate a running Workflow\n   */\n  terminate(reason?: string): Promise<TerminateWorkflowExecutionResponse>;\n\n  /**\n   * Cancel a running Workflow.\n   *\n   * When a Workflow is cancelled, the root scope throws {@link CancelledFailure} with `message: 'Workflow canceled'`.\n   * That means that all cancellable scopes will throw `CancelledFailure`.\n   *\n   * Cancellation may be propagated to Activities depending on {@link ActivityOptions#cancellationType}, after which\n   * Activity calls may throw an {@link ActivityFailure}, and `isCancellation(error)` will be true (see {@link isCancellation}).\n   *\n   * Cancellation may be propagated to Child Workflows depending on {@link ChildWorkflowOptions#cancellationType}, after\n   * which calls to {@link executeChild} and {@link ChildWorkflowHandle#result} will throw, and `isCancellation(error)`\n   * will be true (see {@link isCancellation}).\n   */\n  cancel(): Promise<RequestCancelWorkflowExecutionResponse>;\n\n  /**\n   * Describe the current workflow execution\n   */\n  describe(): Promise<WorkflowExecutionDescription>;\n\n  /**\n   * Return a workflow execution's history\n   */\n  fetchHistory(): Promise<History>;\n\n  /**\n   * Readonly accessor to the underlying WorkflowClient\n   */\n  readonly client: WorkflowClient;\n}\n\n/**\n * This interface is exactly the same as {@link WorkflowHandle} except it\n * includes the `firstExecutionRunId` returned from {@link WorkflowClient.start}.\n */\nexport interface WorkflowHandleWithFirstExecutionRunId<T extends Workflow = Workflow> extends WorkflowHandle<T> {\n  /**\n   * Run Id of the first Execution in the Workflow Execution Chain.\n   */\n  readonly firstExecutionRunId: string;\n}\n\n/**\n * This interface is exactly the same as {@link WorkflowHandleWithFirstExecutionRunId} except it\n * includes the `eagerlyStarted` returned from {@link WorkflowClient.start}.\n */\nexport interface WorkflowHandleWithStartDetails<T extends Workflow = Workflow>\n  extends WorkflowHandleWithFirstExecutionRunId<T> {\n  readonly eagerlyStarted: boolean;\n}\n\n/**\n * This interface is exactly the same as {@link WorkflowHandle} except it\n * includes the `signaledRunId` returned from `signalWithStart`.\n */\nexport interface WorkflowHandleWithSignaledRunId<T extends Workflow = Workflow> extends WorkflowHandle<T> {\n  /**\n   * The Run Id of the bound Workflow at the time of {@link WorkflowClient.signalWithStart}.\n   *\n   * Since `signalWithStart` may have signaled an existing Workflow Chain, `signaledRunId` might not be the\n   * `firstExecutionRunId`.\n   */\n  readonly signaledRunId: string;\n}\n\nexport interface WorkflowClientOptions extends BaseClientOptions {\n  /**\n   * Used to override and extend default Connection functionality\n   *\n   * Useful for injecting auth headers and tracing Workflow executions\n   */\n  interceptors?: WorkflowClientInterceptors | WorkflowClientInterceptor[];\n\n  /**\n   * Should a query be rejected by closed and failed workflows\n   *\n   * @default `undefined` which means that closed and failed workflows are still queryable\n   */\n  queryRejectCondition?: QueryRejectCondition;\n}\n\nexport type LoadedWorkflowClientOptions = LoadedWithDefaults<WorkflowClientOptions>;\n\nfunction defaultWorkflowClientOptions(): WithDefaults<WorkflowClientOptions> {\n  return {\n    ...defaultBaseClientOptions(),\n    interceptors: [],\n    queryRejectCondition: 'NONE',\n  };\n}\n\nfunction assertRequiredWorkflowOptions(opts: WorkflowOptions): asserts opts is WorkflowOptions {\n  if (!opts.taskQueue) {\n    throw new TypeError('Missing WorkflowOptions.taskQueue');\n  }\n  if (!opts.workflowId) {\n    throw new TypeError('Missing WorkflowOptions.workflowId');\n  }\n}\n\nfunction ensureArgs<W extends Workflow, T extends WorkflowStartOptions<W>>(\n  opts: T\n): Omit<T, 'args'> & { args: unknown[] } {\n  const { args, ...rest } = opts;\n  return { args: (args as unknown[]) ?? [], ...rest };\n}\n\n/**\n * Options for getting a result of a Workflow execution.\n */\nexport interface WorkflowResultOptions {\n  /**\n   * If set to true, instructs the client to follow the chain of execution before returning a Workflow's result.\n   *\n   * Workflow execution is chained if the Workflow has a cron schedule or continues-as-new or configured to retry\n   * after failure or timeout.\n   *\n   * @default true\n   */\n  followRuns?: boolean;\n}\n\n/**\n * Options for {@link WorkflowClient.getHandle}\n */\nexport interface GetWorkflowHandleOptions extends WorkflowResultOptions {\n  /**\n   * ID of the first execution in the Workflow execution chain.\n   *\n   * When getting a handle with no `runId`, pass this option to ensure some\n   * {@link WorkflowHandle} methods (e.g. `terminate` and `cancel`) don't\n   * affect executions from another chain.\n   */\n  firstExecutionRunId?: string;\n}\n\ninterface WorkflowHandleOptions extends GetWorkflowHandleOptions {\n  workflowId: string;\n  runId?: string;\n  interceptors: WorkflowClientInterceptor[];\n  /**\n   * A runId to use for getting the workflow's result.\n   *\n   * - When creating a handle using `getHandle`, uses the provided runId or firstExecutionRunId\n   * - When creating a handle using `start`, uses the returned runId (first in the chain)\n   * - When creating a handle using `signalWithStart`, uses the the returned runId\n   */\n  runIdForResult?: string;\n}\n\n/**\n * An iterable list of WorkflowExecution, as returned by {@link WorkflowClient.list}.\n */\nexport interface AsyncWorkflowListIterable extends AsyncIterable<WorkflowExecutionInfo> {\n  /**\n   * Return an iterable of histories corresponding to this iterable's WorkflowExecutions.\n   * Workflow histories will be fetched concurrently.\n   *\n   * Useful in batch replaying\n   */\n  intoHistories: (intoHistoriesOptions?: IntoHistoriesOptions) => AsyncIterable<HistoryAndWorkflowId>;\n}\n\n/**\n * A client-side handle to an Update.\n */\nexport interface WorkflowUpdateHandle<Ret> {\n  /**\n   * The ID of this Update request.\n   */\n  updateId: string;\n\n  /**\n   * The ID of the Workflow being targeted by this Update request.\n   */\n  workflowId: string;\n\n  /**\n   * The ID of the Run of the Workflow being targeted by this Update request.\n   */\n  workflowRunId?: string;\n\n  /**\n   * Return the result of the Update.\n   * @throws {@link WorkflowUpdateFailedError} if ApplicationFailure is thrown in the Update handler.\n   */\n  result(): Promise<Ret>;\n}\n\n/**\n * Options for {@link WorkflowHandle.getUpdateHandle}\n */\nexport interface GetWorkflowUpdateHandleOptions {\n  /**\n   * The ID of the Run of the Workflow targeted by the Update.\n   */\n  workflowRunId?: string;\n}\n\n/**\n * Options for {@link WorkflowClient.list}\n */\nexport interface ListOptions {\n  /**\n   * Maximum number of results to fetch per page.\n   *\n   * @default depends on server config, typically 1000\n   */\n  pageSize?: number;\n  /**\n   * Query string for matching and ordering the results\n   */\n  query?: string;\n}\n\n/**\n * Options for {@link WorkflowClient.list().intoHistories()}\n */\nexport interface IntoHistoriesOptions {\n  /**\n   * Maximum number of workflow histories to download concurrently.\n   *\n   * @default 5\n   */\n  concurrency?: number;\n\n  /**\n   * Maximum number of workflow histories to buffer ahead, ready for consumption.\n   *\n   * It is recommended to set `bufferLimit` to a rasonnably low number if it is expected that the\n   * iterable may be stopped before reaching completion (for example, when implementing a fail fast\n   * bach replay test).\n   *\n   * Ignored unless `concurrency > 1`. No limit applies if set to `undefined`.\n   *\n   * @default unlimited\n   */\n  bufferLimit?: number;\n}\n\nconst withStartWorkflowOperationResolve: unique symbol = Symbol();\nconst withStartWorkflowOperationReject: unique symbol = Symbol();\nconst withStartWorkflowOperationUsed: unique symbol = Symbol();\n\n/**\n * Define how to start a workflow when using {@link WorkflowClient.startUpdateWithStart} and\n * {@link WorkflowClient.executeUpdateWithStart}. `workflowIdConflictPolicy` is required in the options.\n */\nexport class WithStartWorkflowOperation<T extends Workflow> {\n  private [withStartWorkflowOperationUsed]: boolean = false;\n  private [withStartWorkflowOperationResolve]: ((handle: WorkflowHandle<T>) => void) | undefined = undefined;\n  private [withStartWorkflowOperationReject]: ((error: any) => void) | undefined = undefined;\n  private workflowHandlePromise: Promise<WorkflowHandle<T>>;\n\n  constructor(\n    public workflowTypeOrFunc: string | T,\n    public options: WorkflowStartOptions<T> & { workflowIdConflictPolicy: WorkflowIdConflictPolicy }\n  ) {\n    this.workflowHandlePromise = new Promise<WorkflowHandle<T>>((resolve, reject) => {\n      this[withStartWorkflowOperationResolve] = resolve;\n      this[withStartWorkflowOperationReject] = reject;\n    });\n    // Suppress unhandled rejection: if executeUpdateWithStart fails before any\n    // response, we reject this promise AND re-throw to the caller. Without this\n    // no-op catch the rejected promise has no handler and Node 15+ terminates.\n    this.workflowHandlePromise.catch(() => undefined);\n  }\n\n  public async workflowHandle(): Promise<WorkflowHandle<T>> {\n    return await this.workflowHandlePromise;\n  }\n}\n\n/**\n * Client for starting Workflow executions and creating Workflow handles.\n *\n * Typically this client should not be instantiated directly, instead create the high level {@link Client} and use\n * {@link Client.workflow} to interact with Workflows.\n */\nexport class WorkflowClient extends BaseClient {\n  public readonly options: LoadedWorkflowClientOptions;\n\n  constructor(options?: WorkflowClientOptions) {\n    super(options);\n    this.options = {\n      ...defaultWorkflowClientOptions(),\n      ...filterNullAndUndefined(options ?? {}),\n      loadedDataConverter: this.dataConverter,\n    };\n  }\n\n  /**\n   * Raw gRPC access to the Temporal service.\n   *\n   * **NOTE**: The namespace provided in {@link options} is **not** automatically set on requests made via this service\n   * object.\n   */\n  get workflowService(): WorkflowService {\n    return this.connection.workflowService;\n  }\n\n  protected workflowSerializationContext(workflowId: string): WorkflowSerializationContext {\n    return {\n      type: 'workflow',\n      namespace: this.options.namespace,\n      workflowId,\n    };\n  }\n\n  protected async _start<T extends Workflow>(\n    workflowTypeOrFunc: string | T,\n    options: WorkflowStartOptions<T>,\n    interceptors: WorkflowClientInterceptor[]\n  ): Promise<WorkflowStartOutput> {\n    const workflowType = extractWorkflowType(workflowTypeOrFunc);\n    assertRequiredWorkflowOptions(options);\n    const compiledOptions = compileWorkflowOptions(ensureArgs(options));\n    const adaptedInterceptors = interceptors.map((i) => adaptWorkflowClientInterceptor(i));\n\n    const startWithDetails = composeInterceptors(\n      adaptedInterceptors,\n      'startWithDetails',\n      this._startWorkflowHandler.bind(this)\n    );\n\n    return startWithDetails({\n      options: compiledOptions,\n      headers: {},\n      workflowType,\n    });\n  }\n\n  protected async _signalWithStart<T extends Workflow, SA extends any[]>(\n    workflowTypeOrFunc: string | T,\n    options: WithWorkflowArgs<T, WorkflowSignalWithStartOptions<SA>>,\n    interceptors: WorkflowClientInterceptor[]\n  ): Promise<string> {\n    const workflowType = extractWorkflowType(workflowTypeOrFunc);\n    const { signal, signalArgs, ...rest } = options;\n    assertRequiredWorkflowOptions(rest);\n    const compiledOptions = compileWorkflowOptions(ensureArgs(rest));\n    const signalWithStart = composeInterceptors(\n      interceptors,\n      'signalWithStart',\n      this._signalWithStartWorkflowHandler.bind(this)\n    );\n\n    return signalWithStart({\n      options: compiledOptions,\n      headers: {},\n      workflowType,\n      signalName: typeof signal === 'string' ? signal : signal.name,\n      signalArgs: signalArgs ?? [],\n    });\n  }\n\n  /**\n   * Start a new Workflow execution.\n   *\n   * @returns a {@link WorkflowHandle} to the started Workflow\n   */\n  public async start<T extends Workflow>(\n    workflowTypeOrFunc: string | T,\n    options: WorkflowStartOptions<T>\n  ): Promise<WorkflowHandleWithStartDetails<T>> {\n    const { workflowId } = options;\n    const interceptors = this.getOrMakeInterceptors(workflowId);\n    const wfStartOutput = await this._start(workflowTypeOrFunc, { ...options, workflowId }, interceptors);\n    // runId is not used in handles created with `start*` calls because these\n    // handles should allow interacting with the workflow if it continues as new.\n    const baseHandle = this._createWorkflowHandle({\n      workflowId,\n      runId: undefined,\n      firstExecutionRunId: wfStartOutput.runId,\n      runIdForResult: wfStartOutput.runId,\n      interceptors,\n      followRuns: options.followRuns ?? true,\n    });\n    return {\n      ...baseHandle,\n      firstExecutionRunId: wfStartOutput.runId,\n      eagerlyStarted: wfStartOutput.eagerlyStarted,\n    };\n  }\n\n  /**\n   * Start a new Workflow Execution and immediately send a Signal to that Workflow.\n   *\n   * The behavior of Signal-with-Start in the case where there is already a running Workflow with\n   * the given Workflow ID depends on the {@link WorkflowIDConflictPolicy}. That is, if the policy\n   * is `USE_EXISTING`, then the Signal is issued against the already existing Workflow Execution;\n   * however, if the policy is `FAIL`, then an error is thrown. If no policy is specified,\n   * Signal-with-Start defaults to `USE_EXISTING`.\n   *\n   * @returns a {@link WorkflowHandle} to the started Workflow\n   */\n  public async signalWithStart<WorkflowFn extends Workflow, SignalArgs extends any[] = []>(\n    workflowTypeOrFunc: string | WorkflowFn,\n    options: WithWorkflowArgs<WorkflowFn, WorkflowSignalWithStartOptions<SignalArgs>>\n  ): Promise<WorkflowHandleWithSignaledRunId<WorkflowFn>> {\n    const { workflowId } = options;\n    const interceptors = this.getOrMakeInterceptors(workflowId);\n    const runId = await this._signalWithStart(workflowTypeOrFunc, options, interceptors);\n    // runId is not used in handles created with `start*` calls because these\n    // handles should allow interacting with the workflow if it continues as new.\n    const handle = this._createWorkflowHandle({\n      workflowId,\n      runId: undefined,\n      firstExecutionRunId: undefined, // We don't know if this runId is first in the chain or not\n      runIdForResult: runId,\n      interceptors,\n      followRuns: options.followRuns ?? true,\n    }) as WorkflowHandleWithSignaledRunId<WorkflowFn>; // Cast is safe because we know we add the signaledRunId below\n    (handle as any) /* readonly */.signaledRunId = runId;\n    return handle;\n  }\n\n  /**\n   * Start a new Workflow Execution and immediately send an Update to that Workflow,\n   * then await and return the Update's result.\n   *\n   * The `updateOptions` object must contain a {@link WithStartWorkflowOperation}, which defines\n   * the options for the Workflow execution to start (e.g. the Workflow's type, task queue, input\n   * arguments, etc.)\n   *\n   * The behavior of Update-with-Start in the case where there is already a running Workflow with\n   * the given Workflow ID depends on the specified {@link WorkflowIDConflictPolicy}. That is, if\n   * the policy is `USE_EXISTING`, then the Update is issued against the already existing Workflow\n   * Execution; however, if the policy is `FAIL`, then an error is thrown. Caller MUST specify\n   * the desired WorkflowIDConflictPolicy.\n   *\n   * This call will block until the Update has completed. The Workflow handle can be retrieved by\n   * awaiting on {@link WithStartWorkflowOperation.workflowHandle}, whether or not the Update\n   * succeeds.\n   *\n   * @returns the Update result\n   */\n  public async executeUpdateWithStart<T extends Workflow, Ret, Args extends any[]>(\n    updateDef: UpdateDefinition<Ret, Args> | string,\n    updateOptions: WorkflowUpdateOptions & { args?: Args; startWorkflowOperation: WithStartWorkflowOperation<T> }\n  ): Promise<Ret> {\n    const handle = await this._startUpdateWithStart(updateDef, {\n      ...updateOptions,\n      waitForStage: WorkflowUpdateStage.COMPLETED,\n    });\n    return await handle.result();\n  }\n\n  /**\n   * Start a new Workflow Execution and immediately send an Update to that Workflow,\n   * then return a {@link WorkflowUpdateHandle} for that Update.\n   *\n   * The `updateOptions` object must contain a {@link WithStartWorkflowOperation}, which defines\n   * the options for the Workflow execution to start (e.g. the Workflow's type, task queue, input\n   * arguments, etc.)\n   *\n   * The behavior of Update-with-Start in the case where there is already a running Workflow with\n   * the given Workflow ID depends on the specified {@link WorkflowIDConflictPolicy}. That is, if\n   * the policy is `USE_EXISTING`, then the Update is issued against the already existing Workflow\n   * Execution; however, if the policy is `FAIL`, then an error is thrown. Caller MUST specify\n   * the desired WorkflowIDConflictPolicy.\n   *\n   * This call will block until the Update has reached the specified {@link WorkflowUpdateStage}.\n   * Note that this means that the call will not return successfully until the Update has\n   * been delivered to a Worker. The Workflow handle can be retrieved by awaiting on\n   * {@link WithStartWorkflowOperation.workflowHandle}, whether or not the Update succeeds.\n   *\n   * @returns a {@link WorkflowUpdateHandle} to the started Update\n   */\n  public async startUpdateWithStart<T extends Workflow, Ret, Args extends any[]>(\n    updateDef: UpdateDefinition<Ret, Args> | string,\n    updateOptions: WorkflowUpdateOptions & {\n      args?: Args;\n      waitForStage: 'ACCEPTED';\n      startWorkflowOperation: WithStartWorkflowOperation<T>;\n    }\n  ): Promise<WorkflowUpdateHandle<Ret>> {\n    return this._startUpdateWithStart(updateDef, updateOptions);\n  }\n\n  protected async _startUpdateWithStart<T extends Workflow, Ret, Args extends any[]>(\n    updateDef: UpdateDefinition<Ret, Args> | string,\n    updateWithStartOptions: WorkflowUpdateOptions & {\n      args?: Args;\n      waitForStage: WorkflowUpdateStage;\n      startWorkflowOperation: WithStartWorkflowOperation<T>;\n    }\n  ): Promise<WorkflowUpdateHandle<Ret>> {\n    const { waitForStage, args, startWorkflowOperation, ...updateOptions } = updateWithStartOptions;\n    const { workflowTypeOrFunc, options: workflowOptions } = startWorkflowOperation;\n    const { workflowId } = workflowOptions;\n\n    if (startWorkflowOperation[withStartWorkflowOperationUsed]) {\n      throw new Error('This WithStartWorkflowOperation instance has already been executed.');\n    }\n    startWorkflowOperation[withStartWorkflowOperationUsed] = true;\n    assertRequiredWorkflowOptions(workflowOptions);\n\n    const startUpdateWithStartInput: WorkflowStartUpdateWithStartInput = {\n      workflowType: extractWorkflowType(workflowTypeOrFunc),\n      workflowStartOptions: compileWorkflowOptions(ensureArgs(workflowOptions)),\n      workflowStartHeaders: {},\n      updateName: typeof updateDef === 'string' ? updateDef : updateDef.name,\n      updateArgs: args ?? [],\n      updateOptions,\n      updateHeaders: {},\n    };\n\n    const interceptors = this.getOrMakeInterceptors(workflowId);\n\n    const onStart = (startResponse: temporal.api.workflowservice.v1.IStartWorkflowExecutionResponse) =>\n      startWorkflowOperation[withStartWorkflowOperationResolve]!(\n        this._createWorkflowHandle({\n          workflowId,\n          firstExecutionRunId: startResponse.runId ?? undefined,\n          interceptors,\n          followRuns: workflowOptions.followRuns ?? true,\n        })\n      );\n\n    const onStartError = (err: any) => {\n      startWorkflowOperation[withStartWorkflowOperationReject]!(err);\n    };\n\n    const fn = composeInterceptors(\n      interceptors,\n      'startUpdateWithStart',\n      this._updateWithStartHandler.bind(this, waitForStage, onStart, onStartError)\n    );\n    const updateOutput = await fn(startUpdateWithStartInput);\n\n    let outcome = updateOutput.updateOutcome;\n    if (!outcome && waitForStage === WorkflowUpdateStage.COMPLETED) {\n      outcome = await this._pollForUpdateOutcome(updateOutput.updateId, {\n        workflowId,\n        runId: updateOutput.workflowExecution.runId,\n      });\n    }\n\n    return this.createWorkflowUpdateHandle<Ret>(\n      updateOutput.updateId,\n      workflowId,\n      updateOutput.workflowExecution.runId,\n      outcome\n    );\n  }\n\n  /**\n   * Start a new Workflow execution, then await for its completion and return that Workflow's result.\n   *\n   * @returns the result of the Workflow execution\n   */\n  public async execute<T extends Workflow>(\n    workflowTypeOrFunc: string | T,\n    options: WorkflowStartOptions<T>\n  ): Promise<WorkflowResultType<T>> {\n    const { workflowId } = options;\n    const interceptors = this.getOrMakeInterceptors(workflowId);\n    await this._start(workflowTypeOrFunc, options, interceptors);\n    return await this.result(workflowId, undefined, {\n      ...options,\n      followRuns: options.followRuns ?? true,\n    });\n  }\n\n  /**\n   * Get the result of a Workflow execution.\n   *\n   * Follow the chain of execution in case Workflow continues as new, or has a cron schedule or retry policy.\n   */\n  public async result<T extends Workflow>(\n    workflowId: string,\n    runId?: string,\n    opts?: WorkflowResultOptions\n  ): Promise<WorkflowResultType<T>> {\n    const dataConverter = this.dataConverter;\n    const context = this.workflowSerializationContext(workflowId);\n    const followRuns = opts?.followRuns ?? true;\n    const execution: temporal.api.common.v1.IWorkflowExecution = { workflowId, runId };\n    const req: GetWorkflowExecutionHistoryRequest = {\n      namespace: this.options.namespace,\n      execution,\n      skipArchival: true,\n      waitNewEvent: true,\n      historyEventFilterType: temporal.api.enums.v1.HistoryEventFilterType.HISTORY_EVENT_FILTER_TYPE_CLOSE_EVENT,\n    };\n    let ev: temporal.api.history.v1.IHistoryEvent;\n\n    for (;;) {\n      let res: temporal.api.workflowservice.v1.GetWorkflowExecutionHistoryResponse;\n      try {\n        res = await this.workflowService.getWorkflowExecutionHistory(req);\n      } catch (err) {\n        this.rethrowGrpcError(err, 'Failed to get Workflow execution history', { workflowId, runId });\n      }\n      const events = res.history?.events;\n\n      if (events == null || events.length === 0) {\n        req.nextPageToken = res.nextPageToken;\n        continue;\n      }\n      if (events.length !== 1) {\n        throw new Error(`Expected at most 1 close event(s), got: ${events.length}`);\n      }\n      // getWorkflowExecutionHistory should never return an array of undefined events\n      ev = events[0]!;\n\n      if (ev.workflowExecutionCompletedEventAttributes) {\n        if (followRuns && ev.workflowExecutionCompletedEventAttributes.newExecutionRunId) {\n          execution.runId = ev.workflowExecutionCompletedEventAttributes.newExecutionRunId;\n          req.nextPageToken = undefined;\n          continue;\n        }\n        // Note that we can only return one value from our workflow function in JS.\n        // Ignore any other payloads in result\n        const [result] = await decodeArrayFromPayloads(\n          dataConverter,\n          ev.workflowExecutionCompletedEventAttributes.result?.payloads,\n          context\n        );\n        return result as any;\n      } else if (ev.workflowExecutionFailedEventAttributes) {\n        if (followRuns && ev.workflowExecutionFailedEventAttributes.newExecutionRunId) {\n          execution.runId = ev.workflowExecutionFailedEventAttributes.newExecutionRunId;\n          req.nextPageToken = undefined;\n          continue;\n        }\n        const { failure, retryState } = ev.workflowExecutionFailedEventAttributes;\n        throw new WorkflowFailedError(\n          'Workflow execution failed',\n          await decodeOptionalFailureToOptionalError(dataConverter, failure, context),\n          decodeRetryState(retryState)\n        );\n      } else if (ev.workflowExecutionCanceledEventAttributes) {\n        const failure = new CancelledFailure(\n          'Workflow canceled',\n          await decodeArrayFromPayloads(\n            dataConverter,\n            ev.workflowExecutionCanceledEventAttributes.details?.payloads,\n            context\n          )\n        );\n        failure.stack = '';\n        throw new WorkflowFailedError('Workflow execution cancelled', failure, RetryState.NON_RETRYABLE_FAILURE);\n      } else if (ev.workflowExecutionTerminatedEventAttributes) {\n        const failure = new TerminatedFailure(\n          ev.workflowExecutionTerminatedEventAttributes.reason || 'Workflow execution terminated'\n        );\n        failure.stack = '';\n        throw new WorkflowFailedError(\n          ev.workflowExecutionTerminatedEventAttributes.reason || 'Workflow execution terminated',\n          failure,\n          RetryState.NON_RETRYABLE_FAILURE\n        );\n      } else if (ev.workflowExecutionTimedOutEventAttributes) {\n        if (followRuns && ev.workflowExecutionTimedOutEventAttributes.newExecutionRunId) {\n          execution.runId = ev.workflowExecutionTimedOutEventAttributes.newExecutionRunId;\n          req.nextPageToken = undefined;\n          continue;\n        }\n        const failure = new TimeoutFailure('Workflow execution timed out', undefined, TimeoutType.START_TO_CLOSE);\n        failure.stack = '';\n        throw new WorkflowFailedError(\n          'Workflow execution timed out',\n          failure,\n          decodeRetryState(ev.workflowExecutionTimedOutEventAttributes.retryState)\n        );\n      } else if (ev.workflowExecutionContinuedAsNewEventAttributes) {\n        const { newExecutionRunId } = ev.workflowExecutionContinuedAsNewEventAttributes;\n        if (!newExecutionRunId) {\n          throw new TypeError('Expected service to return newExecutionRunId for WorkflowExecutionContinuedAsNewEvent');\n        }\n        if (!followRuns) {\n          throw new WorkflowContinuedAsNewError('Workflow execution continued as new', newExecutionRunId);\n        }\n        execution.runId = newExecutionRunId;\n        req.nextPageToken = undefined;\n        continue;\n      }\n    }\n  }\n\n  protected rethrowUpdateGrpcError(\n    err: unknown,\n    fallbackMessage: string,\n    workflowExecution?: WorkflowExecution\n  ): never {\n    if (isGrpcServiceError(err)) {\n      if (err.code === grpcStatus.DEADLINE_EXCEEDED || err.code === grpcStatus.CANCELLED) {\n        throw new WorkflowUpdateRPCTimeoutOrCancelledError(err.details ?? 'Workflow update call timeout or cancelled', {\n          cause: err,\n        });\n      }\n    }\n\n    if (err instanceof CancelledFailure) {\n      throw new WorkflowUpdateRPCTimeoutOrCancelledError(err.message ?? 'Workflow update call timeout or cancelled', {\n        cause: err,\n      });\n    }\n\n    this.rethrowGrpcError(err, fallbackMessage, workflowExecution);\n  }\n\n  protected rethrowGrpcError(err: unknown, fallbackMessage: string, workflowExecution?: WorkflowExecution): never {\n    if (isGrpcServiceError(err)) {\n      rethrowKnownErrorTypes(err);\n\n      if (err.code === grpcStatus.NOT_FOUND) {\n        throw new WorkflowNotFoundError(\n          err.details ?? 'Workflow not found',\n          workflowExecution?.workflowId ?? '',\n          workflowExecution?.runId\n        );\n      }\n\n      throw new ServiceError(fallbackMessage, { cause: err });\n    }\n    throw new ServiceError('Unexpected error while making gRPC request', { cause: err as Error });\n  }\n\n  /**\n   * Use given input to make a queryWorkflow call to the service\n   *\n   * Used as the final function of the query interceptor chain\n   */\n  protected async _queryWorkflowHandler(input: WorkflowQueryInput): Promise<unknown> {\n    const dataConverter = this.dataConverter;\n    const context = this.workflowSerializationContext(input.workflowExecution.workflowId!);\n    const req: temporal.api.workflowservice.v1.IQueryWorkflowRequest = {\n      queryRejectCondition: input.queryRejectCondition,\n      namespace: this.options.namespace,\n      execution: input.workflowExecution,\n      query: {\n        queryType: input.queryType,\n        queryArgs: { payloads: await encodeToPayloadsWithContext(dataConverter, context, input.args) },\n        header: { fields: input.headers },\n      },\n    };\n    let response: temporal.api.workflowservice.v1.QueryWorkflowResponse;\n    try {\n      response = await this.workflowService.queryWorkflow(req);\n    } catch (err) {\n      if (isGrpcServiceError(err)) {\n        rethrowKnownErrorTypes(err);\n        if (err.code === grpcStatus.INVALID_ARGUMENT) {\n          throw new QueryNotRegisteredError(err.message.replace(/^3 INVALID_ARGUMENT: /, ''), err.code);\n        }\n      }\n      this.rethrowGrpcError(err, 'Failed to query Workflow', input.workflowExecution);\n    }\n    if (response.queryRejected) {\n      if (response.queryRejected.status === undefined || response.queryRejected.status === null) {\n        throw new TypeError('Received queryRejected from server with no status');\n      }\n      throw new QueryRejectedError(response.queryRejected.status);\n    }\n    if (!response.queryResult) {\n      throw new TypeError('Invalid response from server');\n    }\n    // We ignore anything but the first result\n    return await decodeFromPayloadsAtIndex(dataConverter, 0, response.queryResult?.payloads, context);\n  }\n\n  protected async _createUpdateWorkflowRequest(\n    lifecycleStage: temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage,\n    input: WorkflowStartUpdateInput\n  ): Promise<temporal.api.workflowservice.v1.IUpdateWorkflowExecutionRequest> {\n    const dataConverter = this.dataConverter;\n    const context = this.workflowSerializationContext(input.workflowExecution.workflowId!);\n    const updateId = input.options?.updateId ?? randomUUID();\n    return {\n      namespace: this.options.namespace,\n      workflowExecution: input.workflowExecution,\n      firstExecutionRunId: input.firstExecutionRunId,\n      waitPolicy: {\n        lifecycleStage,\n      },\n      request: {\n        meta: {\n          updateId,\n          identity: this.options.identity,\n        },\n        input: {\n          header: { fields: input.headers },\n          name: input.updateName,\n          args: { payloads: await encodeToPayloadsWithContext(dataConverter, context, input.args) },\n        },\n      },\n    };\n  }\n\n  /**\n   * Start the Update.\n   *\n   * Used as the final function of the interceptor chain during startUpdate and executeUpdate.\n   */\n  protected async _startUpdateHandler(\n    waitForStage: WorkflowUpdateStage,\n    input: WorkflowStartUpdateInput\n  ): Promise<WorkflowStartUpdateOutput> {\n    let waitForStageProto: temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage =\n      encodeWorkflowUpdateStage(waitForStage) ??\n      UpdateWorkflowExecutionLifecycleStage.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_ACCEPTED;\n\n    waitForStageProto =\n      waitForStageProto >= UpdateWorkflowExecutionLifecycleStage.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_ACCEPTED\n        ? waitForStageProto\n        : UpdateWorkflowExecutionLifecycleStage.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_ACCEPTED;\n\n    const request = await this._createUpdateWorkflowRequest(waitForStageProto, input);\n\n    // Repeatedly send UpdateWorkflowExecution until update is durable (if the server receives a request with\n    // an update ID that already exists, it responds with information for the existing update). If the\n    // requested wait stage is COMPLETED, further polling is done before returning the UpdateHandle.\n    let response: temporal.api.workflowservice.v1.UpdateWorkflowExecutionResponse;\n    try {\n      do {\n        response = await this.workflowService.updateWorkflowExecution(request);\n      } while (\n        response.stage < UpdateWorkflowExecutionLifecycleStage.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_ACCEPTED\n      );\n    } catch (err) {\n      this.rethrowUpdateGrpcError(err, 'Workflow Update failed', input.workflowExecution);\n    }\n    return {\n      updateId: request.request!.meta!.updateId!,\n\n      workflowRunId: response.updateRef!.workflowExecution!.runId!,\n      outcome: response.outcome ?? undefined,\n    };\n  }\n\n  /**\n   * Send the Update-With-Start MultiOperation request.\n   *\n   * Used as the final function of the interceptor chain during\n   * startUpdateWithStart and executeUpdateWithStart.\n   */\n  protected async _updateWithStartHandler(\n    waitForStage: WorkflowUpdateStage,\n    onStart: (startResponse: temporal.api.workflowservice.v1.IStartWorkflowExecutionResponse) => void,\n    onStartError: (err: any) => void,\n    input: WorkflowStartUpdateWithStartInput\n  ): Promise<WorkflowStartUpdateWithStartOutput> {\n    const startInput: WorkflowStartInput = {\n      workflowType: input.workflowType,\n      options: input.workflowStartOptions,\n      headers: input.workflowStartHeaders,\n    };\n    const updateInput: WorkflowStartUpdateInput = {\n      updateName: input.updateName,\n      args: input.updateArgs,\n      workflowExecution: {\n        workflowId: input.workflowStartOptions.workflowId,\n      },\n      options: input.updateOptions,\n      headers: input.updateHeaders,\n    };\n    let seenStart = false;\n    try {\n      const startRequest = await this.createStartWorkflowRequest(startInput);\n      const waitForStageProto = encodeWorkflowUpdateStage(waitForStage)!;\n      const updateRequest = await this._createUpdateWorkflowRequest(waitForStageProto, updateInput);\n      const multiOpReq: temporal.api.workflowservice.v1.IExecuteMultiOperationRequest = {\n        namespace: this.options.namespace,\n        operations: [\n          {\n            startWorkflow: startRequest,\n          },\n          {\n            updateWorkflow: updateRequest,\n          },\n        ],\n      };\n\n      let multiOpResp: temporal.api.workflowservice.v1.IExecuteMultiOperationResponse;\n      let startResp: temporal.api.workflowservice.v1.IStartWorkflowExecutionResponse;\n      let updateResp: temporal.api.workflowservice.v1.IUpdateWorkflowExecutionResponse;\n      let reachedStage: temporal.api.enums.v1.UpdateWorkflowExecutionLifecycleStage;\n      // Repeatedly send ExecuteMultiOperation until update is durable (if the server receives a request with\n      // an update ID that already exists, it responds with information for the existing update). If the\n      // requested wait stage is COMPLETED, further polling is done before returning the UpdateHandle.\n      do {\n        multiOpResp = await this.workflowService.executeMultiOperation(multiOpReq);\n        startResp = multiOpResp.responses?.[0]\n          ?.startWorkflow as temporal.api.workflowservice.v1.IStartWorkflowExecutionResponse;\n        if (!seenStart) {\n          onStart(startResp);\n          seenStart = true;\n        }\n        updateResp = multiOpResp.responses?.[1]\n          ?.updateWorkflow as temporal.api.workflowservice.v1.IUpdateWorkflowExecutionResponse;\n        reachedStage =\n          updateResp.stage ??\n          UpdateWorkflowExecutionLifecycleStage.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_UNSPECIFIED;\n      } while (reachedStage < UpdateWorkflowExecutionLifecycleStage.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_ACCEPTED);\n      return {\n        workflowExecution: {\n          workflowId: updateResp.updateRef!.workflowExecution!.workflowId!,\n          runId: updateResp.updateRef!.workflowExecution!.runId!,\n        },\n        updateId: updateRequest.request!.meta!.updateId!,\n        updateOutcome: updateResp.outcome ?? undefined,\n      };\n    } catch (thrownError) {\n      let err = thrownError;\n      if (isGrpcServiceError(err) && err.code === grpcStatus.ALREADY_EXISTS) {\n        err = new WorkflowExecutionAlreadyStartedError(\n          'Workflow execution already started',\n          input.workflowStartOptions.workflowId,\n          input.workflowType\n        );\n      }\n      if (!seenStart) {\n        onStartError(err);\n      }\n      if (isGrpcServiceError(err)) {\n        this.rethrowUpdateGrpcError(err, 'Update-With-Start failed', updateInput.workflowExecution);\n      }\n      throw err;\n    }\n  }\n\n  protected createWorkflowUpdateHandle<Ret>(\n    updateId: string,\n    workflowId: string,\n    workflowRunId?: string,\n    outcome?: temporal.api.update.v1.IOutcome\n  ): WorkflowUpdateHandle<Ret> {\n    const dataConverter = this.dataConverter;\n    const context = this.workflowSerializationContext(workflowId);\n    return {\n      updateId,\n      workflowId,\n      workflowRunId,\n      result: async () => {\n        const completedOutcome =\n          outcome ?? (await this._pollForUpdateOutcome(updateId, { workflowId, runId: workflowRunId }));\n        if (completedOutcome.failure) {\n          throw new WorkflowUpdateFailedError(\n            'Workflow Update failed',\n            await decodeOptionalFailureToOptionalError(dataConverter, completedOutcome.failure, context)\n          );\n        } else {\n          return await decodeFromPayloadsAtIndex<Ret>(dataConverter, 0, completedOutcome.success?.payloads, context);\n        }\n      },\n    };\n  }\n\n  /**\n   * Poll Update until a response with an outcome is received; return that outcome.\n   * This is used directly; no interceptor is available.\n   */\n  protected async _pollForUpdateOutcome(\n    updateId: string,\n    workflowExecution: temporal.api.common.v1.IWorkflowExecution\n  ): Promise<temporal.api.update.v1.IOutcome> {\n    const req: temporal.api.workflowservice.v1.IPollWorkflowExecutionUpdateRequest = {\n      namespace: this.options.namespace,\n      updateRef: { workflowExecution, updateId },\n      identity: this.options.identity,\n      waitPolicy: {\n        lifecycleStage: encodeWorkflowUpdateStage(WorkflowUpdateStage.COMPLETED),\n      },\n    };\n    for (;;) {\n      try {\n        const response = await this.workflowService.pollWorkflowExecutionUpdate(req);\n        if (response.outcome) {\n          return response.outcome;\n        }\n      } catch (err) {\n        const wE = typeof workflowExecution.workflowId === 'string' ? workflowExecution : undefined;\n        this.rethrowUpdateGrpcError(err, 'Workflow Update Poll failed', wE as WorkflowExecution);\n      }\n    }\n  }\n\n  /**\n   * Use given input to make a signalWorkflowExecution call to the service\n   *\n   * Used as the final function of the signal interceptor chain\n   */\n  protected async _signalWorkflowHandler(input: WorkflowSignalInput): Promise<void> {\n    const dataConverter = this.dataConverter;\n    const context = this.workflowSerializationContext(input.workflowExecution.workflowId!);\n    const req: temporal.api.workflowservice.v1.ISignalWorkflowExecutionRequest = {\n      identity: this.options.identity,\n      namespace: this.options.namespace,\n      workflowExecution: input.workflowExecution,\n      requestId: randomUUID(),\n      // control is unused,\n      signalName: input.signalName,\n      header: { fields: input.headers },\n      input: { payloads: await encodeToPayloadsWithContext(dataConverter, context, input.args) },\n    };\n    try {\n      await this.workflowService.signalWorkflowExecution(req);\n    } catch (err) {\n      this.rethrowGrpcError(err, 'Failed to signal Workflow', input.workflowExecution);\n    }\n  }\n\n  /**\n   * Use given input to make a signalWithStartWorkflowExecution call to the service\n   *\n   * Used as the final function of the signalWithStart interceptor chain\n   */\n  protected async _signalWithStartWorkflowHandler(input: WorkflowSignalWithStartInput): Promise<string> {\n    const { identity } = this.options;\n    const { options, workflowType, signalName, signalArgs, headers } = input;\n    const dataConverter = this.dataConverter;\n    const context = this.workflowSerializationContext(options.workflowId);\n    const req: temporal.api.workflowservice.v1.ISignalWithStartWorkflowExecutionRequest = {\n      namespace: this.options.namespace,\n      identity,\n      requestId: randomUUID(),\n      workflowId: options.workflowId,\n      workflowIdReusePolicy: encodeWorkflowIdReusePolicy(options.workflowIdReusePolicy),\n      workflowIdConflictPolicy: encodeWorkflowIdConflictPolicy(options.workflowIdConflictPolicy),\n      workflowType: { name: workflowType },\n      input: { payloads: await encodeToPayloadsWithContext(dataConverter, context, options.args) },\n      signalName,\n      signalInput: { payloads: await encodeToPayloadsWithContext(dataConverter, context, signalArgs) },\n      taskQueue: {\n        kind: temporal.api.enums.v1.TaskQueueKind.TASK_QUEUE_KIND_NORMAL,\n        name: options.taskQueue,\n      },\n      workflowExecutionTimeout: options.workflowExecutionTimeout,\n      workflowRunTimeout: options.workflowRunTimeout,\n      workflowTaskTimeout: options.workflowTaskTimeout,\n      workflowStartDelay: options.startDelay,\n      retryPolicy: options.retry ? compileRetryPolicy(options.retry) : undefined,\n      memo: options.memo ? { fields: await encodeMapToPayloads(dataConverter, options.memo, context) } : undefined,\n      searchAttributes:\n        options.searchAttributes || options.typedSearchAttributes\n          ? {\n              indexedFields: encodeUnifiedSearchAttributes(options.searchAttributes, options.typedSearchAttributes),\n            }\n          : undefined,\n      cronSchedule: options.cronSchedule,\n      header: { fields: headers },\n      userMetadata: await encodeUserMetadata(dataConverter, options.staticSummary, options.staticDetails, context),\n      priority: options.priority ? compilePriority(options.priority) : undefined,\n      versioningOverride: options.versioningOverride ?? undefined,\n    };\n    try {\n      return (await this.workflowService.signalWithStartWorkflowExecution(req)).runId;\n    } catch (err: any) {\n      if (err.code === grpcStatus.ALREADY_EXISTS) {\n        throw new WorkflowExecutionAlreadyStartedError(\n          'Workflow execution already started',\n          options.workflowId,\n          workflowType\n        );\n      }\n      this.rethrowGrpcError(err, 'Failed to signalWithStart Workflow', { workflowId: options.workflowId });\n    }\n  }\n\n  /**\n   * Use given input to make startWorkflowExecution call to the service\n   *\n   * Used as the final function of the start interceptor chain\n   */\n  protected async _startWorkflowHandler(input: WorkflowStartInput): Promise<WorkflowStartOutput> {\n    const req = await this.createStartWorkflowRequest(input);\n    const { options: opts, workflowType } = input;\n    const internalOptions = (opts as InternalWorkflowStartOptions)[InternalWorkflowStartOptionsSymbol];\n    try {\n      const response = await this.workflowService.startWorkflowExecution(req);\n      if (internalOptions != null) {\n        internalOptions.backLink = response.link ?? undefined;\n      }\n      return {\n        runId: response.runId,\n        eagerlyStarted: response.eagerWorkflowTask != null,\n      };\n    } catch (err: any) {\n      if (err.code === grpcStatus.ALREADY_EXISTS) {\n        throw new WorkflowExecutionAlreadyStartedError(\n          'Workflow execution already started',\n          opts.workflowId,\n          workflowType\n        );\n      }\n      this.rethrowGrpcError(err, 'Failed to start Workflow', { workflowId: opts.workflowId });\n    }\n  }\n\n  protected async createStartWorkflowRequest(input: WorkflowStartInput): Promise<StartWorkflowExecutionRequest> {\n    const { options: opts, workflowType, headers } = input;\n    const { identity, namespace } = this.options;\n    const dataConverter = this.dataConverter;\n    const context = this.workflowSerializationContext(opts.workflowId);\n    const internalOptions = (opts as InternalWorkflowStartOptions)[InternalWorkflowStartOptionsSymbol];\n    const supportsEagerStart = (this.connection as InternalConnectionLike)?.[InternalConnectionLikeSymbol]\n      ?.supportsEagerStart;\n\n    if (opts.requestEagerStart && !supportsEagerStart) {\n      throw new Error(\n        'Eager workflow start requires a NativeConnection shared between client and worker. ' +\n          'Pass a NativeConnection via ClientOptions.connection, or disable requestEagerStart.'\n      );\n    }\n\n    // Server currently only supports workflow_event and batch_job\n    // link types. This filter should be removed or adapted as\n    // server-side support comes online.\n    // See https://github.com/temporalio/temporal/issues/10345\n    const links = internalOptions?.links?.filter((link) => link.workflowEvent != null || link.batchJob != null);\n\n    const completionCallbacks = internalOptions?.completionCallbacks?.map((cb) => {\n      const links = cb?.links?.filter((link) => link.workflowEvent != null || link.batchJob != null);\n      return { ...cb, links };\n    });\n\n    const resolvedInternalOptions = { ...(internalOptions ?? {}), links, completionCallbacks };\n\n    return {\n      namespace,\n      identity,\n      requestId: internalOptions?.requestId ?? randomUUID(),\n      workflowId: opts.workflowId,\n      workflowIdReusePolicy: encodeWorkflowIdReusePolicy(opts.workflowIdReusePolicy),\n      workflowIdConflictPolicy: encodeWorkflowIdConflictPolicy(opts.workflowIdConflictPolicy),\n      workflowType: { name: workflowType },\n      input: { payloads: await encodeToPayloadsWithContext(dataConverter, context, opts.args) },\n      taskQueue: {\n        kind: temporal.api.enums.v1.TaskQueueKind.TASK_QUEUE_KIND_NORMAL,\n        name: opts.taskQueue,\n      },\n      workflowExecutionTimeout: opts.workflowExecutionTimeout,\n      workflowRunTimeout: opts.workflowRunTimeout,\n      workflowTaskTimeout: opts.workflowTaskTimeout,\n      workflowStartDelay: opts.startDelay,\n      retryPolicy: opts.retry ? compileRetryPolicy(opts.retry) : undefined,\n      memo: opts.memo ? { fields: await encodeMapToPayloads(dataConverter, opts.memo, context) } : undefined,\n      searchAttributes:\n        opts.searchAttributes || opts.typedSearchAttributes\n          ? {\n              indexedFields: encodeUnifiedSearchAttributes(opts.searchAttributes, opts.typedSearchAttributes),\n            }\n          : undefined,\n      cronSchedule: opts.cronSchedule,\n      header: { fields: headers },\n      userMetadata: await encodeUserMetadata(dataConverter, opts.staticSummary, opts.staticDetails, context),\n      priority: opts.priority ? compilePriority(opts.priority) : undefined,\n      versioningOverride: opts.versioningOverride ?? undefined,\n      requestEagerExecution: opts.requestEagerStart,\n      ...filterNullAndUndefined(resolvedInternalOptions),\n    };\n  }\n\n  /**\n   * Use given input to make terminateWorkflowExecution call to the service\n   *\n   * Used as the final function of the terminate interceptor chain\n   */\n  protected async _terminateWorkflowHandler(\n    input: WorkflowTerminateInput\n  ): Promise<TerminateWorkflowExecutionResponse> {\n    const dataConverter = this.dataConverter;\n    const context = this.workflowSerializationContext(input.workflowExecution.workflowId!);\n    const req: temporal.api.workflowservice.v1.ITerminateWorkflowExecutionRequest = {\n      namespace: this.options.namespace,\n      identity: this.options.identity,\n      ...input,\n      details: {\n        payloads: input.details ? await encodeToPayloadsWithContext(dataConverter, context, input.details) : undefined,\n      },\n      firstExecutionRunId: input.firstExecutionRunId,\n    };\n    try {\n      return await this.workflowService.terminateWorkflowExecution(req);\n    } catch (err) {\n      this.rethrowGrpcError(err, 'Failed to terminate Workflow', input.workflowExecution);\n    }\n  }\n\n  /**\n   * Uses given input to make requestCancelWorkflowExecution call to the service\n   *\n   * Used as the final function of the cancel interceptor chain\n   */\n  protected async _cancelWorkflowHandler(input: WorkflowCancelInput): Promise<RequestCancelWorkflowExecutionResponse> {\n    try {\n      return await this.workflowService.requestCancelWorkflowExecution({\n        namespace: this.options.namespace,\n        identity: this.options.identity,\n        requestId: randomUUID(),\n        workflowExecution: input.workflowExecution,\n        firstExecutionRunId: input.firstExecutionRunId,\n      });\n    } catch (err) {\n      this.rethrowGrpcError(err, 'Failed to cancel workflow', input.workflowExecution);\n    }\n  }\n\n  /**\n   * Uses given input to make describeWorkflowExecution call to the service\n   *\n   * Used as the final function of the describe interceptor chain\n   */\n  protected async _describeWorkflowHandler(input: WorkflowDescribeInput): Promise<DescribeWorkflowExecutionResponse> {\n    try {\n      return await this.workflowService.describeWorkflowExecution({\n        namespace: this.options.namespace,\n        execution: input.workflowExecution,\n      });\n    } catch (err) {\n      this.rethrowGrpcError(err, 'Failed to describe workflow', input.workflowExecution);\n    }\n  }\n\n  /**\n   * Create a new workflow handle for new or existing Workflow execution\n   */\n  protected _createWorkflowHandle<T extends Workflow>({\n    workflowId,\n    runId,\n    firstExecutionRunId,\n    interceptors,\n    runIdForResult,\n    ...resultOptions\n  }: WorkflowHandleOptions): WorkflowHandle<T> {\n    const _startUpdate = async <Ret, Args extends unknown[]>(\n      def: UpdateDefinition<Ret, Args> | string,\n      waitForStage: WorkflowUpdateStage,\n      options?: WorkflowUpdateOptions & { args?: Args }\n    ): Promise<WorkflowUpdateHandle<Ret>> => {\n      const next = this._startUpdateHandler.bind(this, waitForStage);\n      const fn = composeInterceptors(interceptors, 'startUpdate', next);\n      const { args, ...opts } = options ?? {};\n      const input = {\n        workflowExecution: { workflowId, runId },\n        firstExecutionRunId,\n        updateName: typeof def === 'string' ? def : def.name,\n        args: args ?? [],\n        waitForStage,\n        headers: {},\n        options: opts,\n      };\n      const output = await fn(input);\n      const handle = this.createWorkflowUpdateHandle<Ret>(\n        output.updateId,\n        input.workflowExecution.workflowId,\n        output.workflowRunId,\n        output.outcome\n      );\n      if (!output.outcome && waitForStage === WorkflowUpdateStage.COMPLETED) {\n        await this._pollForUpdateOutcome(handle.updateId, input.workflowExecution);\n      }\n      return handle;\n    };\n\n    return {\n      client: this,\n      workflowId,\n      async result(): Promise<WorkflowResultType<T>> {\n        return this.client.result(workflowId, runIdForResult, resultOptions);\n      },\n      async terminate(reason?: string) {\n        const next = this.client._terminateWorkflowHandler.bind(this.client);\n        const fn = composeInterceptors(interceptors, 'terminate', next);\n        return await fn({\n          workflowExecution: { workflowId, runId },\n          reason,\n          firstExecutionRunId,\n        });\n      },\n      async cancel() {\n        const next = this.client._cancelWorkflowHandler.bind(this.client);\n        const fn = composeInterceptors(interceptors, 'cancel', next);\n        return await fn({\n          workflowExecution: { workflowId, runId },\n          firstExecutionRunId,\n        });\n      },\n      async describe() {\n        const next = this.client._describeWorkflowHandler.bind(this.client);\n        const fn = composeInterceptors(interceptors, 'describe', next);\n        const raw = await fn({\n          workflowExecution: { workflowId, runId },\n        });\n        const info = await executionInfoFromRaw(\n          raw.workflowExecutionInfo ?? {},\n          this.client.dataConverter,\n          raw,\n          this.client.options.namespace\n        );\n        const userMetadata = raw.executionConfig?.userMetadata;\n        const context = this.client.workflowSerializationContext(workflowId);\n        return {\n          ...info,\n          staticDetails: async () =>\n            (await decodeOptionalSinglePayload(this.client.dataConverter, userMetadata?.details, context)) ?? undefined,\n          staticSummary: async () =>\n            (await decodeOptionalSinglePayload(this.client.dataConverter, userMetadata?.summary, context)) ?? undefined,\n          raw,\n        };\n      },\n      async fetchHistory() {\n        let nextPageToken: Uint8Array | undefined = undefined;\n        const events = Array<temporal.api.history.v1.IHistoryEvent>();\n        for (;;) {\n          const response: temporal.api.workflowservice.v1.GetWorkflowExecutionHistoryResponse =\n            await this.client.workflowService.getWorkflowExecutionHistory({\n              nextPageToken,\n              namespace: this.client.options.namespace,\n              execution: { workflowId, runId },\n            });\n          events.push(...(response.history?.events ?? []));\n          nextPageToken = response.nextPageToken;\n          if (nextPageToken == null || nextPageToken.length === 0) break;\n        }\n        return temporal.api.history.v1.History.create({ events });\n      },\n      async startUpdate<Ret, Args extends any[]>(\n        def: UpdateDefinition<Ret, Args> | string,\n        options: WorkflowUpdateOptions & {\n          args?: Args;\n          waitForStage: typeof WorkflowUpdateStage.ACCEPTED;\n        }\n      ): Promise<WorkflowUpdateHandle<Ret>> {\n        return await _startUpdate(def, options.waitForStage, options);\n      },\n      async executeUpdate<Ret, Args extends any[]>(\n        def: UpdateDefinition<Ret, Args> | string,\n        options?: WorkflowUpdateOptions & { args?: Args }\n      ): Promise<Ret> {\n        const handle = await _startUpdate(def, WorkflowUpdateStage.COMPLETED, options);\n        return await handle.result();\n      },\n      getUpdateHandle<Ret>(updateId: string): WorkflowUpdateHandle<Ret> {\n        return this.client.createWorkflowUpdateHandle(updateId, workflowId, runId);\n      },\n      async signal<Args extends any[]>(def: SignalDefinition<Args> | string, ...args: Args): Promise<void> {\n        const next = this.client._signalWorkflowHandler.bind(this.client);\n        const fn = composeInterceptors(interceptors, 'signal', next);\n        await fn({\n          workflowExecution: { workflowId, runId },\n          signalName: typeof def === 'string' ? def : def.name,\n          args,\n          headers: {},\n        });\n      },\n      async query<Ret, Args extends any[]>(def: QueryDefinition<Ret, Args> | string, ...args: Args): Promise<Ret> {\n        const next = this.client._queryWorkflowHandler.bind(this.client);\n        const fn = composeInterceptors(interceptors, 'query', next);\n        return fn({\n          workflowExecution: { workflowId, runId },\n          queryRejectCondition: encodeQueryRejectCondition(this.client.options.queryRejectCondition),\n          queryType: typeof def === 'string' ? def : def.name,\n          args,\n          headers: {},\n        }) as Promise<Ret>;\n      },\n    };\n  }\n\n  /**\n   * Create a handle to an existing Workflow.\n   *\n   * - If only `workflowId` is passed, and there are multiple Workflow Executions with that ID, the handle will refer to\n   *   the most recent one.\n   * - If `workflowId` and `runId` are passed, the handle will refer to the specific Workflow Execution with that Run\n   *   ID.\n   * - If `workflowId` and {@link GetWorkflowHandleOptions.firstExecutionRunId} are passed, the handle will refer to the\n   *   most recent Workflow Execution in the *Chain* that started with `firstExecutionRunId`.\n   *\n   * A *Chain* is a series of Workflow Executions that share the same Workflow ID and are connected by:\n   * - Being part of the same {@link https://docs.temporal.io/typescript/clients#scheduling-cron-workflows | Cron}\n   * - {@link https://docs.temporal.io/typescript/workflows#continueasnew | Continue As New}\n   * - {@link https://typescript.temporal.io/api/interfaces/client.workflowoptions/#retry | Retries}\n   *\n   * This method does not validate `workflowId`. If there is no Workflow Execution with the given `workflowId`, handle\n   * methods like `handle.describe()` will throw a {@link WorkflowNotFoundError} error.\n   */\n  public getHandle<T extends Workflow>(\n    workflowId: string,\n    runId?: string,\n    options?: GetWorkflowHandleOptions\n  ): WorkflowHandle<T> {\n    const interceptors = this.getOrMakeInterceptors(workflowId, runId);\n\n    return this._createWorkflowHandle({\n      workflowId,\n      runId,\n      firstExecutionRunId: options?.firstExecutionRunId,\n      runIdForResult: runId ?? options?.firstExecutionRunId,\n      interceptors,\n      followRuns: options?.followRuns ?? true,\n    });\n  }\n\n  protected async *_list(options?: ListOptions): AsyncIterable<WorkflowExecutionInfo> {\n    let nextPageToken: Uint8Array = Buffer.alloc(0);\n    for (;;) {\n      let response: temporal.api.workflowservice.v1.ListWorkflowExecutionsResponse;\n      try {\n        response = await this.workflowService.listWorkflowExecutions({\n          namespace: this.options.namespace,\n          query: options?.query,\n          nextPageToken,\n          pageSize: options?.pageSize,\n        });\n      } catch (e) {\n        this.rethrowGrpcError(e, 'Failed to list workflows', undefined);\n      }\n      // Not decoding memo payloads concurrently even though we could have to keep the lazy nature of this iterator.\n      // Decoding is done for `memo` fields which tend to be small.\n      // We might decide to change that based on user feedback.\n      for (const raw of response.executions) {\n        yield await executionInfoFromRaw(raw, this.dataConverter, raw, this.options.namespace);\n      }\n      nextPageToken = response.nextPageToken;\n      if (nextPageToken == null || nextPageToken.length === 0) break;\n    }\n  }\n\n  /**\n   * Return a list of Workflow Executions matching the given `query`.\n   *\n   * Note that the list of Workflow Executions returned is approximate and eventually consistent.\n   *\n   * More info on the concept of \"visibility\" and the query syntax on the Temporal documentation site:\n   * https://docs.temporal.io/visibility\n   */\n  public list(options?: ListOptions): AsyncWorkflowListIterable {\n    return {\n      [Symbol.asyncIterator]: () => this._list(options)[Symbol.asyncIterator](),\n      intoHistories: (intoHistoriesOptions?: IntoHistoriesOptions) => {\n        return mapAsyncIterable(\n          this._list(options),\n          async ({ workflowId, runId }) => ({\n            workflowId,\n            history: await this.getHandle(workflowId, runId).fetchHistory(),\n          }),\n          { concurrency: intoHistoriesOptions?.concurrency ?? 5 }\n        );\n      },\n    };\n  }\n\n  /**\n   * Return the number of Workflow Executions matching the given `query`. If no `query` is provided, then return the\n   * total number of Workflow Executions for this namespace.\n   *\n   * Note that the number of Workflow Executions returned is approximate and eventually consistent.\n   *\n   * More info on the concept of \"visibility\" and the query syntax on the Temporal documentation site:\n   * https://docs.temporal.io/visibility\n   */\n  public async count(query?: string): Promise<CountWorkflowExecution> {\n    let response: temporal.api.workflowservice.v1.CountWorkflowExecutionsResponse;\n    try {\n      response = await this.workflowService.countWorkflowExecutions({\n        namespace: this.options.namespace,\n        query,\n      });\n    } catch (e) {\n      this.rethrowGrpcError(e, 'Failed to count workflows');\n    }\n\n    return decodeCountWorkflowExecutionsResponse(response);\n  }\n\n  protected getOrMakeInterceptors(workflowId: string, runId?: string): WorkflowClientInterceptor[] {\n    if (typeof this.options.interceptors === 'object' && 'calls' in this.options.interceptors) {\n      // eslint-disable-next-line @typescript-eslint/no-deprecated\n      const factories = (this.options.interceptors as WorkflowClientInterceptors).calls ?? [];\n      return factories.map((ctor) => ctor({ workflowId, runId }));\n    }\n    return Array.isArray(this.options.interceptors) ? (this.options.interceptors as WorkflowClientInterceptor[]) : [];\n  }\n}\n\n@SymbolBasedInstanceOfError('QueryRejectedError')\nexport class QueryRejectedError extends Error {\n  constructor(public readonly status: temporal.api.enums.v1.WorkflowExecutionStatus) {\n    super('Query rejected');\n  }\n}\n\n@SymbolBasedInstanceOfError('QueryNotRegisteredError')\nexport class QueryNotRegisteredError extends Error {\n  constructor(\n    message: string,\n    public readonly code: grpcStatus\n  ) {\n    super(message);\n  }\n}\n","import type { temporal } from '@temporalio/proto';\n\n/**\n * Operations that can be passed to {@link TaskQueueClient.updateBuildIdCompatibility}.\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport type BuildIdOperation =\n  | AddNewIdInNewDefaultSet\n  | AddNewCompatibleVersion\n  | PromoteSetByBuildId\n  | PromoteBuildIdWithinSet\n  | MergeSets;\n\n/**\n * Adds a new Build Id into a new set, which will be used as the default set for\n * the queue. This means all new workflows will start on this Build Id.\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface AddNewIdInNewDefaultSet {\n  operation: 'addNewIdInNewDefaultSet';\n  buildId: string;\n}\n\n/**\n * Adds a new Build Id into an existing compatible set. The newly added ID becomes\n * the default for that compatible set, and thus new workflow tasks for workflows which have been\n * executing on workers in that set will now start on this new Build Id.\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface AddNewCompatibleVersion {\n  operation: 'addNewCompatibleVersion';\n  // The Build Id to add to an existing compatible set.\n  buildId: string;\n  // A Build Id which must already be defined on the task queue, and is used to\n  // find the compatible set to add the new id to.\n  existingCompatibleBuildId: string;\n  // If set to true, the targeted set will also be promoted to become the\n  // overall default set for the queue.\n  promoteSet?: boolean;\n}\n\n/**\n * Promotes a set of compatible Build Ids to become the current\n * default set for the task queue. Any Build Id in the set may be used to\n * target it.\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface PromoteSetByBuildId {\n  operation: 'promoteSetByBuildId';\n  buildId: string;\n}\n\n/**\n * Promotes a Build Id within an existing set to become the default ID for that\n * set.\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface PromoteBuildIdWithinSet {\n  operation: 'promoteBuildIdWithinSet';\n  buildId: string;\n}\n\n/**\n * Merges two sets into one set, thus declaring all the Build Ids in both as\n * compatible with one another. The default of the primary set is maintained as\n * the merged set's overall default.\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface MergeSets {\n  operation: 'mergeSets';\n  // A Build Id which is used to find the primary set to be merged.\n  primaryBuildId: string;\n  // A Build Id which is used to find the secondary set to be merged.\n  secondaryBuildId: string;\n}\n\n/**\n * Represents the sets of compatible Build Id versions associated with some\n * Task Queue, as fetched by {@link TaskQueueClient.getBuildIdCompatability}.\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface WorkerBuildIdVersionSets {\n  /**\n   * All version sets that were fetched for this task queue.\n   */\n  readonly versionSets: BuildIdVersionSet[];\n\n  /**\n   * Returns the default set of compatible Build Ids for the task queue these sets are\n   * associated with.\n   */\n  defaultSet: BuildIdVersionSet;\n\n  /**\n   * Returns the overall default Build Id for the task queue these sets are\n   * associated with.\n   */\n  defaultBuildId: string;\n}\n\n/**\n * Represents one set of compatible Build Ids.\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface BuildIdVersionSet {\n  // All build IDs contained in the set.\n  readonly buildIds: string[];\n\n  // Returns the default Build Id for this set\n  readonly default: string;\n}\n\nexport function versionSetsFromProto(\n  resp: temporal.api.workflowservice.v1.GetWorkerBuildIdCompatibilityResponse\n): WorkerBuildIdVersionSets {\n  if (resp == null || resp.majorVersionSets == null || resp.majorVersionSets.length === 0) {\n    throw new Error('Must be constructed from a compatability response with at least one version set');\n  }\n  return {\n    versionSets: resp.majorVersionSets.map((set) => versionSetFromProto(set)),\n    get defaultSet(): BuildIdVersionSet {\n      // versionSets are read only so no need to worry about an undefined ending up in it\n      return this.versionSets[this.versionSets.length - 1]!;\n    },\n    get defaultBuildId(): string {\n      return this.defaultSet.default;\n    },\n  };\n}\n\nfunction versionSetFromProto(set: temporal.api.taskqueue.v1.ICompatibleVersionSet): BuildIdVersionSet {\n  if (set == null || set.buildIds == null || set.buildIds.length === 0) {\n    throw new Error('Compatible version sets must contain at least one Build Id');\n  }\n  const buildId = set.buildIds[set.buildIds.length - 1];\n  if (buildId === undefined) {\n    throw new Error('Compatible version sets must contain at least one Build Id');\n  }\n  return {\n    buildIds: set.buildIds,\n    default: buildId,\n  };\n}\n","import { status } from '@grpc/grpc-js';\nimport type { RequireAtLeastOne } from '@temporalio/common/lib/type-helpers';\nimport { assertNever, SymbolBasedInstanceOfError } from '@temporalio/common/lib/type-helpers';\nimport { filterNullAndUndefined, makeProtoEnumConverters } from '@temporalio/common/lib/internal-workflow';\nimport type { temporal } from '@temporalio/proto';\nimport type { BaseClientOptions, LoadedWithDefaults } from './base-client';\nimport { BaseClient, defaultBaseClientOptions } from './base-client';\nimport type { WorkflowService } from './types';\nimport type { BuildIdOperation, WorkerBuildIdVersionSets } from './build-id-types';\nimport { versionSetsFromProto } from './build-id-types';\nimport { isGrpcServiceError, ServiceError } from './errors';\nimport { rethrowKnownErrorTypes } from './helpers';\n\ntype IUpdateWorkerBuildIdCompatibilityRequest =\n  temporal.api.workflowservice.v1.IUpdateWorkerBuildIdCompatibilityRequest;\ntype GetWorkerTaskReachabilityResponse = temporal.api.workflowservice.v1.GetWorkerTaskReachabilityResponse;\n\n/**\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport type TaskQueueClientOptions = BaseClientOptions;\n\n/**\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport type LoadedTaskQueueClientOptions = LoadedWithDefaults<TaskQueueClientOptions>;\n\n/**\n * A stand-in for a Build Id for unversioned Workers\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport const UnversionedBuildId = Symbol.for('__temporal_unversionedBuildId');\nexport type UnversionedBuildIdType = typeof UnversionedBuildId;\n\n/**\n * Client for starting Workflow executions and creating Workflow handles\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport class TaskQueueClient extends BaseClient {\n  public readonly options: LoadedTaskQueueClientOptions;\n\n  constructor(options?: TaskQueueClientOptions) {\n    super(options);\n    this.options = {\n      ...defaultBaseClientOptions(),\n      ...filterNullAndUndefined(options ?? {}),\n      loadedDataConverter: this.dataConverter,\n    };\n  }\n\n  /**\n   * Raw gRPC access to the Temporal service.\n   *\n   * **NOTE**: The namespace provided in {@link options} is **not** automatically set on requests\n   * using this service attribute.\n   */\n  get workflowService(): WorkflowService {\n    return this.connection.workflowService;\n  }\n\n  /**\n   * Used to add new Build Ids or otherwise update the relative compatibility of Build Ids as\n   * defined on a specific task queue for the Worker Versioning feature. For more on this feature,\n   * see https://docs.temporal.io/workers#worker-versioning\n   *\n   * @param taskQueue The task queue to make changes to.\n   * @param operation The operation to be performed.\n   *\n   * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n   */\n  public async updateBuildIdCompatibility(taskQueue: string, operation: BuildIdOperation): Promise<void> {\n    const request: IUpdateWorkerBuildIdCompatibilityRequest = {\n      namespace: this.options.namespace,\n      taskQueue,\n    };\n    switch (operation.operation) {\n      case 'addNewIdInNewDefaultSet':\n        request.addNewBuildIdInNewDefaultSet = operation.buildId;\n        break;\n      case 'addNewCompatibleVersion':\n        request.addNewCompatibleBuildId = {\n          newBuildId: operation.buildId,\n          existingCompatibleBuildId: operation.existingCompatibleBuildId,\n        };\n        break;\n      case 'promoteSetByBuildId':\n        request.promoteSetByBuildId = operation.buildId;\n        break;\n      case 'promoteBuildIdWithinSet':\n        request.promoteBuildIdWithinSet = operation.buildId;\n        break;\n      case 'mergeSets':\n        request.mergeSets = {\n          primarySetBuildId: operation.primaryBuildId,\n          secondarySetBuildId: operation.secondaryBuildId,\n        };\n        break;\n      default:\n        assertNever('Unknown build id update operation', operation);\n    }\n    try {\n      await this.workflowService.updateWorkerBuildIdCompatibility(request);\n    } catch (e) {\n      this.rethrowGrpcError(e, 'Unexpected error updating Build Id compatibility');\n    }\n  }\n\n  /**\n   * Fetch the sets of compatible Build Ids for a given task queue.\n   *\n   * @param taskQueue The task queue to fetch the compatibility information for.\n   * @returns The sets of compatible Build Ids for the given task queue, or undefined if the queue\n   *          has no Build Ids defined on it.\n   *\n   * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n   */\n  public async getBuildIdCompatability(taskQueue: string): Promise<WorkerBuildIdVersionSets | undefined> {\n    let resp;\n    try {\n      resp = await this.workflowService.getWorkerBuildIdCompatibility({\n        taskQueue,\n        namespace: this.options.namespace,\n      });\n    } catch (e) {\n      this.rethrowGrpcError(e, 'Unexpected error fetching Build Id compatibility');\n    }\n    if (resp.majorVersionSets == null || resp.majorVersionSets.length === 0) {\n      return undefined;\n    }\n    return versionSetsFromProto(resp);\n  }\n\n  /**\n   * Fetches task reachability to determine whether a worker may be retired. The request may specify\n   * task queues to query for or let the server fetch all task queues mapped to the given build IDs.\n   *\n   * When requesting a large number of task queues or all task queues associated with the given\n   * build ids in a namespace, all task queues will be listed in the response but some of them may\n   * not contain reachability information due to a server enforced limit. When reaching the limit,\n   * task queues that reachability information could not be retrieved for will be marked with a\n   * `NotFetched` entry in {@link BuildIdReachability.taskQueueReachability}. The caller may issue\n   * another call to get the reachability for those task queues.\n   *\n   * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n   */\n  public async getReachability(options: ReachabilityOptions): Promise<ReachabilityResponse> {\n    let resp;\n    const buildIds = options.buildIds?.map((bid) => {\n      if (bid === UnversionedBuildId) {\n        return '';\n      }\n      return bid;\n    });\n    try {\n      resp = await this.workflowService.getWorkerTaskReachability({\n        namespace: this.options.namespace,\n        taskQueues: options.taskQueues,\n        buildIds,\n        reachability: encodeTaskReachability(options.reachability),\n      });\n    } catch (e) {\n      this.rethrowGrpcError(e, 'Unexpected error fetching Build Id reachability');\n    }\n    return reachabilityResponseFromProto(resp);\n  }\n\n  protected rethrowGrpcError(err: unknown, fallbackMessage: string): never {\n    if (isGrpcServiceError(err)) {\n      rethrowKnownErrorTypes(err);\n      if (err.code === status.NOT_FOUND) {\n        throw new BuildIdNotFoundError(err.details ?? 'Build Id not found');\n      }\n      throw new ServiceError(fallbackMessage, { cause: err });\n    }\n    throw new ServiceError('Unexpected error while making gRPC request');\n  }\n}\n\n/**\n * Options for {@link TaskQueueClient.getReachability}\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport type ReachabilityOptions = RequireAtLeastOne<BaseReachabilityOptions, 'buildIds' | 'taskQueues'>;\n\n/**\n * There are different types of reachability:\n *   - `NEW_WORKFLOWS`: The Build Id might be used by new workflows\n *   - `EXISTING_WORKFLOWS` The Build Id might be used by open workflows and/or closed workflows.\n *   - `OPEN_WORKFLOWS` The Build Id might be used by open workflows\n *   - `CLOSED_WORKFLOWS` The Build Id might be used by closed workflows\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport const ReachabilityType = {\n  /** The Build Id might be used by new workflows. */\n  NEW_WORKFLOWS: 'NEW_WORKFLOWS',\n\n  /** The Build Id might be used by open workflows and/or closed workflows. */\n  EXISTING_WORKFLOWS: 'EXISTING_WORKFLOWS',\n\n  /** The Build Id might be used by open workflows. */\n  OPEN_WORKFLOWS: 'OPEN_WORKFLOWS',\n\n  /** The Build Id might be used by closed workflows. */\n  CLOSED_WORKFLOWS: 'CLOSED_WORKFLOWS',\n} as const;\nexport type ReachabilityType = (typeof ReachabilityType)[keyof typeof ReachabilityType];\n\nexport const [encodeTaskReachability, decodeTaskReachability] = makeProtoEnumConverters<\n  temporal.api.enums.v1.TaskReachability,\n  typeof temporal.api.enums.v1.TaskReachability,\n  keyof typeof temporal.api.enums.v1.TaskReachability,\n  typeof ReachabilityType,\n  'TASK_REACHABILITY_'\n>(\n  {\n    [ReachabilityType.NEW_WORKFLOWS]: 1,\n    [ReachabilityType.EXISTING_WORKFLOWS]: 2,\n    [ReachabilityType.OPEN_WORKFLOWS]: 3,\n    [ReachabilityType.CLOSED_WORKFLOWS]: 4,\n    UNSPECIFIED: 0,\n  } as const,\n  'TASK_REACHABILITY_'\n);\n\n/**\n * See {@link ReachabilityOptions}\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface BaseReachabilityOptions {\n  /**\n   * A list of build ids to query the reachability of. Currently, at least one Build Id must be\n   * specified, but this restriction may be lifted in the future.\n   */\n  buildIds: (string | UnversionedBuildIdType)[];\n  /**\n   * A list of task queues with Build Ids defined on them that the request is\n   * concerned with.\n   */\n  taskQueues?: string[];\n  /** The kind of reachability this request is concerned with. */\n  reachability?: ReachabilityType;\n}\n\n/**\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface ReachabilityResponse {\n  /** Maps Build Ids to their reachability information. */\n  buildIdReachability: Record<string | UnversionedBuildIdType, BuildIdReachability>;\n}\n\n/**\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport type ReachabilityTypeResponse = ReachabilityType | 'NOT_FETCHED';\n\n/**\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\nexport interface BuildIdReachability {\n  /**\n   *  Maps Task Queue names to how the Build Id may be reachable from them. If they are not\n   *  reachable, the map value will be an empty array.\n   */\n  taskQueueReachability: Record<string, ReachabilityTypeResponse[]>;\n}\n\nexport function reachabilityResponseFromProto(resp: GetWorkerTaskReachabilityResponse): ReachabilityResponse {\n  return {\n    buildIdReachability: Object.fromEntries(\n      resp.buildIdReachability.map((bir) => {\n        const taskQueueReachability: Record<string, ReachabilityTypeResponse[]> = {};\n        if (bir.taskQueueReachability != null) {\n          for (const tqr of bir.taskQueueReachability) {\n            if (tqr.taskQueue == null) {\n              continue;\n            }\n            if (tqr.reachability == null) {\n              taskQueueReachability[tqr.taskQueue] = [];\n              continue;\n            }\n            taskQueueReachability[tqr.taskQueue] = tqr.reachability.map(\n              (x) => decodeTaskReachability(x) ?? 'NOT_FETCHED'\n            );\n          }\n        }\n        let bid: string | UnversionedBuildIdType;\n        if (bir.buildId) {\n          bid = bir.buildId;\n        } else {\n          bid = UnversionedBuildId;\n        }\n        return [bid, { taskQueueReachability }];\n      })\n    ) as Record<string | UnversionedBuildIdType, BuildIdReachability>,\n  };\n}\n\n/**\n * Thrown when one or more Build Ids are not found while using the {@link TaskQueueClient}.\n *\n * It could be because:\n * - Id passed is incorrect\n * - Build Id has been scavenged by the server.\n *\n * @deprecated Worker Versioning is now deprecated. Please use the Worker Deployment API instead: https://docs.temporal.io/worker-deployments\n */\n@SymbolBasedInstanceOfError('BuildIdNotFoundError')\nexport class BuildIdNotFoundError extends Error {}\n","import { filterNullAndUndefined } from '@temporalio/common/lib/internal-workflow';\nimport type { BaseClientOptions, LoadedWithDefaults } from './base-client';\nimport { BaseClient, defaultBaseClientOptions } from './base-client';\nimport type { ClientInterceptors } from './interceptors';\nimport { NexusClient } from './nexus-client';\nimport { ScheduleClient } from './schedule-client';\nimport type { QueryRejectCondition, WorkflowService } from './types';\nimport { WorkflowClient } from './workflow-client';\nimport { TaskQueueClient } from './task-queue-client';\nimport { ActivityClient } from './activity-client';\n\nexport interface ClientOptions extends BaseClientOptions {\n  /**\n   * Used to override and extend default Connection functionality\n   *\n   * Useful for injecting auth headers and tracing Workflow executions\n   */\n  interceptors?: ClientInterceptors;\n\n  /**\n   * List of plugins to register with the client.\n   *\n   * Plugins allow you to extend and customize the behavior of Temporal clients.\n   * They can intercept and modify client creation.\n   *\n   * @experimental Plugins is an experimental feature; APIs may change without notice.\n   */\n  plugins?: ClientPlugin[];\n\n  workflow?: {\n    /**\n     * Should a query be rejected by closed and failed workflows\n     *\n     * @default `undefined`, which means that closed and failed workflows are still queryable\n     */\n    queryRejectCondition?: QueryRejectCondition;\n  };\n}\n\nexport type LoadedClientOptions = LoadedWithDefaults<ClientOptions>;\n\n/**\n * High level SDK client.\n */\nexport class Client extends BaseClient {\n  public readonly options: LoadedClientOptions;\n\n  /**\n   * Workflow sub-client - use to start and interact with Workflows\n   */\n  public readonly workflow: WorkflowClient;\n  /**\n   * Activity sub-client - use to start and interact with Activities and to perform asynchronous Activity completion\n   */\n  public readonly activity: ActivityClient;\n  /**\n   * Schedule sub-client - use to start and interact with Schedules\n   */\n  public readonly schedule: ScheduleClient;\n  /**\n   * Task Queue sub-client - use to perform operations on Task Queues\n   *\n   * @experimental The Worker Versioning API is still being designed. Major changes are expected.\n   */\n  public readonly taskQueue: TaskQueueClient;\n  /**\n   * Nexus sub-client - use to start and interact with standalone Nexus operations.\n   *\n   * @experimental Standalone Nexus operations are a new API and susceptible to change.\n   */\n  public readonly nexus: NexusClient;\n\n  constructor(options?: ClientOptions) {\n    options = options ?? {};\n\n    // Add client plugins from the connection\n    options.plugins = (options.plugins ?? []).concat(options.connection?.plugins ?? []);\n\n    // Process plugins first to allow them to modify connect configuration\n    for (const plugin of options.plugins) {\n      if (plugin.configureClient !== undefined) {\n        options = plugin.configureClient(options);\n      }\n    }\n\n    super(options);\n\n    const { interceptors, workflow, plugins, ...commonOptions } = options;\n\n    this.workflow = new WorkflowClient({\n      ...commonOptions,\n      ...(workflow ?? {}),\n      connection: this.connection,\n      dataConverter: this.dataConverter,\n      interceptors: interceptors?.workflow,\n      queryRejectCondition: workflow?.queryRejectCondition,\n    });\n\n    this.activity = new ActivityClient({\n      ...commonOptions,\n      connection: this.connection,\n      dataConverter: this.dataConverter,\n      interceptors: interceptors?.activity,\n    });\n\n    this.schedule = new ScheduleClient({\n      ...commonOptions,\n      connection: this.connection,\n      dataConverter: this.dataConverter,\n      interceptors: interceptors?.schedule,\n    });\n\n    this.taskQueue = new TaskQueueClient({\n      ...commonOptions,\n      connection: this.connection,\n      dataConverter: this.dataConverter,\n    });\n\n    this.nexus = new NexusClient({\n      ...commonOptions,\n      connection: this.connection,\n      dataConverter: this.dataConverter,\n      interceptors: interceptors?.nexus,\n    });\n\n    this.options = {\n      ...defaultBaseClientOptions(),\n      ...filterNullAndUndefined(commonOptions),\n      loadedDataConverter: this.dataConverter,\n      interceptors: {\n        workflow: this.workflow.options.interceptors,\n        schedule: this.schedule.options.interceptors,\n        nexus: this.nexus.options.interceptors,\n      },\n      workflow: {\n        queryRejectCondition: this.workflow.options.queryRejectCondition,\n      },\n      plugins: plugins ?? [],\n    };\n  }\n\n  /**\n   * Raw gRPC access to the Temporal service.\n   *\n   * **NOTE**: The namespace provided in {@link options} is **not** automatically set on requests made via this service\n   * object.\n   */\n  get workflowService(): WorkflowService {\n    return this.connection.workflowService;\n  }\n}\n\n/**\n * Plugin to control the configuration of a native connection.\n *\n * @experimental Plugins is an experimental feature; APIs may change without notice.\n */\nexport interface ClientPlugin {\n  /**\n   * Gets the name of this plugin.\n   */\n  get name(): string;\n\n  /**\n   * Hook called when creating a client to allow modification of configuration.\n   *\n   * This method is called during client creation and allows plugins to modify\n   * the client configuration before the client is fully initialized.\n   */\n  configureClient?(options: Omit<ClientOptions, 'plugins'>): Omit<ClientOptions, 'plugins'>;\n}\n","/**\n * Client for communicating with Temporal Server.\n *\n * Most functionality is available through {@link WorkflowClient}, but you can also call gRPC methods directly using {@link Connection.workflowService} and {@link Connection.operatorService}.\n *\n * ### Usage\n *\n * ```ts\n * import { Connection, Client } from '@temporalio/client';\n * import { loadClientConnectConfig } from '@temporalio/envconfig';\n * import { sleepForDays } from './workflows';\n * import { nanoid } from 'nanoid';\n *\n * async function run() {\n *   const config = loadClientConnectConfig();\n *   const connection = await Connection.connect(config.connectionOptions);\n *   const client = new Client({ connection });\n *\n *   const handle = await client.workflow.start(sleepForDays, {\n *     taskQueue: 'sleep-for-days',\n *     workflowId: 'workflow-' + nanoid(),\n *   });\n *   console.log(`Started workflow ${handle.workflowId}`);\n *\n *   // Wait for workflow completion (runs indefinitely until it receives a signal)\n *   console.log(await handle.result());\n * }\n *\n * run().catch((err) => {\n *   console.error(err);\n *   process.exit(1);\n * });\n * ```\n * @module\n */\n\nexport {\n  ActivityFailure,\n  ApplicationFailure,\n  CancelledFailure,\n  ChildWorkflowFailure,\n  DataConverter,\n  defaultPayloadConverter,\n  ProtoFailure,\n  RetryPolicy,\n  ServerFailure,\n  TemporalFailure,\n  TerminatedFailure,\n  TimeoutFailure,\n  WorkflowExecutionAlreadyStartedError,\n} from '@temporalio/common';\nexport { TLSConfig } from '@temporalio/common/lib/internal-non-workflow';\nexport * from '@temporalio/common/lib/errors';\nexport * from '@temporalio/common/lib/interfaces';\nexport * from '@temporalio/common/lib/workflow-handle';\nexport * from './async-completion-client';\nexport * from './activity-client';\nexport * from './client';\nexport {\n  Connection,\n  ConnectionOptions,\n  ConnectionOptionsWithDefaults,\n  ConnectionPlugin,\n  LOCAL_TARGET,\n} from './connection';\nexport * from './errors';\nexport * from './grpc-retry';\nexport * from './interceptors';\nexport * from './types';\nexport * from './workflow-client';\nexport * from './workflow-options';\nexport * from './schedule-types';\nexport * from './schedule-client';\nexport * from './task-queue-client';\nexport * from './nexus-types';\nexport * from './nexus-client';\nexport { WorkflowUpdateStage } from './workflow-update-stage';\nexport {\n  WorkerBuildIdVersionSets,\n  BuildIdVersionSet,\n  BuildIdOperation,\n  PromoteSetByBuildId,\n  PromoteBuildIdWithinSet,\n  MergeSets,\n  AddNewIdInNewDefaultSet,\n  AddNewCompatibleVersion,\n} from './build-id-types';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splitWhen = exports.flatten = void 0;\nfunction flatten(items) {\n    return items.reduce((collection, item) => [].concat(collection, item), []);\n}\nexports.flatten = flatten;\nfunction splitWhen(items, predicate) {\n    const result = [[]];\n    let groupIndex = 0;\n    for (const item of items) {\n        if (predicate(item)) {\n            groupIndex++;\n            result[groupIndex] = [];\n        }\n        else {\n            result[groupIndex].push(item);\n        }\n    }\n    return result;\n}\nexports.splitWhen = splitWhen;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEnoentCodeError = void 0;\nfunction isEnoentCodeError(error) {\n    return error.code === 'ENOENT';\n}\nexports.isEnoentCodeError = isEnoentCodeError;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n    constructor(name, stats) {\n        this.name = name;\n        this.isBlockDevice = stats.isBlockDevice.bind(stats);\n        this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n        this.isDirectory = stats.isDirectory.bind(stats);\n        this.isFIFO = stats.isFIFO.bind(stats);\n        this.isFile = stats.isFile.bind(stats);\n        this.isSocket = stats.isSocket.bind(stats);\n        this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n    }\n}\nfunction createDirentFromStats(name, stats) {\n    return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPosixPathToPattern = exports.convertWindowsPathToPattern = exports.convertPathToPattern = exports.escapePosixPath = exports.escapeWindowsPath = exports.escape = exports.removeLeadingDotSegment = exports.makeAbsolute = exports.unixify = void 0;\nconst os = require(\"os\");\nconst path = require(\"path\");\nconst IS_WINDOWS_PLATFORM = os.platform() === 'win32';\nconst LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\\\\n/**\n * All non-escaped special characters.\n * Posix: ()*?[]{|}, !+@ before (, ! at the beginning, \\\\ before non-special characters.\n * Windows: (){}[], !+@ before (, ! at the beginning.\n */\nconst POSIX_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\()|\\\\(?![!()*+?@[\\]{|}]))/g;\nconst WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()[\\]{}]|^!|[!+@](?=\\())/g;\n/**\n * The device path (\\\\.\\ or \\\\?\\).\n * https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats#dos-device-paths\n */\nconst DOS_DEVICE_PATH_RE = /^\\\\\\\\([.?])/;\n/**\n * All backslashes except those escaping special characters.\n * Windows: !()+@{}\n * https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file#naming-conventions\n */\nconst WINDOWS_BACKSLASHES_RE = /\\\\(?![!()+@[\\]{}])/g;\n/**\n * Designed to work only with simple paths: `dir\\\\file`.\n */\nfunction unixify(filepath) {\n    return filepath.replace(/\\\\/g, '/');\n}\nexports.unixify = unixify;\nfunction makeAbsolute(cwd, filepath) {\n    return path.resolve(cwd, filepath);\n}\nexports.makeAbsolute = makeAbsolute;\nfunction removeLeadingDotSegment(entry) {\n    // We do not use `startsWith` because this is 10x slower than current implementation for some cases.\n    // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n    if (entry.charAt(0) === '.') {\n        const secondCharactery = entry.charAt(1);\n        if (secondCharactery === '/' || secondCharactery === '\\\\') {\n            return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);\n        }\n    }\n    return entry;\n}\nexports.removeLeadingDotSegment = removeLeadingDotSegment;\nexports.escape = IS_WINDOWS_PLATFORM ? escapeWindowsPath : escapePosixPath;\nfunction escapeWindowsPath(pattern) {\n    return pattern.replace(WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapeWindowsPath = escapeWindowsPath;\nfunction escapePosixPath(pattern) {\n    return pattern.replace(POSIX_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapePosixPath = escapePosixPath;\nexports.convertPathToPattern = IS_WINDOWS_PLATFORM ? convertWindowsPathToPattern : convertPosixPathToPattern;\nfunction convertWindowsPathToPattern(filepath) {\n    return escapeWindowsPath(filepath)\n        .replace(DOS_DEVICE_PATH_RE, '//$1')\n        .replace(WINDOWS_BACKSLASHES_RE, '/');\n}\nexports.convertWindowsPathToPattern = convertWindowsPathToPattern;\nfunction convertPosixPathToPattern(filepath) {\n    return escapePosixPath(filepath);\n}\nexports.convertPosixPathToPattern = convertPosixPathToPattern;\n","/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function isExtglob(str) {\n  if (typeof str !== 'string' || str === '') {\n    return false;\n  }\n\n  var match;\n  while ((match = /(\\\\).|([@?!+*]\\(.*\\))/g.exec(str))) {\n    if (match[2]) return true;\n    str = str.slice(match.index + match[0].length);\n  }\n\n  return false;\n};\n","/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nvar isExtglob = require('is-extglob');\nvar chars = { '{': '}', '(': ')', '[': ']'};\nvar strictCheck = function(str) {\n  if (str[0] === '!') {\n    return true;\n  }\n  var index = 0;\n  var pipeIndex = -2;\n  var closeSquareIndex = -2;\n  var closeCurlyIndex = -2;\n  var closeParenIndex = -2;\n  var backSlashIndex = -2;\n  while (index < str.length) {\n    if (str[index] === '*') {\n      return true;\n    }\n\n    if (str[index + 1] === '?' && /[\\].+)]/.test(str[index])) {\n      return true;\n    }\n\n    if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') {\n      if (closeSquareIndex < index) {\n        closeSquareIndex = str.indexOf(']', index);\n      }\n      if (closeSquareIndex > index) {\n        if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n          return true;\n        }\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') {\n      closeCurlyIndex = str.indexOf('}', index);\n      if (closeCurlyIndex > index) {\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') {\n      closeParenIndex = str.indexOf(')', index);\n      if (closeParenIndex > index) {\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') {\n      if (pipeIndex < index) {\n        pipeIndex = str.indexOf('|', index);\n      }\n      if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') {\n        closeParenIndex = str.indexOf(')', pipeIndex);\n        if (closeParenIndex > pipeIndex) {\n          backSlashIndex = str.indexOf('\\\\', pipeIndex);\n          if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n            return true;\n          }\n        }\n      }\n    }\n\n    if (str[index] === '\\\\') {\n      var open = str[index + 1];\n      index += 2;\n      var close = chars[open];\n\n      if (close) {\n        var n = str.indexOf(close, index);\n        if (n !== -1) {\n          index = n + 1;\n        }\n      }\n\n      if (str[index] === '!') {\n        return true;\n      }\n    } else {\n      index++;\n    }\n  }\n  return false;\n};\n\nvar relaxedCheck = function(str) {\n  if (str[0] === '!') {\n    return true;\n  }\n  var index = 0;\n  while (index < str.length) {\n    if (/[*?{}()[\\]]/.test(str[index])) {\n      return true;\n    }\n\n    if (str[index] === '\\\\') {\n      var open = str[index + 1];\n      index += 2;\n      var close = chars[open];\n\n      if (close) {\n        var n = str.indexOf(close, index);\n        if (n !== -1) {\n          index = n + 1;\n        }\n      }\n\n      if (str[index] === '!') {\n        return true;\n      }\n    } else {\n      index++;\n    }\n  }\n  return false;\n};\n\nmodule.exports = function isGlob(str, options) {\n  if (typeof str !== 'string' || str === '') {\n    return false;\n  }\n\n  if (isExtglob(str)) {\n    return true;\n  }\n\n  var check = strictCheck;\n\n  // optionally relax check\n  if (options && options.strict === false) {\n    check = relaxedCheck;\n  }\n\n  return check(str);\n};\n","'use strict';\n\nvar isGlob = require('is-glob');\nvar pathPosixDirname = require('path').posix.dirname;\nvar isWin32 = require('os').platform() === 'win32';\n\nvar slash = '/';\nvar backslash = /\\\\/g;\nvar enclosure = /[\\{\\[].*[\\}\\]]$/;\nvar globby = /(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/;\nvar escaped = /\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;\n\n/**\n * @param {string} str\n * @param {Object} opts\n * @param {boolean} [opts.flipBackslashes=true]\n * @returns {string}\n */\nmodule.exports = function globParent(str, opts) {\n  var options = Object.assign({ flipBackslashes: true }, opts);\n\n  // flip windows path separators\n  if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {\n    str = str.replace(backslash, slash);\n  }\n\n  // special case for strings ending in enclosure containing path separator\n  if (enclosure.test(str)) {\n    str += slash;\n  }\n\n  // preserves full path in case of trailing path separator\n  str += 'a';\n\n  // remove path parts that are globby\n  do {\n    str = pathPosixDirname(str);\n  } while (isGlob(str) || globby.test(str));\n\n  // remove escape chars and return result\n  return str.replace(escaped, '$1');\n};\n","'use strict';\n\nexports.isInteger = num => {\n  if (typeof num === 'number') {\n    return Number.isInteger(num);\n  }\n  if (typeof num === 'string' && num.trim() !== '') {\n    return Number.isInteger(Number(num));\n  }\n  return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n  if (limit === false) return false;\n  if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n  return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n  const node = block.nodes[n];\n  if (!node) return;\n\n  if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n    if (node.escaped !== true) {\n      node.value = '\\\\' + node.value;\n      node.escaped = true;\n    }\n  }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n  if (node.type !== 'brace') return false;\n  if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n    node.invalid = true;\n    return true;\n  }\n  return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n  if (block.type !== 'brace') return false;\n  if (block.invalid === true || block.dollar) return true;\n  if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n    block.invalid = true;\n    return true;\n  }\n  if (block.open !== true || block.close !== true) {\n    block.invalid = true;\n    return true;\n  }\n  return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n  if (node.type === 'open' || node.type === 'close') {\n    return true;\n  }\n  return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n  if (node.type === 'text') acc.push(node.value);\n  if (node.type === 'range') node.type = 'text';\n  return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n  const result = [];\n\n  const flat = arr => {\n    for (let i = 0; i < arr.length; i++) {\n      const ele = arr[i];\n\n      if (Array.isArray(ele)) {\n        flat(ele);\n        continue;\n      }\n\n      if (ele !== undefined) {\n        result.push(ele);\n      }\n    }\n    return result;\n  };\n\n  flat(args);\n  return result;\n};\n","'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n  const stringify = (node, parent = {}) => {\n    const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n    const invalidNode = node.invalid === true && options.escapeInvalid === true;\n    let output = '';\n\n    if (node.value) {\n      if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n        return '\\\\' + node.value;\n      }\n      return node.value;\n    }\n\n    if (node.value) {\n      return node.value;\n    }\n\n    if (node.nodes) {\n      for (const child of node.nodes) {\n        output += stringify(child);\n      }\n    }\n    return output;\n  };\n\n  return stringify(ast);\n};\n\n","/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n  if (typeof num === 'number') {\n    return num - num === 0;\n  }\n  if (typeof num === 'string' && num.trim() !== '') {\n    return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n  }\n  return false;\n};\n","/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n  if (isNumber(min) === false) {\n    throw new TypeError('toRegexRange: expected the first argument to be a number');\n  }\n\n  if (max === void 0 || min === max) {\n    return String(min);\n  }\n\n  if (isNumber(max) === false) {\n    throw new TypeError('toRegexRange: expected the second argument to be a number.');\n  }\n\n  let opts = { relaxZeros: true, ...options };\n  if (typeof opts.strictZeros === 'boolean') {\n    opts.relaxZeros = opts.strictZeros === false;\n  }\n\n  let relax = String(opts.relaxZeros);\n  let shorthand = String(opts.shorthand);\n  let capture = String(opts.capture);\n  let wrap = String(opts.wrap);\n  let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n  if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n    return toRegexRange.cache[cacheKey].result;\n  }\n\n  let a = Math.min(min, max);\n  let b = Math.max(min, max);\n\n  if (Math.abs(a - b) === 1) {\n    let result = min + '|' + max;\n    if (opts.capture) {\n      return `(${result})`;\n    }\n    if (opts.wrap === false) {\n      return result;\n    }\n    return `(?:${result})`;\n  }\n\n  let isPadded = hasPadding(min) || hasPadding(max);\n  let state = { min, max, a, b };\n  let positives = [];\n  let negatives = [];\n\n  if (isPadded) {\n    state.isPadded = isPadded;\n    state.maxLen = String(state.max).length;\n  }\n\n  if (a < 0) {\n    let newMin = b < 0 ? Math.abs(b) : 1;\n    negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n    a = state.a = 0;\n  }\n\n  if (b >= 0) {\n    positives = splitToPatterns(a, b, state, opts);\n  }\n\n  state.negatives = negatives;\n  state.positives = positives;\n  state.result = collatePatterns(negatives, positives, opts);\n\n  if (opts.capture === true) {\n    state.result = `(${state.result})`;\n  } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n    state.result = `(?:${state.result})`;\n  }\n\n  toRegexRange.cache[cacheKey] = state;\n  return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n  let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n  let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n  let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n  let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n  return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n  let nines = 1;\n  let zeros = 1;\n\n  let stop = countNines(min, nines);\n  let stops = new Set([max]);\n\n  while (min <= stop && stop <= max) {\n    stops.add(stop);\n    nines += 1;\n    stop = countNines(min, nines);\n  }\n\n  stop = countZeros(max + 1, zeros) - 1;\n\n  while (min < stop && stop <= max) {\n    stops.add(stop);\n    zeros += 1;\n    stop = countZeros(max + 1, zeros) - 1;\n  }\n\n  stops = [...stops];\n  stops.sort(compare);\n  return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n  if (start === stop) {\n    return { pattern: start, count: [], digits: 0 };\n  }\n\n  let zipped = zip(start, stop);\n  let digits = zipped.length;\n  let pattern = '';\n  let count = 0;\n\n  for (let i = 0; i < digits; i++) {\n    let [startDigit, stopDigit] = zipped[i];\n\n    if (startDigit === stopDigit) {\n      pattern += startDigit;\n\n    } else if (startDigit !== '0' || stopDigit !== '9') {\n      pattern += toCharacterClass(startDigit, stopDigit, options);\n\n    } else {\n      count++;\n    }\n  }\n\n  if (count) {\n    pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n  }\n\n  return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n  let ranges = splitToRanges(min, max);\n  let tokens = [];\n  let start = min;\n  let prev;\n\n  for (let i = 0; i < ranges.length; i++) {\n    let max = ranges[i];\n    let obj = rangeToPattern(String(start), String(max), options);\n    let zeros = '';\n\n    if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n      if (prev.count.length > 1) {\n        prev.count.pop();\n      }\n\n      prev.count.push(obj.count[0]);\n      prev.string = prev.pattern + toQuantifier(prev.count);\n      start = max + 1;\n      continue;\n    }\n\n    if (tok.isPadded) {\n      zeros = padZeros(max, tok, options);\n    }\n\n    obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n    tokens.push(obj);\n    start = max + 1;\n    prev = obj;\n  }\n\n  return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n  let result = [];\n\n  for (let ele of arr) {\n    let { string } = ele;\n\n    // only push if _both_ are negative...\n    if (!intersection && !contains(comparison, 'string', string)) {\n      result.push(prefix + string);\n    }\n\n    // or _both_ are positive\n    if (intersection && contains(comparison, 'string', string)) {\n      result.push(prefix + string);\n    }\n  }\n  return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n  let arr = [];\n  for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n  return arr;\n}\n\nfunction compare(a, b) {\n  return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n  return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n  return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n  return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n  let [start = 0, stop = ''] = digits;\n  if (stop || start > 1) {\n    return `{${start + (stop ? ',' + stop : '')}}`;\n  }\n  return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n  return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n  return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n  if (!tok.isPadded) {\n    return value;\n  }\n\n  let diff = Math.abs(tok.maxLen - String(value).length);\n  let relax = options.relaxZeros !== false;\n\n  switch (diff) {\n    case 0:\n      return '';\n    case 1:\n      return relax ? '0?' : '0';\n    case 2:\n      return relax ? '0{0,2}' : '00';\n    default: {\n      return relax ? `0{0,${diff}}` : `0{${diff}}`;\n    }\n  }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n","/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n  return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n  return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n  let value = `${input}`;\n  let index = -1;\n  if (value[0] === '-') value = value.slice(1);\n  if (value === '0') return false;\n  while (value[++index] === '0');\n  return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n  if (typeof start === 'string' || typeof end === 'string') {\n    return true;\n  }\n  return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n  if (maxLength > 0) {\n    let dash = input[0] === '-' ? '-' : '';\n    if (dash) input = input.slice(1);\n    input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n  }\n  if (toNumber === false) {\n    return String(input);\n  }\n  return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n  let negative = input[0] === '-' ? '-' : '';\n  if (negative) {\n    input = input.slice(1);\n    maxLength--;\n  }\n  while (input.length < maxLength) input = '0' + input;\n  return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options, maxLen) => {\n  parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n  parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n  let prefix = options.capture ? '' : '?:';\n  let positives = '';\n  let negatives = '';\n  let result;\n\n  if (parts.positives.length) {\n    positives = parts.positives.map(v => toMaxLen(String(v), maxLen)).join('|');\n  }\n\n  if (parts.negatives.length) {\n    negatives = `-(${prefix}${parts.negatives.map(v => toMaxLen(String(v), maxLen)).join('|')})`;\n  }\n\n  if (positives && negatives) {\n    result = `${positives}|${negatives}`;\n  } else {\n    result = positives || negatives;\n  }\n\n  if (options.wrap) {\n    return `(${prefix}${result})`;\n  }\n\n  return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n  if (isNumbers) {\n    return toRegexRange(a, b, { wrap: false, ...options });\n  }\n\n  let start = String.fromCharCode(a);\n  if (a === b) return start;\n\n  let stop = String.fromCharCode(b);\n  return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n  if (Array.isArray(start)) {\n    let wrap = options.wrap === true;\n    let prefix = options.capture ? '' : '?:';\n    return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n  }\n  return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n  return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n  if (options.strictRanges === true) throw rangeError([start, end]);\n  return [];\n};\n\nconst invalidStep = (step, options) => {\n  if (options.strictRanges === true) {\n    throw new TypeError(`Expected step \"${step}\" to be a number`);\n  }\n  return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n  let a = Number(start);\n  let b = Number(end);\n\n  if (!Number.isInteger(a) || !Number.isInteger(b)) {\n    if (options.strictRanges === true) throw rangeError([start, end]);\n    return [];\n  }\n\n  // fix negative zero\n  if (a === 0) a = 0;\n  if (b === 0) b = 0;\n\n  let descending = a > b;\n  let startString = String(start);\n  let endString = String(end);\n  let stepString = String(step);\n  step = Math.max(Math.abs(step), 1);\n\n  let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n  let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n  let toNumber = padded === false && stringify(start, end, options) === false;\n  let format = options.transform || transform(toNumber);\n\n  if (options.toRegex && step === 1) {\n    return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n  }\n\n  let parts = { negatives: [], positives: [] };\n  let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n  let range = [];\n  let index = 0;\n\n  while (descending ? a >= b : a <= b) {\n    if (options.toRegex === true && step > 1) {\n      push(a);\n    } else {\n      range.push(pad(format(a, index), maxLen, toNumber));\n    }\n    a = descending ? a - step : a + step;\n    index++;\n  }\n\n  if (options.toRegex === true) {\n    return step > 1\n      ? toSequence(parts, options, maxLen)\n      : toRegex(range, null, { wrap: false, ...options });\n  }\n\n  return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n  if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n    return invalidRange(start, end, options);\n  }\n\n  let format = options.transform || (val => String.fromCharCode(val));\n  let a = `${start}`.charCodeAt(0);\n  let b = `${end}`.charCodeAt(0);\n\n  let descending = a > b;\n  let min = Math.min(a, b);\n  let max = Math.max(a, b);\n\n  if (options.toRegex && step === 1) {\n    return toRange(min, max, false, options);\n  }\n\n  let range = [];\n  let index = 0;\n\n  while (descending ? a >= b : a <= b) {\n    range.push(format(a, index));\n    a = descending ? a - step : a + step;\n    index++;\n  }\n\n  if (options.toRegex === true) {\n    return toRegex(range, null, { wrap: false, options });\n  }\n\n  return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n  if (end == null && isValidValue(start)) {\n    return [start];\n  }\n\n  if (!isValidValue(start) || !isValidValue(end)) {\n    return invalidRange(start, end, options);\n  }\n\n  if (typeof step === 'function') {\n    return fill(start, end, 1, { transform: step });\n  }\n\n  if (isObject(step)) {\n    return fill(start, end, 0, step);\n  }\n\n  let opts = { ...options };\n  if (opts.capture === true) opts.wrap = true;\n  step = step || opts.step || 1;\n\n  if (!isNumber(step)) {\n    if (step != null && !isObject(step)) return invalidStep(step, opts);\n    return fill(start, end, 1, step);\n  }\n\n  if (isNumber(start) && isNumber(end)) {\n    return fillNumbers(start, end, step, opts);\n  }\n\n  return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n","'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n  const walk = (node, parent = {}) => {\n    const invalidBlock = utils.isInvalidBrace(parent);\n    const invalidNode = node.invalid === true && options.escapeInvalid === true;\n    const invalid = invalidBlock === true || invalidNode === true;\n    const prefix = options.escapeInvalid === true ? '\\\\' : '';\n    let output = '';\n\n    if (node.isOpen === true) {\n      return prefix + node.value;\n    }\n\n    if (node.isClose === true) {\n      console.log('node.isClose', prefix, node.value);\n      return prefix + node.value;\n    }\n\n    if (node.type === 'open') {\n      return invalid ? prefix + node.value : '(';\n    }\n\n    if (node.type === 'close') {\n      return invalid ? prefix + node.value : ')';\n    }\n\n    if (node.type === 'comma') {\n      return node.prev.type === 'comma' ? '' : invalid ? node.value : '|';\n    }\n\n    if (node.value) {\n      return node.value;\n    }\n\n    if (node.nodes && node.ranges > 0) {\n      const args = utils.reduce(node.nodes);\n      const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });\n\n      if (range.length !== 0) {\n        return args.length > 1 && range.length > 1 ? `(${range})` : range;\n      }\n    }\n\n    if (node.nodes) {\n      for (const child of node.nodes) {\n        output += walk(child, node);\n      }\n    }\n\n    return output;\n  };\n\n  return walk(ast);\n};\n\nmodule.exports = compile;\n","'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n  const result = [];\n\n  queue = [].concat(queue);\n  stash = [].concat(stash);\n\n  if (!stash.length) return queue;\n  if (!queue.length) {\n    return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n  }\n\n  for (const item of queue) {\n    if (Array.isArray(item)) {\n      for (const value of item) {\n        result.push(append(value, stash, enclose));\n      }\n    } else {\n      for (let ele of stash) {\n        if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n        result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele);\n      }\n    }\n  }\n  return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n  const rangeLimit = options.rangeLimit === undefined ? 1000 : options.rangeLimit;\n\n  const walk = (node, parent = {}) => {\n    node.queue = [];\n\n    let p = parent;\n    let q = parent.queue;\n\n    while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n      p = p.parent;\n      q = p.queue;\n    }\n\n    if (node.invalid || node.dollar) {\n      q.push(append(q.pop(), stringify(node, options)));\n      return;\n    }\n\n    if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n      q.push(append(q.pop(), ['{}']));\n      return;\n    }\n\n    if (node.nodes && node.ranges > 0) {\n      const args = utils.reduce(node.nodes);\n\n      if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n        throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n      }\n\n      let range = fill(...args, options);\n      if (range.length === 0) {\n        range = stringify(node, options);\n      }\n\n      q.push(append(q.pop(), range));\n      node.nodes = [];\n      return;\n    }\n\n    const enclose = utils.encloseBrace(node);\n    let queue = node.queue;\n    let block = node;\n\n    while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n      block = block.parent;\n      queue = block.queue;\n    }\n\n    for (let i = 0; i < node.nodes.length; i++) {\n      const child = node.nodes[i];\n\n      if (child.type === 'comma' && node.type === 'brace') {\n        if (i === 1) queue.push('');\n        queue.push('');\n        continue;\n      }\n\n      if (child.type === 'close') {\n        q.push(append(q.pop(), queue, enclose));\n        continue;\n      }\n\n      if (child.value && child.type !== 'open') {\n        queue.push(append(queue.pop(), child.value));\n        continue;\n      }\n\n      if (child.nodes) {\n        walk(child, node);\n      }\n    }\n\n    return queue;\n  };\n\n  return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n","'use strict';\n\nmodule.exports = {\n  MAX_LENGTH: 10000,\n\n  // Digits\n  CHAR_0: '0', /* 0 */\n  CHAR_9: '9', /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 'A', /* A */\n  CHAR_LOWERCASE_A: 'a', /* a */\n  CHAR_UPPERCASE_Z: 'Z', /* Z */\n  CHAR_LOWERCASE_Z: 'z', /* z */\n\n  CHAR_LEFT_PARENTHESES: '(', /* ( */\n  CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n  CHAR_ASTERISK: '*', /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: '&', /* & */\n  CHAR_AT: '@', /* @ */\n  CHAR_BACKSLASH: '\\\\', /* \\ */\n  CHAR_BACKTICK: '`', /* ` */\n  CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n  CHAR_COLON: ':', /* : */\n  CHAR_COMMA: ',', /* , */\n  CHAR_DOLLAR: '$', /* . */\n  CHAR_DOT: '.', /* . */\n  CHAR_DOUBLE_QUOTE: '\"', /* \" */\n  CHAR_EQUAL: '=', /* = */\n  CHAR_EXCLAMATION_MARK: '!', /* ! */\n  CHAR_FORM_FEED: '\\f', /* \\f */\n  CHAR_FORWARD_SLASH: '/', /* / */\n  CHAR_HASH: '#', /* # */\n  CHAR_HYPHEN_MINUS: '-', /* - */\n  CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n  CHAR_LEFT_CURLY_BRACE: '{', /* { */\n  CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n  CHAR_LINE_FEED: '\\n', /* \\n */\n  CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n  CHAR_PERCENT: '%', /* % */\n  CHAR_PLUS: '+', /* + */\n  CHAR_QUESTION_MARK: '?', /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n  CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n  CHAR_SEMICOLON: ';', /* ; */\n  CHAR_SINGLE_QUOTE: '\\'', /* ' */\n  CHAR_SPACE: ' ', /*   */\n  CHAR_TAB: '\\t', /* \\t */\n  CHAR_UNDERSCORE: '_', /* _ */\n  CHAR_VERTICAL_LINE: '|', /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n","'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  CHAR_BACKSLASH, /* \\ */\n  CHAR_BACKTICK, /* ` */\n  CHAR_COMMA, /* , */\n  CHAR_DOT, /* . */\n  CHAR_LEFT_PARENTHESES, /* ( */\n  CHAR_RIGHT_PARENTHESES, /* ) */\n  CHAR_LEFT_CURLY_BRACE, /* { */\n  CHAR_RIGHT_CURLY_BRACE, /* } */\n  CHAR_LEFT_SQUARE_BRACKET, /* [ */\n  CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n  CHAR_DOUBLE_QUOTE, /* \" */\n  CHAR_SINGLE_QUOTE, /* ' */\n  CHAR_NO_BREAK_SPACE,\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  const opts = options || {};\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  if (input.length > max) {\n    throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n  }\n\n  const ast = { type: 'root', input, nodes: [] };\n  const stack = [ast];\n  let block = ast;\n  let prev = ast;\n  let brackets = 0;\n  const length = input.length;\n  let index = 0;\n  let depth = 0;\n  let value;\n\n  /**\n   * Helpers\n   */\n\n  const advance = () => input[index++];\n  const push = node => {\n    if (node.type === 'text' && prev.type === 'dot') {\n      prev.type = 'text';\n    }\n\n    if (prev && prev.type === 'text' && node.type === 'text') {\n      prev.value += node.value;\n      return;\n    }\n\n    block.nodes.push(node);\n    node.parent = block;\n    node.prev = prev;\n    prev = node;\n    return node;\n  };\n\n  push({ type: 'bos' });\n\n  while (index < length) {\n    block = stack[stack.length - 1];\n    value = advance();\n\n    /**\n     * Invalid chars\n     */\n\n    if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n      continue;\n    }\n\n    /**\n     * Escaped chars\n     */\n\n    if (value === CHAR_BACKSLASH) {\n      push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n      continue;\n    }\n\n    /**\n     * Right square bracket (literal): ']'\n     */\n\n    if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n      push({ type: 'text', value: '\\\\' + value });\n      continue;\n    }\n\n    /**\n     * Left square bracket: '['\n     */\n\n    if (value === CHAR_LEFT_SQUARE_BRACKET) {\n      brackets++;\n\n      let next;\n\n      while (index < length && (next = advance())) {\n        value += next;\n\n        if (next === CHAR_LEFT_SQUARE_BRACKET) {\n          brackets++;\n          continue;\n        }\n\n        if (next === CHAR_BACKSLASH) {\n          value += advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          brackets--;\n\n          if (brackets === 0) {\n            break;\n          }\n        }\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === CHAR_LEFT_PARENTHESES) {\n      block = push({ type: 'paren', nodes: [] });\n      stack.push(block);\n      push({ type: 'text', value });\n      continue;\n    }\n\n    if (value === CHAR_RIGHT_PARENTHESES) {\n      if (block.type !== 'paren') {\n        push({ type: 'text', value });\n        continue;\n      }\n      block = stack.pop();\n      push({ type: 'text', value });\n      block = stack[stack.length - 1];\n      continue;\n    }\n\n    /**\n     * Quotes: '|\"|`\n     */\n\n    if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n      const open = value;\n      let next;\n\n      if (options.keepQuotes !== true) {\n        value = '';\n      }\n\n      while (index < length && (next = advance())) {\n        if (next === CHAR_BACKSLASH) {\n          value += next + advance();\n          continue;\n        }\n\n        if (next === open) {\n          if (options.keepQuotes === true) value += next;\n          break;\n        }\n\n        value += next;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Left curly brace: '{'\n     */\n\n    if (value === CHAR_LEFT_CURLY_BRACE) {\n      depth++;\n\n      const dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n      const brace = {\n        type: 'brace',\n        open: true,\n        close: false,\n        dollar,\n        depth,\n        commas: 0,\n        ranges: 0,\n        nodes: []\n      };\n\n      block = push(brace);\n      stack.push(block);\n      push({ type: 'open', value });\n      continue;\n    }\n\n    /**\n     * Right curly brace: '}'\n     */\n\n    if (value === CHAR_RIGHT_CURLY_BRACE) {\n      if (block.type !== 'brace') {\n        push({ type: 'text', value });\n        continue;\n      }\n\n      const type = 'close';\n      block = stack.pop();\n      block.close = true;\n\n      push({ type, value });\n      depth--;\n\n      block = stack[stack.length - 1];\n      continue;\n    }\n\n    /**\n     * Comma: ','\n     */\n\n    if (value === CHAR_COMMA && depth > 0) {\n      if (block.ranges > 0) {\n        block.ranges = 0;\n        const open = block.nodes.shift();\n        block.nodes = [open, { type: 'text', value: stringify(block) }];\n      }\n\n      push({ type: 'comma', value });\n      block.commas++;\n      continue;\n    }\n\n    /**\n     * Dot: '.'\n     */\n\n    if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n      const siblings = block.nodes;\n\n      if (depth === 0 || siblings.length === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n\n      if (prev.type === 'dot') {\n        block.range = [];\n        prev.value += value;\n        prev.type = 'range';\n\n        if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n          block.invalid = true;\n          block.ranges = 0;\n          prev.type = 'text';\n          continue;\n        }\n\n        block.ranges++;\n        block.args = [];\n        continue;\n      }\n\n      if (prev.type === 'range') {\n        siblings.pop();\n\n        const before = siblings[siblings.length - 1];\n        before.value += prev.value + value;\n        prev = before;\n        block.ranges--;\n        continue;\n      }\n\n      push({ type: 'dot', value });\n      continue;\n    }\n\n    /**\n     * Text\n     */\n\n    push({ type: 'text', value });\n  }\n\n  // Mark imbalanced braces and brackets as invalid\n  do {\n    block = stack.pop();\n\n    if (block.type !== 'root') {\n      block.nodes.forEach(node => {\n        if (!node.nodes) {\n          if (node.type === 'open') node.isOpen = true;\n          if (node.type === 'close') node.isClose = true;\n          if (!node.nodes) node.type = 'text';\n          node.invalid = true;\n        }\n      });\n\n      // get the location of the block on parent.nodes (block's siblings)\n      const parent = stack[stack.length - 1];\n      const index = parent.nodes.indexOf(block);\n      // replace the (invalid) block with it's nodes\n      parent.nodes.splice(index, 1, ...block.nodes);\n    }\n  } while (stack.length > 0);\n\n  push({ type: 'eos' });\n  return ast;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n  let output = [];\n\n  if (Array.isArray(input)) {\n    for (const pattern of input) {\n      const result = braces.create(pattern, options);\n      if (Array.isArray(result)) {\n        output.push(...result);\n      } else {\n        output.push(result);\n      }\n    }\n  } else {\n    output = [].concat(braces.create(input, options));\n  }\n\n  if (options && options.expand === true && options.nodupes === true) {\n    output = [...new Set(output)];\n  }\n  return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n  if (typeof input === 'string') {\n    return stringify(braces.parse(input, options), options);\n  }\n  return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n  if (typeof input === 'string') {\n    input = braces.parse(input, options);\n  }\n  return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n  if (typeof input === 'string') {\n    input = braces.parse(input, options);\n  }\n\n  let result = expand(input, options);\n\n  // filter out empty strings if specified\n  if (options.noempty === true) {\n    result = result.filter(Boolean);\n  }\n\n  // filter out duplicates if specified\n  if (options.nodupes === true) {\n    result = [...new Set(result)];\n  }\n\n  return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n  if (input === '' || input.length < 3) {\n    return [input];\n  }\n\n  return options.expand !== true\n    ? braces.compile(input, options)\n    : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n","'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\nconst DEFAULT_MAX_EXTGLOB_RECURSION = 0;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n  DOT_LITERAL,\n  PLUS_LITERAL,\n  QMARK_LITERAL,\n  SLASH_LITERAL,\n  ONE_CHAR,\n  QMARK,\n  END_ANCHOR,\n  DOTS_SLASH,\n  NO_DOT,\n  NO_DOTS,\n  NO_DOT_SLASH,\n  NO_DOTS_SLASH,\n  QMARK_NO_DOT,\n  STAR,\n  START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n  ...POSIX_CHARS,\n\n  SLASH_LITERAL: `[${WIN_SLASH}]`,\n  QMARK: WIN_NO_SLASH,\n  STAR: `${WIN_NO_SLASH}*?`,\n  DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n  NO_DOT: `(?!${DOT_LITERAL})`,\n  NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n  NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n  START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n  END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n  __proto__: null,\n  alnum: 'a-zA-Z0-9',\n  alpha: 'a-zA-Z',\n  ascii: '\\\\x00-\\\\x7F',\n  blank: ' \\\\t',\n  cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n  digit: '0-9',\n  graph: '\\\\x21-\\\\x7E',\n  lower: 'a-z',\n  print: '\\\\x20-\\\\x7E ',\n  punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n  space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n  upper: 'A-Z',\n  word: 'A-Za-z0-9_',\n  xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n  DEFAULT_MAX_EXTGLOB_RECURSION,\n  MAX_LENGTH: 1024 * 64,\n  POSIX_REGEX_SOURCE,\n\n  // regular expressions\n  REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n  REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n  REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n  REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n  REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n  REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n  // Replace globs with equivalent patterns to reduce parsing time.\n  REPLACEMENTS: {\n    __proto__: null,\n    '***': '*',\n    '**/**': '**',\n    '**/**/**': '**'\n  },\n\n  // Digits\n  CHAR_0: 48, /* 0 */\n  CHAR_9: 57, /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 65, /* A */\n  CHAR_LOWERCASE_A: 97, /* a */\n  CHAR_UPPERCASE_Z: 90, /* Z */\n  CHAR_LOWERCASE_Z: 122, /* z */\n\n  CHAR_LEFT_PARENTHESES: 40, /* ( */\n  CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n  CHAR_ASTERISK: 42, /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: 38, /* & */\n  CHAR_AT: 64, /* @ */\n  CHAR_BACKWARD_SLASH: 92, /* \\ */\n  CHAR_CARRIAGE_RETURN: 13, /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n  CHAR_COLON: 58, /* : */\n  CHAR_COMMA: 44, /* , */\n  CHAR_DOT: 46, /* . */\n  CHAR_DOUBLE_QUOTE: 34, /* \" */\n  CHAR_EQUAL: 61, /* = */\n  CHAR_EXCLAMATION_MARK: 33, /* ! */\n  CHAR_FORM_FEED: 12, /* \\f */\n  CHAR_FORWARD_SLASH: 47, /* / */\n  CHAR_GRAVE_ACCENT: 96, /* ` */\n  CHAR_HASH: 35, /* # */\n  CHAR_HYPHEN_MINUS: 45, /* - */\n  CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n  CHAR_LEFT_CURLY_BRACE: 123, /* { */\n  CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n  CHAR_LINE_FEED: 10, /* \\n */\n  CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n  CHAR_PERCENT: 37, /* % */\n  CHAR_PLUS: 43, /* + */\n  CHAR_QUESTION_MARK: 63, /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n  CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n  CHAR_SEMICOLON: 59, /* ; */\n  CHAR_SINGLE_QUOTE: 39, /* ' */\n  CHAR_SPACE: 32, /*   */\n  CHAR_TAB: 9, /* \\t */\n  CHAR_UNDERSCORE: 95, /* _ */\n  CHAR_VERTICAL_LINE: 124, /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n  SEP: path.sep,\n\n  /**\n   * Create EXTGLOB_CHARS\n   */\n\n  extglobChars(chars) {\n    return {\n      '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n      '?': { type: 'qmark', open: '(?:', close: ')?' },\n      '+': { type: 'plus', open: '(?:', close: ')+' },\n      '*': { type: 'star', open: '(?:', close: ')*' },\n      '@': { type: 'at', open: '(?:', close: ')' }\n    };\n  },\n\n  /**\n   * Create GLOB_CHARS\n   */\n\n  globChars(win32) {\n    return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n  }\n};\n","'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n  REGEX_BACKSLASH,\n  REGEX_REMOVE_BACKSLASH,\n  REGEX_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n  return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n    return match === '\\\\' ? '' : match;\n  });\n};\n\nexports.supportsLookbehinds = () => {\n  const segs = process.version.slice(1).split('.').map(Number);\n  if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n    return true;\n  }\n  return false;\n};\n\nexports.isWindows = options => {\n  if (options && typeof options.windows === 'boolean') {\n    return options.windows;\n  }\n  return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n  const idx = input.lastIndexOf(char, lastIdx);\n  if (idx === -1) return input;\n  if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n  return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n  let output = input;\n  if (output.startsWith('./')) {\n    output = output.slice(2);\n    state.prefix = './';\n  }\n  return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n  const prepend = options.contains ? '' : '^';\n  const append = options.contains ? '' : '$';\n\n  let output = `${prepend}(?:${input})${append}`;\n  if (state.negated === true) {\n    output = `(?:^(?!${output}).*$)`;\n  }\n  return output;\n};\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n  CHAR_ASTERISK,             /* * */\n  CHAR_AT,                   /* @ */\n  CHAR_BACKWARD_SLASH,       /* \\ */\n  CHAR_COMMA,                /* , */\n  CHAR_DOT,                  /* . */\n  CHAR_EXCLAMATION_MARK,     /* ! */\n  CHAR_FORWARD_SLASH,        /* / */\n  CHAR_LEFT_CURLY_BRACE,     /* { */\n  CHAR_LEFT_PARENTHESES,     /* ( */\n  CHAR_LEFT_SQUARE_BRACKET,  /* [ */\n  CHAR_PLUS,                 /* + */\n  CHAR_QUESTION_MARK,        /* ? */\n  CHAR_RIGHT_CURLY_BRACE,    /* } */\n  CHAR_RIGHT_PARENTHESES,    /* ) */\n  CHAR_RIGHT_SQUARE_BRACKET  /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n  return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n  if (token.isPrefix !== true) {\n    token.depth = token.isGlobstar ? Infinity : 1;\n  }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n  const opts = options || {};\n\n  const length = input.length - 1;\n  const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n  const slashes = [];\n  const tokens = [];\n  const parts = [];\n\n  let str = input;\n  let index = -1;\n  let start = 0;\n  let lastIndex = 0;\n  let isBrace = false;\n  let isBracket = false;\n  let isGlob = false;\n  let isExtglob = false;\n  let isGlobstar = false;\n  let braceEscaped = false;\n  let backslashes = false;\n  let negated = false;\n  let negatedExtglob = false;\n  let finished = false;\n  let braces = 0;\n  let prev;\n  let code;\n  let token = { value: '', depth: 0, isGlob: false };\n\n  const eos = () => index >= length;\n  const peek = () => str.charCodeAt(index + 1);\n  const advance = () => {\n    prev = code;\n    return str.charCodeAt(++index);\n  };\n\n  while (index < length) {\n    code = advance();\n    let next;\n\n    if (code === CHAR_BACKWARD_SLASH) {\n      backslashes = token.backslashes = true;\n      code = advance();\n\n      if (code === CHAR_LEFT_CURLY_BRACE) {\n        braceEscaped = true;\n      }\n      continue;\n    }\n\n    if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n      braces++;\n\n      while (eos() !== true && (code = advance())) {\n        if (code === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (code === CHAR_LEFT_CURLY_BRACE) {\n          braces++;\n          continue;\n        }\n\n        if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (braceEscaped !== true && code === CHAR_COMMA) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (code === CHAR_RIGHT_CURLY_BRACE) {\n          braces--;\n\n          if (braces === 0) {\n            braceEscaped = false;\n            isBrace = token.isBrace = true;\n            finished = true;\n            break;\n          }\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (code === CHAR_FORWARD_SLASH) {\n      slashes.push(index);\n      tokens.push(token);\n      token = { value: '', depth: 0, isGlob: false };\n\n      if (finished === true) continue;\n      if (prev === CHAR_DOT && index === (start + 1)) {\n        start += 2;\n        continue;\n      }\n\n      lastIndex = index + 1;\n      continue;\n    }\n\n    if (opts.noext !== true) {\n      const isExtglobChar = code === CHAR_PLUS\n        || code === CHAR_AT\n        || code === CHAR_ASTERISK\n        || code === CHAR_QUESTION_MARK\n        || code === CHAR_EXCLAMATION_MARK;\n\n      if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n        isGlob = token.isGlob = true;\n        isExtglob = token.isExtglob = true;\n        finished = true;\n        if (code === CHAR_EXCLAMATION_MARK && index === start) {\n          negatedExtglob = true;\n        }\n\n        if (scanToEnd === true) {\n          while (eos() !== true && (code = advance())) {\n            if (code === CHAR_BACKWARD_SLASH) {\n              backslashes = token.backslashes = true;\n              code = advance();\n              continue;\n            }\n\n            if (code === CHAR_RIGHT_PARENTHESES) {\n              isGlob = token.isGlob = true;\n              finished = true;\n              break;\n            }\n          }\n          continue;\n        }\n        break;\n      }\n    }\n\n    if (code === CHAR_ASTERISK) {\n      if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_QUESTION_MARK) {\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_LEFT_SQUARE_BRACKET) {\n      while (eos() !== true && (next = advance())) {\n        if (next === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          isBracket = token.isBracket = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n          break;\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n      negated = token.negated = true;\n      start++;\n      continue;\n    }\n\n    if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n      isGlob = token.isGlob = true;\n\n      if (scanToEnd === true) {\n        while (eos() !== true && (code = advance())) {\n          if (code === CHAR_LEFT_PARENTHESES) {\n            backslashes = token.backslashes = true;\n            code = advance();\n            continue;\n          }\n\n          if (code === CHAR_RIGHT_PARENTHESES) {\n            finished = true;\n            break;\n          }\n        }\n        continue;\n      }\n      break;\n    }\n\n    if (isGlob === true) {\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n  }\n\n  if (opts.noext === true) {\n    isExtglob = false;\n    isGlob = false;\n  }\n\n  let base = str;\n  let prefix = '';\n  let glob = '';\n\n  if (start > 0) {\n    prefix = str.slice(0, start);\n    str = str.slice(start);\n    lastIndex -= start;\n  }\n\n  if (base && isGlob === true && lastIndex > 0) {\n    base = str.slice(0, lastIndex);\n    glob = str.slice(lastIndex);\n  } else if (isGlob === true) {\n    base = '';\n    glob = str;\n  } else {\n    base = str;\n  }\n\n  if (base && base !== '' && base !== '/' && base !== str) {\n    if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n      base = base.slice(0, -1);\n    }\n  }\n\n  if (opts.unescape === true) {\n    if (glob) glob = utils.removeBackslashes(glob);\n\n    if (base && backslashes === true) {\n      base = utils.removeBackslashes(base);\n    }\n  }\n\n  const state = {\n    prefix,\n    input,\n    start,\n    base,\n    glob,\n    isBrace,\n    isBracket,\n    isGlob,\n    isExtglob,\n    isGlobstar,\n    negated,\n    negatedExtglob\n  };\n\n  if (opts.tokens === true) {\n    state.maxDepth = 0;\n    if (!isPathSeparator(code)) {\n      tokens.push(token);\n    }\n    state.tokens = tokens;\n  }\n\n  if (opts.parts === true || opts.tokens === true) {\n    let prevIndex;\n\n    for (let idx = 0; idx < slashes.length; idx++) {\n      const n = prevIndex ? prevIndex + 1 : start;\n      const i = slashes[idx];\n      const value = input.slice(n, i);\n      if (opts.tokens) {\n        if (idx === 0 && start !== 0) {\n          tokens[idx].isPrefix = true;\n          tokens[idx].value = prefix;\n        } else {\n          tokens[idx].value = value;\n        }\n        depth(tokens[idx]);\n        state.maxDepth += tokens[idx].depth;\n      }\n      if (idx !== 0 || value !== '') {\n        parts.push(value);\n      }\n      prevIndex = i;\n    }\n\n    if (prevIndex && prevIndex + 1 < input.length) {\n      const value = input.slice(prevIndex + 1);\n      parts.push(value);\n\n      if (opts.tokens) {\n        tokens[tokens.length - 1].value = value;\n        depth(tokens[tokens.length - 1]);\n        state.maxDepth += tokens[tokens.length - 1].depth;\n      }\n    }\n\n    state.slashes = slashes;\n    state.parts = parts;\n  }\n\n  return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  POSIX_REGEX_SOURCE,\n  REGEX_NON_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_BACKREF,\n  REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n  if (typeof options.expandRange === 'function') {\n    return options.expandRange(...args, options);\n  }\n\n  args.sort();\n  const value = `[${args.join('-')}]`;\n\n  try {\n    /* eslint-disable-next-line no-new */\n    new RegExp(value);\n  } catch (ex) {\n    return args.map(v => utils.escapeRegex(v)).join('..');\n  }\n\n  return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n  return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\nconst splitTopLevel = input => {\n  const parts = [];\n  let bracket = 0;\n  let paren = 0;\n  let quote = 0;\n  let value = '';\n  let escaped = false;\n\n  for (const ch of input) {\n    if (escaped === true) {\n      value += ch;\n      escaped = false;\n      continue;\n    }\n\n    if (ch === '\\\\') {\n      value += ch;\n      escaped = true;\n      continue;\n    }\n\n    if (ch === '\"') {\n      quote = quote === 1 ? 0 : 1;\n      value += ch;\n      continue;\n    }\n\n    if (quote === 0) {\n      if (ch === '[') {\n        bracket++;\n      } else if (ch === ']' && bracket > 0) {\n        bracket--;\n      } else if (bracket === 0) {\n        if (ch === '(') {\n          paren++;\n        } else if (ch === ')' && paren > 0) {\n          paren--;\n        } else if (ch === '|' && paren === 0) {\n          parts.push(value);\n          value = '';\n          continue;\n        }\n      }\n    }\n\n    value += ch;\n  }\n\n  parts.push(value);\n  return parts;\n};\n\nconst isPlainBranch = branch => {\n  let escaped = false;\n\n  for (const ch of branch) {\n    if (escaped === true) {\n      escaped = false;\n      continue;\n    }\n\n    if (ch === '\\\\') {\n      escaped = true;\n      continue;\n    }\n\n    if (/[?*+@!()[\\]{}]/.test(ch)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\nconst normalizeSimpleBranch = branch => {\n  let value = branch.trim();\n  let changed = true;\n\n  while (changed === true) {\n    changed = false;\n\n    if (/^@\\([^\\\\()[\\]{}|]+\\)$/.test(value)) {\n      value = value.slice(2, -1);\n      changed = true;\n    }\n  }\n\n  if (!isPlainBranch(value)) {\n    return;\n  }\n\n  return value.replace(/\\\\(.)/g, '$1');\n};\n\nconst hasRepeatedCharPrefixOverlap = branches => {\n  const values = branches.map(normalizeSimpleBranch).filter(Boolean);\n\n  for (let i = 0; i < values.length; i++) {\n    for (let j = i + 1; j < values.length; j++) {\n      const a = values[i];\n      const b = values[j];\n      const char = a[0];\n\n      if (!char || a !== char.repeat(a.length) || b !== char.repeat(b.length)) {\n        continue;\n      }\n\n      if (a === b || a.startsWith(b) || b.startsWith(a)) {\n        return true;\n      }\n    }\n  }\n\n  return false;\n};\n\nconst parseRepeatedExtglob = (pattern, requireEnd = true) => {\n  if ((pattern[0] !== '+' && pattern[0] !== '*') || pattern[1] !== '(') {\n    return;\n  }\n\n  let bracket = 0;\n  let paren = 0;\n  let quote = 0;\n  let escaped = false;\n\n  for (let i = 1; i < pattern.length; i++) {\n    const ch = pattern[i];\n\n    if (escaped === true) {\n      escaped = false;\n      continue;\n    }\n\n    if (ch === '\\\\') {\n      escaped = true;\n      continue;\n    }\n\n    if (ch === '\"') {\n      quote = quote === 1 ? 0 : 1;\n      continue;\n    }\n\n    if (quote === 1) {\n      continue;\n    }\n\n    if (ch === '[') {\n      bracket++;\n      continue;\n    }\n\n    if (ch === ']' && bracket > 0) {\n      bracket--;\n      continue;\n    }\n\n    if (bracket > 0) {\n      continue;\n    }\n\n    if (ch === '(') {\n      paren++;\n      continue;\n    }\n\n    if (ch === ')') {\n      paren--;\n\n      if (paren === 0) {\n        if (requireEnd === true && i !== pattern.length - 1) {\n          return;\n        }\n\n        return {\n          type: pattern[0],\n          body: pattern.slice(2, i),\n          end: i\n        };\n      }\n    }\n  }\n};\n\nconst getStarExtglobSequenceOutput = pattern => {\n  let index = 0;\n  const chars = [];\n\n  while (index < pattern.length) {\n    const match = parseRepeatedExtglob(pattern.slice(index), false);\n\n    if (!match || match.type !== '*') {\n      return;\n    }\n\n    const branches = splitTopLevel(match.body).map(branch => branch.trim());\n    if (branches.length !== 1) {\n      return;\n    }\n\n    const branch = normalizeSimpleBranch(branches[0]);\n    if (!branch || branch.length !== 1) {\n      return;\n    }\n\n    chars.push(branch);\n    index += match.end + 1;\n  }\n\n  if (chars.length < 1) {\n    return;\n  }\n\n  const source = chars.length === 1\n    ? utils.escapeRegex(chars[0])\n    : `[${chars.map(ch => utils.escapeRegex(ch)).join('')}]`;\n\n  return `${source}*`;\n};\n\nconst repeatedExtglobRecursion = pattern => {\n  let depth = 0;\n  let value = pattern.trim();\n  let match = parseRepeatedExtglob(value);\n\n  while (match) {\n    depth++;\n    value = match.body.trim();\n    match = parseRepeatedExtglob(value);\n  }\n\n  return depth;\n};\n\nconst analyzeRepeatedExtglob = (body, options) => {\n  if (options.maxExtglobRecursion === false) {\n    return { risky: false };\n  }\n\n  const max =\n    typeof options.maxExtglobRecursion === 'number'\n      ? options.maxExtglobRecursion\n      : constants.DEFAULT_MAX_EXTGLOB_RECURSION;\n\n  const branches = splitTopLevel(body).map(branch => branch.trim());\n\n  if (branches.length > 1) {\n    if (\n      branches.some(branch => branch === '') ||\n      branches.some(branch => /^[*?]+$/.test(branch)) ||\n      hasRepeatedCharPrefixOverlap(branches)\n    ) {\n      return { risky: true };\n    }\n  }\n\n  for (const branch of branches) {\n    const safeOutput = getStarExtglobSequenceOutput(branch);\n    if (safeOutput) {\n      return { risky: true, safeOutput };\n    }\n\n    if (repeatedExtglobRecursion(branch) > max) {\n      return { risky: true };\n    }\n  }\n\n  return { risky: false };\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  input = REPLACEMENTS[input] || input;\n\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n  let len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n  const tokens = [bos];\n\n  const capture = opts.capture ? '' : '?:';\n  const win32 = utils.isWindows(options);\n\n  // create constants based on platform, for windows or posix\n  const PLATFORM_CHARS = constants.globChars(win32);\n  const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n  const {\n    DOT_LITERAL,\n    PLUS_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOT_SLASH,\n    NO_DOTS_SLASH,\n    QMARK,\n    QMARK_NO_DOT,\n    STAR,\n    START_ANCHOR\n  } = PLATFORM_CHARS;\n\n  const globstar = opts => {\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const nodot = opts.dot ? '' : NO_DOT;\n  const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n  let star = opts.bash === true ? globstar(opts) : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  // minimatch options support\n  if (typeof opts.noext === 'boolean') {\n    opts.noextglob = opts.noext;\n  }\n\n  const state = {\n    input,\n    index: -1,\n    start: 0,\n    dot: opts.dot === true,\n    consumed: '',\n    output: '',\n    prefix: '',\n    backtrack: false,\n    negated: false,\n    brackets: 0,\n    braces: 0,\n    parens: 0,\n    quotes: 0,\n    globstar: false,\n    tokens\n  };\n\n  input = utils.removePrefix(input, state);\n  len = input.length;\n\n  const extglobs = [];\n  const braces = [];\n  const stack = [];\n  let prev = bos;\n  let value;\n\n  /**\n   * Tokenizing helpers\n   */\n\n  const eos = () => state.index === len - 1;\n  const peek = state.peek = (n = 1) => input[state.index + n];\n  const advance = state.advance = () => input[++state.index] || '';\n  const remaining = () => input.slice(state.index + 1);\n  const consume = (value = '', num = 0) => {\n    state.consumed += value;\n    state.index += num;\n  };\n\n  const append = token => {\n    state.output += token.output != null ? token.output : token.value;\n    consume(token.value);\n  };\n\n  const negate = () => {\n    let count = 1;\n\n    while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n      advance();\n      state.start++;\n      count++;\n    }\n\n    if (count % 2 === 0) {\n      return false;\n    }\n\n    state.negated = true;\n    state.start++;\n    return true;\n  };\n\n  const increment = type => {\n    state[type]++;\n    stack.push(type);\n  };\n\n  const decrement = type => {\n    state[type]--;\n    stack.pop();\n  };\n\n  /**\n   * Push tokens onto the tokens array. This helper speeds up\n   * tokenizing by 1) helping us avoid backtracking as much as possible,\n   * and 2) helping us avoid creating extra tokens when consecutive\n   * characters are plain text. This improves performance and simplifies\n   * lookbehinds.\n   */\n\n  const push = tok => {\n    if (prev.type === 'globstar') {\n      const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n      const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n      if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n        state.output = state.output.slice(0, -prev.output.length);\n        prev.type = 'star';\n        prev.value = '*';\n        prev.output = star;\n        state.output += prev.output;\n      }\n    }\n\n    if (extglobs.length && tok.type !== 'paren') {\n      extglobs[extglobs.length - 1].inner += tok.value;\n    }\n\n    if (tok.value || tok.output) append(tok);\n    if (prev && prev.type === 'text' && tok.type === 'text') {\n      prev.value += tok.value;\n      prev.output = (prev.output || '') + tok.value;\n      return;\n    }\n\n    tok.prev = prev;\n    tokens.push(tok);\n    prev = tok;\n  };\n\n  const extglobOpen = (type, value) => {\n    const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n    token.prev = prev;\n    token.parens = state.parens;\n    token.output = state.output;\n    token.startIndex = state.index;\n    token.tokensIndex = tokens.length;\n    const output = (opts.capture ? '(' : '') + token.open;\n\n    increment('parens');\n    push({ type, value, output: state.output ? '' : ONE_CHAR });\n    push({ type: 'paren', extglob: true, value: advance(), output });\n    extglobs.push(token);\n  };\n\n  const extglobClose = token => {\n    const literal = input.slice(token.startIndex, state.index + 1);\n    const body = input.slice(token.startIndex + 2, state.index);\n    const analysis = analyzeRepeatedExtglob(body, opts);\n\n    if ((token.type === 'plus' || token.type === 'star') && analysis.risky) {\n      const safeOutput = analysis.safeOutput\n        ? (token.output ? '' : ONE_CHAR) + (opts.capture ? `(${analysis.safeOutput})` : analysis.safeOutput)\n        : undefined;\n      const open = tokens[token.tokensIndex];\n\n      open.type = 'text';\n      open.value = literal;\n      open.output = safeOutput || utils.escapeRegex(literal);\n\n      for (let i = token.tokensIndex + 1; i < tokens.length; i++) {\n        tokens[i].value = '';\n        tokens[i].output = '';\n        delete tokens[i].suffix;\n      }\n\n      state.output = token.output + open.output;\n      state.backtrack = true;\n\n      push({ type: 'paren', extglob: true, value, output: '' });\n      decrement('parens');\n      return;\n    }\n\n    let output = token.close + (opts.capture ? ')' : '');\n    let rest;\n\n    if (token.type === 'negate') {\n      let extglobStar = star;\n\n      if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n        extglobStar = globstar(opts);\n      }\n\n      if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n        output = token.close = `)$))${extglobStar}`;\n      }\n\n      if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n        // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n        // In this case, we need to parse the string and use it in the output of the original pattern.\n        // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n        //\n        // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n        const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n        output = token.close = `)${expression})${extglobStar})`;\n      }\n\n      if (token.prev.type === 'bos') {\n        state.negatedExtglob = true;\n      }\n    }\n\n    push({ type: 'paren', extglob: true, value, output });\n    decrement('parens');\n  };\n\n  /**\n   * Fast paths\n   */\n\n  if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n    let backslashes = false;\n\n    let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n      if (first === '\\\\') {\n        backslashes = true;\n        return m;\n      }\n\n      if (first === '?') {\n        if (esc) {\n          return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        if (index === 0) {\n          return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        return QMARK.repeat(chars.length);\n      }\n\n      if (first === '.') {\n        return DOT_LITERAL.repeat(chars.length);\n      }\n\n      if (first === '*') {\n        if (esc) {\n          return esc + first + (rest ? star : '');\n        }\n        return star;\n      }\n      return esc ? m : `\\\\${m}`;\n    });\n\n    if (backslashes === true) {\n      if (opts.unescape === true) {\n        output = output.replace(/\\\\/g, '');\n      } else {\n        output = output.replace(/\\\\+/g, m => {\n          return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n        });\n      }\n    }\n\n    if (output === input && opts.contains === true) {\n      state.output = input;\n      return state;\n    }\n\n    state.output = utils.wrapOutput(output, state, options);\n    return state;\n  }\n\n  /**\n   * Tokenize input until we reach end-of-string\n   */\n\n  while (!eos()) {\n    value = advance();\n\n    if (value === '\\u0000') {\n      continue;\n    }\n\n    /**\n     * Escaped characters\n     */\n\n    if (value === '\\\\') {\n      const next = peek();\n\n      if (next === '/' && opts.bash !== true) {\n        continue;\n      }\n\n      if (next === '.' || next === ';') {\n        continue;\n      }\n\n      if (!next) {\n        value += '\\\\';\n        push({ type: 'text', value });\n        continue;\n      }\n\n      // collapse slashes to reduce potential for exploits\n      const match = /^\\\\+/.exec(remaining());\n      let slashes = 0;\n\n      if (match && match[0].length > 2) {\n        slashes = match[0].length;\n        state.index += slashes;\n        if (slashes % 2 !== 0) {\n          value += '\\\\';\n        }\n      }\n\n      if (opts.unescape === true) {\n        value = advance();\n      } else {\n        value += advance();\n      }\n\n      if (state.brackets === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n    }\n\n    /**\n     * If we're inside a regex character class, continue\n     * until we reach the closing bracket.\n     */\n\n    if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n      if (opts.posix !== false && value === ':') {\n        const inner = prev.value.slice(1);\n        if (inner.includes('[')) {\n          prev.posix = true;\n\n          if (inner.includes(':')) {\n            const idx = prev.value.lastIndexOf('[');\n            const pre = prev.value.slice(0, idx);\n            const rest = prev.value.slice(idx + 2);\n            const posix = POSIX_REGEX_SOURCE[rest];\n            if (posix) {\n              prev.value = pre + posix;\n              state.backtrack = true;\n              advance();\n\n              if (!bos.output && tokens.indexOf(prev) === 1) {\n                bos.output = ONE_CHAR;\n              }\n              continue;\n            }\n          }\n        }\n      }\n\n      if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n        value = `\\\\${value}`;\n      }\n\n      if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n        value = `\\\\${value}`;\n      }\n\n      if (opts.posix === true && value === '!' && prev.value === '[') {\n        value = '^';\n      }\n\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * If we're inside a quoted string, continue\n     * until we reach the closing double quote.\n     */\n\n    if (state.quotes === 1 && value !== '\"') {\n      value = utils.escapeRegex(value);\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * Double quotes\n     */\n\n    if (value === '\"') {\n      state.quotes = state.quotes === 1 ? 0 : 1;\n      if (opts.keepQuotes === true) {\n        push({ type: 'text', value });\n      }\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === '(') {\n      increment('parens');\n      push({ type: 'paren', value });\n      continue;\n    }\n\n    if (value === ')') {\n      if (state.parens === 0 && opts.strictBrackets === true) {\n        throw new SyntaxError(syntaxError('opening', '('));\n      }\n\n      const extglob = extglobs[extglobs.length - 1];\n      if (extglob && state.parens === extglob.parens + 1) {\n        extglobClose(extglobs.pop());\n        continue;\n      }\n\n      push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n      decrement('parens');\n      continue;\n    }\n\n    /**\n     * Square brackets\n     */\n\n    if (value === '[') {\n      if (opts.nobracket === true || !remaining().includes(']')) {\n        if (opts.nobracket !== true && opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('closing', ']'));\n        }\n\n        value = `\\\\${value}`;\n      } else {\n        increment('brackets');\n      }\n\n      push({ type: 'bracket', value });\n      continue;\n    }\n\n    if (value === ']') {\n      if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      if (state.brackets === 0) {\n        if (opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('opening', '['));\n        }\n\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      decrement('brackets');\n\n      const prevValue = prev.value.slice(1);\n      if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n        value = `/${value}`;\n      }\n\n      prev.value += value;\n      append({ value });\n\n      // when literal brackets are explicitly disabled\n      // assume we should match with a regex character class\n      if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n        continue;\n      }\n\n      const escaped = utils.escapeRegex(prev.value);\n      state.output = state.output.slice(0, -prev.value.length);\n\n      // when literal brackets are explicitly enabled\n      // assume we should escape the brackets to match literal characters\n      if (opts.literalBrackets === true) {\n        state.output += escaped;\n        prev.value = escaped;\n        continue;\n      }\n\n      // when the user specifies nothing, try to match both\n      prev.value = `(${capture}${escaped}|${prev.value})`;\n      state.output += prev.value;\n      continue;\n    }\n\n    /**\n     * Braces\n     */\n\n    if (value === '{' && opts.nobrace !== true) {\n      increment('braces');\n\n      const open = {\n        type: 'brace',\n        value,\n        output: '(',\n        outputIndex: state.output.length,\n        tokensIndex: state.tokens.length\n      };\n\n      braces.push(open);\n      push(open);\n      continue;\n    }\n\n    if (value === '}') {\n      const brace = braces[braces.length - 1];\n\n      if (opts.nobrace === true || !brace) {\n        push({ type: 'text', value, output: value });\n        continue;\n      }\n\n      let output = ')';\n\n      if (brace.dots === true) {\n        const arr = tokens.slice();\n        const range = [];\n\n        for (let i = arr.length - 1; i >= 0; i--) {\n          tokens.pop();\n          if (arr[i].type === 'brace') {\n            break;\n          }\n          if (arr[i].type !== 'dots') {\n            range.unshift(arr[i].value);\n          }\n        }\n\n        output = expandRange(range, opts);\n        state.backtrack = true;\n      }\n\n      if (brace.comma !== true && brace.dots !== true) {\n        const out = state.output.slice(0, brace.outputIndex);\n        const toks = state.tokens.slice(brace.tokensIndex);\n        brace.value = brace.output = '\\\\{';\n        value = output = '\\\\}';\n        state.output = out;\n        for (const t of toks) {\n          state.output += (t.output || t.value);\n        }\n      }\n\n      push({ type: 'brace', value, output });\n      decrement('braces');\n      braces.pop();\n      continue;\n    }\n\n    /**\n     * Pipes\n     */\n\n    if (value === '|') {\n      if (extglobs.length > 0) {\n        extglobs[extglobs.length - 1].conditions++;\n      }\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Commas\n     */\n\n    if (value === ',') {\n      let output = value;\n\n      const brace = braces[braces.length - 1];\n      if (brace && stack[stack.length - 1] === 'braces') {\n        brace.comma = true;\n        output = '|';\n      }\n\n      push({ type: 'comma', value, output });\n      continue;\n    }\n\n    /**\n     * Slashes\n     */\n\n    if (value === '/') {\n      // if the beginning of the glob is \"./\", advance the start\n      // to the current index, and don't add the \"./\" characters\n      // to the state. This greatly simplifies lookbehinds when\n      // checking for BOS characters like \"!\" and \".\" (not \"./\")\n      if (prev.type === 'dot' && state.index === state.start + 1) {\n        state.start = state.index + 1;\n        state.consumed = '';\n        state.output = '';\n        tokens.pop();\n        prev = bos; // reset \"prev\" to the first token\n        continue;\n      }\n\n      push({ type: 'slash', value, output: SLASH_LITERAL });\n      continue;\n    }\n\n    /**\n     * Dots\n     */\n\n    if (value === '.') {\n      if (state.braces > 0 && prev.type === 'dot') {\n        if (prev.value === '.') prev.output = DOT_LITERAL;\n        const brace = braces[braces.length - 1];\n        prev.type = 'dots';\n        prev.output += value;\n        prev.value += value;\n        brace.dots = true;\n        continue;\n      }\n\n      if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n        push({ type: 'text', value, output: DOT_LITERAL });\n        continue;\n      }\n\n      push({ type: 'dot', value, output: DOT_LITERAL });\n      continue;\n    }\n\n    /**\n     * Question marks\n     */\n\n    if (value === '?') {\n      const isGroup = prev && prev.value === '(';\n      if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('qmark', value);\n        continue;\n      }\n\n      if (prev && prev.type === 'paren') {\n        const next = peek();\n        let output = value;\n\n        if (next === '<' && !utils.supportsLookbehinds()) {\n          throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n        }\n\n        if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n          output = `\\\\${value}`;\n        }\n\n        push({ type: 'text', value, output });\n        continue;\n      }\n\n      if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n        push({ type: 'qmark', value, output: QMARK_NO_DOT });\n        continue;\n      }\n\n      push({ type: 'qmark', value, output: QMARK });\n      continue;\n    }\n\n    /**\n     * Exclamation\n     */\n\n    if (value === '!') {\n      if (opts.noextglob !== true && peek() === '(') {\n        if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n          extglobOpen('negate', value);\n          continue;\n        }\n      }\n\n      if (opts.nonegate !== true && state.index === 0) {\n        negate();\n        continue;\n      }\n    }\n\n    /**\n     * Plus\n     */\n\n    if (value === '+') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('plus', value);\n        continue;\n      }\n\n      if ((prev && prev.value === '(') || opts.regex === false) {\n        push({ type: 'plus', value, output: PLUS_LITERAL });\n        continue;\n      }\n\n      if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n        push({ type: 'plus', value });\n        continue;\n      }\n\n      push({ type: 'plus', value: PLUS_LITERAL });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value === '@') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        push({ type: 'at', extglob: true, value, output: '' });\n        continue;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value !== '*') {\n      if (value === '$' || value === '^') {\n        value = `\\\\${value}`;\n      }\n\n      const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n      if (match) {\n        value += match[0];\n        state.index += match[0].length;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Stars\n     */\n\n    if (prev && (prev.type === 'globstar' || prev.star === true)) {\n      prev.type = 'star';\n      prev.star = true;\n      prev.value += value;\n      prev.output = star;\n      state.backtrack = true;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    let rest = remaining();\n    if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n      extglobOpen('star', value);\n      continue;\n    }\n\n    if (prev.type === 'star') {\n      if (opts.noglobstar === true) {\n        consume(value);\n        continue;\n      }\n\n      const prior = prev.prev;\n      const before = prior.prev;\n      const isStart = prior.type === 'slash' || prior.type === 'bos';\n      const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n      if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n      const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n      if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      // strip consecutive `/**/`\n      while (rest.slice(0, 3) === '/**') {\n        const after = input[state.index + 4];\n        if (after && after !== '/') {\n          break;\n        }\n        rest = rest.slice(3);\n        consume('/**', 3);\n      }\n\n      if (prior.type === 'bos' && eos()) {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = globstar(opts);\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n        prev.value += value;\n        state.globstar = true;\n        state.output += prior.output + prev.output;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n        const end = rest[1] !== void 0 ? '|$' : '';\n\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n        prev.value += value;\n\n        state.output += prior.output + prev.output;\n        state.globstar = true;\n\n        consume(value + advance());\n\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      if (prior.type === 'bos' && rest[0] === '/') {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value + advance());\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      // remove single star from output\n      state.output = state.output.slice(0, -prev.output.length);\n\n      // reset previous token to globstar\n      prev.type = 'globstar';\n      prev.output = globstar(opts);\n      prev.value += value;\n\n      // reset output with globstar\n      state.output += prev.output;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    const token = { type: 'star', value, output: star };\n\n    if (opts.bash === true) {\n      token.output = '.*?';\n      if (prev.type === 'bos' || prev.type === 'slash') {\n        token.output = nodot + token.output;\n      }\n      push(token);\n      continue;\n    }\n\n    if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n      token.output = value;\n      push(token);\n      continue;\n    }\n\n    if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n      if (prev.type === 'dot') {\n        state.output += NO_DOT_SLASH;\n        prev.output += NO_DOT_SLASH;\n\n      } else if (opts.dot === true) {\n        state.output += NO_DOTS_SLASH;\n        prev.output += NO_DOTS_SLASH;\n\n      } else {\n        state.output += nodot;\n        prev.output += nodot;\n      }\n\n      if (peek() !== '*') {\n        state.output += ONE_CHAR;\n        prev.output += ONE_CHAR;\n      }\n    }\n\n    push(token);\n  }\n\n  while (state.brackets > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n    state.output = utils.escapeLast(state.output, '[');\n    decrement('brackets');\n  }\n\n  while (state.parens > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n    state.output = utils.escapeLast(state.output, '(');\n    decrement('parens');\n  }\n\n  while (state.braces > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n    state.output = utils.escapeLast(state.output, '{');\n    decrement('braces');\n  }\n\n  if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n    push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n  }\n\n  // rebuild the output if we had to backtrack at any point\n  if (state.backtrack === true) {\n    state.output = '';\n\n    for (const token of state.tokens) {\n      state.output += token.output != null ? token.output : token.value;\n\n      if (token.suffix) {\n        state.output += token.suffix;\n      }\n    }\n  }\n\n  return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  const len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  input = REPLACEMENTS[input] || input;\n  const win32 = utils.isWindows(options);\n\n  // create constants based on platform, for windows or posix\n  const {\n    DOT_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOTS,\n    NO_DOTS_SLASH,\n    STAR,\n    START_ANCHOR\n  } = constants.globChars(win32);\n\n  const nodot = opts.dot ? NO_DOTS : NO_DOT;\n  const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n  const capture = opts.capture ? '' : '?:';\n  const state = { negated: false, prefix: '' };\n  let star = opts.bash === true ? '.*?' : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  const globstar = opts => {\n    if (opts.noglobstar === true) return star;\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const create = str => {\n    switch (str) {\n      case '*':\n        return `${nodot}${ONE_CHAR}${star}`;\n\n      case '.*':\n        return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*.*':\n        return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*/*':\n        return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n      case '**':\n        return nodot + globstar(opts);\n\n      case '**/*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n      case '**/*.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '**/.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      default: {\n        const match = /^(.*?)\\.(\\w+)$/.exec(str);\n        if (!match) return;\n\n        const source = create(match[1]);\n        if (!source) return;\n\n        return source + DOT_LITERAL + match[2];\n      }\n    }\n  };\n\n  const output = utils.removePrefix(input, state);\n  let source = create(output);\n\n  if (source && opts.strictSlashes !== true) {\n    source += `${SLASH_LITERAL}?`;\n  }\n\n  return source;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n  if (Array.isArray(glob)) {\n    const fns = glob.map(input => picomatch(input, options, returnState));\n    const arrayMatcher = str => {\n      for (const isMatch of fns) {\n        const state = isMatch(str);\n        if (state) return state;\n      }\n      return false;\n    };\n    return arrayMatcher;\n  }\n\n  const isState = isObject(glob) && glob.tokens && glob.input;\n\n  if (glob === '' || (typeof glob !== 'string' && !isState)) {\n    throw new TypeError('Expected pattern to be a non-empty string');\n  }\n\n  const opts = options || {};\n  const posix = utils.isWindows(options);\n  const regex = isState\n    ? picomatch.compileRe(glob, options)\n    : picomatch.makeRe(glob, options, false, true);\n\n  const state = regex.state;\n  delete regex.state;\n\n  let isIgnored = () => false;\n  if (opts.ignore) {\n    const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n    isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n  }\n\n  const matcher = (input, returnObject = false) => {\n    const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n    const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n    if (typeof opts.onResult === 'function') {\n      opts.onResult(result);\n    }\n\n    if (isMatch === false) {\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (isIgnored(input)) {\n      if (typeof opts.onIgnore === 'function') {\n        opts.onIgnore(result);\n      }\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (typeof opts.onMatch === 'function') {\n      opts.onMatch(result);\n    }\n    return returnObject ? result : true;\n  };\n\n  if (returnState) {\n    matcher.state = state;\n  }\n\n  return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected input to be a string');\n  }\n\n  if (input === '') {\n    return { isMatch: false, output: '' };\n  }\n\n  const opts = options || {};\n  const format = opts.format || (posix ? utils.toPosixSlashes : null);\n  let match = input === glob;\n  let output = (match && format) ? format(input) : input;\n\n  if (match === false) {\n    output = format ? format(input) : input;\n    match = output === glob;\n  }\n\n  if (match === false || opts.capture === true) {\n    if (opts.matchBase === true || opts.basename === true) {\n      match = picomatch.matchBase(input, regex, options, posix);\n    } else {\n      match = regex.exec(output);\n    }\n  }\n\n  return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n  const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n  return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n  if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n  return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n *   input: '!./foo/*.js',\n *   start: 3,\n *   base: 'foo',\n *   glob: '*.js',\n *   isBrace: false,\n *   isBracket: false,\n *   isGlob: true,\n *   isExtglob: false,\n *   isGlobstar: false,\n *   negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n  if (returnOutput === true) {\n    return state.output;\n  }\n\n  const opts = options || {};\n  const prepend = opts.contains ? '' : '^';\n  const append = opts.contains ? '' : '$';\n\n  let source = `${prepend}(?:${state.output})${append}`;\n  if (state && state.negated === true) {\n    source = `^(?!${source}).*$`;\n  }\n\n  const regex = picomatch.toRegex(source, options);\n  if (returnState === true) {\n    regex.state = state;\n  }\n\n  return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n  if (!input || typeof input !== 'string') {\n    throw new TypeError('Expected a non-empty string');\n  }\n\n  let parsed = { negated: false, fastpaths: true };\n\n  if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n    parsed.output = parse.fastpaths(input, options);\n  }\n\n  if (!parsed.output) {\n    parsed = parse(input, options);\n  }\n\n  return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n  try {\n    const opts = options || {};\n    return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n  } catch (err) {\n    if (options && options.debug === true) throw err;\n    return /$^/;\n  }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nmodule.exports = require('./lib/picomatch');\n","'use strict';\n\nconst util = require('util');\nconst braces = require('braces');\nconst picomatch = require('picomatch');\nconst utils = require('picomatch/lib/utils');\n\nconst isEmptyString = v => v === '' || v === './';\nconst hasBraces = v => {\n  const index = v.indexOf('{');\n  return index > -1 && v.indexOf('}', index) > -1;\n};\n\n/**\n * Returns an array of strings that match one or more glob patterns.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm(list, patterns[, options]);\n *\n * console.log(mm(['a.js', 'a.txt'], ['*.js']));\n * //=> [ 'a.js' ]\n * ```\n * @param {String|Array<string>} `list` List of strings to match.\n * @param {String|Array<string>} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options)\n * @return {Array} Returns an array of matches\n * @summary false\n * @api public\n */\n\nconst micromatch = (list, patterns, options) => {\n  patterns = [].concat(patterns);\n  list = [].concat(list);\n\n  let omit = new Set();\n  let keep = new Set();\n  let items = new Set();\n  let negatives = 0;\n\n  let onResult = state => {\n    items.add(state.output);\n    if (options && options.onResult) {\n      options.onResult(state);\n    }\n  };\n\n  for (let i = 0; i < patterns.length; i++) {\n    let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);\n    let negated = isMatch.state.negated || isMatch.state.negatedExtglob;\n    if (negated) negatives++;\n\n    for (let item of list) {\n      let matched = isMatch(item, true);\n\n      let match = negated ? !matched.isMatch : matched.isMatch;\n      if (!match) continue;\n\n      if (negated) {\n        omit.add(matched.output);\n      } else {\n        omit.delete(matched.output);\n        keep.add(matched.output);\n      }\n    }\n  }\n\n  let result = negatives === patterns.length ? [...items] : [...keep];\n  let matches = result.filter(item => !omit.has(item));\n\n  if (options && matches.length === 0) {\n    if (options.failglob === true) {\n      throw new Error(`No matches found for \"${patterns.join(', ')}\"`);\n    }\n\n    if (options.nonull === true || options.nullglob === true) {\n      return options.unescape ? patterns.map(p => p.replace(/\\\\/g, '')) : patterns;\n    }\n  }\n\n  return matches;\n};\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.match = micromatch;\n\n/**\n * Returns a matcher function from the given glob `pattern` and `options`.\n * The returned function takes a string to match as its only argument and returns\n * true if the string is a match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matcher(pattern[, options]);\n *\n * const isMatch = mm.matcher('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @param {String} `pattern` Glob pattern\n * @param {Object} `options`\n * @return {Function} Returns a matcher function.\n * @api public\n */\n\nmicromatch.matcher = (pattern, options) => picomatch(pattern, options);\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.isMatch(string, patterns[, options]);\n *\n * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(mm.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `[options]` See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.any = micromatch.isMatch;\n\n/**\n * Returns a list of strings that _**do not match any**_ of the given `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.not(list, patterns[, options]);\n *\n * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));\n * //=> ['b.b', 'c.c']\n * ```\n * @param {Array} `list` Array of strings to match.\n * @param {String|Array} `patterns` One or more glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array} Returns an array of strings that **do not match** the given patterns.\n * @api public\n */\n\nmicromatch.not = (list, patterns, options = {}) => {\n  patterns = [].concat(patterns).map(String);\n  let result = new Set();\n  let items = [];\n\n  let onResult = state => {\n    if (options.onResult) options.onResult(state);\n    items.push(state.output);\n  };\n\n  let matches = new Set(micromatch(list, patterns, { ...options, onResult }));\n\n  for (let item of items) {\n    if (!matches.has(item)) {\n      result.add(item);\n    }\n  }\n  return [...result];\n};\n\n/**\n * Returns true if the given `string` contains the given pattern. Similar\n * to [.isMatch](#isMatch) but the pattern can match any part of the string.\n *\n * ```js\n * var mm = require('micromatch');\n * // mm.contains(string, pattern[, options]);\n *\n * console.log(mm.contains('aa/bb/cc', '*b'));\n * //=> true\n * console.log(mm.contains('aa/bb/cc', '*d'));\n * //=> false\n * ```\n * @param {String} `str` The string to match.\n * @param {String|Array} `patterns` Glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any of the patterns matches any part of `str`.\n * @api public\n */\n\nmicromatch.contains = (str, pattern, options) => {\n  if (typeof str !== 'string') {\n    throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n  }\n\n  if (Array.isArray(pattern)) {\n    return pattern.some(p => micromatch.contains(str, p, options));\n  }\n\n  if (typeof pattern === 'string') {\n    if (isEmptyString(str) || isEmptyString(pattern)) {\n      return false;\n    }\n\n    if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {\n      return true;\n    }\n  }\n\n  return micromatch.isMatch(str, pattern, { ...options, contains: true });\n};\n\n/**\n * Filter the keys of the given object with the given `glob` pattern\n * and `options`. Does not attempt to match nested keys. If you need this feature,\n * use [glob-object][] instead.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matchKeys(object, patterns[, options]);\n *\n * const obj = { aa: 'a', ab: 'b', ac: 'c' };\n * console.log(mm.matchKeys(obj, '*b'));\n * //=> { ab: 'b' }\n * ```\n * @param {Object} `object` The object with keys to filter.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Object} Returns an object with only keys that match the given patterns.\n * @api public\n */\n\nmicromatch.matchKeys = (obj, patterns, options) => {\n  if (!utils.isObject(obj)) {\n    throw new TypeError('Expected the first argument to be an object');\n  }\n  let keys = micromatch(Object.keys(obj), patterns, options);\n  let res = {};\n  for (let key of keys) res[key] = obj[key];\n  return res;\n};\n\n/**\n * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.some(list, patterns[, options]);\n *\n * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // true\n * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list`\n * @api public\n */\n\nmicromatch.some = (list, patterns, options) => {\n  let items = [].concat(list);\n\n  for (let pattern of [].concat(patterns)) {\n    let isMatch = picomatch(String(pattern), options);\n    if (items.some(item => isMatch(item))) {\n      return true;\n    }\n  }\n  return false;\n};\n\n/**\n * Returns true if every string in the given `list` matches\n * any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.every(list, patterns[, options]);\n *\n * console.log(mm.every('foo.js', ['foo.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // false\n * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list`\n * @api public\n */\n\nmicromatch.every = (list, patterns, options) => {\n  let items = [].concat(list);\n\n  for (let pattern of [].concat(patterns)) {\n    let isMatch = picomatch(String(pattern), options);\n    if (!items.every(item => isMatch(item))) {\n      return false;\n    }\n  }\n  return true;\n};\n\n/**\n * Returns true if **all** of the given `patterns` match\n * the specified string.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.all(string, patterns[, options]);\n *\n * console.log(mm.all('foo.js', ['foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', '!foo.js']));\n * // false\n *\n * console.log(mm.all('foo.js', ['*.js', 'foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));\n * // true\n * ```\n * @param {String|Array} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.all = (str, patterns, options) => {\n  if (typeof str !== 'string') {\n    throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n  }\n\n  return [].concat(patterns).every(p => picomatch(p, options)(str));\n};\n\n/**\n * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.capture(pattern, string[, options]);\n *\n * console.log(mm.capture('test/*.js', 'test/foo.js'));\n * //=> ['foo']\n * console.log(mm.capture('test/*.js', 'foo/bar.css'));\n * //=> null\n * ```\n * @param {String} `glob` Glob pattern to use for matching.\n * @param {String} `input` String to match\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`.\n * @api public\n */\n\nmicromatch.capture = (glob, input, options) => {\n  let posix = utils.isWindows(options);\n  let regex = picomatch.makeRe(String(glob), { ...options, capture: true });\n  let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);\n\n  if (match) {\n    return match.slice(1).map(v => v === void 0 ? '' : v);\n  }\n};\n\n/**\n * Create a regular expression from the given glob `pattern`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.makeRe(pattern[, options]);\n *\n * console.log(mm.makeRe('*.js'));\n * //=> /^(?:(\\.[\\\\\\/])?(?!\\.)(?=.)[^\\/]*?\\.js)$/\n * ```\n * @param {String} `pattern` A glob pattern to convert to regex.\n * @param {Object} `options`\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\nmicromatch.makeRe = (...args) => picomatch.makeRe(...args);\n\n/**\n * Scan a glob pattern to separate the pattern into segments. Used\n * by the [split](#split) method.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.scan(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\nmicromatch.scan = (...args) => picomatch.scan(...args);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.parse(pattern[, options]);\n * ```\n * @param {String} `glob`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as regex source string.\n * @api public\n */\n\nmicromatch.parse = (patterns, options) => {\n  let res = [];\n  for (let pattern of [].concat(patterns || [])) {\n    for (let str of braces(String(pattern), options)) {\n      res.push(picomatch.parse(str, options));\n    }\n  }\n  return res;\n};\n\n/**\n * Process the given brace `pattern`.\n *\n * ```js\n * const { braces } = require('micromatch');\n * console.log(braces('foo/{a,b,c}/bar'));\n * //=> [ 'foo/(a|b|c)/bar' ]\n *\n * console.log(braces('foo/{a,b,c}/bar', { expand: true }));\n * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]\n * ```\n * @param {String} `pattern` String with brace pattern to process.\n * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.\n * @return {Array}\n * @api public\n */\n\nmicromatch.braces = (pattern, options) => {\n  if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n  if ((options && options.nobrace === true) || !hasBraces(pattern)) {\n    return [pattern];\n  }\n  return braces(pattern, options);\n};\n\n/**\n * Expand braces\n */\n\nmicromatch.braceExpand = (pattern, options) => {\n  if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n  return micromatch.braces(pattern, { ...options, expand: true });\n};\n\n/**\n * Expose micromatch\n */\n\n// exposed for tests\nmicromatch.hasBraces = hasBraces;\nmodule.exports = micromatch;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isAbsolute = exports.partitionAbsoluteAndRelative = exports.removeDuplicateSlashes = exports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.isPatternRelatedToParentDirectory = exports.getPatternsOutsideCurrentDirectory = exports.getPatternsInsideCurrentDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0;\nconst path = require(\"path\");\nconst globParent = require(\"glob-parent\");\nconst micromatch = require(\"micromatch\");\nconst GLOBSTAR = '**';\nconst ESCAPE_SYMBOL = '\\\\';\nconst COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;\nconst REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\\[[^[]*]/;\nconst REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\\([^(]*\\|[^|]*\\)/;\nconst GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\\([^(]*\\)/;\nconst BRACE_EXPANSION_SEPARATORS_RE = /,|\\.\\./;\n/**\n * Matches a sequence of two or more consecutive slashes, excluding the first two slashes at the beginning of the string.\n * The latter is due to the presence of the device path at the beginning of the UNC path.\n */\nconst DOUBLE_SLASH_RE = /(?!^)\\/{2,}/g;\nfunction isStaticPattern(pattern, options = {}) {\n    return !isDynamicPattern(pattern, options);\n}\nexports.isStaticPattern = isStaticPattern;\nfunction isDynamicPattern(pattern, options = {}) {\n    /**\n     * A special case with an empty string is necessary for matching patterns that start with a forward slash.\n     * An empty string cannot be a dynamic pattern.\n     * For example, the pattern `/lib/*` will be spread into parts: '', 'lib', '*'.\n     */\n    if (pattern === '') {\n        return false;\n    }\n    /**\n     * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check\n     * filepath directly (without read directory).\n     */\n    if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {\n        return true;\n    }\n    if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {\n        return true;\n    }\n    if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {\n        return true;\n    }\n    if (options.braceExpansion !== false && hasBraceExpansion(pattern)) {\n        return true;\n    }\n    return false;\n}\nexports.isDynamicPattern = isDynamicPattern;\nfunction hasBraceExpansion(pattern) {\n    const openingBraceIndex = pattern.indexOf('{');\n    if (openingBraceIndex === -1) {\n        return false;\n    }\n    const closingBraceIndex = pattern.indexOf('}', openingBraceIndex + 1);\n    if (closingBraceIndex === -1) {\n        return false;\n    }\n    const braceContent = pattern.slice(openingBraceIndex, closingBraceIndex);\n    return BRACE_EXPANSION_SEPARATORS_RE.test(braceContent);\n}\nfunction convertToPositivePattern(pattern) {\n    return isNegativePattern(pattern) ? pattern.slice(1) : pattern;\n}\nexports.convertToPositivePattern = convertToPositivePattern;\nfunction convertToNegativePattern(pattern) {\n    return '!' + pattern;\n}\nexports.convertToNegativePattern = convertToNegativePattern;\nfunction isNegativePattern(pattern) {\n    return pattern.startsWith('!') && pattern[1] !== '(';\n}\nexports.isNegativePattern = isNegativePattern;\nfunction isPositivePattern(pattern) {\n    return !isNegativePattern(pattern);\n}\nexports.isPositivePattern = isPositivePattern;\nfunction getNegativePatterns(patterns) {\n    return patterns.filter(isNegativePattern);\n}\nexports.getNegativePatterns = getNegativePatterns;\nfunction getPositivePatterns(patterns) {\n    return patterns.filter(isPositivePattern);\n}\nexports.getPositivePatterns = getPositivePatterns;\n/**\n * Returns patterns that can be applied inside the current directory.\n *\n * @example\n * // ['./*', '*', 'a/*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsInsideCurrentDirectory(patterns) {\n    return patterns.filter((pattern) => !isPatternRelatedToParentDirectory(pattern));\n}\nexports.getPatternsInsideCurrentDirectory = getPatternsInsideCurrentDirectory;\n/**\n * Returns patterns to be expanded relative to (outside) the current directory.\n *\n * @example\n * // ['../*', './../*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsOutsideCurrentDirectory(patterns) {\n    return patterns.filter(isPatternRelatedToParentDirectory);\n}\nexports.getPatternsOutsideCurrentDirectory = getPatternsOutsideCurrentDirectory;\nfunction isPatternRelatedToParentDirectory(pattern) {\n    return pattern.startsWith('..') || pattern.startsWith('./..');\n}\nexports.isPatternRelatedToParentDirectory = isPatternRelatedToParentDirectory;\nfunction getBaseDirectory(pattern) {\n    return globParent(pattern, { flipBackslashes: false });\n}\nexports.getBaseDirectory = getBaseDirectory;\nfunction hasGlobStar(pattern) {\n    return pattern.includes(GLOBSTAR);\n}\nexports.hasGlobStar = hasGlobStar;\nfunction endsWithSlashGlobStar(pattern) {\n    return pattern.endsWith('/' + GLOBSTAR);\n}\nexports.endsWithSlashGlobStar = endsWithSlashGlobStar;\nfunction isAffectDepthOfReadingPattern(pattern) {\n    const basename = path.basename(pattern);\n    return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);\n}\nexports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;\nfunction expandPatternsWithBraceExpansion(patterns) {\n    return patterns.reduce((collection, pattern) => {\n        return collection.concat(expandBraceExpansion(pattern));\n    }, []);\n}\nexports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;\nfunction expandBraceExpansion(pattern) {\n    const patterns = micromatch.braces(pattern, { expand: true, nodupes: true, keepEscaping: true });\n    /**\n     * Sort the patterns by length so that the same depth patterns are processed side by side.\n     * `a/{b,}/{c,}/*` – `['a///*', 'a/b//*', 'a//c/*', 'a/b/c/*']`\n     */\n    patterns.sort((a, b) => a.length - b.length);\n    /**\n     * Micromatch can return an empty string in the case of patterns like `{a,}`.\n     */\n    return patterns.filter((pattern) => pattern !== '');\n}\nexports.expandBraceExpansion = expandBraceExpansion;\nfunction getPatternParts(pattern, options) {\n    let { parts } = micromatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));\n    /**\n     * The scan method returns an empty array in some cases.\n     * See micromatch/picomatch#58 for more details.\n     */\n    if (parts.length === 0) {\n        parts = [pattern];\n    }\n    /**\n     * The scan method does not return an empty part for the pattern with a forward slash.\n     * This is another part of micromatch/picomatch#58.\n     */\n    if (parts[0].startsWith('/')) {\n        parts[0] = parts[0].slice(1);\n        parts.unshift('');\n    }\n    return parts;\n}\nexports.getPatternParts = getPatternParts;\nfunction makeRe(pattern, options) {\n    return micromatch.makeRe(pattern, options);\n}\nexports.makeRe = makeRe;\nfunction convertPatternsToRe(patterns, options) {\n    return patterns.map((pattern) => makeRe(pattern, options));\n}\nexports.convertPatternsToRe = convertPatternsToRe;\nfunction matchAny(entry, patternsRe) {\n    return patternsRe.some((patternRe) => patternRe.test(entry));\n}\nexports.matchAny = matchAny;\n/**\n * This package only works with forward slashes as a path separator.\n * Because of this, we cannot use the standard `path.normalize` method, because on Windows platform it will use of backslashes.\n */\nfunction removeDuplicateSlashes(pattern) {\n    return pattern.replace(DOUBLE_SLASH_RE, '/');\n}\nexports.removeDuplicateSlashes = removeDuplicateSlashes;\nfunction partitionAbsoluteAndRelative(patterns) {\n    const absolute = [];\n    const relative = [];\n    for (const pattern of patterns) {\n        if (isAbsolute(pattern)) {\n            absolute.push(pattern);\n        }\n        else {\n            relative.push(pattern);\n        }\n    }\n    return [absolute, relative];\n}\nexports.partitionAbsoluteAndRelative = partitionAbsoluteAndRelative;\nfunction isAbsolute(pattern) {\n    return path.isAbsolute(pattern);\n}\nexports.isAbsolute = isAbsolute;\n","'use strict'\n/*\n * merge2\n * https://github.com/teambition/merge2\n *\n * Copyright (c) 2014-2020 Teambition\n * Licensed under the MIT license.\n */\nconst Stream = require('stream')\nconst PassThrough = Stream.PassThrough\nconst slice = Array.prototype.slice\n\nmodule.exports = merge2\n\nfunction merge2 () {\n  const streamsQueue = []\n  const args = slice.call(arguments)\n  let merging = false\n  let options = args[args.length - 1]\n\n  if (options && !Array.isArray(options) && options.pipe == null) {\n    args.pop()\n  } else {\n    options = {}\n  }\n\n  const doEnd = options.end !== false\n  const doPipeError = options.pipeError === true\n  if (options.objectMode == null) {\n    options.objectMode = true\n  }\n  if (options.highWaterMark == null) {\n    options.highWaterMark = 64 * 1024\n  }\n  const mergedStream = PassThrough(options)\n\n  function addStream () {\n    for (let i = 0, len = arguments.length; i < len; i++) {\n      streamsQueue.push(pauseStreams(arguments[i], options))\n    }\n    mergeStream()\n    return this\n  }\n\n  function mergeStream () {\n    if (merging) {\n      return\n    }\n    merging = true\n\n    let streams = streamsQueue.shift()\n    if (!streams) {\n      process.nextTick(endStream)\n      return\n    }\n    if (!Array.isArray(streams)) {\n      streams = [streams]\n    }\n\n    let pipesCount = streams.length + 1\n\n    function next () {\n      if (--pipesCount > 0) {\n        return\n      }\n      merging = false\n      mergeStream()\n    }\n\n    function pipe (stream) {\n      function onend () {\n        stream.removeListener('merge2UnpipeEnd', onend)\n        stream.removeListener('end', onend)\n        if (doPipeError) {\n          stream.removeListener('error', onerror)\n        }\n        next()\n      }\n      function onerror (err) {\n        mergedStream.emit('error', err)\n      }\n      // skip ended stream\n      if (stream._readableState.endEmitted) {\n        return next()\n      }\n\n      stream.on('merge2UnpipeEnd', onend)\n      stream.on('end', onend)\n\n      if (doPipeError) {\n        stream.on('error', onerror)\n      }\n\n      stream.pipe(mergedStream, { end: false })\n      // compatible for old stream\n      stream.resume()\n    }\n\n    for (let i = 0; i < streams.length; i++) {\n      pipe(streams[i])\n    }\n\n    next()\n  }\n\n  function endStream () {\n    merging = false\n    // emit 'queueDrain' when all streams merged.\n    mergedStream.emit('queueDrain')\n    if (doEnd) {\n      mergedStream.end()\n    }\n  }\n\n  mergedStream.setMaxListeners(0)\n  mergedStream.add = addStream\n  mergedStream.on('unpipe', function (stream) {\n    stream.emit('merge2UnpipeEnd')\n  })\n\n  if (args.length) {\n    addStream.apply(null, args)\n  }\n  return mergedStream\n}\n\n// check and pause streams for pipe.\nfunction pauseStreams (streams, options) {\n  if (!Array.isArray(streams)) {\n    // Backwards-compat with old-style streams\n    if (!streams._readableState && streams.pipe) {\n      streams = streams.pipe(PassThrough(options))\n    }\n    if (!streams._readableState || !streams.pause || !streams.pipe) {\n      throw new Error('Only readable stream can be merged.')\n    }\n    streams.pause()\n  } else {\n    for (let i = 0, len = streams.length; i < len; i++) {\n      streams[i] = pauseStreams(streams[i], options)\n    }\n  }\n  return streams\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.merge = void 0;\nconst merge2 = require(\"merge2\");\nfunction merge(streams) {\n    const mergedStream = merge2(streams);\n    streams.forEach((stream) => {\n        stream.once('error', (error) => mergedStream.emit('error', error));\n    });\n    mergedStream.once('close', () => propagateCloseEventToSources(streams));\n    mergedStream.once('end', () => propagateCloseEventToSources(streams));\n    return mergedStream;\n}\nexports.merge = merge;\nfunction propagateCloseEventToSources(streams) {\n    streams.forEach((stream) => stream.emit('close'));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEmpty = exports.isString = void 0;\nfunction isString(input) {\n    return typeof input === 'string';\n}\nexports.isString = isString;\nfunction isEmpty(input) {\n    return input === '';\n}\nexports.isEmpty = isEmpty;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0;\nconst array = require(\"./array\");\nexports.array = array;\nconst errno = require(\"./errno\");\nexports.errno = errno;\nconst fs = require(\"./fs\");\nexports.fs = fs;\nconst path = require(\"./path\");\nexports.path = path;\nconst pattern = require(\"./pattern\");\nexports.pattern = pattern;\nconst stream = require(\"./stream\");\nexports.stream = stream;\nconst string = require(\"./string\");\nexports.string = string;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0;\nconst utils = require(\"../utils\");\nfunction generate(input, settings) {\n    const patterns = processPatterns(input, settings);\n    const ignore = processPatterns(settings.ignore, settings);\n    const positivePatterns = getPositivePatterns(patterns);\n    const negativePatterns = getNegativePatternsAsPositive(patterns, ignore);\n    const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));\n    const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));\n    const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);\n    const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);\n    return staticTasks.concat(dynamicTasks);\n}\nexports.generate = generate;\nfunction processPatterns(input, settings) {\n    let patterns = input;\n    /**\n     * The original pattern like `{,*,**,a/*}` can lead to problems checking the depth when matching entry\n     * and some problems with the micromatch package (see fast-glob issues: #365, #394).\n     *\n     * To solve this problem, we expand all patterns containing brace expansion. This can lead to a slight slowdown\n     * in matching in the case of a large set of patterns after expansion.\n     */\n    if (settings.braceExpansion) {\n        patterns = utils.pattern.expandPatternsWithBraceExpansion(patterns);\n    }\n    /**\n     * If the `baseNameMatch` option is enabled, we must add globstar to patterns, so that they can be used\n     * at any nesting level.\n     *\n     * We do this here, because otherwise we have to complicate the filtering logic. For example, we need to change\n     * the pattern in the filter before creating a regular expression. There is no need to change the patterns\n     * in the application. Only on the input.\n     */\n    if (settings.baseNameMatch) {\n        patterns = patterns.map((pattern) => pattern.includes('/') ? pattern : `**/${pattern}`);\n    }\n    /**\n     * This method also removes duplicate slashes that may have been in the pattern or formed as a result of expansion.\n     */\n    return patterns.map((pattern) => utils.pattern.removeDuplicateSlashes(pattern));\n}\n/**\n * Returns tasks grouped by basic pattern directories.\n *\n * Patterns that can be found inside (`./`) and outside (`../`) the current directory are handled separately.\n * This is necessary because directory traversal starts at the base directory and goes deeper.\n */\nfunction convertPatternsToTasks(positive, negative, dynamic) {\n    const tasks = [];\n    const patternsOutsideCurrentDirectory = utils.pattern.getPatternsOutsideCurrentDirectory(positive);\n    const patternsInsideCurrentDirectory = utils.pattern.getPatternsInsideCurrentDirectory(positive);\n    const outsideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsOutsideCurrentDirectory);\n    const insideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsInsideCurrentDirectory);\n    tasks.push(...convertPatternGroupsToTasks(outsideCurrentDirectoryGroup, negative, dynamic));\n    /*\n     * For the sake of reducing future accesses to the file system, we merge all tasks within the current directory\n     * into a global task, if at least one pattern refers to the root (`.`). In this case, the global task covers the rest.\n     */\n    if ('.' in insideCurrentDirectoryGroup) {\n        tasks.push(convertPatternGroupToTask('.', patternsInsideCurrentDirectory, negative, dynamic));\n    }\n    else {\n        tasks.push(...convertPatternGroupsToTasks(insideCurrentDirectoryGroup, negative, dynamic));\n    }\n    return tasks;\n}\nexports.convertPatternsToTasks = convertPatternsToTasks;\nfunction getPositivePatterns(patterns) {\n    return utils.pattern.getPositivePatterns(patterns);\n}\nexports.getPositivePatterns = getPositivePatterns;\nfunction getNegativePatternsAsPositive(patterns, ignore) {\n    const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);\n    const positive = negative.map(utils.pattern.convertToPositivePattern);\n    return positive;\n}\nexports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;\nfunction groupPatternsByBaseDirectory(patterns) {\n    const group = {};\n    return patterns.reduce((collection, pattern) => {\n        const base = utils.pattern.getBaseDirectory(pattern);\n        if (base in collection) {\n            collection[base].push(pattern);\n        }\n        else {\n            collection[base] = [pattern];\n        }\n        return collection;\n    }, group);\n}\nexports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;\nfunction convertPatternGroupsToTasks(positive, negative, dynamic) {\n    return Object.keys(positive).map((base) => {\n        return convertPatternGroupToTask(base, positive[base], negative, dynamic);\n    });\n}\nexports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;\nfunction convertPatternGroupToTask(base, positive, negative, dynamic) {\n    return {\n        dynamic,\n        positive,\n        negative,\n        base,\n        patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))\n    };\n}\nexports.convertPatternGroupToTask = convertPatternGroupToTask;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings, callback) {\n    settings.fs.lstat(path, (lstatError, lstat) => {\n        if (lstatError !== null) {\n            callFailureCallback(callback, lstatError);\n            return;\n        }\n        if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n            callSuccessCallback(callback, lstat);\n            return;\n        }\n        settings.fs.stat(path, (statError, stat) => {\n            if (statError !== null) {\n                if (settings.throwErrorOnBrokenSymbolicLink) {\n                    callFailureCallback(callback, statError);\n                    return;\n                }\n                callSuccessCallback(callback, lstat);\n                return;\n            }\n            if (settings.markSymbolicLink) {\n                stat.isSymbolicLink = () => true;\n            }\n            callSuccessCallback(callback, stat);\n        });\n    });\n}\nexports.read = read;\nfunction callFailureCallback(callback, error) {\n    callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n    callback(null, result);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings) {\n    const lstat = settings.fs.lstatSync(path);\n    if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n        return lstat;\n    }\n    try {\n        const stat = settings.fs.statSync(path);\n        if (settings.markSymbolicLink) {\n            stat.isSymbolicLink = () => true;\n        }\n        return stat;\n    }\n    catch (error) {\n        if (!settings.throwErrorOnBrokenSymbolicLink) {\n            return lstat;\n        }\n        throw error;\n    }\n}\nexports.read = read;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n    lstat: fs.lstat,\n    stat: fs.stat,\n    lstatSync: fs.lstatSync,\n    statSync: fs.statSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n    if (fsMethods === undefined) {\n        return exports.FILE_SYSTEM_ADAPTER;\n    }\n    return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);\n        this.fs = fs.createFileSystemAdapter(this._options.fs);\n        this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);\n        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n    }\n    _getValue(option, value) {\n        return option !== null && option !== void 0 ? option : value;\n    }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.statSync = exports.stat = exports.Settings = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction stat(path, optionsOrSettingsOrCallback, callback) {\n    if (typeof optionsOrSettingsOrCallback === 'function') {\n        async.read(path, getSettings(), optionsOrSettingsOrCallback);\n        return;\n    }\n    async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.stat = stat;\nfunction statSync(path, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    return sync.read(path, settings);\n}\nexports.statSync = statSync;\nfunction getSettings(settingsOrOptions = {}) {\n    if (settingsOrOptions instanceof settings_1.default) {\n        return settingsOrOptions;\n    }\n    return new settings_1.default(settingsOrOptions);\n}\n","/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nlet promise\n\nmodule.exports = typeof queueMicrotask === 'function'\n  ? queueMicrotask.bind(typeof window !== 'undefined' ? window : global)\n  // reuse resolved promise, and allocate it lazily\n  : cb => (promise || (promise = Promise.resolve()))\n    .then(cb)\n    .catch(err => setTimeout(() => { throw err }, 0))\n","/*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = runParallel\n\nconst queueMicrotask = require('queue-microtask')\n\nfunction runParallel (tasks, cb) {\n  let results, pending, keys\n  let isSync = true\n\n  if (Array.isArray(tasks)) {\n    results = []\n    pending = tasks.length\n  } else {\n    keys = Object.keys(tasks)\n    results = {}\n    pending = keys.length\n  }\n\n  function done (err) {\n    function end () {\n      if (cb) cb(err, results)\n      cb = null\n    }\n    if (isSync) queueMicrotask(end)\n    else end()\n  }\n\n  function each (i, err, result) {\n    results[i] = result\n    if (--pending === 0 || err) {\n      done(err)\n    }\n  }\n\n  if (!pending) {\n    // empty\n    done(null)\n  } else if (keys) {\n    // object\n    keys.forEach(function (key) {\n      tasks[key](function (err, result) { each(key, err, result) })\n    })\n  } else {\n    // array\n    tasks.forEach(function (task, i) {\n      task(function (err, result) { each(i, err, result) })\n    })\n  }\n\n  isSync = false\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = void 0;\nconst NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');\nif (NODE_PROCESS_VERSION_PARTS[0] === undefined || NODE_PROCESS_VERSION_PARTS[1] === undefined) {\n    throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);\n}\nconst MAJOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);\nconst MINOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);\nconst SUPPORTED_MAJOR_VERSION = 10;\nconst SUPPORTED_MINOR_VERSION = 10;\nconst IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;\nconst IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;\n/**\n * IS `true` for Node.js 10.10 and greater.\n */\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n    constructor(name, stats) {\n        this.name = name;\n        this.isBlockDevice = stats.isBlockDevice.bind(stats);\n        this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n        this.isDirectory = stats.isDirectory.bind(stats);\n        this.isFIFO = stats.isFIFO.bind(stats);\n        this.isFile = stats.isFile.bind(stats);\n        this.isSocket = stats.isSocket.bind(stats);\n        this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n    }\n}\nfunction createDirentFromStats(name, stats) {\n    return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fs = void 0;\nconst fs = require(\"./fs\");\nexports.fs = fs;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = void 0;\nfunction joinPathSegments(a, b, separator) {\n    /**\n     * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n     */\n    if (a.endsWith(separator)) {\n        return a + b;\n    }\n    return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst rpl = require(\"run-parallel\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings, callback) {\n    if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n        readdirWithFileTypes(directory, settings, callback);\n        return;\n    }\n    readdir(directory, settings, callback);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings, callback) {\n    settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {\n        if (readdirError !== null) {\n            callFailureCallback(callback, readdirError);\n            return;\n        }\n        const entries = dirents.map((dirent) => ({\n            dirent,\n            name: dirent.name,\n            path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n        }));\n        if (!settings.followSymbolicLinks) {\n            callSuccessCallback(callback, entries);\n            return;\n        }\n        const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));\n        rpl(tasks, (rplError, rplEntries) => {\n            if (rplError !== null) {\n                callFailureCallback(callback, rplError);\n                return;\n            }\n            callSuccessCallback(callback, rplEntries);\n        });\n    });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction makeRplTaskEntry(entry, settings) {\n    return (done) => {\n        if (!entry.dirent.isSymbolicLink()) {\n            done(null, entry);\n            return;\n        }\n        settings.fs.stat(entry.path, (statError, stats) => {\n            if (statError !== null) {\n                if (settings.throwErrorOnBrokenSymbolicLink) {\n                    done(statError);\n                    return;\n                }\n                done(null, entry);\n                return;\n            }\n            entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n            done(null, entry);\n        });\n    };\n}\nfunction readdir(directory, settings, callback) {\n    settings.fs.readdir(directory, (readdirError, names) => {\n        if (readdirError !== null) {\n            callFailureCallback(callback, readdirError);\n            return;\n        }\n        const tasks = names.map((name) => {\n            const path = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n            return (done) => {\n                fsStat.stat(path, settings.fsStatSettings, (error, stats) => {\n                    if (error !== null) {\n                        done(error);\n                        return;\n                    }\n                    const entry = {\n                        name,\n                        path,\n                        dirent: utils.fs.createDirentFromStats(name, stats)\n                    };\n                    if (settings.stats) {\n                        entry.stats = stats;\n                    }\n                    done(null, entry);\n                });\n            };\n        });\n        rpl(tasks, (rplError, entries) => {\n            if (rplError !== null) {\n                callFailureCallback(callback, rplError);\n                return;\n            }\n            callSuccessCallback(callback, entries);\n        });\n    });\n}\nexports.readdir = readdir;\nfunction callFailureCallback(callback, error) {\n    callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n    callback(null, result);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings) {\n    if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n        return readdirWithFileTypes(directory, settings);\n    }\n    return readdir(directory, settings);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings) {\n    const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });\n    return dirents.map((dirent) => {\n        const entry = {\n            dirent,\n            name: dirent.name,\n            path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n        };\n        if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {\n            try {\n                const stats = settings.fs.statSync(entry.path);\n                entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n            }\n            catch (error) {\n                if (settings.throwErrorOnBrokenSymbolicLink) {\n                    throw error;\n                }\n            }\n        }\n        return entry;\n    });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction readdir(directory, settings) {\n    const names = settings.fs.readdirSync(directory);\n    return names.map((name) => {\n        const entryPath = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n        const stats = fsStat.statSync(entryPath, settings.fsStatSettings);\n        const entry = {\n            name,\n            path: entryPath,\n            dirent: utils.fs.createDirentFromStats(name, stats)\n        };\n        if (settings.stats) {\n            entry.stats = stats;\n        }\n        return entry;\n    });\n}\nexports.readdir = readdir;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n    lstat: fs.lstat,\n    stat: fs.stat,\n    lstatSync: fs.lstatSync,\n    statSync: fs.statSync,\n    readdir: fs.readdir,\n    readdirSync: fs.readdirSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n    if (fsMethods === undefined) {\n        return exports.FILE_SYSTEM_ADAPTER;\n    }\n    return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);\n        this.fs = fs.createFileSystemAdapter(this._options.fs);\n        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n        this.stats = this._getValue(this._options.stats, false);\n        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n        this.fsStatSettings = new fsStat.Settings({\n            followSymbolicLink: this.followSymbolicLinks,\n            fs: this.fs,\n            throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink\n        });\n    }\n    _getValue(option, value) {\n        return option !== null && option !== void 0 ? option : value;\n    }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.scandirSync = exports.scandir = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction scandir(path, optionsOrSettingsOrCallback, callback) {\n    if (typeof optionsOrSettingsOrCallback === 'function') {\n        async.read(path, getSettings(), optionsOrSettingsOrCallback);\n        return;\n    }\n    async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.scandir = scandir;\nfunction scandirSync(path, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    return sync.read(path, settings);\n}\nexports.scandirSync = scandirSync;\nfunction getSettings(settingsOrOptions = {}) {\n    if (settingsOrOptions instanceof settings_1.default) {\n        return settingsOrOptions;\n    }\n    return new settings_1.default(settingsOrOptions);\n}\n","'use strict'\n\nfunction reusify (Constructor) {\n  var head = new Constructor()\n  var tail = head\n\n  function get () {\n    var current = head\n\n    if (current.next) {\n      head = current.next\n    } else {\n      head = new Constructor()\n      tail = head\n    }\n\n    current.next = null\n\n    return current\n  }\n\n  function release (obj) {\n    tail.next = obj\n    tail = obj\n  }\n\n  return {\n    get: get,\n    release: release\n  }\n}\n\nmodule.exports = reusify\n","'use strict'\n\n/* eslint-disable no-var */\n\nvar reusify = require('reusify')\n\nfunction fastqueue (context, worker, _concurrency) {\n  if (typeof context === 'function') {\n    _concurrency = worker\n    worker = context\n    context = null\n  }\n\n  if (!(_concurrency >= 1)) {\n    throw new Error('fastqueue concurrency must be equal to or greater than 1')\n  }\n\n  var cache = reusify(Task)\n  var queueHead = null\n  var queueTail = null\n  var _running = 0\n  var errorHandler = null\n\n  var self = {\n    push: push,\n    drain: noop,\n    saturated: noop,\n    pause: pause,\n    paused: false,\n\n    get concurrency () {\n      return _concurrency\n    },\n    set concurrency (value) {\n      if (!(value >= 1)) {\n        throw new Error('fastqueue concurrency must be equal to or greater than 1')\n      }\n      _concurrency = value\n\n      if (self.paused) return\n      for (; queueHead && _running < _concurrency;) {\n        _running++\n        release()\n      }\n    },\n\n    running: running,\n    resume: resume,\n    idle: idle,\n    length: length,\n    getQueue: getQueue,\n    unshift: unshift,\n    empty: noop,\n    kill: kill,\n    killAndDrain: killAndDrain,\n    error: error,\n    abort: abort\n  }\n\n  return self\n\n  function running () {\n    return _running\n  }\n\n  function pause () {\n    self.paused = true\n  }\n\n  function length () {\n    var current = queueHead\n    var counter = 0\n\n    while (current) {\n      current = current.next\n      counter++\n    }\n\n    return counter\n  }\n\n  function getQueue () {\n    var current = queueHead\n    var tasks = []\n\n    while (current) {\n      tasks.push(current.value)\n      current = current.next\n    }\n\n    return tasks\n  }\n\n  function resume () {\n    if (!self.paused) return\n    self.paused = false\n    if (queueHead === null) {\n      _running++\n      release()\n      return\n    }\n    for (; queueHead && _running < _concurrency;) {\n      _running++\n      release()\n    }\n  }\n\n  function idle () {\n    return _running === 0 && self.length() === 0\n  }\n\n  function push (value, done) {\n    var current = cache.get()\n\n    current.context = context\n    current.release = release\n    current.value = value\n    current.callback = done || noop\n    current.errorHandler = errorHandler\n\n    if (_running >= _concurrency || self.paused) {\n      if (queueTail) {\n        queueTail.next = current\n        queueTail = current\n      } else {\n        queueHead = current\n        queueTail = current\n        self.saturated()\n      }\n    } else {\n      _running++\n      worker.call(context, current.value, current.worked)\n    }\n  }\n\n  function unshift (value, done) {\n    var current = cache.get()\n\n    current.context = context\n    current.release = release\n    current.value = value\n    current.callback = done || noop\n    current.errorHandler = errorHandler\n\n    if (_running >= _concurrency || self.paused) {\n      if (queueHead) {\n        current.next = queueHead\n        queueHead = current\n      } else {\n        queueHead = current\n        queueTail = current\n        self.saturated()\n      }\n    } else {\n      _running++\n      worker.call(context, current.value, current.worked)\n    }\n  }\n\n  function release (holder) {\n    if (holder) {\n      cache.release(holder)\n    }\n    var next = queueHead\n    if (next && _running <= _concurrency) {\n      if (!self.paused) {\n        if (queueTail === queueHead) {\n          queueTail = null\n        }\n        queueHead = next.next\n        next.next = null\n        worker.call(context, next.value, next.worked)\n        if (queueTail === null) {\n          self.empty()\n        }\n      } else {\n        _running--\n      }\n    } else if (--_running === 0) {\n      self.drain()\n    }\n  }\n\n  function kill () {\n    queueHead = null\n    queueTail = null\n    self.drain = noop\n  }\n\n  function killAndDrain () {\n    queueHead = null\n    queueTail = null\n    self.drain()\n    self.drain = noop\n  }\n\n  function abort () {\n    var current = queueHead\n    queueHead = null\n    queueTail = null\n\n    while (current) {\n      var next = current.next\n      var callback = current.callback\n      var errorHandler = current.errorHandler\n      var val = current.value\n      var context = current.context\n\n      // Reset the task state\n      current.value = null\n      current.callback = noop\n      current.errorHandler = null\n\n      // Call error handler if present\n      if (errorHandler) {\n        errorHandler(new Error('abort'), val)\n      }\n\n      // Call callback with error\n      callback.call(context, new Error('abort'))\n\n      // Release the task back to the pool\n      current.release(current)\n\n      current = next\n    }\n\n    self.drain = noop\n  }\n\n  function error (handler) {\n    errorHandler = handler\n  }\n}\n\nfunction noop () {}\n\nfunction Task () {\n  this.value = null\n  this.callback = noop\n  this.next = null\n  this.release = noop\n  this.context = null\n  this.errorHandler = null\n\n  var self = this\n\n  this.worked = function worked (err, result) {\n    var callback = self.callback\n    var errorHandler = self.errorHandler\n    var val = self.value\n    self.value = null\n    self.callback = noop\n    if (self.errorHandler) {\n      errorHandler(err, val)\n    }\n    callback.call(self.context, err, result)\n    self.release(self)\n  }\n}\n\nfunction queueAsPromised (context, worker, _concurrency) {\n  if (typeof context === 'function') {\n    _concurrency = worker\n    worker = context\n    context = null\n  }\n\n  function asyncWrapper (arg, cb) {\n    worker.call(this, arg)\n      .then(function (res) {\n        cb(null, res)\n      }, cb)\n  }\n\n  var queue = fastqueue(context, asyncWrapper, _concurrency)\n\n  var pushCb = queue.push\n  var unshiftCb = queue.unshift\n\n  queue.push = push\n  queue.unshift = unshift\n  queue.drained = drained\n\n  return queue\n\n  function push (value) {\n    var p = new Promise(function (resolve, reject) {\n      pushCb(value, function (err, result) {\n        if (err) {\n          reject(err)\n          return\n        }\n        resolve(result)\n      })\n    })\n\n    // Let's fork the promise chain to\n    // make the error bubble up to the user but\n    // not lead to a unhandledRejection\n    p.catch(noop)\n\n    return p\n  }\n\n  function unshift (value) {\n    var p = new Promise(function (resolve, reject) {\n      unshiftCb(value, function (err, result) {\n        if (err) {\n          reject(err)\n          return\n        }\n        resolve(result)\n      })\n    })\n\n    // Let's fork the promise chain to\n    // make the error bubble up to the user but\n    // not lead to a unhandledRejection\n    p.catch(noop)\n\n    return p\n  }\n\n  function drained () {\n    var p = new Promise(function (resolve) {\n      process.nextTick(function () {\n        if (queue.idle()) {\n          resolve()\n        } else {\n          var previousDrain = queue.drain\n          queue.drain = function () {\n            if (typeof previousDrain === 'function') previousDrain()\n            resolve()\n            queue.drain = previousDrain\n          }\n        }\n      })\n    })\n\n    return p\n  }\n}\n\nmodule.exports = fastqueue\nmodule.exports.promise = queueAsPromised\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = exports.replacePathSegmentSeparator = exports.isAppliedFilter = exports.isFatalError = void 0;\nfunction isFatalError(settings, error) {\n    if (settings.errorFilter === null) {\n        return true;\n    }\n    return !settings.errorFilter(error);\n}\nexports.isFatalError = isFatalError;\nfunction isAppliedFilter(filter, value) {\n    return filter === null || filter(value);\n}\nexports.isAppliedFilter = isAppliedFilter;\nfunction replacePathSegmentSeparator(filepath, separator) {\n    return filepath.split(/[/\\\\]/).join(separator);\n}\nexports.replacePathSegmentSeparator = replacePathSegmentSeparator;\nfunction joinPathSegments(a, b, separator) {\n    if (a === '') {\n        return b;\n    }\n    /**\n     * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n     */\n    if (a.endsWith(separator)) {\n        return a + b;\n    }\n    return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst common = require(\"./common\");\nclass Reader {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);\n    }\n}\nexports.default = Reader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst events_1 = require(\"events\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst fastq = require(\"fastq\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass AsyncReader extends reader_1.default {\n    constructor(_root, _settings) {\n        super(_root, _settings);\n        this._settings = _settings;\n        this._scandir = fsScandir.scandir;\n        this._emitter = new events_1.EventEmitter();\n        this._queue = fastq(this._worker.bind(this), this._settings.concurrency);\n        this._isFatalError = false;\n        this._isDestroyed = false;\n        this._queue.drain = () => {\n            if (!this._isFatalError) {\n                this._emitter.emit('end');\n            }\n        };\n    }\n    read() {\n        this._isFatalError = false;\n        this._isDestroyed = false;\n        setImmediate(() => {\n            this._pushToQueue(this._root, this._settings.basePath);\n        });\n        return this._emitter;\n    }\n    get isDestroyed() {\n        return this._isDestroyed;\n    }\n    destroy() {\n        if (this._isDestroyed) {\n            throw new Error('The reader is already destroyed');\n        }\n        this._isDestroyed = true;\n        this._queue.killAndDrain();\n    }\n    onEntry(callback) {\n        this._emitter.on('entry', callback);\n    }\n    onError(callback) {\n        this._emitter.once('error', callback);\n    }\n    onEnd(callback) {\n        this._emitter.once('end', callback);\n    }\n    _pushToQueue(directory, base) {\n        const queueItem = { directory, base };\n        this._queue.push(queueItem, (error) => {\n            if (error !== null) {\n                this._handleError(error);\n            }\n        });\n    }\n    _worker(item, done) {\n        this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {\n            if (error !== null) {\n                done(error, undefined);\n                return;\n            }\n            for (const entry of entries) {\n                this._handleEntry(entry, item.base);\n            }\n            done(null, undefined);\n        });\n    }\n    _handleError(error) {\n        if (this._isDestroyed || !common.isFatalError(this._settings, error)) {\n            return;\n        }\n        this._isFatalError = true;\n        this._isDestroyed = true;\n        this._emitter.emit('error', error);\n    }\n    _handleEntry(entry, base) {\n        if (this._isDestroyed || this._isFatalError) {\n            return;\n        }\n        const fullpath = entry.path;\n        if (base !== undefined) {\n            entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n        }\n        if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n            this._emitEntry(entry);\n        }\n        if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n            this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n        }\n    }\n    _emitEntry(entry) {\n        this._emitter.emit('entry', entry);\n    }\n}\nexports.default = AsyncReader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nclass AsyncProvider {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._reader = new async_1.default(this._root, this._settings);\n        this._storage = [];\n    }\n    read(callback) {\n        this._reader.onError((error) => {\n            callFailureCallback(callback, error);\n        });\n        this._reader.onEntry((entry) => {\n            this._storage.push(entry);\n        });\n        this._reader.onEnd(() => {\n            callSuccessCallback(callback, this._storage);\n        });\n        this._reader.read();\n    }\n}\nexports.default = AsyncProvider;\nfunction callFailureCallback(callback, error) {\n    callback(error);\n}\nfunction callSuccessCallback(callback, entries) {\n    callback(null, entries);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst async_1 = require(\"../readers/async\");\nclass StreamProvider {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._reader = new async_1.default(this._root, this._settings);\n        this._stream = new stream_1.Readable({\n            objectMode: true,\n            read: () => { },\n            destroy: () => {\n                if (!this._reader.isDestroyed) {\n                    this._reader.destroy();\n                }\n            }\n        });\n    }\n    read() {\n        this._reader.onError((error) => {\n            this._stream.emit('error', error);\n        });\n        this._reader.onEntry((entry) => {\n            this._stream.push(entry);\n        });\n        this._reader.onEnd(() => {\n            this._stream.push(null);\n        });\n        this._reader.read();\n        return this._stream;\n    }\n}\nexports.default = StreamProvider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass SyncReader extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._scandir = fsScandir.scandirSync;\n        this._storage = [];\n        this._queue = new Set();\n    }\n    read() {\n        this._pushToQueue(this._root, this._settings.basePath);\n        this._handleQueue();\n        return this._storage;\n    }\n    _pushToQueue(directory, base) {\n        this._queue.add({ directory, base });\n    }\n    _handleQueue() {\n        for (const item of this._queue.values()) {\n            this._handleDirectory(item.directory, item.base);\n        }\n    }\n    _handleDirectory(directory, base) {\n        try {\n            const entries = this._scandir(directory, this._settings.fsScandirSettings);\n            for (const entry of entries) {\n                this._handleEntry(entry, base);\n            }\n        }\n        catch (error) {\n            this._handleError(error);\n        }\n    }\n    _handleError(error) {\n        if (!common.isFatalError(this._settings, error)) {\n            return;\n        }\n        throw error;\n    }\n    _handleEntry(entry, base) {\n        const fullpath = entry.path;\n        if (base !== undefined) {\n            entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n        }\n        if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n            this._pushToStorage(entry);\n        }\n        if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n            this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n        }\n    }\n    _pushToStorage(entry) {\n        this._storage.push(entry);\n    }\n}\nexports.default = SyncReader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nclass SyncProvider {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._reader = new sync_1.default(this._root, this._settings);\n    }\n    read() {\n        return this._reader.read();\n    }\n}\nexports.default = SyncProvider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.basePath = this._getValue(this._options.basePath, undefined);\n        this.concurrency = this._getValue(this._options.concurrency, Number.POSITIVE_INFINITY);\n        this.deepFilter = this._getValue(this._options.deepFilter, null);\n        this.entryFilter = this._getValue(this._options.entryFilter, null);\n        this.errorFilter = this._getValue(this._options.errorFilter, null);\n        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n        this.fsScandirSettings = new fsScandir.Settings({\n            followSymbolicLinks: this._options.followSymbolicLinks,\n            fs: this._options.fs,\n            pathSegmentSeparator: this._options.pathSegmentSeparator,\n            stats: this._options.stats,\n            throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink\n        });\n    }\n    _getValue(option, value) {\n        return option !== null && option !== void 0 ? option : value;\n    }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.walkStream = exports.walkSync = exports.walk = void 0;\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction walk(directory, optionsOrSettingsOrCallback, callback) {\n    if (typeof optionsOrSettingsOrCallback === 'function') {\n        new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);\n        return;\n    }\n    new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);\n}\nexports.walk = walk;\nfunction walkSync(directory, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    const provider = new sync_1.default(directory, settings);\n    return provider.read();\n}\nexports.walkSync = walkSync;\nfunction walkStream(directory, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    const provider = new stream_1.default(directory, settings);\n    return provider.read();\n}\nexports.walkStream = walkStream;\nfunction getSettings(settingsOrOptions = {}) {\n    if (settingsOrOptions instanceof settings_1.default) {\n        return settingsOrOptions;\n    }\n    return new settings_1.default(settingsOrOptions);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst utils = require(\"../utils\");\nclass Reader {\n    constructor(_settings) {\n        this._settings = _settings;\n        this._fsStatSettings = new fsStat.Settings({\n            followSymbolicLink: this._settings.followSymbolicLinks,\n            fs: this._settings.fs,\n            throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks\n        });\n    }\n    _getFullEntryPath(filepath) {\n        return path.resolve(this._settings.cwd, filepath);\n    }\n    _makeEntry(stats, pattern) {\n        const entry = {\n            name: pattern,\n            path: pattern,\n            dirent: utils.fs.createDirentFromStats(pattern, stats)\n        };\n        if (this._settings.stats) {\n            entry.stats = stats;\n        }\n        return entry;\n    }\n    _isFatalError(error) {\n        return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;\n    }\n}\nexports.default = Reader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderStream extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._walkStream = fsWalk.walkStream;\n        this._stat = fsStat.stat;\n    }\n    dynamic(root, options) {\n        return this._walkStream(root, options);\n    }\n    static(patterns, options) {\n        const filepaths = patterns.map(this._getFullEntryPath, this);\n        const stream = new stream_1.PassThrough({ objectMode: true });\n        stream._write = (index, _enc, done) => {\n            return this._getEntry(filepaths[index], patterns[index], options)\n                .then((entry) => {\n                if (entry !== null && options.entryFilter(entry)) {\n                    stream.push(entry);\n                }\n                if (index === filepaths.length - 1) {\n                    stream.end();\n                }\n                done();\n            })\n                .catch(done);\n        };\n        for (let i = 0; i < filepaths.length; i++) {\n            stream.write(i);\n        }\n        return stream;\n    }\n    _getEntry(filepath, pattern, options) {\n        return this._getStat(filepath)\n            .then((stats) => this._makeEntry(stats, pattern))\n            .catch((error) => {\n            if (options.errorFilter(error)) {\n                return null;\n            }\n            throw error;\n        });\n    }\n    _getStat(filepath) {\n        return new Promise((resolve, reject) => {\n            this._stat(filepath, this._fsStatSettings, (error, stats) => {\n                return error === null ? resolve(stats) : reject(error);\n            });\n        });\n    }\n}\nexports.default = ReaderStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nconst stream_1 = require(\"./stream\");\nclass ReaderAsync extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._walkAsync = fsWalk.walk;\n        this._readerStream = new stream_1.default(this._settings);\n    }\n    dynamic(root, options) {\n        return new Promise((resolve, reject) => {\n            this._walkAsync(root, options, (error, entries) => {\n                if (error === null) {\n                    resolve(entries);\n                }\n                else {\n                    reject(error);\n                }\n            });\n        });\n    }\n    async static(patterns, options) {\n        const entries = [];\n        const stream = this._readerStream.static(patterns, options);\n        // After #235, replace it with an asynchronous iterator.\n        return new Promise((resolve, reject) => {\n            stream.once('error', reject);\n            stream.on('data', (entry) => entries.push(entry));\n            stream.once('end', () => resolve(entries));\n        });\n    }\n}\nexports.default = ReaderAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass Matcher {\n    constructor(_patterns, _settings, _micromatchOptions) {\n        this._patterns = _patterns;\n        this._settings = _settings;\n        this._micromatchOptions = _micromatchOptions;\n        this._storage = [];\n        this._fillStorage();\n    }\n    _fillStorage() {\n        for (const pattern of this._patterns) {\n            const segments = this._getPatternSegments(pattern);\n            const sections = this._splitSegmentsIntoSections(segments);\n            this._storage.push({\n                complete: sections.length <= 1,\n                pattern,\n                segments,\n                sections\n            });\n        }\n    }\n    _getPatternSegments(pattern) {\n        const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions);\n        return parts.map((part) => {\n            const dynamic = utils.pattern.isDynamicPattern(part, this._settings);\n            if (!dynamic) {\n                return {\n                    dynamic: false,\n                    pattern: part\n                };\n            }\n            return {\n                dynamic: true,\n                pattern: part,\n                patternRe: utils.pattern.makeRe(part, this._micromatchOptions)\n            };\n        });\n    }\n    _splitSegmentsIntoSections(segments) {\n        return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern));\n    }\n}\nexports.default = Matcher;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst matcher_1 = require(\"./matcher\");\nclass PartialMatcher extends matcher_1.default {\n    match(filepath) {\n        const parts = filepath.split('/');\n        const levels = parts.length;\n        const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);\n        for (const pattern of patterns) {\n            const section = pattern.sections[0];\n            /**\n             * In this case, the pattern has a globstar and we must read all directories unconditionally,\n             * but only if the level has reached the end of the first group.\n             *\n             * fixtures/{a,b}/**\n             *  ^ true/false  ^ always true\n            */\n            if (!pattern.complete && levels > section.length) {\n                return true;\n            }\n            const match = parts.every((part, index) => {\n                const segment = pattern.segments[index];\n                if (segment.dynamic && segment.patternRe.test(part)) {\n                    return true;\n                }\n                if (!segment.dynamic && segment.pattern === part) {\n                    return true;\n                }\n                return false;\n            });\n            if (match) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\nexports.default = PartialMatcher;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nconst partial_1 = require(\"../matchers/partial\");\nclass DeepFilter {\n    constructor(_settings, _micromatchOptions) {\n        this._settings = _settings;\n        this._micromatchOptions = _micromatchOptions;\n    }\n    getFilter(basePath, positive, negative) {\n        const matcher = this._getMatcher(positive);\n        const negativeRe = this._getNegativePatternsRe(negative);\n        return (entry) => this._filter(basePath, entry, matcher, negativeRe);\n    }\n    _getMatcher(patterns) {\n        return new partial_1.default(patterns, this._settings, this._micromatchOptions);\n    }\n    _getNegativePatternsRe(patterns) {\n        const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);\n        return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);\n    }\n    _filter(basePath, entry, matcher, negativeRe) {\n        if (this._isSkippedByDeep(basePath, entry.path)) {\n            return false;\n        }\n        if (this._isSkippedSymbolicLink(entry)) {\n            return false;\n        }\n        const filepath = utils.path.removeLeadingDotSegment(entry.path);\n        if (this._isSkippedByPositivePatterns(filepath, matcher)) {\n            return false;\n        }\n        return this._isSkippedByNegativePatterns(filepath, negativeRe);\n    }\n    _isSkippedByDeep(basePath, entryPath) {\n        /**\n         * Avoid unnecessary depth calculations when it doesn't matter.\n         */\n        if (this._settings.deep === Infinity) {\n            return false;\n        }\n        return this._getEntryLevel(basePath, entryPath) >= this._settings.deep;\n    }\n    _getEntryLevel(basePath, entryPath) {\n        const entryPathDepth = entryPath.split('/').length;\n        if (basePath === '') {\n            return entryPathDepth;\n        }\n        const basePathDepth = basePath.split('/').length;\n        return entryPathDepth - basePathDepth;\n    }\n    _isSkippedSymbolicLink(entry) {\n        return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();\n    }\n    _isSkippedByPositivePatterns(entryPath, matcher) {\n        return !this._settings.baseNameMatch && !matcher.match(entryPath);\n    }\n    _isSkippedByNegativePatterns(entryPath, patternsRe) {\n        return !utils.pattern.matchAny(entryPath, patternsRe);\n    }\n}\nexports.default = DeepFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryFilter {\n    constructor(_settings, _micromatchOptions) {\n        this._settings = _settings;\n        this._micromatchOptions = _micromatchOptions;\n        this.index = new Map();\n    }\n    getFilter(positive, negative) {\n        const [absoluteNegative, relativeNegative] = utils.pattern.partitionAbsoluteAndRelative(negative);\n        const patterns = {\n            positive: {\n                all: utils.pattern.convertPatternsToRe(positive, this._micromatchOptions)\n            },\n            negative: {\n                absolute: utils.pattern.convertPatternsToRe(absoluteNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true })),\n                relative: utils.pattern.convertPatternsToRe(relativeNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true }))\n            }\n        };\n        return (entry) => this._filter(entry, patterns);\n    }\n    _filter(entry, patterns) {\n        const filepath = utils.path.removeLeadingDotSegment(entry.path);\n        if (this._settings.unique && this._isDuplicateEntry(filepath)) {\n            return false;\n        }\n        if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {\n            return false;\n        }\n        const isMatched = this._isMatchToPatternsSet(filepath, patterns, entry.dirent.isDirectory());\n        if (this._settings.unique && isMatched) {\n            this._createIndexRecord(filepath);\n        }\n        return isMatched;\n    }\n    _isDuplicateEntry(filepath) {\n        return this.index.has(filepath);\n    }\n    _createIndexRecord(filepath) {\n        this.index.set(filepath, undefined);\n    }\n    _onlyFileFilter(entry) {\n        return this._settings.onlyFiles && !entry.dirent.isFile();\n    }\n    _onlyDirectoryFilter(entry) {\n        return this._settings.onlyDirectories && !entry.dirent.isDirectory();\n    }\n    _isMatchToPatternsSet(filepath, patterns, isDirectory) {\n        const isMatched = this._isMatchToPatterns(filepath, patterns.positive.all, isDirectory);\n        if (!isMatched) {\n            return false;\n        }\n        const isMatchedByRelativeNegative = this._isMatchToPatterns(filepath, patterns.negative.relative, isDirectory);\n        if (isMatchedByRelativeNegative) {\n            return false;\n        }\n        const isMatchedByAbsoluteNegative = this._isMatchToAbsoluteNegative(filepath, patterns.negative.absolute, isDirectory);\n        if (isMatchedByAbsoluteNegative) {\n            return false;\n        }\n        return true;\n    }\n    _isMatchToAbsoluteNegative(filepath, patternsRe, isDirectory) {\n        if (patternsRe.length === 0) {\n            return false;\n        }\n        const fullpath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n        return this._isMatchToPatterns(fullpath, patternsRe, isDirectory);\n    }\n    _isMatchToPatterns(filepath, patternsRe, isDirectory) {\n        if (patternsRe.length === 0) {\n            return false;\n        }\n        // Trying to match files and directories by patterns.\n        const isMatched = utils.pattern.matchAny(filepath, patternsRe);\n        // A pattern with a trailling slash can be used for directory matching.\n        // To apply such pattern, we need to add a tralling slash to the path.\n        if (!isMatched && isDirectory) {\n            return utils.pattern.matchAny(filepath + '/', patternsRe);\n        }\n        return isMatched;\n    }\n}\nexports.default = EntryFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass ErrorFilter {\n    constructor(_settings) {\n        this._settings = _settings;\n    }\n    getFilter() {\n        return (error) => this._isNonFatalError(error);\n    }\n    _isNonFatalError(error) {\n        return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;\n    }\n}\nexports.default = ErrorFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryTransformer {\n    constructor(_settings) {\n        this._settings = _settings;\n    }\n    getTransformer() {\n        return (entry) => this._transform(entry);\n    }\n    _transform(entry) {\n        let filepath = entry.path;\n        if (this._settings.absolute) {\n            filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n            filepath = utils.path.unixify(filepath);\n        }\n        if (this._settings.markDirectories && entry.dirent.isDirectory()) {\n            filepath += '/';\n        }\n        if (!this._settings.objectMode) {\n            return filepath;\n        }\n        return Object.assign(Object.assign({}, entry), { path: filepath });\n    }\n}\nexports.default = EntryTransformer;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst deep_1 = require(\"./filters/deep\");\nconst entry_1 = require(\"./filters/entry\");\nconst error_1 = require(\"./filters/error\");\nconst entry_2 = require(\"./transformers/entry\");\nclass Provider {\n    constructor(_settings) {\n        this._settings = _settings;\n        this.errorFilter = new error_1.default(this._settings);\n        this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());\n        this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());\n        this.entryTransformer = new entry_2.default(this._settings);\n    }\n    _getRootDirectory(task) {\n        return path.resolve(this._settings.cwd, task.base);\n    }\n    _getReaderOptions(task) {\n        const basePath = task.base === '.' ? '' : task.base;\n        return {\n            basePath,\n            pathSegmentSeparator: '/',\n            concurrency: this._settings.concurrency,\n            deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),\n            entryFilter: this.entryFilter.getFilter(task.positive, task.negative),\n            errorFilter: this.errorFilter.getFilter(),\n            followSymbolicLinks: this._settings.followSymbolicLinks,\n            fs: this._settings.fs,\n            stats: this._settings.stats,\n            throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,\n            transform: this.entryTransformer.getTransformer()\n        };\n    }\n    _getMicromatchOptions() {\n        return {\n            dot: this._settings.dot,\n            matchBase: this._settings.baseNameMatch,\n            nobrace: !this._settings.braceExpansion,\n            nocase: !this._settings.caseSensitiveMatch,\n            noext: !this._settings.extglob,\n            noglobstar: !this._settings.globstar,\n            posix: true,\n            strictSlashes: false\n        };\n    }\n}\nexports.default = Provider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nconst provider_1 = require(\"./provider\");\nclass ProviderAsync extends provider_1.default {\n    constructor() {\n        super(...arguments);\n        this._reader = new async_1.default(this._settings);\n    }\n    async read(task) {\n        const root = this._getRootDirectory(task);\n        const options = this._getReaderOptions(task);\n        const entries = await this.api(root, task, options);\n        return entries.map((entry) => options.transform(entry));\n    }\n    api(root, task, options) {\n        if (task.dynamic) {\n            return this._reader.dynamic(root, options);\n        }\n        return this._reader.static(task.patterns, options);\n    }\n}\nexports.default = ProviderAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst stream_2 = require(\"../readers/stream\");\nconst provider_1 = require(\"./provider\");\nclass ProviderStream extends provider_1.default {\n    constructor() {\n        super(...arguments);\n        this._reader = new stream_2.default(this._settings);\n    }\n    read(task) {\n        const root = this._getRootDirectory(task);\n        const options = this._getReaderOptions(task);\n        const source = this.api(root, task, options);\n        const destination = new stream_1.Readable({ objectMode: true, read: () => { } });\n        source\n            .once('error', (error) => destination.emit('error', error))\n            .on('data', (entry) => destination.emit('data', options.transform(entry)))\n            .once('end', () => destination.emit('end'));\n        destination\n            .once('close', () => source.destroy());\n        return destination;\n    }\n    api(root, task, options) {\n        if (task.dynamic) {\n            return this._reader.dynamic(root, options);\n        }\n        return this._reader.static(task.patterns, options);\n    }\n}\nexports.default = ProviderStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderSync extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._walkSync = fsWalk.walkSync;\n        this._statSync = fsStat.statSync;\n    }\n    dynamic(root, options) {\n        return this._walkSync(root, options);\n    }\n    static(patterns, options) {\n        const entries = [];\n        for (const pattern of patterns) {\n            const filepath = this._getFullEntryPath(pattern);\n            const entry = this._getEntry(filepath, pattern, options);\n            if (entry === null || !options.entryFilter(entry)) {\n                continue;\n            }\n            entries.push(entry);\n        }\n        return entries;\n    }\n    _getEntry(filepath, pattern, options) {\n        try {\n            const stats = this._getStat(filepath);\n            return this._makeEntry(stats, pattern);\n        }\n        catch (error) {\n            if (options.errorFilter(error)) {\n                return null;\n            }\n            throw error;\n        }\n    }\n    _getStat(filepath) {\n        return this._statSync(filepath, this._fsStatSettings);\n    }\n}\nexports.default = ReaderSync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nconst provider_1 = require(\"./provider\");\nclass ProviderSync extends provider_1.default {\n    constructor() {\n        super(...arguments);\n        this._reader = new sync_1.default(this._settings);\n    }\n    read(task) {\n        const root = this._getRootDirectory(task);\n        const options = this._getReaderOptions(task);\n        const entries = this.api(root, task, options);\n        return entries.map(options.transform);\n    }\n    api(root, task, options) {\n        if (task.dynamic) {\n            return this._reader.dynamic(root, options);\n        }\n        return this._reader.static(task.patterns, options);\n    }\n}\nexports.default = ProviderSync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nconst os = require(\"os\");\n/**\n * The `os.cpus` method can return zero. We expect the number of cores to be greater than zero.\n * https://github.com/nodejs/node/blob/7faeddf23a98c53896f8b574a6e66589e8fb1eb8/lib/os.js#L106-L107\n */\nconst CPU_COUNT = Math.max(os.cpus().length, 1);\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = {\n    lstat: fs.lstat,\n    lstatSync: fs.lstatSync,\n    stat: fs.stat,\n    statSync: fs.statSync,\n    readdir: fs.readdir,\n    readdirSync: fs.readdirSync\n};\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.absolute = this._getValue(this._options.absolute, false);\n        this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);\n        this.braceExpansion = this._getValue(this._options.braceExpansion, true);\n        this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);\n        this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);\n        this.cwd = this._getValue(this._options.cwd, process.cwd());\n        this.deep = this._getValue(this._options.deep, Infinity);\n        this.dot = this._getValue(this._options.dot, false);\n        this.extglob = this._getValue(this._options.extglob, true);\n        this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);\n        this.fs = this._getFileSystemMethods(this._options.fs);\n        this.globstar = this._getValue(this._options.globstar, true);\n        this.ignore = this._getValue(this._options.ignore, []);\n        this.markDirectories = this._getValue(this._options.markDirectories, false);\n        this.objectMode = this._getValue(this._options.objectMode, false);\n        this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);\n        this.onlyFiles = this._getValue(this._options.onlyFiles, true);\n        this.stats = this._getValue(this._options.stats, false);\n        this.suppressErrors = this._getValue(this._options.suppressErrors, false);\n        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);\n        this.unique = this._getValue(this._options.unique, true);\n        if (this.onlyDirectories) {\n            this.onlyFiles = false;\n        }\n        if (this.stats) {\n            this.objectMode = true;\n        }\n        // Remove the cast to the array in the next major (#404).\n        this.ignore = [].concat(this.ignore);\n    }\n    _getValue(option, value) {\n        return option === undefined ? value : option;\n    }\n    _getFileSystemMethods(methods = {}) {\n        return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);\n    }\n}\nexports.default = Settings;\n","\"use strict\";\nconst taskManager = require(\"./managers/tasks\");\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nconst utils = require(\"./utils\");\nasync function FastGlob(source, options) {\n    assertPatternsInput(source);\n    const works = getWorks(source, async_1.default, options);\n    const result = await Promise.all(works);\n    return utils.array.flatten(result);\n}\n// https://github.com/typescript-eslint/typescript-eslint/issues/60\n// eslint-disable-next-line no-redeclare\n(function (FastGlob) {\n    FastGlob.glob = FastGlob;\n    FastGlob.globSync = sync;\n    FastGlob.globStream = stream;\n    FastGlob.async = FastGlob;\n    function sync(source, options) {\n        assertPatternsInput(source);\n        const works = getWorks(source, sync_1.default, options);\n        return utils.array.flatten(works);\n    }\n    FastGlob.sync = sync;\n    function stream(source, options) {\n        assertPatternsInput(source);\n        const works = getWorks(source, stream_1.default, options);\n        /**\n         * The stream returned by the provider cannot work with an asynchronous iterator.\n         * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.\n         * This affects performance (+25%). I don't see best solution right now.\n         */\n        return utils.stream.merge(works);\n    }\n    FastGlob.stream = stream;\n    function generateTasks(source, options) {\n        assertPatternsInput(source);\n        const patterns = [].concat(source);\n        const settings = new settings_1.default(options);\n        return taskManager.generate(patterns, settings);\n    }\n    FastGlob.generateTasks = generateTasks;\n    function isDynamicPattern(source, options) {\n        assertPatternsInput(source);\n        const settings = new settings_1.default(options);\n        return utils.pattern.isDynamicPattern(source, settings);\n    }\n    FastGlob.isDynamicPattern = isDynamicPattern;\n    function escapePath(source) {\n        assertPatternsInput(source);\n        return utils.path.escape(source);\n    }\n    FastGlob.escapePath = escapePath;\n    function convertPathToPattern(source) {\n        assertPatternsInput(source);\n        return utils.path.convertPathToPattern(source);\n    }\n    FastGlob.convertPathToPattern = convertPathToPattern;\n    let posix;\n    (function (posix) {\n        function escapePath(source) {\n            assertPatternsInput(source);\n            return utils.path.escapePosixPath(source);\n        }\n        posix.escapePath = escapePath;\n        function convertPathToPattern(source) {\n            assertPatternsInput(source);\n            return utils.path.convertPosixPathToPattern(source);\n        }\n        posix.convertPathToPattern = convertPathToPattern;\n    })(posix = FastGlob.posix || (FastGlob.posix = {}));\n    let win32;\n    (function (win32) {\n        function escapePath(source) {\n            assertPatternsInput(source);\n            return utils.path.escapeWindowsPath(source);\n        }\n        win32.escapePath = escapePath;\n        function convertPathToPattern(source) {\n            assertPatternsInput(source);\n            return utils.path.convertWindowsPathToPattern(source);\n        }\n        win32.convertPathToPattern = convertPathToPattern;\n    })(win32 = FastGlob.win32 || (FastGlob.win32 = {}));\n})(FastGlob || (FastGlob = {}));\nfunction getWorks(source, _Provider, options) {\n    const patterns = [].concat(source);\n    const settings = new settings_1.default(options);\n    const tasks = taskManager.generate(patterns, settings);\n    const provider = new _Provider(settings);\n    return tasks.map(provider.read, provider);\n}\nfunction assertPatternsInput(input) {\n    const source = [].concat(input);\n    const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));\n    if (!isValidSource) {\n        throw new TypeError('Patterns must be a string (non empty) or an array of strings');\n    }\n}\nmodule.exports = FastGlob;\n","'use strict'\n\nexports.parse = function (source, transform) {\n  return new ArrayParser(source, transform).parse()\n}\n\nclass ArrayParser {\n  constructor (source, transform) {\n    this.source = source\n    this.transform = transform || identity\n    this.position = 0\n    this.entries = []\n    this.recorded = []\n    this.dimension = 0\n  }\n\n  isEof () {\n    return this.position >= this.source.length\n  }\n\n  nextCharacter () {\n    var character = this.source[this.position++]\n    if (character === '\\\\') {\n      return {\n        value: this.source[this.position++],\n        escaped: true\n      }\n    }\n    return {\n      value: character,\n      escaped: false\n    }\n  }\n\n  record (character) {\n    this.recorded.push(character)\n  }\n\n  newEntry (includeEmpty) {\n    var entry\n    if (this.recorded.length > 0 || includeEmpty) {\n      entry = this.recorded.join('')\n      if (entry === 'NULL' && !includeEmpty) {\n        entry = null\n      }\n      if (entry !== null) entry = this.transform(entry)\n      this.entries.push(entry)\n      this.recorded = []\n    }\n  }\n\n  consumeDimensions () {\n    if (this.source[0] === '[') {\n      while (!this.isEof()) {\n        var char = this.nextCharacter()\n        if (char.value === '=') break\n      }\n    }\n  }\n\n  parse (nested) {\n    var character, parser, quote\n    this.consumeDimensions()\n    while (!this.isEof()) {\n      character = this.nextCharacter()\n      if (character.value === '{' && !quote) {\n        this.dimension++\n        if (this.dimension > 1) {\n          parser = new ArrayParser(this.source.substr(this.position - 1), this.transform)\n          this.entries.push(parser.parse(true))\n          this.position += parser.position - 2\n        }\n      } else if (character.value === '}' && !quote) {\n        this.dimension--\n        if (!this.dimension) {\n          this.newEntry()\n          if (nested) return this.entries\n        }\n      } else if (character.value === '\"' && !character.escaped) {\n        if (quote) this.newEntry(true)\n        quote = !quote\n      } else if (character.value === ',' && !quote) {\n        this.newEntry()\n      } else {\n        this.record(character.value)\n      }\n    }\n    if (this.dimension !== 0) {\n      throw new Error('array dimension not balanced')\n    }\n    return this.entries\n  }\n}\n\nfunction identity (value) {\n  return value\n}\n","var array = require('postgres-array');\n\nmodule.exports = {\n  create: function (source, transform) {\n    return {\n      parse: function() {\n        return array.parse(source, transform);\n      }\n    };\n  }\n};\n","'use strict'\n\nvar DATE_TIME = /(\\d{1,})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})(\\.\\d{1,})?.*?( BC)?$/\nvar DATE = /^(\\d{1,})-(\\d{2})-(\\d{2})( BC)?$/\nvar TIME_ZONE = /([Z+-])(\\d{2})?:?(\\d{2})?:?(\\d{2})?/\nvar INFINITY = /^-?infinity$/\n\nmodule.exports = function parseDate (isoDate) {\n  if (INFINITY.test(isoDate)) {\n    // Capitalize to Infinity before passing to Number\n    return Number(isoDate.replace('i', 'I'))\n  }\n  var matches = DATE_TIME.exec(isoDate)\n\n  if (!matches) {\n    // Force YYYY-MM-DD dates to be parsed as local time\n    return getDate(isoDate) || null\n  }\n\n  var isBC = !!matches[8]\n  var year = parseInt(matches[1], 10)\n  if (isBC) {\n    year = bcYearToNegativeYear(year)\n  }\n\n  var month = parseInt(matches[2], 10) - 1\n  var day = matches[3]\n  var hour = parseInt(matches[4], 10)\n  var minute = parseInt(matches[5], 10)\n  var second = parseInt(matches[6], 10)\n\n  var ms = matches[7]\n  ms = ms ? 1000 * parseFloat(ms) : 0\n\n  var date\n  var offset = timeZoneOffset(isoDate)\n  if (offset != null) {\n    date = new Date(Date.UTC(year, month, day, hour, minute, second, ms))\n\n    // Account for years from 0 to 99 being interpreted as 1900-1999\n    // by Date.UTC / the multi-argument form of the Date constructor\n    if (is0To99(year)) {\n      date.setUTCFullYear(year)\n    }\n\n    if (offset !== 0) {\n      date.setTime(date.getTime() - offset)\n    }\n  } else {\n    date = new Date(year, month, day, hour, minute, second, ms)\n\n    if (is0To99(year)) {\n      date.setFullYear(year)\n    }\n  }\n\n  return date\n}\n\nfunction getDate (isoDate) {\n  var matches = DATE.exec(isoDate)\n  if (!matches) {\n    return\n  }\n\n  var year = parseInt(matches[1], 10)\n  var isBC = !!matches[4]\n  if (isBC) {\n    year = bcYearToNegativeYear(year)\n  }\n\n  var month = parseInt(matches[2], 10) - 1\n  var day = matches[3]\n  // YYYY-MM-DD will be parsed as local time\n  var date = new Date(year, month, day)\n\n  if (is0To99(year)) {\n    date.setFullYear(year)\n  }\n\n  return date\n}\n\n// match timezones:\n// Z (UTC)\n// -05\n// +06:30\nfunction timeZoneOffset (isoDate) {\n  if (isoDate.endsWith('+00')) {\n    return 0\n  }\n\n  var zone = TIME_ZONE.exec(isoDate.split(' ')[1])\n  if (!zone) return\n  var type = zone[1]\n\n  if (type === 'Z') {\n    return 0\n  }\n  var sign = type === '-' ? -1 : 1\n  var offset = parseInt(zone[2], 10) * 3600 +\n    parseInt(zone[3] || 0, 10) * 60 +\n    parseInt(zone[4] || 0, 10)\n\n  return offset * sign * 1000\n}\n\nfunction bcYearToNegativeYear (year) {\n  // Account for numerical difference between representations of BC years\n  // See: https://github.com/bendrucker/postgres-date/issues/5\n  return -(year - 1)\n}\n\nfunction is0To99 (num) {\n  return num >= 0 && num < 100\n}\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend(target) {\n    for (var i = 1; i < arguments.length; i++) {\n        var source = arguments[i]\n\n        for (var key in source) {\n            if (hasOwnProperty.call(source, key)) {\n                target[key] = source[key]\n            }\n        }\n    }\n\n    return target\n}\n","'use strict'\n\nvar extend = require('xtend/mutable')\n\nmodule.exports = PostgresInterval\n\nfunction PostgresInterval (raw) {\n  if (!(this instanceof PostgresInterval)) {\n    return new PostgresInterval(raw)\n  }\n  extend(this, parse(raw))\n}\nvar properties = ['seconds', 'minutes', 'hours', 'days', 'months', 'years']\nPostgresInterval.prototype.toPostgres = function () {\n  var filtered = properties.filter(this.hasOwnProperty, this)\n\n  // In addition to `properties`, we need to account for fractions of seconds.\n  if (this.milliseconds && filtered.indexOf('seconds') < 0) {\n    filtered.push('seconds')\n  }\n\n  if (filtered.length === 0) return '0'\n  return filtered\n    .map(function (property) {\n      var value = this[property] || 0\n\n      // Account for fractional part of seconds,\n      // remove trailing zeroes.\n      if (property === 'seconds' && this.milliseconds) {\n        value = (value + this.milliseconds / 1000).toFixed(6).replace(/\\.?0+$/, '')\n      }\n\n      return value + ' ' + property\n    }, this)\n    .join(' ')\n}\n\nvar propertiesISOEquivalent = {\n  years: 'Y',\n  months: 'M',\n  days: 'D',\n  hours: 'H',\n  minutes: 'M',\n  seconds: 'S'\n}\nvar dateProperties = ['years', 'months', 'days']\nvar timeProperties = ['hours', 'minutes', 'seconds']\n// according to ISO 8601\nPostgresInterval.prototype.toISOString = PostgresInterval.prototype.toISO = function () {\n  var datePart = dateProperties\n    .map(buildProperty, this)\n    .join('')\n\n  var timePart = timeProperties\n    .map(buildProperty, this)\n    .join('')\n\n  return 'P' + datePart + 'T' + timePart\n\n  function buildProperty (property) {\n    var value = this[property] || 0\n\n    // Account for fractional part of seconds,\n    // remove trailing zeroes.\n    if (property === 'seconds' && this.milliseconds) {\n      value = (value + this.milliseconds / 1000).toFixed(6).replace(/0+$/, '')\n    }\n\n    return value + propertiesISOEquivalent[property]\n  }\n}\n\nvar NUMBER = '([+-]?\\\\d+)'\nvar YEAR = NUMBER + '\\\\s+years?'\nvar MONTH = NUMBER + '\\\\s+mons?'\nvar DAY = NUMBER + '\\\\s+days?'\nvar TIME = '([+-])?([\\\\d]*):(\\\\d\\\\d):(\\\\d\\\\d)\\\\.?(\\\\d{1,6})?'\nvar INTERVAL = new RegExp([YEAR, MONTH, DAY, TIME].map(function (regexString) {\n  return '(' + regexString + ')?'\n})\n  .join('\\\\s*'))\n\n// Positions of values in regex match\nvar positions = {\n  years: 2,\n  months: 4,\n  days: 6,\n  hours: 9,\n  minutes: 10,\n  seconds: 11,\n  milliseconds: 12\n}\n// We can use negative time\nvar negatives = ['hours', 'minutes', 'seconds', 'milliseconds']\n\nfunction parseMilliseconds (fraction) {\n  // add omitted zeroes\n  var microseconds = fraction + '000000'.slice(fraction.length)\n  return parseInt(microseconds, 10) / 1000\n}\n\nfunction parse (interval) {\n  if (!interval) return {}\n  var matches = INTERVAL.exec(interval)\n  var isNegative = matches[8] === '-'\n  return Object.keys(positions)\n    .reduce(function (parsed, property) {\n      var position = positions[property]\n      var value = matches[position]\n      // no empty string\n      if (!value) return parsed\n      // milliseconds are actually microseconds (up to 6 digits)\n      // with omitted trailing zeroes.\n      value = property === 'milliseconds'\n        ? parseMilliseconds(value)\n        : parseInt(value, 10)\n      // no zeros\n      if (!value) return parsed\n      if (isNegative && ~negatives.indexOf(property)) {\n        value *= -1\n      }\n      parsed[property] = value\n      return parsed\n    }, {})\n}\n","'use strict'\n\nvar bufferFrom = Buffer.from || Buffer\n\nmodule.exports = function parseBytea (input) {\n  if (/^\\\\x/.test(input)) {\n    // new 'hex' style response (pg >9.0)\n    return bufferFrom(input.substr(2), 'hex')\n  }\n  var output = ''\n  var i = 0\n  while (i < input.length) {\n    if (input[i] !== '\\\\') {\n      output += input[i]\n      ++i\n    } else {\n      if (/[0-7]{3}/.test(input.substr(i + 1, 3))) {\n        output += String.fromCharCode(parseInt(input.substr(i + 1, 3), 8))\n        i += 4\n      } else {\n        var backslashes = 1\n        while (i + backslashes < input.length && input[i + backslashes] === '\\\\') {\n          backslashes++\n        }\n        for (var k = 0; k < Math.floor(backslashes / 2); ++k) {\n          output += '\\\\'\n        }\n        i += Math.floor(backslashes / 2) * 2\n      }\n    }\n  }\n  return bufferFrom(output, 'binary')\n}\n","var array = require('postgres-array')\nvar arrayParser = require('./arrayParser');\nvar parseDate = require('postgres-date');\nvar parseInterval = require('postgres-interval');\nvar parseByteA = require('postgres-bytea');\n\nfunction allowNull (fn) {\n  return function nullAllowed (value) {\n    if (value === null) return value\n    return fn(value)\n  }\n}\n\nfunction parseBool (value) {\n  if (value === null) return value\n  return value === 'TRUE' ||\n    value === 't' ||\n    value === 'true' ||\n    value === 'y' ||\n    value === 'yes' ||\n    value === 'on' ||\n    value === '1';\n}\n\nfunction parseBoolArray (value) {\n  if (!value) return null\n  return array.parse(value, parseBool)\n}\n\nfunction parseBaseTenInt (string) {\n  return parseInt(string, 10)\n}\n\nfunction parseIntegerArray (value) {\n  if (!value) return null\n  return array.parse(value, allowNull(parseBaseTenInt))\n}\n\nfunction parseBigIntegerArray (value) {\n  if (!value) return null\n  return array.parse(value, allowNull(function (entry) {\n    return parseBigInteger(entry).trim()\n  }))\n}\n\nvar parsePointArray = function(value) {\n  if(!value) { return null; }\n  var p = arrayParser.create(value, function(entry) {\n    if(entry !== null) {\n      entry = parsePoint(entry);\n    }\n    return entry;\n  });\n\n  return p.parse();\n};\n\nvar parseFloatArray = function(value) {\n  if(!value) { return null; }\n  var p = arrayParser.create(value, function(entry) {\n    if(entry !== null) {\n      entry = parseFloat(entry);\n    }\n    return entry;\n  });\n\n  return p.parse();\n};\n\nvar parseStringArray = function(value) {\n  if(!value) { return null; }\n\n  var p = arrayParser.create(value);\n  return p.parse();\n};\n\nvar parseDateArray = function(value) {\n  if (!value) { return null; }\n\n  var p = arrayParser.create(value, function(entry) {\n    if (entry !== null) {\n      entry = parseDate(entry);\n    }\n    return entry;\n  });\n\n  return p.parse();\n};\n\nvar parseIntervalArray = function(value) {\n  if (!value) { return null; }\n\n  var p = arrayParser.create(value, function(entry) {\n    if (entry !== null) {\n      entry = parseInterval(entry);\n    }\n    return entry;\n  });\n\n  return p.parse();\n};\n\nvar parseByteAArray = function(value) {\n  if (!value) { return null; }\n\n  return array.parse(value, allowNull(parseByteA));\n};\n\nvar parseInteger = function(value) {\n  return parseInt(value, 10);\n};\n\nvar parseBigInteger = function(value) {\n  var valStr = String(value);\n  if (/^\\d+$/.test(valStr)) { return valStr; }\n  return value;\n};\n\nvar parseJsonArray = function(value) {\n  if (!value) { return null; }\n\n  return array.parse(value, allowNull(JSON.parse));\n};\n\nvar parsePoint = function(value) {\n  if (value[0] !== '(') { return null; }\n\n  value = value.substring( 1, value.length - 1 ).split(',');\n\n  return {\n    x: parseFloat(value[0])\n  , y: parseFloat(value[1])\n  };\n};\n\nvar parseCircle = function(value) {\n  if (value[0] !== '<' && value[1] !== '(') { return null; }\n\n  var point = '(';\n  var radius = '';\n  var pointParsed = false;\n  for (var i = 2; i < value.length - 1; i++){\n    if (!pointParsed) {\n      point += value[i];\n    }\n\n    if (value[i] === ')') {\n      pointParsed = true;\n      continue;\n    } else if (!pointParsed) {\n      continue;\n    }\n\n    if (value[i] === ','){\n      continue;\n    }\n\n    radius += value[i];\n  }\n  var result = parsePoint(point);\n  result.radius = parseFloat(radius);\n\n  return result;\n};\n\nvar init = function(register) {\n  register(20, parseBigInteger); // int8\n  register(21, parseInteger); // int2\n  register(23, parseInteger); // int4\n  register(26, parseInteger); // oid\n  register(700, parseFloat); // float4/real\n  register(701, parseFloat); // float8/double\n  register(16, parseBool);\n  register(1082, parseDate); // date\n  register(1114, parseDate); // timestamp without timezone\n  register(1184, parseDate); // timestamp\n  register(600, parsePoint); // point\n  register(651, parseStringArray); // cidr[]\n  register(718, parseCircle); // circle\n  register(1000, parseBoolArray);\n  register(1001, parseByteAArray);\n  register(1005, parseIntegerArray); // _int2\n  register(1007, parseIntegerArray); // _int4\n  register(1028, parseIntegerArray); // oid[]\n  register(1016, parseBigIntegerArray); // _int8\n  register(1017, parsePointArray); // point[]\n  register(1021, parseFloatArray); // _float4\n  register(1022, parseFloatArray); // _float8\n  register(1231, parseFloatArray); // _numeric\n  register(1014, parseStringArray); //char\n  register(1015, parseStringArray); //varchar\n  register(1008, parseStringArray);\n  register(1009, parseStringArray);\n  register(1040, parseStringArray); // macaddr[]\n  register(1041, parseStringArray); // inet[]\n  register(1115, parseDateArray); // timestamp without time zone[]\n  register(1182, parseDateArray); // _date\n  register(1185, parseDateArray); // timestamp with time zone[]\n  register(1186, parseInterval);\n  register(1187, parseIntervalArray);\n  register(17, parseByteA);\n  register(114, JSON.parse.bind(JSON)); // json\n  register(3802, JSON.parse.bind(JSON)); // jsonb\n  register(199, parseJsonArray); // json[]\n  register(3807, parseJsonArray); // jsonb[]\n  register(3907, parseStringArray); // numrange[]\n  register(2951, parseStringArray); // uuid[]\n  register(791, parseStringArray); // money[]\n  register(1183, parseStringArray); // time[]\n  register(1270, parseStringArray); // timetz[]\n};\n\nmodule.exports = {\n  init: init\n};\n","'use strict';\n\n// selected so (BASE - 1) * 0x100000000 + 0xffffffff is a safe integer\nvar BASE = 1000000;\n\nfunction readInt8(buffer) {\n\tvar high = buffer.readInt32BE(0);\n\tvar low = buffer.readUInt32BE(4);\n\tvar sign = '';\n\n\tif (high < 0) {\n\t\thigh = ~high + (low === 0);\n\t\tlow = (~low + 1) >>> 0;\n\t\tsign = '-';\n\t}\n\n\tvar result = '';\n\tvar carry;\n\tvar t;\n\tvar digits;\n\tvar pad;\n\tvar l;\n\tvar i;\n\n\t{\n\t\tcarry = high % BASE;\n\t\thigh = high / BASE >>> 0;\n\n\t\tt = 0x100000000 * carry + low;\n\t\tlow = t / BASE >>> 0;\n\t\tdigits = '' + (t - BASE * low);\n\n\t\tif (low === 0 && high === 0) {\n\t\t\treturn sign + digits + result;\n\t\t}\n\n\t\tpad = '';\n\t\tl = 6 - digits.length;\n\n\t\tfor (i = 0; i < l; i++) {\n\t\t\tpad += '0';\n\t\t}\n\n\t\tresult = pad + digits + result;\n\t}\n\n\t{\n\t\tcarry = high % BASE;\n\t\thigh = high / BASE >>> 0;\n\n\t\tt = 0x100000000 * carry + low;\n\t\tlow = t / BASE >>> 0;\n\t\tdigits = '' + (t - BASE * low);\n\n\t\tif (low === 0 && high === 0) {\n\t\t\treturn sign + digits + result;\n\t\t}\n\n\t\tpad = '';\n\t\tl = 6 - digits.length;\n\n\t\tfor (i = 0; i < l; i++) {\n\t\t\tpad += '0';\n\t\t}\n\n\t\tresult = pad + digits + result;\n\t}\n\n\t{\n\t\tcarry = high % BASE;\n\t\thigh = high / BASE >>> 0;\n\n\t\tt = 0x100000000 * carry + low;\n\t\tlow = t / BASE >>> 0;\n\t\tdigits = '' + (t - BASE * low);\n\n\t\tif (low === 0 && high === 0) {\n\t\t\treturn sign + digits + result;\n\t\t}\n\n\t\tpad = '';\n\t\tl = 6 - digits.length;\n\n\t\tfor (i = 0; i < l; i++) {\n\t\t\tpad += '0';\n\t\t}\n\n\t\tresult = pad + digits + result;\n\t}\n\n\t{\n\t\tcarry = high % BASE;\n\t\tt = 0x100000000 * carry + low;\n\t\tdigits = '' + t % BASE;\n\n\t\treturn sign + digits + result;\n\t}\n}\n\nmodule.exports = readInt8;\n","var parseInt64 = require('pg-int8');\n\nvar parseBits = function(data, bits, offset, invert, callback) {\n  offset = offset || 0;\n  invert = invert || false;\n  callback = callback || function(lastValue, newValue, bits) { return (lastValue * Math.pow(2, bits)) + newValue; };\n  var offsetBytes = offset >> 3;\n\n  var inv = function(value) {\n    if (invert) {\n      return ~value & 0xff;\n    }\n\n    return value;\n  };\n\n  // read first (maybe partial) byte\n  var mask = 0xff;\n  var firstBits = 8 - (offset % 8);\n  if (bits < firstBits) {\n    mask = (0xff << (8 - bits)) & 0xff;\n    firstBits = bits;\n  }\n\n  if (offset) {\n    mask = mask >> (offset % 8);\n  }\n\n  var result = 0;\n  if ((offset % 8) + bits >= 8) {\n    result = callback(0, inv(data[offsetBytes]) & mask, firstBits);\n  }\n\n  // read bytes\n  var bytes = (bits + offset) >> 3;\n  for (var i = offsetBytes + 1; i < bytes; i++) {\n    result = callback(result, inv(data[i]), 8);\n  }\n\n  // bits to read, that are not a complete byte\n  var lastBits = (bits + offset) % 8;\n  if (lastBits > 0) {\n    result = callback(result, inv(data[bytes]) >> (8 - lastBits), lastBits);\n  }\n\n  return result;\n};\n\nvar parseFloatFromBits = function(data, precisionBits, exponentBits) {\n  var bias = Math.pow(2, exponentBits - 1) - 1;\n  var sign = parseBits(data, 1);\n  var exponent = parseBits(data, exponentBits, 1);\n\n  if (exponent === 0) {\n    return 0;\n  }\n\n  // parse mantissa\n  var precisionBitsCounter = 1;\n  var parsePrecisionBits = function(lastValue, newValue, bits) {\n    if (lastValue === 0) {\n      lastValue = 1;\n    }\n\n    for (var i = 1; i <= bits; i++) {\n      precisionBitsCounter /= 2;\n      if ((newValue & (0x1 << (bits - i))) > 0) {\n        lastValue += precisionBitsCounter;\n      }\n    }\n\n    return lastValue;\n  };\n\n  var mantissa = parseBits(data, precisionBits, exponentBits + 1, false, parsePrecisionBits);\n\n  // special cases\n  if (exponent == (Math.pow(2, exponentBits + 1) - 1)) {\n    if (mantissa === 0) {\n      return (sign === 0) ? Infinity : -Infinity;\n    }\n\n    return NaN;\n  }\n\n  // normale number\n  return ((sign === 0) ? 1 : -1) * Math.pow(2, exponent - bias) * mantissa;\n};\n\nvar parseInt16 = function(value) {\n  if (parseBits(value, 1) == 1) {\n    return -1 * (parseBits(value, 15, 1, true) + 1);\n  }\n\n  return parseBits(value, 15, 1);\n};\n\nvar parseInt32 = function(value) {\n  if (parseBits(value, 1) == 1) {\n    return -1 * (parseBits(value, 31, 1, true) + 1);\n  }\n\n  return parseBits(value, 31, 1);\n};\n\nvar parseFloat32 = function(value) {\n  return parseFloatFromBits(value, 23, 8);\n};\n\nvar parseFloat64 = function(value) {\n  return parseFloatFromBits(value, 52, 11);\n};\n\nvar parseNumeric = function(value) {\n  var sign = parseBits(value, 16, 32);\n  if (sign == 0xc000) {\n    return NaN;\n  }\n\n  var weight = Math.pow(10000, parseBits(value, 16, 16));\n  var result = 0;\n\n  var digits = [];\n  var ndigits = parseBits(value, 16);\n  for (var i = 0; i < ndigits; i++) {\n    result += parseBits(value, 16, 64 + (16 * i)) * weight;\n    weight /= 10000;\n  }\n\n  var scale = Math.pow(10, parseBits(value, 16, 48));\n  return ((sign === 0) ? 1 : -1) * Math.round(result * scale) / scale;\n};\n\nvar parseDate = function(isUTC, value) {\n  var sign = parseBits(value, 1);\n  var rawValue = parseBits(value, 63, 1);\n\n  // discard usecs and shift from 2000 to 1970\n  var result = new Date((((sign === 0) ? 1 : -1) * rawValue / 1000) + 946684800000);\n\n  if (!isUTC) {\n    result.setTime(result.getTime() + result.getTimezoneOffset() * 60000);\n  }\n\n  // add microseconds to the date\n  result.usec = rawValue % 1000;\n  result.getMicroSeconds = function() {\n    return this.usec;\n  };\n  result.setMicroSeconds = function(value) {\n    this.usec = value;\n  };\n  result.getUTCMicroSeconds = function() {\n    return this.usec;\n  };\n\n  return result;\n};\n\nvar parseArray = function(value) {\n  var dim = parseBits(value, 32);\n\n  var flags = parseBits(value, 32, 32);\n  var elementType = parseBits(value, 32, 64);\n\n  var offset = 96;\n  var dims = [];\n  for (var i = 0; i < dim; i++) {\n    // parse dimension\n    dims[i] = parseBits(value, 32, offset);\n    offset += 32;\n\n    // ignore lower bounds\n    offset += 32;\n  }\n\n  var parseElement = function(elementType) {\n    // parse content length\n    var length = parseBits(value, 32, offset);\n    offset += 32;\n\n    // parse null values\n    if (length == 0xffffffff) {\n      return null;\n    }\n\n    var result;\n    if ((elementType == 0x17) || (elementType == 0x14)) {\n      // int/bigint\n      result = parseBits(value, length * 8, offset);\n      offset += length * 8;\n      return result;\n    }\n    else if (elementType == 0x19) {\n      // string\n      result = value.toString(this.encoding, offset >> 3, (offset += (length << 3)) >> 3);\n      return result;\n    }\n    else {\n      console.log(\"ERROR: ElementType not implemented: \" + elementType);\n    }\n  };\n\n  var parse = function(dimension, elementType) {\n    var array = [];\n    var i;\n\n    if (dimension.length > 1) {\n      var count = dimension.shift();\n      for (i = 0; i < count; i++) {\n        array[i] = parse(dimension, elementType);\n      }\n      dimension.unshift(count);\n    }\n    else {\n      for (i = 0; i < dimension[0]; i++) {\n        array[i] = parseElement(elementType);\n      }\n    }\n\n    return array;\n  };\n\n  return parse(dims, elementType);\n};\n\nvar parseText = function(value) {\n  return value.toString('utf8');\n};\n\nvar parseBool = function(value) {\n  if(value === null) return null;\n  return (parseBits(value, 8) > 0);\n};\n\nvar init = function(register) {\n  register(20, parseInt64);\n  register(21, parseInt16);\n  register(23, parseInt32);\n  register(26, parseInt32);\n  register(1700, parseNumeric);\n  register(700, parseFloat32);\n  register(701, parseFloat64);\n  register(16, parseBool);\n  register(1114, parseDate.bind(null, false));\n  register(1184, parseDate.bind(null, true));\n  register(1000, parseArray);\n  register(1007, parseArray);\n  register(1016, parseArray);\n  register(1008, parseArray);\n  register(1009, parseArray);\n  register(25, parseText);\n};\n\nmodule.exports = {\n  init: init\n};\n","/**\n * Following query was used to generate this file:\n\n SELECT json_object_agg(UPPER(PT.typname), PT.oid::int4 ORDER BY pt.oid)\n FROM pg_type PT\n WHERE typnamespace = (SELECT pgn.oid FROM pg_namespace pgn WHERE nspname = 'pg_catalog') -- Take only builting Postgres types with stable OID (extension types are not guaranted to be stable)\n AND typtype = 'b' -- Only basic types\n AND typelem = 0 -- Ignore aliases\n AND typisdefined -- Ignore undefined types\n */\n\nmodule.exports = {\n    BOOL: 16,\n    BYTEA: 17,\n    CHAR: 18,\n    INT8: 20,\n    INT2: 21,\n    INT4: 23,\n    REGPROC: 24,\n    TEXT: 25,\n    OID: 26,\n    TID: 27,\n    XID: 28,\n    CID: 29,\n    JSON: 114,\n    XML: 142,\n    PG_NODE_TREE: 194,\n    SMGR: 210,\n    PATH: 602,\n    POLYGON: 604,\n    CIDR: 650,\n    FLOAT4: 700,\n    FLOAT8: 701,\n    ABSTIME: 702,\n    RELTIME: 703,\n    TINTERVAL: 704,\n    CIRCLE: 718,\n    MACADDR8: 774,\n    MONEY: 790,\n    MACADDR: 829,\n    INET: 869,\n    ACLITEM: 1033,\n    BPCHAR: 1042,\n    VARCHAR: 1043,\n    DATE: 1082,\n    TIME: 1083,\n    TIMESTAMP: 1114,\n    TIMESTAMPTZ: 1184,\n    INTERVAL: 1186,\n    TIMETZ: 1266,\n    BIT: 1560,\n    VARBIT: 1562,\n    NUMERIC: 1700,\n    REFCURSOR: 1790,\n    REGPROCEDURE: 2202,\n    REGOPER: 2203,\n    REGOPERATOR: 2204,\n    REGCLASS: 2205,\n    REGTYPE: 2206,\n    UUID: 2950,\n    TXID_SNAPSHOT: 2970,\n    PG_LSN: 3220,\n    PG_NDISTINCT: 3361,\n    PG_DEPENDENCIES: 3402,\n    TSVECTOR: 3614,\n    TSQUERY: 3615,\n    GTSVECTOR: 3642,\n    REGCONFIG: 3734,\n    REGDICTIONARY: 3769,\n    JSONB: 3802,\n    REGNAMESPACE: 4089,\n    REGROLE: 4096\n};\n","var textParsers = require('./lib/textParsers');\nvar binaryParsers = require('./lib/binaryParsers');\nvar arrayParser = require('./lib/arrayParser');\nvar builtinTypes = require('./lib/builtins');\n\nexports.getTypeParser = getTypeParser;\nexports.setTypeParser = setTypeParser;\nexports.arrayParser = arrayParser;\nexports.builtins = builtinTypes;\n\nvar typeParsers = {\n  text: {},\n  binary: {}\n};\n\n//the empty parse function\nfunction noParse (val) {\n  return String(val);\n};\n\n//returns a function used to convert a specific type (specified by\n//oid) into a result javascript type\n//note: the oid can be obtained via the following sql query:\n//SELECT oid FROM pg_type WHERE typname = 'TYPE_NAME_HERE';\nfunction getTypeParser (oid, format) {\n  format = format || 'text';\n  if (!typeParsers[format]) {\n    return noParse;\n  }\n  return typeParsers[format][oid] || noParse;\n};\n\nfunction setTypeParser (oid, format, parseFn) {\n  if(typeof format == 'function') {\n    parseFn = format;\n    format = 'text';\n  }\n  typeParsers[format][oid] = parseFn;\n};\n\ntextParsers.init(function(oid, converter) {\n  typeParsers.text[oid] = converter;\n});\n\nbinaryParsers.init(function(oid, converter) {\n  typeParsers.binary[oid] = converter;\n});\n","'use strict'\n\nlet user\ntry {\n  user = process.platform === 'win32' ? process.env.USERNAME : process.env.USER\n} catch {\n  // ignore, e.g., Deno without --allow-env\n}\n\nmodule.exports = {\n  // database host. defaults to localhost\n  host: 'localhost',\n\n  // database user's name\n  user,\n\n  // name of database to connect\n  database: undefined,\n\n  // database user's password\n  password: null,\n\n  // a Postgres connection string to be used instead of setting individual connection items\n  // NOTE:  Setting this value will cause it to override any other value (such as database or user) defined\n  // in the defaults object.\n  connectionString: undefined,\n\n  // database port\n  port: 5432,\n\n  // number of rows to return at a time from a prepared statement's\n  // portal. 0 will return all rows at once\n  rows: 0,\n\n  // binary result mode\n  binary: false,\n\n  // Connection pool options - see https://github.com/brianc/node-pg-pool\n\n  // number of connections to use in connection pool\n  // 0 will disable connection pooling\n  max: 10,\n\n  // max milliseconds a client can go unused before it is removed\n  // from the pool and destroyed\n  idleTimeoutMillis: 30000,\n\n  client_encoding: '',\n\n  ssl: false,\n\n  // SSL negotiation style: 'postgres' (traditional SSLRequest) or 'direct'\n  sslnegotiation: undefined,\n\n  application_name: undefined,\n\n  fallback_application_name: undefined,\n\n  options: undefined,\n\n  parseInputDatesAsUTC: false,\n\n  // max milliseconds any query using this connection will execute for before timing out in error.\n  // false=unlimited\n  statement_timeout: false,\n\n  // Abort any statement that waits longer than the specified duration in milliseconds while attempting to acquire a lock.\n  // false=unlimited\n  lock_timeout: false,\n\n  // Terminate any session with an open transaction that has been idle for longer than the specified duration in milliseconds\n  // false=unlimited\n  idle_in_transaction_session_timeout: false,\n\n  // max milliseconds to wait for query to complete (client side)\n  query_timeout: false,\n\n  connect_timeout: 0,\n\n  keepalives: 1,\n\n  keepalives_idle: 0,\n}\n\nconst pgTypes = require('pg-types')\n// save default parsers\nconst parseBigInteger = pgTypes.getTypeParser(20, 'text')\nconst parseBigIntegerArray = pgTypes.getTypeParser(1016, 'text')\n\n// parse int8 so you can get your count values as actual numbers\nmodule.exports.__defineSetter__('parseInt8', function (val) {\n  pgTypes.setTypeParser(20, 'text', val ? pgTypes.getTypeParser(23, 'text') : parseBigInteger)\n  pgTypes.setTypeParser(1016, 'text', val ? pgTypes.getTypeParser(1007, 'text') : parseBigIntegerArray)\n})\n","'use strict'\n\nconst defaults = require('./defaults')\n\nconst { isDate } = require('util/types')\n\nfunction escapeElement(elementRepresentation) {\n  const escaped = elementRepresentation.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')\n\n  return '\"' + escaped + '\"'\n}\n\n// convert a JS array to a postgres array literal\n// uses comma separator so won't work for types like box that use\n// a different array separator.\nfunction arrayString(val) {\n  let result = '{'\n  for (let i = 0; i < val.length; i++) {\n    if (i > 0) {\n      result += ','\n    }\n    let item = val[i]\n    if (item == null) {\n      result += 'NULL'\n    } else if (Array.isArray(item)) {\n      result += arrayString(item)\n    } else if (ArrayBuffer.isView(item)) {\n      if (!(item instanceof Buffer)) {\n        item = Buffer.from(item.buffer, item.byteOffset, item.byteLength)\n      }\n      result += '\\\\\\\\x' + item.toString('hex')\n    } else {\n      result += escapeElement(prepareValue(item))\n    }\n  }\n  result += '}'\n  return result\n}\n\n// converts values from javascript types\n// to their 'raw' counterparts for use as a postgres parameter\n// note: you can override this function to provide your own conversion mechanism\n// for complex types, etc...\nconst prepareValue = function (val, seen) {\n  // null and undefined are both null for postgres\n  if (val == null) {\n    return null\n  }\n  if (typeof val === 'object') {\n    if (val instanceof Buffer) {\n      return val\n    }\n    if (ArrayBuffer.isView(val)) {\n      return Buffer.from(val.buffer, val.byteOffset, val.byteLength)\n    }\n    if (isDate(val)) {\n      if (defaults.parseInputDatesAsUTC) {\n        return dateToStringUTC(val)\n      } else {\n        return dateToString(val)\n      }\n    }\n    if (Array.isArray(val)) {\n      return arrayString(val)\n    }\n\n    return prepareObject(val, seen)\n  }\n  return val.toString()\n}\n\nfunction prepareObject(val, seen) {\n  if (val && typeof val.toPostgres === 'function') {\n    seen = seen || []\n    if (seen.indexOf(val) !== -1) {\n      throw new Error('circular reference detected while preparing \"' + val + '\" for query')\n    }\n    seen.push(val)\n\n    return prepareValue(val.toPostgres(prepareValue), seen)\n  }\n  return JSON.stringify(val)\n}\n\nfunction dateToString(date) {\n  let offset = -date.getTimezoneOffset()\n\n  let year = date.getFullYear()\n  const isBCYear = year < 1\n  if (isBCYear) year = Math.abs(year) + 1 // negative years are 1 off their BC representation\n\n  let ret =\n    String(year).padStart(4, '0') +\n    '-' +\n    String(date.getMonth() + 1).padStart(2, '0') +\n    '-' +\n    String(date.getDate()).padStart(2, '0') +\n    'T' +\n    String(date.getHours()).padStart(2, '0') +\n    ':' +\n    String(date.getMinutes()).padStart(2, '0') +\n    ':' +\n    String(date.getSeconds()).padStart(2, '0') +\n    '.' +\n    String(date.getMilliseconds()).padStart(3, '0')\n\n  if (offset < 0) {\n    ret += '-'\n    offset *= -1\n  } else {\n    ret += '+'\n  }\n\n  ret += String(Math.floor(offset / 60)).padStart(2, '0') + ':' + String(offset % 60).padStart(2, '0')\n  if (isBCYear) ret += ' BC'\n  return ret\n}\n\nfunction dateToStringUTC(date) {\n  let year = date.getUTCFullYear()\n  const isBCYear = year < 1\n  if (isBCYear) year = Math.abs(year) + 1 // negative years are 1 off their BC representation\n\n  let ret =\n    String(year).padStart(4, '0') +\n    '-' +\n    String(date.getUTCMonth() + 1).padStart(2, '0') +\n    '-' +\n    String(date.getUTCDate()).padStart(2, '0') +\n    'T' +\n    String(date.getUTCHours()).padStart(2, '0') +\n    ':' +\n    String(date.getUTCMinutes()).padStart(2, '0') +\n    ':' +\n    String(date.getUTCSeconds()).padStart(2, '0') +\n    '.' +\n    String(date.getUTCMilliseconds()).padStart(3, '0')\n\n  ret += '+00:00'\n  if (isBCYear) ret += ' BC'\n  return ret\n}\n\nfunction normalizeQueryConfig(config, values, callback) {\n  // can take in strings or config objects\n  config = typeof config === 'string' ? { text: config } : config\n  if (values) {\n    if (typeof values === 'function') {\n      config.callback = values\n    } else {\n      config.values = values\n    }\n  }\n  if (callback) {\n    config.callback = callback\n  }\n  return config\n}\n\n// Ported from PostgreSQL 9.2.4 source code in src/interfaces/libpq/fe-exec.c\nconst escapeIdentifier = function (str) {\n  return '\"' + str.replace(/\"/g, '\"\"') + '\"'\n}\n\nconst escapeLiteral = function (str) {\n  let hasBackslash = false\n  let escaped = \"'\"\n\n  if (str == null) {\n    return \"''\"\n  }\n\n  if (typeof str !== 'string') {\n    return \"''\"\n  }\n\n  for (let i = 0; i < str.length; i++) {\n    const c = str[i]\n    if (c === \"'\") {\n      escaped += c + c\n    } else if (c === '\\\\') {\n      escaped += c + c\n      hasBackslash = true\n    } else {\n      escaped += c\n    }\n  }\n\n  escaped += \"'\"\n\n  if (hasBackslash === true) {\n    escaped = ' E' + escaped\n  }\n\n  return escaped\n}\n\nmodule.exports = {\n  prepareValue: function prepareValueWrapper(value) {\n    // this ensures that extra arguments do not get passed into prepareValue\n    // by accident, eg: from calling values.map(utils.prepareValue)\n    return prepareValue(value)\n  },\n  normalizeQueryConfig,\n  escapeIdentifier,\n  escapeLiteral,\n}\n","const nodeCrypto = require('crypto')\n\nmodule.exports = {\n  postgresMd5PasswordHash,\n  randomBytes,\n  deriveKey,\n  sha256,\n  hashByName,\n  hmacSha256,\n  md5,\n}\n\n/**\n * The Web Crypto API - grabbed from the Node.js library or the global\n * @type Crypto\n */\n// eslint-disable-next-line no-undef\nconst webCrypto = nodeCrypto.webcrypto || globalThis.crypto\n/**\n * The SubtleCrypto API for low level crypto operations.\n * @type SubtleCrypto\n */\nconst subtleCrypto = webCrypto.subtle\nconst textEncoder = new TextEncoder()\n\n/**\n *\n * @param {*} length\n * @returns\n */\nfunction randomBytes(length) {\n  return webCrypto.getRandomValues(Buffer.alloc(length))\n}\n\nasync function md5(string) {\n  try {\n    return nodeCrypto.createHash('md5').update(string, 'utf-8').digest('hex')\n  } catch (e) {\n    // `createHash()` failed so we are probably not in Node.js, use the WebCrypto API instead.\n    // Note that the MD5 algorithm on WebCrypto is not available in Node.js.\n    // This is why we cannot just use WebCrypto in all environments.\n    const data = typeof string === 'string' ? textEncoder.encode(string) : string\n    const hash = await subtleCrypto.digest('MD5', data)\n    return Array.from(new Uint8Array(hash))\n      .map((b) => b.toString(16).padStart(2, '0'))\n      .join('')\n  }\n}\n\n// See AuthenticationMD5Password at https://www.postgresql.org/docs/current/static/protocol-flow.html\nasync function postgresMd5PasswordHash(user, password, salt) {\n  const inner = await md5(password + user)\n  const outer = await md5(Buffer.concat([Buffer.from(inner), salt]))\n  return 'md5' + outer\n}\n\n/**\n * Create a SHA-256 digest of the given data\n * @param {Buffer} data\n */\nasync function sha256(text) {\n  return await subtleCrypto.digest('SHA-256', text)\n}\n\nasync function hashByName(hashName, text) {\n  return await subtleCrypto.digest(hashName, text)\n}\n\n/**\n * Sign the message with the given key\n * @param {ArrayBuffer} keyBuffer\n * @param {string} msg\n */\nasync function hmacSha256(keyBuffer, msg) {\n  const key = await subtleCrypto.importKey('raw', keyBuffer, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign'])\n  return await subtleCrypto.sign('HMAC', key, textEncoder.encode(msg))\n}\n\n/**\n * Derive a key from the password and salt\n * @param {string} password\n * @param {Uint8Array} salt\n * @param {number} iterations\n */\nasync function deriveKey(password, salt, iterations) {\n  const key = await subtleCrypto.importKey('raw', textEncoder.encode(password), 'PBKDF2', false, ['deriveBits'])\n  const params = { name: 'PBKDF2', hash: 'SHA-256', salt: salt, iterations: iterations }\n  return await subtleCrypto.deriveBits(params, key, 32 * 8, ['deriveBits'])\n}\n","function x509Error(msg, cert) {\n  return new Error('SASL channel binding: ' + msg + ' when parsing public certificate ' + cert.toString('base64'))\n}\n\nfunction readASN1Length(data, index) {\n  let length = data[index++]\n  if (length < 0x80) return { length, index }\n\n  const lengthBytes = length & 0x7f\n  if (lengthBytes > 4) throw x509Error('bad length', data)\n\n  length = 0\n  for (let i = 0; i < lengthBytes; i++) {\n    length = (length << 8) | data[index++]\n  }\n\n  return { length, index }\n}\n\nfunction readASN1OID(data, index) {\n  if (data[index++] !== 0x6) throw x509Error('non-OID data', data) // 6 = OID\n\n  const { length: OIDLength, index: indexAfterOIDLength } = readASN1Length(data, index)\n  index = indexAfterOIDLength\n  const lastIndex = index + OIDLength\n\n  const byte1 = data[index++]\n  let oid = ((byte1 / 40) >> 0) + '.' + (byte1 % 40)\n\n  while (index < lastIndex) {\n    // loop over numbers in OID\n    let value = 0\n    while (index < lastIndex) {\n      // loop over bytes in number\n      const nextByte = data[index++]\n      value = (value << 7) | (nextByte & 0x7f)\n      if (nextByte < 0x80) break\n    }\n    oid += '.' + value\n  }\n\n  return { oid, index }\n}\n\nfunction expectASN1Seq(data, index) {\n  if (data[index++] !== 0x30) throw x509Error('non-sequence data', data) // 30 = Sequence\n  return readASN1Length(data, index)\n}\n\nfunction signatureAlgorithmHashFromCertificate(data, index) {\n  // read this thread: https://www.postgresql.org/message-id/17760-b6c61e752ec07060%40postgresql.org\n  if (index === undefined) index = 0\n  index = expectASN1Seq(data, index).index\n  const { length: certInfoLength, index: indexAfterCertInfoLength } = expectASN1Seq(data, index)\n  index = indexAfterCertInfoLength + certInfoLength // skip over certificate info\n  index = expectASN1Seq(data, index).index // skip over signature length field\n  const { oid, index: indexAfterOID } = readASN1OID(data, index)\n  switch (oid) {\n    // RSA\n    case '1.2.840.113549.1.1.4':\n      return 'MD5'\n    case '1.2.840.113549.1.1.5':\n      return 'SHA-1'\n    case '1.2.840.113549.1.1.11':\n      return 'SHA-256'\n    case '1.2.840.113549.1.1.12':\n      return 'SHA-384'\n    case '1.2.840.113549.1.1.13':\n      return 'SHA-512'\n    case '1.2.840.113549.1.1.14':\n      return 'SHA-224'\n    case '1.2.840.113549.1.1.15':\n      return 'SHA512-224'\n    case '1.2.840.113549.1.1.16':\n      return 'SHA512-256'\n    // ECDSA\n    case '1.2.840.10045.4.1':\n      return 'SHA-1'\n    case '1.2.840.10045.4.3.1':\n      return 'SHA-224'\n    case '1.2.840.10045.4.3.2':\n      return 'SHA-256'\n    case '1.2.840.10045.4.3.3':\n      return 'SHA-384'\n    case '1.2.840.10045.4.3.4':\n      return 'SHA-512'\n    // RSASSA-PSS: hash is indicated separately\n    case '1.2.840.113549.1.1.10': {\n      index = indexAfterOID\n      index = expectASN1Seq(data, index).index\n      if (data[index++] !== 0xa0) throw x509Error('non-tag data', data) // a0 = constructed tag 0\n      index = readASN1Length(data, index).index // skip over tag length field\n      index = expectASN1Seq(data, index).index // skip over sequence length field\n      const { oid: hashOID } = readASN1OID(data, index)\n      switch (hashOID) {\n        // standalone hash OIDs\n        case '1.2.840.113549.2.5':\n          return 'MD5'\n        case '1.3.14.3.2.26':\n          return 'SHA-1'\n        case '2.16.840.1.101.3.4.2.1':\n          return 'SHA-256'\n        case '2.16.840.1.101.3.4.2.2':\n          return 'SHA-384'\n        case '2.16.840.1.101.3.4.2.3':\n          return 'SHA-512'\n      }\n      throw x509Error('unknown hash OID ' + hashOID, data)\n    }\n    // Ed25519 -- see https: return//github.com/openssl/openssl/issues/15477\n    case '1.3.101.110':\n    case '1.3.101.112': // ph\n      return 'SHA-512'\n    // Ed448 -- still not in pg 17.2 (if supported, digest would be SHAKE256 x 64 bytes)\n    case '1.3.101.111':\n    case '1.3.101.113': // ph\n      throw x509Error('Ed448 certificate channel binding is not currently supported by Postgres')\n  }\n  throw x509Error('unknown OID ' + oid, data)\n}\n\nmodule.exports = { signatureAlgorithmHashFromCertificate }\n","'use strict'\nconst crypto = require('./utils')\nconst { signatureAlgorithmHashFromCertificate } = require('./cert-signatures')\n\n// SASLprep (RFC 4013) — minimal in-tree implementation.\n//\n// Per RFC 5802 §2.2, the SCRAM-SHA-256 client must normalize the password via\n// SASLprep before feeding it into PBKDF2. PostgreSQL's server applies the same\n// SASLprep when computing the stored verifier, and libpq does the same client\n// side, so passwords whose NFKC form differs from the raw form\n// would otherwise authenticate against psql/libpq but fail against pg with `28P01`.\n//\n// We deliberately implement only the three steps that change the byte content:\n//   1. RFC 3454 Table C.1.2 (non-ASCII space) → U+0020 SPACE.\n//   2. RFC 3454 Table B.1 (commonly mapped to nothing) → empty.\n//   3. NFKC normalization.\n// We skip the prohibition (RFC 4013 §2.3) and bidi (RFC 3454 §6) checks.\n// libpq is forgiving on those paths and Postgres's own SASLprep matches that\n// leniency for legacy roles, so omitting the rejection logic keeps existing\n// roles working without adding complexity.\nfunction saslprep(password) {\n  // RFC 3454 Table C.1.2 — non-ASCII space characters, mapped to U+0020.\n  const nonAsciiSpace = /[\\u00A0\\u1680\\u2000-\\u200B\\u202F\\u205F\\u3000]/g\n  // RFC 3454 Table B.1 — \"commonly mapped to nothing\". The set intentionally\n  // contains zero-width joiners and variation selectors — the very characters\n  // ESLint's no-misleading-character-class warns about — because they combine\n  // with their neighbors and the RFC strips them for that reason.\n  // eslint-disable-next-line no-misleading-character-class\n  const mappedToNothing = /[\\u00AD\\u034F\\u1806\\u180B\\u180C\\u180D\\u200C\\u200D\\u2060\\uFE00-\\uFE0F\\uFEFF]/g\n  return password.replace(nonAsciiSpace, ' ').replace(mappedToNothing, '').normalize('NFKC')\n}\n\nconst DEFAULT_MAX_SCRAM_ITERATIONS = 100000\n\nfunction startSession(mechanisms, stream, scramMaxIterations = DEFAULT_MAX_SCRAM_ITERATIONS) {\n  const candidates = ['SCRAM-SHA-256']\n  if (stream) candidates.unshift('SCRAM-SHA-256-PLUS') // higher-priority, so placed first\n\n  const mechanism = candidates.find((candidate) => mechanisms.includes(candidate))\n\n  if (!mechanism) {\n    throw new Error('SASL: Only mechanism(s) ' + candidates.join(' and ') + ' are supported')\n  }\n\n  if (mechanism === 'SCRAM-SHA-256-PLUS' && typeof stream.getPeerCertificate !== 'function') {\n    // this should never happen if we are really talking to a Postgres server\n    throw new Error('SASL: Mechanism SCRAM-SHA-256-PLUS requires a certificate')\n  }\n\n  const clientNonce = crypto.randomBytes(18).toString('base64')\n  const gs2Header = mechanism === 'SCRAM-SHA-256-PLUS' ? 'p=tls-server-end-point' : stream ? 'y' : 'n'\n\n  return {\n    mechanism,\n    clientNonce,\n    response: gs2Header + ',,n=*,r=' + clientNonce,\n    message: 'SASLInitialResponse',\n    scramMaxIterations,\n  }\n}\n\nasync function continueSession(session, password, serverData, stream) {\n  if (session.message !== 'SASLInitialResponse') {\n    throw new Error('SASL: Last message was not SASLInitialResponse')\n  }\n  if (typeof password !== 'string') {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string')\n  }\n  if (password === '') {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a non-empty string')\n  }\n  if (typeof serverData !== 'string') {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: serverData must be a string')\n  }\n\n  const sv = parseServerFirstMessage(serverData)\n\n  if (!sv.nonce.startsWith(session.clientNonce)) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce does not start with client nonce')\n  } else if (sv.nonce.length === session.clientNonce.length) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce is too short')\n  }\n\n  const scramMaxIterations =\n    typeof session.scramMaxIterations === 'number' ? session.scramMaxIterations : DEFAULT_MAX_SCRAM_ITERATIONS\n  // a value of 0 disables the iteration count check\n  if (scramMaxIterations !== 0 && sv.iteration > scramMaxIterations) {\n    throw new Error(\n      'SASL: SCRAM-SERVER-FIRST-MESSAGE: iteration count ' +\n        sv.iteration +\n        ' exceeds scramMaxIterations of ' +\n        scramMaxIterations\n    )\n  }\n\n  const clientFirstMessageBare = 'n=*,r=' + session.clientNonce\n  const serverFirstMessage = 'r=' + sv.nonce + ',s=' + sv.salt + ',i=' + sv.iteration\n\n  // without channel binding:\n  let channelBinding = stream ? 'eSws' : 'biws' // 'y,,' or 'n,,', base64-encoded\n\n  // override if channel binding is in use:\n  if (session.mechanism === 'SCRAM-SHA-256-PLUS') {\n    const peerCert = stream.getPeerCertificate().raw\n    let hashName = signatureAlgorithmHashFromCertificate(peerCert)\n    if (hashName === 'MD5' || hashName === 'SHA-1') hashName = 'SHA-256'\n    const certHash = await crypto.hashByName(hashName, peerCert)\n    const bindingData = Buffer.concat([Buffer.from('p=tls-server-end-point,,'), Buffer.from(certHash)])\n    channelBinding = bindingData.toString('base64')\n  }\n\n  const clientFinalMessageWithoutProof = 'c=' + channelBinding + ',r=' + sv.nonce\n  const authMessage = clientFirstMessageBare + ',' + serverFirstMessage + ',' + clientFinalMessageWithoutProof\n\n  const saltBytes = Buffer.from(sv.salt, 'base64')\n  const saltedPassword = await crypto.deriveKey(saslprep(password), saltBytes, sv.iteration)\n  const clientKey = await crypto.hmacSha256(saltedPassword, 'Client Key')\n  const storedKey = await crypto.sha256(clientKey)\n  const clientSignature = await crypto.hmacSha256(storedKey, authMessage)\n  const clientProof = xorBuffers(Buffer.from(clientKey), Buffer.from(clientSignature)).toString('base64')\n  const serverKey = await crypto.hmacSha256(saltedPassword, 'Server Key')\n  const serverSignatureBytes = await crypto.hmacSha256(serverKey, authMessage)\n\n  session.message = 'SASLResponse'\n  session.serverSignature = Buffer.from(serverSignatureBytes).toString('base64')\n  session.response = clientFinalMessageWithoutProof + ',p=' + clientProof\n}\n\nfunction finalizeSession(session, serverData) {\n  if (session.message !== 'SASLResponse') {\n    throw new Error('SASL: Last message was not SASLResponse')\n  }\n  if (typeof serverData !== 'string') {\n    throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: serverData must be a string')\n  }\n\n  const { serverSignature } = parseServerFinalMessage(serverData)\n\n  if (serverSignature !== session.serverSignature) {\n    throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature does not match')\n  }\n}\n\n/**\n * printable       = %x21-2B / %x2D-7E\n *                   ;; Printable ASCII except \",\".\n *                   ;; Note that any \"printable\" is also\n *                   ;; a valid \"value\".\n */\nfunction isPrintableChars(text) {\n  if (typeof text !== 'string') {\n    throw new TypeError('SASL: text must be a string')\n  }\n  return text\n    .split('')\n    .map((_, i) => text.charCodeAt(i))\n    .every((c) => (c >= 0x21 && c <= 0x2b) || (c >= 0x2d && c <= 0x7e))\n}\n\n/**\n * base64-char     = ALPHA / DIGIT / \"/\" / \"+\"\n *\n * base64-4        = 4base64-char\n *\n * base64-3        = 3base64-char \"=\"\n *\n * base64-2        = 2base64-char \"==\"\n *\n * base64          = *base64-4 [base64-3 / base64-2]\n */\nfunction isBase64(text) {\n  return /^(?:[a-zA-Z0-9+/]{4})*(?:[a-zA-Z0-9+/]{2}==|[a-zA-Z0-9+/]{3}=)?$/.test(text)\n}\n\nfunction parseAttributePairs(text) {\n  if (typeof text !== 'string') {\n    throw new TypeError('SASL: attribute pairs text must be a string')\n  }\n\n  return new Map(\n    text.split(',').map((attrValue) => {\n      if (!/^.=/.test(attrValue)) {\n        throw new Error('SASL: Invalid attribute pair entry')\n      }\n      const name = attrValue[0]\n      const value = attrValue.substring(2)\n      return [name, value]\n    })\n  )\n}\n\nfunction parseServerFirstMessage(data) {\n  const attrPairs = parseAttributePairs(data)\n\n  const nonce = attrPairs.get('r')\n  if (!nonce) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce missing')\n  } else if (!isPrintableChars(nonce)) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce must only contain printable characters')\n  }\n  const salt = attrPairs.get('s')\n  if (!salt) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: salt missing')\n  } else if (!isBase64(salt)) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: salt must be base64')\n  }\n  const iterationText = attrPairs.get('i')\n  if (!iterationText) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: iteration missing')\n  } else if (!/^[1-9][0-9]*$/.test(iterationText)) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: invalid iteration count')\n  }\n  const iteration = parseInt(iterationText, 10)\n\n  return {\n    nonce,\n    salt,\n    iteration,\n  }\n}\n\nfunction parseServerFinalMessage(serverData) {\n  const attrPairs = parseAttributePairs(serverData)\n  const error = attrPairs.get('e')\n  const serverSignature = attrPairs.get('v')\n\n  if (error) {\n    throw new Error(`SASL: SCRAM-SERVER-FINAL-MESSAGE: server returned error: \"${error}\"`)\n  }\n\n  if (!serverSignature) {\n    throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature is missing')\n  } else if (!isBase64(serverSignature)) {\n    throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature must be base64')\n  }\n  return {\n    serverSignature,\n  }\n}\n\nfunction xorBuffers(a, b) {\n  if (!Buffer.isBuffer(a)) {\n    throw new TypeError('first argument must be a Buffer')\n  }\n  if (!Buffer.isBuffer(b)) {\n    throw new TypeError('second argument must be a Buffer')\n  }\n  if (a.length !== b.length) {\n    throw new Error('Buffer lengths must match')\n  }\n  if (a.length === 0) {\n    throw new Error('Buffers cannot be empty')\n  }\n  return Buffer.from(a.map((_, i) => a[i] ^ b[i]))\n}\n\nmodule.exports = {\n  startSession,\n  continueSession,\n  finalizeSession,\n  DEFAULT_MAX_SCRAM_ITERATIONS,\n}\n","'use strict'\n\nconst types = require('pg-types')\n\nfunction TypeOverrides(userTypes) {\n  this._types = userTypes || types\n  this.text = {}\n  this.binary = {}\n}\n\nTypeOverrides.prototype.getOverrides = function (format) {\n  switch (format) {\n    case 'text':\n      return this.text\n    case 'binary':\n      return this.binary\n    default:\n      return {}\n  }\n}\n\nTypeOverrides.prototype.setTypeParser = function (oid, format, parseFn) {\n  if (typeof format === 'function') {\n    parseFn = format\n    format = 'text'\n  }\n  this.getOverrides(format)[oid] = parseFn\n}\n\nTypeOverrides.prototype.getTypeParser = function (oid, format) {\n  format = format || 'text'\n  return this.getOverrides(format)[oid] || this._types.getTypeParser(oid, format)\n}\n\nmodule.exports = TypeOverrides\n","'use strict'\n\n//Parse method copied from https://github.com/brianc/node-postgres\n//Copyright (c) 2010-2014 Brian Carlson (brian.m.carlson@gmail.com)\n//MIT License\n\n//parses a connection string\nfunction parse(str, options = {}) {\n  //unix socket\n  if (str.charAt(0) === '/') {\n    const config = str.split(' ')\n    return { host: config[0], database: config[1] }\n  }\n\n  // Check for empty host in URL\n\n  const config = Object.create(null)\n  let result\n  let dummyHost = false\n  if (/ |%[^a-f0-9]|%[a-f0-9][^a-f0-9]/i.test(str)) {\n    // Ensure spaces are encoded as %20\n    str = encodeURI(str).replace(/%25(\\d\\d)/g, '%$1')\n  }\n\n  try {\n    try {\n      result = new URL(str, 'postgres://base')\n    } catch (e) {\n      // The URL is invalid so try again with a dummy host\n      result = new URL(str.replace('@/', '@___DUMMY___/'), 'postgres://base')\n      dummyHost = true\n    }\n  } catch (err) {\n    // Remove the input from the error message to avoid leaking sensitive information\n    err.input && (err.input = '*****REDACTED*****')\n    throw err\n  }\n\n  // We'd like to use Object.fromEntries() here but Node.js 10 does not support it\n  for (const entry of result.searchParams.entries()) {\n    config[entry[0]] = entry[1]\n  }\n\n  config.user = config.user || decodeURIComponent(result.username)\n  config.password = config.password || decodeURIComponent(result.password)\n\n  if (result.protocol == 'socket:') {\n    config.host = decodeURI(result.pathname)\n    config.database = result.searchParams.get('db')\n    config.client_encoding = result.searchParams.get('encoding')\n    return config\n  }\n  const hostname = dummyHost ? '' : result.hostname\n  if (!config.host) {\n    // Only set the host if there is no equivalent query param.\n    config.host = decodeURIComponent(hostname)\n  } else if (hostname && /^%2f/i.test(hostname)) {\n    // Only prepend the hostname to the pathname if it is not a URL encoded Unix socket host.\n    result.pathname = hostname + result.pathname\n  }\n  if (!config.port) {\n    // Only set the port if there is no equivalent query param.\n    config.port = result.port\n  }\n\n  const pathname = result.pathname.slice(1) || null\n  config.database = pathname ? decodeURI(pathname) : null\n\n  if (config.ssl === 'true' || config.ssl === '1') {\n    config.ssl = true\n  }\n\n  if (config.ssl === '0') {\n    config.ssl = false\n  }\n\n  if (config.sslcert || config.sslkey || config.sslrootcert || config.sslmode) {\n    config.ssl = {}\n  }\n\n  // sslnegotiation=direct implies SSL is in use (libpq requires sslmode>=require),\n  // so enable SSL if the connection string did not otherwise configure it.\n  if (config.sslnegotiation === 'direct' && config.ssl === undefined) {\n    config.ssl = true\n  }\n\n  // Only try to load fs if we expect to read from the disk\n  const fs = config.sslcert || config.sslkey || config.sslrootcert ? require('fs') : null\n\n  if (config.sslcert) {\n    config.ssl.cert = fs.readFileSync(config.sslcert).toString()\n  }\n\n  if (config.sslkey) {\n    config.ssl.key = fs.readFileSync(config.sslkey).toString()\n  }\n\n  if (config.sslrootcert) {\n    config.ssl.ca = fs.readFileSync(config.sslrootcert).toString()\n  }\n\n  if (options.useLibpqCompat && config.uselibpqcompat) {\n    throw new Error('Both useLibpqCompat and uselibpqcompat are set. Please use only one of them.')\n  }\n\n  if (config.uselibpqcompat === 'true' || options.useLibpqCompat) {\n    switch (config.sslmode) {\n      case 'disable': {\n        config.ssl = false\n        break\n      }\n      case 'prefer': {\n        config.ssl.rejectUnauthorized = false\n        break\n      }\n      case 'require': {\n        if (config.sslrootcert) {\n          // If a root CA is specified, behavior of `sslmode=require` will be the same as that of `verify-ca`\n          config.ssl.checkServerIdentity = function () {}\n        } else {\n          config.ssl.rejectUnauthorized = false\n        }\n        break\n      }\n      case 'verify-ca': {\n        if (!config.ssl.ca) {\n          throw new Error(\n            'SECURITY WARNING: Using sslmode=verify-ca requires specifying a CA with sslrootcert. If a public CA is used, verify-ca allows connections to a server that somebody else may have registered with the CA, making you vulnerable to Man-in-the-Middle attacks. Either specify a custom CA certificate with sslrootcert parameter or use sslmode=verify-full for proper security.'\n          )\n        }\n        config.ssl.checkServerIdentity = function () {}\n        break\n      }\n      case 'verify-full': {\n        break\n      }\n    }\n  } else {\n    switch (config.sslmode) {\n      case 'disable': {\n        config.ssl = false\n        break\n      }\n      case 'prefer':\n      case 'require':\n      case 'verify-ca':\n      case 'verify-full': {\n        if (config.sslmode !== 'verify-full') {\n          deprecatedSslModeWarning(config.sslmode)\n        }\n        break\n      }\n      case 'no-verify': {\n        config.ssl.rejectUnauthorized = false\n        break\n      }\n    }\n  }\n\n  return config\n}\n\n// convert pg-connection-string ssl config to a ClientConfig.ConnectionOptions\nfunction toConnectionOptions(sslConfig) {\n  const connectionOptions = Object.entries(sslConfig).reduce((c, [key, value]) => {\n    // we explicitly check for undefined and null instead of `if (value)` because some\n    // options accept falsy values. Example: `ssl.rejectUnauthorized = false`\n    if (value !== undefined && value !== null) {\n      c[key] = value\n    }\n\n    return c\n  }, Object.create(null))\n\n  return connectionOptions\n}\n\n// convert pg-connection-string config to a ClientConfig\nfunction toClientConfig(config) {\n  const poolConfig = Object.entries(config).reduce((c, [key, value]) => {\n    if (key === 'ssl') {\n      const sslConfig = value\n\n      if (typeof sslConfig === 'boolean') {\n        c[key] = sslConfig\n      }\n\n      if (typeof sslConfig === 'object') {\n        c[key] = toConnectionOptions(sslConfig)\n      }\n    } else if (value !== undefined && value !== null) {\n      if (key === 'port') {\n        // when port is not specified, it is converted into an empty string\n        // we want to avoid NaN or empty string as a values in ClientConfig\n        if (value !== '') {\n          const v = parseInt(value, 10)\n          if (isNaN(v)) {\n            throw new Error(`Invalid ${key}: ${value}`)\n          }\n\n          c[key] = v\n        }\n      } else {\n        c[key] = value\n      }\n    }\n\n    return c\n  }, Object.create(null))\n\n  return poolConfig\n}\n\n// parses a connection string into ClientConfig\nfunction parseIntoClientConfig(str) {\n  return toClientConfig(parse(str))\n}\n\nfunction deprecatedSslModeWarning(sslmode) {\n  if (!deprecatedSslModeWarning.warned && typeof process !== 'undefined' && process.emitWarning) {\n    deprecatedSslModeWarning.warned = true\n    process.emitWarning(`SECURITY WARNING: The SSL modes 'prefer', 'require', and 'verify-ca' are treated as aliases for 'verify-full'.\nIn the next major version (pg-connection-string v3.0.0 and pg v9.0.0), these modes will adopt standard libpq semantics, which have weaker security guarantees.\n\nTo prepare for this change:\n- If you want the current behavior, explicitly use 'sslmode=verify-full'\n- If you want libpq compatibility now, use 'uselibpqcompat=true&sslmode=${sslmode}'\n\nSee https://www.postgresql.org/docs/current/libpq-ssl.html for libpq SSL mode definitions.`)\n  }\n}\n\nmodule.exports = parse\n\nparse.parse = parse\nparse.toClientConfig = toClientConfig\nparse.parseIntoClientConfig = parseIntoClientConfig\n","'use strict'\n\nconst dns = require('dns')\n\nconst defaults = require('./defaults')\n\nconst parse = require('pg-connection-string').parse // parses a connection string\n\nconst val = function (key, config, envVar) {\n  if (config[key]) {\n    return config[key]\n  }\n\n  if (envVar === undefined) {\n    envVar = process.env['PG' + key.toUpperCase()]\n  } else if (envVar === false) {\n    // do nothing ... use false\n  } else {\n    envVar = process.env[envVar]\n  }\n\n  return envVar || defaults[key]\n}\n\nconst readSSLConfigFromEnvironment = function () {\n  switch (process.env.PGSSLMODE) {\n    case 'disable':\n      return false\n    case 'prefer':\n    case 'require':\n    case 'verify-ca':\n    case 'verify-full':\n      return true\n    case 'no-verify':\n      return { rejectUnauthorized: false }\n  }\n  return defaults.ssl\n}\n\n// Convert arg to a string, surround in single quotes, and escape single quotes and backslashes\nconst quoteParamValue = function (value) {\n  return \"'\" + ('' + value).replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\") + \"'\"\n}\n\nconst add = function (params, config, paramName) {\n  const value = config[paramName]\n  if (value !== undefined && value !== null) {\n    params.push(paramName + '=' + quoteParamValue(value))\n  }\n}\n\nclass ConnectionParameters {\n  constructor(config) {\n    // if a string is passed, it is a raw connection string so we parse it into a config\n    config = typeof config === 'string' ? parse(config) : config || {}\n\n    // if the config has a connectionString defined, parse IT into the config we use\n    // this will override other default values with what is stored in connectionString\n    if (config.connectionString) {\n      config = Object.assign({}, config, parse(config.connectionString))\n    }\n\n    this.user = val('user', config)\n    this.database = val('database', config)\n\n    if (this.database === undefined) {\n      this.database = this.user\n    }\n\n    this.port = parseInt(val('port', config), 10)\n    this.host = val('host', config)\n\n    // \"hiding\" the password so it doesn't show up in stack traces\n    // or if the client is console.logged\n    Object.defineProperty(this, 'password', {\n      configurable: true,\n      enumerable: false,\n      writable: true,\n      value: val('password', config),\n    })\n\n    this.binary = val('binary', config)\n    this.options = val('options', config)\n\n    this.ssl = typeof config.ssl === 'undefined' ? readSSLConfigFromEnvironment() : config.ssl\n\n    if (typeof this.ssl === 'string') {\n      if (this.ssl === 'true') {\n        this.ssl = true\n      }\n    }\n    // support passing in ssl=no-verify via connection string\n    if (this.ssl === 'no-verify') {\n      this.ssl = { rejectUnauthorized: false }\n    }\n    if (this.ssl && this.ssl.key) {\n      Object.defineProperty(this.ssl, 'key', {\n        enumerable: false,\n      })\n    }\n\n    // How to negotiate SSL: 'postgres' (default, the traditional SSLRequest\n    // handshake) or 'direct' (start the TLS handshake immediately on connect).\n    this.sslnegotiation = val('sslnegotiation', config, 'PGSSLNEGOTIATION')\n    if (this.sslnegotiation !== undefined && this.sslnegotiation !== 'postgres' && this.sslnegotiation !== 'direct') {\n      throw new Error(\n        `Invalid sslnegotiation value: \"${this.sslnegotiation}\". Valid values are \"postgres\" and \"direct\".`\n      )\n    }\n    if (this.sslnegotiation === 'direct' && !this.ssl) {\n      throw new Error('sslnegotiation=direct requires SSL to be enabled')\n    }\n\n    this.client_encoding = val('client_encoding', config)\n    this.replication = val('replication', config)\n    // a domain socket begins with '/'\n    this.isDomainSocket = !(this.host || '').indexOf('/')\n\n    this.application_name = val('application_name', config, 'PGAPPNAME')\n    this.fallback_application_name = val('fallback_application_name', config, false)\n    this.statement_timeout = val('statement_timeout', config, false)\n    this.lock_timeout = val('lock_timeout', config, false)\n    this.idle_in_transaction_session_timeout = val('idle_in_transaction_session_timeout', config, false)\n    this.query_timeout = val('query_timeout', config, false)\n\n    if (config.connectionTimeoutMillis === undefined) {\n      this.connect_timeout = process.env.PGCONNECT_TIMEOUT || 0\n    } else {\n      this.connect_timeout = Math.floor(config.connectionTimeoutMillis / 1000)\n    }\n\n    if (config.keepAlive === false) {\n      this.keepalives = 0\n    } else if (config.keepAlive === true) {\n      this.keepalives = 1\n    }\n\n    if (typeof config.keepAliveInitialDelayMillis === 'number') {\n      this.keepalives_idle = Math.floor(config.keepAliveInitialDelayMillis / 1000)\n    }\n  }\n\n  getLibpqConnectionString(cb) {\n    const params = []\n    add(params, this, 'user')\n    add(params, this, 'password')\n    add(params, this, 'port')\n    add(params, this, 'application_name')\n    add(params, this, 'fallback_application_name')\n    add(params, this, 'connect_timeout')\n    add(params, this, 'options')\n\n    const ssl = typeof this.ssl === 'object' ? this.ssl : this.ssl ? { sslmode: this.ssl } : {}\n    add(params, ssl, 'sslmode')\n    add(params, ssl, 'sslca')\n    add(params, ssl, 'sslkey')\n    add(params, ssl, 'sslcert')\n    add(params, ssl, 'sslrootcert')\n    add(params, this, 'sslnegotiation')\n\n    if (this.database) {\n      params.push('dbname=' + quoteParamValue(this.database))\n    }\n    if (this.replication) {\n      params.push('replication=' + quoteParamValue(this.replication))\n    }\n    if (this.host) {\n      params.push('host=' + quoteParamValue(this.host))\n    }\n    if (this.isDomainSocket) {\n      return cb(null, params.join(' '))\n    }\n    if (this.client_encoding) {\n      params.push('client_encoding=' + quoteParamValue(this.client_encoding))\n    }\n    dns.lookup(this.host, function (err, address) {\n      if (err) return cb(err, null)\n      params.push('hostaddr=' + quoteParamValue(address))\n      return cb(null, params.join(' '))\n    })\n  }\n}\n\nmodule.exports = ConnectionParameters\n","'use strict'\n\nconst types = require('pg-types')\n\nconst matchRegexp = /^([A-Za-z]+)(?: (\\d+))?(?: (\\d+))?/\n\n// result object returned from query\n// in the 'end' event and also\n// passed as second argument to provided callback\nclass Result {\n  constructor(rowMode, types) {\n    this.command = null\n    this.rowCount = null\n    this.oid = null\n    this.rows = []\n    this.fields = []\n    this._parsers = undefined\n    this._types = types\n    this.RowCtor = null\n    this.rowAsArray = rowMode === 'array'\n    if (this.rowAsArray) {\n      this.parseRow = this._parseRowAsArray\n    }\n    this._prebuiltEmptyResultObject = null\n  }\n\n  // adds a command complete message\n  addCommandComplete(msg) {\n    let match\n    if (msg.text) {\n      // pure javascript\n      match = matchRegexp.exec(msg.text)\n    } else {\n      // native bindings\n      match = matchRegexp.exec(msg.command)\n    }\n    if (match) {\n      this.command = match[1]\n      if (match[3]) {\n        // COMMAND OID ROWS\n        this.oid = parseInt(match[2], 10)\n        this.rowCount = parseInt(match[3], 10)\n      } else if (match[2]) {\n        // COMMAND ROWS\n        this.rowCount = parseInt(match[2], 10)\n      }\n    }\n  }\n\n  _parseRowAsArray(rowData) {\n    const row = new Array(rowData.length)\n    for (let i = 0, len = rowData.length; i < len; i++) {\n      const rawValue = rowData[i]\n      if (rawValue !== null) {\n        row[i] = this._parsers[i](rawValue)\n      } else {\n        row[i] = null\n      }\n    }\n    return row\n  }\n\n  parseRow(rowData) {\n    const row = { ...this._prebuiltEmptyResultObject }\n    for (let i = 0, len = rowData.length; i < len; i++) {\n      const rawValue = rowData[i]\n      const field = this.fields[i].name\n      if (rawValue !== null) {\n        const v = this.fields[i].format === 'binary' ? Buffer.from(rawValue) : rawValue\n        row[field] = this._parsers[i](v)\n      } else {\n        row[field] = null\n      }\n    }\n    return row\n  }\n\n  addRow(row) {\n    this.rows.push(row)\n  }\n\n  addFields(fieldDescriptions) {\n    // clears field definitions\n    // multiple query statements in 1 action can result in multiple sets\n    // of rowDescriptions...eg: 'select NOW(); select 1::int;'\n    // you need to reset the fields\n    this.fields = fieldDescriptions\n    if (this.fields.length) {\n      this._parsers = new Array(fieldDescriptions.length)\n    }\n\n    const row = Object.create(null)\n\n    for (let i = 0; i < fieldDescriptions.length; i++) {\n      const desc = fieldDescriptions[i]\n      row[desc.name] = null\n\n      if (this._types) {\n        this._parsers[i] = this._types.getTypeParser(desc.dataTypeID, desc.format || 'text')\n      } else {\n        this._parsers[i] = types.getTypeParser(desc.dataTypeID, desc.format || 'text')\n      }\n    }\n\n    this._prebuiltEmptyResultObject = { ...row }\n  }\n}\n\nmodule.exports = Result\n","'use strict'\n\nconst { EventEmitter } = require('events')\n\nconst Result = require('./result')\nconst utils = require('./utils')\n\nclass Query extends EventEmitter {\n  constructor(config, values, callback) {\n    super()\n\n    config = utils.normalizeQueryConfig(config, values, callback)\n\n    this.text = config.text\n    this.values = config.values\n    this.rows = config.rows\n    this.types = config.types\n    this.name = config.name\n    this.queryMode = config.queryMode\n    this.binary = config.binary\n    // use unique portal name each time\n    this.portal = config.portal || ''\n    this.callback = config.callback\n    this._rowMode = config.rowMode\n    if (process.domain && config.callback) {\n      this.callback = process.domain.bind(config.callback)\n    }\n    this._result = new Result(this._rowMode, this.types)\n\n    // potential for multiple results\n    this._results = this._result\n    this._canceledDueToError = false\n  }\n\n  requiresPreparation() {\n    if (this.queryMode === 'extended') {\n      return true\n    }\n\n    // named queries must always be prepared\n    if (this.name) {\n      return true\n    }\n    // always prepare if there are max number of rows expected per\n    // portal execution\n    if (this.rows) {\n      return true\n    }\n    // don't prepare empty text queries\n    if (!this.text) {\n      return false\n    }\n    // prepare if there are values\n    if (!this.values) {\n      return false\n    }\n    return this.values.length > 0\n  }\n\n  _checkForMultirow() {\n    // if we already have a result with a command property\n    // then we've already executed one query in a multi-statement simple query\n    // turn our results into an array of results\n    if (this._result.command) {\n      if (!Array.isArray(this._results)) {\n        this._results = [this._result]\n      }\n      this._result = new Result(this._rowMode, this._result._types)\n      this._results.push(this._result)\n    }\n  }\n\n  // associates row metadata from the supplied\n  // message with this query object\n  // metadata used when parsing row results\n  handleRowDescription(msg) {\n    this._checkForMultirow()\n    this._result.addFields(msg.fields)\n    this._accumulateRows = this.callback || !this.listeners('row').length\n  }\n\n  handleDataRow(msg) {\n    let row\n\n    if (this._canceledDueToError) {\n      return\n    }\n\n    try {\n      row = this._result.parseRow(msg.fields)\n    } catch (err) {\n      this._canceledDueToError = err\n      return\n    }\n\n    this.emit('row', row, this._result)\n    if (this._accumulateRows) {\n      this._result.addRow(row)\n    }\n  }\n\n  handleCommandComplete(msg, connection) {\n    this._checkForMultirow()\n    this._result.addCommandComplete(msg)\n    // need to sync after each command complete of a prepared statement\n    // if we were using a row count which results in multiple calls to _getRows\n    if (this.rows) {\n      connection.sync()\n    }\n  }\n\n  // if a named prepared statement is created with empty query text\n  // the backend will send an emptyQuery message but *not* a command complete message\n  // since we pipeline sync immediately after execute we don't need to do anything here\n  // unless we have rows specified, in which case we did not pipeline the initial sync call\n  handleEmptyQuery(connection) {\n    if (this.rows) {\n      connection.sync()\n    }\n  }\n\n  handleError(err, connection) {\n    // need to sync after error during a prepared statement\n    if (this._canceledDueToError) {\n      err = this._canceledDueToError\n      this._canceledDueToError = false\n    }\n    // if callback supplied do not emit error event as uncaught error\n    // events will bubble up to node process\n    if (this.callback) {\n      return this.callback(err)\n    }\n    this.emit('error', err)\n  }\n\n  handleReadyForQuery(con) {\n    if (this._canceledDueToError) {\n      return this.handleError(this._canceledDueToError, con)\n    }\n    if (this.callback) {\n      try {\n        this.callback(null, this._results)\n      } catch (err) {\n        process.nextTick(() => {\n          throw err\n        })\n      }\n    }\n    this.emit('end', this._results)\n  }\n\n  submit(connection) {\n    if (typeof this.text !== 'string' && typeof this.name !== 'string') {\n      return new Error('A query must have either text or a name. Supplying neither is unsupported.')\n    }\n    const previous = connection.parsedStatements[this.name]\n    if (this.text && previous && this.text !== previous) {\n      return new Error(`Prepared statements must be unique - '${this.name}' was used for a different statement`)\n    }\n    if (this.values && !Array.isArray(this.values)) {\n      return new Error('Query values must be an array')\n    }\n    if (this.requiresPreparation()) {\n      // If we're using the extended query protocol we fire off several separate commands\n      // to the backend. On some versions of node & some operating system versions\n      // the network stack writes each message separately instead of buffering them together\n      // causing the client & network to send more slowly. Corking & uncorking the stream\n      // allows node to buffer up the messages internally before sending them all off at once.\n      // note: we're checking for existence of cork/uncork because some versions of streams\n      // might not have this (cloudflare?)\n      connection.stream.cork && connection.stream.cork()\n      try {\n        this.prepare(connection)\n      } finally {\n        // while unlikely for this.prepare to throw, if it does & we don't uncork this stream\n        // this client becomes unresponsive, so put in finally block \"just in case\"\n        connection.stream.uncork && connection.stream.uncork()\n      }\n    } else {\n      connection.query(this.text)\n    }\n    return null\n  }\n\n  hasBeenParsed(connection) {\n    return this.name && connection.parsedStatements[this.name]\n  }\n\n  handlePortalSuspended(connection) {\n    this._getRows(connection, this.rows)\n  }\n\n  _getRows(connection, rows) {\n    connection.execute({\n      portal: this.portal,\n      rows: rows,\n    })\n    // if we're not reading pages of rows send the sync command\n    // to indicate the pipeline is finished\n    if (!rows) {\n      connection.sync()\n    } else {\n      // otherwise flush the call out to read more rows\n      connection.flush()\n    }\n  }\n\n  // http://developer.postgresql.org/pgdocs/postgres/protocol-flow.html#PROTOCOL-FLOW-EXT-QUERY\n  prepare(connection) {\n    // TODO refactor this poor encapsulation\n    if (!this.hasBeenParsed(connection)) {\n      connection.parse({\n        text: this.text,\n        name: this.name,\n        types: this.types,\n      })\n    }\n\n    // because we're mapping user supplied values to\n    // postgres wire protocol compatible values it could\n    // throw an exception, so try/catch this section\n    try {\n      connection.bind({\n        portal: this.portal,\n        statement: this.name,\n        values: this.values,\n        binary: this.binary,\n        valueMapper: utils.prepareValue,\n      })\n    } catch (err) {\n      // we should close parse to avoid leaking connections\n      connection.close({ type: 'S', name: this.name })\n      connection.sync()\n\n      this.handleError(err, connection)\n      return\n    }\n\n    connection.describe({\n      type: 'P',\n      name: this.portal || '',\n    })\n\n    this._getRows(connection, this.rows)\n  }\n\n  handleCopyInResponse(connection) {\n    connection.sendCopyFail('No source stream defined')\n  }\n\n  handleCopyData(msg, connection) {\n    // noop\n  }\n}\n\nmodule.exports = Query\n","export type Mode = 'text' | 'binary'\n\nexport type MessageName =\n  | 'parseComplete'\n  | 'bindComplete'\n  | 'closeComplete'\n  | 'noData'\n  | 'portalSuspended'\n  | 'replicationStart'\n  | 'emptyQuery'\n  | 'copyDone'\n  | 'copyData'\n  | 'rowDescription'\n  | 'parameterDescription'\n  | 'parameterStatus'\n  | 'backendKeyData'\n  | 'notification'\n  | 'readyForQuery'\n  | 'commandComplete'\n  | 'dataRow'\n  | 'copyInResponse'\n  | 'copyOutResponse'\n  | 'authenticationOk'\n  | 'authenticationMD5Password'\n  | 'authenticationCleartextPassword'\n  | 'authenticationSASL'\n  | 'authenticationSASLContinue'\n  | 'authenticationSASLFinal'\n  | 'error'\n  | 'notice'\n\nexport interface BackendMessage {\n  name: MessageName\n  length: number\n}\n\nexport const parseComplete: BackendMessage = {\n  name: 'parseComplete',\n  length: 5,\n}\n\nexport const bindComplete: BackendMessage = {\n  name: 'bindComplete',\n  length: 5,\n}\n\nexport const closeComplete: BackendMessage = {\n  name: 'closeComplete',\n  length: 5,\n}\n\nexport const noData: BackendMessage = {\n  name: 'noData',\n  length: 5,\n}\n\nexport const portalSuspended: BackendMessage = {\n  name: 'portalSuspended',\n  length: 5,\n}\n\nexport const replicationStart: BackendMessage = {\n  name: 'replicationStart',\n  length: 4,\n}\n\nexport const emptyQuery: BackendMessage = {\n  name: 'emptyQuery',\n  length: 4,\n}\n\nexport const copyDone: BackendMessage = {\n  name: 'copyDone',\n  length: 4,\n}\n\ninterface NoticeOrError {\n  message: string | undefined\n  severity: string | undefined\n  code: string | undefined\n  detail: string | undefined\n  hint: string | undefined\n  position: string | undefined\n  internalPosition: string | undefined\n  internalQuery: string | undefined\n  where: string | undefined\n  schema: string | undefined\n  table: string | undefined\n  column: string | undefined\n  dataType: string | undefined\n  constraint: string | undefined\n  file: string | undefined\n  line: string | undefined\n  routine: string | undefined\n}\n\nexport class DatabaseError extends Error implements NoticeOrError {\n  public severity: string | undefined\n  public code: string | undefined\n  public detail: string | undefined\n  public hint: string | undefined\n  public position: string | undefined\n  public internalPosition: string | undefined\n  public internalQuery: string | undefined\n  public where: string | undefined\n  public schema: string | undefined\n  public table: string | undefined\n  public column: string | undefined\n  public dataType: string | undefined\n  public constraint: string | undefined\n  public file: string | undefined\n  public line: string | undefined\n  public routine: string | undefined\n  constructor(\n    message: string,\n    public readonly length: number,\n    public readonly name: MessageName\n  ) {\n    super(message)\n  }\n}\n\nexport class CopyDataMessage {\n  public readonly name = 'copyData'\n  constructor(\n    public readonly length: number,\n    public readonly chunk: Buffer\n  ) {}\n}\n\nexport class CopyResponse {\n  public readonly columnTypes: number[]\n  constructor(\n    public readonly length: number,\n    public readonly name: MessageName,\n    public readonly binary: boolean,\n    columnCount: number\n  ) {\n    this.columnTypes = new Array(columnCount)\n  }\n}\n\nexport class Field {\n  constructor(\n    public readonly name: string,\n    public readonly tableID: number,\n    public readonly columnID: number,\n    public readonly dataTypeID: number,\n    public readonly dataTypeSize: number,\n    public readonly dataTypeModifier: number,\n    public readonly format: Mode\n  ) {}\n}\n\nexport class RowDescriptionMessage {\n  public readonly name: MessageName = 'rowDescription'\n  public readonly fields: Field[]\n  constructor(\n    public readonly length: number,\n    public readonly fieldCount: number\n  ) {\n    this.fields = new Array(this.fieldCount)\n  }\n}\n\nexport class ParameterDescriptionMessage {\n  public readonly name: MessageName = 'parameterDescription'\n  public readonly dataTypeIDs: number[]\n  constructor(\n    public readonly length: number,\n    public readonly parameterCount: number\n  ) {\n    this.dataTypeIDs = new Array(this.parameterCount)\n  }\n}\n\nexport class ParameterStatusMessage {\n  public readonly name: MessageName = 'parameterStatus'\n  constructor(\n    public readonly length: number,\n    public readonly parameterName: string,\n    public readonly parameterValue: string\n  ) {}\n}\n\nexport class AuthenticationMD5Password implements BackendMessage {\n  public readonly name: MessageName = 'authenticationMD5Password'\n  constructor(\n    public readonly length: number,\n    public readonly salt: Buffer\n  ) {}\n}\n\nexport class BackendKeyDataMessage {\n  public readonly name: MessageName = 'backendKeyData'\n  constructor(\n    public readonly length: number,\n    public readonly processID: number,\n    public readonly secretKey: number\n  ) {}\n}\n\nexport class NotificationResponseMessage {\n  public readonly name: MessageName = 'notification'\n  constructor(\n    public readonly length: number,\n    public readonly processId: number,\n    public readonly channel: string,\n    public readonly payload: string\n  ) {}\n}\n\nexport class ReadyForQueryMessage {\n  public readonly name: MessageName = 'readyForQuery'\n  constructor(\n    public readonly length: number,\n    public readonly status: string\n  ) {}\n}\n\nexport class CommandCompleteMessage {\n  public readonly name: MessageName = 'commandComplete'\n  constructor(\n    public readonly length: number,\n    public readonly text: string\n  ) {}\n}\n\nexport class DataRowMessage {\n  public readonly fieldCount: number\n  public readonly name: MessageName = 'dataRow'\n  constructor(\n    public length: number,\n    public fields: any[]\n  ) {\n    this.fieldCount = fields.length\n  }\n}\n\nexport class NoticeMessage implements BackendMessage, NoticeOrError {\n  constructor(\n    public readonly length: number,\n    public readonly message: string | undefined\n  ) {}\n  public readonly name = 'notice'\n  public severity: string | undefined\n  public code: string | undefined\n  public detail: string | undefined\n  public hint: string | undefined\n  public position: string | undefined\n  public internalPosition: string | undefined\n  public internalQuery: string | undefined\n  public where: string | undefined\n  public schema: string | undefined\n  public table: string | undefined\n  public column: string | undefined\n  public dataType: string | undefined\n  public constraint: string | undefined\n  public file: string | undefined\n  public line: string | undefined\n  public routine: string | undefined\n}\n","//binary data writer tuned for encoding binary specific to the postgres binary protocol\n\nexport class Writer {\n  private buffer: Buffer\n  private offset: number = 5\n  private headerPosition: number = 0\n  constructor(private size = 256) {\n    this.buffer = Buffer.allocUnsafe(size)\n  }\n\n  private ensure(size: number): void {\n    const remaining = this.buffer.length - this.offset\n    if (remaining < size) {\n      const oldBuffer = this.buffer\n      // exponential growth factor of around ~ 1.5\n      // https://stackoverflow.com/questions/2269063/buffer-growth-strategy\n      const newSize = oldBuffer.length + (oldBuffer.length >> 1) + size\n      this.buffer = Buffer.allocUnsafe(newSize)\n      oldBuffer.copy(this.buffer)\n    }\n  }\n\n  public addInt32(num: number): Writer {\n    this.ensure(4)\n    this.buffer[this.offset++] = (num >>> 24) & 0xff\n    this.buffer[this.offset++] = (num >>> 16) & 0xff\n    this.buffer[this.offset++] = (num >>> 8) & 0xff\n    this.buffer[this.offset++] = (num >>> 0) & 0xff\n    return this\n  }\n\n  public addInt16(num: number): Writer {\n    this.ensure(2)\n    this.buffer[this.offset++] = (num >>> 8) & 0xff\n    this.buffer[this.offset++] = (num >>> 0) & 0xff\n    return this\n  }\n\n  public addCString(string: string): Writer {\n    if (!string) {\n      this.ensure(1)\n    } else {\n      const len = Buffer.byteLength(string)\n      this.ensure(len + 1) // +1 for null terminator\n      this.buffer.write(string, this.offset, 'utf-8')\n      this.offset += len\n    }\n\n    this.buffer[this.offset++] = 0 // null terminator\n    return this\n  }\n\n  public addString(string: string = ''): Writer {\n    const len = Buffer.byteLength(string)\n    this.ensure(len)\n    this.buffer.write(string, this.offset)\n    this.offset += len\n    return this\n  }\n\n  // Write an Int32 byte-length prefix immediately followed by the string's UTF-8\n  // bytes. Postgres' Bind wire format prefixes every parameter with its length,\n  // and doing it in one method computes Buffer.byteLength ONCE — the previous\n  // `addInt32(Buffer.byteLength(s)).addString(s)` pairing scanned the string\n  // three times (byteLength for the prefix, byteLength again inside addString,\n  // then the encode), which is costly for large text parameters.\n  public addInt32PrefixedString(string: string): Writer {\n    const len = Buffer.byteLength(string)\n    this.ensure(4 + len)\n    const buffer = this.buffer\n    let offset = this.offset\n    buffer[offset++] = (len >>> 24) & 0xff\n    buffer[offset++] = (len >>> 16) & 0xff\n    buffer[offset++] = (len >>> 8) & 0xff\n    buffer[offset++] = (len >>> 0) & 0xff\n    buffer.write(string, offset, 'utf-8')\n    this.offset = offset + len\n    return this\n  }\n\n  public add(otherBuffer: Buffer): Writer {\n    this.ensure(otherBuffer.length)\n    otherBuffer.copy(this.buffer, this.offset)\n    this.offset += otherBuffer.length\n    return this\n  }\n\n  private join(code?: number): Buffer {\n    if (code) {\n      this.buffer[this.headerPosition] = code\n      //length is everything in this packet minus the code\n      const length = this.offset - (this.headerPosition + 1)\n      this.buffer.writeInt32BE(length, this.headerPosition + 1)\n    }\n    return this.buffer.slice(code ? 0 : 5, this.offset)\n  }\n\n  public flush(code?: number): Buffer {\n    const result = this.join(code)\n    this.offset = 5\n    this.headerPosition = 0\n    this.buffer = Buffer.allocUnsafe(this.size)\n    return result\n  }\n\n  public clear(): void {\n    this.offset = 5\n    this.headerPosition = 0\n  }\n}\n","import { Writer } from './buffer-writer'\n\nconst enum code {\n  startup = 0x70,\n  query = 0x51,\n  parse = 0x50,\n  bind = 0x42,\n  execute = 0x45,\n  flush = 0x48,\n  sync = 0x53,\n  end = 0x58,\n  close = 0x43,\n  describe = 0x44,\n  copyFromChunk = 0x64,\n  copyDone = 0x63,\n  copyFail = 0x66,\n}\n\nconst writer = new Writer()\n\nconst startup = (opts: Record<string, string>): Buffer => {\n  // protocol version\n  writer.addInt16(3).addInt16(0)\n  for (const key of Object.keys(opts)) {\n    writer.addCString(key).addCString(opts[key])\n  }\n\n  writer.addCString('client_encoding').addCString('UTF8')\n\n  const bodyBuffer = writer.addCString('').flush()\n  // this message is sent without a code\n\n  const length = bodyBuffer.length + 4\n\n  return new Writer().addInt32(length).add(bodyBuffer).flush()\n}\n\nconst requestSsl = (): Buffer => {\n  const response = Buffer.allocUnsafe(8)\n  response.writeInt32BE(8, 0)\n  response.writeInt32BE(80877103, 4)\n  return response\n}\n\nconst password = (password: string): Buffer => {\n  return writer.addCString(password).flush(code.startup)\n}\n\nconst sendSASLInitialResponseMessage = function (mechanism: string, initialResponse: string): Buffer {\n  // 0x70 = 'p'\n  writer.addCString(mechanism).addInt32PrefixedString(initialResponse)\n\n  return writer.flush(code.startup)\n}\n\nconst sendSCRAMClientFinalMessage = function (additionalData: string): Buffer {\n  return writer.addString(additionalData).flush(code.startup)\n}\n\nconst query = (text: string): Buffer => {\n  return writer.addCString(text).flush(code.query)\n}\n\ntype ParseOpts = {\n  name?: string\n  types?: number[]\n  text: string\n}\n\nconst emptyArray: any[] = []\n\nconst parse = (query: ParseOpts): Buffer => {\n  // expect something like this:\n  // { name: 'queryName',\n  //   text: 'select * from blah',\n  //   types: ['int8', 'bool'] }\n\n  // normalize missing query names to allow for null\n  const name = query.name || ''\n  if (name.length > 63) {\n    console.error('Warning! Postgres only supports 63 characters for query names.')\n    console.error('You supplied %s (%s)', name, name.length)\n    console.error('This can cause conflicts and silent errors executing queries')\n  }\n\n  const types = query.types || emptyArray\n\n  const len = types.length\n\n  const buffer = writer\n    .addCString(name) // name of query\n    .addCString(query.text) // actual query text\n    .addInt16(len)\n\n  for (let i = 0; i < len; i++) {\n    buffer.addInt32(types[i])\n  }\n\n  return writer.flush(code.parse)\n}\n\ntype ValueMapper = (param: any, index: number) => any\n\ntype BindOpts = {\n  portal?: string\n  binary?: boolean\n  statement?: string\n  values?: any[]\n  // optional map from JS value to postgres value per parameter\n  valueMapper?: ValueMapper\n}\n\nconst paramWriter = new Writer()\n\n// make this a const enum so typescript will inline the value\nconst enum ParamType {\n  STRING = 0,\n  BINARY = 1,\n}\n\nconst writeValues = function (values: any[], valueMapper?: ValueMapper): void {\n  for (let i = 0; i < values.length; i++) {\n    const mappedVal = valueMapper ? valueMapper(values[i], i) : values[i]\n    if (mappedVal == null) {\n      // add the param type (string) to the writer\n      writer.addInt16(ParamType.STRING)\n      // write -1 to the param writer to indicate null\n      paramWriter.addInt32(-1)\n    } else if (mappedVal instanceof Buffer) {\n      // add the param type (binary) to the writer\n      writer.addInt16(ParamType.BINARY)\n      // add the buffer to the param writer\n      paramWriter.addInt32(mappedVal.length)\n      paramWriter.add(mappedVal)\n    } else {\n      // add the param type (string) to the writer\n      writer.addInt16(ParamType.STRING)\n      // length prefix + UTF-8 bytes in one pass (Buffer.byteLength computed once)\n      paramWriter.addInt32PrefixedString(mappedVal)\n    }\n  }\n}\n\nconst bind = (config: BindOpts = {}): Buffer => {\n  // normalize config\n  const portal = config.portal || ''\n  const statement = config.statement || ''\n  const binary = config.binary || false\n  const values = config.values || emptyArray\n  const len = values.length\n\n  writer.addCString(portal).addCString(statement)\n  writer.addInt16(len)\n\n  try {\n    writeValues(values, config.valueMapper)\n  } catch (err) {\n    writer.clear()\n    paramWriter.clear()\n    throw err\n  }\n\n  writer.addInt16(len)\n  writer.add(paramWriter.flush())\n\n  // all results use the same format code\n  writer.addInt16(1)\n  // format code\n  writer.addInt16(binary ? ParamType.BINARY : ParamType.STRING)\n  return writer.flush(code.bind)\n}\n\ntype ExecOpts = {\n  portal?: string\n  rows?: number\n}\n\nconst emptyExecute = Buffer.from([code.execute, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00])\n\nconst execute = (config?: ExecOpts): Buffer => {\n  // this is the happy path for most queries\n  if (!config || (!config.portal && !config.rows)) {\n    return emptyExecute\n  }\n\n  const portal = config.portal || ''\n  const rows = config.rows || 0\n\n  const portalLength = Buffer.byteLength(portal)\n  const len = 4 + portalLength + 1 + 4\n  // one extra bit for code\n  const buff = Buffer.allocUnsafe(1 + len)\n  buff[0] = code.execute\n  buff.writeInt32BE(len, 1)\n  buff.write(portal, 5, 'utf-8')\n  buff[portalLength + 5] = 0 // null terminate portal cString\n  buff.writeUInt32BE(rows, buff.length - 4)\n  return buff\n}\n\nconst cancel = (processID: number, secretKey: number): Buffer => {\n  const buffer = Buffer.allocUnsafe(16)\n  buffer.writeInt32BE(16, 0)\n  buffer.writeInt16BE(1234, 4)\n  buffer.writeInt16BE(5678, 6)\n  buffer.writeInt32BE(processID, 8)\n  buffer.writeInt32BE(secretKey, 12)\n  return buffer\n}\n\ntype PortalOpts = {\n  type: 'S' | 'P'\n  name?: string\n}\n\nconst cstringMessage = (code: code, string: string): Buffer => {\n  const stringLen = Buffer.byteLength(string)\n  const len = 4 + stringLen + 1\n  // one extra bit for code\n  const buffer = Buffer.allocUnsafe(1 + len)\n  buffer[0] = code\n  buffer.writeInt32BE(len, 1)\n  buffer.write(string, 5, 'utf-8')\n  buffer[len] = 0 // null terminate cString\n  return buffer\n}\n\nconst emptyDescribePortal = writer.addCString('P').flush(code.describe)\nconst emptyDescribeStatement = writer.addCString('S').flush(code.describe)\n\nconst describe = (msg: PortalOpts): Buffer => {\n  return msg.name\n    ? cstringMessage(code.describe, `${msg.type}${msg.name || ''}`)\n    : msg.type === 'P'\n    ? emptyDescribePortal\n    : emptyDescribeStatement\n}\n\nconst close = (msg: PortalOpts): Buffer => {\n  const text = `${msg.type}${msg.name || ''}`\n  return cstringMessage(code.close, text)\n}\n\nconst copyData = (chunk: Buffer): Buffer => {\n  return writer.add(chunk).flush(code.copyFromChunk)\n}\n\nconst copyFail = (message: string): Buffer => {\n  return cstringMessage(code.copyFail, message)\n}\n\nconst codeOnlyBuffer = (code: code): Buffer => Buffer.from([code, 0x00, 0x00, 0x00, 0x04])\n\nconst flushBuffer = codeOnlyBuffer(code.flush)\nconst syncBuffer = codeOnlyBuffer(code.sync)\nconst endBuffer = codeOnlyBuffer(code.end)\nconst copyDoneBuffer = codeOnlyBuffer(code.copyDone)\n\nconst serialize = {\n  startup,\n  password,\n  requestSsl,\n  sendSASLInitialResponseMessage,\n  sendSCRAMClientFinalMessage,\n  query,\n  parse,\n  bind,\n  execute,\n  describe,\n  close,\n  flush: () => flushBuffer,\n  sync: () => syncBuffer,\n  end: () => endBuffer,\n  copyData,\n  copyDone: () => copyDoneBuffer,\n  copyFail,\n  cancel,\n}\n\nexport { serialize }\n","export class BufferReader {\n  private buffer: Buffer = Buffer.allocUnsafe(0)\n\n  // TODO(bmc): support non-utf8 encoding?\n  private encoding: BufferEncoding = 'utf-8'\n\n  constructor(private offset: number = 0) {}\n\n  public setBuffer(offset: number, buffer: Buffer): void {\n    this.offset = offset\n    this.buffer = buffer\n  }\n\n  public int16(): number {\n    const result = this.buffer.readInt16BE(this.offset)\n    this.offset += 2\n    return result\n  }\n\n  public byte(): number {\n    const result = this.buffer[this.offset]\n    this.offset++\n    return result\n  }\n\n  public int32(): number {\n    const result = this.buffer.readInt32BE(this.offset)\n    this.offset += 4\n    return result\n  }\n\n  public uint32(): number {\n    const result = this.buffer.readUInt32BE(this.offset)\n    this.offset += 4\n    return result\n  }\n\n  public string(length: number): string {\n    const result = this.buffer.toString(this.encoding, this.offset, this.offset + length)\n    this.offset += length\n    return result\n  }\n\n  public cstring(): string {\n    const start = this.offset\n    let end = start\n    // eslint-disable-next-line no-empty\n    while (this.buffer[end++]) {}\n    this.offset = end\n    return this.buffer.toString(this.encoding, start, end - 1)\n  }\n\n  public bytes(length: number): Buffer {\n    const result = this.buffer.slice(this.offset, this.offset + length)\n    this.offset += length\n    return result\n  }\n}\n","import { TransformOptions } from 'stream'\nimport {\n  Mode,\n  bindComplete,\n  parseComplete,\n  closeComplete,\n  noData,\n  portalSuspended,\n  copyDone,\n  replicationStart,\n  emptyQuery,\n  ReadyForQueryMessage,\n  CommandCompleteMessage,\n  CopyDataMessage,\n  CopyResponse,\n  NotificationResponseMessage,\n  RowDescriptionMessage,\n  ParameterDescriptionMessage,\n  Field,\n  DataRowMessage,\n  ParameterStatusMessage,\n  BackendKeyDataMessage,\n  DatabaseError,\n  BackendMessage,\n  MessageName,\n  AuthenticationMD5Password,\n  NoticeMessage,\n} from './messages'\nimport { BufferReader } from './buffer-reader'\n\n// every message is prefixed with a single byte\nconst CODE_LENGTH = 1\n// every message has an int32 length which includes itself but does\n// NOT include the code in the length\nconst LEN_LENGTH = 4\n\nconst HEADER_LENGTH = CODE_LENGTH + LEN_LENGTH\n\n// A placeholder for a `BackendMessage`’s length value that will be set after construction.\nconst LATEINIT_LENGTH = -1\n\nexport type Packet = {\n  code: number\n  packet: Buffer\n}\n\nconst emptyBuffer = Buffer.allocUnsafe(0)\n\ntype StreamOptions = TransformOptions & {\n  mode: Mode\n}\n\nconst enum MessageCodes {\n  DataRow = 0x44, // D\n  ParseComplete = 0x31, // 1\n  BindComplete = 0x32, // 2\n  CloseComplete = 0x33, // 3\n  CommandComplete = 0x43, // C\n  ReadyForQuery = 0x5a, // Z\n  NoData = 0x6e, // n\n  NotificationResponse = 0x41, // A\n  AuthenticationResponse = 0x52, // R\n  ParameterStatus = 0x53, // S\n  BackendKeyData = 0x4b, // K\n  ErrorMessage = 0x45, // E\n  NoticeMessage = 0x4e, // N\n  RowDescriptionMessage = 0x54, // T\n  ParameterDescriptionMessage = 0x74, // t\n  PortalSuspended = 0x73, // s\n  ReplicationStart = 0x57, // W\n  EmptyQuery = 0x49, // I\n  CopyIn = 0x47, // G\n  CopyOut = 0x48, // H\n  CopyDone = 0x63, // c\n  CopyData = 0x64, // d\n}\n\nexport type MessageCallback = (msg: BackendMessage) => void\n\nexport class Parser {\n  private buffer: Buffer = emptyBuffer\n  private bufferLength: number = 0\n  private bufferOffset: number = 0\n  private reader = new BufferReader()\n  private mode: Mode\n\n  constructor(opts?: StreamOptions) {\n    if (opts?.mode === 'binary') {\n      throw new Error('Binary mode not supported yet')\n    }\n    this.mode = opts?.mode || 'text'\n  }\n\n  public parse(buffer: Buffer, callback: MessageCallback) {\n    this.mergeBuffer(buffer)\n    const bufferFullLength = this.bufferOffset + this.bufferLength\n    let offset = this.bufferOffset\n    while (offset + HEADER_LENGTH <= bufferFullLength) {\n      // code is 1 byte long - it identifies the message type\n      const code = this.buffer[offset]\n      // length is 1 Uint32BE - it is the length of the message EXCLUDING the code\n      const length = this.buffer.readUInt32BE(offset + CODE_LENGTH)\n      const fullMessageLength = CODE_LENGTH + length\n      if (fullMessageLength + offset <= bufferFullLength) {\n        const message = this.handlePacket(offset + HEADER_LENGTH, code, length, this.buffer)\n        callback(message)\n        offset += fullMessageLength\n      } else {\n        break\n      }\n    }\n    if (offset === bufferFullLength) {\n      // No more use for the buffer\n      this.buffer = emptyBuffer\n      this.bufferLength = 0\n      this.bufferOffset = 0\n    } else {\n      // Adjust the cursors of remainingBuffer\n      this.bufferLength = bufferFullLength - offset\n      this.bufferOffset = offset\n    }\n  }\n\n  private mergeBuffer(buffer: Buffer): void {\n    if (this.bufferLength > 0) {\n      const newLength = this.bufferLength + buffer.byteLength\n      const newFullLength = newLength + this.bufferOffset\n      if (newFullLength > this.buffer.byteLength) {\n        // We can't concat the new buffer with the remaining one\n        let newBuffer: Buffer\n        if (newLength <= this.buffer.byteLength && this.bufferOffset >= this.bufferLength) {\n          // We can move the relevant part to the beginning of the buffer instead of allocating a new buffer\n          newBuffer = this.buffer\n        } else {\n          // Allocate a new larger buffer\n          let newBufferLength = this.buffer.byteLength * 2\n          while (newLength >= newBufferLength) {\n            newBufferLength *= 2\n          }\n          newBuffer = Buffer.allocUnsafe(newBufferLength)\n        }\n        // Move the remaining buffer to the new one\n        this.buffer.copy(newBuffer, 0, this.bufferOffset, this.bufferOffset + this.bufferLength)\n        this.buffer = newBuffer\n        this.bufferOffset = 0\n      }\n      // Concat the new buffer with the remaining one\n      buffer.copy(this.buffer, this.bufferOffset + this.bufferLength)\n      this.bufferLength = newLength\n    } else {\n      this.buffer = buffer\n      this.bufferOffset = 0\n      this.bufferLength = buffer.byteLength\n    }\n  }\n\n  private handlePacket(offset: number, code: number, length: number, bytes: Buffer): BackendMessage {\n    const { reader } = this\n\n    // NOTE: This undesirably retains the buffer in `this.reader` if the `parse*Message` calls below throw. However, those should only throw in the case of a protocol error, which normally results in the reader being discarded.\n    reader.setBuffer(offset, bytes)\n\n    let message: BackendMessage\n\n    switch (code) {\n      case MessageCodes.BindComplete:\n        message = bindComplete\n        break\n      case MessageCodes.ParseComplete:\n        message = parseComplete\n        break\n      case MessageCodes.CloseComplete:\n        message = closeComplete\n        break\n      case MessageCodes.NoData:\n        message = noData\n        break\n      case MessageCodes.PortalSuspended:\n        message = portalSuspended\n        break\n      case MessageCodes.CopyDone:\n        message = copyDone\n        break\n      case MessageCodes.ReplicationStart:\n        message = replicationStart\n        break\n      case MessageCodes.EmptyQuery:\n        message = emptyQuery\n        break\n      case MessageCodes.DataRow:\n        message = parseDataRowMessage(reader)\n        break\n      case MessageCodes.CommandComplete:\n        message = parseCommandCompleteMessage(reader)\n        break\n      case MessageCodes.ReadyForQuery:\n        message = parseReadyForQueryMessage(reader)\n        break\n      case MessageCodes.NotificationResponse:\n        message = parseNotificationMessage(reader)\n        break\n      case MessageCodes.AuthenticationResponse:\n        message = parseAuthenticationResponse(reader, length)\n        break\n      case MessageCodes.ParameterStatus:\n        message = parseParameterStatusMessage(reader)\n        break\n      case MessageCodes.BackendKeyData:\n        message = parseBackendKeyData(reader)\n        break\n      case MessageCodes.ErrorMessage:\n        message = parseErrorMessage(reader, 'error')\n        break\n      case MessageCodes.NoticeMessage:\n        message = parseErrorMessage(reader, 'notice')\n        break\n      case MessageCodes.RowDescriptionMessage:\n        message = parseRowDescriptionMessage(reader)\n        break\n      case MessageCodes.ParameterDescriptionMessage:\n        message = parseParameterDescriptionMessage(reader)\n        break\n      case MessageCodes.CopyIn:\n        message = parseCopyInMessage(reader)\n        break\n      case MessageCodes.CopyOut:\n        message = parseCopyOutMessage(reader)\n        break\n      case MessageCodes.CopyData:\n        message = parseCopyData(reader, length)\n        break\n      default:\n        return new DatabaseError('received invalid response: ' + code.toString(16), length, 'error')\n    }\n\n    reader.setBuffer(0, emptyBuffer)\n\n    message.length = length\n    return message\n  }\n}\n\nconst parseReadyForQueryMessage = (reader: BufferReader) => {\n  const status = reader.string(1)\n  return new ReadyForQueryMessage(LATEINIT_LENGTH, status)\n}\n\nconst parseCommandCompleteMessage = (reader: BufferReader) => {\n  const text = reader.cstring()\n  return new CommandCompleteMessage(LATEINIT_LENGTH, text)\n}\n\nconst parseCopyData = (reader: BufferReader, length: number) => {\n  const chunk = reader.bytes(length - 4)\n  return new CopyDataMessage(LATEINIT_LENGTH, chunk)\n}\n\nconst parseCopyInMessage = (reader: BufferReader) => parseCopyMessage(reader, 'copyInResponse')\n\nconst parseCopyOutMessage = (reader: BufferReader) => parseCopyMessage(reader, 'copyOutResponse')\n\nconst parseCopyMessage = (reader: BufferReader, messageName: MessageName) => {\n  const isBinary = reader.byte() !== 0\n  const columnCount = reader.int16()\n  const message = new CopyResponse(LATEINIT_LENGTH, messageName, isBinary, columnCount)\n  for (let i = 0; i < columnCount; i++) {\n    message.columnTypes[i] = reader.int16()\n  }\n  return message\n}\n\nconst parseNotificationMessage = (reader: BufferReader) => {\n  const processId = reader.int32()\n  const channel = reader.cstring()\n  const payload = reader.cstring()\n  return new NotificationResponseMessage(LATEINIT_LENGTH, processId, channel, payload)\n}\n\nconst parseRowDescriptionMessage = (reader: BufferReader) => {\n  const fieldCount = reader.int16()\n  const message = new RowDescriptionMessage(LATEINIT_LENGTH, fieldCount)\n  for (let i = 0; i < fieldCount; i++) {\n    message.fields[i] = parseField(reader)\n  }\n  return message\n}\n\nconst parseField = (reader: BufferReader) => {\n  const name = reader.cstring()\n  const tableID = reader.uint32()\n  const columnID = reader.int16()\n  const dataTypeID = reader.uint32()\n  const dataTypeSize = reader.int16()\n  const dataTypeModifier = reader.int32()\n  const mode = reader.int16() === 0 ? 'text' : 'binary'\n  return new Field(name, tableID, columnID, dataTypeID, dataTypeSize, dataTypeModifier, mode)\n}\n\nconst parseParameterDescriptionMessage = (reader: BufferReader) => {\n  const parameterCount = reader.int16()\n  const message = new ParameterDescriptionMessage(LATEINIT_LENGTH, parameterCount)\n  for (let i = 0; i < parameterCount; i++) {\n    message.dataTypeIDs[i] = reader.int32()\n  }\n  return message\n}\n\nconst parseDataRowMessage = (reader: BufferReader) => {\n  const fieldCount = reader.int16()\n  const fields: any[] = new Array(fieldCount)\n  for (let i = 0; i < fieldCount; i++) {\n    const len = reader.int32()\n    // a -1 for length means the value of the field is null\n    fields[i] = len === -1 ? null : reader.string(len)\n  }\n  return new DataRowMessage(LATEINIT_LENGTH, fields)\n}\n\nconst parseParameterStatusMessage = (reader: BufferReader) => {\n  const name = reader.cstring()\n  const value = reader.cstring()\n  return new ParameterStatusMessage(LATEINIT_LENGTH, name, value)\n}\n\nconst parseBackendKeyData = (reader: BufferReader) => {\n  const processID = reader.int32()\n  const secretKey = reader.int32()\n  return new BackendKeyDataMessage(LATEINIT_LENGTH, processID, secretKey)\n}\n\nconst parseAuthenticationResponse = (reader: BufferReader, length: number) => {\n  const code = reader.int32()\n  // TODO(bmc): maybe better types here\n  const message: BackendMessage & any = {\n    name: 'authenticationOk',\n    length,\n  }\n\n  switch (code) {\n    case 0: // AuthenticationOk\n      break\n    case 3: // AuthenticationCleartextPassword\n      if (message.length === 8) {\n        message.name = 'authenticationCleartextPassword'\n      }\n      break\n    case 5: // AuthenticationMD5Password\n      if (message.length === 12) {\n        message.name = 'authenticationMD5Password'\n        const salt = reader.bytes(4)\n        return new AuthenticationMD5Password(LATEINIT_LENGTH, salt)\n      }\n      break\n    case 10: // AuthenticationSASL\n      {\n        message.name = 'authenticationSASL'\n        message.mechanisms = []\n        let mechanism: string\n        do {\n          mechanism = reader.cstring()\n          if (mechanism) {\n            message.mechanisms.push(mechanism)\n          }\n        } while (mechanism)\n      }\n      break\n    case 11: // AuthenticationSASLContinue\n      message.name = 'authenticationSASLContinue'\n      message.data = reader.string(length - 8)\n      break\n    case 12: // AuthenticationSASLFinal\n      message.name = 'authenticationSASLFinal'\n      message.data = reader.string(length - 8)\n      break\n    default:\n      throw new Error('Unknown authenticationOk message type ' + code)\n  }\n  return message\n}\n\nconst parseErrorMessage = (reader: BufferReader, name: MessageName) => {\n  const fields: Record<string, string> = {}\n  let fieldType = reader.string(1)\n  while (fieldType !== '\\0') {\n    fields[fieldType] = reader.cstring()\n    fieldType = reader.string(1)\n  }\n\n  const messageValue = fields.M\n\n  const message =\n    name === 'notice'\n      ? new NoticeMessage(LATEINIT_LENGTH, messageValue)\n      : new DatabaseError(messageValue, LATEINIT_LENGTH, name)\n\n  message.severity = fields.S\n  message.code = fields.C\n  message.detail = fields.D\n  message.hint = fields.H\n  message.position = fields.P\n  message.internalPosition = fields.p\n  message.internalQuery = fields.q\n  message.where = fields.W\n  message.schema = fields.s\n  message.table = fields.t\n  message.column = fields.c\n  message.dataType = fields.d\n  message.constraint = fields.n\n  message.file = fields.F\n  message.line = fields.L\n  message.routine = fields.R\n  return message\n}\n","import { DatabaseError } from './messages'\nimport { serialize } from './serializer'\nimport { Parser, MessageCallback } from './parser'\n\nexport function parse(stream: NodeJS.ReadableStream, callback: MessageCallback): Promise<void> {\n  const parser = new Parser()\n  stream.on('data', (buffer: Buffer) => parser.parse(buffer, callback))\n  return new Promise((resolve) => stream.on('end', () => resolve()))\n}\n\nexport { serialize, DatabaseError }\n","// This is an empty module that is served up when outside of a workerd environment\n// See the `exports` field in package.json\nexport default {}\n","const { getStream, getSecureStream } = getStreamFuncs()\n\nmodule.exports = {\n  /**\n   * Get a socket stream compatible with the current runtime environment.\n   * @returns {Duplex}\n   */\n  getStream,\n  /**\n   * Get a TLS secured socket, compatible with the current environment,\n   * using the socket and other settings given in `options`.\n   * @returns {Duplex}\n   */\n  getSecureStream,\n}\n\n/**\n * The stream functions that work in Node.js\n */\nfunction getNodejsStreamFuncs() {\n  function getStream(ssl) {\n    const net = require('net')\n    return new net.Socket()\n  }\n\n  function getSecureStream(options) {\n    const tls = require('tls')\n    return tls.connect(options)\n  }\n  return {\n    getStream,\n    getSecureStream,\n  }\n}\n\n/**\n * The stream functions that work in Cloudflare Workers\n */\nfunction getCloudflareStreamFuncs() {\n  function getStream(ssl) {\n    const { CloudflareSocket } = require('pg-cloudflare')\n    return new CloudflareSocket(ssl)\n  }\n\n  function getSecureStream(options) {\n    options.socket.startTls(options)\n    return options.socket\n  }\n  return {\n    getStream,\n    getSecureStream,\n  }\n}\n\n/**\n * Are we running in a Cloudflare Worker?\n *\n * @returns true if the code is currently running inside a Cloudflare Worker.\n */\nfunction isCloudflareRuntime() {\n  // Since 2022-03-21 the `global_navigator` compatibility flag is on for Cloudflare Workers\n  // which means that `navigator.userAgent` will be defined.\n  // eslint-disable-next-line no-undef\n  if (typeof navigator === 'object' && navigator !== null && typeof navigator.userAgent === 'string') {\n    // eslint-disable-next-line no-undef\n    return navigator.userAgent === 'Cloudflare-Workers'\n  }\n  // In case `navigator` or `navigator.userAgent` is not defined then try a more sneaky approach\n  if (typeof Response === 'function') {\n    const resp = new Response(null, { cf: { thing: true } })\n    if (typeof resp.cf === 'object' && resp.cf !== null && resp.cf.thing) {\n      return true\n    }\n  }\n  return false\n}\n\nfunction getStreamFuncs() {\n  if (isCloudflareRuntime()) {\n    return getCloudflareStreamFuncs()\n  }\n  return getNodejsStreamFuncs()\n}\n","'use strict'\n\nconst EventEmitter = require('events').EventEmitter\n\nconst { parse, serialize } = require('pg-protocol')\nconst stream = require('./stream')\nconst { getStream } = stream\n\nconst flushBuffer = serialize.flush()\nconst syncBuffer = serialize.sync()\nconst endBuffer = serialize.end()\n\n// TODO(bmc) support binary mode at some point\nclass Connection extends EventEmitter {\n  constructor(config) {\n    super()\n    config = config || {}\n\n    this.stream = config.stream || getStream(config.ssl)\n    if (typeof this.stream === 'function') {\n      this.stream = this.stream(config)\n    }\n\n    this._keepAlive = config.keepAlive\n    this._keepAliveInitialDelayMillis = config.keepAliveInitialDelayMillis\n    this.parsedStatements = {}\n    this.ssl = config.ssl || false\n    this.sslNegotiation = config.sslNegotiation || 'postgres'\n    this._ending = false\n    this._emitMessage = false\n    const self = this\n    this.on('newListener', function (eventName) {\n      if (eventName === 'message') {\n        self._emitMessage = true\n      }\n    })\n  }\n\n  connect(port, host) {\n    const self = this\n\n    this._connecting = true\n    this.stream.setNoDelay(true)\n    this.stream.connect(port, host)\n\n    this.stream.once('connect', function () {\n      if (self._keepAlive) {\n        self.stream.setKeepAlive(true, self._keepAliveInitialDelayMillis)\n      }\n      self.emit('connect')\n    })\n\n    const reportStreamError = function (error) {\n      // errors about disconnections should be ignored during disconnect\n      if (self._ending && (error.code === 'ECONNRESET' || error.code === 'EPIPE')) {\n        return\n      }\n      self.emit('error', error)\n    }\n    this.stream.on('error', reportStreamError)\n\n    this.stream.on('close', function () {\n      self.emit('end')\n    })\n\n    if (!this.ssl) {\n      return this.attachListeners(this.stream)\n    }\n\n    // With direct SSL negotiation the TLS handshake starts immediately on the\n    // raw socket, skipping the SSLRequest packet and the server's 'S'/'N' reply.\n    if (this.sslNegotiation === 'direct') {\n      return this.stream.once('connect', function () {\n        self.upgradeToSSL(host, reportStreamError)\n      })\n    }\n\n    this.stream.once('data', function (buffer) {\n      const responseCode = buffer.toString('utf8')\n      switch (responseCode) {\n        case 'S': // Server supports SSL connections, continue with a secure connection\n          break\n        case 'N': // Server does not support SSL connections\n          self.stream.end()\n          return self.emit('error', new Error('The server does not support SSL connections'))\n        default:\n          // Any other response byte, including 'E' (ErrorResponse) indicating a server error\n          self.stream.end()\n          return self.emit('error', new Error('There was an error establishing an SSL connection'))\n      }\n      self.upgradeToSSL(host, reportStreamError)\n    })\n  }\n\n  upgradeToSSL(host, reportStreamError) {\n    const self = this\n    const options = {\n      socket: self.stream,\n    }\n\n    if (self.ssl !== true) {\n      Object.assign(options, self.ssl)\n\n      if ('key' in self.ssl) {\n        options.key = self.ssl.key\n      }\n    }\n\n    // Direct SSL negotiation requires ALPN so the server can confirm it is\n    // speaking the PostgreSQL protocol over the TLS connection.\n    if (self.sslNegotiation === 'direct') {\n      options.ALPNProtocols = ['postgresql']\n    }\n\n    const net = require('net')\n    if (net.isIP && net.isIP(host) === 0) {\n      options.servername = host\n    }\n    try {\n      self.stream = stream.getSecureStream(options)\n    } catch (err) {\n      return self.emit('error', err)\n    }\n    self.attachListeners(self.stream)\n    self.stream.on('error', reportStreamError)\n\n    self.emit('sslconnect')\n  }\n\n  attachListeners(stream) {\n    parse(stream, (msg) => {\n      const eventName = msg.name === 'error' ? 'errorMessage' : msg.name\n      if (this._emitMessage) {\n        this.emit('message', msg)\n      }\n      this.emit(eventName, msg)\n    })\n  }\n\n  requestSsl() {\n    this.stream.write(serialize.requestSsl())\n  }\n\n  startup(config) {\n    this.stream.write(serialize.startup(config))\n  }\n\n  cancel(processID, secretKey) {\n    this._send(serialize.cancel(processID, secretKey))\n  }\n\n  password(password) {\n    this._send(serialize.password(password))\n  }\n\n  sendSASLInitialResponseMessage(mechanism, initialResponse) {\n    this._send(serialize.sendSASLInitialResponseMessage(mechanism, initialResponse))\n  }\n\n  sendSCRAMClientFinalMessage(additionalData) {\n    this._send(serialize.sendSCRAMClientFinalMessage(additionalData))\n  }\n\n  _send(buffer) {\n    if (!this.stream.writable) {\n      return false\n    }\n    return this.stream.write(buffer)\n  }\n\n  query(text) {\n    this._send(serialize.query(text))\n  }\n\n  // send parse message\n  parse(query) {\n    this._send(serialize.parse(query))\n  }\n\n  // send bind message\n  bind(config) {\n    this._send(serialize.bind(config))\n  }\n\n  // send execute message\n  execute(config) {\n    this._send(serialize.execute(config))\n  }\n\n  flush() {\n    if (this.stream.writable) {\n      this.stream.write(flushBuffer)\n    }\n  }\n\n  sync() {\n    this._ending = true\n    this._send(syncBuffer)\n  }\n\n  ref() {\n    this.stream.ref()\n  }\n\n  unref() {\n    this.stream.unref()\n  }\n\n  end() {\n    // 0x58 = 'X'\n    this._ending = true\n    if (!this._connecting || !this.stream.writable) {\n      this.stream.end()\n      return\n    }\n    return this.stream.write(endBuffer, () => {\n      this.stream.end()\n    })\n  }\n\n  close(msg) {\n    this._send(serialize.close(msg))\n  }\n\n  describe(msg) {\n    this._send(serialize.describe(msg))\n  }\n\n  sendCopyFromChunk(chunk) {\n    this._send(serialize.copyData(chunk))\n  }\n\n  endCopyFrom() {\n    this._send(serialize.copyDone())\n  }\n\n  sendCopyFail(msg) {\n    this._send(serialize.copyFail(msg))\n  }\n}\n\nmodule.exports = Connection\n","/*\nCopyright (c) 2014-2021, Matteo Collina <hello@matteocollina.com>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n*/\n\n'use strict'\n\nconst { Transform } = require('stream')\nconst { StringDecoder } = require('string_decoder')\nconst kLast = Symbol('last')\nconst kDecoder = Symbol('decoder')\n\nfunction transform (chunk, enc, cb) {\n  let list\n  if (this.overflow) { // Line buffer is full. Skip to start of next line.\n    const buf = this[kDecoder].write(chunk)\n    list = buf.split(this.matcher)\n\n    if (list.length === 1) return cb() // Line ending not found. Discard entire chunk.\n\n    // Line ending found. Discard trailing fragment of previous line and reset overflow state.\n    list.shift()\n    this.overflow = false\n  } else {\n    this[kLast] += this[kDecoder].write(chunk)\n    list = this[kLast].split(this.matcher)\n  }\n\n  this[kLast] = list.pop()\n\n  for (let i = 0; i < list.length; i++) {\n    try {\n      push(this, this.mapper(list[i]))\n    } catch (error) {\n      return cb(error)\n    }\n  }\n\n  this.overflow = this[kLast].length > this.maxLength\n  if (this.overflow && !this.skipOverflow) {\n    cb(new Error('maximum buffer reached'))\n    return\n  }\n\n  cb()\n}\n\nfunction flush (cb) {\n  // forward any gibberish left in there\n  this[kLast] += this[kDecoder].end()\n\n  if (this[kLast]) {\n    try {\n      push(this, this.mapper(this[kLast]))\n    } catch (error) {\n      return cb(error)\n    }\n  }\n\n  cb()\n}\n\nfunction push (self, val) {\n  if (val !== undefined) {\n    self.push(val)\n  }\n}\n\nfunction noop (incoming) {\n  return incoming\n}\n\nfunction split (matcher, mapper, options) {\n  // Set defaults for any arguments not supplied.\n  matcher = matcher || /\\r?\\n/\n  mapper = mapper || noop\n  options = options || {}\n\n  // Test arguments explicitly.\n  switch (arguments.length) {\n    case 1:\n      // If mapper is only argument.\n      if (typeof matcher === 'function') {\n        mapper = matcher\n        matcher = /\\r?\\n/\n      // If options is only argument.\n      } else if (typeof matcher === 'object' && !(matcher instanceof RegExp) && !matcher[Symbol.split]) {\n        options = matcher\n        matcher = /\\r?\\n/\n      }\n      break\n\n    case 2:\n      // If mapper and options are arguments.\n      if (typeof matcher === 'function') {\n        options = mapper\n        mapper = matcher\n        matcher = /\\r?\\n/\n      // If matcher and options are arguments.\n      } else if (typeof mapper === 'object') {\n        options = mapper\n        mapper = noop\n      }\n  }\n\n  options = Object.assign({}, options)\n  options.autoDestroy = true\n  options.transform = transform\n  options.flush = flush\n  options.readableObjectMode = true\n\n  const stream = new Transform(options)\n\n  stream[kLast] = ''\n  stream[kDecoder] = new StringDecoder('utf8')\n  stream.matcher = matcher\n  stream.mapper = mapper\n  stream.maxLength = options.maxLength\n  stream.skipOverflow = options.skipOverflow || false\n  stream.overflow = false\n  stream._destroy = function (err, cb) {\n    // Weird Node v12 bug that we need to work around\n    this._writableState.errorEmitted = false\n    cb(err)\n  }\n\n  return stream\n}\n\nmodule.exports = split\n","'use strict';\n\nvar path = require('path')\n  , Stream = require('stream').Stream\n  , split = require('split2')\n  , util = require('util')\n  , defaultPort = 5432\n  , isWin = (process.platform === 'win32')\n  , warnStream = process.stderr\n;\n\n\nvar S_IRWXG = 56     //    00070(8)\n  , S_IRWXO = 7      //    00007(8)\n  , S_IFMT  = 61440  // 00170000(8)\n  , S_IFREG = 32768  //  0100000(8)\n;\nfunction isRegFile(mode) {\n    return ((mode & S_IFMT) == S_IFREG);\n}\n\nvar fieldNames = [ 'host', 'port', 'database', 'user', 'password' ];\nvar nrOfFields = fieldNames.length;\nvar passKey = fieldNames[ nrOfFields -1 ];\n\n\nfunction warn() {\n    var isWritable = (\n        warnStream instanceof Stream &&\n          true === warnStream.writable\n    );\n\n    if (isWritable) {\n        var args = Array.prototype.slice.call(arguments).concat(\"\\n\");\n        warnStream.write( util.format.apply(util, args) );\n    }\n}\n\n\nObject.defineProperty(module.exports, 'isWin', {\n    get : function() {\n        return isWin;\n    } ,\n    set : function(val) {\n        isWin = val;\n    }\n});\n\n\nmodule.exports.warnTo = function(stream) {\n    var old = warnStream;\n    warnStream = stream;\n    return old;\n};\n\nmodule.exports.getFileName = function(rawEnv){\n    var env = rawEnv || process.env;\n    var file = env.PGPASSFILE || (\n        isWin ?\n          path.join( env.APPDATA || './' , 'postgresql', 'pgpass.conf' ) :\n          path.join( env.HOME || './', '.pgpass' )\n    );\n    return file;\n};\n\nmodule.exports.usePgPass = function(stats, fname) {\n    if (Object.prototype.hasOwnProperty.call(process.env, 'PGPASSWORD')) {\n        return false;\n    }\n\n    if (isWin) {\n        return true;\n    }\n\n    fname = fname || '<unkn>';\n\n    if (! isRegFile(stats.mode)) {\n        warn('WARNING: password file \"%s\" is not a plain file', fname);\n        return false;\n    }\n\n    if (stats.mode & (S_IRWXG | S_IRWXO)) {\n        /* If password file is insecure, alert the user and ignore it. */\n        warn('WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less', fname);\n        return false;\n    }\n\n    return true;\n};\n\n\nvar matcher = module.exports.match = function(connInfo, entry) {\n    return fieldNames.slice(0, -1).reduce(function(prev, field, idx){\n        if (idx == 1) {\n            // the port\n            if ( Number( connInfo[field] || defaultPort ) === Number( entry[field] ) ) {\n                return prev && true;\n            }\n        }\n        return prev && (\n            entry[field] === '*' ||\n              entry[field] === connInfo[field]\n        );\n    }, true);\n};\n\n\nmodule.exports.getPassword = function(connInfo, stream, cb) {\n    var pass;\n    var lineStream = stream.pipe(split());\n\n    function onLine(line) {\n        var entry = parseLine(line);\n        if (entry && isValidEntry(entry) && matcher(connInfo, entry)) {\n            pass = entry[passKey];\n            lineStream.end(); // -> calls onEnd(), but pass is set now\n        }\n    }\n\n    var onEnd = function() {\n        stream.destroy();\n        cb(pass);\n    };\n\n    var onErr = function(err) {\n        stream.destroy();\n        warn('WARNING: error on reading file: %s', err);\n        cb(undefined);\n    };\n\n    stream.on('error', onErr);\n    lineStream\n        .on('data', onLine)\n        .on('end', onEnd)\n        .on('error', onErr)\n    ;\n\n};\n\n\nvar parseLine = module.exports.parseLine = function(line) {\n    if (line.length < 11 || line.match(/^\\s+#/)) {\n        return null;\n    }\n\n    var curChar = '';\n    var prevChar = '';\n    var fieldIdx = 0;\n    var startIdx = 0;\n    var endIdx = 0;\n    var obj = {};\n    var isLastField = false;\n    var addToObj = function(idx, i0, i1) {\n        var field = line.substring(i0, i1);\n\n        if (! Object.hasOwnProperty.call(process.env, 'PGPASS_NO_DEESCAPE')) {\n            field = field.replace(/\\\\([:\\\\])/g, '$1');\n        }\n\n        obj[ fieldNames[idx] ] = field;\n    };\n\n    for (var i = 0 ; i < line.length-1 ; i += 1) {\n        curChar = line.charAt(i+1);\n        prevChar = line.charAt(i);\n\n        isLastField = (fieldIdx == nrOfFields-1);\n\n        if (isLastField) {\n            addToObj(fieldIdx, startIdx);\n            break;\n        }\n\n        if (i >= 0 && curChar == ':' && prevChar !== '\\\\') {\n            addToObj(fieldIdx, startIdx, i+1);\n\n            startIdx = i+2;\n            fieldIdx += 1;\n        }\n    }\n\n    obj = ( Object.keys(obj).length === nrOfFields ) ? obj : null;\n\n    return obj;\n};\n\n\nvar isValidEntry = module.exports.isValidEntry = function(entry){\n    var rules = {\n        // host\n        0 : function(x){\n            return x.length > 0;\n        } ,\n        // port\n        1 : function(x){\n            if (x === '*') {\n                return true;\n            }\n            x = Number(x);\n            return (\n                isFinite(x) &&\n                  x > 0 &&\n                  x < 9007199254740992 &&\n                  Math.floor(x) === x\n            );\n        } ,\n        // database\n        2 : function(x){\n            return x.length > 0;\n        } ,\n        // username\n        3 : function(x){\n            return x.length > 0;\n        } ,\n        // password\n        4 : function(x){\n            return x.length > 0;\n        }\n    };\n\n    for (var idx = 0 ; idx < fieldNames.length ; idx += 1) {\n        var rule = rules[idx];\n        var value = entry[ fieldNames[idx] ] || '';\n\n        var res = rule(value);\n        if (!res) {\n            return false;\n        }\n    }\n\n    return true;\n};\n\n","'use strict';\n\nvar path = require('path')\n  , fs = require('fs')\n  , helper = require('./helper.js')\n;\n\n\nmodule.exports = function(connInfo, cb) {\n    var file = helper.getFileName();\n    \n    fs.stat(file, function(err, stat){\n        if (err || !helper.usePgPass(stat, file)) {\n            return cb(undefined);\n        }\n\n        var st = fs.createReadStream(file);\n\n        helper.getPassword(connInfo, st, cb);\n    });\n};\n\nmodule.exports.warnTo = helper.warnTo;\n","const EventEmitter = require('events').EventEmitter\nconst utils = require('./utils')\nconst nodeUtils = require('util')\nconst sasl = require('./crypto/sasl')\nconst TypeOverrides = require('./type-overrides')\n\nconst ConnectionParameters = require('./connection-parameters')\nconst Query = require('./query')\nconst defaults = require('./defaults')\nconst Connection = require('./connection')\nconst crypto = require('./crypto/utils')\n\nconst activeQueryDeprecationNotice = nodeUtils.deprecate(\n  () => {},\n  'Client.activeQuery is deprecated and will be removed in pg@9.0'\n)\n\nconst queryQueueDeprecationNotice = nodeUtils.deprecate(\n  () => {},\n  'Client.queryQueue is deprecated and will be removed in pg@9.0.'\n)\n\nconst pgPassDeprecationNotice = nodeUtils.deprecate(\n  () => {},\n  'pgpass support is deprecated and will be removed in pg@9.0. ' +\n    'You can provide an async function as the password property to the Client/Pool constructor that returns a password instead. Within this function you can call the pgpass module in your own code.'\n)\n\nconst byoPromiseDeprecationNotice = nodeUtils.deprecate(\n  () => {},\n  'Passing a custom Promise implementation to the Client/Pool constructor is deprecated and will be removed in pg@9.0.'\n)\n\nconst queryQueueLengthDeprecationNotice = nodeUtils.deprecate(\n  () => {},\n  'Calling client.query() when the client is already executing a query is deprecated and will be removed in pg@9.0. Use async/await or an external async flow control mechanism instead.'\n)\n\nfunction coerceNumberOrDefault(value, defaultValue) {\n  if (typeof value === 'number') {\n    return Number.isFinite(value) ? value : defaultValue\n  }\n  if (typeof value === 'string' && value.trim() !== '') {\n    const n = Number(value)\n    return Number.isFinite(n) ? n : defaultValue\n  }\n  return defaultValue\n}\n\nclass Client extends EventEmitter {\n  constructor(config) {\n    super()\n\n    this.connectionParameters = new ConnectionParameters(config)\n    this.user = this.connectionParameters.user\n    this.database = this.connectionParameters.database\n    this.port = this.connectionParameters.port\n    this.host = this.connectionParameters.host\n\n    // \"hiding\" the password so it doesn't show up in stack traces\n    // or if the client is console.logged\n    Object.defineProperty(this, 'password', {\n      configurable: true,\n      enumerable: false,\n      writable: true,\n      value: this.connectionParameters.password,\n    })\n\n    this.replication = this.connectionParameters.replication\n\n    const c = config || {}\n\n    if (c.Promise) {\n      byoPromiseDeprecationNotice()\n    }\n    this._Promise = c.Promise || global.Promise\n    this._types = new TypeOverrides(c.types)\n    this._ending = false\n    this._ended = false\n    this._connecting = false\n    this._connected = false\n    this._connectionError = false\n    this._queryable = true\n    this._activeQuery = null\n    this._txStatus = null\n\n    this.enableChannelBinding = Boolean(c.enableChannelBinding) // set true to use SCRAM-SHA-256-PLUS when offered\n    this.scramMaxIterations = coerceNumberOrDefault(c.scramMaxIterations, sasl.DEFAULT_MAX_SCRAM_ITERATIONS)\n    this.connection =\n      c.connection ||\n      new Connection({\n        stream: c.stream,\n        ssl: this.connectionParameters.ssl,\n        sslNegotiation: this.connectionParameters.sslnegotiation,\n        keepAlive: c.keepAlive || false,\n        keepAliveInitialDelayMillis: c.keepAliveInitialDelayMillis || 0,\n        encoding: this.connectionParameters.client_encoding || 'utf8',\n      })\n    this._queryQueue = []\n    this.binary = c.binary || defaults.binary\n    this.processID = null\n    this.secretKey = null\n    this.ssl = this.connectionParameters.ssl || false\n    this.sslNegotiation = this.connectionParameters.sslnegotiation || 'postgres'\n    // As with Password, make SSL->Key (the private key) non-enumerable.\n    // It won't show up in stack traces\n    // or if the client is console.logged\n    if (this.ssl && this.ssl.key) {\n      Object.defineProperty(this.ssl, 'key', {\n        enumerable: false,\n      })\n    }\n\n    this._connectionTimeoutMillis = c.connectionTimeoutMillis || 0\n  }\n\n  get activeQuery() {\n    activeQueryDeprecationNotice()\n    return this._activeQuery\n  }\n\n  set activeQuery(val) {\n    activeQueryDeprecationNotice()\n    this._activeQuery = val\n  }\n\n  _getActiveQuery() {\n    return this._activeQuery\n  }\n\n  _errorAllQueries(err) {\n    const enqueueError = (query) => {\n      process.nextTick(() => {\n        query.handleError(err, this.connection)\n      })\n    }\n\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery) {\n      enqueueError(activeQuery)\n      this._activeQuery = null\n    }\n\n    this._queryQueue.forEach(enqueueError)\n    this._queryQueue.length = 0\n  }\n\n  _connect(callback) {\n    const self = this\n    const con = this.connection\n    this._connectionCallback = callback\n\n    if (this._connecting || this._connected) {\n      const err = new Error('Client has already been connected. You cannot reuse a client.')\n      process.nextTick(() => {\n        callback(err)\n      })\n      return\n    }\n    this._connecting = true\n\n    if (this._connectionTimeoutMillis > 0) {\n      this.connectionTimeoutHandle = setTimeout(() => {\n        con._ending = true\n        con.stream.destroy(new Error('timeout expired'))\n      }, this._connectionTimeoutMillis)\n\n      if (this.connectionTimeoutHandle.unref) {\n        this.connectionTimeoutHandle.unref()\n      }\n    }\n\n    if (this.host && this.host.indexOf('/') === 0) {\n      con.connect(this.host + '/.s.PGSQL.' + this.port)\n    } else {\n      con.connect(this.port, this.host)\n    }\n\n    // once connection is established send startup message\n    con.on('connect', function () {\n      if (self.ssl) {\n        // With direct SSL negotiation the connection upgrades to TLS without an\n        // SSLRequest packet, so the startup message is sent after 'sslconnect'.\n        if (self.sslNegotiation !== 'direct') {\n          con.requestSsl()\n        }\n      } else {\n        con.startup(self.getStartupConf())\n      }\n    })\n\n    con.on('sslconnect', function () {\n      con.startup(self.getStartupConf())\n    })\n\n    this._attachListeners(con)\n\n    con.once('end', () => {\n      const error = this._ending ? new Error('Connection terminated') : new Error('Connection terminated unexpectedly')\n\n      clearTimeout(this.connectionTimeoutHandle)\n      this._errorAllQueries(error)\n      this._ended = true\n\n      if (!this._ending) {\n        // if the connection is ended without us calling .end()\n        // on this client then we have an unexpected disconnection\n        // treat this as an error unless we've already emitted an error\n        // during connection.\n        if (this._connecting && !this._connectionError) {\n          if (this._connectionCallback) {\n            this._connectionCallback(error)\n          } else {\n            this._handleErrorEvent(error)\n          }\n        } else if (!this._connectionError) {\n          this._handleErrorEvent(error)\n        }\n      }\n\n      process.nextTick(() => {\n        this.emit('end')\n      })\n    })\n  }\n\n  connect(callback) {\n    if (callback) {\n      this._connect(callback)\n      return\n    }\n\n    return new this._Promise((resolve, reject) => {\n      this._connect((error) => {\n        if (error) {\n          reject(error)\n        } else {\n          resolve(this)\n        }\n      })\n    })\n  }\n\n  _attachListeners(con) {\n    // password request handling\n    con.on('authenticationCleartextPassword', this._handleAuthCleartextPassword.bind(this))\n    // password request handling\n    con.on('authenticationMD5Password', this._handleAuthMD5Password.bind(this))\n    // password request handling (SASL)\n    con.on('authenticationSASL', this._handleAuthSASL.bind(this))\n    con.on('authenticationSASLContinue', this._handleAuthSASLContinue.bind(this))\n    con.on('authenticationSASLFinal', this._handleAuthSASLFinal.bind(this))\n    con.on('backendKeyData', this._handleBackendKeyData.bind(this))\n    con.on('error', this._handleErrorEvent.bind(this))\n    con.on('errorMessage', this._handleErrorMessage.bind(this))\n    con.on('readyForQuery', this._handleReadyForQuery.bind(this))\n    con.on('notice', this._handleNotice.bind(this))\n    con.on('rowDescription', this._handleRowDescription.bind(this))\n    con.on('dataRow', this._handleDataRow.bind(this))\n    con.on('portalSuspended', this._handlePortalSuspended.bind(this))\n    con.on('emptyQuery', this._handleEmptyQuery.bind(this))\n    con.on('commandComplete', this._handleCommandComplete.bind(this))\n    con.on('parseComplete', this._handleParseComplete.bind(this))\n    con.on('copyInResponse', this._handleCopyInResponse.bind(this))\n    con.on('copyData', this._handleCopyData.bind(this))\n    con.on('notification', this._handleNotification.bind(this))\n  }\n\n  _getPassword(cb) {\n    const con = this.connection\n    if (typeof this.password === 'function') {\n      this._Promise\n        .resolve()\n        .then(() => this.password(this.connectionParameters))\n        .then((pass) => {\n          if (pass !== undefined) {\n            if (typeof pass !== 'string') {\n              con.emit('error', new TypeError('Password must be a string'))\n              return\n            }\n            this.connectionParameters.password = this.password = pass\n          } else {\n            this.connectionParameters.password = this.password = null\n          }\n          cb()\n        })\n        .catch((err) => {\n          con.emit('error', err)\n        })\n    } else if (this.password !== null) {\n      cb()\n    } else {\n      try {\n        const pgPass = require('pgpass')\n        pgPass(this.connectionParameters, (pass) => {\n          if (undefined !== pass) {\n            pgPassDeprecationNotice()\n            this.connectionParameters.password = this.password = pass\n          }\n          cb()\n        })\n      } catch (e) {\n        this.emit('error', e)\n      }\n    }\n  }\n\n  _handleAuthCleartextPassword(msg) {\n    this._getPassword(() => {\n      this.connection.password(this.password)\n    })\n  }\n\n  _handleAuthMD5Password(msg) {\n    this._getPassword(async () => {\n      try {\n        const hashedPassword = await crypto.postgresMd5PasswordHash(this.user, this.password, msg.salt)\n        this.connection.password(hashedPassword)\n      } catch (e) {\n        this.emit('error', e)\n      }\n    })\n  }\n\n  _handleAuthSASL(msg) {\n    this._getPassword(() => {\n      try {\n        this.saslSession = sasl.startSession(\n          msg.mechanisms,\n          this.enableChannelBinding && this.connection.stream,\n          this.scramMaxIterations\n        )\n        this.connection.sendSASLInitialResponseMessage(this.saslSession.mechanism, this.saslSession.response)\n      } catch (err) {\n        this.connection.emit('error', err)\n      }\n    })\n  }\n\n  async _handleAuthSASLContinue(msg) {\n    try {\n      await sasl.continueSession(\n        this.saslSession,\n        this.password,\n        msg.data,\n        this.enableChannelBinding && this.connection.stream\n      )\n      this.connection.sendSCRAMClientFinalMessage(this.saslSession.response)\n    } catch (err) {\n      this.connection.emit('error', err)\n    }\n  }\n\n  _handleAuthSASLFinal(msg) {\n    try {\n      sasl.finalizeSession(this.saslSession, msg.data)\n      this.saslSession = null\n    } catch (err) {\n      this.connection.emit('error', err)\n    }\n  }\n\n  _handleBackendKeyData(msg) {\n    this.processID = msg.processID\n    this.secretKey = msg.secretKey\n  }\n\n  _handleReadyForQuery(msg) {\n    if (this._connecting) {\n      this._connecting = false\n      this._connected = true\n      clearTimeout(this.connectionTimeoutHandle)\n\n      // process possible callback argument to Client#connect\n      if (this._connectionCallback) {\n        this._connectionCallback(null, this)\n        // remove callback for proper error handling\n        // after the connect event\n        this._connectionCallback = null\n      }\n      this.emit('connect')\n    }\n    const activeQuery = this._getActiveQuery()\n    this._activeQuery = null\n    this._txStatus = msg?.status ?? null\n    this.readyForQuery = true\n    if (activeQuery) {\n      activeQuery.handleReadyForQuery(this.connection)\n    }\n    this._pulseQueryQueue()\n  }\n\n  // if we receive an error event or error message\n  // during the connection process we handle it here\n  _handleErrorWhileConnecting(err) {\n    if (this._connectionError) {\n      // TODO(bmc): this is swallowing errors - we shouldn't do this\n      return\n    }\n    this._connectionError = true\n    clearTimeout(this.connectionTimeoutHandle)\n    if (this._connectionCallback) {\n      return this._connectionCallback(err)\n    }\n    this.emit('error', err)\n  }\n\n  // if we're connected and we receive an error event from the connection\n  // this means the socket is dead - do a hard abort of all queries and emit\n  // the socket error on the client as well\n  _handleErrorEvent(err) {\n    if (this._connecting) {\n      return this._handleErrorWhileConnecting(err)\n    }\n    this._queryable = false\n    this._errorAllQueries(err)\n    this.emit('error', err)\n  }\n\n  // handle error messages from the postgres backend\n  _handleErrorMessage(msg) {\n    if (this._connecting) {\n      return this._handleErrorWhileConnecting(msg)\n    }\n    const activeQuery = this._getActiveQuery()\n\n    if (!activeQuery) {\n      this._handleErrorEvent(msg)\n      return\n    }\n\n    this._activeQuery = null\n    activeQuery.handleError(msg, this.connection)\n  }\n\n  _handleRowDescription(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected rowDescription message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    // delegate rowDescription to active query\n    activeQuery.handleRowDescription(msg)\n  }\n\n  _handleDataRow(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected dataRow message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    // delegate dataRow to active query\n    activeQuery.handleDataRow(msg)\n  }\n\n  _handlePortalSuspended(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected portalSuspended message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    // delegate portalSuspended to active query\n    activeQuery.handlePortalSuspended(this.connection)\n  }\n\n  _handleEmptyQuery(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected emptyQuery message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    // delegate emptyQuery to active query\n    activeQuery.handleEmptyQuery(this.connection)\n  }\n\n  _handleCommandComplete(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected commandComplete message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    // delegate commandComplete to active query\n    activeQuery.handleCommandComplete(msg, this.connection)\n  }\n\n  _handleParseComplete() {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected parseComplete message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    // if a prepared statement has a name and properly parses\n    // we track that its already been executed so we don't parse\n    // it again on the same client\n    if (activeQuery.name) {\n      this.connection.parsedStatements[activeQuery.name] = activeQuery.text\n    }\n  }\n\n  _handleCopyInResponse(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected copyInResponse message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    activeQuery.handleCopyInResponse(this.connection)\n  }\n\n  _handleCopyData(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected copyData message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    activeQuery.handleCopyData(msg, this.connection)\n  }\n\n  _handleNotification(msg) {\n    this.emit('notification', msg)\n  }\n\n  _handleNotice(msg) {\n    this.emit('notice', msg)\n  }\n\n  getStartupConf() {\n    const params = this.connectionParameters\n\n    const data = {\n      user: params.user,\n      database: params.database,\n    }\n\n    const appName = params.application_name || params.fallback_application_name\n    if (appName) {\n      data.application_name = appName\n    }\n    if (params.replication) {\n      data.replication = '' + params.replication\n    }\n    if (params.statement_timeout) {\n      data.statement_timeout = String(parseInt(params.statement_timeout, 10))\n    }\n    if (params.lock_timeout) {\n      data.lock_timeout = String(parseInt(params.lock_timeout, 10))\n    }\n    if (params.idle_in_transaction_session_timeout) {\n      data.idle_in_transaction_session_timeout = String(parseInt(params.idle_in_transaction_session_timeout, 10))\n    }\n    if (params.options) {\n      data.options = params.options\n    }\n\n    return data\n  }\n\n  cancel(client, query) {\n    if (client.activeQuery === query) {\n      const con = this.connection\n\n      if (this.host && this.host.indexOf('/') === 0) {\n        con.connect(this.host + '/.s.PGSQL.' + this.port)\n      } else {\n        con.connect(this.port, this.host)\n      }\n\n      // once connection is established send cancel message\n      con.on('connect', function () {\n        con.cancel(client.processID, client.secretKey)\n      })\n    } else if (client._queryQueue.indexOf(query) !== -1) {\n      client._queryQueue.splice(client._queryQueue.indexOf(query), 1)\n    }\n  }\n\n  setTypeParser(oid, format, parseFn) {\n    return this._types.setTypeParser(oid, format, parseFn)\n  }\n\n  getTypeParser(oid, format) {\n    return this._types.getTypeParser(oid, format)\n  }\n\n  // escapeIdentifier and escapeLiteral moved to utility functions & exported\n  // on PG\n  // re-exported here for backwards compatibility\n  escapeIdentifier(str) {\n    return utils.escapeIdentifier(str)\n  }\n\n  escapeLiteral(str) {\n    return utils.escapeLiteral(str)\n  }\n\n  _pulseQueryQueue() {\n    if (this.readyForQuery === true) {\n      this._activeQuery = this._queryQueue.shift()\n      const activeQuery = this._getActiveQuery()\n      if (activeQuery) {\n        this.readyForQuery = false\n        this.hasExecuted = true\n\n        const queryError = activeQuery.submit(this.connection)\n        if (queryError) {\n          process.nextTick(() => {\n            activeQuery.handleError(queryError, this.connection)\n            this.readyForQuery = true\n            this._pulseQueryQueue()\n          })\n        }\n      } else if (this.hasExecuted) {\n        this._activeQuery = null\n        this.emit('drain')\n      }\n    }\n  }\n\n  query(config, values, callback) {\n    // can take in strings, config object or query object\n    let query\n    let result\n\n    if (config == null) {\n      throw new TypeError('Client was passed a null or undefined query')\n    }\n\n    if (typeof config.submit === 'function') {\n      result = query = config\n      if (!query.callback) {\n        if (typeof values === 'function') {\n          query.callback = values\n        } else if (callback) {\n          query.callback = callback\n        }\n      }\n    } else {\n      query = new Query(config, values, callback)\n      if (!query.callback) {\n        result = new this._Promise((resolve, reject) => {\n          query.callback = (err, res) => (err ? reject(err) : resolve(res))\n        }).catch((err) => {\n          // replace the stack trace that leads to `TCP.onStreamRead` with one that leads back to the\n          // application that created the query\n          Error.captureStackTrace(err)\n          throw err\n        })\n      } else if (typeof query.callback !== 'function') {\n        throw new TypeError('callback is not a function')\n      }\n    }\n\n    const readTimeout = config.query_timeout || this.connectionParameters.query_timeout\n    if (readTimeout) {\n      const queryCallback = query.callback || (() => {})\n\n      const readTimeoutTimer = setTimeout(() => {\n        const error = new Error('Query read timeout')\n\n        process.nextTick(() => {\n          query.handleError(error, this.connection)\n        })\n\n        queryCallback(error)\n\n        // we already returned an error,\n        // just do nothing if query completes\n        query.callback = () => {}\n\n        // Remove from queue\n        const index = this._queryQueue.indexOf(query)\n        if (index > -1) {\n          this._queryQueue.splice(index, 1)\n        }\n\n        this._pulseQueryQueue()\n      }, readTimeout)\n\n      query.callback = (err, res) => {\n        clearTimeout(readTimeoutTimer)\n        queryCallback(err, res)\n      }\n    }\n\n    if (this.binary && !query.binary) {\n      query.binary = true\n    }\n\n    if (query._result && !query._result._types) {\n      query._result._types = this._types\n    }\n\n    if (!this._queryable) {\n      process.nextTick(() => {\n        query.handleError(new Error('Client has encountered a connection error and is not queryable'), this.connection)\n      })\n      return result\n    }\n\n    if (this._ending) {\n      process.nextTick(() => {\n        query.handleError(new Error('Client was closed and is not queryable'), this.connection)\n      })\n      return result\n    }\n\n    if (this._queryQueue.length > 0) {\n      queryQueueLengthDeprecationNotice()\n    }\n    this._queryQueue.push(query)\n    this._pulseQueryQueue()\n    return result\n  }\n\n  ref() {\n    this.connection.ref()\n  }\n\n  unref() {\n    this.connection.unref()\n  }\n\n  getTransactionStatus() {\n    return this._txStatus\n  }\n\n  end(cb) {\n    this._ending = true\n\n    // if we have never connected, then end is a noop, callback immediately\n    if (!this.connection._connecting || this._ended) {\n      if (cb) {\n        cb()\n        return\n      } else {\n        return this._Promise.resolve()\n      }\n    }\n\n    if (this._getActiveQuery() || !this._queryable) {\n      // if we have an active query we need to force a disconnect\n      // on the socket - otherwise a hung query could block end forever\n      this.connection.stream.destroy()\n    } else {\n      this.connection.end()\n    }\n\n    if (cb) {\n      this.connection.once('end', cb)\n    } else {\n      return new this._Promise((resolve) => {\n        this.connection.once('end', resolve)\n      })\n    }\n  }\n  get queryQueue() {\n    queryQueueDeprecationNotice()\n    return this._queryQueue\n  }\n}\n\n// expose a Query constructor\nClient.Query = Query\n\nmodule.exports = Client\n","'use strict'\nconst EventEmitter = require('events').EventEmitter\n\nconst NOOP = function () {}\n\nconst removeWhere = (list, predicate) => {\n  const i = list.findIndex(predicate)\n\n  return i === -1 ? undefined : list.splice(i, 1)[0]\n}\n\nclass IdleItem {\n  constructor(client, idleListener, timeoutId) {\n    this.client = client\n    this.idleListener = idleListener\n    this.timeoutId = timeoutId\n  }\n}\n\nclass PendingItem {\n  constructor(callback) {\n    this.callback = callback\n  }\n}\n\nfunction throwOnDoubleRelease() {\n  throw new Error('Release called on client which has already been released to the pool.')\n}\n\nfunction promisify(Promise, callback) {\n  if (callback) {\n    return { callback: callback, result: undefined }\n  }\n  let rej\n  let res\n  const cb = function (err, client) {\n    err ? rej(err) : res(client)\n  }\n  const result = new Promise(function (resolve, reject) {\n    res = resolve\n    rej = reject\n  }).catch((err) => {\n    // replace the stack trace that leads to `TCP.onStreamRead` with one that leads back to the\n    // application that created the query\n    Error.captureStackTrace(err)\n    throw err\n  })\n  return { callback: cb, result: result }\n}\n\nfunction makeIdleListener(pool, client) {\n  return function idleListener(err) {\n    err.client = client\n\n    client.removeListener('error', idleListener)\n    client.on('error', () => {\n      pool.log('additional client error after disconnection due to error', err)\n    })\n    pool._remove(client)\n    // TODO - document that once the pool emits an error\n    // the client has already been closed & purged and is unusable\n    pool.emit('error', err, client)\n  }\n}\n\nclass Pool extends EventEmitter {\n  constructor(options, Client) {\n    super()\n    this.options = Object.assign({}, options)\n\n    if (options != null && 'password' in options) {\n      // \"hiding\" the password so it doesn't show up in stack traces\n      // or if the client is console.logged\n      Object.defineProperty(this.options, 'password', {\n        configurable: true,\n        enumerable: false,\n        writable: true,\n        value: options.password,\n      })\n    }\n    if (options != null && options.ssl && options.ssl.key) {\n      // \"hiding\" the ssl->key so it doesn't show up in stack traces\n      // or if the client is console.logged\n      Object.defineProperty(this.options.ssl, 'key', {\n        enumerable: false,\n      })\n    }\n\n    this.options.max = this.options.max || this.options.poolSize || 10\n    this.options.min = this.options.min || 0\n    this.options.maxUses = this.options.maxUses || Infinity\n    this.options.allowExitOnIdle = this.options.allowExitOnIdle || false\n    this.options.maxLifetimeSeconds = this.options.maxLifetimeSeconds || 0\n    this.log = this.options.log || function () {}\n    this.Client = this.options.Client || Client || require('pg').Client\n    this.Promise = this.options.Promise || global.Promise\n\n    if (typeof this.options.idleTimeoutMillis === 'undefined') {\n      this.options.idleTimeoutMillis = 10000\n    }\n\n    this._clients = []\n    this._idle = []\n    this._expired = new WeakSet()\n    this._pendingQueue = []\n    this._endCallback = undefined\n    this.ending = false\n    this.ended = false\n  }\n\n  _promiseTry(f) {\n    const Promise = this.Promise\n    if (typeof Promise.try === 'function') {\n      return Promise.try(f)\n    }\n    return new Promise((resolve) => resolve(f()))\n  }\n\n  _isFull() {\n    return this._clients.length >= this.options.max\n  }\n\n  _isAboveMin() {\n    return this._clients.length > this.options.min\n  }\n\n  _pulseQueue() {\n    this.log('pulse queue')\n    if (this.ended) {\n      this.log('pulse queue ended')\n      return\n    }\n    if (this.ending) {\n      this.log('pulse queue on ending')\n      if (this._idle.length) {\n        this._idle.slice().map((item) => {\n          this._remove(item.client)\n        })\n      }\n      if (!this._clients.length) {\n        this.ended = true\n        this._endCallback()\n      }\n      return\n    }\n\n    // if we don't have any waiting, do nothing\n    if (!this._pendingQueue.length) {\n      this.log('no queued requests')\n      return\n    }\n    // if we don't have any idle clients and we have no more room do nothing\n    if (!this._idle.length && this._isFull()) {\n      return\n    }\n    const pendingItem = this._pendingQueue.shift()\n    if (this._idle.length) {\n      const idleItem = this._idle.pop()\n      clearTimeout(idleItem.timeoutId)\n      const client = idleItem.client\n      client.ref && client.ref()\n      const idleListener = idleItem.idleListener\n\n      return this._acquireClient(client, pendingItem, idleListener, false)\n    }\n    if (!this._isFull()) {\n      return this.newClient(pendingItem)\n    }\n    throw new Error('unexpected condition')\n  }\n\n  _remove(client, callback) {\n    const removed = removeWhere(this._idle, (item) => item.client === client)\n\n    if (removed !== undefined) {\n      clearTimeout(removed.timeoutId)\n    }\n\n    this._clients = this._clients.filter((c) => c !== client)\n    const context = this\n    client.end(() => {\n      context.emit('remove', client)\n\n      if (typeof callback === 'function') {\n        callback()\n      }\n    })\n  }\n\n  connect(cb) {\n    if (this.ending) {\n      const err = new Error('Cannot use a pool after calling end on the pool')\n      return cb ? cb(err) : this.Promise.reject(err)\n    }\n\n    const response = promisify(this.Promise, cb)\n    const result = response.result\n\n    // if we don't have to connect a new client, don't do so\n    if (this._isFull() || this._idle.length) {\n      // if we have idle clients schedule a pulse immediately\n      if (this._idle.length) {\n        process.nextTick(() => this._pulseQueue())\n      }\n\n      if (!this.options.connectionTimeoutMillis) {\n        this._pendingQueue.push(new PendingItem(response.callback))\n        return result\n      }\n\n      const queueCallback = (err, res, done) => {\n        clearTimeout(tid)\n        response.callback(err, res, done)\n      }\n\n      const pendingItem = new PendingItem(queueCallback)\n\n      // set connection timeout on checking out an existing client\n      const tid = setTimeout(() => {\n        // remove the callback from pending waiters because\n        // we're going to call it with a timeout error\n        removeWhere(this._pendingQueue, (i) => i.callback === queueCallback)\n        pendingItem.timedOut = true\n        response.callback(new Error('timeout exceeded when trying to connect'))\n      }, this.options.connectionTimeoutMillis)\n\n      if (tid.unref) {\n        tid.unref()\n      }\n\n      this._pendingQueue.push(pendingItem)\n      return result\n    }\n\n    this.newClient(new PendingItem(response.callback))\n\n    return result\n  }\n\n  newClient(pendingItem) {\n    const client = new this.Client(this.options)\n    this._clients.push(client)\n    const idleListener = makeIdleListener(this, client)\n\n    this.log('checking client timeout')\n\n    // connection timeout logic\n    let tid\n    let timeoutHit = false\n    if (this.options.connectionTimeoutMillis) {\n      tid = setTimeout(() => {\n        if (client.connection) {\n          this.log('ending client due to timeout')\n          timeoutHit = true\n          client.connection.stream.destroy()\n        } else if (!client.isConnected()) {\n          this.log('ending client due to timeout')\n          timeoutHit = true\n          // force kill the node driver, and let libpq do its teardown\n          client.end()\n        }\n      }, this.options.connectionTimeoutMillis)\n    }\n\n    this.log('connecting new client')\n    client.connect((err) => {\n      if (tid) {\n        clearTimeout(tid)\n      }\n      client.on('error', idleListener)\n      if (err) {\n        this.log('client failed to connect', err)\n        // remove the dead client from our list of clients\n        this._clients = this._clients.filter((c) => c !== client)\n        if (timeoutHit) {\n          err = new Error('Connection terminated due to connection timeout', { cause: err })\n        }\n\n        // this client won’t be released, so move on immediately\n        this._pulseQueue()\n\n        if (!pendingItem.timedOut) {\n          pendingItem.callback(err, undefined, NOOP)\n        }\n      } else {\n        this.log('new client connected')\n\n        if (this.options.onConnect) {\n          this._promiseTry(() => this.options.onConnect(client)).then(\n            () => {\n              this._afterConnect(client, pendingItem, idleListener)\n            },\n            (hookErr) => {\n              this._clients = this._clients.filter((c) => c !== client)\n              client.end(() => {\n                this._pulseQueue()\n                if (!pendingItem.timedOut) {\n                  pendingItem.callback(hookErr, undefined, NOOP)\n                }\n              })\n            }\n          )\n          return\n        }\n\n        return this._afterConnect(client, pendingItem, idleListener)\n      }\n    })\n  }\n\n  _afterConnect(client, pendingItem, idleListener) {\n    if (this.options.maxLifetimeSeconds !== 0) {\n      const maxLifetimeTimeout = setTimeout(() => {\n        this.log('ending client due to expired lifetime')\n        this._expired.add(client)\n        const idleIndex = this._idle.findIndex((idleItem) => idleItem.client === client)\n        if (idleIndex !== -1) {\n          this._acquireClient(\n            client,\n            new PendingItem((err, client, clientRelease) => clientRelease()),\n            idleListener,\n            false\n          )\n        }\n      }, this.options.maxLifetimeSeconds * 1000)\n\n      maxLifetimeTimeout.unref()\n      client.once('end', () => clearTimeout(maxLifetimeTimeout))\n    }\n\n    return this._acquireClient(client, pendingItem, idleListener, true)\n  }\n\n  // acquire a client for a pending work item\n  _acquireClient(client, pendingItem, idleListener, isNew) {\n    if (isNew) {\n      this.emit('connect', client)\n    }\n\n    this.emit('acquire', client)\n\n    client.release = this._releaseOnce(client, idleListener)\n\n    client.removeListener('error', idleListener)\n\n    if (!pendingItem.timedOut) {\n      if (isNew && this.options.verify) {\n        this.options.verify(client, (err) => {\n          if (err) {\n            client.release(err)\n            return pendingItem.callback(err, undefined, NOOP)\n          }\n\n          pendingItem.callback(undefined, client, client.release)\n        })\n      } else {\n        pendingItem.callback(undefined, client, client.release)\n      }\n    } else {\n      if (isNew && this.options.verify) {\n        this.options.verify(client, client.release)\n      } else {\n        client.release()\n      }\n    }\n  }\n\n  // returns a function that wraps _release and throws if called more than once\n  _releaseOnce(client, idleListener) {\n    let released = false\n\n    return (err) => {\n      if (released) {\n        throwOnDoubleRelease()\n      }\n\n      released = true\n      this._release(client, idleListener, err)\n    }\n  }\n\n  // release a client back to the poll, include an error\n  // to remove it from the pool\n  _release(client, idleListener, err) {\n    client.on('error', idleListener)\n\n    client._poolUseCount = (client._poolUseCount || 0) + 1\n\n    this.emit('release', err, client)\n\n    // TODO(bmc): expose a proper, public interface _queryable and _ending\n    if (err || this.ending || !client._queryable || client._ending || client._poolUseCount >= this.options.maxUses) {\n      if (client._poolUseCount >= this.options.maxUses) {\n        this.log('remove expended client')\n      }\n\n      return this._remove(client, this._pulseQueue.bind(this))\n    }\n\n    const isExpired = this._expired.has(client)\n    if (isExpired) {\n      this.log('remove expired client')\n      this._expired.delete(client)\n      return this._remove(client, this._pulseQueue.bind(this))\n    }\n\n    // idle timeout\n    let tid\n    if (this.options.idleTimeoutMillis && this._isAboveMin()) {\n      tid = setTimeout(() => {\n        if (this._isAboveMin()) {\n          this.log('remove idle client')\n          this._remove(client, this._pulseQueue.bind(this))\n        }\n      }, this.options.idleTimeoutMillis)\n\n      if (this.options.allowExitOnIdle) {\n        // allow Node to exit if this is all that's left\n        tid.unref()\n      }\n    }\n\n    if (this.options.allowExitOnIdle) {\n      client.unref()\n    }\n\n    this._idle.push(new IdleItem(client, idleListener, tid))\n    this._pulseQueue()\n  }\n\n  query(text, values, cb) {\n    // guard clause against passing a function as the first parameter\n    if (typeof text === 'function') {\n      const response = promisify(this.Promise, text)\n      setImmediate(function () {\n        return response.callback(new Error('Passing a function as the first parameter to pool.query is not supported'))\n      })\n      return response.result\n    }\n\n    // allow plain text query without values, but callback\n    if (typeof values === 'function') {\n      cb = values\n      values = undefined\n    }\n    const response = promisify(this.Promise, cb)\n    cb = response.callback\n\n    this.connect((err, client) => {\n      if (err) {\n        return cb(err)\n      }\n\n      let clientReleased = false\n      const onError = (err) => {\n        if (clientReleased) {\n          return\n        }\n        clientReleased = true\n        client.release(err)\n        cb(err)\n      }\n\n      client.once('error', onError)\n      this.log('dispatching query')\n      try {\n        client.query(text, values, (err, res) => {\n          this.log('query dispatched')\n          client.removeListener('error', onError)\n          if (clientReleased) {\n            return\n          }\n          clientReleased = true\n          client.release(err)\n          if (err) {\n            return cb(err)\n          }\n          return cb(undefined, res)\n        })\n      } catch (err) {\n        client.release(err)\n        return cb(err)\n      }\n    })\n    return response.result\n  }\n\n  end(cb) {\n    this.log('ending')\n    if (this.ending) {\n      const err = new Error('Called end on pool more than once')\n      return cb ? cb(err) : this.Promise.reject(err)\n    }\n    this.ending = true\n    const promised = promisify(this.Promise, cb)\n    this._endCallback = promised.callback\n    this._pulseQueue()\n    return promised.result\n  }\n\n  get waitingCount() {\n    return this._pendingQueue.length\n  }\n\n  get idleCount() {\n    return this._idle.length\n  }\n\n  get expiredCount() {\n    return this._clients.reduce((acc, client) => acc + (this._expired.has(client) ? 1 : 0), 0)\n  }\n\n  get totalCount() {\n    return this._clients.length\n  }\n}\nmodule.exports = Pool\n","'use strict'\n\nconst EventEmitter = require('events').EventEmitter\nconst util = require('util')\nconst utils = require('../utils')\n\nconst NativeQuery = (module.exports = function (config, values, callback) {\n  EventEmitter.call(this)\n  config = utils.normalizeQueryConfig(config, values, callback)\n  this.text = config.text\n  this.values = config.values\n  this.name = config.name\n  this.queryMode = config.queryMode\n  this.callback = config.callback\n  this.state = 'new'\n  this._arrayMode = config.rowMode === 'array'\n\n  // if the 'row' event is listened for\n  // then emit them as they come in\n  // without setting singleRowMode to true\n  // this has almost no meaning because libpq\n  // reads all rows into memory before returning any\n  this._emitRowEvents = false\n  this.on(\n    'newListener',\n    function (event) {\n      if (event === 'row') this._emitRowEvents = true\n    }.bind(this)\n  )\n})\n\nutil.inherits(NativeQuery, EventEmitter)\n\nconst errorFieldMap = {\n  sqlState: 'code',\n  statementPosition: 'position',\n  messagePrimary: 'message',\n  context: 'where',\n  schemaName: 'schema',\n  tableName: 'table',\n  columnName: 'column',\n  dataTypeName: 'dataType',\n  constraintName: 'constraint',\n  sourceFile: 'file',\n  sourceLine: 'line',\n  sourceFunction: 'routine',\n}\n\nNativeQuery.prototype.handleError = function (err) {\n  // copy pq error fields into the error object\n  const fields = this.native.pq.resultErrorFields()\n  if (fields) {\n    for (const key in fields) {\n      const normalizedFieldName = errorFieldMap[key] || key\n      err[normalizedFieldName] = fields[key]\n    }\n  }\n  if (this.callback) {\n    this.callback(err)\n  } else {\n    this.emit('error', err)\n  }\n  this.state = 'error'\n}\n\nNativeQuery.prototype.then = function (onSuccess, onFailure) {\n  return this._getPromise().then(onSuccess, onFailure)\n}\n\nNativeQuery.prototype.catch = function (callback) {\n  return this._getPromise().catch(callback)\n}\n\nNativeQuery.prototype._getPromise = function () {\n  if (this._promise) return this._promise\n  this._promise = new Promise(\n    function (resolve, reject) {\n      this._once('end', resolve)\n      this._once('error', reject)\n    }.bind(this)\n  )\n  return this._promise\n}\n\nNativeQuery.prototype.submit = function (client) {\n  this.state = 'running'\n  const self = this\n  this.native = client.native\n  client.native.arrayMode = this._arrayMode\n\n  let after = function (err, rows, results) {\n    client.native.arrayMode = false\n    setImmediate(function () {\n      self.emit('_done')\n    })\n\n    // handle possible query error\n    if (err) {\n      return self.handleError(err)\n    }\n\n    // emit row events for each row in the result\n    if (self._emitRowEvents) {\n      if (results.length > 1) {\n        rows.forEach((rowOfRows, i) => {\n          rowOfRows.forEach((row) => {\n            self.emit('row', row, results[i])\n          })\n        })\n      } else {\n        rows.forEach(function (row) {\n          self.emit('row', row, results)\n        })\n      }\n    }\n\n    // handle successful result\n    self.state = 'end'\n    self.emit('end', results)\n    if (self.callback) {\n      self.callback(null, results)\n    }\n  }\n\n  if (process.domain) {\n    after = process.domain.bind(after)\n  }\n\n  // named query\n  if (this.name) {\n    if (this.name.length > 63) {\n      console.error('Warning! Postgres only supports 63 characters for query names.')\n      console.error('You supplied %s (%s)', this.name, this.name.length)\n      console.error('This can cause conflicts and silent errors executing queries')\n    }\n    const values = (this.values || []).map(utils.prepareValue)\n\n    // check if the client has already executed this named query\n    // if so...just execute it again - skip the planning phase\n    if (client.namedQueries[this.name]) {\n      if (this.text && client.namedQueries[this.name] !== this.text) {\n        const err = new Error(`Prepared statements must be unique - '${this.name}' was used for a different statement`)\n        return after(err)\n      }\n      return client.native.execute(this.name, values, after)\n    }\n    // plan the named query the first time, then execute it\n    return client.native.prepare(this.name, this.text, values.length, function (err) {\n      if (err) return after(err)\n      client.namedQueries[self.name] = self.text\n      return self.native.execute(self.name, values, after)\n    })\n  } else if (this.values) {\n    if (!Array.isArray(this.values)) {\n      const err = new Error('Query values must be an array')\n      return after(err)\n    }\n    const vals = this.values.map(utils.prepareValue)\n    client.native.query(this.text, vals, after)\n  } else if (this.queryMode === 'extended') {\n    client.native.query(this.text, [], after)\n  } else {\n    client.native.query(this.text, after)\n  }\n}\n","const nodeUtils = require('util')\n// eslint-disable-next-line\nvar Native\n// eslint-disable-next-line no-useless-catch\ntry {\n  // Wrap this `require()` in a try-catch to avoid upstream bundlers from complaining that this might not be available since it is an optional import\n  Native = require('pg-native')\n} catch (e) {\n  throw e\n}\nconst TypeOverrides = require('../type-overrides')\nconst EventEmitter = require('events').EventEmitter\nconst util = require('util')\nconst ConnectionParameters = require('../connection-parameters')\n\nconst NativeQuery = require('./query')\n\nconst queryQueueLengthDeprecationNotice = nodeUtils.deprecate(\n  () => {},\n  'Calling client.query() when the client is already executing a query is deprecated and will be removed in pg@9.0. Use async/await or an external async flow control mechanism instead.'\n)\n\nconst Client = (module.exports = function (config) {\n  EventEmitter.call(this)\n  config = config || {}\n\n  this._Promise = config.Promise || global.Promise\n  this._types = new TypeOverrides(config.types)\n\n  this.native = new Native({\n    types: this._types,\n  })\n\n  this._queryQueue = []\n  this._ending = false\n  this._connecting = false\n  this._connected = false\n  this._queryable = true\n\n  // keep these on the object for legacy reasons\n  // for the time being. TODO: deprecate all this jazz\n  const cp = (this.connectionParameters = new ConnectionParameters(config))\n  if (config.nativeConnectionString) cp.nativeConnectionString = config.nativeConnectionString\n  this.user = cp.user\n\n  // \"hiding\" the password so it doesn't show up in stack traces\n  // or if the client is console.logged\n  Object.defineProperty(this, 'password', {\n    configurable: true,\n    enumerable: false,\n    writable: true,\n    value: cp.password,\n  })\n  this.database = cp.database\n  this.host = cp.host\n  this.port = cp.port\n\n  // a hash to hold named queries\n  this.namedQueries = {}\n})\n\nClient.Query = NativeQuery\n\nutil.inherits(Client, EventEmitter)\n\nClient.prototype._errorAllQueries = function (err) {\n  const enqueueError = (query) => {\n    process.nextTick(() => {\n      query.native = this.native\n      query.handleError(err)\n    })\n  }\n\n  if (this._hasActiveQuery()) {\n    enqueueError(this._activeQuery)\n    this._activeQuery = null\n  }\n\n  this._queryQueue.forEach(enqueueError)\n  this._queryQueue.length = 0\n}\n\n// connect to the backend\n// pass an optional callback to be called once connected\n// or with an error if there was a connection error\nClient.prototype._connect = function (cb) {\n  const self = this\n\n  if (this._connecting) {\n    process.nextTick(() => cb(new Error('Client has already been connected. You cannot reuse a client.')))\n    return\n  }\n\n  this._connecting = true\n\n  this.connectionParameters.getLibpqConnectionString(function (err, conString) {\n    if (self.connectionParameters.nativeConnectionString) conString = self.connectionParameters.nativeConnectionString\n    if (err) return cb(err)\n    self.native.connect(conString, function (err) {\n      if (err) {\n        self.native.end()\n        return cb(err)\n      }\n\n      // set internal states to connected\n      self._connected = true\n\n      // handle connection errors from the native layer\n      self.native.on('error', function (err) {\n        self._queryable = false\n        self._errorAllQueries(err)\n        self.emit('error', err)\n      })\n\n      self.native.on('notification', function (msg) {\n        self.emit('notification', {\n          channel: msg.relname,\n          payload: msg.extra,\n        })\n      })\n\n      // signal we are connected now\n      self.emit('connect')\n      self._pulseQueryQueue(true)\n\n      cb(null, this)\n    })\n  })\n}\n\nClient.prototype.connect = function (callback) {\n  if (callback) {\n    this._connect(callback)\n    return\n  }\n\n  return new this._Promise((resolve, reject) => {\n    this._connect((error) => {\n      if (error) {\n        reject(error)\n      } else {\n        resolve(this)\n      }\n    })\n  })\n}\n\n// send a query to the server\n// this method is highly overloaded to take\n// 1) string query, optional array of parameters, optional function callback\n// 2) object query with {\n//    string query\n//    optional array values,\n//    optional function callback instead of as a separate parameter\n//    optional string name to name & cache the query plan\n//    optional string rowMode = 'array' for an array of results\n//  }\nClient.prototype.query = function (config, values, callback) {\n  let query\n  let result\n  let readTimeout\n  let readTimeoutTimer\n  let queryCallback\n\n  if (config === null || config === undefined) {\n    throw new TypeError('Client was passed a null or undefined query')\n  } else if (typeof config.submit === 'function') {\n    readTimeout = config.query_timeout || this.connectionParameters.query_timeout\n    result = query = config\n    // accept query(new Query(...), (err, res) => { }) style\n    if (typeof values === 'function') {\n      config.callback = values\n    }\n  } else {\n    readTimeout = config.query_timeout || this.connectionParameters.query_timeout\n    query = new NativeQuery(config, values, callback)\n    if (!query.callback) {\n      let resolveOut, rejectOut\n      result = new this._Promise((resolve, reject) => {\n        resolveOut = resolve\n        rejectOut = reject\n      }).catch((err) => {\n        Error.captureStackTrace(err)\n        throw err\n      })\n      query.callback = (err, res) => (err ? rejectOut(err) : resolveOut(res))\n    }\n  }\n\n  if (readTimeout) {\n    queryCallback = query.callback || (() => {})\n\n    readTimeoutTimer = setTimeout(() => {\n      const error = new Error('Query read timeout')\n\n      process.nextTick(() => {\n        query.handleError(error, this.connection)\n      })\n\n      queryCallback(error)\n\n      // we already returned an error,\n      // just do nothing if query completes\n      query.callback = () => {}\n\n      // Remove from queue\n      const index = this._queryQueue.indexOf(query)\n      if (index > -1) {\n        this._queryQueue.splice(index, 1)\n      }\n\n      this._pulseQueryQueue()\n    }, readTimeout)\n\n    query.callback = (err, res) => {\n      clearTimeout(readTimeoutTimer)\n      queryCallback(err, res)\n    }\n  }\n\n  if (!this._queryable) {\n    query.native = this.native\n    process.nextTick(() => {\n      query.handleError(new Error('Client has encountered a connection error and is not queryable'))\n    })\n    return result\n  }\n\n  if (this._ending) {\n    query.native = this.native\n    process.nextTick(() => {\n      query.handleError(new Error('Client was closed and is not queryable'))\n    })\n    return result\n  }\n\n  if (this._queryQueue.length > 0) {\n    queryQueueLengthDeprecationNotice()\n  }\n\n  this._queryQueue.push(query)\n  this._pulseQueryQueue()\n  return result\n}\n\n// disconnect from the backend server\nClient.prototype.end = function (cb) {\n  const self = this\n\n  this._ending = true\n\n  if (this._connecting && !this._connected) {\n    this.once('connect', () => {\n      this.end(() => {})\n    })\n  }\n  let result\n  if (!cb) {\n    result = new this._Promise(function (resolve, reject) {\n      cb = (err) => (err ? reject(err) : resolve())\n    })\n  }\n\n  this.native.end(function () {\n    self._connected = false\n\n    self._errorAllQueries(new Error('Connection terminated'))\n\n    process.nextTick(() => {\n      self.emit('end')\n      if (cb) cb()\n    })\n  })\n  return result\n}\n\nClient.prototype._hasActiveQuery = function () {\n  return this._activeQuery && this._activeQuery.state !== 'error' && this._activeQuery.state !== 'end'\n}\n\nClient.prototype._pulseQueryQueue = function (initialConnection) {\n  if (!this._connected) {\n    return\n  }\n  if (this._hasActiveQuery()) {\n    return\n  }\n  const query = this._queryQueue.shift()\n  if (!query) {\n    if (!initialConnection) {\n      this.emit('drain')\n    }\n    return\n  }\n  this._activeQuery = query\n  query.submit(this)\n  const self = this\n  query.once('_done', function () {\n    self._pulseQueryQueue()\n  })\n}\n\n// attempt to cancel an in-progress query\nClient.prototype.cancel = function (query) {\n  if (this._activeQuery === query) {\n    this.native.cancel(function () {})\n  } else if (this._queryQueue.indexOf(query) !== -1) {\n    this._queryQueue.splice(this._queryQueue.indexOf(query), 1)\n  }\n}\n\nClient.prototype.ref = function () {}\nClient.prototype.unref = function () {}\n\nClient.prototype.setTypeParser = function (oid, format, parseFn) {\n  return this._types.setTypeParser(oid, format, parseFn)\n}\n\nClient.prototype.getTypeParser = function (oid, format) {\n  return this._types.getTypeParser(oid, format)\n}\n\nClient.prototype.isConnected = function () {\n  return this._connected\n}\n\nClient.prototype.getTransactionStatus = function () {\n  return this.native.getTransactionStatus()\n}\n","'use strict'\nmodule.exports = require('./client')\n","'use strict'\n\nconst Client = require('./client')\nconst defaults = require('./defaults')\nconst Connection = require('./connection')\nconst Result = require('./result')\nconst utils = require('./utils')\nconst Pool = require('pg-pool')\nconst TypeOverrides = require('./type-overrides')\nconst { DatabaseError } = require('pg-protocol')\nconst { escapeIdentifier, escapeLiteral } = require('./utils')\n\nconst poolFactory = (Client) => {\n  return class BoundPool extends Pool {\n    constructor(options) {\n      super(options, Client)\n    }\n  }\n}\n\nconst PG = function (clientConstructor) {\n  this.defaults = defaults\n  this.Client = clientConstructor\n  this.Query = this.Client.Query\n  this.Pool = poolFactory(this.Client)\n  this._pools = []\n  this.Connection = Connection\n  this.types = require('pg-types')\n  this.DatabaseError = DatabaseError\n  this.TypeOverrides = TypeOverrides\n  this.escapeIdentifier = escapeIdentifier\n  this.escapeLiteral = escapeLiteral\n  this.Result = Result\n  this.utils = utils\n}\n\nlet clientConstructor = Client\n\nlet forceNative = false\ntry {\n  forceNative = !!process.env.NODE_PG_FORCE_NATIVE\n} catch {\n  // ignore, e.g., Deno without --allow-env\n}\n\nif (forceNative) {\n  clientConstructor = require('./native')\n}\n\nmodule.exports = new PG(clientConstructor)\n\n// lazy require native module...the native module may not have installed\nObject.defineProperty(module.exports, 'native', {\n  configurable: true,\n  enumerable: false,\n  get() {\n    let native = null\n    try {\n      native = new PG(require('./native'))\n    } catch (err) {\n      if (err.code !== 'MODULE_NOT_FOUND') {\n        throw err\n      }\n    }\n\n    // overwrite module.exports.native so that getter is never called again\n    Object.defineProperty(module.exports, 'native', {\n      value: native,\n    })\n\n    return native\n  },\n})\n","// ESM wrapper for pg\nimport pg from '../lib/index.js'\n\n// Re-export all the properties\nexport const Client = pg.Client\nexport const Pool = pg.Pool\nexport const Connection = pg.Connection\nexport const types = pg.types\nexport const Query = pg.Query\nexport const DatabaseError = pg.DatabaseError\nexport const escapeIdentifier = pg.escapeIdentifier\nexport const escapeLiteral = pg.escapeLiteral\nexport const Result = pg.Result\nexport const TypeOverrides = pg.TypeOverrides\n\n// Also export the defaults\nexport const defaults = pg.defaults\n\n// Re-export the default\nexport default pg\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICircularList } from 'common/Types';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { Emitter } from 'vs/base/common/event';\n\nexport interface IInsertEvent {\n  index: number;\n  amount: number;\n}\n\nexport interface IDeleteEvent {\n  index: number;\n  amount: number;\n}\n\n/**\n * Represents a circular list; a list with a maximum size that wraps around when push is called,\n * overriding values at the start of the list.\n */\nexport class CircularList<T> extends Disposable implements ICircularList<T> {\n  protected _array: (T | undefined)[];\n  private _startIndex: number;\n  private _length: number;\n\n  public readonly onDeleteEmitter = this._register(new Emitter<IDeleteEvent>());\n  public readonly onDelete = this.onDeleteEmitter.event;\n  public readonly onInsertEmitter = this._register(new Emitter<IInsertEvent>());\n  public readonly onInsert = this.onInsertEmitter.event;\n  public readonly onTrimEmitter = this._register(new Emitter<number>());\n  public readonly onTrim = this.onTrimEmitter.event;\n\n  constructor(\n    private _maxLength: number\n  ) {\n    super();\n    this._array = new Array<T>(this._maxLength);\n    this._startIndex = 0;\n    this._length = 0;\n  }\n\n  public get maxLength(): number {\n    return this._maxLength;\n  }\n\n  public set maxLength(newMaxLength: number) {\n    // There was no change in maxLength, return early.\n    if (this._maxLength === newMaxLength) {\n      return;\n    }\n\n    // Reconstruct array, starting at index 0. Only transfer values from the\n    // indexes 0 to length.\n    const newArray = new Array<T | undefined>(newMaxLength);\n    for (let i = 0; i < Math.min(newMaxLength, this.length); i++) {\n      newArray[i] = this._array[this._getCyclicIndex(i)];\n    }\n    this._array = newArray;\n    this._maxLength = newMaxLength;\n    this._startIndex = 0;\n  }\n\n  public get length(): number {\n    return this._length;\n  }\n\n  public set length(newLength: number) {\n    if (newLength > this._length) {\n      for (let i = this._length; i < newLength; i++) {\n        this._array[i] = undefined;\n      }\n    }\n    this._length = newLength;\n  }\n\n  /**\n   * Gets the value at an index.\n   *\n   * Note that for performance reasons there is no bounds checking here, the index reference is\n   * circular so this should always return a value and never throw.\n   * @param index The index of the value to get.\n   * @returns The value corresponding to the index.\n   */\n  public get(index: number): T | undefined {\n    return this._array[this._getCyclicIndex(index)];\n  }\n\n  /**\n   * Sets the value at an index.\n   *\n   * Note that for performance reasons there is no bounds checking here, the index reference is\n   * circular so this should always return a value and never throw.\n   * @param index The index to set.\n   * @param value The value to set.\n   */\n  public set(index: number, value: T | undefined): void {\n    this._array[this._getCyclicIndex(index)] = value;\n  }\n\n  /**\n   * Pushes a new value onto the list, wrapping around to the start of the array, overriding index 0\n   * if the maximum length is reached.\n   * @param value The value to push onto the list.\n   */\n  public push(value: T): void {\n    this._array[this._getCyclicIndex(this._length)] = value;\n    if (this._length === this._maxLength) {\n      this._startIndex = ++this._startIndex % this._maxLength;\n      this.onTrimEmitter.fire(1);\n    } else {\n      this._length++;\n    }\n  }\n\n  /**\n   * Advance ringbuffer index and return current element for recycling.\n   * Note: The buffer must be full for this method to work.\n   * @throws When the buffer is not full.\n   */\n  public recycle(): T {\n    if (this._length !== this._maxLength) {\n      throw new Error('Can only recycle when the buffer is full');\n    }\n    this._startIndex = ++this._startIndex % this._maxLength;\n    this.onTrimEmitter.fire(1);\n    return this._array[this._getCyclicIndex(this._length - 1)]!;\n  }\n\n  /**\n   * Ringbuffer is at max length.\n   */\n  public get isFull(): boolean {\n    return this._length === this._maxLength;\n  }\n\n  /**\n   * Removes and returns the last value on the list.\n   * @returns The popped value.\n   */\n  public pop(): T | undefined {\n    return this._array[this._getCyclicIndex(this._length-- - 1)];\n  }\n\n  /**\n   * Deletes and/or inserts items at a particular index (in that order). Unlike\n   * Array.prototype.splice, this operation does not return the deleted items as a new array in\n   * order to save creating a new array. Note that this operation may shift all values in the list\n   * in the worst case.\n   * @param start The index to delete and/or insert.\n   * @param deleteCount The number of elements to delete.\n   * @param items The items to insert.\n   */\n  public splice(start: number, deleteCount: number, ...items: T[]): void {\n    // Delete items\n    if (deleteCount) {\n      for (let i = start; i < this._length - deleteCount; i++) {\n        this._array[this._getCyclicIndex(i)] = this._array[this._getCyclicIndex(i + deleteCount)];\n      }\n      this._length -= deleteCount;\n      this.onDeleteEmitter.fire({ index: start, amount: deleteCount });\n    }\n\n    // Add items\n    for (let i = this._length - 1; i >= start; i--) {\n      this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)];\n    }\n    for (let i = 0; i < items.length; i++) {\n      this._array[this._getCyclicIndex(start + i)] = items[i];\n    }\n    if (items.length) {\n      this.onInsertEmitter.fire({ index: start, amount: items.length });\n    }\n\n    // Adjust length as needed\n    if (this._length + items.length > this._maxLength) {\n      const countToTrim = (this._length + items.length) - this._maxLength;\n      this._startIndex += countToTrim;\n      this._length = this._maxLength;\n      this.onTrimEmitter.fire(countToTrim);\n    } else {\n      this._length += items.length;\n    }\n  }\n\n  /**\n   * Trims a number of items from the start of the list.\n   * @param count The number of items to remove.\n   */\n  public trimStart(count: number): void {\n    if (count > this._length) {\n      count = this._length;\n    }\n    this._startIndex += count;\n    this._length -= count;\n    this.onTrimEmitter.fire(count);\n  }\n\n  public shiftElements(start: number, count: number, offset: number): void {\n    if (count <= 0) {\n      return;\n    }\n    if (start < 0 || start >= this._length) {\n      throw new Error('start argument out of range');\n    }\n    if (start + offset < 0) {\n      throw new Error('Cannot shift elements in list beyond index 0');\n    }\n\n    if (offset > 0) {\n      for (let i = count - 1; i >= 0; i--) {\n        this.set(start + i + offset, this.get(start + i));\n      }\n      const expandListBy = (start + count + offset) - this._length;\n      if (expandListBy > 0) {\n        this._length += expandListBy;\n        while (this._length > this._maxLength) {\n          this._length--;\n          this._startIndex++;\n          this.onTrimEmitter.fire(1);\n        }\n      }\n    } else {\n      for (let i = 0; i < count; i++) {\n        this.set(start + i + offset, this.get(start + i));\n      }\n    }\n  }\n\n  /**\n   * Gets the cyclic index for the specified regular index. The cyclic index can then be used on the\n   * backing array to get the element associated with the regular index.\n   * @param index The regular index.\n   * @returns The cyclic index.\n   */\n  private _getCyclicIndex(index: number): number {\n    return (this._startIndex + index) % this._maxLength;\n  }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/*\n * A simple utility for cloning values\n */\nexport function clone<T>(val: T, depth: number = 5): T {\n  if (typeof val !== 'object') {\n    return val;\n  }\n\n  // If we're cloning an array, use an array as the base, otherwise use an object\n  const clonedObject: any = Array.isArray(val) ? [] : {};\n\n  for (const key in val) {\n    // Recursively clone eack item unless we're at the maximum depth\n    clonedObject[key] = depth <= 1 ? val[key] : (val[key] && clone(val[key], depth - 1));\n  }\n\n  return clonedObject as T;\n}\n","/**\n * Copyright (c) 2014-2020 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n *   Fabrice Bellard's javascript vt100 for jslinux:\n *   http://bellard.org/jslinux/\n *   Copyright (c) 2011 Fabrice Bellard\n *   The original design remains. The terminal itself\n *   has been extended to include xterm CSI codes, among\n *   other features.\n *\n * Terminal Emulation References:\n *   http://vt100.net/\n *   http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n *   http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n *   http://invisible-island.net/vttest/\n *   http://www.inwap.com/pdp10/ansicode.txt\n *   http://linux.die.net/man/4/console_codes\n *   http://linux.die.net/man/7/urxvt\n */\n\nimport { IInstantiationService, IOptionsService, IBufferService, ILogService, ICharsetService, ICoreService, ICoreMouseService, IUnicodeService, LogLevelEnum, ITerminalOptions, IOscLinkService } from 'common/services/Services';\nimport { InstantiationService } from 'common/services/InstantiationService';\nimport { LogService } from 'common/services/LogService';\nimport { BufferService, MINIMUM_COLS, MINIMUM_ROWS } from 'common/services/BufferService';\nimport { OptionsService } from 'common/services/OptionsService';\nimport { IDisposable, IAttributeData, ICoreTerminal, IScrollEvent } from 'common/Types';\nimport { CoreService } from 'common/services/CoreService';\nimport { CoreMouseService } from 'common/services/CoreMouseService';\nimport { UnicodeService } from 'common/services/UnicodeService';\nimport { CharsetService } from 'common/services/CharsetService';\nimport { updateWindowsModeWrappedState } from 'common/WindowsMode';\nimport { IFunctionIdentifier, IParams } from 'common/parser/Types';\nimport { IBufferSet } from 'common/buffer/Types';\nimport { InputHandler } from 'common/InputHandler';\nimport { WriteBuffer } from 'common/input/WriteBuffer';\nimport { OscLinkService } from 'common/services/OscLinkService';\nimport { Emitter, Event } from 'vs/base/common/event';\nimport { Disposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle';\n\n// Only trigger this warning a single time per session\nlet hasWriteSyncWarnHappened = false;\n\nexport abstract class CoreTerminal extends Disposable implements ICoreTerminal {\n  protected readonly _instantiationService: IInstantiationService;\n  protected readonly _bufferService: IBufferService;\n  protected readonly _logService: ILogService;\n  protected readonly _charsetService: ICharsetService;\n  protected readonly _oscLinkService: IOscLinkService;\n\n  public readonly coreMouseService: ICoreMouseService;\n  public readonly coreService: ICoreService;\n  public readonly unicodeService: IUnicodeService;\n  public readonly optionsService: IOptionsService;\n\n  protected _inputHandler: InputHandler;\n  private _writeBuffer: WriteBuffer;\n  private _windowsWrappingHeuristics = this._register(new MutableDisposable());\n\n  private readonly _onBinary = this._register(new Emitter<string>());\n  public readonly onBinary = this._onBinary.event;\n  private readonly _onData = this._register(new Emitter<string>());\n  public readonly onData = this._onData.event;\n  protected _onLineFeed = this._register(new Emitter<void>());\n  public readonly onLineFeed = this._onLineFeed.event;\n  private readonly _onResize = this._register(new Emitter<{ cols: number, rows: number }>());\n  public readonly onResize = this._onResize.event;\n  protected readonly _onWriteParsed = this._register(new Emitter<void>());\n  public readonly onWriteParsed = this._onWriteParsed.event;\n\n  /**\n   * Internally we track the source of the scroll but this is meaningless outside the library so\n   * it's filtered out.\n   */\n  protected _onScrollApi?: Emitter<number>;\n  protected _onScroll = this._register(new Emitter<IScrollEvent>());\n  public get onScroll(): Event<number> {\n    if (!this._onScrollApi) {\n      this._onScrollApi = this._register(new Emitter<number>());\n      this._onScroll.event(ev => {\n        this._onScrollApi?.fire(ev.position);\n      });\n    }\n    return this._onScrollApi.event;\n  }\n\n  public get cols(): number { return this._bufferService.cols; }\n  public get rows(): number { return this._bufferService.rows; }\n  public get buffers(): IBufferSet { return this._bufferService.buffers; }\n  public get options(): Required<ITerminalOptions> { return this.optionsService.options; }\n  public set options(options: ITerminalOptions) {\n    for (const key in options) {\n      this.optionsService.options[key] = options[key];\n    }\n  }\n\n  constructor(\n    options: Partial<ITerminalOptions>\n  ) {\n    super();\n\n    // Setup and initialize services\n    this._instantiationService = new InstantiationService();\n    this.optionsService = this._register(new OptionsService(options));\n    this._instantiationService.setService(IOptionsService, this.optionsService);\n    this._bufferService = this._register(this._instantiationService.createInstance(BufferService));\n    this._instantiationService.setService(IBufferService, this._bufferService);\n    this._logService = this._register(this._instantiationService.createInstance(LogService));\n    this._instantiationService.setService(ILogService, this._logService);\n    this.coreService = this._register(this._instantiationService.createInstance(CoreService));\n    this._instantiationService.setService(ICoreService, this.coreService);\n    this.coreMouseService = this._register(this._instantiationService.createInstance(CoreMouseService));\n    this._instantiationService.setService(ICoreMouseService, this.coreMouseService);\n    this.unicodeService = this._register(this._instantiationService.createInstance(UnicodeService));\n    this._instantiationService.setService(IUnicodeService, this.unicodeService);\n    this._charsetService = this._instantiationService.createInstance(CharsetService);\n    this._instantiationService.setService(ICharsetService, this._charsetService);\n    this._oscLinkService = this._instantiationService.createInstance(OscLinkService);\n    this._instantiationService.setService(IOscLinkService, this._oscLinkService);\n\n\n    // Register input handler and handle/forward events\n    this._inputHandler = this._register(new InputHandler(this._bufferService, this._charsetService, this.coreService, this._logService, this.optionsService, this._oscLinkService, this.coreMouseService, this.unicodeService));\n    this._register(Event.forward(this._inputHandler.onLineFeed, this._onLineFeed));\n    this._register(this._inputHandler);\n\n    // Setup listeners\n    this._register(Event.forward(this._bufferService.onResize, this._onResize));\n    this._register(Event.forward(this.coreService.onData, this._onData));\n    this._register(Event.forward(this.coreService.onBinary, this._onBinary));\n    this._register(this.coreService.onRequestScrollToBottom(() => this.scrollToBottom(true)));\n    this._register(this.coreService.onUserInput(() =>  this._writeBuffer.handleUserInput()));\n    this._register(this.optionsService.onMultipleOptionChange(['windowsMode', 'windowsPty'], () => this._handleWindowsPtyOptionChange()));\n    this._register(this._bufferService.onScroll(() => {\n      this._onScroll.fire({ position: this._bufferService.buffer.ydisp });\n      this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop, this._bufferService.buffer.scrollBottom);\n    }));\n    // Setup WriteBuffer\n    this._writeBuffer = this._register(new WriteBuffer((data, promiseResult) => this._inputHandler.parse(data, promiseResult)));\n    this._register(Event.forward(this._writeBuffer.onWriteParsed, this._onWriteParsed));\n  }\n\n  public write(data: string | Uint8Array, callback?: () => void): void {\n    this._writeBuffer.write(data, callback);\n  }\n\n  /**\n   * Write data to terminal synchonously.\n   *\n   * This method is unreliable with async parser handlers, thus should not\n   * be used anymore. If you need blocking semantics on data input consider\n   * `write` with a callback instead.\n   *\n   * @deprecated Unreliable, will be removed soon.\n   */\n  public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n    if (this._logService.logLevel <= LogLevelEnum.WARN && !hasWriteSyncWarnHappened) {\n      this._logService.warn('writeSync is unreliable and will be removed soon.');\n      hasWriteSyncWarnHappened = true;\n    }\n    this._writeBuffer.writeSync(data, maxSubsequentCalls);\n  }\n\n  public input(data: string, wasUserInput: boolean = true): void {\n    this.coreService.triggerDataEvent(data, wasUserInput);\n  }\n\n  public resize(x: number, y: number): void {\n    if (isNaN(x) || isNaN(y)) {\n      return;\n    }\n\n    x = Math.max(x, MINIMUM_COLS);\n    y = Math.max(y, MINIMUM_ROWS);\n\n    this._bufferService.resize(x, y);\n  }\n\n  /**\n   * Scroll the terminal down 1 row, creating a blank line.\n   * @param eraseAttr The attribute data to use the for blank line.\n   * @param isWrapped Whether the new line is wrapped from the previous line.\n   */\n  public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n    this._bufferService.scroll(eraseAttr, isWrapped);\n  }\n\n  /**\n   * Scroll the display of the terminal\n   * @param disp The number of lines to scroll down (negative scroll up).\n   * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used to avoid\n   * unwanted events being handled by the viewport when the event was triggered from the viewport\n   * originally.\n   */\n  public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n    this._bufferService.scrollLines(disp, suppressScrollEvent);\n  }\n\n  public scrollPages(pageCount: number): void {\n    this.scrollLines(pageCount * (this.rows - 1));\n  }\n\n  public scrollToTop(): void {\n    this.scrollLines(-this._bufferService.buffer.ydisp);\n  }\n\n  public scrollToBottom(disableSmoothScroll?: boolean): void {\n    this.scrollLines(this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n  }\n\n  public scrollToLine(line: number): void {\n    const scrollAmount = line - this._bufferService.buffer.ydisp;\n    if (scrollAmount !== 0) {\n      this.scrollLines(scrollAmount);\n    }\n  }\n\n  /** Add handler for ESC escape sequence. See xterm.d.ts for details. */\n  public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise<boolean>): IDisposable {\n    return this._inputHandler.registerEscHandler(id, callback);\n  }\n\n  /** Add handler for DCS escape sequence. See xterm.d.ts for details. */\n  public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise<boolean>): IDisposable {\n    return this._inputHandler.registerDcsHandler(id, callback);\n  }\n\n  /** Add handler for CSI escape sequence. See xterm.d.ts for details. */\n  public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise<boolean>): IDisposable {\n    return this._inputHandler.registerCsiHandler(id, callback);\n  }\n\n  /** Add handler for OSC escape sequence. See xterm.d.ts for details. */\n  public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise<boolean>): IDisposable {\n    return this._inputHandler.registerOscHandler(ident, callback);\n  }\n\n  protected _setup(): void {\n    this._handleWindowsPtyOptionChange();\n  }\n\n  public reset(): void {\n    this._inputHandler.reset();\n    this._bufferService.reset();\n    this._charsetService.reset();\n    this.coreService.reset();\n    this.coreMouseService.reset();\n  }\n\n\n  private _handleWindowsPtyOptionChange(): void {\n    let value = false;\n    const windowsPty = this.optionsService.rawOptions.windowsPty;\n    if (windowsPty && windowsPty.buildNumber !== undefined && windowsPty.buildNumber !== undefined) {\n      value = !!(windowsPty.backend === 'conpty' && windowsPty.buildNumber < 21376);\n    } else if (this.optionsService.rawOptions.windowsMode) {\n      value = true;\n    }\n    if (value) {\n      this._enableWindowsWrappingHeuristics();\n    } else {\n      this._windowsWrappingHeuristics.clear();\n    }\n  }\n\n  protected _enableWindowsWrappingHeuristics(): void {\n    if (!this._windowsWrappingHeuristics.value) {\n      const disposables: IDisposable[] = [];\n      disposables.push(this.onLineFeed(updateWindowsModeWrappedState.bind(null, this._bufferService)));\n      disposables.push(this.registerCsiHandler({ final: 'H' }, () => {\n        updateWindowsModeWrappedState(this._bufferService);\n        return false;\n      }));\n      this._windowsWrappingHeuristics.value = toDisposable(() => {\n        for (const d of disposables) {\n          d.dispose();\n        }\n      });\n    }\n  }\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IInputHandler, IAttributeData, IDisposable, IWindowOptions, IColorEvent, IParseStack, ColorIndex, ColorRequestType, SpecialColorIndex } from 'common/Types';\nimport { C0, C1 } from 'common/data/EscapeSequences';\nimport { CHARSETS, DEFAULT_CHARSET } from 'common/data/Charsets';\nimport { EscapeSequenceParser } from 'common/parser/EscapeSequenceParser';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { StringToUtf32, stringFromCodePoint, Utf8ToUtf32 } from 'common/input/TextDecoder';\nimport { BufferLine, DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine';\nimport { IParsingState, IEscapeSequenceParser, IParams, IFunctionIdentifier } from 'common/parser/Types';\nimport { NULL_CELL_CODE, NULL_CELL_WIDTH, Attributes, FgFlags, BgFlags, Content, UnderlineStyle } from 'common/buffer/Constants';\nimport { CellData } from 'common/buffer/CellData';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { ICoreService, IBufferService, IOptionsService, ILogService, ICoreMouseService, ICharsetService, IUnicodeService, LogLevelEnum, IOscLinkService } from 'common/services/Services';\nimport { UnicodeService } from 'common/services/UnicodeService';\nimport { OscHandler } from 'common/parser/OscParser';\nimport { DcsHandler } from 'common/parser/DcsParser';\nimport { IBuffer } from 'common/buffer/Types';\nimport { parseColor } from 'common/input/XParseColor';\nimport { Emitter } from 'vs/base/common/event';\n\n/**\n * Map collect to glevel. Used in `selectCharset`.\n */\nconst GLEVEL: { [key: string]: number } = { '(': 0, ')': 1, '*': 2, '+': 3, '-': 1, '.': 2 };\n\n/**\n * VT commands done by the parser - FIXME: move this to the parser?\n */\n// @vt: #Y   ESC   CSI   \"Control Sequence Introducer\"   \"ESC [\"   \"Start of a CSI sequence.\"\n// @vt: #Y   ESC   OSC   \"Operating System Command\"      \"ESC ]\"   \"Start of an OSC sequence.\"\n// @vt: #Y   ESC   DCS   \"Device Control String\"         \"ESC P\"   \"Start of a DCS sequence.\"\n// @vt: #Y   ESC   ST    \"String Terminator\"             \"ESC \\\"   \"Terminator used for string type sequences.\"\n// @vt: #Y   ESC   PM    \"Privacy Message\"               \"ESC ^\"   \"Start of a privacy message.\"\n// @vt: #Y   ESC   APC   \"Application Program Command\"   \"ESC _\"   \"Start of an APC sequence.\"\n// @vt: #Y   C1    CSI   \"Control Sequence Introducer\"   \"\\x9B\"    \"Start of a CSI sequence.\"\n// @vt: #Y   C1    OSC   \"Operating System Command\"      \"\\x9D\"    \"Start of an OSC sequence.\"\n// @vt: #Y   C1    DCS   \"Device Control String\"         \"\\x90\"    \"Start of a DCS sequence.\"\n// @vt: #Y   C1    ST    \"String Terminator\"             \"\\x9C\"    \"Terminator used for string type sequences.\"\n// @vt: #Y   C1    PM    \"Privacy Message\"               \"\\x9E\"    \"Start of a privacy message.\"\n// @vt: #Y   C1    APC   \"Application Program Command\"   \"\\x9F\"    \"Start of an APC sequence.\"\n// @vt: #Y   C0    NUL   \"Null\"                          \"\\0, \\x00\"  \"NUL is ignored.\"\n// @vt: #Y   C0    ESC   \"Escape\"                        \"\\e, \\x1B\"  \"Start of a sequence. Cancels any other sequence.\"\n\n/**\n * Document xterm VT features here that are currently unsupported\n */\n// @vt: #E[Supported via @xterm/addon-image.]  DCS   SIXEL       \"SIXEL Graphics\"          \"DCS Ps ; Ps ; Ps ; q \tPt ST\"  \"Draw SIXEL image.\"\n// @vt: #N  DCS   DECUDK      \"User Defined Keys\"       \"DCS Ps ; Ps \\| Pt ST\"           \"Definitions for user-defined keys.\"\n// @vt: #N  DCS   XTGETTCAP   \"Request Terminfo String\" \"DCS + q Pt ST\"                 \"Request Terminfo String.\"\n// @vt: #N  DCS   XTSETTCAP   \"Set Terminfo Data\"       \"DCS + p Pt ST\"                 \"Set Terminfo Data.\"\n// @vt: #N  OSC   1           \"Set Icon Name\"           \"OSC 1 ; Pt BEL\"                \"Set icon name.\"\n\n/**\n * Max length of the UTF32 input buffer. Real memory consumption is 4 times higher.\n */\nconst MAX_PARSEBUFFER_LENGTH = 131072;\n\n/**\n * Limit length of title and icon name stacks.\n */\nconst STACK_LIMIT = 10;\n\n// map params to window option\nfunction paramToWindowOption(n: number, opts: IWindowOptions): boolean {\n  if (n > 24) {\n    return opts.setWinLines || false;\n  }\n  switch (n) {\n    case 1: return !!opts.restoreWin;\n    case 2: return !!opts.minimizeWin;\n    case 3: return !!opts.setWinPosition;\n    case 4: return !!opts.setWinSizePixels;\n    case 5: return !!opts.raiseWin;\n    case 6: return !!opts.lowerWin;\n    case 7: return !!opts.refreshWin;\n    case 8: return !!opts.setWinSizeChars;\n    case 9: return !!opts.maximizeWin;\n    case 10: return !!opts.fullscreenWin;\n    case 11: return !!opts.getWinState;\n    case 13: return !!opts.getWinPosition;\n    case 14: return !!opts.getWinSizePixels;\n    case 15: return !!opts.getScreenSizePixels;\n    case 16: return !!opts.getCellSizePixels;\n    case 18: return !!opts.getWinSizeChars;\n    case 19: return !!opts.getScreenSizeChars;\n    case 20: return !!opts.getIconTitle;\n    case 21: return !!opts.getWinTitle;\n    case 22: return !!opts.pushTitle;\n    case 23: return !!opts.popTitle;\n    case 24: return !!opts.setWinLines;\n  }\n  return false;\n}\n\nexport enum WindowsOptionsReportType {\n  GET_WIN_SIZE_PIXELS = 0,\n  GET_CELL_SIZE_PIXELS = 1\n}\n\n// create a warning log if an async handler takes longer than the limit (in ms)\nconst SLOW_ASYNC_LIMIT = 5000;\n\n// Work variables to avoid garbage collection\nlet $temp = 0;\n\n/**\n * The terminal's standard implementation of IInputHandler, this handles all\n * input from the Parser.\n *\n * Refer to http://invisible-island.net/xterm/ctlseqs/ctlseqs.html to understand\n * each function's header comment.\n */\nexport class InputHandler extends Disposable implements IInputHandler {\n  private _parseBuffer: Uint32Array = new Uint32Array(4096);\n  private _stringDecoder: StringToUtf32 = new StringToUtf32();\n  private _utf8Decoder: Utf8ToUtf32 = new Utf8ToUtf32();\n  private _windowTitle = '';\n  private _iconName = '';\n  private _dirtyRowTracker: IDirtyRowTracker;\n  protected _windowTitleStack: string[] = [];\n  protected _iconNameStack: string[] = [];\n\n  private _curAttrData: IAttributeData = DEFAULT_ATTR_DATA.clone();\n  public getAttrData(): IAttributeData { return this._curAttrData; }\n  private _eraseAttrDataInternal: IAttributeData = DEFAULT_ATTR_DATA.clone();\n\n  private _activeBuffer: IBuffer;\n\n  private readonly _onRequestBell = this._register(new Emitter<void>());\n  public readonly onRequestBell = this._onRequestBell.event;\n  private readonly _onRequestRefreshRows = this._register(new Emitter<{ start: number, end: number } | undefined>());\n  public readonly onRequestRefreshRows = this._onRequestRefreshRows.event;\n  private readonly _onRequestReset = this._register(new Emitter<void>());\n  public readonly onRequestReset = this._onRequestReset.event;\n  private readonly _onRequestSendFocus = this._register(new Emitter<void>());\n  public readonly onRequestSendFocus = this._onRequestSendFocus.event;\n  private readonly _onRequestSyncScrollBar = this._register(new Emitter<void>());\n  public readonly onRequestSyncScrollBar = this._onRequestSyncScrollBar.event;\n  private readonly _onRequestWindowsOptionsReport = this._register(new Emitter<WindowsOptionsReportType>());\n  public readonly onRequestWindowsOptionsReport = this._onRequestWindowsOptionsReport.event;\n\n  private readonly _onA11yChar = this._register(new Emitter<string>());\n  public readonly onA11yChar = this._onA11yChar.event;\n  private readonly _onA11yTab = this._register(new Emitter<number>());\n  public readonly onA11yTab = this._onA11yTab.event;\n  private readonly _onCursorMove = this._register(new Emitter<void>());\n  public readonly onCursorMove = this._onCursorMove.event;\n  private readonly _onLineFeed = this._register(new Emitter<void>());\n  public readonly onLineFeed = this._onLineFeed.event;\n  private readonly _onScroll = this._register(new Emitter<number>());\n  public readonly onScroll = this._onScroll.event;\n  private readonly _onTitleChange = this._register(new Emitter<string>());\n  public readonly onTitleChange = this._onTitleChange.event;\n  private readonly _onColor = this._register(new Emitter<IColorEvent>());\n  public readonly onColor = this._onColor.event;\n\n  private _parseStack: IParseStack = {\n    paused: false,\n    cursorStartX: 0,\n    cursorStartY: 0,\n    decodedLength: 0,\n    position: 0\n  };\n\n  constructor(\n    private readonly _bufferService: IBufferService,\n    private readonly _charsetService: ICharsetService,\n    private readonly _coreService: ICoreService,\n    private readonly _logService: ILogService,\n    private readonly _optionsService: IOptionsService,\n    private readonly _oscLinkService: IOscLinkService,\n    private readonly _coreMouseService: ICoreMouseService,\n    private readonly _unicodeService: IUnicodeService,\n    private readonly _parser: IEscapeSequenceParser = new EscapeSequenceParser()\n  ) {\n    super();\n    this._register(this._parser);\n    this._dirtyRowTracker = new DirtyRowTracker(this._bufferService);\n\n    // Track properties used in performance critical code manually to avoid using slow getters\n    this._activeBuffer = this._bufferService.buffer;\n    this._register(this._bufferService.buffers.onBufferActivate(e => this._activeBuffer = e.activeBuffer));\n\n    /**\n     * custom fallback handlers\n     */\n    this._parser.setCsiHandlerFallback((ident, params) => {\n      this._logService.debug('Unknown CSI code: ', { identifier: this._parser.identToString(ident), params: params.toArray() });\n    });\n    this._parser.setEscHandlerFallback(ident => {\n      this._logService.debug('Unknown ESC code: ', { identifier: this._parser.identToString(ident) });\n    });\n    this._parser.setExecuteHandlerFallback(code => {\n      this._logService.debug('Unknown EXECUTE code: ', { code });\n    });\n    this._parser.setOscHandlerFallback((identifier, action, data) => {\n      this._logService.debug('Unknown OSC code: ', { identifier, action, data });\n    });\n    this._parser.setDcsHandlerFallback((ident, action, payload) => {\n      if (action === 'HOOK') {\n        payload = payload.toArray();\n      }\n      this._logService.debug('Unknown DCS code: ', { identifier: this._parser.identToString(ident), action, payload });\n    });\n\n    /**\n     * print handler\n     */\n    this._parser.setPrintHandler((data, start, end) => this.print(data, start, end));\n\n    /**\n     * CSI handler\n     */\n    this._parser.registerCsiHandler({ final: '@' }, params => this.insertChars(params));\n    this._parser.registerCsiHandler({ intermediates: ' ', final: '@' }, params => this.scrollLeft(params));\n    this._parser.registerCsiHandler({ final: 'A' }, params => this.cursorUp(params));\n    this._parser.registerCsiHandler({ intermediates: ' ', final: 'A' }, params => this.scrollRight(params));\n    this._parser.registerCsiHandler({ final: 'B' }, params => this.cursorDown(params));\n    this._parser.registerCsiHandler({ final: 'C' }, params => this.cursorForward(params));\n    this._parser.registerCsiHandler({ final: 'D' }, params => this.cursorBackward(params));\n    this._parser.registerCsiHandler({ final: 'E' }, params => this.cursorNextLine(params));\n    this._parser.registerCsiHandler({ final: 'F' }, params => this.cursorPrecedingLine(params));\n    this._parser.registerCsiHandler({ final: 'G' }, params => this.cursorCharAbsolute(params));\n    this._parser.registerCsiHandler({ final: 'H' }, params => this.cursorPosition(params));\n    this._parser.registerCsiHandler({ final: 'I' }, params => this.cursorForwardTab(params));\n    this._parser.registerCsiHandler({ final: 'J' }, params => this.eraseInDisplay(params, false));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'J' }, params => this.eraseInDisplay(params, true));\n    this._parser.registerCsiHandler({ final: 'K' }, params => this.eraseInLine(params, false));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'K' }, params => this.eraseInLine(params, true));\n    this._parser.registerCsiHandler({ final: 'L' }, params => this.insertLines(params));\n    this._parser.registerCsiHandler({ final: 'M' }, params => this.deleteLines(params));\n    this._parser.registerCsiHandler({ final: 'P' }, params => this.deleteChars(params));\n    this._parser.registerCsiHandler({ final: 'S' }, params => this.scrollUp(params));\n    this._parser.registerCsiHandler({ final: 'T' }, params => this.scrollDown(params));\n    this._parser.registerCsiHandler({ final: 'X' }, params => this.eraseChars(params));\n    this._parser.registerCsiHandler({ final: 'Z' }, params => this.cursorBackwardTab(params));\n    this._parser.registerCsiHandler({ final: '`' }, params => this.charPosAbsolute(params));\n    this._parser.registerCsiHandler({ final: 'a' }, params => this.hPositionRelative(params));\n    this._parser.registerCsiHandler({ final: 'b' }, params => this.repeatPrecedingCharacter(params));\n    this._parser.registerCsiHandler({ final: 'c' }, params => this.sendDeviceAttributesPrimary(params));\n    this._parser.registerCsiHandler({ prefix: '>', final: 'c' }, params => this.sendDeviceAttributesSecondary(params));\n    this._parser.registerCsiHandler({ final: 'd' }, params => this.linePosAbsolute(params));\n    this._parser.registerCsiHandler({ final: 'e' }, params => this.vPositionRelative(params));\n    this._parser.registerCsiHandler({ final: 'f' }, params => this.hVPosition(params));\n    this._parser.registerCsiHandler({ final: 'g' }, params => this.tabClear(params));\n    this._parser.registerCsiHandler({ final: 'h' }, params => this.setMode(params));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this.setModePrivate(params));\n    this._parser.registerCsiHandler({ final: 'l' }, params => this.resetMode(params));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this.resetModePrivate(params));\n    this._parser.registerCsiHandler({ final: 'm' }, params => this.charAttributes(params));\n    this._parser.registerCsiHandler({ final: 'n' }, params => this.deviceStatus(params));\n    this._parser.registerCsiHandler({ prefix: '?', final: 'n' }, params => this.deviceStatusPrivate(params));\n    this._parser.registerCsiHandler({ intermediates: '!', final: 'p' }, params => this.softReset(params));\n    this._parser.registerCsiHandler({ intermediates: ' ', final: 'q' }, params => this.setCursorStyle(params));\n    this._parser.registerCsiHandler({ final: 'r' }, params => this.setScrollRegion(params));\n    this._parser.registerCsiHandler({ final: 's' }, params => this.saveCursor(params));\n    this._parser.registerCsiHandler({ final: 't' }, params => this.windowOptions(params));\n    this._parser.registerCsiHandler({ final: 'u' }, params => this.restoreCursor(params));\n    this._parser.registerCsiHandler({ intermediates: '\\'', final: '}' }, params => this.insertColumns(params));\n    this._parser.registerCsiHandler({ intermediates: '\\'', final: '~' }, params => this.deleteColumns(params));\n    this._parser.registerCsiHandler({ intermediates: '\"', final: 'q' }, params => this.selectProtected(params));\n    this._parser.registerCsiHandler({ intermediates: '$', final: 'p' }, params => this.requestMode(params, true));\n    this._parser.registerCsiHandler({ prefix: '?', intermediates: '$', final: 'p' }, params => this.requestMode(params, false));\n\n    /**\n     * execute handler\n     */\n    this._parser.setExecuteHandler(C0.BEL, () => this.bell());\n    this._parser.setExecuteHandler(C0.LF, () => this.lineFeed());\n    this._parser.setExecuteHandler(C0.VT, () => this.lineFeed());\n    this._parser.setExecuteHandler(C0.FF, () => this.lineFeed());\n    this._parser.setExecuteHandler(C0.CR, () => this.carriageReturn());\n    this._parser.setExecuteHandler(C0.BS, () => this.backspace());\n    this._parser.setExecuteHandler(C0.HT, () => this.tab());\n    this._parser.setExecuteHandler(C0.SO, () => this.shiftOut());\n    this._parser.setExecuteHandler(C0.SI, () => this.shiftIn());\n    // FIXME:   What do to with missing? Old code just added those to print.\n\n    this._parser.setExecuteHandler(C1.IND, () => this.index());\n    this._parser.setExecuteHandler(C1.NEL, () => this.nextLine());\n    this._parser.setExecuteHandler(C1.HTS, () => this.tabSet());\n\n    /**\n     * OSC handler\n     */\n    //   0 - icon name + title\n    this._parser.registerOscHandler(0, new OscHandler(data => { this.setTitle(data); this.setIconName(data); return true; }));\n    //   1 - icon name\n    this._parser.registerOscHandler(1, new OscHandler(data => this.setIconName(data)));\n    //   2 - title\n    this._parser.registerOscHandler(2, new OscHandler(data => this.setTitle(data)));\n    //   3 - set property X in the form \"prop=value\"\n    //   4 - Change Color Number\n    this._parser.registerOscHandler(4, new OscHandler(data => this.setOrReportIndexedColor(data)));\n    //   5 - Change Special Color Number\n    //   6 - Enable/disable Special Color Number c\n    //   7 - current directory? (not in xterm spec, see https://gitlab.com/gnachman/iterm2/issues/3939)\n    //   8 - create hyperlink (not in xterm spec, see https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda)\n    this._parser.registerOscHandler(8, new OscHandler(data => this.setHyperlink(data)));\n    //  10 - Change VT100 text foreground color to Pt.\n    this._parser.registerOscHandler(10, new OscHandler(data => this.setOrReportFgColor(data)));\n    //  11 - Change VT100 text background color to Pt.\n    this._parser.registerOscHandler(11, new OscHandler(data => this.setOrReportBgColor(data)));\n    //  12 - Change text cursor color to Pt.\n    this._parser.registerOscHandler(12, new OscHandler(data => this.setOrReportCursorColor(data)));\n    //  13 - Change mouse foreground color to Pt.\n    //  14 - Change mouse background color to Pt.\n    //  15 - Change Tektronix foreground color to Pt.\n    //  16 - Change Tektronix background color to Pt.\n    //  17 - Change highlight background color to Pt.\n    //  18 - Change Tektronix cursor color to Pt.\n    //  19 - Change highlight foreground color to Pt.\n    //  46 - Change Log File to Pt.\n    //  50 - Set Font to Pt.\n    //  51 - reserved for Emacs shell.\n    //  52 - Manipulate Selection Data.\n    // 104 ; c - Reset Color Number c.\n    this._parser.registerOscHandler(104, new OscHandler(data => this.restoreIndexedColor(data)));\n    // 105 ; c - Reset Special Color Number c.\n    // 106 ; c; f - Enable/disable Special Color Number c.\n    // 110 - Reset VT100 text foreground color.\n    this._parser.registerOscHandler(110, new OscHandler(data => this.restoreFgColor(data)));\n    // 111 - Reset VT100 text background color.\n    this._parser.registerOscHandler(111, new OscHandler(data => this.restoreBgColor(data)));\n    // 112 - Reset text cursor color.\n    this._parser.registerOscHandler(112, new OscHandler(data => this.restoreCursorColor(data)));\n    // 113 - Reset mouse foreground color.\n    // 114 - Reset mouse background color.\n    // 115 - Reset Tektronix foreground color.\n    // 116 - Reset Tektronix background color.\n    // 117 - Reset highlight color.\n    // 118 - Reset Tektronix cursor color.\n    // 119 - Reset highlight foreground color.\n\n    /**\n     * ESC handlers\n     */\n    this._parser.registerEscHandler({ final: '7' }, () => this.saveCursor());\n    this._parser.registerEscHandler({ final: '8' }, () => this.restoreCursor());\n    this._parser.registerEscHandler({ final: 'D' }, () => this.index());\n    this._parser.registerEscHandler({ final: 'E' }, () => this.nextLine());\n    this._parser.registerEscHandler({ final: 'H' }, () => this.tabSet());\n    this._parser.registerEscHandler({ final: 'M' }, () => this.reverseIndex());\n    this._parser.registerEscHandler({ final: '=' }, () => this.keypadApplicationMode());\n    this._parser.registerEscHandler({ final: '>' }, () => this.keypadNumericMode());\n    this._parser.registerEscHandler({ final: 'c' }, () => this.fullReset());\n    this._parser.registerEscHandler({ final: 'n' }, () => this.setgLevel(2));\n    this._parser.registerEscHandler({ final: 'o' }, () => this.setgLevel(3));\n    this._parser.registerEscHandler({ final: '|' }, () => this.setgLevel(3));\n    this._parser.registerEscHandler({ final: '}' }, () => this.setgLevel(2));\n    this._parser.registerEscHandler({ final: '~' }, () => this.setgLevel(1));\n    this._parser.registerEscHandler({ intermediates: '%', final: '@' }, () => this.selectDefaultCharset());\n    this._parser.registerEscHandler({ intermediates: '%', final: 'G' }, () => this.selectDefaultCharset());\n    for (const flag in CHARSETS) {\n      this._parser.registerEscHandler({ intermediates: '(', final: flag }, () => this.selectCharset('(' + flag));\n      this._parser.registerEscHandler({ intermediates: ')', final: flag }, () => this.selectCharset(')' + flag));\n      this._parser.registerEscHandler({ intermediates: '*', final: flag }, () => this.selectCharset('*' + flag));\n      this._parser.registerEscHandler({ intermediates: '+', final: flag }, () => this.selectCharset('+' + flag));\n      this._parser.registerEscHandler({ intermediates: '-', final: flag }, () => this.selectCharset('-' + flag));\n      this._parser.registerEscHandler({ intermediates: '.', final: flag }, () => this.selectCharset('.' + flag));\n      this._parser.registerEscHandler({ intermediates: '/', final: flag }, () => this.selectCharset('/' + flag)); // TODO: supported?\n    }\n    this._parser.registerEscHandler({ intermediates: '#', final: '8' }, () => this.screenAlignmentPattern());\n\n    /**\n     * error handler\n     */\n    this._parser.setErrorHandler((state: IParsingState) => {\n      this._logService.error('Parsing error: ', state);\n      return state;\n    });\n\n    /**\n     * DCS handler\n     */\n    this._parser.registerDcsHandler({ intermediates: '$', final: 'q' }, new DcsHandler((data, params) => this.requestStatusString(data, params)));\n  }\n\n  /**\n   * Async parse support.\n   */\n  private _preserveStack(cursorStartX: number, cursorStartY: number, decodedLength: number, position: number): void {\n    this._parseStack.paused = true;\n    this._parseStack.cursorStartX = cursorStartX;\n    this._parseStack.cursorStartY = cursorStartY;\n    this._parseStack.decodedLength = decodedLength;\n    this._parseStack.position = position;\n  }\n\n  private _logSlowResolvingAsync(p: Promise<boolean>): void {\n    // log a limited warning about an async handler taking too long\n    if (this._logService.logLevel <= LogLevelEnum.WARN) {\n      Promise.race([p, new Promise((res, rej) => setTimeout(() => rej('#SLOW_TIMEOUT'), SLOW_ASYNC_LIMIT))])\n        .catch(err => {\n          if (err !== '#SLOW_TIMEOUT') {\n            throw err;\n          }\n          console.warn(`async parser handler taking longer than ${SLOW_ASYNC_LIMIT} ms`);\n        });\n    }\n  }\n\n  private _getCurrentLinkId(): number {\n    return this._curAttrData.extended.urlId;\n  }\n\n  /**\n   * Parse call with async handler support.\n   *\n   * Whether the stack state got preserved for the next call, is indicated by the return value:\n   * - undefined (void):\n   *   all handlers were sync, no stack save, continue normally with next chunk\n   * - Promise\\<boolean\\>:\n   *   execution stopped at async handler, stack saved, continue with same chunk and the promise\n   *   resolve value as `promiseResult` until the method returns `undefined`\n   *\n   * Note: This method should only be called by `Terminal.write` to ensure correct execution order\n   * and proper continuation of async parser handlers.\n   */\n  public parse(data: string | Uint8Array, promiseResult?: boolean): void | Promise<boolean> {\n    let result: void | Promise<boolean>;\n    let cursorStartX = this._activeBuffer.x;\n    let cursorStartY = this._activeBuffer.y;\n    let start = 0;\n    const wasPaused = this._parseStack.paused;\n\n    if (wasPaused) {\n      // assumption: _parseBuffer never mutates between async calls\n      if (result = this._parser.parse(this._parseBuffer, this._parseStack.decodedLength, promiseResult)) {\n        this._logSlowResolvingAsync(result);\n        return result;\n      }\n      cursorStartX = this._parseStack.cursorStartX;\n      cursorStartY = this._parseStack.cursorStartY;\n      this._parseStack.paused = false;\n      if (data.length > MAX_PARSEBUFFER_LENGTH) {\n        start = this._parseStack.position + MAX_PARSEBUFFER_LENGTH;\n      }\n    }\n\n    // Log debug data, the log level gate is to prevent extra work in this hot path\n    if (this._logService.logLevel <= LogLevelEnum.DEBUG) {\n      this._logService.debug(`parsing data ${typeof data === 'string' ? ` \"${data}\"` : ` \"${Array.prototype.map.call(data, e => String.fromCharCode(e)).join('')}\"`}`);\n    }\n    if (this._logService.logLevel === LogLevelEnum.TRACE) {\n      this._logService.trace(`parsing data (codes)`, typeof data === 'string'\n        ? data.split('').map(e => e.charCodeAt(0))\n        : data\n      );\n    }\n\n    // resize input buffer if needed\n    if (this._parseBuffer.length < data.length) {\n      if (this._parseBuffer.length < MAX_PARSEBUFFER_LENGTH) {\n        this._parseBuffer = new Uint32Array(Math.min(data.length, MAX_PARSEBUFFER_LENGTH));\n      }\n    }\n\n    // Clear the dirty row service so we know which lines changed as a result of parsing\n    // Important: do not clear between async calls, otherwise we lost pending update information.\n    if (!wasPaused) {\n      this._dirtyRowTracker.clearRange();\n    }\n\n    // process big data in smaller chunks\n    if (data.length > MAX_PARSEBUFFER_LENGTH) {\n      for (let i = start; i < data.length; i += MAX_PARSEBUFFER_LENGTH) {\n        const end = i + MAX_PARSEBUFFER_LENGTH < data.length ? i + MAX_PARSEBUFFER_LENGTH : data.length;\n        const len = (typeof data === 'string')\n          ? this._stringDecoder.decode(data.substring(i, end), this._parseBuffer)\n          : this._utf8Decoder.decode(data.subarray(i, end), this._parseBuffer);\n        if (result = this._parser.parse(this._parseBuffer, len)) {\n          this._preserveStack(cursorStartX, cursorStartY, len, i);\n          this._logSlowResolvingAsync(result);\n          return result;\n        }\n      }\n    } else {\n      if (!wasPaused) {\n        const len = (typeof data === 'string')\n          ? this._stringDecoder.decode(data, this._parseBuffer)\n          : this._utf8Decoder.decode(data, this._parseBuffer);\n        if (result = this._parser.parse(this._parseBuffer, len)) {\n          this._preserveStack(cursorStartX, cursorStartY, len, 0);\n          this._logSlowResolvingAsync(result);\n          return result;\n        }\n      }\n    }\n\n    if (this._activeBuffer.x !== cursorStartX || this._activeBuffer.y !== cursorStartY) {\n      this._onCursorMove.fire();\n    }\n\n    // Refresh any dirty rows accumulated as part of parsing, fire only for rows within the\n    // _viewport_ which is relative to ydisp, not relative to ybase.\n    const viewportEnd = this._dirtyRowTracker.end + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n    const viewportStart = this._dirtyRowTracker.start + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n    if (viewportStart < this._bufferService.rows) {\n      this._onRequestRefreshRows.fire({\n        start: Math.min(viewportStart, this._bufferService.rows - 1),\n        end: Math.min(viewportEnd, this._bufferService.rows - 1)\n      });\n    }\n  }\n\n  public print(data: Uint32Array, start: number, end: number): void {\n    let code: number;\n    let chWidth: number;\n    const charset = this._charsetService.charset;\n    const screenReaderMode = this._optionsService.rawOptions.screenReaderMode;\n    const cols = this._bufferService.cols;\n    const wraparoundMode = this._coreService.decPrivateModes.wraparound;\n    const insertMode = this._coreService.modes.insertMode;\n    const curAttr = this._curAttrData;\n    let bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n\n    this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n    // handle wide chars: reset start_cell-1 if we would overwrite the second cell of a wide char\n    if (this._activeBuffer.x && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x - 1) === 2) {\n      bufferRow.setCellFromCodepoint(this._activeBuffer.x - 1, 0, 1, curAttr);\n    }\n\n    let precedingJoinState = this._parser.precedingJoinState;\n    for (let pos = start; pos < end; ++pos) {\n      code = data[pos];\n\n      // get charset replacement character\n      // charset is only defined for ASCII, therefore we only\n      // search for an replacement char if code < 127\n      if (code < 127 && charset) {\n        const ch = charset[String.fromCharCode(code)];\n        if (ch) {\n          code = ch.charCodeAt(0);\n        }\n      }\n\n      const currentInfo = this._unicodeService.charProperties(code, precedingJoinState);\n      chWidth = UnicodeService.extractWidth(currentInfo);\n      const shouldJoin = UnicodeService.extractShouldJoin(currentInfo);\n      const oldWidth = shouldJoin ? UnicodeService.extractWidth(precedingJoinState) : 0;\n      precedingJoinState = currentInfo;\n\n      if (screenReaderMode) {\n        this._onA11yChar.fire(stringFromCodePoint(code));\n      }\n      if (this._getCurrentLinkId()) {\n        this._oscLinkService.addLineToLink(this._getCurrentLinkId(), this._activeBuffer.ybase + this._activeBuffer.y);\n      }\n\n      // goto next line if ch would overflow\n      // NOTE: To avoid costly width checks here,\n      // the terminal does not allow a cols < 2.\n      if (this._activeBuffer.x + chWidth - oldWidth > cols) {\n        // autowrap - DECAWM\n        // automatically wraps to the beginning of the next line\n        if (wraparoundMode) {\n          const oldRow = bufferRow;\n          let oldCol = this._activeBuffer.x - oldWidth;\n          this._activeBuffer.x = oldWidth;\n          this._activeBuffer.y++;\n          if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n            this._activeBuffer.y--;\n            this._bufferService.scroll(this._eraseAttrData(), true);\n          } else {\n            if (this._activeBuffer.y >= this._bufferService.rows) {\n              this._activeBuffer.y = this._bufferService.rows - 1;\n            }\n            // The line already exists (eg. the initial viewport), mark it as a\n            // wrapped line\n            this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = true;\n          }\n          // row changed, get it again\n          bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n          if (oldWidth > 0 && bufferRow instanceof BufferLine) {\n            // Combining character widens 1 column to 2.\n            // Move old character to next line.\n            bufferRow.copyCellsFrom(oldRow as BufferLine,\n              oldCol, 0, oldWidth, false);\n          }\n          // clear left over cells to the right\n          while (oldCol < cols) {\n            oldRow.setCellFromCodepoint(oldCol++, 0, 1, curAttr);\n          }\n        } else {\n          this._activeBuffer.x = cols - 1;\n          if (chWidth === 2) {\n            // FIXME: check for xterm behavior\n            // What to do here? We got a wide char that does not fit into last cell\n            continue;\n          }\n        }\n      }\n\n      // insert combining char at last cursor position\n      // this._activeBuffer.x should never be 0 for a combining char\n      // since they always follow a cell consuming char\n      // therefore we can test for this._activeBuffer.x to avoid overflow left\n      if (shouldJoin && this._activeBuffer.x) {\n        const offset = bufferRow.getWidth(this._activeBuffer.x - 1) ? 1 : 2;\n        // if empty cell after fullwidth, need to go 2 cells back\n        // it is save to step 2 cells back here\n        // since an empty cell is only set by fullwidth chars\n        bufferRow.addCodepointToCell(this._activeBuffer.x - offset,\n          code, chWidth);\n        for (let delta = chWidth - oldWidth; --delta >= 0;) {\n          bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n        }\n        continue;\n      }\n\n      // insert mode: move characters to right\n      if (insertMode) {\n        // right shift cells according to the width\n        bufferRow.insertCells(this._activeBuffer.x, chWidth - oldWidth, this._activeBuffer.getNullCell(curAttr));\n        // test last cell - since the last cell has only room for\n        // a halfwidth char any fullwidth shifted there is lost\n        // and will be set to empty cell\n        if (bufferRow.getWidth(cols - 1) === 2) {\n          bufferRow.setCellFromCodepoint(cols - 1, NULL_CELL_CODE, NULL_CELL_WIDTH, curAttr);\n        }\n      }\n\n      // write current char to buffer and advance cursor\n      bufferRow.setCellFromCodepoint(this._activeBuffer.x++, code, chWidth, curAttr);\n\n      // fullwidth char - also set next cell to placeholder stub and advance cursor\n      // for graphemes bigger than fullwidth we can simply loop to zero\n      // we already made sure above, that this._activeBuffer.x + chWidth will not overflow right\n      if (chWidth > 0) {\n        while (--chWidth) {\n          // other than a regular empty cell a cell following a wide char has no width\n          bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n        }\n      }\n    }\n\n    this._parser.precedingJoinState = precedingJoinState;\n\n    // handle wide chars: reset cell to the right if it is second cell of a wide char\n    if (this._activeBuffer.x < cols && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x) === 0 && !bufferRow.hasContent(this._activeBuffer.x)) {\n      bufferRow.setCellFromCodepoint(this._activeBuffer.x, 0, 1, curAttr);\n    }\n\n    this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n  }\n\n  /**\n   * Forward registerCsiHandler from parser.\n   */\n  public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise<boolean>): IDisposable {\n    if (id.final === 't' && !id.prefix && !id.intermediates) {\n      // security: always check whether window option is allowed\n      return this._parser.registerCsiHandler(id, params => {\n        if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n          return true;\n        }\n        return callback(params);\n      });\n    }\n    return this._parser.registerCsiHandler(id, callback);\n  }\n\n  /**\n   * Forward registerDcsHandler from parser.\n   */\n  public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise<boolean>): IDisposable {\n    return this._parser.registerDcsHandler(id, new DcsHandler(callback));\n  }\n\n  /**\n   * Forward registerEscHandler from parser.\n   */\n  public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise<boolean>): IDisposable {\n    return this._parser.registerEscHandler(id, callback);\n  }\n\n  /**\n   * Forward registerOscHandler from parser.\n   */\n  public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise<boolean>): IDisposable {\n    return this._parser.registerOscHandler(ident, new OscHandler(callback));\n  }\n\n  /**\n   * BEL\n   * Bell (Ctrl-G).\n   *\n   * @vt: #Y   C0    BEL   \"Bell\"  \"\\a, \\x07\"  \"Ring the bell.\"\n   * The behavior of the bell is further customizable with `ITerminalOptions.bellStyle`\n   * and `ITerminalOptions.bellSound`.\n   */\n  public bell(): boolean {\n    this._onRequestBell.fire();\n    return true;\n  }\n\n  /**\n   * LF\n   * Line Feed or New Line (NL).  (LF  is Ctrl-J).\n   *\n   * @vt: #Y   C0    LF   \"Line Feed\"            \"\\n, \\x0A\"  \"Move the cursor one row down, scrolling if needed.\"\n   * Scrolling is restricted to scroll margins and will only happen on the bottom line.\n   *\n   * @vt: #Y   C0    VT   \"Vertical Tabulation\"  \"\\v, \\x0B\"  \"Treated as LF.\"\n   * @vt: #Y   C0    FF   \"Form Feed\"            \"\\f, \\x0C\"  \"Treated as LF.\"\n   */\n  public lineFeed(): boolean {\n    this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n    if (this._optionsService.rawOptions.convertEol) {\n      this._activeBuffer.x = 0;\n    }\n    this._activeBuffer.y++;\n    if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n      this._activeBuffer.y--;\n      this._bufferService.scroll(this._eraseAttrData());\n    } else if (this._activeBuffer.y >= this._bufferService.rows) {\n      this._activeBuffer.y = this._bufferService.rows - 1;\n    } else {\n      // There was an explicit line feed (not just a carriage return), so clear the wrapped state of\n      // the line. This is particularly important on conpty/Windows where revisiting lines to\n      // reprint is common, especially on resize. Note that the windowsMode wrapped line heuristics\n      // can mess with this so windowsMode should be disabled, which is recommended on Windows build\n      // 21376 and above.\n      this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n    }\n    // If the end of the line is hit, prevent this action from wrapping around to the next line.\n    if (this._activeBuffer.x >= this._bufferService.cols) {\n      this._activeBuffer.x--;\n    }\n    this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n    this._onLineFeed.fire();\n    return true;\n  }\n\n  /**\n   * CR\n   * Carriage Return (Ctrl-M).\n   *\n   * @vt: #Y   C0    CR   \"Carriage Return\"  \"\\r, \\x0D\"  \"Move the cursor to the beginning of the row.\"\n   */\n  public carriageReturn(): boolean {\n    this._activeBuffer.x = 0;\n    return true;\n  }\n\n  /**\n   * BS\n   * Backspace (Ctrl-H).\n   *\n   * @vt: #Y   C0    BS   \"Backspace\"  \"\\b, \\x08\"  \"Move the cursor one position to the left.\"\n   * By default it is not possible to move the cursor past the leftmost position.\n   * If `reverse wrap-around` (`CSI ? 45 h`) is set, a previous soft line wrap (DECAWM)\n   * can be undone with BS within the scroll margins. In that case the cursor will wrap back\n   * to the end of the previous row. Note that it is not possible to peek back into the scrollbuffer\n   * with the cursor, thus at the home position (top-leftmost cell) this has no effect.\n   */\n  public backspace(): boolean {\n    // reverse wrap-around is disabled\n    if (!this._coreService.decPrivateModes.reverseWraparound) {\n      this._restrictCursor();\n      if (this._activeBuffer.x > 0) {\n        this._activeBuffer.x--;\n      }\n      return true;\n    }\n\n    // reverse wrap-around is enabled\n    // other than for normal operation mode, reverse wrap-around allows the cursor\n    // to be at x=cols to be able to address the last cell of a row by BS\n    this._restrictCursor(this._bufferService.cols);\n\n    if (this._activeBuffer.x > 0) {\n      this._activeBuffer.x--;\n    } else {\n      /**\n       * reverse wrap-around handling:\n       * Our implementation deviates from xterm on purpose. Details:\n       * - only previous soft NLs can be reversed (isWrapped=true)\n       * - only works within scrollborders (top/bottom, left/right not yet supported)\n       * - cannot peek into scrollbuffer\n       * - any cursor movement sequence keeps working as expected\n       */\n      if (this._activeBuffer.x === 0\n        && this._activeBuffer.y > this._activeBuffer.scrollTop\n        && this._activeBuffer.y <= this._activeBuffer.scrollBottom\n        && this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)?.isWrapped) {\n        this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n        this._activeBuffer.y--;\n        this._activeBuffer.x = this._bufferService.cols - 1;\n        // find last taken cell - last cell can have 3 different states:\n        // - hasContent(true) + hasWidth(1): narrow char - we are done\n        // - hasWidth(0): second part of wide char - we are done\n        // - hasContent(false) + hasWidth(1): empty cell due to early wrapping wide char, go one\n        //   cell further back\n        const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n        if (line.hasWidth(this._activeBuffer.x) && !line.hasContent(this._activeBuffer.x)) {\n          this._activeBuffer.x--;\n          // We do this only once, since width=1 + hasContent=false currently happens only once\n          // before early wrapping of a wide char.\n          // This needs to be fixed once we support graphemes taking more than 2 cells.\n        }\n      }\n    }\n    this._restrictCursor();\n    return true;\n  }\n\n  /**\n   * TAB\n   * Horizontal Tab (HT) (Ctrl-I).\n   *\n   * @vt: #Y   C0    HT   \"Horizontal Tabulation\"  \"\\t, \\x09\"  \"Move the cursor to the next character tab stop.\"\n   */\n  public tab(): boolean {\n    if (this._activeBuffer.x >= this._bufferService.cols) {\n      return true;\n    }\n    const originalX = this._activeBuffer.x;\n    this._activeBuffer.x = this._activeBuffer.nextStop();\n    if (this._optionsService.rawOptions.screenReaderMode) {\n      this._onA11yTab.fire(this._activeBuffer.x - originalX);\n    }\n    return true;\n  }\n\n  /**\n   * SO\n   * Shift Out (Ctrl-N) -> Switch to Alternate Character Set.  This invokes the\n   * G1 character set.\n   *\n   * @vt: #P[Only limited ISO-2022 charset support.]  C0    SO   \"Shift Out\"  \"\\x0E\"  \"Switch to an alternative character set.\"\n   */\n  public shiftOut(): boolean {\n    this._charsetService.setgLevel(1);\n    return true;\n  }\n\n  /**\n   * SI\n   * Shift In (Ctrl-O) -> Switch to Standard Character Set.  This invokes the G0\n   * character set (the default).\n   *\n   * @vt: #Y   C0    SI   \"Shift In\"   \"\\x0F\"  \"Return to regular character set after Shift Out.\"\n   */\n  public shiftIn(): boolean {\n    this._charsetService.setgLevel(0);\n    return true;\n  }\n\n  /**\n   * Restrict cursor to viewport size / scroll margin (origin mode).\n   */\n  private _restrictCursor(maxCol: number = this._bufferService.cols - 1): void {\n    this._activeBuffer.x = Math.min(maxCol, Math.max(0, this._activeBuffer.x));\n    this._activeBuffer.y = this._coreService.decPrivateModes.origin\n      ? Math.min(this._activeBuffer.scrollBottom, Math.max(this._activeBuffer.scrollTop, this._activeBuffer.y))\n      : Math.min(this._bufferService.rows - 1, Math.max(0, this._activeBuffer.y));\n    this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n  }\n\n  /**\n   * Set absolute cursor position.\n   */\n  private _setCursor(x: number, y: number): void {\n    this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n    if (this._coreService.decPrivateModes.origin) {\n      this._activeBuffer.x = x;\n      this._activeBuffer.y = this._activeBuffer.scrollTop + y;\n    } else {\n      this._activeBuffer.x = x;\n      this._activeBuffer.y = y;\n    }\n    this._restrictCursor();\n    this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n  }\n\n  /**\n   * Set relative cursor position.\n   */\n  private _moveCursor(x: number, y: number): void {\n    // for relative changes we have to make sure we are within 0 .. cols/rows - 1\n    // before calculating the new position\n    this._restrictCursor();\n    this._setCursor(this._activeBuffer.x + x, this._activeBuffer.y + y);\n  }\n\n  /**\n   * CSI Ps A\n   * Cursor Up Ps Times (default = 1) (CUU).\n   *\n   * @vt: #Y CSI CUU   \"Cursor Up\"   \"CSI Ps A\"  \"Move cursor `Ps` times up (default=1).\"\n   * If the cursor would pass the top scroll margin, it will stop there.\n   */\n  public cursorUp(params: IParams): boolean {\n    // stop at scrollTop\n    const diffToTop = this._activeBuffer.y - this._activeBuffer.scrollTop;\n    if (diffToTop >= 0) {\n      this._moveCursor(0, -Math.min(diffToTop, params.params[0] || 1));\n    } else {\n      this._moveCursor(0, -(params.params[0] || 1));\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps B\n   * Cursor Down Ps Times (default = 1) (CUD).\n   *\n   * @vt: #Y CSI CUD   \"Cursor Down\"   \"CSI Ps B\"  \"Move cursor `Ps` times down (default=1).\"\n   * If the cursor would pass the bottom scroll margin, it will stop there.\n   */\n  public cursorDown(params: IParams): boolean {\n    // stop at scrollBottom\n    const diffToBottom = this._activeBuffer.scrollBottom - this._activeBuffer.y;\n    if (diffToBottom >= 0) {\n      this._moveCursor(0, Math.min(diffToBottom, params.params[0] || 1));\n    } else {\n      this._moveCursor(0, params.params[0] || 1);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps C\n   * Cursor Forward Ps Times (default = 1) (CUF).\n   *\n   * @vt: #Y CSI CUF   \"Cursor Forward\"    \"CSI Ps C\"  \"Move cursor `Ps` times forward (default=1).\"\n   */\n  public cursorForward(params: IParams): boolean {\n    this._moveCursor(params.params[0] || 1, 0);\n    return true;\n  }\n\n  /**\n   * CSI Ps D\n   * Cursor Backward Ps Times (default = 1) (CUB).\n   *\n   * @vt: #Y CSI CUB   \"Cursor Backward\"   \"CSI Ps D\"  \"Move cursor `Ps` times backward (default=1).\"\n   */\n  public cursorBackward(params: IParams): boolean {\n    this._moveCursor(-(params.params[0] || 1), 0);\n    return true;\n  }\n\n  /**\n   * CSI Ps E\n   * Cursor Next Line Ps Times (default = 1) (CNL).\n   * Other than cursorDown (CUD) also set the cursor to first column.\n   *\n   * @vt: #Y CSI CNL   \"Cursor Next Line\"  \"CSI Ps E\"  \"Move cursor `Ps` times down (default=1) and to the first column.\"\n   * Same as CUD, additionally places the cursor at the first column.\n   */\n  public cursorNextLine(params: IParams): boolean {\n    this.cursorDown(params);\n    this._activeBuffer.x = 0;\n    return true;\n  }\n\n  /**\n   * CSI Ps F\n   * Cursor Previous Line Ps Times (default = 1) (CPL).\n   * Other than cursorUp (CUU) also set the cursor to first column.\n   *\n   * @vt: #Y CSI CPL   \"Cursor Backward\"   \"CSI Ps F\"  \"Move cursor `Ps` times up (default=1) and to the first column.\"\n   * Same as CUU, additionally places the cursor at the first column.\n   */\n  public cursorPrecedingLine(params: IParams): boolean {\n    this.cursorUp(params);\n    this._activeBuffer.x = 0;\n    return true;\n  }\n\n  /**\n   * CSI Ps G\n   * Cursor Character Absolute  [column] (default = [row,1]) (CHA).\n   *\n   * @vt: #Y CSI CHA   \"Cursor Horizontal Absolute\" \"CSI Ps G\" \"Move cursor to `Ps`-th column of the active row (default=1).\"\n   */\n  public cursorCharAbsolute(params: IParams): boolean {\n    this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n    return true;\n  }\n\n  /**\n   * CSI Ps ; Ps H\n   * Cursor Position [row;column] (default = [1,1]) (CUP).\n   *\n   * @vt: #Y CSI CUP   \"Cursor Position\"   \"CSI Ps ; Ps H\"  \"Set cursor to position [`Ps`, `Ps`] (default = [1, 1]).\"\n   * If ORIGIN mode is set, places the cursor to the absolute position within the scroll margins.\n   * If ORIGIN mode is not set, places the cursor to the absolute position within the viewport.\n   * Note that the coordinates are 1-based, thus the top left position starts at `1 ; 1`.\n   */\n  public cursorPosition(params: IParams): boolean {\n    this._setCursor(\n      // col\n      (params.length >= 2) ? (params.params[1] || 1) - 1 : 0,\n      // row\n      (params.params[0] || 1) - 1\n    );\n    return true;\n  }\n\n  /**\n   * CSI Pm `  Character Position Absolute\n   *   [column] (default = [row,1]) (HPA).\n   * Currently same functionality as CHA.\n   *\n   * @vt: #Y CSI HPA   \"Horizontal Position Absolute\"  \"CSI Ps ` \" \"Same as CHA.\"\n   */\n  public charPosAbsolute(params: IParams): boolean {\n    this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n    return true;\n  }\n\n  /**\n   * CSI Pm a  Character Position Relative\n   *   [columns] (default = [row,col+1]) (HPR)\n   *\n   * @vt: #Y CSI HPR   \"Horizontal Position Relative\"  \"CSI Ps a\"  \"Same as CUF.\"\n   */\n  public hPositionRelative(params: IParams): boolean {\n    this._moveCursor(params.params[0] || 1, 0);\n    return true;\n  }\n\n  /**\n   * CSI Pm d  Vertical Position Absolute (VPA)\n   *   [row] (default = [1,column])\n   *\n   * @vt: #Y CSI VPA   \"Vertical Position Absolute\"    \"CSI Ps d\"  \"Move cursor to `Ps`-th row (default=1).\"\n   */\n  public linePosAbsolute(params: IParams): boolean {\n    this._setCursor(this._activeBuffer.x, (params.params[0] || 1) - 1);\n    return true;\n  }\n\n  /**\n   * CSI Pm e  Vertical Position Relative (VPR)\n   *   [rows] (default = [row+1,column])\n   * reuse CSI Ps B ?\n   *\n   * @vt: #Y CSI VPR   \"Vertical Position Relative\"    \"CSI Ps e\"  \"Move cursor `Ps` times down (default=1).\"\n   */\n  public vPositionRelative(params: IParams): boolean {\n    this._moveCursor(0, params.params[0] || 1);\n    return true;\n  }\n\n  /**\n   * CSI Ps ; Ps f\n   *   Horizontal and Vertical Position [row;column] (default =\n   *   [1,1]) (HVP).\n   *   Same as CUP.\n   *\n   * @vt: #Y CSI HVP   \"Horizontal and Vertical Position\" \"CSI Ps ; Ps f\"  \"Same as CUP.\"\n   */\n  public hVPosition(params: IParams): boolean {\n    this.cursorPosition(params);\n    return true;\n  }\n\n  /**\n   * CSI Ps g  Tab Clear (TBC).\n   *     Ps = 0  -> Clear Current Column (default).\n   *     Ps = 3  -> Clear All.\n   * Potentially:\n   *   Ps = 2  -> Clear Stops on Line.\n   *   http://vt100.net/annarbor/aaa-ug/section6.html\n   *\n   * @vt: #Y CSI TBC   \"Tab Clear\" \"CSI Ps g\"  \"Clear tab stops at current position (0) or all (3) (default=0).\"\n   * Clearing tabstops off the active row (Ps = 2, VT100) is currently not supported.\n   */\n  public tabClear(params: IParams): boolean {\n    const param = params.params[0];\n    if (param === 0) {\n      delete this._activeBuffer.tabs[this._activeBuffer.x];\n    } else if (param === 3) {\n      this._activeBuffer.tabs = {};\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps I\n   *   Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).\n   *\n   * @vt: #Y CSI CHT   \"Cursor Horizontal Tabulation\" \"CSI Ps I\" \"Move cursor `Ps` times tabs forward (default=1).\"\n   */\n  public cursorForwardTab(params: IParams): boolean {\n    if (this._activeBuffer.x >= this._bufferService.cols) {\n      return true;\n    }\n    let param = params.params[0] || 1;\n    while (param--) {\n      this._activeBuffer.x = this._activeBuffer.nextStop();\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps Z  Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).\n   *\n   * @vt: #Y CSI CBT   \"Cursor Backward Tabulation\"  \"CSI Ps Z\"  \"Move cursor `Ps` tabs backward (default=1).\"\n   */\n  public cursorBackwardTab(params: IParams): boolean {\n    if (this._activeBuffer.x >= this._bufferService.cols) {\n      return true;\n    }\n    let param = params.params[0] || 1;\n\n    while (param--) {\n      this._activeBuffer.x = this._activeBuffer.prevStop();\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps \" q  Select Character Protection Attribute (DECSCA).\n   *\n   * @vt: #Y CSI DECSCA   \"Select Character Protection Attribute\"  \"CSI Ps \" q\"  \"Whether DECSED and DECSEL can erase (0=default, 2) or not (1).\"\n   */\n  public selectProtected(params: IParams): boolean {\n    const p = params.params[0];\n    if (p === 1) this._curAttrData.bg |= BgFlags.PROTECTED;\n    if (p === 2 || p === 0) this._curAttrData.bg &= ~BgFlags.PROTECTED;\n    return true;\n  }\n\n\n  /**\n   * Helper method to erase cells in a terminal row.\n   * The cell gets replaced with the eraseChar of the terminal.\n   * @param y The row index relative to the viewport.\n   * @param start The start x index of the range to be erased.\n   * @param end The end x index of the range to be erased (exclusive).\n   * @param clearWrap clear the isWrapped flag\n   * @param respectProtect Whether to respect the protection attribute (DECSCA).\n   */\n  private _eraseInBufferLine(y: number, start: number, end: number, clearWrap: boolean = false, respectProtect: boolean = false): void {\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n    line.replaceCells(\n      start,\n      end,\n      this._activeBuffer.getNullCell(this._eraseAttrData()),\n      respectProtect\n    );\n    if (clearWrap) {\n      line.isWrapped = false;\n    }\n  }\n\n  /**\n   * Helper method to reset cells in a terminal row. The cell gets replaced with the eraseChar of\n   * the terminal and the isWrapped property is set to false.\n   * @param y row index\n   */\n  private _resetBufferLine(y: number, respectProtect: boolean = false): void {\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y);\n    if (line) {\n      line.fill(this._activeBuffer.getNullCell(this._eraseAttrData()), respectProtect);\n      this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase + y);\n      line.isWrapped = false;\n    }\n  }\n\n  /**\n   * CSI Ps J  Erase in Display (ED).\n   *     Ps = 0  -> Erase Below (default).\n   *     Ps = 1  -> Erase Above.\n   *     Ps = 2  -> Erase All.\n   *     Ps = 3  -> Erase Saved Lines (xterm).\n   * CSI ? Ps J\n   *   Erase in Display (DECSED).\n   *     Ps = 0  -> Selective Erase Below (default).\n   *     Ps = 1  -> Selective Erase Above.\n   *     Ps = 2  -> Selective Erase All.\n   *\n   * @vt: #Y CSI ED  \"Erase In Display\"  \"CSI Ps J\"  \"Erase various parts of the viewport.\"\n   * Supported param values:\n   *\n   * | Ps | Effect                                                       |\n   * | -- | ------------------------------------------------------------ |\n   * | 0  | Erase from the cursor through the end of the viewport.       |\n   * | 1  | Erase from the beginning of the viewport through the cursor. |\n   * | 2  | Erase complete viewport.                                     |\n   * | 3  | Erase scrollback.                                            |\n   *\n   * @vt: #Y CSI DECSED   \"Selective Erase In Display\"  \"CSI ? Ps J\"  \"Same as ED with respecting protection flag.\"\n   */\n  public eraseInDisplay(params: IParams, respectProtect: boolean = false): boolean {\n    this._restrictCursor(this._bufferService.cols);\n    let j;\n    switch (params.params[0]) {\n      case 0:\n        j = this._activeBuffer.y;\n        this._dirtyRowTracker.markDirty(j);\n        this._eraseInBufferLine(j++, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n        for (; j < this._bufferService.rows; j++) {\n          this._resetBufferLine(j, respectProtect);\n        }\n        this._dirtyRowTracker.markDirty(j);\n        break;\n      case 1:\n        j = this._activeBuffer.y;\n        this._dirtyRowTracker.markDirty(j);\n        // Deleted front part of line and everything before. This line will no longer be wrapped.\n        this._eraseInBufferLine(j, 0, this._activeBuffer.x + 1, true, respectProtect);\n        if (this._activeBuffer.x + 1 >= this._bufferService.cols) {\n          // Deleted entire previous line. This next line can no longer be wrapped.\n          this._activeBuffer.lines.get(j + 1)!.isWrapped = false;\n        }\n        while (j--) {\n          this._resetBufferLine(j, respectProtect);\n        }\n        this._dirtyRowTracker.markDirty(0);\n        break;\n      case 2:\n        if (this._optionsService.rawOptions.scrollOnEraseInDisplay) {\n          j = this._bufferService.rows;\n          this._dirtyRowTracker.markRangeDirty(0, j - 1);\n          while (j--) {\n            const currentLine = this._activeBuffer.lines.get(this._activeBuffer.ybase + j);\n            if (currentLine?.getTrimmedLength()) {\n              break;\n            }\n          }\n          for (; j >= 0; j--) {\n            this._bufferService.scroll(this._eraseAttrData());\n          }\n        }\n        else {\n          j = this._bufferService.rows;\n          this._dirtyRowTracker.markDirty(j - 1);\n          while (j--) {\n            this._resetBufferLine(j, respectProtect);\n          }\n          this._dirtyRowTracker.markDirty(0);\n        }\n        break;\n      case 3:\n        // Clear scrollback (everything not in viewport)\n        const scrollBackSize = this._activeBuffer.lines.length - this._bufferService.rows;\n        if (scrollBackSize > 0) {\n          this._activeBuffer.lines.trimStart(scrollBackSize);\n          this._activeBuffer.ybase = Math.max(this._activeBuffer.ybase - scrollBackSize, 0);\n          this._activeBuffer.ydisp = Math.max(this._activeBuffer.ydisp - scrollBackSize, 0);\n          // Force a scroll event to refresh viewport\n          this._onScroll.fire(0);\n        }\n        break;\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps K  Erase in Line (EL).\n   *     Ps = 0  -> Erase to Right (default).\n   *     Ps = 1  -> Erase to Left.\n   *     Ps = 2  -> Erase All.\n   * CSI ? Ps K\n   *   Erase in Line (DECSEL).\n   *     Ps = 0  -> Selective Erase to Right (default).\n   *     Ps = 1  -> Selective Erase to Left.\n   *     Ps = 2  -> Selective Erase All.\n   *\n   * @vt: #Y CSI EL    \"Erase In Line\"  \"CSI Ps K\"  \"Erase various parts of the active row.\"\n   * Supported param values:\n   *\n   * | Ps | Effect                                                   |\n   * | -- | -------------------------------------------------------- |\n   * | 0  | Erase from the cursor through the end of the row.        |\n   * | 1  | Erase from the beginning of the line through the cursor. |\n   * | 2  | Erase complete line.                                     |\n   *\n   * @vt: #Y CSI DECSEL   \"Selective Erase In Line\"  \"CSI ? Ps K\"  \"Same as EL with respecting protecting flag.\"\n   */\n  public eraseInLine(params: IParams, respectProtect: boolean = false): boolean {\n    this._restrictCursor(this._bufferService.cols);\n    switch (params.params[0]) {\n      case 0:\n        this._eraseInBufferLine(this._activeBuffer.y, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n        break;\n      case 1:\n        this._eraseInBufferLine(this._activeBuffer.y, 0, this._activeBuffer.x + 1, false, respectProtect);\n        break;\n      case 2:\n        this._eraseInBufferLine(this._activeBuffer.y, 0, this._bufferService.cols, true, respectProtect);\n        break;\n    }\n    this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n    return true;\n  }\n\n  /**\n   * CSI Ps L\n   * Insert Ps Line(s) (default = 1) (IL).\n   *\n   * @vt: #Y CSI IL  \"Insert Line\"   \"CSI Ps L\"  \"Insert `Ps` blank lines at active row (default=1).\"\n   * For every inserted line at the scroll top one line at the scroll bottom gets removed.\n   * The cursor is set to the first column.\n   * IL has no effect if the cursor is outside the scroll margins.\n   */\n  public insertLines(params: IParams): boolean {\n    this._restrictCursor();\n    let param = params.params[0] || 1;\n\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n\n    const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n    const scrollBottomRowsOffset = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n    const scrollBottomAbsolute = this._bufferService.rows - 1 + this._activeBuffer.ybase - scrollBottomRowsOffset + 1;\n    while (param--) {\n      // test: echo -e '\\e[44m\\e[1L\\e[0m'\n      // blankLine(true) - xterm/linux behavior\n      this._activeBuffer.lines.splice(scrollBottomAbsolute - 1, 1);\n      this._activeBuffer.lines.splice(row, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n    }\n\n    this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n    this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n    return true;\n  }\n\n  /**\n   * CSI Ps M\n   * Delete Ps Line(s) (default = 1) (DL).\n   *\n   * @vt: #Y CSI DL  \"Delete Line\"   \"CSI Ps M\"  \"Delete `Ps` lines at active row (default=1).\"\n   * For every deleted line at the scroll top one blank line at the scroll bottom gets appended.\n   * The cursor is set to the first column.\n   * DL has no effect if the cursor is outside the scroll margins.\n   */\n  public deleteLines(params: IParams): boolean {\n    this._restrictCursor();\n    let param = params.params[0] || 1;\n\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n\n    const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n    let j: number;\n    j = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n    j = this._bufferService.rows - 1 + this._activeBuffer.ybase - j;\n    while (param--) {\n      // test: echo -e '\\e[44m\\e[1M\\e[0m'\n      // blankLine(true) - xterm/linux behavior\n      this._activeBuffer.lines.splice(row, 1);\n      this._activeBuffer.lines.splice(j, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n    }\n\n    this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n    this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n    return true;\n  }\n\n  /**\n   * CSI Ps @\n   * Insert Ps (Blank) Character(s) (default = 1) (ICH).\n   *\n   * @vt: #Y CSI ICH  \"Insert Characters\"   \"CSI Ps @\"  \"Insert `Ps` (blank) characters (default = 1).\"\n   * The ICH sequence inserts `Ps` blank characters. The cursor remains at the beginning of the\n   * blank characters. Text between the cursor and right margin moves to the right. Characters moved\n   * past the right margin are lost.\n   *\n   *\n   * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n   */\n  public insertChars(params: IParams): boolean {\n    this._restrictCursor();\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n    if (line) {\n      line.insertCells(\n        this._activeBuffer.x,\n        params.params[0] || 1,\n        this._activeBuffer.getNullCell(this._eraseAttrData())\n      );\n      this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps P\n   * Delete Ps Character(s) (default = 1) (DCH).\n   *\n   * @vt: #Y CSI DCH   \"Delete Character\"  \"CSI Ps P\"  \"Delete `Ps` characters (default=1).\"\n   * As characters are deleted, the remaining characters between the cursor and right margin move to\n   * the left. Character attributes move with the characters. The terminal adds blank characters at\n   * the right margin.\n   *\n   *\n   * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n   */\n  public deleteChars(params: IParams): boolean {\n    this._restrictCursor();\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n    if (line) {\n      line.deleteCells(\n        this._activeBuffer.x,\n        params.params[0] || 1,\n        this._activeBuffer.getNullCell(this._eraseAttrData())\n      );\n      this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps S  Scroll up Ps lines (default = 1) (SU).\n   *\n   * @vt: #Y CSI SU  \"Scroll Up\"   \"CSI Ps S\"  \"Scroll `Ps` lines up (default=1).\"\n   *\n   *\n   * FIXME: scrolled out lines at top = 1 should add to scrollback (xterm)\n   */\n  public scrollUp(params: IParams): boolean {\n    let param = params.params[0] || 1;\n\n    while (param--) {\n      this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 1);\n      this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n    }\n    this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Ps T  Scroll down Ps lines (default = 1) (SD).\n   *\n   * @vt: #Y CSI SD  \"Scroll Down\"   \"CSI Ps T\"  \"Scroll `Ps` lines down (default=1).\"\n   */\n  public scrollDown(params: IParams): boolean {\n    let param = params.params[0] || 1;\n\n    while (param--) {\n      this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 1);\n      this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 0, this._activeBuffer.getBlankLine(DEFAULT_ATTR_DATA));\n    }\n    this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Ps SP @  Scroll left Ps columns (default = 1) (SL) ECMA-48\n   *\n   * Notation: (Pn)\n   * Representation: CSI Pn 02/00 04/00\n   * Parameter default value: Pn = 1\n   * SL causes the data in the presentation component to be moved by n character positions\n   * if the line orientation is horizontal, or by n line positions if the line orientation\n   * is vertical, such that the data appear to move to the left; where n equals the value of Pn.\n   * The active presentation position is not affected by this control function.\n   *\n   * Supported:\n   *   - always left shift (no line orientation setting respected)\n   *\n   * @vt: #Y CSI SL  \"Scroll Left\" \"CSI Ps SP @\" \"Scroll viewport `Ps` times to the left.\"\n   * SL moves the content of all lines within the scroll margins `Ps` times to the left.\n   * SL has no effect outside of the scroll margins.\n   */\n  public scrollLeft(params: IParams): boolean {\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n    const param = params.params[0] || 1;\n    for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n      const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n      line.deleteCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n      line.isWrapped = false;\n    }\n    this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Ps SP A  Scroll right Ps columns (default = 1) (SR) ECMA-48\n   *\n   * Notation: (Pn)\n   * Representation: CSI Pn 02/00 04/01\n   * Parameter default value: Pn = 1\n   * SR causes the data in the presentation component to be moved by n character positions\n   * if the line orientation is horizontal, or by n line positions if the line orientation\n   * is vertical, such that the data appear to move to the right; where n equals the value of Pn.\n   * The active presentation position is not affected by this control function.\n   *\n   * Supported:\n   *   - always right shift (no line orientation setting respected)\n   *\n   * @vt: #Y CSI SR  \"Scroll Right\"  \"CSI Ps SP A\"   \"Scroll viewport `Ps` times to the right.\"\n   * SL moves the content of all lines within the scroll margins `Ps` times to the right.\n   * Content at the right margin is lost.\n   * SL has no effect outside of the scroll margins.\n   */\n  public scrollRight(params: IParams): boolean {\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n    const param = params.params[0] || 1;\n    for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n      const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n      line.insertCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n      line.isWrapped = false;\n    }\n    this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Pm ' }\n   * Insert Ps Column(s) (default = 1) (DECIC), VT420 and up.\n   *\n   * @vt: #Y CSI DECIC \"Insert Columns\"  \"CSI Ps ' }\"  \"Insert `Ps` columns at cursor position.\"\n   * DECIC inserts `Ps` times blank columns at the cursor position for all lines with the scroll\n   * margins, moving content to the right. Content at the right margin is lost. DECIC has no effect\n   * outside the scrolling margins.\n   */\n  public insertColumns(params: IParams): boolean {\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n    const param = params.params[0] || 1;\n    for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n      const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n      line.insertCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n      line.isWrapped = false;\n    }\n    this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Pm ' ~\n   * Delete Ps Column(s) (default = 1) (DECDC), VT420 and up.\n   *\n   * @vt: #Y CSI DECDC \"Delete Columns\"  \"CSI Ps ' ~\"  \"Delete `Ps` columns at cursor position.\"\n   * DECDC deletes `Ps` times columns at the cursor position for all lines with the scroll margins,\n   * moving content to the left. Blank columns are added at the right margin.\n   * DECDC has no effect outside the scrolling margins.\n   */\n  public deleteColumns(params: IParams): boolean {\n    if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n      return true;\n    }\n    const param = params.params[0] || 1;\n    for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n      const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n      line.deleteCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n      line.isWrapped = false;\n    }\n    this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    return true;\n  }\n\n  /**\n   * CSI Ps X\n   * Erase Ps Character(s) (default = 1) (ECH).\n   *\n   * @vt: #Y CSI ECH   \"Erase Character\"   \"CSI Ps X\"  \"Erase `Ps` characters from current cursor position to the right (default=1).\"\n   * ED erases `Ps` characters from current cursor position to the right.\n   * ED works inside or outside the scrolling margins.\n   */\n  public eraseChars(params: IParams): boolean {\n    this._restrictCursor();\n    const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n    if (line) {\n      line.replaceCells(\n        this._activeBuffer.x,\n        this._activeBuffer.x + (params.params[0] || 1),\n        this._activeBuffer.getNullCell(this._eraseAttrData())\n      );\n      this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps b  Repeat the preceding graphic character Ps times (REP).\n   * From ECMA 48 (@see http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf)\n   *    Notation: (Pn)\n   *    Representation: CSI Pn 06/02\n   *    Parameter default value: Pn = 1\n   *    REP is used to indicate that the preceding character in the data stream,\n   *    if it is a graphic character (represented by one or more bit combinations) including SPACE,\n   *    is to be repeated n times, where n equals the value of Pn.\n   *    If the character preceding REP is a control function or part of a control function,\n   *    the effect of REP is not defined by this Standard.\n   *\n   * We extend xterm's behavior to allow repeating entire grapheme clusters.\n   * This isn't 100% xterm-compatible, but it seems saner and more useful.\n   *    - text attrs are applied normally\n   *    - wrap around is respected\n   *    - any valid sequence resets the carried forward char\n   *\n   * Note: To get reset on a valid sequence working correctly without much runtime penalty, the\n   * preceding codepoint is stored on the parser in `this.print` and reset during `parser.parse`.\n   *\n   * @vt: #Y CSI REP   \"Repeat Preceding Character\"    \"CSI Ps b\"  \"Repeat preceding character `Ps` times (default=1).\"\n   * REP repeats the previous character `Ps` times advancing the cursor, also wrapping if DECAWM is\n   * set. REP has no effect if the sequence does not follow a printable ASCII character\n   * (NOOP for any other sequence in between or NON ASCII characters).\n   */\n  public repeatPrecedingCharacter(params: IParams): boolean {\n    const joinState = this._parser.precedingJoinState;\n    if (!joinState) {\n      return true;\n    }\n    // call print to insert the chars and handle correct wrapping\n    const length = params.params[0] || 1;\n    const chWidth = UnicodeService.extractWidth(joinState);\n    const x = this._activeBuffer.x - chWidth;\n    const bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n    const text = bufferRow.getString(x);\n    const data = new Uint32Array(text.length * length);\n    let idata = 0;\n    for (let itext = 0; itext < text.length;) {\n      const ch = text.codePointAt(itext) || 0;\n      data[idata++] = ch;\n      itext += ch > 0xffff ? 2 : 1;\n    }\n    let tlength = idata;\n    for (let i = 1; i < length; ++i) {\n      data.copyWithin(tlength, 0, idata);\n      tlength += idata;\n    }\n    this.print(data, 0, tlength);\n    return true;\n  }\n\n  /**\n   * CSI Ps c  Send Device Attributes (Primary DA).\n   *     Ps = 0  or omitted -> request attributes from terminal.  The\n   *     response depends on the decTerminalID resource setting.\n   *     -> CSI ? 1 ; 2 c  (``VT100 with Advanced Video Option'')\n   *     -> CSI ? 1 ; 0 c  (``VT101 with No Options'')\n   *     -> CSI ? 6 c  (``VT102'')\n   *     -> CSI ? 6 0 ; 1 ; 2 ; 6 ; 8 ; 9 ; 1 5 ; c  (``VT220'')\n   *   The VT100-style response parameters do not mean anything by\n   *   themselves.  VT220 parameters do, telling the host what fea-\n   *   tures the terminal supports:\n   *     Ps = 1  -> 132-columns.\n   *     Ps = 2  -> Printer.\n   *     Ps = 6  -> Selective erase.\n   *     Ps = 8  -> User-defined keys.\n   *     Ps = 9  -> National replacement character sets.\n   *     Ps = 1 5  -> Technical characters.\n   *     Ps = 2 2  -> ANSI color, e.g., VT525.\n   *     Ps = 2 9  -> ANSI text locator (i.e., DEC Locator mode).\n   *\n   * @vt: #Y CSI DA1   \"Primary Device Attributes\"     \"CSI c\"  \"Send primary device attributes.\"\n   *\n   *\n   * TODO: fix and cleanup response\n   */\n  public sendDeviceAttributesPrimary(params: IParams): boolean {\n    if (params.params[0] > 0) {\n      return true;\n    }\n    if (this._is('xterm') || this._is('rxvt-unicode') || this._is('screen')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[?1;2c');\n    } else if (this._is('linux')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[?6c');\n    }\n    return true;\n  }\n\n  /**\n   * CSI > Ps c\n   *   Send Device Attributes (Secondary DA).\n   *     Ps = 0  or omitted -> request the terminal's identification\n   *     code.  The response depends on the decTerminalID resource set-\n   *     ting.  It should apply only to VT220 and up, but xterm extends\n   *     this to VT100.\n   *     -> CSI  > Pp ; Pv ; Pc c\n   *   where Pp denotes the terminal type\n   *     Pp = 0  -> ``VT100''.\n   *     Pp = 1  -> ``VT220''.\n   *   and Pv is the firmware version (for xterm, this was originally\n   *   the XFree86 patch number, starting with 95).  In a DEC termi-\n   *   nal, Pc indicates the ROM cartridge registration number and is\n   *   always zero.\n   * More information:\n   *   xterm/charproc.c - line 2012, for more information.\n   *   vim responds with ^[[?0c or ^[[?1c after the terminal's response (?)\n   *\n   * @vt: #Y CSI DA2   \"Secondary Device Attributes\"   \"CSI > c\" \"Send primary device attributes.\"\n   *\n   *\n   * TODO: fix and cleanup response\n   */\n  public sendDeviceAttributesSecondary(params: IParams): boolean {\n    if (params.params[0] > 0) {\n      return true;\n    }\n    // xterm and urxvt\n    // seem to spit this\n    // out around ~370 times (?).\n    if (this._is('xterm')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[>0;276;0c');\n    } else if (this._is('rxvt-unicode')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[>85;95;0c');\n    } else if (this._is('linux')) {\n      // not supported by linux console.\n      // linux console echoes parameters.\n      this._coreService.triggerDataEvent(params.params[0] + 'c');\n    } else if (this._is('screen')) {\n      this._coreService.triggerDataEvent(C0.ESC + '[>83;40003;0c');\n    }\n    return true;\n  }\n\n  /**\n   * Evaluate if the current terminal is the given argument.\n   * @param term The terminal name to evaluate\n   */\n  private _is(term: string): boolean {\n    return (this._optionsService.rawOptions.termName + '').indexOf(term) === 0;\n  }\n\n  /**\n   * CSI Pm h  Set Mode (SM).\n   *     Ps = 2  -> Keyboard Action Mode (AM).\n   *     Ps = 4  -> Insert Mode (IRM).\n   *     Ps = 1 2  -> Send/receive (SRM).\n   *     Ps = 2 0  -> Automatic Newline (LNM).\n   *\n   * @vt: #P[Only IRM is supported.]    CSI SM    \"Set Mode\"  \"CSI Pm h\"  \"Set various terminal modes.\"\n   * Supported param values by SM:\n   *\n   * | Param | Action                                 | Support |\n   * | ----- | -------------------------------------- | ------- |\n   * | 2     | Keyboard Action Mode (KAM). Always on. | #N      |\n   * | 4     | Insert Mode (IRM).                     | #Y      |\n   * | 12    | Send/receive (SRM). Always off.        | #N      |\n   * | 20    | Automatic Newline (LNM).               | #Y      |\n   */\n  public setMode(params: IParams): boolean {\n    for (let i = 0; i < params.length; i++) {\n      switch (params.params[i]) {\n        case 4:\n          this._coreService.modes.insertMode = true;\n          break;\n        case 20:\n          this._optionsService.options.convertEol = true;\n          break;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * CSI ? Pm h\n   *   DEC Private Mode Set (DECSET).\n   *     Ps = 1  -> Application Cursor Keys (DECCKM).\n   *     Ps = 2  -> Designate USASCII for character sets G0-G3\n   *     (DECANM), and set VT100 mode.\n   *     Ps = 3  -> 132 Column Mode (DECCOLM).\n   *     Ps = 4  -> Smooth (Slow) Scroll (DECSCLM).\n   *     Ps = 5  -> Reverse Video (DECSCNM).\n   *     Ps = 6  -> Origin Mode (DECOM).\n   *     Ps = 7  -> Wraparound Mode (DECAWM).\n   *     Ps = 8  -> Auto-repeat Keys (DECARM).\n   *     Ps = 9  -> Send Mouse X & Y on button press.  See the sec-\n   *     tion Mouse Tracking.\n   *     Ps = 1 0  -> Show toolbar (rxvt).\n   *     Ps = 1 2  -> Start Blinking Cursor (att610).\n   *     Ps = 1 8  -> Print form feed (DECPFF).\n   *     Ps = 1 9  -> Set print extent to full screen (DECPEX).\n   *     Ps = 2 5  -> Show Cursor (DECTCEM).\n   *     Ps = 3 0  -> Show scrollbar (rxvt).\n   *     Ps = 3 5  -> Enable font-shifting functions (rxvt).\n   *     Ps = 3 8  -> Enter Tektronix Mode (DECTEK).\n   *     Ps = 4 0  -> Allow 80 -> 132 Mode.\n   *     Ps = 4 1  -> more(1) fix (see curses resource).\n   *     Ps = 4 2  -> Enable Nation Replacement Character sets (DECN-\n   *     RCM).\n   *     Ps = 4 4  -> Turn On Margin Bell.\n   *     Ps = 4 5  -> Reverse-wraparound Mode.\n   *     Ps = 4 6  -> Start Logging.  This is normally disabled by a\n   *     compile-time option.\n   *     Ps = 4 7  -> Use Alternate Screen Buffer.  (This may be dis-\n   *     abled by the titeInhibit resource).\n   *     Ps = 6 6  -> Application keypad (DECNKM).\n   *     Ps = 6 7  -> Backarrow key sends backspace (DECBKM).\n   *     Ps = 1 0 0 0  -> Send Mouse X & Y on button press and\n   *     release.  See the section Mouse Tracking.\n   *     Ps = 1 0 0 1  -> Use Hilite Mouse Tracking.\n   *     Ps = 1 0 0 2  -> Use Cell Motion Mouse Tracking.\n   *     Ps = 1 0 0 3  -> Use All Motion Mouse Tracking.\n   *     Ps = 1 0 0 4  -> Send FocusIn/FocusOut events.\n   *     Ps = 1 0 0 5  -> Enable Extended Mouse Mode.\n   *     Ps = 1 0 1 0  -> Scroll to bottom on tty output (rxvt).\n   *     Ps = 1 0 1 1  -> Scroll to bottom on key press (rxvt).\n   *     Ps = 1 0 3 4  -> Interpret \"meta\" key, sets eighth bit.\n   *     (enables the eightBitInput resource).\n   *     Ps = 1 0 3 5  -> Enable special modifiers for Alt and Num-\n   *     Lock keys.  (This enables the numLock resource).\n   *     Ps = 1 0 3 6  -> Send ESC   when Meta modifies a key.  (This\n   *     enables the metaSendsEscape resource).\n   *     Ps = 1 0 3 7  -> Send DEL from the editing-keypad Delete\n   *     key.\n   *     Ps = 1 0 3 9  -> Send ESC  when Alt modifies a key.  (This\n   *     enables the altSendsEscape resource).\n   *     Ps = 1 0 4 0  -> Keep selection even if not highlighted.\n   *     (This enables the keepSelection resource).\n   *     Ps = 1 0 4 1  -> Use the CLIPBOARD selection.  (This enables\n   *     the selectToClipboard resource).\n   *     Ps = 1 0 4 2  -> Enable Urgency window manager hint when\n   *     Control-G is received.  (This enables the bellIsUrgent\n   *     resource).\n   *     Ps = 1 0 4 3  -> Enable raising of the window when Control-G\n   *     is received.  (enables the popOnBell resource).\n   *     Ps = 1 0 4 7  -> Use Alternate Screen Buffer.  (This may be\n   *     disabled by the titeInhibit resource).\n   *     Ps = 1 0 4 8  -> Save cursor as in DECSC.  (This may be dis-\n   *     abled by the titeInhibit resource).\n   *     Ps = 1 0 4 9  -> Save cursor as in DECSC and use Alternate\n   *     Screen Buffer, clearing it first.  (This may be disabled by\n   *     the titeInhibit resource).  This combines the effects of the 1\n   *     0 4 7  and 1 0 4 8  modes.  Use this with terminfo-based\n   *     applications rather than the 4 7  mode.\n   *     Ps = 1 0 5 0  -> Set terminfo/termcap function-key mode.\n   *     Ps = 1 0 5 1  -> Set Sun function-key mode.\n   *     Ps = 1 0 5 2  -> Set HP function-key mode.\n   *     Ps = 1 0 5 3  -> Set SCO function-key mode.\n   *     Ps = 1 0 6 0  -> Set legacy keyboard emulation (X11R6).\n   *     Ps = 1 0 6 1  -> Set VT220 keyboard emulation.\n   *     Ps = 2 0 0 4  -> Set bracketed paste mode.\n   * Modes:\n   *   http: *vt100.net/docs/vt220-rm/chapter4.html\n   *\n   * @vt: #P[See below for supported modes.]    CSI DECSET  \"DEC Private Set Mode\" \"CSI ? Pm h\"  \"Set various terminal attributes.\"\n   * Supported param values by DECSET:\n   *\n   * | param | Action                                                  | Support |\n   * | ----- | ------------------------------------------------------- | --------|\n   * | 1     | Application Cursor Keys (DECCKM).                       | #Y      |\n   * | 2     | Designate US-ASCII for character sets G0-G3 (DECANM).   | #Y      |\n   * | 3     | 132 Column Mode (DECCOLM).                              | #Y      |\n   * | 6     | Origin Mode (DECOM).                                    | #Y      |\n   * | 7     | Auto-wrap Mode (DECAWM).                                | #Y      |\n   * | 8     | Auto-repeat Keys (DECARM). Always on.                   | #N      |\n   * | 9     | X10 xterm mouse protocol.                               | #Y      |\n   * | 12    | Start Blinking Cursor.                                  | #Y      |\n   * | 25    | Show Cursor (DECTCEM).                                  | #Y      |\n   * | 45    | Reverse wrap-around.                                    | #Y      |\n   * | 47    | Use Alternate Screen Buffer.                            | #Y      |\n   * | 66    | Application keypad (DECNKM).                            | #Y      |\n   * | 1000  | X11 xterm mouse protocol.                               | #Y      |\n   * | 1002  | Use Cell Motion Mouse Tracking.                         | #Y      |\n   * | 1003  | Use All Motion Mouse Tracking.                          | #Y      |\n   * | 1004  | Send FocusIn/FocusOut events                            | #Y      |\n   * | 1005  | Enable UTF-8 Mouse Mode.                                | #N      |\n   * | 1006  | Enable SGR Mouse Mode.                                  | #Y      |\n   * | 1015  | Enable urxvt Mouse Mode.                                | #N      |\n   * | 1016  | Enable SGR-Pixels Mouse Mode.                           | #Y      |\n   * | 1047  | Use Alternate Screen Buffer.                            | #Y      |\n   * | 1048  | Save cursor as in DECSC.                                | #Y      |\n   * | 1049  | Save cursor and switch to alternate buffer clearing it. | #P[Does not clear the alternate buffer.] |\n   * | 2004  | Set bracketed paste mode.                               | #Y      |\n   *\n   *\n   * FIXME: implement DECSCNM, 1049 should clear altbuffer\n   */\n  public setModePrivate(params: IParams): boolean {\n    for (let i = 0; i < params.length; i++) {\n      switch (params.params[i]) {\n        case 1:\n          this._coreService.decPrivateModes.applicationCursorKeys = true;\n          break;\n        case 2:\n          this._charsetService.setgCharset(0, DEFAULT_CHARSET);\n          this._charsetService.setgCharset(1, DEFAULT_CHARSET);\n          this._charsetService.setgCharset(2, DEFAULT_CHARSET);\n          this._charsetService.setgCharset(3, DEFAULT_CHARSET);\n          // set VT100 mode here\n          break;\n        case 3:\n          /**\n           * DECCOLM - 132 column mode.\n           * This is only active if 'SetWinLines' (24) is enabled\n           * through `options.windowsOptions`.\n           */\n          if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n            this._bufferService.resize(132, this._bufferService.rows);\n            this._onRequestReset.fire();\n          }\n          break;\n        case 6:\n          this._coreService.decPrivateModes.origin = true;\n          this._setCursor(0, 0);\n          break;\n        case 7:\n          this._coreService.decPrivateModes.wraparound = true;\n          break;\n        case 12:\n          this._optionsService.options.cursorBlink = true;\n          break;\n        case 45:\n          this._coreService.decPrivateModes.reverseWraparound = true;\n          break;\n        case 66:\n          this._logService.debug('Serial port requested application keypad.');\n          this._coreService.decPrivateModes.applicationKeypad = true;\n          this._onRequestSyncScrollBar.fire();\n          break;\n        case 9: // X10 Mouse\n          // no release, no motion, no wheel, no modifiers.\n          this._coreMouseService.activeProtocol = 'X10';\n          break;\n        case 1000: // vt200 mouse\n          // no motion.\n          this._coreMouseService.activeProtocol = 'VT200';\n          break;\n        case 1002: // button event mouse\n          this._coreMouseService.activeProtocol = 'DRAG';\n          break;\n        case 1003: // any event mouse\n          // any event - sends motion events,\n          // even if there is no button held down.\n          this._coreMouseService.activeProtocol = 'ANY';\n          break;\n        case 1004: // send focusin/focusout events\n          // focusin: ^[[I\n          // focusout: ^[[O\n          this._coreService.decPrivateModes.sendFocus = true;\n          this._onRequestSendFocus.fire();\n          break;\n        case 1005: // utf8 ext mode mouse - removed in #2507\n          this._logService.debug('DECSET 1005 not supported (see #2507)');\n          break;\n        case 1006: // sgr ext mode mouse\n          this._coreMouseService.activeEncoding = 'SGR';\n          break;\n        case 1015: // urxvt ext mode mouse - removed in #2507\n          this._logService.debug('DECSET 1015 not supported (see #2507)');\n          break;\n        case 1016: // sgr pixels mode mouse\n          this._coreMouseService.activeEncoding = 'SGR_PIXELS';\n          break;\n        case 25: // show cursor\n          this._coreService.isCursorHidden = false;\n          break;\n        case 1048: // alt screen cursor\n          this.saveCursor();\n          break;\n        case 1049: // alt screen buffer cursor\n          this.saveCursor();\n        // FALL-THROUGH\n        case 47: // alt screen buffer\n        case 1047: // alt screen buffer\n          this._bufferService.buffers.activateAltBuffer(this._eraseAttrData());\n          this._coreService.isCursorInitialized = true;\n          this._onRequestRefreshRows.fire(undefined);\n          this._onRequestSyncScrollBar.fire();\n          break;\n        case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n          this._coreService.decPrivateModes.bracketedPasteMode = true;\n          break;\n        case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n          this._coreService.decPrivateModes.synchronizedOutput = true;\n          break;\n      }\n    }\n    return true;\n  }\n\n\n  /**\n   * CSI Pm l  Reset Mode (RM).\n   *     Ps = 2  -> Keyboard Action Mode (AM).\n   *     Ps = 4  -> Replace Mode (IRM).\n   *     Ps = 1 2  -> Send/receive (SRM).\n   *     Ps = 2 0  -> Normal Linefeed (LNM).\n   *\n   * @vt: #P[Only IRM is supported.]    CSI RM    \"Reset Mode\"  \"CSI Pm l\"  \"Set various terminal attributes.\"\n   * Supported param values by RM:\n   *\n   * | Param | Action                                 | Support |\n   * | ----- | -------------------------------------- | ------- |\n   * | 2     | Keyboard Action Mode (KAM). Always on. | #N      |\n   * | 4     | Replace Mode (IRM). (default)          | #Y      |\n   * | 12    | Send/receive (SRM). Always off.        | #N      |\n   * | 20    | Normal Linefeed (LNM).                 | #Y      |\n   *\n   *\n   * FIXME: why is LNM commented out?\n   */\n  public resetMode(params: IParams): boolean {\n    for (let i = 0; i < params.length; i++) {\n      switch (params.params[i]) {\n        case 4:\n          this._coreService.modes.insertMode = false;\n          break;\n        case 20:\n          this._optionsService.options.convertEol = false;\n          break;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * CSI ? Pm l\n   *   DEC Private Mode Reset (DECRST).\n   *     Ps = 1  -> Normal Cursor Keys (DECCKM).\n   *     Ps = 2  -> Designate VT52 mode (DECANM).\n   *     Ps = 3  -> 80 Column Mode (DECCOLM).\n   *     Ps = 4  -> Jump (Fast) Scroll (DECSCLM).\n   *     Ps = 5  -> Normal Video (DECSCNM).\n   *     Ps = 6  -> Normal Cursor Mode (DECOM).\n   *     Ps = 7  -> No Wraparound Mode (DECAWM).\n   *     Ps = 8  -> No Auto-repeat Keys (DECARM).\n   *     Ps = 9  -> Don't send Mouse X & Y on button press.\n   *     Ps = 1 0  -> Hide toolbar (rxvt).\n   *     Ps = 1 2  -> Stop Blinking Cursor (att610).\n   *     Ps = 1 8  -> Don't print form feed (DECPFF).\n   *     Ps = 1 9  -> Limit print to scrolling region (DECPEX).\n   *     Ps = 2 5  -> Hide Cursor (DECTCEM).\n   *     Ps = 3 0  -> Don't show scrollbar (rxvt).\n   *     Ps = 3 5  -> Disable font-shifting functions (rxvt).\n   *     Ps = 4 0  -> Disallow 80 -> 132 Mode.\n   *     Ps = 4 1  -> No more(1) fix (see curses resource).\n   *     Ps = 4 2  -> Disable Nation Replacement Character sets (DEC-\n   *     NRCM).\n   *     Ps = 4 4  -> Turn Off Margin Bell.\n   *     Ps = 4 5  -> No Reverse-wraparound Mode.\n   *     Ps = 4 6  -> Stop Logging.  (This is normally disabled by a\n   *     compile-time option).\n   *     Ps = 4 7  -> Use Normal Screen Buffer.\n   *     Ps = 6 6  -> Numeric keypad (DECNKM).\n   *     Ps = 6 7  -> Backarrow key sends delete (DECBKM).\n   *     Ps = 1 0 0 0  -> Don't send Mouse X & Y on button press and\n   *     release.  See the section Mouse Tracking.\n   *     Ps = 1 0 0 1  -> Don't use Hilite Mouse Tracking.\n   *     Ps = 1 0 0 2  -> Don't use Cell Motion Mouse Tracking.\n   *     Ps = 1 0 0 3  -> Don't use All Motion Mouse Tracking.\n   *     Ps = 1 0 0 4  -> Don't send FocusIn/FocusOut events.\n   *     Ps = 1 0 0 5  -> Disable Extended Mouse Mode.\n   *     Ps = 1 0 1 0  -> Don't scroll to bottom on tty output\n   *     (rxvt).\n   *     Ps = 1 0 1 1  -> Don't scroll to bottom on key press (rxvt).\n   *     Ps = 1 0 3 4  -> Don't interpret \"meta\" key.  (This disables\n   *     the eightBitInput resource).\n   *     Ps = 1 0 3 5  -> Disable special modifiers for Alt and Num-\n   *     Lock keys.  (This disables the numLock resource).\n   *     Ps = 1 0 3 6  -> Don't send ESC  when Meta modifies a key.\n   *     (This disables the metaSendsEscape resource).\n   *     Ps = 1 0 3 7  -> Send VT220 Remove from the editing-keypad\n   *     Delete key.\n   *     Ps = 1 0 3 9  -> Don't send ESC  when Alt modifies a key.\n   *     (This disables the altSendsEscape resource).\n   *     Ps = 1 0 4 0  -> Do not keep selection when not highlighted.\n   *     (This disables the keepSelection resource).\n   *     Ps = 1 0 4 1  -> Use the PRIMARY selection.  (This disables\n   *     the selectToClipboard resource).\n   *     Ps = 1 0 4 2  -> Disable Urgency window manager hint when\n   *     Control-G is received.  (This disables the bellIsUrgent\n   *     resource).\n   *     Ps = 1 0 4 3  -> Disable raising of the window when Control-\n   *     G is received.  (This disables the popOnBell resource).\n   *     Ps = 1 0 4 7  -> Use Normal Screen Buffer, clearing screen\n   *     first if in the Alternate Screen.  (This may be disabled by\n   *     the titeInhibit resource).\n   *     Ps = 1 0 4 8  -> Restore cursor as in DECRC.  (This may be\n   *     disabled by the titeInhibit resource).\n   *     Ps = 1 0 4 9  -> Use Normal Screen Buffer and restore cursor\n   *     as in DECRC.  (This may be disabled by the titeInhibit\n   *     resource).  This combines the effects of the 1 0 4 7  and 1 0\n   *     4 8  modes.  Use this with terminfo-based applications rather\n   *     than the 4 7  mode.\n   *     Ps = 1 0 5 0  -> Reset terminfo/termcap function-key mode.\n   *     Ps = 1 0 5 1  -> Reset Sun function-key mode.\n   *     Ps = 1 0 5 2  -> Reset HP function-key mode.\n   *     Ps = 1 0 5 3  -> Reset SCO function-key mode.\n   *     Ps = 1 0 6 0  -> Reset legacy keyboard emulation (X11R6).\n   *     Ps = 1 0 6 1  -> Reset keyboard emulation to Sun/PC style.\n   *     Ps = 2 0 0 4  -> Reset bracketed paste mode.\n   *\n   * @vt: #P[See below for supported modes.]    CSI DECRST  \"DEC Private Reset Mode\" \"CSI ? Pm l\"  \"Reset various terminal attributes.\"\n   * Supported param values by DECRST:\n   *\n   * | param | Action                                                  | Support |\n   * | ----- | ------------------------------------------------------- | ------- |\n   * | 1     | Normal Cursor Keys (DECCKM).                            | #Y      |\n   * | 2     | Designate VT52 mode (DECANM).                           | #N      |\n   * | 3     | 80 Column Mode (DECCOLM).                               | #B[Switches to old column width instead of 80.] |\n   * | 6     | Normal Cursor Mode (DECOM).                             | #Y      |\n   * | 7     | No Wraparound Mode (DECAWM).                            | #Y      |\n   * | 8     | No Auto-repeat Keys (DECARM).                           | #N      |\n   * | 9     | Don't send Mouse X & Y on button press.                 | #Y      |\n   * | 12    | Stop Blinking Cursor.                                   | #Y      |\n   * | 25    | Hide Cursor (DECTCEM).                                  | #Y      |\n   * | 45    | No reverse wrap-around.                                 | #Y      |\n   * | 47    | Use Normal Screen Buffer.                               | #Y      |\n   * | 66    | Numeric keypad (DECNKM).                                | #Y      |\n   * | 1000  | Don't send Mouse reports.                               | #Y      |\n   * | 1002  | Don't use Cell Motion Mouse Tracking.                   | #Y      |\n   * | 1003  | Don't use All Motion Mouse Tracking.                    | #Y      |\n   * | 1004  | Don't send FocusIn/FocusOut events.                     | #Y      |\n   * | 1005  | Disable UTF-8 Mouse Mode.                               | #N      |\n   * | 1006  | Disable SGR Mouse Mode.                                 | #Y      |\n   * | 1015  | Disable urxvt Mouse Mode.                               | #N      |\n   * | 1016  | Disable SGR-Pixels Mouse Mode.                          | #Y      |\n   * | 1047  | Use Normal Screen Buffer (clearing screen if in alt).   | #Y      |\n   * | 1048  | Restore cursor as in DECRC.                             | #Y      |\n   * | 1049  | Use Normal Screen Buffer and restore cursor.            | #Y      |\n   * | 2004  | Reset bracketed paste mode.                             | #Y      |\n   *\n   *\n   * FIXME: DECCOLM is currently broken (already fixed in window options PR)\n   */\n  public resetModePrivate(params: IParams): boolean {\n    for (let i = 0; i < params.length; i++) {\n      switch (params.params[i]) {\n        case 1:\n          this._coreService.decPrivateModes.applicationCursorKeys = false;\n          break;\n        case 3:\n          /**\n           * DECCOLM - 80 column mode.\n           * This is only active if 'SetWinLines' (24) is enabled\n           * through `options.windowsOptions`.\n           */\n          if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n            this._bufferService.resize(80, this._bufferService.rows);\n            this._onRequestReset.fire();\n          }\n          break;\n        case 6:\n          this._coreService.decPrivateModes.origin = false;\n          this._setCursor(0, 0);\n          break;\n        case 7:\n          this._coreService.decPrivateModes.wraparound = false;\n          break;\n        case 12:\n          this._optionsService.options.cursorBlink = false;\n          break;\n        case 45:\n          this._coreService.decPrivateModes.reverseWraparound = false;\n          break;\n        case 66:\n          this._logService.debug('Switching back to normal keypad.');\n          this._coreService.decPrivateModes.applicationKeypad = false;\n          this._onRequestSyncScrollBar.fire();\n          break;\n        case 9: // X10 Mouse\n        case 1000: // vt200 mouse\n        case 1002: // button event mouse\n        case 1003: // any event mouse\n          this._coreMouseService.activeProtocol = 'NONE';\n          break;\n        case 1004: // send focusin/focusout events\n          this._coreService.decPrivateModes.sendFocus = false;\n          break;\n        case 1005: // utf8 ext mode mouse - removed in #2507\n          this._logService.debug('DECRST 1005 not supported (see #2507)');\n          break;\n        case 1006: // sgr ext mode mouse\n          this._coreMouseService.activeEncoding = 'DEFAULT';\n          break;\n        case 1015: // urxvt ext mode mouse - removed in #2507\n          this._logService.debug('DECRST 1015 not supported (see #2507)');\n          break;\n        case 1016: // sgr pixels mode mouse\n          this._coreMouseService.activeEncoding = 'DEFAULT';\n          break;\n        case 25: // hide cursor\n          this._coreService.isCursorHidden = true;\n          break;\n        case 1048: // alt screen cursor\n          this.restoreCursor();\n          break;\n        case 1049: // alt screen buffer cursor\n        // FALL-THROUGH\n        case 47: // normal screen buffer\n        case 1047: // normal screen buffer - clearing it first\n          // Ensure the selection manager has the correct buffer\n          this._bufferService.buffers.activateNormalBuffer();\n          if (params.params[i] === 1049) {\n            this.restoreCursor();\n          }\n          this._coreService.isCursorInitialized = true;\n          this._onRequestRefreshRows.fire(undefined);\n          this._onRequestSyncScrollBar.fire();\n          break;\n        case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n          this._coreService.decPrivateModes.bracketedPasteMode = false;\n          break;\n        case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n          this._coreService.decPrivateModes.synchronizedOutput = false;\n          this._onRequestRefreshRows.fire(undefined);\n          break;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps $ p Request ANSI Mode (DECRQM).\n   *\n   * Reports CSI Ps; Pm $ y (DECRPM), where Ps is the mode number as in SM/RM,\n   * and Pm is the mode value:\n   *    0 - not recognized\n   *    1 - set\n   *    2 - reset\n   *    3 - permanently set\n   *    4 - permanently reset\n   *\n   * @vt: #Y  CSI   DECRQM  \"Request Mode\"  \"CSI Ps $p\"  \"Request mode state.\"\n   * Returns a report as `CSI Ps; Pm $ y` (DECRPM), where `Ps` is the mode number as in SM/RM\n   * or DECSET/DECRST, and `Pm` is the mode value:\n   * - 0: not recognized\n   * - 1: set\n   * - 2: reset\n   * - 3: permanently set\n   * - 4: permanently reset\n   *\n   * For modes not understood xterm.js always returns `notRecognized`. In general this means,\n   * that a certain operation mode is not implemented and cannot be used.\n   *\n   * Modes changing the active terminal buffer (47, 1047, 1049) are not subqueried\n   * and only report, whether the alternate buffer is set.\n   *\n   * Mouse encodings and mouse protocols are handled mutual exclusive,\n   * thus only one of each of those can be set at a given time.\n   *\n   * There is a chance, that some mode reports are not fully in line with xterm.js' behavior,\n   * e.g. if the default implementation already exposes a certain behavior. If you find\n   * discrepancies in the mode reports, please file a bug.\n   */\n  public requestMode(params: IParams, ansi: boolean): boolean {\n    // return value as in DECRPM\n    const enum V {\n      NOT_RECOGNIZED = 0,\n      SET = 1,\n      RESET = 2,\n      PERMANENTLY_SET = 3,\n      PERMANENTLY_RESET = 4\n    }\n\n    // access helpers\n    const dm = this._coreService.decPrivateModes;\n    const { activeProtocol: mouseProtocol, activeEncoding: mouseEncoding } = this._coreMouseService;\n    const cs = this._coreService;\n    const { buffers, cols } = this._bufferService;\n    const { active, alt } = buffers;\n    const opts = this._optionsService.rawOptions;\n\n    const f = (m: number, v: V): boolean => {\n      cs.triggerDataEvent(`${C0.ESC}[${ansi ? '' : '?'}${m};${v}$y`);\n      return true;\n    };\n    const b2v = (value: boolean): V => value ? V.SET : V.RESET;\n\n    const p = params.params[0];\n\n    if (ansi) {\n      if (p === 2) return f(p, V.PERMANENTLY_RESET);\n      if (p === 4) return f(p, b2v(cs.modes.insertMode));\n      if (p === 12) return f(p, V.PERMANENTLY_SET);\n      if (p === 20) return f(p, b2v(opts.convertEol));\n      return f(p, V.NOT_RECOGNIZED);\n    }\n\n    if (p === 1) return f(p, b2v(dm.applicationCursorKeys));\n    if (p === 3) return f(p, opts.windowOptions.setWinLines ? (cols === 80 ? V.RESET : cols === 132 ? V.SET : V.NOT_RECOGNIZED) : V.NOT_RECOGNIZED);\n    if (p === 6) return f(p, b2v(dm.origin));\n    if (p === 7) return f(p, b2v(dm.wraparound));\n    if (p === 8) return f(p, V.PERMANENTLY_SET);\n    if (p === 9) return f(p, b2v(mouseProtocol === 'X10'));\n    if (p === 12) return f(p, b2v(opts.cursorBlink));\n    if (p === 25) return f(p, b2v(!cs.isCursorHidden));\n    if (p === 45) return f(p, b2v(dm.reverseWraparound));\n    if (p === 66) return f(p, b2v(dm.applicationKeypad));\n    if (p === 67) return f(p, V.PERMANENTLY_RESET);\n    if (p === 1000) return f(p, b2v(mouseProtocol === 'VT200'));\n    if (p === 1002) return f(p, b2v(mouseProtocol === 'DRAG'));\n    if (p === 1003) return f(p, b2v(mouseProtocol === 'ANY'));\n    if (p === 1004) return f(p, b2v(dm.sendFocus));\n    if (p === 1005) return f(p, V.PERMANENTLY_RESET);\n    if (p === 1006) return f(p, b2v(mouseEncoding === 'SGR'));\n    if (p === 1015) return f(p, V.PERMANENTLY_RESET);\n    if (p === 1016) return f(p, b2v(mouseEncoding === 'SGR_PIXELS'));\n    if (p === 1048) return f(p, V.SET); // xterm always returns SET here\n    if (p === 47 || p === 1047 || p === 1049) return f(p, b2v(active === alt));\n    if (p === 2004) return f(p, b2v(dm.bracketedPasteMode));\n    if (p === 2026) return f(p, b2v(dm.synchronizedOutput));\n    return f(p, V.NOT_RECOGNIZED);\n  }\n\n  /**\n   * Helper to write color information packed with color mode.\n   */\n  private _updateAttrColor(color: number, mode: number, c1: number, c2: number, c3: number): number {\n    if (mode === 2) {\n      color |= Attributes.CM_RGB;\n      color &= ~Attributes.RGB_MASK;\n      color |= AttributeData.fromColorRGB([c1, c2, c3]);\n    } else if (mode === 5) {\n      color &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n      color |= Attributes.CM_P256 | (c1 & 0xff);\n    }\n    return color;\n  }\n\n  /**\n   * Helper to extract and apply color params/subparams.\n   * Returns advance for params index.\n   */\n  private _extractColor(params: IParams, pos: number, attr: IAttributeData): number {\n    // normalize params\n    // meaning: [target, CM, ign, val, val, val]\n    // RGB    : [ 38/48,  2, ign,   r,   g,   b]\n    // P256   : [ 38/48,  5, ign,   v, ign, ign]\n    const accu = [0, 0, -1, 0, 0, 0];\n\n    // alignment placeholder for non color space sequences\n    let cSpace = 0;\n\n    // return advance we took in params\n    let advance = 0;\n\n    do {\n      accu[advance + cSpace] = params.params[pos + advance];\n      if (params.hasSubParams(pos + advance)) {\n        const subparams = params.getSubParams(pos + advance)!;\n        let i = 0;\n        do {\n          if (accu[1] === 5) {\n            cSpace = 1;\n          }\n          accu[advance + i + 1 + cSpace] = subparams[i];\n        } while (++i < subparams.length && i + advance + 1 + cSpace < accu.length);\n        break;\n      }\n      // exit early if can decide color mode with semicolons\n      if ((accu[1] === 5 && advance + cSpace >= 2)\n        || (accu[1] === 2 && advance + cSpace >= 5)) {\n        break;\n      }\n      // offset colorSpace slot for semicolon mode\n      if (accu[1]) {\n        cSpace = 1;\n      }\n    } while (++advance + pos < params.length && advance + cSpace < accu.length);\n\n    // set default values to 0\n    for (let i = 2; i < accu.length; ++i) {\n      if (accu[i] === -1) {\n        accu[i] = 0;\n      }\n    }\n\n    // apply colors\n    switch (accu[0]) {\n      case 38:\n        attr.fg = this._updateAttrColor(attr.fg, accu[1], accu[3], accu[4], accu[5]);\n        break;\n      case 48:\n        attr.bg = this._updateAttrColor(attr.bg, accu[1], accu[3], accu[4], accu[5]);\n        break;\n      case 58:\n        attr.extended = attr.extended.clone();\n        attr.extended.underlineColor = this._updateAttrColor(attr.extended.underlineColor, accu[1], accu[3], accu[4], accu[5]);\n    }\n\n    return advance;\n  }\n\n  /**\n   * SGR 4 subparams:\n   *    4:0   -   equal to SGR 24 (turn off all underline)\n   *    4:1   -   equal to SGR 4 (single underline)\n   *    4:2   -   equal to SGR 21 (double underline)\n   *    4:3   -   curly underline\n   *    4:4   -   dotted underline\n   *    4:5   -   dashed underline\n   */\n  private _processUnderline(style: number, attr: IAttributeData): void {\n    // treat extended attrs as immutable, thus always clone from old one\n    // this is needed since the buffer only holds references to it\n    attr.extended = attr.extended.clone();\n\n    // default to 1 == single underline\n    if (!~style || style > 5) {\n      style = 1;\n    }\n    attr.extended.underlineStyle = style;\n    attr.fg |= FgFlags.UNDERLINE;\n\n    // 0 deactivates underline\n    if (style === 0) {\n      attr.fg &= ~FgFlags.UNDERLINE;\n    }\n\n    // update HAS_EXTENDED in BG\n    attr.updateExtended();\n  }\n\n  private _processSGR0(attr: IAttributeData): void {\n    attr.fg = DEFAULT_ATTR_DATA.fg;\n    attr.bg = DEFAULT_ATTR_DATA.bg;\n    attr.extended = attr.extended.clone();\n    // Reset underline style and color. Note that we don't want to reset other\n    // fields such as the url id.\n    attr.extended.underlineStyle = UnderlineStyle.NONE;\n    attr.extended.underlineColor &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n    attr.updateExtended();\n  }\n\n  /**\n   * CSI Pm m  Character Attributes (SGR).\n   *\n   * @vt: #P[See below for supported attributes.]    CSI SGR   \"Select Graphic Rendition\"  \"CSI Pm m\"  \"Set/Reset various text attributes.\"\n   * SGR selects one or more character attributes at the same time. Multiple params (up to 32)\n   * are applied in order from left to right. The changed attributes are applied to all new\n   * characters received. If you move characters in the viewport by scrolling or any other means,\n   * then the attributes move with the characters.\n   *\n   * Supported param values by SGR:\n   *\n   * | Param     | Meaning                                                  | Support |\n   * | --------- | -------------------------------------------------------- | ------- |\n   * | 0         | Normal (default). Resets any other preceding SGR.        | #Y      |\n   * | 1         | Bold. (also see `options.drawBoldTextInBrightColors`)    | #Y      |\n   * | 2         | Faint, decreased intensity.                              | #Y      |\n   * | 3         | Italic.                                                  | #Y      |\n   * | 4         | Underlined (see below for style support).                | #Y      |\n   * | 5         | Slowly blinking.                                         | #N      |\n   * | 6         | Rapidly blinking.                                        | #N      |\n   * | 7         | Inverse. Flips foreground and background color.          | #Y      |\n   * | 8         | Invisible (hidden).                                      | #Y      |\n   * | 9         | Crossed-out characters (strikethrough).                  | #Y      |\n   * | 21        | Doubly underlined.                                       | #Y      |\n   * | 22        | Normal (neither bold nor faint).                         | #Y      |\n   * | 23        | No italic.                                               | #Y      |\n   * | 24        | Not underlined.                                          | #Y      |\n   * | 25        | Steady (not blinking).                                   | #Y      |\n   * | 27        | Positive (not inverse).                                  | #Y      |\n   * | 28        | Visible (not hidden).                                    | #Y      |\n   * | 29        | Not Crossed-out (strikethrough).                         | #Y      |\n   * | 30        | Foreground color: Black.                                 | #Y      |\n   * | 31        | Foreground color: Red.                                   | #Y      |\n   * | 32        | Foreground color: Green.                                 | #Y      |\n   * | 33        | Foreground color: Yellow.                                | #Y      |\n   * | 34        | Foreground color: Blue.                                  | #Y      |\n   * | 35        | Foreground color: Magenta.                               | #Y      |\n   * | 36        | Foreground color: Cyan.                                  | #Y      |\n   * | 37        | Foreground color: White.                                 | #Y      |\n   * | 38        | Foreground color: Extended color.                        | #P[Support for RGB and indexed colors, see below.] |\n   * | 39        | Foreground color: Default (original).                    | #Y      |\n   * | 40        | Background color: Black.                                 | #Y      |\n   * | 41        | Background color: Red.                                   | #Y      |\n   * | 42        | Background color: Green.                                 | #Y      |\n   * | 43        | Background color: Yellow.                                | #Y      |\n   * | 44        | Background color: Blue.                                  | #Y      |\n   * | 45        | Background color: Magenta.                               | #Y      |\n   * | 46        | Background color: Cyan.                                  | #Y      |\n   * | 47        | Background color: White.                                 | #Y      |\n   * | 48        | Background color: Extended color.                        | #P[Support for RGB and indexed colors, see below.] |\n   * | 49        | Background color: Default (original).                    | #Y      |\n   * | 53        | Overlined.                                               | #Y      |\n   * | 55        | Not Overlined.                                           | #Y      |\n   * | 58        | Underline color: Extended color.                         | #P[Support for RGB and indexed colors, see below.] |\n   * | 90 - 97   | Bright foreground color (analogous to 30 - 37).          | #Y      |\n   * | 100 - 107 | Bright background color (analogous to 40 - 47).          | #Y      |\n   *\n   * Underline supports subparams to denote the style in the form `4 : x`:\n   *\n   * | x      | Meaning                                                       | Support |\n   * | ------ | ------------------------------------------------------------- | ------- |\n   * | 0      | No underline. Same as `SGR 24 m`.                             | #Y      |\n   * | 1      | Single underline. Same as `SGR 4 m`.                          | #Y      |\n   * | 2      | Double underline.                                             | #Y      |\n   * | 3      | Curly underline.                                              | #Y      |\n   * | 4      | Dotted underline.                                             | #Y      |\n   * | 5      | Dashed underline.                                             | #Y      |\n   * | other  | Single underline. Same as `SGR 4 m`.                          | #Y      |\n   *\n   * Extended colors are supported for foreground (Ps=38), background (Ps=48) and underline (Ps=58)\n   * as follows:\n   *\n   * | Ps + 1 | Meaning                                                       | Support |\n   * | ------ | ------------------------------------------------------------- | ------- |\n   * | 0      | Implementation defined.                                       | #N      |\n   * | 1      | Transparent.                                                  | #N      |\n   * | 2      | RGB color as `Ps ; 2 ; R ; G ; B` or `Ps : 2 : : R : G : B`.  | #Y      |\n   * | 3      | CMY color.                                                    | #N      |\n   * | 4      | CMYK color.                                                   | #N      |\n   * | 5      | Indexed (256 colors) as `Ps ; 5 ; INDEX` or `Ps : 5 : INDEX`. | #Y      |\n   *\n   *\n   * FIXME: blinking is implemented in attrs, but not working in renderers?\n   * FIXME: remove dead branch for p=100\n   */\n  public charAttributes(params: IParams): boolean {\n    // Optimize a single SGR0.\n    if (params.length === 1 && params.params[0] === 0) {\n      this._processSGR0(this._curAttrData);\n      return true;\n    }\n\n    const l = params.length;\n    let p;\n    const attr = this._curAttrData;\n\n    for (let i = 0; i < l; i++) {\n      p = params.params[i];\n      if (p >= 30 && p <= 37) {\n        // fg color 8\n        attr.fg &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n        attr.fg |= Attributes.CM_P16 | (p - 30);\n      } else if (p >= 40 && p <= 47) {\n        // bg color 8\n        attr.bg &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n        attr.bg |= Attributes.CM_P16 | (p - 40);\n      } else if (p >= 90 && p <= 97) {\n        // fg color 16\n        attr.fg &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n        attr.fg |= Attributes.CM_P16 | (p - 90) | 8;\n      } else if (p >= 100 && p <= 107) {\n        // bg color 16\n        attr.bg &= ~(Attributes.CM_MASK | Attributes.PCOLOR_MASK);\n        attr.bg |= Attributes.CM_P16 | (p - 100) | 8;\n      } else if (p === 0) {\n        // default\n        this._processSGR0(attr);\n      } else if (p === 1) {\n        // bold text\n        attr.fg |= FgFlags.BOLD;\n      } else if (p === 3) {\n        // italic text\n        attr.bg |= BgFlags.ITALIC;\n      } else if (p === 4) {\n        // underlined text\n        attr.fg |= FgFlags.UNDERLINE;\n        this._processUnderline(params.hasSubParams(i) ? params.getSubParams(i)![0] : UnderlineStyle.SINGLE, attr);\n      } else if (p === 5) {\n        // blink\n        attr.fg |= FgFlags.BLINK;\n      } else if (p === 7) {\n        // inverse and positive\n        // test with: echo -e '\\e[31m\\e[42mhello\\e[7mworld\\e[27mhi\\e[m'\n        attr.fg |= FgFlags.INVERSE;\n      } else if (p === 8) {\n        // invisible\n        attr.fg |= FgFlags.INVISIBLE;\n      } else if (p === 9) {\n        // strikethrough\n        attr.fg |= FgFlags.STRIKETHROUGH;\n      } else if (p === 2) {\n        // dimmed text\n        attr.bg |= BgFlags.DIM;\n      } else if (p === 21) {\n        // double underline\n        this._processUnderline(UnderlineStyle.DOUBLE, attr);\n      } else if (p === 22) {\n        // not bold nor faint\n        attr.fg &= ~FgFlags.BOLD;\n        attr.bg &= ~BgFlags.DIM;\n      } else if (p === 23) {\n        // not italic\n        attr.bg &= ~BgFlags.ITALIC;\n      } else if (p === 24) {\n        // not underlined\n        attr.fg &= ~FgFlags.UNDERLINE;\n        this._processUnderline(UnderlineStyle.NONE, attr);\n      } else if (p === 25) {\n        // not blink\n        attr.fg &= ~FgFlags.BLINK;\n      } else if (p === 27) {\n        // not inverse\n        attr.fg &= ~FgFlags.INVERSE;\n      } else if (p === 28) {\n        // not invisible\n        attr.fg &= ~FgFlags.INVISIBLE;\n      } else if (p === 29) {\n        // not strikethrough\n        attr.fg &= ~FgFlags.STRIKETHROUGH;\n      } else if (p === 39) {\n        // reset fg\n        attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n        attr.fg |= DEFAULT_ATTR_DATA.fg & (Attributes.PCOLOR_MASK | Attributes.RGB_MASK);\n      } else if (p === 49) {\n        // reset bg\n        attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n        attr.bg |= DEFAULT_ATTR_DATA.bg & (Attributes.PCOLOR_MASK | Attributes.RGB_MASK);\n      } else if (p === 38 || p === 48 || p === 58) {\n        // fg color 256 and RGB\n        i += this._extractColor(params, i, attr);\n      } else if (p === 53) {\n        // overline\n        attr.bg |= BgFlags.OVERLINE;\n      } else if (p === 55) {\n        // not overline\n        attr.bg &= ~BgFlags.OVERLINE;\n      } else if (p === 59) {\n        attr.extended = attr.extended.clone();\n        attr.extended.underlineColor = -1;\n        attr.updateExtended();\n      } else if (p === 100) { // FIXME: dead branch, p=100 already handled above!\n        // reset fg/bg\n        attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n        attr.fg |= DEFAULT_ATTR_DATA.fg & (Attributes.PCOLOR_MASK | Attributes.RGB_MASK);\n        attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n        attr.bg |= DEFAULT_ATTR_DATA.bg & (Attributes.PCOLOR_MASK | Attributes.RGB_MASK);\n      } else {\n        this._logService.debug('Unknown SGR attribute: %d.', p);\n      }\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps n  Device Status Report (DSR).\n   *     Ps = 5  -> Status Report.  Result (``OK'') is\n   *   CSI 0 n\n   *     Ps = 6  -> Report Cursor Position (CPR) [row;column].\n   *   Result is\n   *   CSI r ; c R\n   * CSI ? Ps n\n   *   Device Status Report (DSR, DEC-specific).\n   *     Ps = 6  -> Report Cursor Position (CPR) [row;column] as CSI\n   *     ? r ; c R (assumes page is zero).\n   *     Ps = 1 5  -> Report Printer status as CSI ? 1 0  n  (ready).\n   *     or CSI ? 1 1  n  (not ready).\n   *     Ps = 2 5  -> Report UDK status as CSI ? 2 0  n  (unlocked)\n   *     or CSI ? 2 1  n  (locked).\n   *     Ps = 2 6  -> Report Keyboard status as\n   *   CSI ? 2 7  ;  1  ;  0  ;  0  n  (North American).\n   *   The last two parameters apply to VT400 & up, and denote key-\n   *   board ready and LK01 respectively.\n   *     Ps = 5 3  -> Report Locator status as\n   *   CSI ? 5 3  n  Locator available, if compiled-in, or\n   *   CSI ? 5 0  n  No Locator, if not.\n   *\n   * @vt: #Y CSI DSR   \"Device Status Report\"  \"CSI Ps n\"  \"Request cursor position (CPR) with `Ps` = 6.\"\n   */\n  public deviceStatus(params: IParams): boolean {\n    switch (params.params[0]) {\n      case 5:\n        // status report\n        this._coreService.triggerDataEvent(`${C0.ESC}[0n`);\n        break;\n      case 6:\n        // cursor position\n        const y = this._activeBuffer.y + 1;\n        const x = this._activeBuffer.x + 1;\n        this._coreService.triggerDataEvent(`${C0.ESC}[${y};${x}R`);\n        break;\n    }\n    return true;\n  }\n\n  // @vt: #P[Only CPR is supported.]  CSI DECDSR  \"DEC Device Status Report\"  \"CSI ? Ps n\"  \"Only CPR is supported (same as DSR).\"\n  public deviceStatusPrivate(params: IParams): boolean {\n    // modern xterm doesnt seem to\n    // respond to any of these except ?6, 6, and 5\n    switch (params.params[0]) {\n      case 6:\n        // cursor position\n        const y = this._activeBuffer.y + 1;\n        const x = this._activeBuffer.x + 1;\n        this._coreService.triggerDataEvent(`${C0.ESC}[?${y};${x}R`);\n        break;\n      case 15:\n        // no printer\n        // this.handler(C0.ESC + '[?11n');\n        break;\n      case 25:\n        // dont support user defined keys\n        // this.handler(C0.ESC + '[?21n');\n        break;\n      case 26:\n        // north american keyboard\n        // this.handler(C0.ESC + '[?27;1;0;0n');\n        break;\n      case 53:\n        // no dec locator/mouse\n        // this.handler(C0.ESC + '[?50n');\n        break;\n    }\n    return true;\n  }\n\n  /**\n   * CSI ! p   Soft terminal reset (DECSTR).\n   * http://vt100.net/docs/vt220-rm/table4-10.html\n   *\n   * @vt: #Y CSI DECSTR  \"Soft Terminal Reset\"   \"CSI ! p\"   \"Reset several terminal attributes to initial state.\"\n   * There are two terminal reset sequences - RIS and DECSTR. While RIS performs almost a full\n   * terminal bootstrap, DECSTR only resets certain attributes. For most needs DECSTR should be\n   * sufficient.\n   *\n   * The following terminal attributes are reset to default values:\n   * - IRM is reset (dafault = false)\n   * - scroll margins are reset (default = viewport size)\n   * - erase attributes are reset to default\n   * - charsets are reset\n   * - DECSC data is reset to initial values\n   * - DECOM is reset to absolute mode\n   *\n   *\n   * FIXME: there are several more attributes missing (see VT520 manual)\n   */\n  public softReset(params: IParams): boolean {\n    this._coreService.isCursorHidden = false;\n    this._onRequestSyncScrollBar.fire();\n    this._activeBuffer.scrollTop = 0;\n    this._activeBuffer.scrollBottom = this._bufferService.rows - 1;\n    this._curAttrData = DEFAULT_ATTR_DATA.clone();\n    this._coreService.reset();\n    this._charsetService.reset();\n\n    // reset DECSC data\n    this._activeBuffer.savedX = 0;\n    this._activeBuffer.savedY = this._activeBuffer.ybase;\n    this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n    this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n    this._activeBuffer.savedCharset = this._charsetService.charset;\n\n    // reset DECOM\n    this._coreService.decPrivateModes.origin = false;\n    return true;\n  }\n\n  /**\n   * CSI Ps SP q  Set cursor style (DECSCUSR, VT520).\n   *   Ps = 0  -> reset to option.\n   *   Ps = 1  -> blinking block (default).\n   *   Ps = 2  -> steady block.\n   *   Ps = 3  -> blinking underline.\n   *   Ps = 4  -> steady underline.\n   *   Ps = 5  -> blinking bar (xterm).\n   *   Ps = 6  -> steady bar (xterm).\n   *\n   * @vt: #Y CSI DECSCUSR  \"Set Cursor Style\"  \"CSI Ps SP q\"   \"Set cursor style.\"\n   * Supported cursor styles:\n   *  - 0: reset to option\n   *  - empty, 1: blinking block\n   *  - 2: steady block\n   *  - 3: blinking underline\n   *  - 4: steady underline\n   *  - 5: blinking bar\n   *  - 6: steady bar\n   */\n  public setCursorStyle(params: IParams): boolean {\n    const param = params.length === 0 ? 1 : params.params[0];\n    if (param === 0) {\n      this._coreService.decPrivateModes.cursorStyle = undefined;\n      this._coreService.decPrivateModes.cursorBlink = undefined;\n    } else {\n      switch (param) {\n        case 1:\n        case 2:\n          this._coreService.decPrivateModes.cursorStyle = 'block';\n          break;\n        case 3:\n        case 4:\n          this._coreService.decPrivateModes.cursorStyle = 'underline';\n          break;\n        case 5:\n        case 6:\n          this._coreService.decPrivateModes.cursorStyle = 'bar';\n          break;\n      }\n      const isBlinking = param % 2 === 1;\n      this._coreService.decPrivateModes.cursorBlink = isBlinking;\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps ; Ps r\n   *   Set Scrolling Region [top;bottom] (default = full size of win-\n   *   dow) (DECSTBM).\n   *\n   * @vt: #Y CSI DECSTBM \"Set Top and Bottom Margin\" \"CSI Ps ; Ps r\" \"Set top and bottom margins of the viewport [top;bottom] (default = viewport size).\"\n   */\n  public setScrollRegion(params: IParams): boolean {\n    const top = params.params[0] || 1;\n    let bottom: number;\n\n    if (params.length < 2 || (bottom = params.params[1]) > this._bufferService.rows || bottom === 0) {\n      bottom = this._bufferService.rows;\n    }\n\n    if (bottom > top) {\n      this._activeBuffer.scrollTop = top - 1;\n      this._activeBuffer.scrollBottom = bottom - 1;\n      this._setCursor(0, 0);\n    }\n    return true;\n  }\n\n  /**\n   * CSI Ps ; Ps ; Ps t - Various window manipulations and reports (xterm)\n   *\n   * Note: Only those listed below are supported. All others are left to integrators and\n   * need special treatment based on the embedding environment.\n   *\n   *    Ps = 1 4                                                          supported\n   *      Report xterm text area size in pixels.\n   *      Result is CSI 4 ; height ; width t\n   *    Ps = 14 ; 2                                                       not implemented\n   *    Ps = 16                                                           supported\n   *      Report xterm character cell size in pixels.\n   *      Result is CSI 6 ; height ; width t\n   *    Ps = 18                                                           supported\n   *      Report the size of the text area in characters.\n   *      Result is CSI 8 ; height ; width t\n   *    Ps = 20                                                           supported\n   *      Report xterm window's icon label.\n   *      Result is OSC L label ST\n   *    Ps = 21                                                           supported\n   *      Report xterm window's title.\n   *      Result is OSC l label ST\n   *    Ps = 22 ; 0  -> Save xterm icon and window title on stack.        supported\n   *    Ps = 22 ; 1  -> Save xterm icon title on stack.                   supported\n   *    Ps = 22 ; 2  -> Save xterm window title on stack.                 supported\n   *    Ps = 23 ; 0  -> Restore xterm icon and window title from stack.   supported\n   *    Ps = 23 ; 1  -> Restore xterm icon title from stack.              supported\n   *    Ps = 23 ; 2  -> Restore xterm window title from stack.            supported\n   *    Ps >= 24                                                          not implemented\n   */\n  public windowOptions(params: IParams): boolean {\n    if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n      return true;\n    }\n    const second = (params.length > 1) ? params.params[1] : 0;\n    switch (params.params[0]) {\n      case 14:  // GetWinSizePixels, returns CSI 4 ; height ; width t\n        if (second !== 2) {\n          this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_WIN_SIZE_PIXELS);\n        }\n        break;\n      case 16:  // GetCellSizePixels, returns CSI 6 ; height ; width t\n        this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_CELL_SIZE_PIXELS);\n        break;\n      case 18:  // GetWinSizeChars, returns CSI 8 ; height ; width t\n        if (this._bufferService) {\n          this._coreService.triggerDataEvent(`${C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);\n        }\n        break;\n      case 22:  // PushTitle\n        if (second === 0 || second === 2) {\n          this._windowTitleStack.push(this._windowTitle);\n          if (this._windowTitleStack.length > STACK_LIMIT) {\n            this._windowTitleStack.shift();\n          }\n        }\n        if (second === 0 || second === 1) {\n          this._iconNameStack.push(this._iconName);\n          if (this._iconNameStack.length > STACK_LIMIT) {\n            this._iconNameStack.shift();\n          }\n        }\n        break;\n      case 23:  // PopTitle\n        if (second === 0 || second === 2) {\n          if (this._windowTitleStack.length) {\n            this.setTitle(this._windowTitleStack.pop()!);\n          }\n        }\n        if (second === 0 || second === 1) {\n          if (this._iconNameStack.length) {\n            this.setIconName(this._iconNameStack.pop()!);\n          }\n        }\n        break;\n    }\n    return true;\n  }\n\n\n  /**\n   * CSI s\n   * ESC 7\n   *   Save cursor (ANSI.SYS).\n   *\n   * @vt: #P[TODO...]  CSI SCOSC   \"Save Cursor\"   \"CSI s\"   \"Save cursor position, charmap and text attributes.\"\n   * @vt: #Y ESC  SC   \"Save Cursor\"   \"ESC 7\"   \"Save cursor position, charmap and text attributes.\"\n   */\n  public saveCursor(params?: IParams): boolean {\n    this._activeBuffer.savedX = this._activeBuffer.x;\n    this._activeBuffer.savedY = this._activeBuffer.ybase + this._activeBuffer.y;\n    this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n    this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n    this._activeBuffer.savedCharset = this._charsetService.charset;\n    return true;\n  }\n\n\n  /**\n   * CSI u\n   * ESC 8\n   *   Restore cursor (ANSI.SYS).\n   *\n   * @vt: #P[TODO...]  CSI SCORC \"Restore Cursor\"  \"CSI u\"   \"Restore cursor position, charmap and text attributes.\"\n   * @vt: #Y ESC  RC \"Restore Cursor\"  \"ESC 8\"   \"Restore cursor position, charmap and text attributes.\"\n   */\n  public restoreCursor(params?: IParams): boolean {\n    this._activeBuffer.x = this._activeBuffer.savedX || 0;\n    this._activeBuffer.y = Math.max(this._activeBuffer.savedY - this._activeBuffer.ybase, 0);\n    this._curAttrData.fg = this._activeBuffer.savedCurAttrData.fg;\n    this._curAttrData.bg = this._activeBuffer.savedCurAttrData.bg;\n    this._charsetService.charset = (this as any)._savedCharset;\n    if (this._activeBuffer.savedCharset) {\n      this._charsetService.charset = this._activeBuffer.savedCharset;\n    }\n    this._restrictCursor();\n    return true;\n  }\n\n\n  /**\n   * OSC 2; <data> ST (set window title)\n   *   Proxy to set window title.\n   *\n   * @vt: #P[Icon name is not exposed.]   OSC    0   \"Set Windows Title and Icon Name\"  \"OSC 0 ; Pt BEL\"  \"Set window title and icon name.\"\n   * Icon name is not supported. For Window Title see below.\n   *\n   * @vt: #Y     OSC    2   \"Set Windows Title\"  \"OSC 2 ; Pt BEL\"  \"Set window title.\"\n   * xterm.js does not manipulate the title directly, instead exposes changes via the event\n   * `Terminal.onTitleChange`.\n   */\n  public setTitle(data: string): boolean {\n    this._windowTitle = data;\n    this._onTitleChange.fire(data);\n    return true;\n  }\n\n  /**\n   * OSC 1; <data> ST\n   * Note: Icon name is not exposed.\n   */\n  public setIconName(data: string): boolean {\n    this._iconName = data;\n    return true;\n  }\n\n  /**\n   * OSC 4; <num> ; <text> ST (set ANSI color <num> to <text>)\n   *\n   * @vt: #Y    OSC    4    \"Set ANSI color\"   \"OSC 4 ; c ; spec BEL\" \"Change color number `c` to the color specified by `spec`.\"\n   * `c` is the color index between 0 and 255. The color format of `spec` is derived from\n   * `XParseColor` (see OSC 10 for supported formats). There may be multipe `c ; spec` pairs present\n   * in the same instruction. If `spec` contains `?` the terminal returns a sequence with the\n   * currently set color.\n   */\n  public setOrReportIndexedColor(data: string): boolean {\n    const event: IColorEvent = [];\n    const slots = data.split(';');\n    while (slots.length > 1) {\n      const idx = slots.shift() as string;\n      const spec = slots.shift() as string;\n      if (/^\\d+$/.exec(idx)) {\n        const index = parseInt(idx);\n        if (isValidColorIndex(index)) {\n          if (spec === '?') {\n            event.push({ type: ColorRequestType.REPORT, index });\n          } else {\n            const color = parseColor(spec);\n            if (color) {\n              event.push({ type: ColorRequestType.SET, index, color });\n            }\n          }\n        }\n      }\n    }\n    if (event.length) {\n      this._onColor.fire(event);\n    }\n    return true;\n  }\n\n  /**\n   * OSC 8 ; <params> ; <uri> ST - create hyperlink\n   * OSC 8 ; ; ST - finish hyperlink\n   *\n   * Test case:\n   *\n   * ```sh\n   * printf '\\e]8;;http://example.com\\e\\\\This is a link\\e]8;;\\e\\\\\\n'\n   * ```\n   *\n   * @vt: #Y    OSC    8    \"Create hyperlink\"   \"OSC 8 ; params ; uri BEL\" \"Create a hyperlink to `uri` using `params`.\"\n   * `uri` is a hyperlink starting with `http://`, `https://`, `ftp://`, `file://` or `mailto://`. `params` is an\n   * optional list of key=value assignments, separated by the : character.\n   * Example: `id=xyz123:foo=bar:baz=quux`.\n   * Currently only the id key is defined. Cells that share the same ID and URI share hover\n   * feedback. Use `OSC 8 ; ; BEL` to finish the current hyperlink.\n   */\n  public setHyperlink(data: string): boolean {\n    // Arg parsing is special cases to support unencoded semi-colons in the URIs (#4944)\n    const idx = data.indexOf(';');\n    if (idx === -1) {\n      // malformed sequence, just return as handled\n      return true;\n    }\n    const id = data.slice(0, idx).trim();\n    const uri = data.slice(idx + 1);\n    if (uri) {\n      return this._createHyperlink(id, uri);\n    }\n    if (id.trim()) {\n      return false;\n    }\n    return this._finishHyperlink();\n  }\n\n  private _createHyperlink(params: string, uri: string): boolean {\n    // It's legal to open a new hyperlink without explicitly finishing the previous one\n    if (this._getCurrentLinkId()) {\n      this._finishHyperlink();\n    }\n    const parsedParams = params.split(':');\n    let id: string | undefined;\n    const idParamIndex = parsedParams.findIndex(e => e.startsWith('id='));\n    if (idParamIndex !== -1) {\n      id = parsedParams[idParamIndex].slice(3) || undefined;\n    }\n    this._curAttrData.extended = this._curAttrData.extended.clone();\n    this._curAttrData.extended.urlId = this._oscLinkService.registerLink({ id, uri });\n    this._curAttrData.updateExtended();\n    return true;\n  }\n\n  private _finishHyperlink(): boolean {\n    this._curAttrData.extended = this._curAttrData.extended.clone();\n    this._curAttrData.extended.urlId = 0;\n    this._curAttrData.updateExtended();\n    return true;\n  }\n\n  // special colors - OSC 10 | 11 | 12\n  private _specialColors = [SpecialColorIndex.FOREGROUND, SpecialColorIndex.BACKGROUND, SpecialColorIndex.CURSOR];\n\n  /**\n   * Apply colors requests for special colors in OSC 10 | 11 | 12.\n   * Since these commands are stacking from multiple parameters,\n   * we handle them in a loop with an entry offset to `_specialColors`.\n   */\n  private _setOrReportSpecialColor(data: string, offset: number): boolean {\n    const slots = data.split(';');\n    for (let i = 0; i < slots.length; ++i, ++offset) {\n      if (offset >= this._specialColors.length) break;\n      if (slots[i] === '?') {\n        this._onColor.fire([{ type: ColorRequestType.REPORT, index: this._specialColors[offset] }]);\n      } else {\n        const color = parseColor(slots[i]);\n        if (color) {\n          this._onColor.fire([{ type: ColorRequestType.SET, index: this._specialColors[offset], color }]);\n        }\n      }\n    }\n    return true;\n  }\n\n  /**\n   * OSC 10 ; <xcolor name>|<?> ST - set or query default foreground color\n   *\n   * @vt: #Y  OSC   10    \"Set or query default foreground color\"   \"OSC 10 ; Pt BEL\"  \"Set or query default foreground color.\"\n   * To set the color, the following color specification formats are supported:\n   * - `rgb:<red>/<green>/<blue>` for  `<red>, <green>, <blue>` in `h | hh | hhh | hhhh`, where\n   *   `h` is a single hexadecimal digit (case insignificant). The different widths scale\n   *   from 4 bit (`h`) to 16 bit (`hhhh`) and get converted to 8 bit (`hh`).\n   * - `#RGB` - 4 bits per channel, expanded to `#R0G0B0`\n   * - `#RRGGBB` - 8 bits per channel\n   * - `#RRRGGGBBB` - 12 bits per channel, truncated to `#RRGGBB`\n   * - `#RRRRGGGGBBBB` - 16 bits per channel, truncated to `#RRGGBB`\n   *\n   * **Note:** X11 named colors are currently unsupported.\n   *\n   * If `Pt` contains `?` instead of a color specification, the terminal\n   * returns a sequence with the current default foreground color\n   * (use that sequence to restore the color after changes).\n   *\n   * **Note:** Other than xterm, xterm.js does not support OSC 12 - 19.\n   * Therefore stacking multiple `Pt` separated by `;` only works for the first two entries.\n   */\n  public setOrReportFgColor(data: string): boolean {\n    return this._setOrReportSpecialColor(data, 0);\n  }\n\n  /**\n   * OSC 11 ; <xcolor name>|<?> ST - set or query default background color\n   *\n   * @vt: #Y  OSC   11    \"Set or query default background color\"   \"OSC 11 ; Pt BEL\"  \"Same as OSC 10, but for default background.\"\n   */\n  public setOrReportBgColor(data: string): boolean {\n    return this._setOrReportSpecialColor(data, 1);\n  }\n\n  /**\n   * OSC 12 ; <xcolor name>|<?> ST - set or query default cursor color\n   *\n   * @vt: #Y  OSC   12    \"Set or query default cursor color\"   \"OSC 12 ; Pt BEL\"  \"Same as OSC 10, but for default cursor color.\"\n   */\n  public setOrReportCursorColor(data: string): boolean {\n    return this._setOrReportSpecialColor(data, 2);\n  }\n\n  /**\n   * OSC 104 ; <num> ST - restore ANSI color <num>\n   *\n   * @vt: #Y  OSC   104    \"Reset ANSI color\"   \"OSC 104 ; c BEL\" \"Reset color number `c` to themed color.\"\n   * `c` is the color index between 0 and 255. This function restores the default color for `c` as\n   * specified by the loaded theme. Any number of `c` parameters may be given.\n   * If no parameters are given, the entire indexed color table will be reset.\n   */\n  public restoreIndexedColor(data: string): boolean {\n    if (!data) {\n      this._onColor.fire([{ type: ColorRequestType.RESTORE }]);\n      return true;\n    }\n    const event: IColorEvent = [];\n    const slots = data.split(';');\n    for (let i = 0; i < slots.length; ++i) {\n      if (/^\\d+$/.exec(slots[i])) {\n        const index = parseInt(slots[i]);\n        if (isValidColorIndex(index)) {\n          event.push({ type: ColorRequestType.RESTORE, index });\n        }\n      }\n    }\n    if (event.length) {\n      this._onColor.fire(event);\n    }\n    return true;\n  }\n\n  /**\n   * OSC 110 ST - restore default foreground color\n   *\n   * @vt: #Y  OSC   110    \"Restore default foreground color\"   \"OSC 110 BEL\"  \"Restore default foreground to themed color.\"\n   */\n  public restoreFgColor(data: string): boolean {\n    this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.FOREGROUND }]);\n    return true;\n  }\n\n  /**\n   * OSC 111 ST - restore default background color\n   *\n   * @vt: #Y  OSC   111    \"Restore default background color\"   \"OSC 111 BEL\"  \"Restore default background to themed color.\"\n   */\n  public restoreBgColor(data: string): boolean {\n    this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.BACKGROUND }]);\n    return true;\n  }\n\n  /**\n   * OSC 112 ST - restore default cursor color\n   *\n   * @vt: #Y  OSC   112    \"Restore default cursor color\"   \"OSC 112 BEL\"  \"Restore default cursor to themed color.\"\n   */\n  public restoreCursorColor(data: string): boolean {\n    this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.CURSOR }]);\n    return true;\n  }\n\n  /**\n   * ESC E\n   * C1.NEL\n   *   DEC mnemonic: NEL (https://vt100.net/docs/vt510-rm/NEL)\n   *   Moves cursor to first position on next line.\n   *\n   * @vt: #Y   C1    NEL   \"Next Line\"   \"\\x85\"    \"Move the cursor to the beginning of the next row.\"\n   * @vt: #Y   ESC   NEL   \"Next Line\"   \"ESC E\"   \"Move the cursor to the beginning of the next row.\"\n   */\n  public nextLine(): boolean {\n    this._activeBuffer.x = 0;\n    this.index();\n    return true;\n  }\n\n  /**\n   * ESC =\n   *   DEC mnemonic: DECKPAM (https://vt100.net/docs/vt510-rm/DECKPAM.html)\n   *   Enables the numeric keypad to send application sequences to the host.\n   */\n  public keypadApplicationMode(): boolean {\n    this._logService.debug('Serial port requested application keypad.');\n    this._coreService.decPrivateModes.applicationKeypad = true;\n    this._onRequestSyncScrollBar.fire();\n    return true;\n  }\n\n  /**\n   * ESC >\n   *   DEC mnemonic: DECKPNM (https://vt100.net/docs/vt510-rm/DECKPNM.html)\n   *   Enables the keypad to send numeric characters to the host.\n   */\n  public keypadNumericMode(): boolean {\n    this._logService.debug('Switching back to normal keypad.');\n    this._coreService.decPrivateModes.applicationKeypad = false;\n    this._onRequestSyncScrollBar.fire();\n    return true;\n  }\n\n  /**\n   * ESC % @\n   * ESC % G\n   *   Select default character set. UTF-8 is not supported (string are unicode anyways)\n   *   therefore ESC % G does the same.\n   */\n  public selectDefaultCharset(): boolean {\n    this._charsetService.setgLevel(0);\n    this._charsetService.setgCharset(0, DEFAULT_CHARSET); // US (default)\n    return true;\n  }\n\n  /**\n   * ESC ( C\n   *   Designate G0 Character Set, VT100, ISO 2022.\n   * ESC ) C\n   *   Designate G1 Character Set (ISO 2022, VT100).\n   * ESC * C\n   *   Designate G2 Character Set (ISO 2022, VT220).\n   * ESC + C\n   *   Designate G3 Character Set (ISO 2022, VT220).\n   * ESC - C\n   *   Designate G1 Character Set (VT300).\n   * ESC . C\n   *   Designate G2 Character Set (VT300).\n   * ESC / C\n   *   Designate G3 Character Set (VT300). C = A  -> ISO Latin-1 Supplemental. - Supported?\n   */\n  public selectCharset(collectAndFlag: string): boolean {\n    if (collectAndFlag.length !== 2) {\n      this.selectDefaultCharset();\n      return true;\n    }\n    if (collectAndFlag[0] === '/') {\n      return true;  // TODO: Is this supported?\n    }\n    this._charsetService.setgCharset(GLEVEL[collectAndFlag[0]], CHARSETS[collectAndFlag[1]] || DEFAULT_CHARSET);\n    return true;\n  }\n\n  /**\n   * ESC D\n   * C1.IND\n   *   DEC mnemonic: IND (https://vt100.net/docs/vt510-rm/IND.html)\n   *   Moves the cursor down one line in the same column.\n   *\n   * @vt: #Y   C1    IND   \"Index\"   \"\\x84\"    \"Move the cursor one line down scrolling if needed.\"\n   * @vt: #Y   ESC   IND   \"Index\"   \"ESC D\"   \"Move the cursor one line down scrolling if needed.\"\n   */\n  public index(): boolean {\n    this._restrictCursor();\n    this._activeBuffer.y++;\n    if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n      this._activeBuffer.y--;\n      this._bufferService.scroll(this._eraseAttrData());\n    } else if (this._activeBuffer.y >= this._bufferService.rows) {\n      this._activeBuffer.y = this._bufferService.rows - 1;\n    }\n    this._restrictCursor();\n    return true;\n  }\n\n  /**\n   * ESC H\n   * C1.HTS\n   *   DEC mnemonic: HTS (https://vt100.net/docs/vt510-rm/HTS.html)\n   *   Sets a horizontal tab stop at the column position indicated by\n   *   the value of the active column when the terminal receives an HTS.\n   *\n   * @vt: #Y   C1    HTS   \"Horizontal Tabulation Set\" \"\\x88\"    \"Places a tab stop at the current cursor position.\"\n   * @vt: #Y   ESC   HTS   \"Horizontal Tabulation Set\" \"ESC H\"   \"Places a tab stop at the current cursor position.\"\n   */\n  public tabSet(): boolean {\n    this._activeBuffer.tabs[this._activeBuffer.x] = true;\n    return true;\n  }\n\n  /**\n   * ESC M\n   * C1.RI\n   *   DEC mnemonic: HTS\n   *   Moves the cursor up one line in the same column. If the cursor is at the top margin,\n   *   the page scrolls down.\n   *\n   * @vt: #Y ESC  IR \"Reverse Index\" \"ESC M\"  \"Move the cursor one line up scrolling if needed.\"\n   */\n  public reverseIndex(): boolean {\n    this._restrictCursor();\n    if (this._activeBuffer.y === this._activeBuffer.scrollTop) {\n      // possibly move the code below to term.reverseScroll();\n      // test: echo -ne '\\e[1;1H\\e[44m\\eM\\e[0m'\n      // blankLine(true) is xterm/linux behavior\n      const scrollRegionHeight = this._activeBuffer.scrollBottom - this._activeBuffer.scrollTop;\n      this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase + this._activeBuffer.y, scrollRegionHeight, 1);\n      this._activeBuffer.lines.set(this._activeBuffer.ybase + this._activeBuffer.y, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n      this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n    } else {\n      this._activeBuffer.y--;\n      this._restrictCursor(); // quickfix to not run out of bounds\n    }\n    return true;\n  }\n\n  /**\n   * ESC c\n   *   DEC mnemonic: RIS (https://vt100.net/docs/vt510-rm/RIS.html)\n   *   Reset to initial state.\n   */\n  public fullReset(): boolean {\n    this._parser.reset();\n    this._onRequestReset.fire();\n    return true;\n  }\n\n  public reset(): void {\n    this._curAttrData = DEFAULT_ATTR_DATA.clone();\n    this._eraseAttrDataInternal = DEFAULT_ATTR_DATA.clone();\n  }\n\n  /**\n   * back_color_erase feature for xterm.\n   */\n  private _eraseAttrData(): IAttributeData {\n    this._eraseAttrDataInternal.bg &= ~(Attributes.CM_MASK | 0xFFFFFF);\n    this._eraseAttrDataInternal.bg |= this._curAttrData.bg & ~0xFC000000;\n    return this._eraseAttrDataInternal;\n  }\n\n  /**\n   * ESC n\n   * ESC o\n   * ESC |\n   * ESC }\n   * ESC ~\n   *   DEC mnemonic: LS (https://vt100.net/docs/vt510-rm/LS.html)\n   *   When you use a locking shift, the character set remains in GL or GR until\n   *   you use another locking shift. (partly supported)\n   */\n  public setgLevel(level: number): boolean {\n    this._charsetService.setgLevel(level);\n    return true;\n  }\n\n  /**\n   * ESC # 8\n   *   DEC mnemonic: DECALN (https://vt100.net/docs/vt510-rm/DECALN.html)\n   *   This control function fills the complete screen area with\n   *   a test pattern (E) used for adjusting screen alignment.\n   *\n   * @vt: #Y   ESC   DECALN   \"Screen Alignment Pattern\"  \"ESC # 8\"  \"Fill viewport with a test pattern (E).\"\n   */\n  public screenAlignmentPattern(): boolean {\n    // prepare cell data\n    const cell = new CellData();\n    cell.content = 1 << Content.WIDTH_SHIFT | 'E'.charCodeAt(0);\n    cell.fg = this._curAttrData.fg;\n    cell.bg = this._curAttrData.bg;\n\n\n    this._setCursor(0, 0);\n    for (let yOffset = 0; yOffset < this._bufferService.rows; ++yOffset) {\n      const row = this._activeBuffer.ybase + this._activeBuffer.y + yOffset;\n      const line = this._activeBuffer.lines.get(row);\n      if (line) {\n        line.fill(cell);\n        line.isWrapped = false;\n      }\n    }\n    this._dirtyRowTracker.markAllDirty();\n    this._setCursor(0, 0);\n    return true;\n  }\n\n\n  /**\n   * DCS $ q Pt ST\n   *   DECRQSS (https://vt100.net/docs/vt510-rm/DECRQSS.html)\n   *   Request Status String (DECRQSS), VT420 and up.\n   *   Response: DECRPSS (https://vt100.net/docs/vt510-rm/DECRPSS.html)\n   *\n   * @vt: #P[Limited support, see below.]  DCS   DECRQSS   \"Request Selection or Setting\"  \"DCS $ q Pt ST\"   \"Request several terminal settings.\"\n   * Response is in the form `ESC P 1 $ r Pt ST` for valid requests, where `Pt` contains the\n   * corresponding CSI string, `ESC P 0 ST` for invalid requests.\n   *\n   * Supported requests and responses:\n   *\n   * | Type                             | Request           | Response (`Pt`)                                       |\n   * | -------------------------------- | ----------------- | ----------------------------------------------------- |\n   * | Graphic Rendition (SGR)          | `DCS $ q m ST`    | always reporting `0m` (currently broken)              |\n   * | Top and Bottom Margins (DECSTBM) | `DCS $ q r ST`    | `Ps ; Ps r`                                           |\n   * | Cursor Style (DECSCUSR)          | `DCS $ q SP q ST` | `Ps SP q`                                             |\n   * | Protection Attribute (DECSCA)    | `DCS $ q \" q ST`  | `Ps \" q` (DECSCA 2 is reported as Ps = 0)             |\n   * | Conformance Level (DECSCL)       | `DCS $ q \" p ST`  | always reporting `61 ; 1 \" p` (DECSCL is unsupported) |\n   *\n   *\n   * TODO:\n   * - fix SGR report\n   * - either check which conformance is better suited or remove the report completely\n   *   --> we are currently a mixture of all up to VT400 but dont follow anyone strictly\n   */\n  public requestStatusString(data: string, params: IParams): boolean {\n    const f = (s: string): boolean => {\n      this._coreService.triggerDataEvent(`${C0.ESC}${s}${C0.ESC}\\\\`);\n      return true;\n    };\n\n    // access helpers\n    const b = this._bufferService.buffer;\n    const opts = this._optionsService.rawOptions;\n    const STYLES: { [key: string]: number } = { 'block': 2, 'underline': 4, 'bar': 6 };\n\n    if (data === '\"q') return f(`P1$r${this._curAttrData.isProtected() ? 1 : 0}\"q`);\n    if (data === '\"p') return f(`P1$r61;1\"p`);\n    if (data === 'r') return f(`P1$r${b.scrollTop + 1};${b.scrollBottom + 1}r`);\n    // FIXME: report real SGR settings instead of 0m\n    if (data === 'm') return f(`P1$r0m`);\n    if (data === ' q') return f(`P1$r${STYLES[opts.cursorStyle] - (opts.cursorBlink ? 1 : 0)} q`);\n    return f(`P0$r`);\n  }\n\n  public markRangeDirty(y1: number, y2: number): void {\n    this._dirtyRowTracker.markRangeDirty(y1, y2);\n  }\n}\n\nexport interface IDirtyRowTracker {\n  readonly start: number;\n  readonly end: number;\n\n  clearRange(): void;\n  markDirty(y: number): void;\n  markRangeDirty(y1: number, y2: number): void;\n  markAllDirty(): void;\n}\n\nclass DirtyRowTracker implements IDirtyRowTracker {\n  public start!: number;\n  public end!: number;\n\n  constructor(\n    @IBufferService private readonly _bufferService: IBufferService\n  ) {\n    this.clearRange();\n  }\n\n  public clearRange(): void {\n    this.start = this._bufferService.buffer.y;\n    this.end = this._bufferService.buffer.y;\n  }\n\n  public markDirty(y: number): void {\n    if (y < this.start) {\n      this.start = y;\n    } else if (y > this.end) {\n      this.end = y;\n    }\n  }\n\n  public markRangeDirty(y1: number, y2: number): void {\n    if (y1 > y2) {\n      $temp = y1;\n      y1 = y2;\n      y2 = $temp;\n    }\n    if (y1 < this.start) {\n      this.start = y1;\n    }\n    if (y2 > this.end) {\n      this.end = y2;\n    }\n  }\n\n  public markAllDirty(): void {\n    this.markRangeDirty(0, this._bufferService.rows - 1);\n  }\n}\n\nexport function isValidColorIndex(value: number): value is ColorIndex {\n  return 0 <= value && value < 256;\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n  userAgent: string;\n  language: string;\n  platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any)) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\nexport function getSafariVersion(): number {\n  if (!isSafari) {\n    return 0;\n  }\n  const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n  if (majorVersion === null || majorVersion.length < 2) {\n    return 0;\n  }\n  return parseInt(majorVersion[1]);\n}\n\n// Find the users platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isIpad = platform === 'iPad';\nexport const isIphone = platform === 'iPhone';\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { isNode } from 'common/Platform';\n\ninterface ITaskQueue {\n  /**\n   * Adds a task to the queue which will run in a future idle callback.\n   * To avoid perceivable stalls on the mainthread, tasks with heavy workload\n   * should split their work into smaller pieces and return `true` to get\n   * called again until the work is done (on falsy return value).\n   */\n  enqueue(task: () => boolean | void): void;\n\n  /**\n   * Flushes the queue, running all remaining tasks synchronously.\n   */\n  flush(): void;\n\n  /**\n   * Clears any remaining tasks from the queue, these will not be run.\n   */\n  clear(): void;\n}\n\ninterface ITaskDeadline {\n  timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n  private _tasks: (() => boolean | void)[] = [];\n  private _idleCallback?: number;\n  private _i = 0;\n\n  protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n  protected abstract _cancelCallback(identifier: number): void;\n\n  public enqueue(task: () => boolean | void): void {\n    this._tasks.push(task);\n    this._start();\n  }\n\n  public flush(): void {\n    while (this._i < this._tasks.length) {\n      if (!this._tasks[this._i]()) {\n        this._i++;\n      }\n    }\n    this.clear();\n  }\n\n  public clear(): void {\n    if (this._idleCallback) {\n      this._cancelCallback(this._idleCallback);\n      this._idleCallback = undefined;\n    }\n    this._i = 0;\n    this._tasks.length = 0;\n  }\n\n  private _start(): void {\n    if (!this._idleCallback) {\n      this._idleCallback = this._requestCallback(this._process.bind(this));\n    }\n  }\n\n  private _process(deadline: ITaskDeadline): void {\n    this._idleCallback = undefined;\n    let taskDuration = 0;\n    let longestTask = 0;\n    let lastDeadlineRemaining = deadline.timeRemaining();\n    let deadlineRemaining = 0;\n    while (this._i < this._tasks.length) {\n      taskDuration = performance.now();\n      if (!this._tasks[this._i]()) {\n        this._i++;\n      }\n      // other than performance.now, performance.now might not be stable (changes on wall clock\n      // changes), this is not an issue here as a clock change during a short running task is very\n      // unlikely in case it still happened and leads to negative duration, simply assume 1 msec\n      taskDuration = Math.max(1, performance.now() - taskDuration);\n      longestTask = Math.max(taskDuration, longestTask);\n      // Guess the following task will take a similar time to the longest task in this batch, allow\n      // additional room to try avoid exceeding the deadline\n      deadlineRemaining = deadline.timeRemaining();\n      if (longestTask * 1.5 > deadlineRemaining) {\n        // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n        // task should be split into sub-tasks to ensure the UI remains responsive.\n        if (lastDeadlineRemaining - taskDuration < -20) {\n          console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n        }\n        this._start();\n        return;\n      }\n      lastDeadlineRemaining = deadlineRemaining;\n    }\n    this.clear();\n  }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n  protected _requestCallback(callback: CallbackWithDeadline): number {\n    return setTimeout(() => callback(this._createDeadline(16)));\n  }\n\n  protected _cancelCallback(identifier: number): void {\n    clearTimeout(identifier);\n  }\n\n  private _createDeadline(duration: number): ITaskDeadline {\n    const end = performance.now() + duration;\n    return {\n      timeRemaining: () => Math.max(0, end - performance.now())\n    };\n  }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n  protected _requestCallback(callback: IdleRequestCallback): number {\n    return requestIdleCallback(callback);\n  }\n\n  protected _cancelCallback(identifier: number): void {\n    cancelIdleCallback(identifier);\n  }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = (!isNode && 'requestIdleCallback' in window) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n  private _queue: ITaskQueue;\n\n  constructor() {\n    this._queue = new IdleTaskQueue();\n  }\n\n  public set(task: () => boolean | void): void {\n    this._queue.clear();\n    this._queue.enqueue(task);\n  }\n\n  public flush(): void {\n    this._queue.flush();\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CHAR_DATA_CODE_INDEX, NULL_CELL_CODE, WHITESPACE_CELL_CODE } from 'common/buffer/Constants';\nimport { IBufferService } from 'common/services/Services';\n\nexport function updateWindowsModeWrappedState(bufferService: IBufferService): void {\n  // Winpty does not support wraparound mode which means that lines will never\n  // be marked as wrapped. This causes issues for things like copying a line\n  // retaining the wrapped new line characters or if consumers are listening\n  // in on the data stream.\n  //\n  // The workaround for this is to listen to every incoming line feed and mark\n  // the line as wrapped if the last character in the previous line is not a\n  // space. This is certainly not without its problems, but generally on\n  // Windows when text reaches the end of the terminal it's likely going to be\n  // wrapped.\n  const line = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y - 1);\n  const lastChar = line?.get(bufferService.cols - 1);\n\n  const nextLine = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y);\n  if (nextLine && lastChar) {\n    nextLine.isWrapped = (lastChar[CHAR_DATA_CODE_INDEX] !== NULL_CELL_CODE && lastChar[CHAR_DATA_CODE_INDEX] !== WHITESPACE_CELL_CODE);\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IAttributeData, IColorRGB, IExtendedAttrs } from 'common/Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from 'common/buffer/Constants';\n\nexport class AttributeData implements IAttributeData {\n  public static toColorRGB(value: number): IColorRGB {\n    return [\n      value >>> Attributes.RED_SHIFT & 255,\n      value >>> Attributes.GREEN_SHIFT & 255,\n      value & 255\n    ];\n  }\n\n  public static fromColorRGB(value: IColorRGB): number {\n    return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n  }\n\n  public clone(): IAttributeData {\n    const newObj = new AttributeData();\n    newObj.fg = this.fg;\n    newObj.bg = this.bg;\n    newObj.extended = this.extended.clone();\n    return newObj;\n  }\n\n  // data\n  public fg = 0;\n  public bg = 0;\n  public extended: IExtendedAttrs = new ExtendedAttrs();\n\n  // flags\n  public isInverse(): number       { return this.fg & FgFlags.INVERSE; }\n  public isBold(): number          { return this.fg & FgFlags.BOLD; }\n  public isUnderline(): number     {\n    if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n      return 1;\n    }\n    return this.fg & FgFlags.UNDERLINE;\n  }\n  public isBlink(): number         { return this.fg & FgFlags.BLINK; }\n  public isInvisible(): number     { return this.fg & FgFlags.INVISIBLE; }\n  public isItalic(): number        { return this.bg & BgFlags.ITALIC; }\n  public isDim(): number           { return this.bg & BgFlags.DIM; }\n  public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n  public isProtected(): number     { return this.bg & BgFlags.PROTECTED; }\n  public isOverline(): number      { return this.bg & BgFlags.OVERLINE; }\n\n  // color modes\n  public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n  public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n  public isFgRGB(): boolean       { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n  public isBgRGB(): boolean       { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n  public isFgPalette(): boolean   { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n  public isBgPalette(): boolean   { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n  public isFgDefault(): boolean   { return (this.fg & Attributes.CM_MASK) === 0; }\n  public isBgDefault(): boolean   { return (this.bg & Attributes.CM_MASK) === 0; }\n  public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n  // colors\n  public getFgColor(): number {\n    switch (this.fg & Attributes.CM_MASK) {\n      case Attributes.CM_P16:\n      case Attributes.CM_P256:  return this.fg & Attributes.PCOLOR_MASK;\n      case Attributes.CM_RGB:   return this.fg & Attributes.RGB_MASK;\n      default:                  return -1;  // CM_DEFAULT defaults to -1\n    }\n  }\n  public getBgColor(): number {\n    switch (this.bg & Attributes.CM_MASK) {\n      case Attributes.CM_P16:\n      case Attributes.CM_P256:  return this.bg & Attributes.PCOLOR_MASK;\n      case Attributes.CM_RGB:   return this.bg & Attributes.RGB_MASK;\n      default:                  return -1;  // CM_DEFAULT defaults to -1\n    }\n  }\n\n  // extended attrs\n  public hasExtendedAttrs(): number {\n    return this.bg & BgFlags.HAS_EXTENDED;\n  }\n  public updateExtended(): void {\n    if (this.extended.isEmpty()) {\n      this.bg &= ~BgFlags.HAS_EXTENDED;\n    } else {\n      this.bg |= BgFlags.HAS_EXTENDED;\n    }\n  }\n  public getUnderlineColor(): number {\n    if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n      switch (this.extended.underlineColor & Attributes.CM_MASK) {\n        case Attributes.CM_P16:\n        case Attributes.CM_P256:  return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n        case Attributes.CM_RGB:   return this.extended.underlineColor & Attributes.RGB_MASK;\n        default:                  return this.getFgColor();\n      }\n    }\n    return this.getFgColor();\n  }\n  public getUnderlineColorMode(): number {\n    return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n      ? this.extended.underlineColor & Attributes.CM_MASK\n      : this.getFgColorMode();\n  }\n  public isUnderlineColorRGB(): boolean {\n    return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n      ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n      : this.isFgRGB();\n  }\n  public isUnderlineColorPalette(): boolean {\n    return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n      ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n          || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n      : this.isFgPalette();\n  }\n  public isUnderlineColorDefault(): boolean {\n    return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n      ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n      : this.isFgDefault();\n  }\n  public getUnderlineStyle(): UnderlineStyle {\n    return this.fg & FgFlags.UNDERLINE\n      ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n      : UnderlineStyle.NONE;\n  }\n  public getUnderlineVariantOffset(): number {\n    return this.extended.underlineVariantOffset;\n  }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n  private _ext: number = 0;\n  public get ext(): number {\n    if (this._urlId) {\n      return (\n        (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n        (this.underlineStyle << 26)\n      );\n    }\n    return this._ext;\n  }\n  public set ext(value: number) { this._ext = value; }\n\n  public get underlineStyle(): UnderlineStyle {\n    // Always return the URL style if it has one\n    if (this._urlId) {\n      return UnderlineStyle.DASHED;\n    }\n    return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n  }\n  public set underlineStyle(value: UnderlineStyle) {\n    this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n    this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n  }\n\n  public get underlineColor(): number {\n    return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n  }\n  public set underlineColor(value: number) {\n    this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n    this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n  }\n\n  private _urlId: number = 0;\n  public get urlId(): number {\n    return this._urlId;\n  }\n  public set urlId(value: number) {\n    this._urlId = value;\n  }\n\n  public get underlineVariantOffset(): number {\n    const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n    if (val < 0) {\n      return val ^ 0xFFFFFFF8;\n    }\n    return val;\n  }\n  public set underlineVariantOffset(value: number) {\n    this._ext &= ~ExtFlags.VARIANT_OFFSET;\n    this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n  }\n\n  constructor(\n    ext: number = 0,\n    urlId: number = 0\n  ) {\n    this._ext = ext;\n    this._urlId = urlId;\n  }\n\n  public clone(): IExtendedAttrs {\n    return new ExtendedAttrs(this._ext, this._urlId);\n  }\n\n  /**\n   * Convenient method to indicate whether the object holds no additional information,\n   * that needs to be persistant in the buffer.\n   */\n  public isEmpty(): boolean {\n    return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0;\n  }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CircularList, IInsertEvent } from 'common/CircularList';\nimport { IdleTaskQueue } from 'common/TaskQueue';\nimport { IAttributeData, IBufferLine, ICellData, ICharset } from 'common/Types';\nimport { ExtendedAttrs } from 'common/buffer/AttributeData';\nimport { BufferLine, DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine';\nimport { getWrappedLineTrimmedLength, reflowLargerApplyNewLayout, reflowLargerCreateNewLayout, reflowLargerGetLinesToRemove, reflowSmallerGetNewLineLengths } from 'common/buffer/BufferReflow';\nimport { CellData } from 'common/buffer/CellData';\nimport { NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_CODE, WHITESPACE_CELL_WIDTH } from 'common/buffer/Constants';\nimport { Marker } from 'common/buffer/Marker';\nimport { IBuffer } from 'common/buffer/Types';\nimport { DEFAULT_CHARSET } from 'common/data/Charsets';\nimport { IBufferService, IOptionsService } from 'common/services/Services';\n\nexport const MAX_BUFFER_SIZE = 4294967295; // 2^32 - 1\n\n/**\n * This class represents a terminal buffer (an internal state of the terminal), where the\n * following information is stored (in high-level):\n *   - text content of this particular buffer\n *   - cursor position\n *   - scroll position\n */\nexport class Buffer implements IBuffer {\n  public lines: CircularList<IBufferLine>;\n  public ydisp: number = 0;\n  public ybase: number = 0;\n  public y: number = 0;\n  public x: number = 0;\n  public scrollBottom: number;\n  public scrollTop: number;\n  public tabs: { [column: number]: boolean | undefined } = {};\n  public savedY: number = 0;\n  public savedX: number = 0;\n  public savedCurAttrData = DEFAULT_ATTR_DATA.clone();\n  public savedCharset: ICharset | undefined = DEFAULT_CHARSET;\n  public markers: Marker[] = [];\n  private _nullCell: ICellData = CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n  private _whitespaceCell: ICellData = CellData.fromCharData([0, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE]);\n  private _cols: number;\n  private _rows: number;\n  private _isClearing: boolean = false;\n\n  constructor(\n    private _hasScrollback: boolean,\n    private _optionsService: IOptionsService,\n    private _bufferService: IBufferService\n  ) {\n    this._cols = this._bufferService.cols;\n    this._rows = this._bufferService.rows;\n    this.lines = new CircularList<IBufferLine>(this._getCorrectBufferLength(this._rows));\n    this.scrollTop = 0;\n    this.scrollBottom = this._rows - 1;\n    this.setupTabStops();\n  }\n\n  public getNullCell(attr?: IAttributeData): ICellData {\n    if (attr) {\n      this._nullCell.fg = attr.fg;\n      this._nullCell.bg = attr.bg;\n      this._nullCell.extended = attr.extended;\n    } else {\n      this._nullCell.fg = 0;\n      this._nullCell.bg = 0;\n      this._nullCell.extended = new ExtendedAttrs();\n    }\n    return this._nullCell;\n  }\n\n  public getWhitespaceCell(attr?: IAttributeData): ICellData {\n    if (attr) {\n      this._whitespaceCell.fg = attr.fg;\n      this._whitespaceCell.bg = attr.bg;\n      this._whitespaceCell.extended = attr.extended;\n    } else {\n      this._whitespaceCell.fg = 0;\n      this._whitespaceCell.bg = 0;\n      this._whitespaceCell.extended = new ExtendedAttrs();\n    }\n    return this._whitespaceCell;\n  }\n\n  public getBlankLine(attr: IAttributeData, isWrapped?: boolean): IBufferLine {\n    return new BufferLine(this._bufferService.cols, this.getNullCell(attr), isWrapped);\n  }\n\n  public get hasScrollback(): boolean {\n    return this._hasScrollback && this.lines.maxLength > this._rows;\n  }\n\n  public get isCursorInViewport(): boolean {\n    const absoluteY = this.ybase + this.y;\n    const relativeY = absoluteY - this.ydisp;\n    return (relativeY >= 0 && relativeY < this._rows);\n  }\n\n  /**\n   * Gets the correct buffer length based on the rows provided, the terminal's\n   * scrollback and whether this buffer is flagged to have scrollback or not.\n   * @param rows The terminal rows to use in the calculation.\n   */\n  private _getCorrectBufferLength(rows: number): number {\n    if (!this._hasScrollback) {\n      return rows;\n    }\n\n    const correctBufferLength = rows + this._optionsService.rawOptions.scrollback;\n\n    return correctBufferLength > MAX_BUFFER_SIZE ? MAX_BUFFER_SIZE : correctBufferLength;\n  }\n\n  /**\n   * Fills the buffer's viewport with blank lines.\n   */\n  public fillViewportRows(fillAttr?: IAttributeData): void {\n    if (this.lines.length === 0) {\n      if (fillAttr === undefined) {\n        fillAttr = DEFAULT_ATTR_DATA;\n      }\n      let i = this._rows;\n      while (i--) {\n        this.lines.push(this.getBlankLine(fillAttr));\n      }\n    }\n  }\n\n  /**\n   * Clears the buffer to it's initial state, discarding all previous data.\n   */\n  public clear(): void {\n    this.ydisp = 0;\n    this.ybase = 0;\n    this.y = 0;\n    this.x = 0;\n    this.lines = new CircularList<IBufferLine>(this._getCorrectBufferLength(this._rows));\n    this.scrollTop = 0;\n    this.scrollBottom = this._rows - 1;\n    this.setupTabStops();\n  }\n\n  /**\n   * Resizes the buffer, adjusting its data accordingly.\n   * @param newCols The new number of columns.\n   * @param newRows The new number of rows.\n   */\n  public resize(newCols: number, newRows: number): void {\n    // store reference to null cell with default attrs\n    const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n\n    // count bufferlines with overly big memory to be cleaned afterwards\n    let dirtyMemoryLines = 0;\n\n    // Increase max length if needed before adjustments to allow space to fill\n    // as required.\n    const newMaxLength = this._getCorrectBufferLength(newRows);\n    if (newMaxLength > this.lines.maxLength) {\n      this.lines.maxLength = newMaxLength;\n    }\n\n    // if (this._cols > newCols) {\n    //   console.log('increase!');\n    // }\n\n    // The following adjustments should only happen if the buffer has been\n    // initialized/filled.\n    if (this.lines.length > 0) {\n      // Deal with columns increasing (reducing needs to happen after reflow)\n      if (this._cols < newCols) {\n        for (let i = 0; i < this.lines.length; i++) {\n          // +boolean for fast 0 or 1 conversion\n          dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n        }\n      }\n\n      // Resize rows in both directions as needed\n      let addToY = 0;\n      if (this._rows < newRows) {\n        for (let y = this._rows; y < newRows; y++) {\n          if (this.lines.length < newRows + this.ybase) {\n            if (this._optionsService.rawOptions.windowsMode || this._optionsService.rawOptions.windowsPty.backend !== undefined || this._optionsService.rawOptions.windowsPty.buildNumber !== undefined) {\n              // Just add the new missing rows on Windows as conpty reprints the screen with it's\n              // view of the world. Once a line enters scrollback for conpty it remains there\n              this.lines.push(new BufferLine(newCols, nullCell));\n            } else {\n              if (this.ybase > 0 && this.lines.length <= this.ybase + this.y + addToY + 1) {\n                // There is room above the buffer and there are no empty elements below the line,\n                // scroll up\n                this.ybase--;\n                addToY++;\n                if (this.ydisp > 0) {\n                  // Viewport is at the top of the buffer, must increase downwards\n                  this.ydisp--;\n                }\n              } else {\n                // Add a blank line if there is no buffer left at the top to scroll to, or if there\n                // are blank lines after the cursor\n                this.lines.push(new BufferLine(newCols, nullCell));\n              }\n            }\n          }\n        }\n      } else { // (this._rows >= newRows)\n        for (let y = this._rows; y > newRows; y--) {\n          if (this.lines.length > newRows + this.ybase) {\n            if (this.lines.length > this.ybase + this.y + 1) {\n              // The line is a blank line below the cursor, remove it\n              this.lines.pop();\n            } else {\n              // The line is the cursor, scroll down\n              this.ybase++;\n              this.ydisp++;\n            }\n          }\n        }\n      }\n\n      // Reduce max length if needed after adjustments, this is done after as it\n      // would otherwise cut data from the bottom of the buffer.\n      if (newMaxLength < this.lines.maxLength) {\n        // Trim from the top of the buffer and adjust ybase and ydisp.\n        const amountToTrim = this.lines.length - newMaxLength;\n        if (amountToTrim > 0) {\n          this.lines.trimStart(amountToTrim);\n          this.ybase = Math.max(this.ybase - amountToTrim, 0);\n          this.ydisp = Math.max(this.ydisp - amountToTrim, 0);\n          this.savedY = Math.max(this.savedY - amountToTrim, 0);\n        }\n        this.lines.maxLength = newMaxLength;\n      }\n\n      // Make sure that the cursor stays on screen\n      this.x = Math.min(this.x, newCols - 1);\n      this.y = Math.min(this.y, newRows - 1);\n      if (addToY) {\n        this.y += addToY;\n      }\n      this.savedX = Math.min(this.savedX, newCols - 1);\n\n      this.scrollTop = 0;\n    }\n\n    this.scrollBottom = newRows - 1;\n\n    if (this._isReflowEnabled) {\n      this._reflow(newCols, newRows);\n\n      // Trim the end of the line off if cols shrunk\n      if (this._cols > newCols) {\n        for (let i = 0; i < this.lines.length; i++) {\n          // +boolean for fast 0 or 1 conversion\n          dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n        }\n      }\n    }\n\n    this._cols = newCols;\n    this._rows = newRows;\n\n    this._memoryCleanupQueue.clear();\n    // schedule memory cleanup only, if more than 10% of the lines are affected\n    if (dirtyMemoryLines > 0.1 * this.lines.length) {\n      this._memoryCleanupPosition = 0;\n      this._memoryCleanupQueue.enqueue(() => this._batchedMemoryCleanup());\n    }\n  }\n\n  private _memoryCleanupQueue = new IdleTaskQueue();\n  private _memoryCleanupPosition = 0;\n\n  private _batchedMemoryCleanup(): boolean {\n    let normalRun = true;\n    if (this._memoryCleanupPosition >= this.lines.length) {\n      // cleanup made it once through all lines, thus rescan in loop below to also catch shifted\n      // lines, which should finish rather quick if there are no more cleanups pending\n      this._memoryCleanupPosition = 0;\n      normalRun = false;\n    }\n    let counted = 0;\n    while (this._memoryCleanupPosition < this.lines.length) {\n      counted += this.lines.get(this._memoryCleanupPosition++)!.cleanupMemory();\n      // cleanup max 100 lines per batch\n      if (counted > 100) {\n        return true;\n      }\n    }\n    // normal runs always need another rescan afterwards\n    // if we made it here with normalRun=false, we are in a final run\n    // and can end the cleanup task for sure\n    return normalRun;\n  }\n\n  private get _isReflowEnabled(): boolean {\n    const windowsPty = this._optionsService.rawOptions.windowsPty;\n    if (windowsPty && windowsPty.buildNumber) {\n      return this._hasScrollback && windowsPty.backend === 'conpty' && windowsPty.buildNumber >= 21376;\n    }\n    return this._hasScrollback && !this._optionsService.rawOptions.windowsMode;\n  }\n\n  private _reflow(newCols: number, newRows: number): void {\n    if (this._cols === newCols) {\n      return;\n    }\n\n    // Iterate through rows, ignore the last one as it cannot be wrapped\n    if (newCols > this._cols) {\n      this._reflowLarger(newCols, newRows);\n    } else {\n      this._reflowSmaller(newCols, newRows);\n    }\n  }\n\n  private _reflowLarger(newCols: number, newRows: number): void {\n    const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n    const toRemove: number[] = reflowLargerGetLinesToRemove(this.lines, this._cols, newCols, this.ybase + this.y, this.getNullCell(DEFAULT_ATTR_DATA), reflowCursorLine);\n    if (toRemove.length > 0) {\n      const newLayoutResult = reflowLargerCreateNewLayout(this.lines, toRemove);\n      reflowLargerApplyNewLayout(this.lines, newLayoutResult.layout);\n      this._reflowLargerAdjustViewport(newCols, newRows, newLayoutResult.countRemoved);\n    }\n  }\n\n  private _reflowLargerAdjustViewport(newCols: number, newRows: number, countRemoved: number): void {\n    const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n    // Adjust viewport based on number of items removed\n    let viewportAdjustments = countRemoved;\n    while (viewportAdjustments-- > 0) {\n      if (this.ybase === 0) {\n        if (this.y > 0) {\n          this.y--;\n        }\n        if (this.lines.length < newRows) {\n          // Add an extra row at the bottom of the viewport\n          this.lines.push(new BufferLine(newCols, nullCell));\n        }\n      } else {\n        if (this.ydisp === this.ybase) {\n          this.ydisp--;\n        }\n        this.ybase--;\n      }\n    }\n    this.savedY = Math.max(this.savedY - countRemoved, 0);\n  }\n\n  private _reflowSmaller(newCols: number, newRows: number): void {\n    const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n    const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n    // Gather all BufferLines that need to be inserted into the Buffer here so that they can be\n    // batched up and only committed once\n    const toInsert = [];\n    let countToInsert = 0;\n    // Go backwards as many lines may be trimmed and this will avoid considering them\n    for (let y = this.lines.length - 1; y >= 0; y--) {\n      // Check whether this line is a problem\n      let nextLine = this.lines.get(y) as BufferLine;\n      if (!nextLine || !nextLine.isWrapped && nextLine.getTrimmedLength() <= newCols) {\n        continue;\n      }\n\n      // Gather wrapped lines and adjust y to be the starting line\n      const wrappedLines: BufferLine[] = [nextLine];\n      while (nextLine.isWrapped && y > 0) {\n        nextLine = this.lines.get(--y) as BufferLine;\n        wrappedLines.unshift(nextLine);\n      }\n\n      if (!reflowCursorLine) {\n        // If these lines contain the cursor don't touch them, the program will handle fixing up\n        // wrapped lines with the cursor\n        const absoluteY = this.ybase + this.y;\n        if (absoluteY >= y && absoluteY < y + wrappedLines.length) {\n          continue;\n        }\n      }\n\n      const lastLineLength = wrappedLines[wrappedLines.length - 1].getTrimmedLength();\n      const destLineLengths = reflowSmallerGetNewLineLengths(wrappedLines, this._cols, newCols);\n      const linesToAdd = destLineLengths.length - wrappedLines.length;\n      let trimmedLines: number;\n      if (this.ybase === 0 && this.y !== this.lines.length - 1) {\n        // If the top section of the buffer is not yet filled\n        trimmedLines = Math.max(0, this.y - this.lines.maxLength + linesToAdd);\n      } else {\n        trimmedLines = Math.max(0, this.lines.length - this.lines.maxLength + linesToAdd);\n      }\n\n      // Add the new lines\n      const newLines: BufferLine[] = [];\n      for (let i = 0; i < linesToAdd; i++) {\n        const newLine = this.getBlankLine(DEFAULT_ATTR_DATA, true) as BufferLine;\n        newLines.push(newLine);\n      }\n      if (newLines.length > 0) {\n        toInsert.push({\n          // countToInsert here gets the actual index, taking into account other inserted items.\n          // using this we can iterate through the list forwards\n          start: y + wrappedLines.length + countToInsert,\n          newLines\n        });\n        countToInsert += newLines.length;\n      }\n      wrappedLines.push(...newLines);\n\n      // Copy buffer data to new locations, this needs to happen backwards to do in-place\n      let destLineIndex = destLineLengths.length - 1; // Math.floor(cellsNeeded / newCols);\n      let destCol = destLineLengths[destLineIndex]; // cellsNeeded % newCols;\n      if (destCol === 0) {\n        destLineIndex--;\n        destCol = destLineLengths[destLineIndex];\n      }\n      let srcLineIndex = wrappedLines.length - linesToAdd - 1;\n      let srcCol = lastLineLength;\n      while (srcLineIndex >= 0) {\n        const cellsToCopy = Math.min(srcCol, destCol);\n        if (wrappedLines[destLineIndex] === undefined) {\n          // Sanity check that the line exists, this has been known to fail for an unknown reason\n          // which would stop the reflow from happening if an exception would throw.\n          break;\n        }\n        wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol - cellsToCopy, destCol - cellsToCopy, cellsToCopy, true);\n        destCol -= cellsToCopy;\n        if (destCol === 0) {\n          destLineIndex--;\n          destCol = destLineLengths[destLineIndex];\n        }\n        srcCol -= cellsToCopy;\n        if (srcCol === 0) {\n          srcLineIndex--;\n          const wrappedLinesIndex = Math.max(srcLineIndex, 0);\n          srcCol = getWrappedLineTrimmedLength(wrappedLines, wrappedLinesIndex, this._cols);\n        }\n      }\n\n      // Null out the end of the line ends if a wide character wrapped to the following line\n      for (let i = 0; i < wrappedLines.length; i++) {\n        if (destLineLengths[i] < newCols) {\n          wrappedLines[i].setCell(destLineLengths[i], nullCell);\n        }\n      }\n\n      // Adjust viewport as needed\n      let viewportAdjustments = linesToAdd - trimmedLines;\n      while (viewportAdjustments-- > 0) {\n        if (this.ybase === 0) {\n          if (this.y < newRows - 1) {\n            this.y++;\n            this.lines.pop();\n          } else {\n            this.ybase++;\n            this.ydisp++;\n          }\n        } else {\n          // Ensure ybase does not exceed its maximum value\n          if (this.ybase < Math.min(this.lines.maxLength, this.lines.length + countToInsert) - newRows) {\n            if (this.ybase === this.ydisp) {\n              this.ydisp++;\n            }\n            this.ybase++;\n          }\n        }\n      }\n      this.savedY = Math.min(this.savedY + linesToAdd, this.ybase + newRows - 1);\n    }\n\n    // Rearrange lines in the buffer if there are any insertions, this is done at the end rather\n    // than earlier so that it's a single O(n) pass through the buffer, instead of O(n^2) from many\n    // costly calls to CircularList.splice.\n    if (toInsert.length > 0) {\n      // Record buffer insert events and then play them back backwards so that the indexes are\n      // correct\n      const insertEvents: IInsertEvent[] = [];\n\n      // Record original lines so they don't get overridden when we rearrange the list\n      const originalLines: BufferLine[] = [];\n      for (let i = 0; i < this.lines.length; i++) {\n        originalLines.push(this.lines.get(i) as BufferLine);\n      }\n      const originalLinesLength = this.lines.length;\n\n      let originalLineIndex = originalLinesLength - 1;\n      let nextToInsertIndex = 0;\n      let nextToInsert = toInsert[nextToInsertIndex];\n      this.lines.length = Math.min(this.lines.maxLength, this.lines.length + countToInsert);\n      let countInsertedSoFar = 0;\n      for (let i = Math.min(this.lines.maxLength - 1, originalLinesLength + countToInsert - 1); i >= 0; i--) {\n        if (nextToInsert && nextToInsert.start > originalLineIndex + countInsertedSoFar) {\n          // Insert extra lines here, adjusting i as needed\n          for (let nextI = nextToInsert.newLines.length - 1; nextI >= 0; nextI--) {\n            this.lines.set(i--, nextToInsert.newLines[nextI]);\n          }\n          i++;\n\n          // Create insert events for later\n          insertEvents.push({\n            index: originalLineIndex + 1,\n            amount: nextToInsert.newLines.length\n          });\n\n          countInsertedSoFar += nextToInsert.newLines.length;\n          nextToInsert = toInsert[++nextToInsertIndex];\n        } else {\n          this.lines.set(i, originalLines[originalLineIndex--]);\n        }\n      }\n\n      // Update markers\n      let insertCountEmitted = 0;\n      for (let i = insertEvents.length - 1; i >= 0; i--) {\n        insertEvents[i].index += insertCountEmitted;\n        this.lines.onInsertEmitter.fire(insertEvents[i]);\n        insertCountEmitted += insertEvents[i].amount;\n      }\n      const amountToTrim = Math.max(0, originalLinesLength + countToInsert - this.lines.maxLength);\n      if (amountToTrim > 0) {\n        this.lines.onTrimEmitter.fire(amountToTrim);\n      }\n    }\n  }\n\n  /**\n   * Translates a buffer line to a string, with optional start and end columns.\n   * Wide characters will count as two columns in the resulting string. This\n   * function is useful for getting the actual text underneath the raw selection\n   * position.\n   * @param lineIndex The absolute index of the line being translated.\n   * @param trimRight Whether to trim whitespace to the right.\n   * @param startCol The column to start at.\n   * @param endCol The column to end at.\n   */\n  public translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol: number = 0, endCol?: number): string {\n    const line = this.lines.get(lineIndex);\n    if (!line) {\n      return '';\n    }\n    return line.translateToString(trimRight, startCol, endCol);\n  }\n\n  public getWrappedRangeForLine(y: number): { first: number, last: number } {\n    let first = y;\n    let last = y;\n    // Scan upwards for wrapped lines\n    while (first > 0 && this.lines.get(first)!.isWrapped) {\n      first--;\n    }\n    // Scan downwards for wrapped lines\n    while (last + 1 < this.lines.length && this.lines.get(last + 1)!.isWrapped) {\n      last++;\n    }\n    return { first, last };\n  }\n\n  /**\n   * Setup the tab stops.\n   * @param i The index to start setting up tab stops from.\n   */\n  public setupTabStops(i?: number): void {\n    if (i !== null && i !== undefined) {\n      if (!this.tabs[i]) {\n        i = this.prevStop(i);\n      }\n    } else {\n      this.tabs = {};\n      i = 0;\n    }\n\n    for (; i < this._cols; i += this._optionsService.rawOptions.tabStopWidth) {\n      this.tabs[i] = true;\n    }\n  }\n\n  /**\n   * Move the cursor to the previous tab stop from the given position (default is current).\n   * @param x The position to move the cursor to the previous tab stop.\n   */\n  public prevStop(x?: number): number {\n    if (x === null || x === undefined) {\n      x = this.x;\n    }\n    while (!this.tabs[--x] && x > 0);\n    return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n  }\n\n  /**\n   * Move the cursor one tab stop forward from the given position (default is current).\n   * @param x The position to move the cursor one tab stop forward.\n   */\n  public nextStop(x?: number): number {\n    if (x === null || x === undefined) {\n      x = this.x;\n    }\n    while (!this.tabs[++x] && x < this._cols);\n    return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n  }\n\n  /**\n   * Clears markers on single line.\n   * @param y The line to clear.\n   */\n  public clearMarkers(y: number): void {\n    this._isClearing = true;\n    for (let i = 0; i < this.markers.length; i++) {\n      if (this.markers[i].line === y) {\n        this.markers[i].dispose();\n        this.markers.splice(i--, 1);\n      }\n    }\n    this._isClearing = false;\n  }\n\n  /**\n   * Clears markers on all lines\n   */\n  public clearAllMarkers(): void {\n    this._isClearing = true;\n    for (let i = 0; i < this.markers.length; i++) {\n      this.markers[i].dispose();\n    }\n    this.markers.length = 0;\n    this._isClearing = false;\n  }\n\n  public addMarker(y: number): Marker {\n    const marker = new Marker(y);\n    this.markers.push(marker);\n    marker.register(this.lines.onTrim(amount => {\n      marker.line -= amount;\n      // The marker should be disposed when the line is trimmed from the buffer\n      if (marker.line < 0) {\n        marker.dispose();\n      }\n    }));\n    marker.register(this.lines.onInsert(event => {\n      if (marker.line >= event.index) {\n        marker.line += event.amount;\n      }\n    }));\n    marker.register(this.lines.onDelete(event => {\n      // Delete the marker if it's within the range\n      if (marker.line >= event.index && marker.line < event.index + event.amount) {\n        marker.dispose();\n      }\n\n      // Shift the marker if it's after the deleted range\n      if (marker.line > event.index) {\n        marker.line -= event.amount;\n      }\n    }));\n    marker.register(marker.onDispose(() => this._removeMarker(marker)));\n    return marker;\n  }\n\n  private _removeMarker(marker: Marker): void {\n    if (!this._isClearing) {\n      this.markers.splice(this.markers.indexOf(marker), 1);\n    }\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IAttributeData, IBufferLine, ICellData, IExtendedAttrs } from 'common/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { CellData } from 'common/buffer/CellData';\nimport { Attributes, BgFlags, CHAR_DATA_ATTR_INDEX, CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, Content, NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR } from 'common/buffer/Constants';\nimport { stringFromCodePoint } from 'common/input/TextDecoder';\n\n/**\n * buffer memory layout:\n *\n *   |             uint32_t             |        uint32_t         |        uint32_t         |\n *   |             `content`            |          `FG`           |          `BG`           |\n *   | wcwidth(2) comb(1) codepoint(21) | flags(8) R(8) G(8) B(8) | flags(8) R(8) G(8) B(8) |\n */\n\n\n/** typed array slots taken by one cell */\nconst CELL_SIZE = 3;\n\n/**\n * Cell member indices.\n *\n * Direct access:\n *    `content = data[column * CELL_SIZE + Cell.CONTENT];`\n *    `fg = data[column * CELL_SIZE + Cell.FG];`\n *    `bg = data[column * CELL_SIZE + Cell.BG];`\n */\nconst enum Cell {\n  CONTENT = 0,\n  FG = 1, // currently simply holds all known attrs\n  BG = 2  // currently unused\n}\n\nexport const DEFAULT_ATTR_DATA = Object.freeze(new AttributeData());\n\n// Work variables to avoid garbage collection\nlet $startIndex = 0;\n\n/** Factor when to cleanup underlying array buffer after shrinking. */\nconst CLEANUP_THRESHOLD = 2;\n\n/**\n * Typed array based bufferline implementation.\n *\n * There are 2 ways to insert data into the cell buffer:\n * - `setCellFromCodepoint` + `addCodepointToCell`\n *   Use these for data that is already UTF32.\n *   Used during normal input in `InputHandler` for faster buffer access.\n * - `setCell`\n *   This method takes a CellData object and stores the data in the buffer.\n *   Use `CellData.fromCharData` to create the CellData object (e.g. from JS string).\n *\n * To retrieve data from the buffer use either one of the primitive methods\n * (if only one particular value is needed) or `loadCell`. For `loadCell` in a loop\n * memory allocs / GC pressure can be greatly reduced by reusing the CellData object.\n */\nexport class BufferLine implements IBufferLine {\n  protected _data: Uint32Array;\n  protected _combined: {[index: number]: string} = {};\n  protected _extendedAttrs: {[index: number]: IExtendedAttrs | undefined} = {};\n  public length: number;\n\n  constructor(cols: number, fillCellData?: ICellData, public isWrapped: boolean = false) {\n    this._data = new Uint32Array(cols * CELL_SIZE);\n    const cell = fillCellData || CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n    for (let i = 0; i < cols; ++i) {\n      this.setCell(i, cell);\n    }\n    this.length = cols;\n  }\n\n  /**\n   * Get cell data CharData.\n   * @deprecated\n   */\n  public get(index: number): CharData {\n    const content = this._data[index * CELL_SIZE + Cell.CONTENT];\n    const cp = content & Content.CODEPOINT_MASK;\n    return [\n      this._data[index * CELL_SIZE + Cell.FG],\n      (content & Content.IS_COMBINED_MASK)\n        ? this._combined[index]\n        : (cp) ? stringFromCodePoint(cp) : '',\n      content >> Content.WIDTH_SHIFT,\n      (content & Content.IS_COMBINED_MASK)\n        ? this._combined[index].charCodeAt(this._combined[index].length - 1)\n        : cp\n    ];\n  }\n\n  /**\n   * Set cell data from CharData.\n   * @deprecated\n   */\n  public set(index: number, value: CharData): void {\n    this._data[index * CELL_SIZE + Cell.FG] = value[CHAR_DATA_ATTR_INDEX];\n    if (value[CHAR_DATA_CHAR_INDEX].length > 1) {\n      this._combined[index] = value[1];\n      this._data[index * CELL_SIZE + Cell.CONTENT] = index | Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n    } else {\n      this._data[index * CELL_SIZE + Cell.CONTENT] = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n    }\n  }\n\n  /**\n   * primitive getters\n   * use these when only one value is needed, otherwise use `loadCell`\n   */\n  public getWidth(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.CONTENT] >> Content.WIDTH_SHIFT;\n  }\n\n  /** Test whether content has width. */\n  public hasWidth(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.CONTENT] & Content.WIDTH_MASK;\n  }\n\n  /** Get FG cell component. */\n  public getFg(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.FG];\n  }\n\n  /** Get BG cell component. */\n  public getBg(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.BG];\n  }\n\n  /**\n   * Test whether contains any chars.\n   * Basically an empty has no content, but other cells might differ in FG/BG\n   * from real empty cells.\n   */\n  public hasContent(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.CONTENT] & Content.HAS_CONTENT_MASK;\n  }\n\n  /**\n   * Get codepoint of the cell.\n   * To be in line with `code` in CharData this either returns\n   * a single UTF32 codepoint or the last codepoint of a combined string.\n   */\n  public getCodePoint(index: number): number {\n    const content = this._data[index * CELL_SIZE + Cell.CONTENT];\n    if (content & Content.IS_COMBINED_MASK) {\n      return this._combined[index].charCodeAt(this._combined[index].length - 1);\n    }\n    return content & Content.CODEPOINT_MASK;\n  }\n\n  /** Test whether the cell contains a combined string. */\n  public isCombined(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.CONTENT] & Content.IS_COMBINED_MASK;\n  }\n\n  /** Returns the string content of the cell. */\n  public getString(index: number): string {\n    const content = this._data[index * CELL_SIZE + Cell.CONTENT];\n    if (content & Content.IS_COMBINED_MASK) {\n      return this._combined[index];\n    }\n    if (content & Content.CODEPOINT_MASK) {\n      return stringFromCodePoint(content & Content.CODEPOINT_MASK);\n    }\n    // return empty string for empty cells\n    return '';\n  }\n\n  /** Get state of protected flag. */\n  public isProtected(index: number): number {\n    return this._data[index * CELL_SIZE + Cell.BG] & BgFlags.PROTECTED;\n  }\n\n  /**\n   * Load data at `index` into `cell`. This is used to access cells in a way that's more friendly\n   * to GC as it significantly reduced the amount of new objects/references needed.\n   */\n  public loadCell(index: number, cell: ICellData): ICellData {\n    $startIndex = index * CELL_SIZE;\n    cell.content = this._data[$startIndex + Cell.CONTENT];\n    cell.fg = this._data[$startIndex + Cell.FG];\n    cell.bg = this._data[$startIndex + Cell.BG];\n    if (cell.content & Content.IS_COMBINED_MASK) {\n      cell.combinedData = this._combined[index];\n    }\n    if (cell.bg & BgFlags.HAS_EXTENDED) {\n      cell.extended = this._extendedAttrs[index]!;\n    }\n    return cell;\n  }\n\n  /**\n   * Set data at `index` to `cell`.\n   */\n  public setCell(index: number, cell: ICellData): void {\n    if (cell.content & Content.IS_COMBINED_MASK) {\n      this._combined[index] = cell.combinedData;\n    }\n    if (cell.bg & BgFlags.HAS_EXTENDED) {\n      this._extendedAttrs[index] = cell.extended;\n    }\n    this._data[index * CELL_SIZE + Cell.CONTENT] = cell.content;\n    this._data[index * CELL_SIZE + Cell.FG] = cell.fg;\n    this._data[index * CELL_SIZE + Cell.BG] = cell.bg;\n  }\n\n  /**\n   * Set cell data from input handler.\n   * Since the input handler see the incoming chars as UTF32 codepoints,\n   * it gets an optimized access method.\n   */\n  public setCellFromCodepoint(index: number, codePoint: number, width: number, attrs: IAttributeData): void {\n    if (attrs.bg & BgFlags.HAS_EXTENDED) {\n      this._extendedAttrs[index] = attrs.extended;\n    }\n    this._data[index * CELL_SIZE + Cell.CONTENT] = codePoint | (width << Content.WIDTH_SHIFT);\n    this._data[index * CELL_SIZE + Cell.FG] = attrs.fg;\n    this._data[index * CELL_SIZE + Cell.BG] = attrs.bg;\n  }\n\n  /**\n   * Add a codepoint to a cell from input handler.\n   * During input stage combining chars with a width of 0 follow and stack\n   * onto a leading char. Since we already set the attrs\n   * by the previous `setDataFromCodePoint` call, we can omit it here.\n   */\n  public addCodepointToCell(index: number, codePoint: number, width: number): void {\n    let content = this._data[index * CELL_SIZE + Cell.CONTENT];\n    if (content & Content.IS_COMBINED_MASK) {\n      // we already have a combined string, simply add\n      this._combined[index] += stringFromCodePoint(codePoint);\n    } else {\n      if (content & Content.CODEPOINT_MASK) {\n        // normal case for combining chars:\n        //  - move current leading char + new one into combined string\n        //  - set combined flag\n        this._combined[index] = stringFromCodePoint(content & Content.CODEPOINT_MASK) + stringFromCodePoint(codePoint);\n        content &= ~Content.CODEPOINT_MASK; // set codepoint in buffer to 0\n        content |= Content.IS_COMBINED_MASK;\n      } else {\n        // should not happen - we actually have no data in the cell yet\n        // simply set the data in the cell buffer with a width of 1\n        content = codePoint | (1 << Content.WIDTH_SHIFT);\n      }\n    }\n    if (width) {\n      content &= ~Content.WIDTH_MASK;\n      content |= width << Content.WIDTH_SHIFT;\n    }\n    this._data[index * CELL_SIZE + Cell.CONTENT] = content;\n  }\n\n  public insertCells(pos: number, n: number, fillCellData: ICellData): void {\n    pos %= this.length;\n\n    // handle fullwidth at pos: reset cell one to the left if pos is second cell of a wide char\n    if (pos && this.getWidth(pos - 1) === 2) {\n      this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n    }\n\n    if (n < this.length - pos) {\n      const cell = new CellData();\n      for (let i = this.length - pos - n - 1; i >= 0; --i) {\n        this.setCell(pos + n + i, this.loadCell(pos + i, cell));\n      }\n      for (let i = 0; i < n; ++i) {\n        this.setCell(pos + i, fillCellData);\n      }\n    } else {\n      for (let i = pos; i < this.length; ++i) {\n        this.setCell(i, fillCellData);\n      }\n    }\n\n    // handle fullwidth at line end: reset last cell if it is first cell of a wide char\n    if (this.getWidth(this.length - 1) === 2) {\n      this.setCellFromCodepoint(this.length - 1, 0, 1, fillCellData);\n    }\n  }\n\n  public deleteCells(pos: number, n: number, fillCellData: ICellData): void {\n    pos %= this.length;\n    if (n < this.length - pos) {\n      const cell = new CellData();\n      for (let i = 0; i < this.length - pos - n; ++i) {\n        this.setCell(pos + i, this.loadCell(pos + n + i, cell));\n      }\n      for (let i = this.length - n; i < this.length; ++i) {\n        this.setCell(i, fillCellData);\n      }\n    } else {\n      for (let i = pos; i < this.length; ++i) {\n        this.setCell(i, fillCellData);\n      }\n    }\n\n    // handle fullwidth at pos:\n    // - reset pos-1 if wide char\n    // - reset pos if width==0 (previous second cell of a wide char)\n    if (pos && this.getWidth(pos - 1) === 2) {\n      this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n    }\n    if (this.getWidth(pos) === 0 && !this.hasContent(pos)) {\n      this.setCellFromCodepoint(pos, 0, 1, fillCellData);\n    }\n  }\n\n  public replaceCells(start: number, end: number, fillCellData: ICellData, respectProtect: boolean = false): void {\n    // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n    if (respectProtect) {\n      if (start && this.getWidth(start - 1) === 2 && !this.isProtected(start - 1)) {\n        this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n      }\n      if (end < this.length && this.getWidth(end - 1) === 2 && !this.isProtected(end)) {\n        this.setCellFromCodepoint(end, 0, 1, fillCellData);\n      }\n      while (start < end  && start < this.length) {\n        if (!this.isProtected(start)) {\n          this.setCell(start, fillCellData);\n        }\n        start++;\n      }\n      return;\n    }\n\n    // handle fullwidth at start: reset cell one to the left if start is second cell of a wide char\n    if (start && this.getWidth(start - 1) === 2) {\n      this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n    }\n    // handle fullwidth at last cell + 1: reset to empty cell if it is second part of a wide char\n    if (end < this.length && this.getWidth(end - 1) === 2) {\n      this.setCellFromCodepoint(end, 0, 1, fillCellData);\n    }\n\n    while (start < end  && start < this.length) {\n      this.setCell(start++, fillCellData);\n    }\n  }\n\n  /**\n   * Resize BufferLine to `cols` filling excess cells with `fillCellData`.\n   * The underlying array buffer will not change if there is still enough space\n   * to hold the new buffer line data.\n   * Returns a boolean indicating, whether a `cleanupMemory` call would free\n   * excess memory (true after shrinking > CLEANUP_THRESHOLD).\n   */\n  public resize(cols: number, fillCellData: ICellData): boolean {\n    if (cols === this.length) {\n      return this._data.length * 4 * CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n    }\n    const uint32Cells = cols * CELL_SIZE;\n    if (cols > this.length) {\n      if (this._data.buffer.byteLength >= uint32Cells * 4) {\n        // optimization: avoid alloc and data copy if buffer has enough room\n        this._data = new Uint32Array(this._data.buffer, 0, uint32Cells);\n      } else {\n        // slow path: new alloc and full data copy\n        const data = new Uint32Array(uint32Cells);\n        data.set(this._data);\n        this._data = data;\n      }\n      for (let i = this.length; i < cols; ++i) {\n        this.setCell(i, fillCellData);\n      }\n    } else {\n      // optimization: just shrink the view on existing buffer\n      this._data = this._data.subarray(0, uint32Cells);\n      // Remove any cut off combined data\n      const keys = Object.keys(this._combined);\n      for (let i = 0; i < keys.length; i++) {\n        const key = parseInt(keys[i], 10);\n        if (key >= cols) {\n          delete this._combined[key];\n        }\n      }\n      // remove any cut off extended attributes\n      const extKeys = Object.keys(this._extendedAttrs);\n      for (let i = 0; i < extKeys.length; i++) {\n        const key = parseInt(extKeys[i], 10);\n        if (key >= cols) {\n          delete this._extendedAttrs[key];\n        }\n      }\n    }\n    this.length = cols;\n    return uint32Cells * 4 * CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n  }\n\n  /**\n   * Cleanup underlying array buffer.\n   * A cleanup will be triggered if the array buffer exceeds the actual used\n   * memory by a factor of CLEANUP_THRESHOLD.\n   * Returns 0 or 1 indicating whether a cleanup happened.\n   */\n  public cleanupMemory(): number {\n    if (this._data.length * 4 * CLEANUP_THRESHOLD < this._data.buffer.byteLength) {\n      const data = new Uint32Array(this._data.length);\n      data.set(this._data);\n      this._data = data;\n      return 1;\n    }\n    return 0;\n  }\n\n  /** fill a line with fillCharData */\n  public fill(fillCellData: ICellData, respectProtect: boolean = false): void {\n    // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n    if (respectProtect) {\n      for (let i = 0; i < this.length; ++i) {\n        if (!this.isProtected(i)) {\n          this.setCell(i, fillCellData);\n        }\n      }\n      return;\n    }\n    this._combined = {};\n    this._extendedAttrs = {};\n    for (let i = 0; i < this.length; ++i) {\n      this.setCell(i, fillCellData);\n    }\n  }\n\n  /** alter to a full copy of line  */\n  public copyFrom(line: BufferLine): void {\n    if (this.length !== line.length) {\n      this._data = new Uint32Array(line._data);\n    } else {\n      // use high speed copy if lengths are equal\n      this._data.set(line._data);\n    }\n    this.length = line.length;\n    this._combined = {};\n    for (const el in line._combined) {\n      this._combined[el] = line._combined[el];\n    }\n    this._extendedAttrs = {};\n    for (const el in line._extendedAttrs) {\n      this._extendedAttrs[el] = line._extendedAttrs[el];\n    }\n    this.isWrapped = line.isWrapped;\n  }\n\n  /** create a new clone */\n  public clone(): IBufferLine {\n    const newLine = new BufferLine(0);\n    newLine._data = new Uint32Array(this._data);\n    newLine.length = this.length;\n    for (const el in this._combined) {\n      newLine._combined[el] = this._combined[el];\n    }\n    for (const el in this._extendedAttrs) {\n      newLine._extendedAttrs[el] = this._extendedAttrs[el];\n    }\n    newLine.isWrapped = this.isWrapped;\n    return newLine;\n  }\n\n  public getTrimmedLength(): number {\n    for (let i = this.length - 1; i >= 0; --i) {\n      if ((this._data[i * CELL_SIZE + Cell.CONTENT] & Content.HAS_CONTENT_MASK)) {\n        return i + (this._data[i * CELL_SIZE + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n      }\n    }\n    return 0;\n  }\n\n  public getNoBgTrimmedLength(): number {\n    for (let i = this.length - 1; i >= 0; --i) {\n      if ((this._data[i * CELL_SIZE + Cell.CONTENT] & Content.HAS_CONTENT_MASK) || (this._data[i * CELL_SIZE + Cell.BG] & Attributes.CM_MASK)) {\n        return i + (this._data[i * CELL_SIZE + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n      }\n    }\n    return 0;\n  }\n\n  public copyCellsFrom(src: BufferLine, srcCol: number, destCol: number, length: number, applyInReverse: boolean): void {\n    const srcData = src._data;\n    if (applyInReverse) {\n      for (let cell = length - 1; cell >= 0; cell--) {\n        for (let i = 0; i < CELL_SIZE; i++) {\n          this._data[(destCol + cell) * CELL_SIZE + i] = srcData[(srcCol + cell) * CELL_SIZE + i];\n        }\n        if (srcData[(srcCol + cell) * CELL_SIZE + Cell.BG] & BgFlags.HAS_EXTENDED) {\n          this._extendedAttrs[destCol + cell] = src._extendedAttrs[srcCol + cell];\n        }\n      }\n    } else {\n      for (let cell = 0; cell < length; cell++) {\n        for (let i = 0; i < CELL_SIZE; i++) {\n          this._data[(destCol + cell) * CELL_SIZE + i] = srcData[(srcCol + cell) * CELL_SIZE + i];\n        }\n        if (srcData[(srcCol + cell) * CELL_SIZE + Cell.BG] & BgFlags.HAS_EXTENDED) {\n          this._extendedAttrs[destCol + cell] = src._extendedAttrs[srcCol + cell];\n        }\n      }\n    }\n\n    // Move any combined data over as needed, FIXME: repeat for extended attrs\n    const srcCombinedKeys = Object.keys(src._combined);\n    for (let i = 0; i < srcCombinedKeys.length; i++) {\n      const key = parseInt(srcCombinedKeys[i], 10);\n      if (key >= srcCol) {\n        this._combined[key - srcCol + destCol] = src._combined[key];\n      }\n    }\n  }\n\n  /**\n   * Translates the buffer line to a string.\n   *\n   * @param trimRight Whether to trim any empty cells on the right.\n   * @param startCol The column to start the string (0-based inclusive).\n   * @param endCol The column to end the string (0-based exclusive).\n   * @param outColumns if specified, this array will be filled with column numbers such that\n   * `returnedString[i]` is displayed at `outColumns[i]` column. `outColumns[returnedString.length]`\n   * is where the character following `returnedString` will be displayed.\n   *\n   * When a single cell is translated to multiple UTF-16 code units (e.g. surrogate pair) in the\n   * returned string, the corresponding entries in `outColumns` will have the same column number.\n   */\n  public translateToString(trimRight?: boolean, startCol?: number, endCol?: number, outColumns?: number[]): string {\n    startCol = startCol ?? 0;\n    endCol = endCol ?? this.length;\n    if (trimRight) {\n      endCol = Math.min(endCol, this.getTrimmedLength());\n    }\n    if (outColumns) {\n      outColumns.length = 0;\n    }\n    let result = '';\n    while (startCol < endCol) {\n      const content = this._data[startCol * CELL_SIZE + Cell.CONTENT];\n      const cp = content & Content.CODEPOINT_MASK;\n      const chars = (content & Content.IS_COMBINED_MASK) ? this._combined[startCol] : (cp) ? stringFromCodePoint(cp) : WHITESPACE_CELL_CHAR;\n      result += chars;\n      if (outColumns) {\n        for (let i = 0; i < chars.length; ++i) {\n          outColumns.push(startCol);\n        }\n      }\n      startCol += (content >> Content.WIDTH_SHIFT) || 1; // always advance by at least 1\n    }\n    if (outColumns) {\n      outColumns.push(startCol);\n    }\n    return result;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { BufferLine } from 'common/buffer/BufferLine';\nimport { CircularList } from 'common/CircularList';\nimport { IBufferLine, ICellData } from 'common/Types';\n\nexport interface INewLayoutResult {\n  layout: number[];\n  countRemoved: number;\n}\n\n/**\n * Evaluates and returns indexes to be removed after a reflow larger occurs. Lines will be removed\n * when a wrapped line unwraps.\n * @param lines The buffer lines.\n * @param oldCols The columns before resize\n * @param newCols The columns after resize.\n * @param bufferAbsoluteY The absolute y position of the cursor (baseY + cursorY).\n * @param nullCell The cell data to use when filling in empty cells.\n * @param reflowCursorLine Whether to reflow the line containing the cursor.\n */\nexport function reflowLargerGetLinesToRemove(lines: CircularList<IBufferLine>, oldCols: number, newCols: number, bufferAbsoluteY: number, nullCell: ICellData, reflowCursorLine: boolean): number[] {\n  // Gather all BufferLines that need to be removed from the Buffer here so that they can be\n  // batched up and only committed once\n  const toRemove: number[] = [];\n\n  for (let y = 0; y < lines.length - 1; y++) {\n    // Check if this row is wrapped\n    let i = y;\n    let nextLine = lines.get(++i) as BufferLine;\n    if (!nextLine.isWrapped) {\n      continue;\n    }\n\n    // Check how many lines it's wrapped for\n    const wrappedLines: BufferLine[] = [lines.get(y) as BufferLine];\n    while (i < lines.length && nextLine.isWrapped) {\n      wrappedLines.push(nextLine);\n      nextLine = lines.get(++i) as BufferLine;\n    }\n\n    if (!reflowCursorLine) {\n      // If these lines contain the cursor don't touch them, the program will handle fixing up\n      // wrapped lines with the cursor\n      if (bufferAbsoluteY >= y && bufferAbsoluteY < i) {\n        y += wrappedLines.length - 1;\n        continue;\n      }\n    }\n\n    // Copy buffer data to new locations\n    let destLineIndex = 0;\n    let destCol = getWrappedLineTrimmedLength(wrappedLines, destLineIndex, oldCols);\n    let srcLineIndex = 1;\n    let srcCol = 0;\n    while (srcLineIndex < wrappedLines.length) {\n      const srcTrimmedTineLength = getWrappedLineTrimmedLength(wrappedLines, srcLineIndex, oldCols);\n      const srcRemainingCells = srcTrimmedTineLength - srcCol;\n      const destRemainingCells = newCols - destCol;\n      const cellsToCopy = Math.min(srcRemainingCells, destRemainingCells);\n\n      wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol, destCol, cellsToCopy, false);\n\n      destCol += cellsToCopy;\n      if (destCol === newCols) {\n        destLineIndex++;\n        destCol = 0;\n      }\n      srcCol += cellsToCopy;\n      if (srcCol === srcTrimmedTineLength) {\n        srcLineIndex++;\n        srcCol = 0;\n      }\n\n      // Make sure the last cell isn't wide, if it is copy it to the current dest\n      if (destCol === 0 && destLineIndex !== 0) {\n        if (wrappedLines[destLineIndex - 1].getWidth(newCols - 1) === 2) {\n          wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[destLineIndex - 1], newCols - 1, destCol++, 1, false);\n          // Null out the end of the last row\n          wrappedLines[destLineIndex - 1].setCell(newCols - 1, nullCell);\n        }\n      }\n    }\n\n    // Clear out remaining cells or fragments could remain;\n    wrappedLines[destLineIndex].replaceCells(destCol, newCols, nullCell);\n\n    // Work backwards and remove any rows at the end that only contain null cells\n    let countToRemove = 0;\n    for (let i = wrappedLines.length - 1; i > 0; i--) {\n      if (i > destLineIndex || wrappedLines[i].getTrimmedLength() === 0) {\n        countToRemove++;\n      } else {\n        break;\n      }\n    }\n\n    if (countToRemove > 0) {\n      toRemove.push(y + wrappedLines.length - countToRemove); // index\n      toRemove.push(countToRemove);\n    }\n\n    y += wrappedLines.length - 1;\n  }\n  return toRemove;\n}\n\n/**\n * Creates and return the new layout for lines given an array of indexes to be removed.\n * @param lines The buffer lines.\n * @param toRemove The indexes to remove.\n */\nexport function reflowLargerCreateNewLayout(lines: CircularList<IBufferLine>, toRemove: number[]): INewLayoutResult {\n  const layout: number[] = [];\n  // First iterate through the list and get the actual indexes to use for rows\n  let nextToRemoveIndex = 0;\n  let nextToRemoveStart = toRemove[nextToRemoveIndex];\n  let countRemovedSoFar = 0;\n  for (let i = 0; i < lines.length; i++) {\n    if (nextToRemoveStart === i) {\n      const countToRemove = toRemove[++nextToRemoveIndex];\n\n      // Tell markers that there was a deletion\n      lines.onDeleteEmitter.fire({\n        index: i - countRemovedSoFar,\n        amount: countToRemove\n      });\n\n      i += countToRemove - 1;\n      countRemovedSoFar += countToRemove;\n      nextToRemoveStart = toRemove[++nextToRemoveIndex];\n    } else {\n      layout.push(i);\n    }\n  }\n  return {\n    layout,\n    countRemoved: countRemovedSoFar\n  };\n}\n\n/**\n * Applies a new layout to the buffer. This essentially does the same as many splice calls but it's\n * done all at once in a single iteration through the list since splice is very expensive.\n * @param lines The buffer lines.\n * @param newLayout The new layout to apply.\n */\nexport function reflowLargerApplyNewLayout(lines: CircularList<IBufferLine>, newLayout: number[]): void {\n  // Record original lines so they don't get overridden when we rearrange the list\n  const newLayoutLines: BufferLine[] = [];\n  for (let i = 0; i < newLayout.length; i++) {\n    newLayoutLines.push(lines.get(newLayout[i]) as BufferLine);\n  }\n\n  // Rearrange the list\n  for (let i = 0; i < newLayoutLines.length; i++) {\n    lines.set(i, newLayoutLines[i]);\n  }\n  lines.length = newLayout.length;\n}\n\n/**\n * Gets the new line lengths for a given wrapped line. The purpose of this function it to pre-\n * compute the wrapping points since wide characters may need to be wrapped onto the following line.\n * This function will return an array of numbers of where each line wraps to, the resulting array\n * will only contain the values `newCols` (when the line does not end with a wide character) and\n * `newCols - 1` (when the line does end with a wide character), except for the last value which\n * will contain the remaining items to fill the line.\n *\n * Calling this with a `newCols` value of `1` will lock up.\n *\n * @param wrappedLines The wrapped lines to evaluate.\n * @param oldCols The columns before resize.\n * @param newCols The columns after resize.\n */\nexport function reflowSmallerGetNewLineLengths(wrappedLines: BufferLine[], oldCols: number, newCols: number): number[] {\n  const newLineLengths: number[] = [];\n  const cellsNeeded = wrappedLines.map((l, i) => getWrappedLineTrimmedLength(wrappedLines, i, oldCols)).reduce((p, c) => p + c);\n\n  // Use srcCol and srcLine to find the new wrapping point, use that to get the cellsAvailable and\n  // linesNeeded\n  let srcCol = 0;\n  let srcLine = 0;\n  let cellsAvailable = 0;\n  while (cellsAvailable < cellsNeeded) {\n    if (cellsNeeded - cellsAvailable < newCols) {\n      // Add the final line and exit the loop\n      newLineLengths.push(cellsNeeded - cellsAvailable);\n      break;\n    }\n    srcCol += newCols;\n    const oldTrimmedLength = getWrappedLineTrimmedLength(wrappedLines, srcLine, oldCols);\n    if (srcCol > oldTrimmedLength) {\n      srcCol -= oldTrimmedLength;\n      srcLine++;\n    }\n    const endsWithWide = wrappedLines[srcLine].getWidth(srcCol - 1) === 2;\n    if (endsWithWide) {\n      srcCol--;\n    }\n    const lineLength = endsWithWide ? newCols - 1 : newCols;\n    newLineLengths.push(lineLength);\n    cellsAvailable += lineLength;\n  }\n\n  return newLineLengths;\n}\n\nexport function getWrappedLineTrimmedLength(lines: BufferLine[], i: number, cols: number): number {\n  // If this is the last row in the wrapped line, get the actual trimmed length\n  if (i === lines.length - 1) {\n    return lines[i].getTrimmedLength();\n  }\n  // Detect whether the following line starts with a wide character and the end of the current line\n  // is null, if so then we can be pretty sure the null character should be excluded from the line\n  // length]\n  const endsInNull = !(lines[i].hasContent(cols - 1)) && lines[i].getWidth(cols - 1) === 1;\n  const followingLineStartsWithWide = lines[i + 1].getWidth(0) === 2;\n  if (endsInNull && followingLineStartsWithWide) {\n    return cols - 1;\n  }\n  return cols;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { IAttributeData } from 'common/Types';\nimport { Buffer } from 'common/buffer/Buffer';\nimport { IBuffer, IBufferSet } from 'common/buffer/Types';\nimport { IBufferService, IOptionsService } from 'common/services/Services';\nimport { Emitter } from 'vs/base/common/event';\n\n/**\n * The BufferSet represents the set of two buffers used by xterm terminals (normal and alt) and\n * provides also utilities for working with them.\n */\nexport class BufferSet extends Disposable implements IBufferSet {\n  private _normal!: Buffer;\n  private _alt!: Buffer;\n  private _activeBuffer!: Buffer;\n\n  private readonly _onBufferActivate = this._register(new Emitter<{ activeBuffer: IBuffer, inactiveBuffer: IBuffer }>());\n  public readonly onBufferActivate = this._onBufferActivate.event;\n\n  /**\n   * Create a new BufferSet for the given terminal.\n   */\n  constructor(\n    private readonly _optionsService: IOptionsService,\n    private readonly _bufferService: IBufferService\n  ) {\n    super();\n    this.reset();\n    this._register(this._optionsService.onSpecificOptionChange('scrollback', () => this.resize(this._bufferService.cols, this._bufferService.rows)));\n    this._register(this._optionsService.onSpecificOptionChange('tabStopWidth', () => this.setupTabStops()));\n  }\n\n  public reset(): void {\n    this._normal = new Buffer(true, this._optionsService, this._bufferService);\n    this._normal.fillViewportRows();\n\n    // The alt buffer should never have scrollback.\n    // See http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-The-Alternate-Screen-Buffer\n    this._alt = new Buffer(false, this._optionsService, this._bufferService);\n    this._activeBuffer = this._normal;\n    this._onBufferActivate.fire({\n      activeBuffer: this._normal,\n      inactiveBuffer: this._alt\n    });\n\n    this.setupTabStops();\n  }\n\n  /**\n   * Returns the alt Buffer of the BufferSet\n   */\n  public get alt(): Buffer {\n    return this._alt;\n  }\n\n  /**\n   * Returns the currently active Buffer of the BufferSet\n   */\n  public get active(): Buffer {\n    return this._activeBuffer;\n  }\n\n  /**\n   * Returns the normal Buffer of the BufferSet\n   */\n  public get normal(): Buffer {\n    return this._normal;\n  }\n\n  /**\n   * Sets the normal Buffer of the BufferSet as its currently active Buffer\n   */\n  public activateNormalBuffer(): void {\n    if (this._activeBuffer === this._normal) {\n      return;\n    }\n    this._normal.x = this._alt.x;\n    this._normal.y = this._alt.y;\n    // The alt buffer should always be cleared when we switch to the normal\n    // buffer. This frees up memory since the alt buffer should always be new\n    // when activated.\n    this._alt.clearAllMarkers();\n    this._alt.clear();\n    this._activeBuffer = this._normal;\n    this._onBufferActivate.fire({\n      activeBuffer: this._normal,\n      inactiveBuffer: this._alt\n    });\n  }\n\n  /**\n   * Sets the alt Buffer of the BufferSet as its currently active Buffer\n   */\n  public activateAltBuffer(fillAttr?: IAttributeData): void {\n    if (this._activeBuffer === this._alt) {\n      return;\n    }\n    // Since the alt buffer is always cleared when the normal buffer is\n    // activated, we want to fill it when switching to it.\n    this._alt.fillViewportRows(fillAttr);\n    this._alt.x = this._normal.x;\n    this._alt.y = this._normal.y;\n    this._activeBuffer = this._alt;\n    this._onBufferActivate.fire({\n      activeBuffer: this._alt,\n      inactiveBuffer: this._normal\n    });\n  }\n\n  /**\n   * Resizes both normal and alt buffers, adjusting their data accordingly.\n   * @param newCols The new number of columns.\n   * @param newRows The new number of rows.\n   */\n  public resize(newCols: number, newRows: number): void {\n    this._normal.resize(newCols, newRows);\n    this._alt.resize(newCols, newRows);\n    this.setupTabStops(newCols);\n  }\n\n  /**\n   * Setup the tab stops.\n   * @param i The index to start setting up tab stops from.\n   */\n  public setupTabStops(i?: number): void {\n    this._normal.setupTabStops(i);\n    this._alt.setupTabStops(i);\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from 'common/Types';\nimport { stringFromCodePoint } from 'common/input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from 'common/buffer/Constants';\nimport { AttributeData, ExtendedAttrs } from 'common/buffer/AttributeData';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n  /** Helper to create CellData from CharData. */\n  public static fromCharData(value: CharData): CellData {\n    const obj = new CellData();\n    obj.setFromCharData(value);\n    return obj;\n  }\n  /** Primitives from terminal buffer. */\n  public content = 0;\n  public fg = 0;\n  public bg = 0;\n  public extended: IExtendedAttrs = new ExtendedAttrs();\n  public combinedData = '';\n  /** Whether cell contains a combined string. */\n  public isCombined(): number {\n    return this.content & Content.IS_COMBINED_MASK;\n  }\n  /** Width of the cell. */\n  public getWidth(): number {\n    return this.content >> Content.WIDTH_SHIFT;\n  }\n  /** JS string of the content. */\n  public getChars(): string {\n    if (this.content & Content.IS_COMBINED_MASK) {\n      return this.combinedData;\n    }\n    if (this.content & Content.CODEPOINT_MASK) {\n      return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n    }\n    return '';\n  }\n  /**\n   * Codepoint of cell\n   * Note this returns the UTF32 codepoint of single chars,\n   * if content is a combined string it returns the codepoint\n   * of the last char in string to be in line with code in CharData.\n   */\n  public getCode(): number {\n    return (this.isCombined())\n      ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n      : this.content & Content.CODEPOINT_MASK;\n  }\n  /** Set data from CharData */\n  public setFromCharData(value: CharData): void {\n    this.fg = value[CHAR_DATA_ATTR_INDEX];\n    this.bg = 0;\n    let combined = false;\n    // surrogates and combined strings need special treatment\n    if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n      combined = true;\n    }\n    else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n      const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n      // if the 2-char string is a surrogate create single codepoint\n      // everything else is combined\n      if (0xD800 <= code && code <= 0xDBFF) {\n        const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n        if (0xDC00 <= second && second <= 0xDFFF) {\n          this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n        }\n        else {\n          combined = true;\n        }\n      }\n      else {\n        combined = true;\n      }\n    }\n    else {\n      this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n    }\n    if (combined) {\n      this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n      this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n    }\n  }\n  /** Get data as CharData. */\n  public getAsCharData(): CharData {\n    return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const DEFAULT_COLOR = 0;\nexport const DEFAULT_ATTR = (0 << 18) | (DEFAULT_COLOR << 9) | (256 << 0);\nexport const DEFAULT_EXT = 0;\n\nexport const CHAR_DATA_ATTR_INDEX = 0;\nexport const CHAR_DATA_CHAR_INDEX = 1;\nexport const CHAR_DATA_WIDTH_INDEX = 2;\nexport const CHAR_DATA_CODE_INDEX = 3;\n\n/**\n * Null cell - a real empty cell (containing nothing).\n * Note that code should always be 0 for a null cell as\n * several test condition of the buffer line rely on this.\n */\nexport const NULL_CELL_CHAR = '';\nexport const NULL_CELL_WIDTH = 1;\nexport const NULL_CELL_CODE = 0;\n\n/**\n * Whitespace cell.\n * This is meant as a replacement for empty cells when needed\n * during rendering lines to preserve correct aligment.\n */\nexport const WHITESPACE_CELL_CHAR = ' ';\nexport const WHITESPACE_CELL_WIDTH = 1;\nexport const WHITESPACE_CELL_CODE = 32;\n\n/**\n * Bitmasks for accessing data in `content`.\n */\nexport const enum Content {\n  /**\n   * bit 1..21    codepoint, max allowed in UTF32 is 0x10FFFF (21 bits taken)\n   *              read:   `codepoint = content & Content.codepointMask;`\n   *              write:  `content |= codepoint & Content.codepointMask;`\n   *                      shortcut if precondition `codepoint <= 0x10FFFF` is met:\n   *                      `content |= codepoint;`\n   */\n  CODEPOINT_MASK = 0x1FFFFF,\n\n  /**\n   * bit 22       flag indication whether a cell contains combined content\n   *              read:   `isCombined = content & Content.isCombined;`\n   *              set:    `content |= Content.isCombined;`\n   *              clear:  `content &= ~Content.isCombined;`\n   */\n  IS_COMBINED_MASK = 0x200000,  // 1 << 21\n\n  /**\n   * bit 1..22    mask to check whether a cell contains any string data\n   *              we need to check for codepoint and isCombined bits to see\n   *              whether a cell contains anything\n   *              read:   `isEmpty = !(content & Content.hasContent)`\n   */\n  HAS_CONTENT_MASK = 0x3FFFFF,\n\n  /**\n   * bit 23..24   wcwidth value of cell, takes 2 bits (ranges from 0..2)\n   *              read:   `width = (content & Content.widthMask) >> Content.widthShift;`\n   *                      `hasWidth = content & Content.widthMask;`\n   *                      as long as wcwidth is highest value in `content`:\n   *                      `width = content >> Content.widthShift;`\n   *              write:  `content |= (width << Content.widthShift) & Content.widthMask;`\n   *                      shortcut if precondition `0 <= width <= 3` is met:\n   *                      `content |= width << Content.widthShift;`\n   */\n  WIDTH_MASK = 0xC00000,   // 3 << 22\n  WIDTH_SHIFT = 22\n}\n\nexport const enum Attributes {\n  /**\n   * bit 1..8     blue in RGB, color in P256 and P16\n   */\n  BLUE_MASK = 0xFF,\n  BLUE_SHIFT = 0,\n  PCOLOR_MASK = 0xFF,\n  PCOLOR_SHIFT = 0,\n\n  /**\n   * bit 9..16    green in RGB\n   */\n  GREEN_MASK = 0xFF00,\n  GREEN_SHIFT = 8,\n\n  /**\n   * bit 17..24   red in RGB\n   */\n  RED_MASK = 0xFF0000,\n  RED_SHIFT = 16,\n\n  /**\n   * bit 25..26   color mode: DEFAULT (0) | P16 (1) | P256 (2) | RGB (3)\n   */\n  CM_MASK = 0x3000000,\n  CM_DEFAULT = 0,\n  CM_P16 = 0x1000000,\n  CM_P256 = 0x2000000,\n  CM_RGB = 0x3000000,\n\n  /**\n   * bit 1..24  RGB room\n   */\n  RGB_MASK = 0xFFFFFF\n}\n\nexport const enum FgFlags {\n  /**\n   * bit 27..32\n   */\n  INVERSE = 0x4000000,\n  BOLD = 0x8000000,\n  UNDERLINE = 0x10000000,\n  BLINK = 0x20000000,\n  INVISIBLE = 0x40000000,\n  STRIKETHROUGH = 0x80000000,\n}\n\nexport const enum BgFlags {\n  /**\n   * bit 27..32 (upper 2 unused)\n   */\n  ITALIC = 0x4000000,\n  DIM = 0x8000000,\n  HAS_EXTENDED = 0x10000000,\n  PROTECTED = 0x20000000,\n  OVERLINE = 0x40000000\n}\n\nexport const enum ExtFlags {\n  /**\n   * bit 27..29\n   */\n  UNDERLINE_STYLE = 0x1C000000,\n\n  /**\n   * bit 30..32\n   *\n   * An optional variant for the glyph, this can be used for example to offset underlines by a\n   * number of pixels to create a perfect pattern.\n   */\n  VARIANT_OFFSET = 0xE0000000\n}\n\nexport const enum UnderlineStyle {\n  NONE = 0,\n  SINGLE = 1,\n  DOUBLE = 2,\n  CURLY = 3,\n  DOTTED = 4,\n  DASHED = 5\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable, IMarker } from 'common/Types';\nimport { Emitter } from 'vs/base/common/event';\nimport { dispose } from 'vs/base/common/lifecycle';\n\nexport class Marker implements IMarker {\n  private static _nextId = 1;\n\n  public isDisposed: boolean = false;\n  private readonly _disposables: IDisposable[] = [];\n\n  private readonly _id: number = Marker._nextId++;\n  public get id(): number { return this._id; }\n\n  private readonly _onDispose = this.register(new Emitter<void>());\n  public readonly onDispose = this._onDispose.event;\n\n  constructor(\n    public line: number\n  ) {\n  }\n\n  public dispose(): void {\n    if (this.isDisposed) {\n      return;\n    }\n    this.isDisposed = true;\n    this.line = -1;\n    // Emit before super.dispose such that dispose listeners get a change to react\n    this._onDispose.fire();\n    dispose(this._disposables);\n    this._disposables.length = 0;\n  }\n\n  public register<T extends IDisposable>(disposable: T): T {\n    this._disposables.push(disposable);\n    return disposable;\n  }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharset } from 'common/Types';\n\n/**\n * The character sets supported by the terminal. These enable several languages\n * to be represented within the terminal with only 8-bit encoding. See ISO 2022\n * for a discussion on character sets. Only VT100 character sets are supported.\n */\nexport const CHARSETS: { [key: string]: ICharset | undefined } = {};\n\n/**\n * The default character set, US.\n */\nexport const DEFAULT_CHARSET: ICharset | undefined = CHARSETS['B'];\n\n/**\n * DEC Special Character and Line Drawing Set.\n * Reference: http://vt100.net/docs/vt102-ug/table5-13.html\n * A lot of curses apps use this if they see TERM=xterm.\n * testing: echo -e '\\e(0a\\e(B'\n * The xterm output sometimes seems to conflict with the\n * reference above. xterm seems in line with the reference\n * when running vttest however.\n * The table below now uses xterm's output from vttest.\n */\nCHARSETS['0'] = {\n  '`': '\\u25c6', // '◆'\n  'a': '\\u2592', // '▒'\n  'b': '\\u2409', // '␉' (HT)\n  'c': '\\u240c', // '␌' (FF)\n  'd': '\\u240d', // '␍' (CR)\n  'e': '\\u240a', // '␊' (LF)\n  'f': '\\u00b0', // '°'\n  'g': '\\u00b1', // '±'\n  'h': '\\u2424', // '␤' (NL)\n  'i': '\\u240b', // '␋' (VT)\n  'j': '\\u2518', // '┘'\n  'k': '\\u2510', // '┐'\n  'l': '\\u250c', // '┌'\n  'm': '\\u2514', // '└'\n  'n': '\\u253c', // '┼'\n  'o': '\\u23ba', // '⎺'\n  'p': '\\u23bb', // '⎻'\n  'q': '\\u2500', // '─'\n  'r': '\\u23bc', // '⎼'\n  's': '\\u23bd', // '⎽'\n  't': '\\u251c', // '├'\n  'u': '\\u2524', // '┤'\n  'v': '\\u2534', // '┴'\n  'w': '\\u252c', // '┬'\n  'x': '\\u2502', // '│'\n  'y': '\\u2264', // '≤'\n  'z': '\\u2265', // '≥'\n  '{': '\\u03c0', // 'π'\n  '|': '\\u2260', // '≠'\n  '}': '\\u00a3', // '£'\n  '~': '\\u00b7'  // '·'\n};\n\n/**\n * British character set\n * ESC (A\n * Reference: http://vt100.net/docs/vt220-rm/table2-5.html\n */\nCHARSETS['A'] = {\n  '#': '£'\n};\n\n/**\n * United States character set\n * ESC (B\n */\nCHARSETS['B'] = undefined;\n\n/**\n * Dutch character set\n * ESC (4\n * Reference: http://vt100.net/docs/vt220-rm/table2-6.html\n */\nCHARSETS['4'] = {\n  '#': '£',\n  '@': '¾',\n  '[': 'ij',\n  '\\\\': '½',\n  ']': '|',\n  '{': '¨',\n  '|': 'f',\n  '}': '¼',\n  '~': '´'\n};\n\n/**\n * Finnish character set\n * ESC (C or ESC (5\n * Reference: http://vt100.net/docs/vt220-rm/table2-7.html\n */\nCHARSETS['C'] =\nCHARSETS['5'] = {\n  '[': 'Ä',\n  '\\\\': 'Ö',\n  ']': 'Å',\n  '^': 'Ü',\n  '`': 'é',\n  '{': 'ä',\n  '|': 'ö',\n  '}': 'å',\n  '~': 'ü'\n};\n\n/**\n * French character set\n * ESC (R\n * Reference: http://vt100.net/docs/vt220-rm/table2-8.html\n */\nCHARSETS['R'] = {\n  '#': '£',\n  '@': 'à',\n  '[': '°',\n  '\\\\': 'ç',\n  ']': '§',\n  '{': 'é',\n  '|': 'ù',\n  '}': 'è',\n  '~': '¨'\n};\n\n/**\n * French Canadian character set\n * ESC (Q\n * Reference: http://vt100.net/docs/vt220-rm/table2-9.html\n */\nCHARSETS['Q'] = {\n  '@': 'à',\n  '[': 'â',\n  '\\\\': 'ç',\n  ']': 'ê',\n  '^': 'î',\n  '`': 'ô',\n  '{': 'é',\n  '|': 'ù',\n  '}': 'è',\n  '~': 'û'\n};\n\n/**\n * German character set\n * ESC (K\n * Reference: http://vt100.net/docs/vt220-rm/table2-10.html\n */\nCHARSETS['K'] = {\n  '@': '§',\n  '[': 'Ä',\n  '\\\\': 'Ö',\n  ']': 'Ü',\n  '{': 'ä',\n  '|': 'ö',\n  '}': 'ü',\n  '~': 'ß'\n};\n\n/**\n * Italian character set\n * ESC (Y\n * Reference: http://vt100.net/docs/vt220-rm/table2-11.html\n */\nCHARSETS['Y'] = {\n  '#': '£',\n  '@': '§',\n  '[': '°',\n  '\\\\': 'ç',\n  ']': 'é',\n  '`': 'ù',\n  '{': 'à',\n  '|': 'ò',\n  '}': 'è',\n  '~': 'ì'\n};\n\n/**\n * Norwegian/Danish character set\n * ESC (E or ESC (6\n * Reference: http://vt100.net/docs/vt220-rm/table2-12.html\n */\nCHARSETS['E'] =\nCHARSETS['6'] = {\n  '@': 'Ä',\n  '[': 'Æ',\n  '\\\\': 'Ø',\n  ']': 'Å',\n  '^': 'Ü',\n  '`': 'ä',\n  '{': 'æ',\n  '|': 'ø',\n  '}': 'å',\n  '~': 'ü'\n};\n\n/**\n * Spanish character set\n * ESC (Z\n * Reference: http://vt100.net/docs/vt220-rm/table2-13.html\n */\nCHARSETS['Z'] = {\n  '#': '£',\n  '@': '§',\n  '[': '¡',\n  '\\\\': 'Ñ',\n  ']': '¿',\n  '{': '°',\n  '|': 'ñ',\n  '}': 'ç'\n};\n\n/**\n * Swedish character set\n * ESC (H or ESC (7\n * Reference: http://vt100.net/docs/vt220-rm/table2-14.html\n */\nCHARSETS['H'] =\nCHARSETS['7'] = {\n  '@': 'É',\n  '[': 'Ä',\n  '\\\\': 'Ö',\n  ']': 'Å',\n  '^': 'Ü',\n  '`': 'é',\n  '{': 'ä',\n  '|': 'ö',\n  '}': 'å',\n  '~': 'ü'\n};\n\n/**\n * Swiss character set\n * ESC (=\n * Reference: http://vt100.net/docs/vt220-rm/table2-15.html\n */\nCHARSETS['='] = {\n  '#': 'ù',\n  '@': 'à',\n  '[': 'é',\n  '\\\\': 'ç',\n  ']': 'ê',\n  '^': 'î',\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  '_': 'è',\n  '`': 'ô',\n  '{': 'ä',\n  '|': 'ö',\n  '}': 'ü',\n  '~': 'û'\n};\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * C0 control codes\n * See = https://en.wikipedia.org/wiki/C0_and_C1_control_codes\n */\nexport namespace C0 {\n  /** Null (Caret = ^@, C = \\0) */\n  export const NUL = '\\x00';\n  /** Start of Heading (Caret = ^A) */\n  export const SOH = '\\x01';\n  /** Start of Text (Caret = ^B) */\n  export const STX = '\\x02';\n  /** End of Text (Caret = ^C) */\n  export const ETX = '\\x03';\n  /** End of Transmission (Caret = ^D) */\n  export const EOT = '\\x04';\n  /** Enquiry (Caret = ^E) */\n  export const ENQ = '\\x05';\n  /** Acknowledge (Caret = ^F) */\n  export const ACK = '\\x06';\n  /** Bell (Caret = ^G, C = \\a) */\n  export const BEL = '\\x07';\n  /** Backspace (Caret = ^H, C = \\b) */\n  export const BS  = '\\x08';\n  /** Character Tabulation, Horizontal Tabulation (Caret = ^I, C = \\t) */\n  export const HT  = '\\x09';\n  /** Line Feed (Caret = ^J, C = \\n) */\n  export const LF  = '\\x0a';\n  /** Line Tabulation, Vertical Tabulation (Caret = ^K, C = \\v) */\n  export const VT  = '\\x0b';\n  /** Form Feed (Caret = ^L, C = \\f) */\n  export const FF  = '\\x0c';\n  /** Carriage Return (Caret = ^M, C = \\r) */\n  export const CR  = '\\x0d';\n  /** Shift Out (Caret = ^N) */\n  export const SO  = '\\x0e';\n  /** Shift In (Caret = ^O) */\n  export const SI  = '\\x0f';\n  /** Data Link Escape (Caret = ^P) */\n  export const DLE = '\\x10';\n  /** Device Control One (XON) (Caret = ^Q) */\n  export const DC1 = '\\x11';\n  /** Device Control Two (Caret = ^R) */\n  export const DC2 = '\\x12';\n  /** Device Control Three (XOFF) (Caret = ^S) */\n  export const DC3 = '\\x13';\n  /** Device Control Four (Caret = ^T) */\n  export const DC4 = '\\x14';\n  /** Negative Acknowledge (Caret = ^U) */\n  export const NAK = '\\x15';\n  /** Synchronous Idle (Caret = ^V) */\n  export const SYN = '\\x16';\n  /** End of Transmission Block (Caret = ^W) */\n  export const ETB = '\\x17';\n  /** Cancel (Caret = ^X) */\n  export const CAN = '\\x18';\n  /** End of Medium (Caret = ^Y) */\n  export const EM  = '\\x19';\n  /** Substitute (Caret = ^Z) */\n  export const SUB = '\\x1a';\n  /** Escape (Caret = ^[, C = \\e) */\n  export const ESC = '\\x1b';\n  /** File Separator (Caret = ^\\) */\n  export const FS  = '\\x1c';\n  /** Group Separator (Caret = ^]) */\n  export const GS  = '\\x1d';\n  /** Record Separator (Caret = ^^) */\n  export const RS  = '\\x1e';\n  /** Unit Separator (Caret = ^_) */\n  export const US  = '\\x1f';\n  /** Space */\n  export const SP  = '\\x20';\n  /** Delete (Caret = ^?) */\n  export const DEL = '\\x7f';\n}\n\n/**\n * C1 control codes\n * See = https://en.wikipedia.org/wiki/C0_and_C1_control_codes\n */\nexport namespace C1 {\n  /** padding character */\n  export const PAD = '\\x80';\n  /** High Octet Preset */\n  export const HOP = '\\x81';\n  /** Break Permitted Here */\n  export const BPH = '\\x82';\n  /** No Break Here */\n  export const NBH = '\\x83';\n  /** Index */\n  export const IND = '\\x84';\n  /** Next Line */\n  export const NEL = '\\x85';\n  /** Start of Selected Area */\n  export const SSA = '\\x86';\n  /** End of Selected Area */\n  export const ESA = '\\x87';\n  /** Horizontal Tabulation Set */\n  export const HTS = '\\x88';\n  /** Horizontal Tabulation With Justification */\n  export const HTJ = '\\x89';\n  /** Vertical Tabulation Set */\n  export const VTS = '\\x8a';\n  /** Partial Line Down */\n  export const PLD = '\\x8b';\n  /** Partial Line Up */\n  export const PLU = '\\x8c';\n  /** Reverse Index */\n  export const RI = '\\x8d';\n  /** Single-Shift 2 */\n  export const SS2 = '\\x8e';\n  /** Single-Shift 3 */\n  export const SS3 = '\\x8f';\n  /** Device Control String */\n  export const DCS = '\\x90';\n  /** Private Use 1 */\n  export const PU1 = '\\x91';\n  /** Private Use 2 */\n  export const PU2 = '\\x92';\n  /** Set Transmit State */\n  export const STS = '\\x93';\n  /** Destructive backspace, intended to eliminate ambiguity about meaning of BS. */\n  export const CCH = '\\x94';\n  /** Message Waiting */\n  export const MW = '\\x95';\n  /** Start of Protected Area */\n  export const SPA = '\\x96';\n  /** End of Protected Area */\n  export const EPA = '\\x97';\n  /** Start of String */\n  export const SOS = '\\x98';\n  /** Single Graphic Character Introducer */\n  export const SGCI = '\\x99';\n  /** Single Character Introducer */\n  export const SCI = '\\x9a';\n  /** Control Sequence Introducer */\n  export const CSI = '\\x9b';\n  /** String Terminator */\n  export const ST = '\\x9c';\n  /** Operating System Command */\n  export const OSC = '\\x9d';\n  /** Privacy Message */\n  export const PM = '\\x9e';\n  /** Application Program Command */\n  export const APC = '\\x9f';\n}\nexport namespace C1_ESCAPED {\n  export const ST = `${C0.ESC}\\\\`;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n *       due to additional sanity checks. We can avoid them since\n *       we always operate on legal UTF32 (granted by the input decoders)\n *       and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n  if (codePoint > 0xFFFF) {\n    codePoint -= 0x10000;\n    return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n  }\n  return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n  let result = '';\n  for (let i = start; i < end; ++i) {\n    let codepoint = data[i];\n    if (codepoint > 0xFFFF) {\n      // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n      // pair conversion rules:\n      //  - subtract 0x10000 from code point, leaving a 20 bit number\n      //  - add high 10 bits to 0xD800  --> first surrogate\n      //  - add low 10 bits to 0xDC00   --> second surrogate\n      codepoint -= 0x10000;\n      result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n    } else {\n      result += String.fromCharCode(codepoint);\n    }\n  }\n  return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n  private _interim: number = 0;\n\n  /**\n   * Clears interim and resets decoder to clean state.\n   */\n  public clear(): void {\n    this._interim = 0;\n  }\n\n  /**\n   * Decode JS string to UTF32 codepoints.\n   * The methods assumes stream input and will store partly transmitted\n   * surrogate pairs and decode them with the next data chunk.\n   * Note: The method does no bound checks for target, therefore make sure\n   * the provided input data does not exceed the size of `target`.\n   * Returns the number of written codepoints in `target`.\n   */\n  public decode(input: string, target: Uint32Array): number {\n    const length = input.length;\n\n    if (!length) {\n      return 0;\n    }\n\n    let size = 0;\n    let startPos = 0;\n\n    // handle leftover surrogate high\n    if (this._interim) {\n      const second = input.charCodeAt(startPos++);\n      if (0xDC00 <= second && second <= 0xDFFF) {\n        target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n      } else {\n        // illegal codepoint (USC2 handling)\n        target[size++] = this._interim;\n        target[size++] = second;\n      }\n      this._interim = 0;\n    }\n\n    for (let i = startPos; i < length; ++i) {\n      const code = input.charCodeAt(i);\n      // surrogate pair first\n      if (0xD800 <= code && code <= 0xDBFF) {\n        if (++i >= length) {\n          this._interim = code;\n          return size;\n        }\n        const second = input.charCodeAt(i);\n        if (0xDC00 <= second && second <= 0xDFFF) {\n          target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n        } else {\n          // illegal codepoint (USC2 handling)\n          target[size++] = code;\n          target[size++] = second;\n        }\n        continue;\n      }\n      if (code === 0xFEFF) {\n        // BOM\n        continue;\n      }\n      target[size++] = code;\n    }\n    return size;\n  }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n  public interim: Uint8Array = new Uint8Array(3);\n\n  /**\n   * Clears interim bytes and resets decoder to clean state.\n   */\n  public clear(): void {\n    this.interim.fill(0);\n  }\n\n  /**\n   * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n   * The methods assumes stream input and will store partly transmitted bytes\n   * and decode them with the next data chunk.\n   * Note: The method does no bound checks for target, therefore make sure\n   * the provided data chunk does not exceed the size of `target`.\n   * Returns the number of written codepoints in `target`.\n   */\n  public decode(input: Uint8Array, target: Uint32Array): number {\n    const length = input.length;\n\n    if (!length) {\n      return 0;\n    }\n\n    let size = 0;\n    let byte1: number;\n    let byte2: number;\n    let byte3: number;\n    let byte4: number;\n    let codepoint = 0;\n    let startPos = 0;\n\n    // handle leftover bytes\n    if (this.interim[0]) {\n      let discardInterim = false;\n      let cp = this.interim[0];\n      cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n      let pos = 0;\n      let tmp: number;\n      while ((tmp = this.interim[++pos] & 0x3F) && pos < 4) {\n        cp <<= 6;\n        cp |= tmp;\n      }\n      // missing bytes - read ahead from input\n      const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n      const missing = type - pos;\n      while (startPos < missing) {\n        if (startPos >= length) {\n          return 0;\n        }\n        tmp = input[startPos++];\n        if ((tmp & 0xC0) !== 0x80) {\n          // wrong continuation, discard interim bytes completely\n          startPos--;\n          discardInterim = true;\n          break;\n        } else {\n          // need to save so we can continue short inputs in next call\n          this.interim[pos++] = tmp;\n          cp <<= 6;\n          cp |= tmp & 0x3F;\n        }\n      }\n      if (!discardInterim) {\n        // final test is type dependent\n        if (type === 2) {\n          if (cp < 0x80) {\n            // wrong starter byte\n            startPos--;\n          } else {\n            target[size++] = cp;\n          }\n        } else if (type === 3) {\n          if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n            // illegal codepoint or BOM\n          } else {\n            target[size++] = cp;\n          }\n        } else {\n          if (cp < 0x010000 || cp > 0x10FFFF) {\n            // illegal codepoint\n          } else {\n            target[size++] = cp;\n          }\n        }\n      }\n      this.interim.fill(0);\n    }\n\n    // loop through input\n    const fourStop = length - 4;\n    let i = startPos;\n    while (i < length) {\n      /**\n       * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n       * This is a compromise between speed gain for ASCII\n       * and penalty for non ASCII:\n       * For best ASCII performance the char should be stored directly into target,\n       * but even a single attempt to write to target and compare afterwards\n       * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n       * which reduces ASCII performance by ~15%.\n       * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n       * compared to the gains.\n       * Note that this optimization only takes place for 4 consecutive ASCII chars,\n       * for any shorter it bails out. Worst case - all 4 bytes being read but\n       * thrown away due to the last being a non ASCII char (-10% performance).\n       */\n      while (i < fourStop\n        && !((byte1 = input[i]) & 0x80)\n        && !((byte2 = input[i + 1]) & 0x80)\n        && !((byte3 = input[i + 2]) & 0x80)\n        && !((byte4 = input[i + 3]) & 0x80))\n      {\n        target[size++] = byte1;\n        target[size++] = byte2;\n        target[size++] = byte3;\n        target[size++] = byte4;\n        i += 4;\n      }\n\n      // reread byte1\n      byte1 = input[i++];\n\n      // 1 byte\n      if (byte1 < 0x80) {\n        target[size++] = byte1;\n\n        // 2 bytes\n      } else if ((byte1 & 0xE0) === 0xC0) {\n        if (i >= length) {\n          this.interim[0] = byte1;\n          return size;\n        }\n        byte2 = input[i++];\n        if ((byte2 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n        if (codepoint < 0x80) {\n          // wrong starter byte\n          i--;\n          continue;\n        }\n        target[size++] = codepoint;\n\n        // 3 bytes\n      } else if ((byte1 & 0xF0) === 0xE0) {\n        if (i >= length) {\n          this.interim[0] = byte1;\n          return size;\n        }\n        byte2 = input[i++];\n        if ((byte2 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        if (i >= length) {\n          this.interim[0] = byte1;\n          this.interim[1] = byte2;\n          return size;\n        }\n        byte3 = input[i++];\n        if ((byte3 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n        if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n          // illegal codepoint or BOM, no i-- here\n          continue;\n        }\n        target[size++] = codepoint;\n\n        // 4 bytes\n      } else if ((byte1 & 0xF8) === 0xF0) {\n        if (i >= length) {\n          this.interim[0] = byte1;\n          return size;\n        }\n        byte2 = input[i++];\n        if ((byte2 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        if (i >= length) {\n          this.interim[0] = byte1;\n          this.interim[1] = byte2;\n          return size;\n        }\n        byte3 = input[i++];\n        if ((byte3 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        if (i >= length) {\n          this.interim[0] = byte1;\n          this.interim[1] = byte2;\n          this.interim[2] = byte3;\n          return size;\n        }\n        byte4 = input[i++];\n        if ((byte4 & 0xC0) !== 0x80) {\n          // wrong continuation\n          i--;\n          continue;\n        }\n        codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n        if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n          // illegal codepoint, no i-- here\n          continue;\n        }\n        target[size++] = codepoint;\n      } else {\n        // illegal byte, just skip\n      }\n    }\n    return size;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from 'common/services/Services';\nimport { UnicodeService } from 'common/services/UnicodeService';\n\nconst BMP_COMBINING = [\n  [0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],\n  [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2],\n  [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603],\n  [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670],\n  [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED],\n  [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A],\n  [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902],\n  [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D],\n  [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981],\n  [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD],\n  [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C],\n  [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D],\n  [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC],\n  [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD],\n  [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C],\n  [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D],\n  [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0],\n  [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48],\n  [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC],\n  [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD],\n  [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D],\n  [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6],\n  [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E],\n  [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC],\n  [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35],\n  [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E],\n  [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97],\n  [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030],\n  [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039],\n  [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F],\n  [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753],\n  [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD],\n  [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD],\n  [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922],\n  [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B],\n  [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34],\n  [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42],\n  [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF],\n  [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063],\n  [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F],\n  [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B],\n  [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F],\n  [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]\n];\nconst HIGH_COMBINING = [\n  [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F],\n  [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169],\n  [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD],\n  [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F],\n  [0xE0100, 0xE01EF]\n];\n\n// BMP lookup table, lazy initialized during first addon loading\nlet table: Uint8Array;\n\nfunction bisearch(ucs: number, data: number[][]): boolean {\n  let min = 0;\n  let max = data.length - 1;\n  let mid;\n  if (ucs < data[0][0] || ucs > data[max][1]) {\n    return false;\n  }\n  while (max >= min) {\n    mid = (min + max) >> 1;\n    if (ucs > data[mid][1]) {\n      min = mid + 1;\n    } else if (ucs < data[mid][0]) {\n      max = mid - 1;\n    } else {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport class UnicodeV6 implements IUnicodeVersionProvider {\n  public readonly version = '6';\n\n  constructor() {\n    // init lookup table once\n    if (!table) {\n      table = new Uint8Array(65536);\n      table.fill(1);\n      table[0] = 0;\n      // control chars\n      table.fill(0, 1, 32);\n      table.fill(0, 0x7f, 0xa0);\n\n      // apply wide char rules first\n      // wide chars\n      table.fill(2, 0x1100, 0x1160);\n      table[0x2329] = 2;\n      table[0x232a] = 2;\n      table.fill(2, 0x2e80, 0xa4d0);\n      table[0x303f] = 1;  // wrongly in last line\n\n      table.fill(2, 0xac00, 0xd7a4);\n      table.fill(2, 0xf900, 0xfb00);\n      table.fill(2, 0xfe10, 0xfe1a);\n      table.fill(2, 0xfe30, 0xfe70);\n      table.fill(2, 0xff00, 0xff61);\n      table.fill(2, 0xffe0, 0xffe7);\n\n      // apply combining last to ensure we overwrite\n      // wrongly wide set chars:\n      //    the original algo evals combining first and falls\n      //    through to wide check so we simply do here the opposite\n      // combining 0\n      for (let r = 0; r < BMP_COMBINING.length; ++r) {\n        table.fill(0, BMP_COMBINING[r][0], BMP_COMBINING[r][1] + 1);\n      }\n    }\n  }\n\n  public wcwidth(num: number): UnicodeCharWidth {\n    if (num < 32) return 0;\n    if (num < 127) return 1;\n    if (num < 65536) return table[num] as UnicodeCharWidth;\n    if (bisearch(num, HIGH_COMBINING)) return 0;\n    if ((num >= 0x20000 && num <= 0x2fffd) || (num >= 0x30000 && num <= 0x3fffd)) return 2;\n    return 1;\n  }\n\n  public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n    let width = this.wcwidth(codepoint);\n    let shouldJoin = width === 0 && preceding !== 0;\n    if (shouldJoin) {\n      const oldWidth = UnicodeService.extractWidth(preceding);\n      if (oldWidth === 0) {\n        shouldJoin = false;\n      } else if (oldWidth > width) {\n        width = oldWidth;\n      }\n    }\n    return UnicodeService.createPropertyValue(0, width, shouldJoin);\n  }\n}\n","\n/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { Emitter } from 'vs/base/common/event';\n\ndeclare const setTimeout: (handler: () => void, timeout?: number) => void;\n\n/**\n * Safety watermark to avoid memory exhaustion and browser engine crash on fast data input.\n * Enable flow control to avoid this limit and make sure that your backend correctly\n * propagates this to the underlying pty. (see docs for further instructions)\n * Since this limit is meant as a safety parachute to prevent browser crashs,\n * it is set to a very high number. Typically xterm.js gets unresponsive with\n * a 100 times lower number (>500 kB).\n */\nconst DISCARD_WATERMARK = 50000000; // ~50 MB\n\n/**\n * The max number of ms to spend on writes before allowing the renderer to\n * catch up with a 0ms setTimeout. A value of < 33 to keep us close to\n * 30fps, and a value of < 16 to try to run at 60fps. Of course, the real FPS\n * depends on the time it takes for the renderer to draw the frame.\n */\nconst WRITE_TIMEOUT_MS = 12;\n\n/**\n * Threshold of max held chunks in the write buffer, that were already processed.\n * This is a tradeoff between extensive write buffer shifts (bad runtime) and high\n * memory consumption by data thats not used anymore.\n */\nconst WRITE_BUFFER_LENGTH_THRESHOLD = 50;\n\nexport class WriteBuffer extends Disposable {\n  private _writeBuffer: (string | Uint8Array)[] = [];\n  private _callbacks: ((() => void) | undefined)[] = [];\n  private _pendingData = 0;\n  private _bufferOffset = 0;\n  private _isSyncWriting = false;\n  private _syncCalls = 0;\n  private _didUserInput = false;\n\n  private readonly _onWriteParsed = this._register(new Emitter<void>());\n  public readonly onWriteParsed = this._onWriteParsed.event;\n\n  constructor(private _action: (data: string | Uint8Array, promiseResult?: boolean) => void | Promise<boolean>) {\n    super();\n  }\n\n  public handleUserInput(): void {\n    this._didUserInput = true;\n  }\n\n  /**\n   * @deprecated Unreliable, to be removed soon.\n   */\n  public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n    // stop writeSync recursions with maxSubsequentCalls argument\n    // This is dangerous to use as it will lose the current data chunk\n    // and return immediately.\n    if (maxSubsequentCalls !== undefined && this._syncCalls > maxSubsequentCalls) {\n      // comment next line if a whole loop block should only contain x `writeSync` calls\n      // (total flat vs. deep nested limit)\n      this._syncCalls = 0;\n      return;\n    }\n    // append chunk to buffer\n    this._pendingData += data.length;\n    this._writeBuffer.push(data);\n    this._callbacks.push(undefined);\n\n    // increase recursion counter\n    this._syncCalls++;\n    // exit early if another writeSync loop is active\n    if (this._isSyncWriting) {\n      return;\n    }\n    this._isSyncWriting = true;\n\n    // force sync processing on pending data chunks to avoid in-band data scrambling\n    // does the same as innerWrite but without event loop\n    // we have to do it here as single loop steps to not corrupt loop subject\n    // by another writeSync call triggered from _action\n    let chunk: string | Uint8Array | undefined;\n    while (chunk = this._writeBuffer.shift()) {\n      this._action(chunk);\n      const cb = this._callbacks.shift();\n      if (cb) cb();\n    }\n    // reset to avoid reprocessing of chunks with scheduled innerWrite call\n    // stopping scheduled innerWrite by offset > length condition\n    this._pendingData = 0;\n    this._bufferOffset = 0x7FFFFFFF;\n\n    // allow another writeSync to loop\n    this._isSyncWriting = false;\n    this._syncCalls = 0;\n  }\n\n  public write(data: string | Uint8Array, callback?: () => void): void {\n    if (this._pendingData > DISCARD_WATERMARK) {\n      throw new Error('write data discarded, use flow control to avoid losing data');\n    }\n\n    // schedule chunk processing for next event loop run\n    if (!this._writeBuffer.length) {\n      this._bufferOffset = 0;\n\n      // If this is the first write call after the user has done some input,\n      // parse it immediately to minimize input latency,\n      // otherwise schedule for the next event\n      if (this._didUserInput) {\n        this._didUserInput = false;\n        this._pendingData += data.length;\n        this._writeBuffer.push(data);\n        this._callbacks.push(callback);\n        this._innerWrite();\n        return;\n      }\n\n      setTimeout(() => this._innerWrite());\n    }\n\n    this._pendingData += data.length;\n    this._writeBuffer.push(data);\n    this._callbacks.push(callback);\n  }\n\n  /**\n   * Inner write call, that enters the sliced chunk processing by timing.\n   *\n   * `lastTime` indicates, when the last _innerWrite call had started.\n   * It is used to aggregate async handler execution under a timeout constraint\n   * effectively lowering the redrawing needs, schematically:\n   *\n   *   macroTask _innerWrite:\n   *     if (performance.now() - (lastTime | 0) < WRITE_TIMEOUT_MS):\n   *        schedule microTask _innerWrite(lastTime)\n   *     else:\n   *        schedule macroTask _innerWrite(0)\n   *\n   *   overall execution order on task queues:\n   *\n   *   macrotasks:  [...]  -->  _innerWrite(0)  -->  [...]  -->  screenUpdate  -->  [...]\n   *         m  t:                    |\n   *         i  a:                  [...]\n   *         c  s:                    |\n   *         r  k:              while < timeout:\n   *         o  s:                _innerWrite(timeout)\n   *\n   * `promiseResult` depicts the promise resolve value of an async handler.\n   * This value gets carried forward through all saved stack states of the\n   * paused parser for proper continuation.\n   *\n   * Note, for pure sync code `lastTime` and `promiseResult` have no meaning.\n   */\n  protected _innerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n    const startTime = lastTime || performance.now();\n    while (this._writeBuffer.length > this._bufferOffset) {\n      const data = this._writeBuffer[this._bufferOffset];\n      const result = this._action(data, promiseResult);\n      if (result) {\n        /**\n         * If we get a promise as return value, we re-schedule the continuation\n         * as thenable on the promise and exit right away.\n         *\n         * The exit here means, that we block input processing at the current active chunk,\n         * the exact execution position within the chunk is preserved by the saved\n         * stack content in InputHandler and EscapeSequenceParser.\n         *\n         * Resuming happens automatically from that saved stack state.\n         * Also the resolved promise value is passed along the callstack to\n         * `EscapeSequenceParser.parse` to correctly resume the stopped handler loop.\n         *\n         * Exceptions on async handlers will be logged to console async, but do not interrupt\n         * the input processing (continues with next handler at the current input position).\n         */\n\n        /**\n         * If a promise takes long to resolve, we should schedule continuation behind setTimeout.\n         * This might already be too late, if our .then enters really late (executor + prev thens\n         * took very long). This cannot be solved here for the handler itself (it is the handlers\n         * responsibility to slice hard work), but we can at least schedule a screen update as we\n         * gain control.\n         */\n        const continuation: (r: boolean) => void = (r: boolean) => performance.now() - startTime >= WRITE_TIMEOUT_MS\n          ? setTimeout(() => this._innerWrite(0, r))\n          : this._innerWrite(startTime, r);\n\n        /**\n         * Optimization considerations:\n         * The continuation above favors FPS over throughput by eval'ing `startTime` on resolve.\n         * This might schedule too many screen updates with bad throughput drops (in case a slow\n         * resolving handler sliced its work properly behind setTimeout calls). We cannot spot\n         * this condition here, also the renderer has no way to spot nonsense updates either.\n         * FIXME: A proper fix for this would track the FPS at the renderer entry level separately.\n         *\n         * If favoring of FPS shows bad throughtput impact, use the following instead. It favors\n         * throughput by eval'ing `startTime` upfront pulling at least one more chunk into the\n         * current microtask queue (executed before setTimeout).\n         */\n        // const continuation: (r: boolean) => void = performance.now() - startTime >=\n        //     WRITE_TIMEOUT_MS\n        //   ? r => setTimeout(() => this._innerWrite(0, r))\n        //   : r => this._innerWrite(startTime, r);\n\n        // Handle exceptions synchronously to current band position, idea:\n        // 1. spawn a single microtask which we allow to throw hard\n        // 2. spawn a promise immediately resolving to `true`\n        // (executed on the same queue, thus properly aligned before continuation happens)\n        result.catch(err => {\n          queueMicrotask(() => {throw err;});\n          return Promise.resolve(false);\n        }).then(continuation);\n        return;\n      }\n\n      const cb = this._callbacks[this._bufferOffset];\n      if (cb) cb();\n      this._bufferOffset++;\n      this._pendingData -= data.length;\n\n      if (performance.now() - startTime >= WRITE_TIMEOUT_MS) {\n        break;\n      }\n    }\n    if (this._writeBuffer.length > this._bufferOffset) {\n      // Allow renderer to catch up before processing the next batch\n      // trim already processed chunks if we are above threshold\n      if (this._bufferOffset > WRITE_BUFFER_LENGTH_THRESHOLD) {\n        this._writeBuffer = this._writeBuffer.slice(this._bufferOffset);\n        this._callbacks = this._callbacks.slice(this._bufferOffset);\n        this._bufferOffset = 0;\n      }\n      setTimeout(() => this._innerWrite());\n    } else {\n      this._writeBuffer.length = 0;\n      this._callbacks.length = 0;\n      this._pendingData = 0;\n      this._bufferOffset = 0;\n    }\n    this._onWriteParsed.fire();\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\n// 'rgb:' rule - matching: r/g/b | rr/gg/bb | rrr/ggg/bbb | rrrr/gggg/bbbb (hex digits)\nconst RGB_REX = /^([\\da-f])\\/([\\da-f])\\/([\\da-f])$|^([\\da-f]{2})\\/([\\da-f]{2})\\/([\\da-f]{2})$|^([\\da-f]{3})\\/([\\da-f]{3})\\/([\\da-f]{3})$|^([\\da-f]{4})\\/([\\da-f]{4})\\/([\\da-f]{4})$/;\n// '#...' rule - matching any hex digits\nconst HASH_REX = /^[\\da-f]+$/;\n\n/**\n * Parse color spec to RGB values (8 bit per channel).\n * See `man xparsecolor` for details about certain format specifications.\n *\n * Supported formats:\n * - rgb:<red>/<green>/<blue> with <red>, <green>, <blue> in h | hh | hhh | hhhh\n * - #RGB, #RRGGBB, #RRRGGGBBB, #RRRRGGGGBBBB\n *\n * All other formats like rgbi: or device-independent string specifications\n * with float numbering are not supported.\n */\nexport function parseColor(data: string): [number, number, number] | undefined {\n  if (!data) return;\n  // also handle uppercases\n  let low = data.toLowerCase();\n  if (low.indexOf('rgb:') === 0) {\n    // 'rgb:' specifier\n    low = low.slice(4);\n    const m = RGB_REX.exec(low);\n    if (m) {\n      const base = m[1] ? 15 : m[4] ? 255 : m[7] ? 4095 : 65535;\n      return [\n        Math.round(parseInt(m[1] || m[4] || m[7] || m[10], 16) / base * 255),\n        Math.round(parseInt(m[2] || m[5] || m[8] || m[11], 16) / base * 255),\n        Math.round(parseInt(m[3] || m[6] || m[9] || m[12], 16) / base * 255)\n      ];\n    }\n  } else if (low.indexOf('#') === 0) {\n    // '#' specifier\n    low = low.slice(1);\n    if (HASH_REX.exec(low) && [3, 6, 9, 12].includes(low.length)) {\n      const adv = low.length / 3;\n      const result: [number, number, number] = [0, 0, 0];\n      for (let i = 0; i < 3; ++i) {\n        const c = parseInt(low.slice(adv * i, adv * i + adv), 16);\n        result[i] = adv === 1 ? c << 4 : adv === 2 ? c : adv === 3 ? c >> 4 : c >> 8;\n      }\n      return result;\n    }\n  }\n\n  // Named colors are currently not supported due to the large addition to the xterm.js bundle size\n  // they would add. In order to support named colors, we would need some way of optionally loading\n  // additional payloads so startup/download time is not bloated (see #3530).\n}\n\n// pad hex output to requested bit width\nfunction pad(n: number, bits: number): string {\n  const s = n.toString(16);\n  const s2 = s.length < 2 ? '0' + s : s;\n  switch (bits) {\n    case 4:\n      return s[0];\n    case 8:\n      return s2;\n    case 12:\n      return (s2 + s2).slice(0, 3);\n    default:\n      return s2 + s2;\n  }\n}\n\n/**\n * Convert a given color to rgb:../../.. string of `bits` depth.\n */\nexport function toRgbString(color: [number, number, number], bits: number = 16): string {\n  const [r, g, b] = color;\n  return `rgb:${pad(r, bits)}/${pad(g, bits)}/${pad(b, bits)}`;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Internal states of EscapeSequenceParser.\n */\nexport const enum ParserState {\n  GROUND = 0,\n  ESCAPE = 1,\n  ESCAPE_INTERMEDIATE = 2,\n  CSI_ENTRY = 3,\n  CSI_PARAM = 4,\n  CSI_INTERMEDIATE = 5,\n  CSI_IGNORE = 6,\n  SOS_PM_APC_STRING = 7,\n  OSC_STRING = 8,\n  DCS_ENTRY = 9,\n  DCS_PARAM = 10,\n  DCS_IGNORE = 11,\n  DCS_INTERMEDIATE = 12,\n  DCS_PASSTHROUGH = 13\n}\n\n/**\n * Internal actions of EscapeSequenceParser.\n */\nexport const enum ParserAction {\n  IGNORE = 0,\n  ERROR = 1,\n  PRINT = 2,\n  EXECUTE = 3,\n  OSC_START = 4,\n  OSC_PUT = 5,\n  OSC_END = 6,\n  CSI_DISPATCH = 7,\n  PARAM = 8,\n  COLLECT = 9,\n  ESC_DISPATCH = 10,\n  CLEAR = 11,\n  DCS_HOOK = 12,\n  DCS_PUT = 13,\n  DCS_UNHOOK = 14\n}\n\n/**\n * Internal states of OscParser.\n */\nexport const enum OscState {\n  START = 0,\n  ID = 1,\n  PAYLOAD = 2,\n  ABORT = 3\n}\n\n// payload limit for OSC and DCS\nexport const PAYLOAD_LIMIT = 10000000;\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from 'common/Types';\nimport { IDcsHandler, IParams, IHandlerCollection, IDcsParser, DcsFallbackHandlerType, ISubParserStackState } from 'common/parser/Types';\nimport { utf32ToString } from 'common/input/TextDecoder';\nimport { Params } from 'common/parser/Params';\nimport { PAYLOAD_LIMIT } from 'common/parser/Constants';\n\nconst EMPTY_HANDLERS: IDcsHandler[] = [];\n\nexport class DcsParser implements IDcsParser {\n  private _handlers: IHandlerCollection<IDcsHandler> = Object.create(null);\n  private _active: IDcsHandler[] = EMPTY_HANDLERS;\n  private _ident: number = 0;\n  private _handlerFb: DcsFallbackHandlerType = () => { };\n  private _stack: ISubParserStackState = {\n    paused: false,\n    loopPosition: 0,\n    fallThrough: false\n  };\n\n  public dispose(): void {\n    this._handlers = Object.create(null);\n    this._handlerFb = () => { };\n    this._active = EMPTY_HANDLERS;\n  }\n\n  public registerHandler(ident: number, handler: IDcsHandler): IDisposable {\n    if (this._handlers[ident] === undefined) {\n      this._handlers[ident] = [];\n    }\n    const handlerList = this._handlers[ident];\n    handlerList.push(handler);\n    return {\n      dispose: () => {\n        const handlerIndex = handlerList.indexOf(handler);\n        if (handlerIndex !== -1) {\n          handlerList.splice(handlerIndex, 1);\n        }\n      }\n    };\n  }\n\n  public clearHandler(ident: number): void {\n    if (this._handlers[ident]) delete this._handlers[ident];\n  }\n\n  public setHandlerFallback(handler: DcsFallbackHandlerType): void {\n    this._handlerFb = handler;\n  }\n\n  public reset(): void {\n    // force cleanup leftover handlers\n    if (this._active.length) {\n      for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n        this._active[j].unhook(false);\n      }\n    }\n    this._stack.paused = false;\n    this._active = EMPTY_HANDLERS;\n    this._ident = 0;\n  }\n\n  public hook(ident: number, params: IParams): void {\n    // always reset leftover handlers\n    this.reset();\n    this._ident = ident;\n    this._active = this._handlers[ident] || EMPTY_HANDLERS;\n    if (!this._active.length) {\n      this._handlerFb(this._ident, 'HOOK', params);\n    } else {\n      for (let j = this._active.length - 1; j >= 0; j--) {\n        this._active[j].hook(params);\n      }\n    }\n  }\n\n  public put(data: Uint32Array, start: number, end: number): void {\n    if (!this._active.length) {\n      this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n    } else {\n      for (let j = this._active.length - 1; j >= 0; j--) {\n        this._active[j].put(data, start, end);\n      }\n    }\n  }\n\n  public unhook(success: boolean, promiseResult: boolean = true): void | Promise<boolean> {\n    if (!this._active.length) {\n      this._handlerFb(this._ident, 'UNHOOK', success);\n    } else {\n      let handlerResult: boolean | Promise<boolean> = false;\n      let j = this._active.length - 1;\n      let fallThrough = false;\n      if (this._stack.paused) {\n        j = this._stack.loopPosition - 1;\n        handlerResult = promiseResult;\n        fallThrough = this._stack.fallThrough;\n        this._stack.paused = false;\n      }\n      if (!fallThrough && handlerResult === false) {\n        for (; j >= 0; j--) {\n          handlerResult = this._active[j].unhook(success);\n          if (handlerResult === true) {\n            break;\n          } else if (handlerResult instanceof Promise) {\n            this._stack.paused = true;\n            this._stack.loopPosition = j;\n            this._stack.fallThrough = false;\n            return handlerResult;\n          }\n        }\n        j--;\n      }\n      // cleanup left over handlers (fallThrough for async)\n      for (; j >= 0; j--) {\n        handlerResult = this._active[j].unhook(false);\n        if (handlerResult instanceof Promise) {\n          this._stack.paused = true;\n          this._stack.loopPosition = j;\n          this._stack.fallThrough = true;\n          return handlerResult;\n        }\n      }\n    }\n    this._active = EMPTY_HANDLERS;\n    this._ident = 0;\n  }\n}\n\n// predefine empty params as [0] (ZDM)\nconst EMPTY_PARAMS = new Params();\nEMPTY_PARAMS.addParam(0);\n\n/**\n * Convenient class to create a DCS handler from a single callback function.\n * Note: The payload is currently limited to 50 MB (hardcoded).\n */\nexport class DcsHandler implements IDcsHandler {\n  private _data = '';\n  private _params: IParams = EMPTY_PARAMS;\n  private _hitLimit: boolean = false;\n\n  constructor(private _handler: (data: string, params: IParams) => boolean | Promise<boolean>) { }\n\n  public hook(params: IParams): void {\n    // since we need to preserve params until `unhook`, we have to clone it\n    // (only borrowed from parser and spans multiple parser states)\n    // perf optimization:\n    // clone only, if we have non empty params, otherwise stick with default\n    this._params = (params.length > 1 || params.params[0]) ? params.clone() : EMPTY_PARAMS;\n    this._data = '';\n    this._hitLimit = false;\n  }\n\n  public put(data: Uint32Array, start: number, end: number): void {\n    if (this._hitLimit) {\n      return;\n    }\n    this._data += utf32ToString(data, start, end);\n    if (this._data.length > PAYLOAD_LIMIT) {\n      this._data = '';\n      this._hitLimit = true;\n    }\n  }\n\n  public unhook(success: boolean): boolean | Promise<boolean> {\n    let ret: boolean | Promise<boolean> = false;\n    if (this._hitLimit) {\n      ret = false;\n    } else if (success) {\n      ret = this._handler(this._data, this._params);\n      if (ret instanceof Promise) {\n        // need to hold data and params until `ret` got resolved\n        // dont care for errors, data will be freed anyway on next start\n        return ret.then(res => {\n          this._params = EMPTY_PARAMS;\n          this._data = '';\n          this._hitLimit = false;\n          return res;\n        });\n      }\n    }\n    this._params = EMPTY_PARAMS;\n    this._data = '';\n    this._hitLimit = false;\n    return ret;\n  }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParsingState, IDcsHandler, IEscapeSequenceParser, IParams, IOscHandler, IHandlerCollection, CsiHandlerType, OscFallbackHandlerType, IOscParser, EscHandlerType, IDcsParser, DcsFallbackHandlerType, IFunctionIdentifier, ExecuteFallbackHandlerType, CsiFallbackHandlerType, EscFallbackHandlerType, PrintHandlerType, PrintFallbackHandlerType, ExecuteHandlerType, IParserStackState, ParserStackType, ResumableHandlersType } from 'common/parser/Types';\nimport { ParserState, ParserAction } from 'common/parser/Constants';\nimport { Disposable, toDisposable } from 'vs/base/common/lifecycle';\nimport { IDisposable } from 'common/Types';\nimport { Params } from 'common/parser/Params';\nimport { OscParser } from 'common/parser/OscParser';\nimport { DcsParser } from 'common/parser/DcsParser';\n\n/**\n * Table values are generated like this:\n *    index:  currentState << TableValue.INDEX_STATE_SHIFT | charCode\n *    value:  action << TableValue.TRANSITION_ACTION_SHIFT | nextState\n */\nconst enum TableAccess {\n  TRANSITION_ACTION_SHIFT = 4,\n  TRANSITION_STATE_MASK = 15,\n  INDEX_STATE_SHIFT = 8\n}\n\n/**\n * Transition table for EscapeSequenceParser.\n */\nexport class TransitionTable {\n  public table: Uint8Array;\n\n  constructor(length: number) {\n    this.table = new Uint8Array(length);\n  }\n\n  /**\n   * Set default transition.\n   * @param action default action\n   * @param next default next state\n   */\n  public setDefault(action: ParserAction, next: ParserState): void {\n    this.table.fill(action << TableAccess.TRANSITION_ACTION_SHIFT | next);\n  }\n\n  /**\n   * Add a transition to the transition table.\n   * @param code input character code\n   * @param state current parser state\n   * @param action parser action to be done\n   * @param next next parser state\n   */\n  public add(code: number, state: ParserState, action: ParserAction, next: ParserState): void {\n    this.table[state << TableAccess.INDEX_STATE_SHIFT | code] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n  }\n\n  /**\n   * Add transitions for multiple input character codes.\n   * @param codes input character code array\n   * @param state current parser state\n   * @param action parser action to be done\n   * @param next next parser state\n   */\n  public addMany(codes: number[], state: ParserState, action: ParserAction, next: ParserState): void {\n    for (let i = 0; i < codes.length; i++) {\n      this.table[state << TableAccess.INDEX_STATE_SHIFT | codes[i]] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n    }\n  }\n}\n\n\n// Pseudo-character placeholder for printable non-ascii characters (unicode).\nconst NON_ASCII_PRINTABLE = 0xA0;\n\n\n/**\n * VT500 compatible transition table.\n * Taken from https://vt100.net/emu/dec_ansi_parser.\n */\nexport const VT500_TRANSITION_TABLE = (function (): TransitionTable {\n  const table: TransitionTable = new TransitionTable(4095);\n\n  // range macro for byte\n  const BYTE_VALUES = 256;\n  const blueprint = Array.apply(null, Array(BYTE_VALUES)).map((unused: any, i: number) => i);\n  const r = (start: number, end: number): number[] => blueprint.slice(start, end);\n\n  // Default definitions.\n  const PRINTABLES = r(0x20, 0x7f); // 0x20 (SP) included, 0x7F (DEL) excluded\n  const EXECUTABLES = r(0x00, 0x18);\n  EXECUTABLES.push(0x19);\n  EXECUTABLES.push.apply(EXECUTABLES, r(0x1c, 0x20));\n\n  const states: number[] = r(ParserState.GROUND, ParserState.DCS_PASSTHROUGH + 1);\n  let state: any;\n\n  // set default transition\n  table.setDefault(ParserAction.ERROR, ParserState.GROUND);\n  // printables\n  table.addMany(PRINTABLES, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n  // global anywhere rules\n  for (state in states) {\n    table.addMany([0x18, 0x1a, 0x99, 0x9a], state, ParserAction.EXECUTE, ParserState.GROUND);\n    table.addMany(r(0x80, 0x90), state, ParserAction.EXECUTE, ParserState.GROUND);\n    table.addMany(r(0x90, 0x98), state, ParserAction.EXECUTE, ParserState.GROUND);\n    table.add(0x9c, state, ParserAction.IGNORE, ParserState.GROUND); // ST as terminator\n    table.add(0x1b, state, ParserAction.CLEAR, ParserState.ESCAPE);  // ESC\n    table.add(0x9d, state, ParserAction.OSC_START, ParserState.OSC_STRING);  // OSC\n    table.addMany([0x98, 0x9e, 0x9f], state, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n    table.add(0x9b, state, ParserAction.CLEAR, ParserState.CSI_ENTRY);  // CSI\n    table.add(0x90, state, ParserAction.CLEAR, ParserState.DCS_ENTRY);  // DCS\n  }\n  // rules for executables and 7f\n  table.addMany(EXECUTABLES, ParserState.GROUND, ParserAction.EXECUTE, ParserState.GROUND);\n  table.addMany(EXECUTABLES, ParserState.ESCAPE, ParserAction.EXECUTE, ParserState.ESCAPE);\n  table.add(0x7f, ParserState.ESCAPE, ParserAction.IGNORE, ParserState.ESCAPE);\n  table.addMany(EXECUTABLES, ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n  table.addMany(EXECUTABLES, ParserState.CSI_ENTRY, ParserAction.EXECUTE, ParserState.CSI_ENTRY);\n  table.add(0x7f, ParserState.CSI_ENTRY, ParserAction.IGNORE, ParserState.CSI_ENTRY);\n  table.addMany(EXECUTABLES, ParserState.CSI_PARAM, ParserAction.EXECUTE, ParserState.CSI_PARAM);\n  table.add(0x7f, ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_PARAM);\n  table.addMany(EXECUTABLES, ParserState.CSI_IGNORE, ParserAction.EXECUTE, ParserState.CSI_IGNORE);\n  table.addMany(EXECUTABLES, ParserState.CSI_INTERMEDIATE, ParserAction.EXECUTE, ParserState.CSI_INTERMEDIATE);\n  table.add(0x7f, ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_INTERMEDIATE);\n  table.addMany(EXECUTABLES, ParserState.ESCAPE_INTERMEDIATE, ParserAction.EXECUTE, ParserState.ESCAPE_INTERMEDIATE);\n  table.add(0x7f, ParserState.ESCAPE_INTERMEDIATE, ParserAction.IGNORE, ParserState.ESCAPE_INTERMEDIATE);\n  // osc\n  table.add(0x5d, ParserState.ESCAPE, ParserAction.OSC_START, ParserState.OSC_STRING);\n  table.addMany(PRINTABLES, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n  table.add(0x7f, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n  table.addMany([0x9c, 0x1b, 0x18, 0x1a, 0x07], ParserState.OSC_STRING, ParserAction.OSC_END, ParserState.GROUND);\n  table.addMany(r(0x1c, 0x20), ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n  // sos/pm/apc does nothing\n  table.addMany([0x58, 0x5e, 0x5f], ParserState.ESCAPE, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n  table.addMany(PRINTABLES, ParserState.SOS_PM_APC_STRING, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n  table.addMany(EXECUTABLES, ParserState.SOS_PM_APC_STRING, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n  table.add(0x9c, ParserState.SOS_PM_APC_STRING, ParserAction.IGNORE, ParserState.GROUND);\n  table.add(0x7f, ParserState.SOS_PM_APC_STRING, ParserAction.IGNORE, ParserState.SOS_PM_APC_STRING);\n  // csi entries\n  table.add(0x5b, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.CSI_ENTRY);\n  table.addMany(r(0x40, 0x7f), ParserState.CSI_ENTRY, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x30, 0x3c), ParserState.CSI_ENTRY, ParserAction.PARAM, ParserState.CSI_PARAM);\n  table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_PARAM);\n  table.addMany(r(0x30, 0x3c), ParserState.CSI_PARAM, ParserAction.PARAM, ParserState.CSI_PARAM);\n  table.addMany(r(0x40, 0x7f), ParserState.CSI_PARAM, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n  table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.addMany(r(0x20, 0x40), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.add(0x7f, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.addMany(r(0x40, 0x7f), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.GROUND);\n  table.addMany(r(0x20, 0x30), ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n  table.addMany(r(0x20, 0x30), ParserState.CSI_INTERMEDIATE, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n  table.addMany(r(0x30, 0x40), ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.addMany(r(0x40, 0x7f), ParserState.CSI_INTERMEDIATE, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x20, 0x30), ParserState.CSI_PARAM, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n  // esc_intermediate\n  table.addMany(r(0x20, 0x30), ParserState.ESCAPE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n  table.addMany(r(0x20, 0x30), ParserState.ESCAPE_INTERMEDIATE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n  table.addMany(r(0x30, 0x7f), ParserState.ESCAPE_INTERMEDIATE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x30, 0x50), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x51, 0x58), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  table.addMany([0x59, 0x5a, 0x5c], ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  table.addMany(r(0x60, 0x7f), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n  // dcs entry\n  table.add(0x50, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.DCS_ENTRY);\n  table.addMany(EXECUTABLES, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n  table.add(0x7f, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n  table.addMany(r(0x1c, 0x20), ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n  table.addMany(r(0x20, 0x30), ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n  table.addMany(r(0x30, 0x3c), ParserState.DCS_ENTRY, ParserAction.PARAM, ParserState.DCS_PARAM);\n  table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_PARAM);\n  table.addMany(EXECUTABLES, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(r(0x20, 0x80), ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(r(0x1c, 0x20), ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(EXECUTABLES, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n  table.add(0x7f, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n  table.addMany(r(0x1c, 0x20), ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n  table.addMany(r(0x30, 0x3c), ParserState.DCS_PARAM, ParserAction.PARAM, ParserState.DCS_PARAM);\n  table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(r(0x20, 0x30), ParserState.DCS_PARAM, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n  table.addMany(EXECUTABLES, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n  table.add(0x7f, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n  table.addMany(r(0x1c, 0x20), ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n  table.addMany(r(0x20, 0x30), ParserState.DCS_INTERMEDIATE, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n  table.addMany(r(0x30, 0x40), ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.addMany(r(0x40, 0x7f), ParserState.DCS_INTERMEDIATE, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n  table.addMany(r(0x40, 0x7f), ParserState.DCS_PARAM, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n  table.addMany(r(0x40, 0x7f), ParserState.DCS_ENTRY, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n  table.addMany(EXECUTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n  table.addMany(PRINTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n  table.add(0x7f, ParserState.DCS_PASSTHROUGH, ParserAction.IGNORE, ParserState.DCS_PASSTHROUGH);\n  table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.DCS_PASSTHROUGH, ParserAction.DCS_UNHOOK, ParserState.GROUND);\n  // special handling of unicode chars\n  table.add(NON_ASCII_PRINTABLE, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n  table.add(NON_ASCII_PRINTABLE, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n  table.add(NON_ASCII_PRINTABLE, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n  table.add(NON_ASCII_PRINTABLE, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n  table.add(NON_ASCII_PRINTABLE, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n  return table;\n})();\n\n\n/**\n * EscapeSequenceParser.\n * This class implements the ANSI/DEC compatible parser described by\n * Paul Williams (https://vt100.net/emu/dec_ansi_parser).\n *\n * To implement custom ANSI compliant escape sequences it is not needed to\n * alter this parser, instead consider registering a custom handler.\n * For non ANSI compliant sequences change the transition table with\n * the optional `transitions` constructor argument and\n * reimplement the `parse` method.\n *\n * This parser is currently hardcoded to operate in ZDM (Zero Default Mode)\n * as suggested by the original parser, thus empty parameters are set to 0.\n * This this is not in line with the latest ECMA-48 specification\n * (ZDM was part of the early specs and got completely removed later on).\n *\n * Other than the original parser from vt100.net this parser supports\n * sub parameters in digital parameters separated by colons. Empty sub parameters\n * are set to -1 (no ZDM for sub parameters).\n *\n * About prefix and intermediate bytes:\n * This parser follows the assumptions of the vt100.net parser with these restrictions:\n * - only one prefix byte is allowed as first parameter byte, byte range 0x3c .. 0x3f\n * - max. two intermediates are respected, byte range 0x20 .. 0x2f\n * Note that this is not in line with ECMA-48 which does not limit either of those.\n * Furthermore ECMA-48 allows the prefix byte range at any param byte position. Currently\n * there are no known sequences that follow the broader definition of the specification.\n *\n * TODO: implement error recovery hook via error handler return values\n */\nexport class EscapeSequenceParser extends Disposable implements IEscapeSequenceParser {\n  public initialState: number;\n  public currentState: number;\n  public precedingJoinState: number; // UnicodeJoinProperties\n\n  // buffers over several parse calls\n  protected _params: Params;\n  protected _collect: number;\n\n  // handler lookup containers\n  protected _printHandler: PrintHandlerType;\n  protected _executeHandlers: { [flag: number]: ExecuteHandlerType };\n  protected _csiHandlers: IHandlerCollection<CsiHandlerType>;\n  protected _escHandlers: IHandlerCollection<EscHandlerType>;\n  protected readonly _oscParser: IOscParser;\n  protected readonly _dcsParser: IDcsParser;\n  protected _errorHandler: (state: IParsingState) => IParsingState;\n\n  // fallback handlers\n  protected _printHandlerFb: PrintFallbackHandlerType;\n  protected _executeHandlerFb: ExecuteFallbackHandlerType;\n  protected _csiHandlerFb: CsiFallbackHandlerType;\n  protected _escHandlerFb: EscFallbackHandlerType;\n  protected _errorHandlerFb: (state: IParsingState) => IParsingState;\n\n  // parser stack save for async handler support\n  protected _parseStack: IParserStackState = {\n    state: ParserStackType.NONE,\n    handlers: [],\n    handlerPos: 0,\n    transition: 0,\n    chunkPos: 0\n  };\n\n  constructor(\n    protected readonly _transitions: TransitionTable = VT500_TRANSITION_TABLE\n  ) {\n    super();\n\n    this.initialState = ParserState.GROUND;\n    this.currentState = this.initialState;\n    this._params = new Params(); // defaults to 32 storable params/subparams\n    this._params.addParam(0);    // ZDM\n    this._collect = 0;\n    this.precedingJoinState = 0;\n\n    // set default fallback handlers and handler lookup containers\n    this._printHandlerFb = (data, start, end): void => { };\n    this._executeHandlerFb = (code: number): void => { };\n    this._csiHandlerFb = (ident: number, params: IParams): void => { };\n    this._escHandlerFb = (ident: number): void => { };\n    this._errorHandlerFb = (state: IParsingState): IParsingState => state;\n    this._printHandler = this._printHandlerFb;\n    this._executeHandlers = Object.create(null);\n    this._csiHandlers = Object.create(null);\n    this._escHandlers = Object.create(null);\n    this._register(toDisposable(() => {\n      this._csiHandlers = Object.create(null);\n      this._executeHandlers = Object.create(null);\n      this._escHandlers = Object.create(null);\n    }));\n    this._oscParser = this._register(new OscParser());\n    this._dcsParser = this._register(new DcsParser());\n    this._errorHandler = this._errorHandlerFb;\n\n    // swallow 7bit ST (ESC+\\)\n    this.registerEscHandler({ final: '\\\\' }, () => true);\n  }\n\n  protected _identifier(id: IFunctionIdentifier, finalRange: number[] = [0x40, 0x7e]): number {\n    let res = 0;\n    if (id.prefix) {\n      if (id.prefix.length > 1) {\n        throw new Error('only one byte as prefix supported');\n      }\n      res = id.prefix.charCodeAt(0);\n      if (res && 0x3c > res || res > 0x3f) {\n        throw new Error('prefix must be in range 0x3c .. 0x3f');\n      }\n    }\n    if (id.intermediates) {\n      if (id.intermediates.length > 2) {\n        throw new Error('only two bytes as intermediates are supported');\n      }\n      for (let i = 0; i < id.intermediates.length; ++i) {\n        const intermediate = id.intermediates.charCodeAt(i);\n        if (0x20 > intermediate || intermediate > 0x2f) {\n          throw new Error('intermediate must be in range 0x20 .. 0x2f');\n        }\n        res <<= 8;\n        res |= intermediate;\n      }\n    }\n    if (id.final.length !== 1) {\n      throw new Error('final must be a single byte');\n    }\n    const finalCode = id.final.charCodeAt(0);\n    if (finalRange[0] > finalCode || finalCode > finalRange[1]) {\n      throw new Error(`final must be in range ${finalRange[0]} .. ${finalRange[1]}`);\n    }\n    res <<= 8;\n    res |= finalCode;\n\n    return res;\n  }\n\n  public identToString(ident: number): string {\n    const res: string[] = [];\n    while (ident) {\n      res.push(String.fromCharCode(ident & 0xFF));\n      ident >>= 8;\n    }\n    return res.reverse().join('');\n  }\n\n  public setPrintHandler(handler: PrintHandlerType): void {\n    this._printHandler = handler;\n  }\n  public clearPrintHandler(): void {\n    this._printHandler = this._printHandlerFb;\n  }\n\n  public registerEscHandler(id: IFunctionIdentifier, handler: EscHandlerType): IDisposable {\n    const ident = this._identifier(id, [0x30, 0x7e]);\n    if (this._escHandlers[ident] === undefined) {\n      this._escHandlers[ident] = [];\n    }\n    const handlerList = this._escHandlers[ident];\n    handlerList.push(handler);\n    return {\n      dispose: () => {\n        const handlerIndex = handlerList.indexOf(handler);\n        if (handlerIndex !== -1) {\n          handlerList.splice(handlerIndex, 1);\n        }\n      }\n    };\n  }\n  public clearEscHandler(id: IFunctionIdentifier): void {\n    if (this._escHandlers[this._identifier(id, [0x30, 0x7e])]) delete this._escHandlers[this._identifier(id, [0x30, 0x7e])];\n  }\n  public setEscHandlerFallback(handler: EscFallbackHandlerType): void {\n    this._escHandlerFb = handler;\n  }\n\n  public setExecuteHandler(flag: string, handler: ExecuteHandlerType): void {\n    this._executeHandlers[flag.charCodeAt(0)] = handler;\n  }\n  public clearExecuteHandler(flag: string): void {\n    if (this._executeHandlers[flag.charCodeAt(0)]) delete this._executeHandlers[flag.charCodeAt(0)];\n  }\n  public setExecuteHandlerFallback(handler: ExecuteFallbackHandlerType): void {\n    this._executeHandlerFb = handler;\n  }\n\n  public registerCsiHandler(id: IFunctionIdentifier, handler: CsiHandlerType): IDisposable {\n    const ident = this._identifier(id);\n    if (this._csiHandlers[ident] === undefined) {\n      this._csiHandlers[ident] = [];\n    }\n    const handlerList = this._csiHandlers[ident];\n    handlerList.push(handler);\n    return {\n      dispose: () => {\n        const handlerIndex = handlerList.indexOf(handler);\n        if (handlerIndex !== -1) {\n          handlerList.splice(handlerIndex, 1);\n        }\n      }\n    };\n  }\n  public clearCsiHandler(id: IFunctionIdentifier): void {\n    if (this._csiHandlers[this._identifier(id)]) delete this._csiHandlers[this._identifier(id)];\n  }\n  public setCsiHandlerFallback(callback: (ident: number, params: IParams) => void): void {\n    this._csiHandlerFb = callback;\n  }\n\n  public registerDcsHandler(id: IFunctionIdentifier, handler: IDcsHandler): IDisposable {\n    return this._dcsParser.registerHandler(this._identifier(id), handler);\n  }\n  public clearDcsHandler(id: IFunctionIdentifier): void {\n    this._dcsParser.clearHandler(this._identifier(id));\n  }\n  public setDcsHandlerFallback(handler: DcsFallbackHandlerType): void {\n    this._dcsParser.setHandlerFallback(handler);\n  }\n\n  public registerOscHandler(ident: number, handler: IOscHandler): IDisposable {\n    return this._oscParser.registerHandler(ident, handler);\n  }\n  public clearOscHandler(ident: number): void {\n    this._oscParser.clearHandler(ident);\n  }\n  public setOscHandlerFallback(handler: OscFallbackHandlerType): void {\n    this._oscParser.setHandlerFallback(handler);\n  }\n\n  public setErrorHandler(callback: (state: IParsingState) => IParsingState): void {\n    this._errorHandler = callback;\n  }\n  public clearErrorHandler(): void {\n    this._errorHandler = this._errorHandlerFb;\n  }\n\n  /**\n   * Reset parser to initial values.\n   *\n   * This can also be used to lift the improper continuation error condition\n   * when dealing with async handlers. Use this only as a last resort to silence\n   * that error when the terminal has no pending data to be processed. Note that\n   * the interrupted async handler might continue its work in the future messing\n   * up the terminal state even further.\n   */\n  public reset(): void {\n    this.currentState = this.initialState;\n    this._oscParser.reset();\n    this._dcsParser.reset();\n    this._params.reset();\n    this._params.addParam(0); // ZDM\n    this._collect = 0;\n    this.precedingJoinState = 0;\n    // abort pending continuation from async handler\n    // Here the RESET type indicates, that the next parse call will\n    // ignore any saved stack, instead continues sync with next codepoint from GROUND\n    if (this._parseStack.state !== ParserStackType.NONE) {\n      this._parseStack.state = ParserStackType.RESET;\n      this._parseStack.handlers = []; // also release handlers ref\n    }\n  }\n\n  /**\n   * Async parse support.\n   */\n  protected _preserveStack(\n    state: ParserStackType,\n    handlers: ResumableHandlersType,\n    handlerPos: number,\n    transition: number,\n    chunkPos: number\n  ): void {\n    this._parseStack.state = state;\n    this._parseStack.handlers = handlers;\n    this._parseStack.handlerPos = handlerPos;\n    this._parseStack.transition = transition;\n    this._parseStack.chunkPos = chunkPos;\n  }\n\n  /**\n   * Parse UTF32 codepoints in `data` up to `length`.\n   *\n   * Note: For several actions with high data load the parsing is optimized\n   * by using local read ahead loops with hardcoded conditions to\n   * avoid costly table lookups. Make sure that any change of table values\n   * will be reflected in the loop conditions as well and vice versa.\n   * Affected states/actions:\n   * - GROUND:PRINT\n   * - CSI_PARAM:PARAM\n   * - DCS_PARAM:PARAM\n   * - OSC_STRING:OSC_PUT\n   * - DCS_PASSTHROUGH:DCS_PUT\n   *\n   * Note on asynchronous handler support:\n   * Any handler returning a promise will be treated as asynchronous.\n   * To keep the in-band blocking working for async handlers, `parse` pauses execution,\n   * creates a stack save and returns the promise to the caller.\n   * For proper continuation of the paused state it is important\n   * to await the promise resolving. On resolve the parse must be repeated\n   * with the same chunk of data and the resolved value in `promiseResult`\n   * until no promise is returned.\n   *\n   * Important: With only sync handlers defined, parsing is completely synchronous as well.\n   * As soon as an async handler is involved, synchronous parsing is not possible anymore.\n   *\n   * Boilerplate for proper parsing of multiple chunks with async handlers:\n   *\n   * ```typescript\n   * async function parseMultipleChunks(chunks: Uint32Array[]): Promise<void> {\n   *   for (const chunk of chunks) {\n   *     let result: void | Promise<boolean>;\n   *     let prev: boolean | undefined;\n   *     while (result = parser.parse(chunk, chunk.length, prev)) {\n   *       prev = await result;\n   *     }\n   *   }\n   *   // finished parsing all chunks...\n   * }\n   * ```\n   */\n  public parse(data: Uint32Array, length: number, promiseResult?: boolean): void | Promise<boolean> {\n    let code = 0;\n    let transition = 0;\n    let start = 0;\n    let handlerResult: void | boolean | Promise<boolean>;\n\n    // resume from async handler\n    if (this._parseStack.state) {\n      // allow sync parser reset even in continuation mode\n      // Note: can be used to recover parser from improper continuation error below\n      if (this._parseStack.state === ParserStackType.RESET) {\n        this._parseStack.state = ParserStackType.NONE;\n        start = this._parseStack.chunkPos + 1; // continue with next codepoint in GROUND\n      } else {\n        if (promiseResult === undefined || this._parseStack.state === ParserStackType.FAIL) {\n          /**\n           * Reject further parsing on improper continuation after pausing. This is a really bad\n           * condition with screwed up execution order and prolly messed up terminal state,\n           * therefore we exit hard with an exception and reject any further parsing.\n           *\n           * Note: With `Terminal.write` usage this exception should never occur, as the top level\n           * calls are guaranteed to handle async conditions properly. If you ever encounter this\n           * exception in your terminal integration it indicates, that you injected data chunks to\n           * `InputHandler.parse` or `EscapeSequenceParser.parse` synchronously without waiting for\n           * continuation of a running async handler.\n           *\n           * It is possible to get rid of this error by calling `reset`. But dont rely on that, as\n           * the pending async handler still might mess up the terminal later. Instead fix the\n           * faulty async handling, so this error will not be thrown anymore.\n           */\n          this._parseStack.state = ParserStackType.FAIL;\n          throw new Error('improper continuation due to previous async handler, giving up parsing');\n        }\n\n        // we have to resume the old handler loop if:\n        // - return value of the promise was `false`\n        // - handlers are not exhausted yet\n        const handlers = this._parseStack.handlers;\n        let handlerPos = this._parseStack.handlerPos - 1;\n        switch (this._parseStack.state) {\n          case ParserStackType.CSI:\n            if (promiseResult === false && handlerPos > -1) {\n              for (; handlerPos >= 0; handlerPos--) {\n                handlerResult = (handlers as CsiHandlerType[])[handlerPos](this._params);\n                if (handlerResult === true) {\n                  break;\n                } else if (handlerResult instanceof Promise) {\n                  this._parseStack.handlerPos = handlerPos;\n                  return handlerResult;\n                }\n              }\n            }\n            this._parseStack.handlers = [];\n            break;\n          case ParserStackType.ESC:\n            if (promiseResult === false && handlerPos > -1) {\n              for (; handlerPos >= 0; handlerPos--) {\n                handlerResult = (handlers as EscHandlerType[])[handlerPos]();\n                if (handlerResult === true) {\n                  break;\n                } else if (handlerResult instanceof Promise) {\n                  this._parseStack.handlerPos = handlerPos;\n                  return handlerResult;\n                }\n              }\n            }\n            this._parseStack.handlers = [];\n            break;\n          case ParserStackType.DCS:\n            code = data[this._parseStack.chunkPos];\n            handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a, promiseResult);\n            if (handlerResult) {\n              return handlerResult;\n            }\n            if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n            this._params.reset();\n            this._params.addParam(0); // ZDM\n            this._collect = 0;\n            break;\n          case ParserStackType.OSC:\n            code = data[this._parseStack.chunkPos];\n            handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n            if (handlerResult) {\n              return handlerResult;\n            }\n            if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n            this._params.reset();\n            this._params.addParam(0); // ZDM\n            this._collect = 0;\n            break;\n        }\n        // cleanup before continuing with the main sync loop\n        this._parseStack.state = ParserStackType.NONE;\n        start = this._parseStack.chunkPos + 1;\n        this.precedingJoinState = 0;\n        this.currentState = this._parseStack.transition & TableAccess.TRANSITION_STATE_MASK;\n      }\n    }\n\n    // continue with main sync loop\n\n    // process input string\n    for (let i = start; i < length; ++i) {\n      code = data[i];\n\n      // normal transition & action lookup\n      transition = this._transitions.table[this.currentState << TableAccess.INDEX_STATE_SHIFT | (code < 0xa0 ? code : NON_ASCII_PRINTABLE)];\n      switch (transition >> TableAccess.TRANSITION_ACTION_SHIFT) {\n        case ParserAction.PRINT:\n          // read ahead with loop unrolling\n          // Note: 0x20 (SP) is included, 0x7F (DEL) is excluded\n          for (let j = i + 1; ; ++j) {\n            if (j >= length || (code = data[j]) < 0x20 || (code > 0x7e && code < NON_ASCII_PRINTABLE)) {\n              this._printHandler(data, i, j);\n              i = j - 1;\n              break;\n            }\n            if (++j >= length || (code = data[j]) < 0x20 || (code > 0x7e && code < NON_ASCII_PRINTABLE)) {\n              this._printHandler(data, i, j);\n              i = j - 1;\n              break;\n            }\n            if (++j >= length || (code = data[j]) < 0x20 || (code > 0x7e && code < NON_ASCII_PRINTABLE)) {\n              this._printHandler(data, i, j);\n              i = j - 1;\n              break;\n            }\n            if (++j >= length || (code = data[j]) < 0x20 || (code > 0x7e && code < NON_ASCII_PRINTABLE)) {\n              this._printHandler(data, i, j);\n              i = j - 1;\n              break;\n            }\n          }\n          break;\n        case ParserAction.EXECUTE:\n          if (this._executeHandlers[code]) this._executeHandlers[code]();\n          else this._executeHandlerFb(code);\n          this.precedingJoinState = 0;\n          break;\n        case ParserAction.IGNORE:\n          break;\n        case ParserAction.ERROR:\n          const inject: IParsingState = this._errorHandler(\n            {\n              position: i,\n              code,\n              currentState: this.currentState,\n              collect: this._collect,\n              params: this._params,\n              abort: false\n            });\n          if (inject.abort) return;\n          // inject values: currently not implemented\n          break;\n        case ParserAction.CSI_DISPATCH:\n          // Trigger CSI Handler\n          const handlers = this._csiHandlers[this._collect << 8 | code];\n          let j = handlers ? handlers.length - 1 : -1;\n          for (; j >= 0; j--) {\n            // true means success and to stop bubbling\n            // a promise indicates an async handler that needs to finish before progressing\n            handlerResult = handlers[j](this._params);\n            if (handlerResult === true) {\n              break;\n            } else if (handlerResult instanceof Promise) {\n              this._preserveStack(ParserStackType.CSI, handlers, j, transition, i);\n              return handlerResult;\n            }\n          }\n          if (j < 0) {\n            this._csiHandlerFb(this._collect << 8 | code, this._params);\n          }\n          this.precedingJoinState = 0;\n          break;\n        case ParserAction.PARAM:\n          // inner loop: digits (0x30 - 0x39) and ; (0x3b) and : (0x3a)\n          do {\n            switch (code) {\n              case 0x3b:\n                this._params.addParam(0);  // ZDM\n                break;\n              case 0x3a:\n                this._params.addSubParam(-1);\n                break;\n              default:  // 0x30 - 0x39\n                this._params.addDigit(code - 48);\n            }\n          } while (++i < length && (code = data[i]) > 0x2f && code < 0x3c);\n          i--;\n          break;\n        case ParserAction.COLLECT:\n          this._collect <<= 8;\n          this._collect |= code;\n          break;\n        case ParserAction.ESC_DISPATCH:\n          const handlersEsc = this._escHandlers[this._collect << 8 | code];\n          let jj = handlersEsc ? handlersEsc.length - 1 : -1;\n          for (; jj >= 0; jj--) {\n            // true means success and to stop bubbling\n            // a promise indicates an async handler that needs to finish before progressing\n            handlerResult = handlersEsc[jj]();\n            if (handlerResult === true) {\n              break;\n            } else if (handlerResult instanceof Promise) {\n              this._preserveStack(ParserStackType.ESC, handlersEsc, jj, transition, i);\n              return handlerResult;\n            }\n          }\n          if (jj < 0) {\n            this._escHandlerFb(this._collect << 8 | code);\n          }\n          this.precedingJoinState = 0;\n          break;\n        case ParserAction.CLEAR:\n          this._params.reset();\n          this._params.addParam(0); // ZDM\n          this._collect = 0;\n          break;\n        case ParserAction.DCS_HOOK:\n          this._dcsParser.hook(this._collect << 8 | code, this._params);\n          break;\n        case ParserAction.DCS_PUT:\n          // inner loop - exit DCS_PUT: 0x18, 0x1a, 0x1b, 0x7f, 0x80 - 0x9f\n          // unhook triggered by: 0x1b, 0x9c (success) and 0x18, 0x1a (abort)\n          for (let j = i + 1; ; ++j) {\n            if (j >= length || (code = data[j]) === 0x18 || code === 0x1a || code === 0x1b || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n              this._dcsParser.put(data, i, j);\n              i = j - 1;\n              break;\n            }\n          }\n          break;\n        case ParserAction.DCS_UNHOOK:\n          handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a);\n          if (handlerResult) {\n            this._preserveStack(ParserStackType.DCS, [], 0, transition, i);\n            return handlerResult;\n          }\n          if (code === 0x1b) transition |= ParserState.ESCAPE;\n          this._params.reset();\n          this._params.addParam(0); // ZDM\n          this._collect = 0;\n          this.precedingJoinState = 0;\n          break;\n        case ParserAction.OSC_START:\n          this._oscParser.start();\n          break;\n        case ParserAction.OSC_PUT:\n          // inner loop: 0x20 (SP) included, 0x7F (DEL) included\n          for (let j = i + 1; ; j++) {\n            if (j >= length || (code = data[j]) < 0x20 || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n              this._oscParser.put(data, i, j);\n              i = j - 1;\n              break;\n            }\n          }\n          break;\n        case ParserAction.OSC_END:\n          handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a);\n          if (handlerResult) {\n            this._preserveStack(ParserStackType.OSC, [], 0, transition, i);\n            return handlerResult;\n          }\n          if (code === 0x1b) transition |= ParserState.ESCAPE;\n          this._params.reset();\n          this._params.addParam(0); // ZDM\n          this._collect = 0;\n          this.precedingJoinState = 0;\n          break;\n      }\n      this.currentState = transition & TableAccess.TRANSITION_STATE_MASK;\n    }\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOscHandler, IHandlerCollection, OscFallbackHandlerType, IOscParser, ISubParserStackState } from 'common/parser/Types';\nimport { OscState, PAYLOAD_LIMIT } from 'common/parser/Constants';\nimport { utf32ToString } from 'common/input/TextDecoder';\nimport { IDisposable } from 'common/Types';\n\nconst EMPTY_HANDLERS: IOscHandler[] = [];\n\nexport class OscParser implements IOscParser {\n  private _state = OscState.START;\n  private _active = EMPTY_HANDLERS;\n  private _id = -1;\n  private _handlers: IHandlerCollection<IOscHandler> = Object.create(null);\n  private _handlerFb: OscFallbackHandlerType = () => { };\n  private _stack: ISubParserStackState = {\n    paused: false,\n    loopPosition: 0,\n    fallThrough: false\n  };\n\n  public registerHandler(ident: number, handler: IOscHandler): IDisposable {\n    if (this._handlers[ident] === undefined) {\n      this._handlers[ident] = [];\n    }\n    const handlerList = this._handlers[ident];\n    handlerList.push(handler);\n    return {\n      dispose: () => {\n        const handlerIndex = handlerList.indexOf(handler);\n        if (handlerIndex !== -1) {\n          handlerList.splice(handlerIndex, 1);\n        }\n      }\n    };\n  }\n  public clearHandler(ident: number): void {\n    if (this._handlers[ident]) delete this._handlers[ident];\n  }\n  public setHandlerFallback(handler: OscFallbackHandlerType): void {\n    this._handlerFb = handler;\n  }\n\n  public dispose(): void {\n    this._handlers = Object.create(null);\n    this._handlerFb = () => { };\n    this._active = EMPTY_HANDLERS;\n  }\n\n  public reset(): void {\n    // force cleanup handlers if payload was already sent\n    if (this._state === OscState.PAYLOAD) {\n      for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n        this._active[j].end(false);\n      }\n    }\n    this._stack.paused = false;\n    this._active = EMPTY_HANDLERS;\n    this._id = -1;\n    this._state = OscState.START;\n  }\n\n  private _start(): void {\n    this._active = this._handlers[this._id] || EMPTY_HANDLERS;\n    if (!this._active.length) {\n      this._handlerFb(this._id, 'START');\n    } else {\n      for (let j = this._active.length - 1; j >= 0; j--) {\n        this._active[j].start();\n      }\n    }\n  }\n\n  private _put(data: Uint32Array, start: number, end: number): void {\n    if (!this._active.length) {\n      this._handlerFb(this._id, 'PUT', utf32ToString(data, start, end));\n    } else {\n      for (let j = this._active.length - 1; j >= 0; j--) {\n        this._active[j].put(data, start, end);\n      }\n    }\n  }\n\n  public start(): void {\n    // always reset leftover handlers\n    this.reset();\n    this._state = OscState.ID;\n  }\n\n  /**\n   * Put data to current OSC command.\n   * Expects the identifier of the OSC command in the form\n   * OSC id ; payload ST/BEL\n   * Payload chunks are not further processed and get\n   * directly passed to the handlers.\n   */\n  public put(data: Uint32Array, start: number, end: number): void {\n    if (this._state === OscState.ABORT) {\n      return;\n    }\n    if (this._state === OscState.ID) {\n      while (start < end) {\n        const code = data[start++];\n        if (code === 0x3b) {\n          this._state = OscState.PAYLOAD;\n          this._start();\n          break;\n        }\n        if (code < 0x30 || 0x39 < code) {\n          this._state = OscState.ABORT;\n          return;\n        }\n        if (this._id === -1) {\n          this._id = 0;\n        }\n        this._id = this._id * 10 + code - 48;\n      }\n    }\n    if (this._state === OscState.PAYLOAD && end - start > 0) {\n      this._put(data, start, end);\n    }\n  }\n\n  /**\n   * Indicates end of an OSC command.\n   * Whether the OSC got aborted or finished normally\n   * is indicated by `success`.\n   */\n  public end(success: boolean, promiseResult: boolean = true): void | Promise<boolean> {\n    if (this._state === OscState.START) {\n      return;\n    }\n    // do nothing if command was faulty\n    if (this._state !== OscState.ABORT) {\n      // if we are still in ID state and get an early end\n      // means that the command has no payload thus we still have\n      // to announce START and send END right after\n      if (this._state === OscState.ID) {\n        this._start();\n      }\n\n      if (!this._active.length) {\n        this._handlerFb(this._id, 'END', success);\n      } else {\n        let handlerResult: boolean | Promise<boolean> = false;\n        let j = this._active.length - 1;\n        let fallThrough = false;\n        if (this._stack.paused) {\n          j = this._stack.loopPosition - 1;\n          handlerResult = promiseResult;\n          fallThrough = this._stack.fallThrough;\n          this._stack.paused = false;\n        }\n        if (!fallThrough && handlerResult === false) {\n          for (; j >= 0; j--) {\n            handlerResult = this._active[j].end(success);\n            if (handlerResult === true) {\n              break;\n            } else if (handlerResult instanceof Promise) {\n              this._stack.paused = true;\n              this._stack.loopPosition = j;\n              this._stack.fallThrough = false;\n              return handlerResult;\n            }\n          }\n          j--;\n        }\n        // cleanup left over handlers\n        // we always have to call .end for proper cleanup,\n        // here we use `success` to indicate whether a handler should execute\n        for (; j >= 0; j--) {\n          handlerResult = this._active[j].end(false);\n          if (handlerResult instanceof Promise) {\n            this._stack.paused = true;\n            this._stack.loopPosition = j;\n            this._stack.fallThrough = true;\n            return handlerResult;\n          }\n        }\n      }\n\n    }\n    this._active = EMPTY_HANDLERS;\n    this._id = -1;\n    this._state = OscState.START;\n  }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as OSC handlers.\n */\nexport class OscHandler implements IOscHandler {\n  private _data = '';\n  private _hitLimit: boolean = false;\n\n  constructor(private _handler: (data: string) => boolean | Promise<boolean>) { }\n\n  public start(): void {\n    this._data = '';\n    this._hitLimit = false;\n  }\n\n  public put(data: Uint32Array, start: number, end: number): void {\n    if (this._hitLimit) {\n      return;\n    }\n    this._data += utf32ToString(data, start, end);\n    if (this._data.length > PAYLOAD_LIMIT) {\n      this._data = '';\n      this._hitLimit = true;\n    }\n  }\n\n  public end(success: boolean): boolean | Promise<boolean> {\n    let ret: boolean | Promise<boolean> = false;\n    if (this._hitLimit) {\n      ret = false;\n    } else if (success) {\n      ret = this._handler(this._data);\n      if (ret instanceof Promise) {\n        // need to hold data until `ret` got resolved\n        // dont care for errors, data will be freed anyway on next start\n        return ret.then(res => {\n          this._data = '';\n          this._hitLimit = false;\n          return res;\n        });\n      }\n    }\n    this._data = '';\n    this._hitLimit = false;\n    return ret;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IParams, ParamsArray } from 'common/parser/Types';\n\n// max value supported for a single param/subparam (clamped to positive int32 range)\nconst MAX_VALUE = 0x7FFFFFFF;\n// max allowed subparams for a single sequence (hardcoded limitation)\nconst MAX_SUBPARAMS = 256;\n\n/**\n * Params storage class.\n * This type is used by the parser to accumulate sequence parameters and sub parameters\n * and transmit them to the input handler actions.\n *\n * NOTES:\n *  - params object for action handlers is borrowed, use `.toArray` or `.clone` to get a copy\n *  - never read beyond `params.length - 1` (likely to contain arbitrary data)\n *  - `.getSubParams` returns a borrowed typed array, use `.getSubParamsAll` for cloned sub params\n *  - hardcoded limitations:\n *    - max. value for a single (sub) param is 2^31 - 1 (greater values are clamped to that)\n *    - max. 256 sub params possible\n *    - negative values are not allowed beside -1 (placeholder for default value)\n *\n * About ZDM (Zero Default Mode):\n * ZDM is not orchestrated by this class. If the parser is in ZDM,\n * it should add 0 for empty params, otherwise -1. This does not apply\n * to subparams, empty subparams should always be added with -1.\n */\nexport class Params implements IParams {\n  // params store and length\n  public params: Int32Array;\n  public length: number;\n\n  // sub params store and length\n  protected _subParams: Int32Array;\n  protected _subParamsLength: number;\n\n  // sub params offsets from param: param idx --> [start, end] offset\n  private _subParamsIdx: Uint16Array;\n  private _rejectDigits: boolean;\n  private _rejectSubDigits: boolean;\n  private _digitIsSub: boolean;\n\n  /**\n   * Create a `Params` type from JS array representation.\n   */\n  public static fromArray(values: ParamsArray): Params {\n    const params = new Params();\n    if (!values.length) {\n      return params;\n    }\n    // skip leading sub params\n    for (let i = (Array.isArray(values[0])) ? 1 : 0; i < values.length; ++i) {\n      const value = values[i];\n      if (Array.isArray(value)) {\n        for (let k = 0; k < value.length; ++k) {\n          params.addSubParam(value[k]);\n        }\n      } else {\n        params.addParam(value);\n      }\n    }\n    return params;\n  }\n\n  /**\n   * @param maxLength max length of storable parameters\n   * @param maxSubParamsLength max length of storable sub parameters\n   */\n  constructor(public maxLength: number = 32, public maxSubParamsLength: number = 32) {\n    if (maxSubParamsLength > MAX_SUBPARAMS) {\n      throw new Error('maxSubParamsLength must not be greater than 256');\n    }\n    this.params = new Int32Array(maxLength);\n    this.length = 0;\n    this._subParams = new Int32Array(maxSubParamsLength);\n    this._subParamsLength = 0;\n    this._subParamsIdx = new Uint16Array(maxLength);\n    this._rejectDigits = false;\n    this._rejectSubDigits = false;\n    this._digitIsSub = false;\n  }\n\n  /**\n   * Clone object.\n   */\n  public clone(): Params {\n    const newParams = new Params(this.maxLength, this.maxSubParamsLength);\n    newParams.params.set(this.params);\n    newParams.length = this.length;\n    newParams._subParams.set(this._subParams);\n    newParams._subParamsLength = this._subParamsLength;\n    newParams._subParamsIdx.set(this._subParamsIdx);\n    newParams._rejectDigits = this._rejectDigits;\n    newParams._rejectSubDigits = this._rejectSubDigits;\n    newParams._digitIsSub = this._digitIsSub;\n    return newParams;\n  }\n\n  /**\n   * Get a JS array representation of the current parameters and sub parameters.\n   * The array is structured as follows:\n   *    sequence: \"1;2:3:4;5::6\"\n   *    array   : [1, 2, [3, 4], 5, [-1, 6]]\n   */\n  public toArray(): ParamsArray {\n    const res: ParamsArray = [];\n    for (let i = 0; i < this.length; ++i) {\n      res.push(this.params[i]);\n      const start = this._subParamsIdx[i] >> 8;\n      const end = this._subParamsIdx[i] & 0xFF;\n      if (end - start > 0) {\n        res.push(Array.prototype.slice.call(this._subParams, start, end));\n      }\n    }\n    return res;\n  }\n\n  /**\n   * Reset to initial empty state.\n   */\n  public reset(): void {\n    this.length = 0;\n    this._subParamsLength = 0;\n    this._rejectDigits = false;\n    this._rejectSubDigits = false;\n    this._digitIsSub = false;\n  }\n\n  /**\n   * Add a parameter value.\n   * `Params` only stores up to `maxLength` parameters, any later\n   * parameter will be ignored.\n   * Note: VT devices only stored up to 16 values, xterm seems to\n   * store up to 30.\n   */\n  public addParam(value: number): void {\n    this._digitIsSub = false;\n    if (this.length >= this.maxLength) {\n      this._rejectDigits = true;\n      return;\n    }\n    if (value < -1) {\n      throw new Error('values lesser than -1 are not allowed');\n    }\n    this._subParamsIdx[this.length] = this._subParamsLength << 8 | this._subParamsLength;\n    this.params[this.length++] = value > MAX_VALUE ? MAX_VALUE : value;\n  }\n\n  /**\n   * Add a sub parameter value.\n   * The sub parameter is automatically associated with the last parameter value.\n   * Thus it is not possible to add a subparameter without any parameter added yet.\n   * `Params` only stores up to `subParamsLength` sub parameters, any later\n   * sub parameter will be ignored.\n   */\n  public addSubParam(value: number): void {\n    this._digitIsSub = true;\n    if (!this.length) {\n      return;\n    }\n    if (this._rejectDigits || this._subParamsLength >= this.maxSubParamsLength) {\n      this._rejectSubDigits = true;\n      return;\n    }\n    if (value < -1) {\n      throw new Error('values lesser than -1 are not allowed');\n    }\n    this._subParams[this._subParamsLength++] = value > MAX_VALUE ? MAX_VALUE : value;\n    this._subParamsIdx[this.length - 1]++;\n  }\n\n  /**\n   * Whether parameter at index `idx` has sub parameters.\n   */\n  public hasSubParams(idx: number): boolean {\n    return ((this._subParamsIdx[idx] & 0xFF) - (this._subParamsIdx[idx] >> 8) > 0);\n  }\n\n  /**\n   * Return sub parameters for parameter at index `idx`.\n   * Note: The values are borrowed, thus you need to copy\n   * the values if you need to hold them in nonlocal scope.\n   */\n  public getSubParams(idx: number): Int32Array | null {\n    const start = this._subParamsIdx[idx] >> 8;\n    const end = this._subParamsIdx[idx] & 0xFF;\n    if (end - start > 0) {\n      return this._subParams.subarray(start, end);\n    }\n    return null;\n  }\n\n  /**\n   * Return all sub parameters as {idx: subparams} mapping.\n   * Note: The values are not borrowed.\n   */\n  public getSubParamsAll(): {[idx: number]: Int32Array} {\n    const result: {[idx: number]: Int32Array} = {};\n    for (let i = 0; i < this.length; ++i) {\n      const start = this._subParamsIdx[i] >> 8;\n      const end = this._subParamsIdx[i] & 0xFF;\n      if (end - start > 0) {\n        result[i] = this._subParams.slice(start, end);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Add a single digit value to current parameter.\n   * This is used by the parser to account digits on a char by char basis.\n   */\n  public addDigit(value: number): void {\n    let length;\n    if (this._rejectDigits\n      || !(length = this._digitIsSub ? this._subParamsLength : this.length)\n      || (this._digitIsSub && this._rejectSubDigits)\n    ) {\n      return;\n    }\n\n    const store = this._digitIsSub ? this._subParams : this.params;\n    const cur = store[length - 1];\n    store[length - 1] = ~cur ? Math.min(cur * 10 + value, MAX_VALUE) : value;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminalAddon, IDisposable, Terminal } from '@xterm/xterm';\n\nexport interface ILoadedAddon {\n  instance: ITerminalAddon;\n  dispose: () => void;\n  isDisposed: boolean;\n}\n\nexport class AddonManager implements IDisposable {\n  protected _addons: ILoadedAddon[] = [];\n\n  public dispose(): void {\n    for (let i = this._addons.length - 1; i >= 0; i--) {\n      this._addons[i].instance.dispose();\n    }\n  }\n\n  public loadAddon(terminal: Terminal, instance: ITerminalAddon): void {\n    const loadedAddon: ILoadedAddon = {\n      instance,\n      dispose: instance.dispose,\n      isDisposed: false\n    };\n    this._addons.push(loadedAddon);\n    instance.dispose = () => this._wrappedAddonDispose(loadedAddon);\n    instance.activate(terminal as any);\n  }\n\n  private _wrappedAddonDispose(loadedAddon: ILoadedAddon): void {\n    if (loadedAddon.isDisposed) {\n      // Do nothing if already disposed\n      return;\n    }\n    let index = -1;\n    for (let i = 0; i < this._addons.length; i++) {\n      if (this._addons[i] === loadedAddon) {\n        index = i;\n        break;\n      }\n    }\n    if (index === -1) {\n      throw new Error('Could not dispose an addon that has not been loaded');\n    }\n    loadedAddon.isDisposed = true;\n    loadedAddon.dispose.apply(loadedAddon.instance);\n    this._addons.splice(index, 1);\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferLine as IBufferLineApi, IBufferCell as IBufferCellApi } from '@xterm/xterm';\nimport { IBuffer } from 'common/buffer/Types';\nimport { BufferLineApiView } from 'common/public/BufferLineApiView';\nimport { CellData } from 'common/buffer/CellData';\n\nexport class BufferApiView implements IBufferApi {\n  constructor(\n    private _buffer: IBuffer,\n    public readonly type: 'normal' | 'alternate'\n  ) { }\n\n  public init(buffer: IBuffer): BufferApiView {\n    this._buffer = buffer;\n    return this;\n  }\n\n  public get cursorY(): number { return this._buffer.y; }\n  public get cursorX(): number { return this._buffer.x; }\n  public get viewportY(): number { return this._buffer.ydisp; }\n  public get baseY(): number { return this._buffer.ybase; }\n  public get length(): number { return this._buffer.lines.length; }\n  public getLine(y: number): IBufferLineApi | undefined {\n    const line = this._buffer.lines.get(y);\n    if (!line) {\n      return undefined;\n    }\n    return new BufferLineApiView(line);\n  }\n  public getNullCell(): IBufferCellApi { return new CellData(); }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CellData } from 'common/buffer/CellData';\nimport { IBufferLine, ICellData } from 'common/Types';\nimport { IBufferCell as IBufferCellApi, IBufferLine as IBufferLineApi } from '@xterm/xterm';\n\nexport class BufferLineApiView implements IBufferLineApi {\n  constructor(private _line: IBufferLine) { }\n\n  public get isWrapped(): boolean { return this._line.isWrapped; }\n  public get length(): number { return this._line.length; }\n  public getCell(x: number, cell?: IBufferCellApi): IBufferCellApi | undefined {\n    if (x < 0 || x >= this._line.length) {\n      return undefined;\n    }\n\n    if (cell) {\n      this._line.loadCell(x, cell as ICellData);\n      return cell;\n    }\n    return this._line.loadCell(x, new CellData());\n  }\n  public translateToString(trimRight?: boolean, startColumn?: number, endColumn?: number): string {\n    return this._line.translateToString(trimRight, startColumn, endColumn);\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferNamespace as IBufferNamespaceApi } from '@xterm/xterm';\nimport { BufferApiView } from 'common/public/BufferApiView';\nimport { ICoreTerminal } from 'common/Types';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { Emitter } from 'vs/base/common/event';\n\nexport class BufferNamespaceApi extends Disposable implements IBufferNamespaceApi {\n  private _normal: BufferApiView;\n  private _alternate: BufferApiView;\n\n  private readonly _onBufferChange = this._register(new Emitter<IBufferApi>());\n  public readonly onBufferChange = this._onBufferChange.event;\n\n  constructor(private _core: ICoreTerminal) {\n    super();\n    this._normal = new BufferApiView(this._core.buffers.normal, 'normal');\n    this._alternate = new BufferApiView(this._core.buffers.alt, 'alternate');\n    this._core.buffers.onBufferActivate(() => this._onBufferChange.fire(this.active));\n  }\n  public get active(): IBufferApi {\n    if (this._core.buffers.active === this._core.buffers.normal) { return this.normal; }\n    if (this._core.buffers.active === this._core.buffers.alt) { return this.alternate; }\n    throw new Error('Active buffer is neither normal nor alternate');\n  }\n  public get normal(): IBufferApi {\n    return this._normal.init(this._core.buffers.normal);\n  }\n  public get alternate(): IBufferApi {\n    return this._alternate.init(this._core.buffers.alt);\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParams } from 'common/parser/Types';\nimport { IDisposable, IFunctionIdentifier, IParser } from '@xterm/xterm';\nimport { ICoreTerminal } from 'common/Types';\n\nexport class ParserApi implements IParser {\n  constructor(private _core: ICoreTerminal) { }\n\n  public registerCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise<boolean>): IDisposable {\n    return this._core.registerCsiHandler(id, (params: IParams) => callback(params.toArray()));\n  }\n  public addCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise<boolean>): IDisposable {\n    return this.registerCsiHandler(id, callback);\n  }\n  public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise<boolean>): IDisposable {\n    return this._core.registerDcsHandler(id, (data: string, params: IParams) => callback(data, params.toArray()));\n  }\n  public addDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise<boolean>): IDisposable {\n    return this.registerDcsHandler(id, callback);\n  }\n  public registerEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise<boolean>): IDisposable {\n    return this._core.registerEscHandler(id, handler);\n  }\n  public addEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise<boolean>): IDisposable {\n    return this.registerEscHandler(id, handler);\n  }\n  public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise<boolean>): IDisposable {\n    return this._core.registerOscHandler(ident, callback);\n  }\n  public addOscHandler(ident: number, callback: (data: string) => boolean | Promise<boolean>): IDisposable {\n    return this.registerOscHandler(ident, callback);\n  }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreTerminal } from 'common/Types';\nimport { IUnicodeHandling, IUnicodeVersionProvider } from '@xterm/xterm';\n\nexport class UnicodeApi implements IUnicodeHandling {\n  constructor(private _core: ICoreTerminal) { }\n\n  public register(provider: IUnicodeVersionProvider): void {\n    this._core.unicodeService.register(provider);\n  }\n\n  public get versions(): string[] {\n    return this._core.unicodeService.versions;\n  }\n\n  public get activeVersion(): string {\n    return this._core.unicodeService.activeVersion;\n  }\n\n  public set activeVersion(version: string) {\n    this._core.unicodeService.activeVersion = version;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { IAttributeData, IBufferLine } from 'common/Types';\nimport { BufferSet } from 'common/buffer/BufferSet';\nimport { IBuffer, IBufferSet } from 'common/buffer/Types';\nimport { IBufferService, IOptionsService, type IBufferResizeEvent } from 'common/services/Services';\nimport { Emitter } from 'vs/base/common/event';\n\nexport const MINIMUM_COLS = 2; // Less than 2 can mess with wide chars\nexport const MINIMUM_ROWS = 1;\n\nexport class BufferService extends Disposable implements IBufferService {\n  public serviceBrand: any;\n\n  public cols: number;\n  public rows: number;\n  public buffers: IBufferSet;\n  /** Whether the user is scrolling (locks the scroll position) */\n  public isUserScrolling: boolean = false;\n\n  private readonly _onResize = this._register(new Emitter<IBufferResizeEvent>());\n  public readonly onResize = this._onResize.event;\n  private readonly _onScroll = this._register(new Emitter<number>());\n  public readonly onScroll = this._onScroll.event;\n\n  public get buffer(): IBuffer { return this.buffers.active; }\n\n  /** An IBufferline to clone/copy from for new blank lines */\n  private _cachedBlankLine: IBufferLine | undefined;\n\n  constructor(@IOptionsService optionsService: IOptionsService) {\n    super();\n    this.cols = Math.max(optionsService.rawOptions.cols || 0, MINIMUM_COLS);\n    this.rows = Math.max(optionsService.rawOptions.rows || 0, MINIMUM_ROWS);\n    this.buffers = this._register(new BufferSet(optionsService, this));\n    this._register(this.buffers.onBufferActivate(e => {\n      this._onScroll.fire(e.activeBuffer.ydisp);\n    }));\n  }\n\n  public resize(cols: number, rows: number): void {\n    const colsChanged = this.cols !== cols;\n    const rowsChanged = this.rows !== rows;\n    this.cols = cols;\n    this.rows = rows;\n    this.buffers.resize(cols, rows);\n    this._onResize.fire({ cols, rows, colsChanged, rowsChanged });\n  }\n\n  public reset(): void {\n    this.buffers.reset();\n    this.isUserScrolling = false;\n  }\n\n  /**\n   * Scroll the terminal down 1 row, creating a blank line.\n   * @param eraseAttr The attribute data to use the for blank line.\n   * @param isWrapped Whether the new line is wrapped from the previous line.\n   */\n  public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n    const buffer = this.buffer;\n\n    let newLine: IBufferLine | undefined;\n    newLine = this._cachedBlankLine;\n    if (!newLine || newLine.length !== this.cols || newLine.getFg(0) !== eraseAttr.fg || newLine.getBg(0) !== eraseAttr.bg) {\n      newLine = buffer.getBlankLine(eraseAttr, isWrapped);\n      this._cachedBlankLine = newLine;\n    }\n    newLine.isWrapped = isWrapped;\n\n    const topRow = buffer.ybase + buffer.scrollTop;\n    const bottomRow = buffer.ybase + buffer.scrollBottom;\n\n    if (buffer.scrollTop === 0) {\n      // Determine whether the buffer is going to be trimmed after insertion.\n      const willBufferBeTrimmed = buffer.lines.isFull;\n\n      // Insert the line using the fastest method\n      if (bottomRow === buffer.lines.length - 1) {\n        if (willBufferBeTrimmed) {\n          buffer.lines.recycle().copyFrom(newLine);\n        } else {\n          buffer.lines.push(newLine.clone());\n        }\n      } else {\n        buffer.lines.splice(bottomRow + 1, 0, newLine.clone());\n      }\n\n      // Only adjust ybase and ydisp when the buffer is not trimmed\n      if (!willBufferBeTrimmed) {\n        buffer.ybase++;\n        // Only scroll the ydisp with ybase if the user has not scrolled up\n        if (!this.isUserScrolling) {\n          buffer.ydisp++;\n        }\n      } else {\n        // When the buffer is full and the user has scrolled up, keep the text\n        // stable unless ydisp is right at the top\n        if (this.isUserScrolling) {\n          buffer.ydisp = Math.max(buffer.ydisp - 1, 0);\n        }\n      }\n    } else {\n      // scrollTop is non-zero which means no line will be going to the\n      // scrollback, instead we can just shift them in-place.\n      const scrollRegionHeight = bottomRow - topRow + 1 /* as it's zero-based */;\n      buffer.lines.shiftElements(topRow + 1, scrollRegionHeight - 1, -1);\n      buffer.lines.set(bottomRow, newLine.clone());\n    }\n\n    // Move the viewport to the bottom of the buffer unless the user is\n    // scrolling.\n    if (!this.isUserScrolling) {\n      buffer.ydisp = buffer.ybase;\n    }\n\n    this._onScroll.fire(buffer.ydisp);\n  }\n\n  /**\n   * Scroll the display of the terminal\n   * @param disp The number of lines to scroll down (negative scroll up).\n   * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used\n   * to avoid unwanted events being handled by the viewport when the event was triggered from the\n   * viewport originally.\n   */\n  public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n    const buffer = this.buffer;\n    if (disp < 0) {\n      if (buffer.ydisp === 0) {\n        return;\n      }\n      this.isUserScrolling = true;\n    } else if (disp + buffer.ydisp >= buffer.ybase) {\n      this.isUserScrolling = false;\n    }\n\n    const oldYdisp = buffer.ydisp;\n    buffer.ydisp = Math.max(Math.min(buffer.ydisp + disp, buffer.ybase), 0);\n\n    // No change occurred, don't trigger scroll/refresh\n    if (oldYdisp === buffer.ydisp) {\n      return;\n    }\n\n    if (!suppressScrollEvent) {\n      this._onScroll.fire(buffer.ydisp);\n    }\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharsetService } from 'common/services/Services';\nimport { ICharset } from 'common/Types';\n\nexport class CharsetService implements ICharsetService {\n  public serviceBrand: any;\n\n  public charset: ICharset | undefined;\n  public glevel: number = 0;\n\n  private _charsets: (ICharset | undefined)[] = [];\n\n  public reset(): void {\n    this.charset = undefined;\n    this._charsets = [];\n    this.glevel = 0;\n  }\n\n  public setgLevel(g: number): void {\n    this.glevel = g;\n    this.charset = this._charsets[g];\n  }\n\n  public setgCharset(g: number, charset: ICharset | undefined): void {\n    this._charsets[g] = charset;\n    if (this.glevel === g) {\n      this.charset = charset;\n    }\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IBufferService, ICoreService, ICoreMouseService, IOptionsService } from 'common/services/Services';\nimport { ICoreMouseProtocol, ICoreMouseEvent, CoreMouseEncoding, CoreMouseEventType, CoreMouseButton, CoreMouseAction } from 'common/Types';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { Emitter } from 'vs/base/common/event';\n\n/**\n * Supported default protocols.\n */\nconst DEFAULT_PROTOCOLS: { [key: string]: ICoreMouseProtocol } = {\n  /**\n   * NONE\n   * Events: none\n   * Modifiers: none\n   */\n  NONE: {\n    events: CoreMouseEventType.NONE,\n    restrict: () => false\n  },\n  /**\n   * X10\n   * Events: mousedown\n   * Modifiers: none\n   */\n  X10: {\n    events: CoreMouseEventType.DOWN,\n    restrict: (e: ICoreMouseEvent) => {\n      // no wheel, no move, no up\n      if (e.button === CoreMouseButton.WHEEL || e.action !== CoreMouseAction.DOWN) {\n        return false;\n      }\n      // no modifiers\n      e.ctrl = false;\n      e.alt = false;\n      e.shift = false;\n      return true;\n    }\n  },\n  /**\n   * VT200\n   * Events: mousedown / mouseup / wheel\n   * Modifiers: all\n   */\n  VT200: {\n    events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL,\n    restrict: (e: ICoreMouseEvent) => {\n      // no move\n      if (e.action === CoreMouseAction.MOVE) {\n        return false;\n      }\n      return true;\n    }\n  },\n  /**\n   * DRAG\n   * Events: mousedown / mouseup / wheel / mousedrag\n   * Modifiers: all\n   */\n  DRAG: {\n    events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL | CoreMouseEventType.DRAG,\n    restrict: (e: ICoreMouseEvent) => {\n      // no move without button\n      if (e.action === CoreMouseAction.MOVE && e.button === CoreMouseButton.NONE) {\n        return false;\n      }\n      return true;\n    }\n  },\n  /**\n   * ANY\n   * Events: all mouse related events\n   * Modifiers: all\n   */\n  ANY: {\n    events:\n      CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL\n      | CoreMouseEventType.DRAG | CoreMouseEventType.MOVE,\n    restrict: (e: ICoreMouseEvent) => true\n  }\n};\n\nconst enum Modifiers {\n  SHIFT = 4,\n  ALT = 8,\n  CTRL = 16\n}\n\n// helper for default encoders to generate the event code.\nfunction eventCode(e: ICoreMouseEvent, isSGR: boolean): number {\n  let code = (e.ctrl ? Modifiers.CTRL : 0) | (e.shift ? Modifiers.SHIFT : 0) | (e.alt ? Modifiers.ALT : 0);\n  if (e.button === CoreMouseButton.WHEEL) {\n    code |= 64;\n    code |= e.action;\n  } else {\n    code |= e.button & 3;\n    if (e.button & 4) {\n      code |= 64;\n    }\n    if (e.button & 8) {\n      code |= 128;\n    }\n    if (e.action === CoreMouseAction.MOVE) {\n      code |= CoreMouseAction.MOVE;\n    } else if (e.action === CoreMouseAction.UP && !isSGR) {\n      // special case - only SGR can report button on release\n      // all others have to go with NONE\n      code |= CoreMouseButton.NONE;\n    }\n  }\n  return code;\n}\n\nconst S = String.fromCharCode;\n\n/**\n * Supported default encodings.\n */\nconst DEFAULT_ENCODINGS: { [key: string]: CoreMouseEncoding } = {\n  /**\n   * DEFAULT - CSI M Pb Px Py\n   * Single byte encoding for coords and event code.\n   * Can encode values up to 223 (1-based).\n   */\n  DEFAULT: (e: ICoreMouseEvent) => {\n    const params = [eventCode(e, false) + 32, e.col + 32, e.row + 32];\n    // supress mouse report if we exceed addressible range\n    // Note this is handled differently by emulators\n    // - xterm:         sends 0;0 coords instead\n    // - vte, konsole:  no report\n    if (params[0] > 255 || params[1] > 255 || params[2] > 255) {\n      return '';\n    }\n    return `\\x1b[M${S(params[0])}${S(params[1])}${S(params[2])}`;\n  },\n  /**\n   * SGR - CSI < Pb ; Px ; Py M|m\n   * No encoding limitation.\n   * Can report button on release and works with a well formed sequence.\n   */\n  SGR: (e: ICoreMouseEvent) => {\n    const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n    return `\\x1b[<${eventCode(e, true)};${e.col};${e.row}${final}`;\n  },\n  SGR_PIXELS: (e: ICoreMouseEvent) => {\n    const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n    return `\\x1b[<${eventCode(e, true)};${e.x};${e.y}${final}`;\n  }\n};\n\n/**\n * CoreMouseService\n *\n * Provides mouse tracking reports with different protocols and encodings.\n *  - protocols: NONE (default), X10, VT200, DRAG, ANY\n *  - encodings: DEFAULT, SGR (UTF8, URXVT removed in #2507)\n *\n * Custom protocols/encodings can be added by `addProtocol` / `addEncoding`.\n * To activate a protocol/encoding, set `activeProtocol` / `activeEncoding`.\n * Switching a protocol will send a notification event `onProtocolChange`\n * with a list of needed events to track.\n *\n * The service handles the mouse tracking state and decides whether to send\n * a tracking report to the backend based on protocol and encoding limitations.\n * To send a mouse event call `triggerMouseEvent`.\n */\nexport class CoreMouseService extends Disposable implements ICoreMouseService {\n  public serviceBrand: any;\n\n  private _protocols: { [name: string]: ICoreMouseProtocol } = {};\n  private _encodings: { [name: string]: CoreMouseEncoding } = {};\n  private _activeProtocol: string = '';\n  private _activeEncoding: string = '';\n  private _lastEvent: ICoreMouseEvent | null = null;\n  private _wheelPartialScroll: number = 0;\n\n  private readonly _onProtocolChange = this._register(new Emitter<CoreMouseEventType>());\n  public readonly onProtocolChange = this._onProtocolChange.event;\n\n  constructor(\n    @IBufferService private readonly _bufferService: IBufferService,\n    @ICoreService private readonly _coreService: ICoreService,\n    @IOptionsService private readonly _optionsService: IOptionsService\n  ) {\n    super();\n    // register default protocols and encodings\n    for (const name of Object.keys(DEFAULT_PROTOCOLS)) this.addProtocol(name, DEFAULT_PROTOCOLS[name]);\n    for (const name of Object.keys(DEFAULT_ENCODINGS)) this.addEncoding(name, DEFAULT_ENCODINGS[name]);\n    // call reset to set defaults\n    this.reset();\n  }\n\n  public addProtocol(name: string, protocol: ICoreMouseProtocol): void {\n    this._protocols[name] = protocol;\n  }\n\n  public addEncoding(name: string, encoding: CoreMouseEncoding): void {\n    this._encodings[name] = encoding;\n  }\n\n  public get activeProtocol(): string {\n    return this._activeProtocol;\n  }\n\n  public get areMouseEventsActive(): boolean {\n    return this._protocols[this._activeProtocol].events !== 0;\n  }\n\n  public set activeProtocol(name: string) {\n    if (!this._protocols[name]) {\n      throw new Error(`unknown protocol \"${name}\"`);\n    }\n    this._activeProtocol = name;\n    this._onProtocolChange.fire(this._protocols[name].events);\n  }\n\n  public get activeEncoding(): string {\n    return this._activeEncoding;\n  }\n\n  public set activeEncoding(name: string) {\n    if (!this._encodings[name]) {\n      throw new Error(`unknown encoding \"${name}\"`);\n    }\n    this._activeEncoding = name;\n  }\n\n  public reset(): void {\n    this.activeProtocol = 'NONE';\n    this.activeEncoding = 'DEFAULT';\n    this._lastEvent = null;\n    this._wheelPartialScroll = 0;\n  }\n\n  /**\n   * Processes a wheel event, accounting for partial scrolls for trackpad, mouse scrolls.\n   * This prevents hyper-sensitive scrolling in alt buffer.\n   */\n  public consumeWheelEvent(ev: WheelEvent, cellHeight?: number, dpr?: number): number {\n    // Do nothing if it's not a vertical scroll event\n    if (ev.deltaY === 0 || ev.shiftKey) {\n      return 0;\n    }\n\n    if (cellHeight === undefined || dpr === undefined) {\n      return 0;\n    }\n\n    const targetWheelEventPixels = cellHeight / dpr;\n    let amount = this._applyScrollModifier(ev.deltaY, ev);\n\n    if (ev.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n      amount /= (targetWheelEventPixels + 0.0); // Prevent integer division\n\n      const isLikelyTrackpad = Math.abs(ev.deltaY) < 50;\n      if (isLikelyTrackpad) {\n        amount *= 0.3;\n      }\n\n      this._wheelPartialScroll += amount;\n      amount = Math.floor(Math.abs(this._wheelPartialScroll)) * (this._wheelPartialScroll > 0 ? 1 : -1);\n      this._wheelPartialScroll %= 1;\n    } else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n      amount *= this._bufferService.rows;\n    }\n    return amount;\n  }\n\n  private _applyScrollModifier(amount: number, ev: WheelEvent): number {\n    // Multiply the scroll speed when the modifier key is pressed\n    if (ev.altKey || ev.ctrlKey || ev.shiftKey) {\n      return amount * this._optionsService.rawOptions.fastScrollSensitivity * this._optionsService.rawOptions.scrollSensitivity;\n    }\n    return amount * this._optionsService.rawOptions.scrollSensitivity;\n  }\n\n  /**\n   * Triggers a mouse event to be sent.\n   *\n   * Returns true if the event passed all protocol restrictions and a report\n   * was sent, otherwise false. The return value may be used to decide whether\n   * the default event action in the bowser component should be omitted.\n   *\n   * Note: The method will change values of the given event object\n   * to fullfill protocol and encoding restrictions.\n   */\n  public triggerMouseEvent(e: ICoreMouseEvent): boolean {\n    // range check for col/row\n    if (e.col < 0 || e.col >= this._bufferService.cols\n      || e.row < 0 || e.row >= this._bufferService.rows) {\n      return false;\n    }\n\n    // filter nonsense combinations of button + action\n    if (e.button === CoreMouseButton.WHEEL && e.action === CoreMouseAction.MOVE) {\n      return false;\n    }\n    if (e.button === CoreMouseButton.NONE && e.action !== CoreMouseAction.MOVE) {\n      return false;\n    }\n    if (e.button !== CoreMouseButton.WHEEL && (e.action === CoreMouseAction.LEFT || e.action === CoreMouseAction.RIGHT)) {\n      return false;\n    }\n\n    // report 1-based coords\n    e.col++;\n    e.row++;\n\n    // debounce move events at grid or pixel level\n    if (e.action === CoreMouseAction.MOVE\n      && this._lastEvent\n      && this._equalEvents(this._lastEvent, e, this._activeEncoding === 'SGR_PIXELS')\n    ) {\n      return false;\n    }\n\n    // apply protocol restrictions\n    if (!this._protocols[this._activeProtocol].restrict(e)) {\n      return false;\n    }\n\n    // encode report and send\n    const report = this._encodings[this._activeEncoding](e);\n    if (report) {\n      // always send DEFAULT as binary data\n      if (this._activeEncoding === 'DEFAULT') {\n        this._coreService.triggerBinaryEvent(report);\n      } else {\n        this._coreService.triggerDataEvent(report, true);\n      }\n    }\n\n    this._lastEvent = e;\n\n    return true;\n  }\n\n  public explainEvents(events: CoreMouseEventType): { [event: string]: boolean } {\n    return {\n      down: !!(events & CoreMouseEventType.DOWN),\n      up: !!(events & CoreMouseEventType.UP),\n      drag: !!(events & CoreMouseEventType.DRAG),\n      move: !!(events & CoreMouseEventType.MOVE),\n      wheel: !!(events & CoreMouseEventType.WHEEL)\n    };\n  }\n\n  private _equalEvents(e1: ICoreMouseEvent, e2: ICoreMouseEvent, pixels: boolean): boolean {\n    if (pixels) {\n      if (e1.x !== e2.x) return false;\n      if (e1.y !== e2.y) return false;\n    } else {\n      if (e1.col !== e2.col) return false;\n      if (e1.row !== e2.row) return false;\n    }\n    if (e1.button !== e2.button) return false;\n    if (e1.action !== e2.action) return false;\n    if (e1.ctrl !== e2.ctrl) return false;\n    if (e1.alt !== e2.alt) return false;\n    if (e1.shift !== e2.shift) return false;\n    return true;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { clone } from 'common/Clone';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { IDecPrivateModes, IModes } from 'common/Types';\nimport { IBufferService, ICoreService, ILogService, IOptionsService } from 'common/services/Services';\nimport { Emitter } from 'vs/base/common/event';\n\nconst DEFAULT_MODES: IModes = Object.freeze({\n  insertMode: false\n});\n\nconst DEFAULT_DEC_PRIVATE_MODES: IDecPrivateModes = Object.freeze({\n  applicationCursorKeys: false,\n  applicationKeypad: false,\n  bracketedPasteMode: false,\n  cursorBlink: undefined,\n  cursorStyle: undefined,\n  origin: false,\n  reverseWraparound: false,\n  sendFocus: false,\n  synchronizedOutput: false,\n  wraparound: true // defaults: xterm - true, vt100 - false\n});\n\nexport class CoreService extends Disposable implements ICoreService {\n  public serviceBrand: any;\n\n  public isCursorInitialized: boolean = false;\n  public isCursorHidden: boolean = false;\n  public modes: IModes;\n  public decPrivateModes: IDecPrivateModes;\n\n  private readonly _onData = this._register(new Emitter<string>());\n  public readonly onData = this._onData.event;\n  private readonly _onUserInput = this._register(new Emitter<void>());\n  public readonly onUserInput = this._onUserInput.event;\n  private readonly _onBinary = this._register(new Emitter<string>());\n  public readonly onBinary = this._onBinary.event;\n  private readonly _onRequestScrollToBottom = this._register(new Emitter<void>());\n  public readonly onRequestScrollToBottom = this._onRequestScrollToBottom.event;\n\n  constructor(\n    @IBufferService private readonly _bufferService: IBufferService,\n    @ILogService private readonly _logService: ILogService,\n    @IOptionsService private readonly _optionsService: IOptionsService\n  ) {\n    super();\n    this.modes = clone(DEFAULT_MODES);\n    this.decPrivateModes = clone(DEFAULT_DEC_PRIVATE_MODES);\n  }\n\n  public reset(): void {\n    this.modes = clone(DEFAULT_MODES);\n    this.decPrivateModes = clone(DEFAULT_DEC_PRIVATE_MODES);\n  }\n\n  public triggerDataEvent(data: string, wasUserInput: boolean = false): void {\n    // Prevents all events to pty process if stdin is disabled\n    if (this._optionsService.rawOptions.disableStdin) {\n      return;\n    }\n\n    // Input is being sent to the terminal, the terminal should focus the prompt.\n    const buffer = this._bufferService.buffer;\n    if (wasUserInput && this._optionsService.rawOptions.scrollOnUserInput && buffer.ybase !== buffer.ydisp) {\n      this._onRequestScrollToBottom.fire();\n    }\n\n    // Fire onUserInput so listeners can react as well (eg. clear selection)\n    if (wasUserInput) {\n      this._onUserInput.fire();\n    }\n\n    // Fire onData API\n    this._logService.debug(`sending data \"${data}\"`);\n    this._logService.trace(`sending data (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n    this._onData.fire(data);\n  }\n\n  public triggerBinaryEvent(data: string): void {\n    if (this._optionsService.rawOptions.disableStdin) {\n      return;\n    }\n    this._logService.debug(`sending binary \"${data}\"`);\n    this._logService.trace(`sending binary (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n    this._onBinary.fire(data);\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInstantiationService, IServiceIdentifier } from 'common/services/Services';\nimport { getServiceDependencies } from 'common/services/ServiceRegistry';\n\nexport class ServiceCollection {\n\n  private _entries = new Map<IServiceIdentifier<any>, any>();\n\n  constructor(...entries: [IServiceIdentifier<any>, any][]) {\n    for (const [id, service] of entries) {\n      this.set(id, service);\n    }\n  }\n\n  public set<T>(id: IServiceIdentifier<T>, instance: T): T {\n    const result = this._entries.get(id);\n    this._entries.set(id, instance);\n    return result;\n  }\n\n  public forEach(callback: (id: IServiceIdentifier<any>, instance: any) => any): void {\n    for (const [key, value] of this._entries.entries()) {\n      callback(key, value);\n    }\n  }\n\n  public has(id: IServiceIdentifier<any>): boolean {\n    return this._entries.has(id);\n  }\n\n  public get<T>(id: IServiceIdentifier<T>): T | undefined {\n    return this._entries.get(id);\n  }\n}\n\nexport class InstantiationService implements IInstantiationService {\n  public serviceBrand: undefined;\n\n  private readonly _services: ServiceCollection = new ServiceCollection();\n\n  constructor() {\n    this._services.set(IInstantiationService, this);\n  }\n\n  public setService<T>(id: IServiceIdentifier<T>, instance: T): void {\n    this._services.set(id, instance);\n  }\n\n  public getService<T>(id: IServiceIdentifier<T>): T | undefined {\n    return this._services.get(id);\n  }\n\n  public createInstance<T>(ctor: any, ...args: any[]): T {\n    const serviceDependencies = getServiceDependencies(ctor).sort((a, b) => a.index - b.index);\n\n    const serviceArgs: any[] = [];\n    for (const dependency of serviceDependencies) {\n      const service = this._services.get(dependency.id);\n      if (!service) {\n        throw new Error(`[createInstance] ${ctor.name} depends on UNKNOWN service ${dependency.id._id}.`);\n      }\n      serviceArgs.push(service);\n    }\n\n    const firstServiceArgPos = serviceDependencies.length > 0 ? serviceDependencies[0].index : args.length;\n\n    // check for argument mismatches, adjust static args if needed\n    if (args.length !== firstServiceArgPos) {\n      throw new Error(`[createInstance] First service dependency of ${ctor.name} at position ${firstServiceArgPos + 1} conflicts with ${args.length} static arguments`);\n    }\n\n    // now create the instance\n    return new ctor(...[...args, ...serviceArgs]);\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { ILogService, IOptionsService, LogLevelEnum } from 'common/services/Services';\n\ntype LogType = (message?: any, ...optionalParams: any[]) => void;\n\ninterface IConsole {\n  log: LogType;\n  error: LogType;\n  info: LogType;\n  trace: LogType;\n  warn: LogType;\n}\n\n// console is available on both node.js and browser contexts but the common\n// module doesn't depend on them so we need to explicitly declare it.\ndeclare const console: IConsole;\n\nconst optionsKeyToLogLevel: { [key: string]: LogLevelEnum } = {\n  trace: LogLevelEnum.TRACE,\n  debug: LogLevelEnum.DEBUG,\n  info: LogLevelEnum.INFO,\n  warn: LogLevelEnum.WARN,\n  error: LogLevelEnum.ERROR,\n  off: LogLevelEnum.OFF\n};\n\nconst LOG_PREFIX = 'xterm.js: ';\n\nexport class LogService extends Disposable implements ILogService {\n  public serviceBrand: any;\n\n  private _logLevel: LogLevelEnum = LogLevelEnum.OFF;\n  public get logLevel(): LogLevelEnum { return this._logLevel; }\n\n  constructor(\n    @IOptionsService private readonly _optionsService: IOptionsService\n  ) {\n    super();\n    this._updateLogLevel();\n    this._register(this._optionsService.onSpecificOptionChange('logLevel', () => this._updateLogLevel()));\n\n    // For trace logging, assume the latest created log service is valid\n    traceLogger = this;\n  }\n\n  private _updateLogLevel(): void {\n    this._logLevel = optionsKeyToLogLevel[this._optionsService.rawOptions.logLevel];\n  }\n\n  private _evalLazyOptionalParams(optionalParams: any[]): void {\n    for (let i = 0; i < optionalParams.length; i++) {\n      if (typeof optionalParams[i] === 'function') {\n        optionalParams[i] = optionalParams[i]();\n      }\n    }\n  }\n\n  private _log(type: LogType, message: string, optionalParams: any[]): void {\n    this._evalLazyOptionalParams(optionalParams);\n    type.call(console, (this._optionsService.options.logger ? '' : LOG_PREFIX) + message, ...optionalParams);\n  }\n\n  public trace(message: string, ...optionalParams: any[]): void {\n    if (this._logLevel <= LogLevelEnum.TRACE) {\n      this._log(this._optionsService.options.logger?.trace.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n    }\n  }\n\n  public debug(message: string, ...optionalParams: any[]): void {\n    if (this._logLevel <= LogLevelEnum.DEBUG) {\n      this._log(this._optionsService.options.logger?.debug.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n    }\n  }\n\n  public info(message: string, ...optionalParams: any[]): void {\n    if (this._logLevel <= LogLevelEnum.INFO) {\n      this._log(this._optionsService.options.logger?.info.bind(this._optionsService.options.logger) ?? console.info, message, optionalParams);\n    }\n  }\n\n  public warn(message: string, ...optionalParams: any[]): void {\n    if (this._logLevel <= LogLevelEnum.WARN) {\n      this._log(this._optionsService.options.logger?.warn.bind(this._optionsService.options.logger) ?? console.warn, message, optionalParams);\n    }\n  }\n\n  public error(message: string, ...optionalParams: any[]): void {\n    if (this._logLevel <= LogLevelEnum.ERROR) {\n      this._log(this._optionsService.options.logger?.error.bind(this._optionsService.options.logger) ?? console.error, message, optionalParams);\n    }\n  }\n}\n\nlet traceLogger: ILogService;\nexport function setTraceLogger(logger: ILogService): void {\n  traceLogger = logger;\n}\n\n/**\n * A decorator that can be used to automatically log trace calls to the decorated function.\n */\nexport function traceCall(_target: any, key: string, descriptor: any): any {\n  if (typeof descriptor.value !== 'function') {\n    throw new Error('not supported');\n  }\n  const fnKey = 'value';\n  const fn = descriptor.value;\n  descriptor[fnKey] = function (...args: any[]) {\n    // Early exit\n    if (traceLogger.logLevel !== LogLevelEnum.TRACE) {\n      return fn.apply(this, args);\n    }\n\n    traceLogger.trace(`GlyphRenderer#${fn.name}(${args.map(e => JSON.stringify(e)).join(', ')})`);\n    const result = fn.apply(this, args);\n    traceLogger.trace(`GlyphRenderer#${fn.name} return`, result);\n    return result;\n  };\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable, toDisposable } from 'vs/base/common/lifecycle';\nimport { isMac } from 'common/Platform';\nimport { CursorStyle, IDisposable } from 'common/Types';\nimport { FontWeight, IOptionsService, ITerminalOptions } from 'common/services/Services';\nimport { Emitter } from 'vs/base/common/event';\n\nexport const DEFAULT_OPTIONS: Readonly<Required<ITerminalOptions>> = {\n  cols: 80,\n  rows: 24,\n  cursorBlink: false,\n  cursorStyle: 'block',\n  cursorWidth: 1,\n  cursorInactiveStyle: 'outline',\n  customGlyphs: true,\n  drawBoldTextInBrightColors: true,\n  documentOverride: null,\n  fastScrollModifier: 'alt',\n  fastScrollSensitivity: 5,\n  fontFamily: 'monospace',\n  fontSize: 15,\n  fontWeight: 'normal',\n  fontWeightBold: 'bold',\n  ignoreBracketedPasteMode: false,\n  lineHeight: 1.0,\n  letterSpacing: 0,\n  linkHandler: null,\n  logLevel: 'info',\n  logger: null,\n  scrollback: 1000,\n  scrollOnEraseInDisplay: false,\n  scrollOnUserInput: true,\n  scrollSensitivity: 1,\n  screenReaderMode: false,\n  smoothScrollDuration: 0,\n  macOptionIsMeta: false,\n  macOptionClickForcesSelection: false,\n  minimumContrastRatio: 1,\n  disableStdin: false,\n  allowProposedApi: false,\n  allowTransparency: false,\n  tabStopWidth: 8,\n  theme: {},\n  reflowCursorLine: false,\n  rescaleOverlappingGlyphs: false,\n  rightClickSelectsWord: isMac,\n  windowOptions: {},\n  windowsMode: false,\n  windowsPty: {},\n  wordSeparator: ' ()[]{}\\',\"`',\n  altClickMovesCursor: true,\n  convertEol: false,\n  termName: 'xterm',\n  cancelEvents: false,\n  overviewRuler: {}\n};\n\nconst FONT_WEIGHT_OPTIONS: Extract<FontWeight, string>[] = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];\n\nexport class OptionsService extends Disposable implements IOptionsService {\n  public serviceBrand: any;\n\n  public readonly rawOptions: Required<ITerminalOptions>;\n  public options: Required<ITerminalOptions>;\n\n  private readonly _onOptionChange = this._register(new Emitter<keyof ITerminalOptions>());\n  public readonly onOptionChange = this._onOptionChange.event;\n\n  constructor(options: Partial<ITerminalOptions>) {\n    super();\n    // set the default value of each option\n    const defaultOptions = { ...DEFAULT_OPTIONS };\n    for (const key in options) {\n      if (key in defaultOptions) {\n        try {\n          const newValue = options[key];\n          defaultOptions[key] = this._sanitizeAndValidateOption(key, newValue);\n        } catch (e) {\n          console.error(e);\n        }\n      }\n    }\n\n    // set up getters and setters for each option\n    this.rawOptions = defaultOptions;\n    this.options = { ... defaultOptions };\n    this._setupOptions();\n\n    // Clear out options that could link outside xterm.js as they could easily cause an embedder\n    // memory leak\n    this._register(toDisposable(() => {\n      this.rawOptions.linkHandler = null;\n      this.rawOptions.documentOverride = null;\n    }));\n  }\n\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  public onSpecificOptionChange<T extends keyof ITerminalOptions>(key: T, listener: (value: ITerminalOptions[T]) => any): IDisposable {\n    return this.onOptionChange(eventKey => {\n      if (eventKey === key) {\n        listener(this.rawOptions[key]);\n      }\n    });\n  }\n\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  public onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable {\n    return this.onOptionChange(eventKey => {\n      if (keys.indexOf(eventKey) !== -1) {\n        listener();\n      }\n    });\n  }\n\n  private _setupOptions(): void {\n    const getter = (propName: string): any => {\n      if (!(propName in DEFAULT_OPTIONS)) {\n        throw new Error(`No option with key \"${propName}\"`);\n      }\n      return this.rawOptions[propName];\n    };\n\n    const setter = (propName: string, value: any): void => {\n      if (!(propName in DEFAULT_OPTIONS)) {\n        throw new Error(`No option with key \"${propName}\"`);\n      }\n\n      value = this._sanitizeAndValidateOption(propName, value);\n      // Don't fire an option change event if they didn't change\n      if (this.rawOptions[propName] !== value) {\n        this.rawOptions[propName] = value;\n        this._onOptionChange.fire(propName);\n      }\n    };\n\n    for (const propName in this.rawOptions) {\n      const desc = {\n        get: getter.bind(this, propName),\n        set: setter.bind(this, propName)\n      };\n      Object.defineProperty(this.options, propName, desc);\n    }\n  }\n\n  private _sanitizeAndValidateOption(key: string, value: any): any {\n    switch (key) {\n      case 'cursorStyle':\n        if (!value) {\n          value = DEFAULT_OPTIONS[key];\n        }\n        if (!isCursorStyle(value)) {\n          throw new Error(`\"${value}\" is not a valid value for ${key}`);\n        }\n        break;\n      case 'wordSeparator':\n        if (!value) {\n          value = DEFAULT_OPTIONS[key];\n        }\n        break;\n      case 'fontWeight':\n      case 'fontWeightBold':\n        if (typeof value === 'number' && 1 <= value && value <= 1000) {\n          // already valid numeric value\n          break;\n        }\n        value = FONT_WEIGHT_OPTIONS.includes(value) ? value : DEFAULT_OPTIONS[key];\n        break;\n      case 'cursorWidth':\n        value = Math.floor(value);\n        // Fall through for bounds check\n      case 'lineHeight':\n      case 'tabStopWidth':\n        if (value < 1) {\n          throw new Error(`${key} cannot be less than 1, value: ${value}`);\n        }\n        break;\n      case 'minimumContrastRatio':\n        value = Math.max(1, Math.min(21, Math.round(value * 10) / 10));\n        break;\n      case 'scrollback':\n        value = Math.min(value, 4294967295);\n        if (value < 0) {\n          throw new Error(`${key} cannot be less than 0, value: ${value}`);\n        }\n        break;\n      case 'fastScrollSensitivity':\n      case 'scrollSensitivity':\n        if (value <= 0) {\n          throw new Error(`${key} cannot be less than or equal to 0, value: ${value}`);\n        }\n        break;\n      case 'rows':\n      case 'cols':\n        if (!value && value !== 0) {\n          throw new Error(`${key} must be numeric, value: ${value}`);\n        }\n        break;\n      case 'windowsPty':\n        value = value ?? {};\n        break;\n    }\n    return value;\n  }\n}\n\nfunction isCursorStyle(value: unknown): value is CursorStyle {\n  return value === 'block' || value === 'underline' || value === 'bar';\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IBufferService, IOscLinkService } from 'common/services/Services';\nimport { IMarker, IOscLinkData } from 'common/Types';\n\nexport class OscLinkService implements IOscLinkService {\n  public serviceBrand: any;\n\n  private _nextId = 1;\n\n  /**\n   * A map of the link key to link entry. This is used to add additional lines to links with ids.\n   */\n  private _entriesWithId: Map<string, IOscLinkEntryWithId> = new Map();\n\n  /**\n   * A map of the link id to the link entry. The \"link id\" (number) which is the numberic\n   * representation of a unique link should not be confused with \"id\" (string) which comes in with\n   * `id=` in the OSC link's properties.\n   */\n  private _dataByLinkId: Map<number, IOscLinkEntryNoId | IOscLinkEntryWithId> = new Map();\n\n  constructor(\n    @IBufferService private readonly _bufferService: IBufferService\n  ) {\n  }\n\n  public registerLink(data: IOscLinkData): number {\n    const buffer = this._bufferService.buffer;\n\n    // Links with no id will only ever be registered a single time\n    if (data.id === undefined) {\n      const marker = buffer.addMarker(buffer.ybase + buffer.y);\n      const entry: IOscLinkEntryNoId = {\n        data,\n        id: this._nextId++,\n        lines: [marker]\n      };\n      marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n      this._dataByLinkId.set(entry.id, entry);\n      return entry.id;\n    }\n\n    // Add the line to the link if it already exists\n    const castData = data as Required<IOscLinkData>;\n    const key = this._getEntryIdKey(castData);\n    const match = this._entriesWithId.get(key);\n    if (match) {\n      this.addLineToLink(match.id, buffer.ybase + buffer.y);\n      return match.id;\n    }\n\n    // Create the link\n    const marker = buffer.addMarker(buffer.ybase + buffer.y);\n    const entry: IOscLinkEntryWithId = {\n      id: this._nextId++,\n      key: this._getEntryIdKey(castData),\n      data: castData,\n      lines: [marker]\n    };\n    marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n    this._entriesWithId.set(entry.key, entry);\n    this._dataByLinkId.set(entry.id, entry);\n    return entry.id;\n  }\n\n  public addLineToLink(linkId: number, y: number): void {\n    const entry = this._dataByLinkId.get(linkId);\n    if (!entry) {\n      return;\n    }\n    if (entry.lines.every(e => e.line !== y)) {\n      const marker = this._bufferService.buffer.addMarker(y);\n      entry.lines.push(marker);\n      marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n    }\n  }\n\n  public getLinkData(linkId: number): IOscLinkData | undefined {\n    return this._dataByLinkId.get(linkId)?.data;\n  }\n\n  private _getEntryIdKey(linkData: Required<IOscLinkData>): string {\n    return `${linkData.id};;${linkData.uri}`;\n  }\n\n  private _removeMarkerFromLink(entry: IOscLinkEntryNoId | IOscLinkEntryWithId, marker: IMarker): void {\n    const index = entry.lines.indexOf(marker);\n    if (index === -1) {\n      return;\n    }\n    entry.lines.splice(index, 1);\n    if (entry.lines.length === 0) {\n      if (entry.data.id !== undefined) {\n        this._entriesWithId.delete((entry as IOscLinkEntryWithId).key);\n      }\n      this._dataByLinkId.delete(entry.id);\n    }\n  }\n}\n\ninterface IOscLinkEntry<T extends IOscLinkData> {\n  data: T;\n  id: number;\n  lines: IMarker[];\n}\n\ninterface IOscLinkEntryNoId extends IOscLinkEntry<IOscLinkData> {\n}\n\ninterface IOscLinkEntryWithId extends IOscLinkEntry<Required<IOscLinkData>> {\n  key: string;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IServiceIdentifier } from 'common/services/Services';\n\nconst DI_TARGET = 'di$target';\nconst DI_DEPENDENCIES = 'di$dependencies';\n\nexport const serviceRegistry: Map<string, IServiceIdentifier<any>> = new Map();\n\nexport function getServiceDependencies(ctor: any): { id: IServiceIdentifier<any>, index: number, optional: boolean }[] {\n  return ctor[DI_DEPENDENCIES] || [];\n}\n\nexport function createDecorator<T>(id: string): IServiceIdentifier<T> {\n  if (serviceRegistry.has(id)) {\n    return serviceRegistry.get(id)!;\n  }\n\n  const decorator: any = function (target: Function, key: string, index: number): any {\n    if (arguments.length !== 3) {\n      throw new Error('@IServiceName-decorator can only be used to decorate a parameter');\n    }\n\n    storeServiceDependency(decorator, target, index);\n  };\n\n  decorator._id = id;\n\n  serviceRegistry.set(id, decorator);\n  return decorator;\n}\n\nfunction storeServiceDependency(id: Function, target: Function, index: number): void {\n  if ((target as any)[DI_TARGET] === target) {\n    (target as any)[DI_DEPENDENCIES].push({ id, index });\n  } else {\n    (target as any)[DI_DEPENDENCIES] = [{ id, index }];\n    (target as any)[DI_TARGET] = target;\n  }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDecoration, IDecorationOptions, ILinkHandler, ILogger, IWindowsPty, type IOverviewRulerOptions } from '@xterm/xterm';\nimport { CoreMouseEncoding, CoreMouseEventType, CursorInactiveStyle, CursorStyle, IAttributeData, ICharset, IColor, ICoreMouseEvent, ICoreMouseProtocol, IDecPrivateModes, IDisposable, IModes, IOscLinkData, IWindowOptions } from 'common/Types';\nimport { IBuffer, IBufferSet } from 'common/buffer/Types';\nimport { createDecorator } from 'common/services/ServiceRegistry';\nimport type { Emitter, Event } from 'vs/base/common/event';\n\nexport const IBufferService = createDecorator<IBufferService>('BufferService');\nexport interface IBufferService {\n  serviceBrand: undefined;\n\n  readonly cols: number;\n  readonly rows: number;\n  readonly buffer: IBuffer;\n  readonly buffers: IBufferSet;\n  isUserScrolling: boolean;\n  onResize: Event<IBufferResizeEvent>;\n  onScroll: Event<number>;\n  scroll(eraseAttr: IAttributeData, isWrapped?: boolean): void;\n  scrollLines(disp: number, suppressScrollEvent?: boolean): void;\n  resize(cols: number, rows: number): void;\n  reset(): void;\n}\n\nexport interface IBufferResizeEvent {\n  cols: number;\n  rows: number;\n  colsChanged: boolean;\n  rowsChanged: boolean;\n}\n\nexport const ICoreMouseService = createDecorator<ICoreMouseService>('CoreMouseService');\nexport interface ICoreMouseService {\n  serviceBrand: undefined;\n\n  activeProtocol: string;\n  activeEncoding: string;\n  areMouseEventsActive: boolean;\n  addProtocol(name: string, protocol: ICoreMouseProtocol): void;\n  addEncoding(name: string, encoding: CoreMouseEncoding): void;\n  reset(): void;\n\n  /**\n   * Triggers a mouse event to be sent.\n   *\n   * Returns true if the event passed all protocol restrictions and a report\n   * was sent, otherwise false. The return value may be used to decide whether\n   * the default event action in the bowser component should be omitted.\n   *\n   * Note: The method will change values of the given event object\n   * to fullfill protocol and encoding restrictions.\n   */\n  triggerMouseEvent(event: ICoreMouseEvent): boolean;\n\n  /**\n   * Event to announce changes in mouse tracking.\n   */\n  onProtocolChange: Event<CoreMouseEventType>;\n\n  /**\n   * Human readable version of mouse events.\n   */\n  explainEvents(events: CoreMouseEventType): { [event: string]: boolean };\n\n  /**\n   * Process wheel event taking partial scroll into account.\n   */\n  consumeWheelEvent(ev: WheelEvent, cellHeight?: number, dpr?: number): number;\n}\n\nexport const ICoreService = createDecorator<ICoreService>('CoreService');\nexport interface ICoreService {\n  serviceBrand: undefined;\n\n  /**\n   * Initially the cursor will not be visible until the first time the terminal\n   * is focused.\n   */\n  isCursorInitialized: boolean;\n  isCursorHidden: boolean;\n\n  readonly modes: IModes;\n  readonly decPrivateModes: IDecPrivateModes;\n\n  readonly onData: Event<string>;\n  readonly onUserInput: Event<void>;\n  readonly onBinary: Event<string>;\n  readonly onRequestScrollToBottom: Event<void>;\n\n  reset(): void;\n\n  /**\n   * Triggers the onData event in the public API.\n   * @param data The data that is being emitted.\n   * @param wasUserInput Whether the data originated from the user (as opposed to\n   * resulting from parsing incoming data). When true this will also:\n   * - Scroll to the bottom of the buffer if option scrollOnUserInput is true.\n   * - Fire the `onUserInput` event (so selection can be cleared).\n   */\n  triggerDataEvent(data: string, wasUserInput?: boolean): void;\n\n  /**\n   * Triggers the onBinary event in the public API.\n   * @param data The data that is being emitted.\n   */\n  triggerBinaryEvent(data: string): void;\n}\n\nexport const ICharsetService = createDecorator<ICharsetService>('CharsetService');\nexport interface ICharsetService {\n  serviceBrand: undefined;\n\n  charset: ICharset | undefined;\n  readonly glevel: number;\n\n  reset(): void;\n\n  /**\n   * Set the G level of the terminal.\n   * @param g\n   */\n  setgLevel(g: number): void;\n\n  /**\n   * Set the charset for the given G level of the terminal.\n   * @param g\n   * @param charset\n   */\n  setgCharset(g: number, charset: ICharset | undefined): void;\n}\n\nexport interface IServiceIdentifier<T> {\n  (...args: any[]): void;\n  type: T;\n  _id: string;\n}\n\nexport interface IBrandedService {\n  serviceBrand: undefined;\n}\n\ntype GetLeadingNonServiceArgs<TArgs extends any[]> = TArgs extends [] ? []\n  : TArgs extends [...infer TFirst, infer TLast] ? TLast extends IBrandedService ? GetLeadingNonServiceArgs<TFirst> : TArgs\n    : never;\n\nexport const IInstantiationService = createDecorator<IInstantiationService>('InstantiationService');\nexport interface IInstantiationService {\n  serviceBrand: undefined;\n\n  setService<T>(id: IServiceIdentifier<T>, instance: T): void;\n  getService<T>(id: IServiceIdentifier<T>): T | undefined;\n  createInstance<Ctor extends new (...args: any[]) => any, R extends InstanceType<Ctor>>(t: Ctor, ...args: GetLeadingNonServiceArgs<ConstructorParameters<Ctor>>): R;\n}\n\nexport enum LogLevelEnum {\n  TRACE = 0,\n  DEBUG = 1,\n  INFO = 2,\n  WARN = 3,\n  ERROR = 4,\n  OFF = 5\n}\n\nexport const ILogService = createDecorator<ILogService>('LogService');\nexport interface ILogService {\n  serviceBrand: undefined;\n\n  readonly logLevel: LogLevelEnum;\n\n  trace(message: any, ...optionalParams: any[]): void;\n  debug(message: any, ...optionalParams: any[]): void;\n  info(message: any, ...optionalParams: any[]): void;\n  warn(message: any, ...optionalParams: any[]): void;\n  error(message: any, ...optionalParams: any[]): void;\n}\n\nexport const IOptionsService = createDecorator<IOptionsService>('OptionsService');\nexport interface IOptionsService {\n  serviceBrand: undefined;\n\n  /**\n   * Read only access to the raw options object, this is an internal-only fast path for accessing\n   * single options without any validation as we trust TypeScript to enforce correct usage\n   * internally.\n   */\n  readonly rawOptions: Required<ITerminalOptions>;\n\n  /**\n   * Options as exposed through the public API, this property uses getters and setters with\n   * validation which makes it safer but slower. {@link rawOptions} should be used for pretty much\n   * all internal usage for performance reasons.\n   */\n  readonly options: Required<ITerminalOptions>;\n\n  /**\n   * Adds an event listener for when any option changes.\n   */\n  readonly onOptionChange: Event<keyof ITerminalOptions>;\n\n  /**\n   * Adds an event listener for when a specific option changes, this is a convenience method that is\n   * preferred over {@link onOptionChange} when only a single option is being listened to.\n   */\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  onSpecificOptionChange<T extends keyof ITerminalOptions>(key: T, listener: (arg1: Required<ITerminalOptions>[T]) => any): IDisposable;\n\n  /**\n   * Adds an event listener for when a set of specific options change, this is a convenience method\n   * that is preferred over {@link onOptionChange} when multiple options are being listened to and\n   * handled the same way.\n   */\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable;\n}\n\nexport type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;\nexport type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'off';\n\nexport interface ITerminalOptions {\n  allowProposedApi?: boolean;\n  allowTransparency?: boolean;\n  altClickMovesCursor?: boolean;\n  cols?: number;\n  convertEol?: boolean;\n  cursorBlink?: boolean;\n  cursorStyle?: CursorStyle;\n  cursorWidth?: number;\n  cursorInactiveStyle?: CursorInactiveStyle;\n  customGlyphs?: boolean;\n  disableStdin?: boolean;\n  documentOverride?: any | null;\n  drawBoldTextInBrightColors?: boolean;\n  /** @deprecated No longer supported */\n  fastScrollModifier?: 'none' | 'alt' | 'ctrl' | 'shift';\n  fastScrollSensitivity?: number;\n  fontSize?: number;\n  fontFamily?: string;\n  fontWeight?: FontWeight;\n  fontWeightBold?: FontWeight;\n  ignoreBracketedPasteMode?: boolean;\n  letterSpacing?: number;\n  lineHeight?: number;\n  linkHandler?: ILinkHandler | null;\n  logLevel?: LogLevel;\n  logger?: ILogger | null;\n  macOptionIsMeta?: boolean;\n  macOptionClickForcesSelection?: boolean;\n  minimumContrastRatio?: number;\n  reflowCursorLine?: boolean;\n  rescaleOverlappingGlyphs?: boolean;\n  rightClickSelectsWord?: boolean;\n  rows?: number;\n  screenReaderMode?: boolean;\n  scrollback?: number;\n  scrollOnUserInput?: boolean;\n  scrollSensitivity?: number;\n  smoothScrollDuration?: number;\n  tabStopWidth?: number;\n  theme?: ITheme;\n  windowsMode?: boolean;\n  windowsPty?: IWindowsPty;\n  windowOptions?: IWindowOptions;\n  wordSeparator?: string;\n  overviewRuler?: IOverviewRulerOptions;\n  scrollOnEraseInDisplay?: boolean;\n\n  [key: string]: any;\n  cancelEvents: boolean;\n  termName: string;\n}\n\nexport interface ITheme {\n  foreground?: string;\n  background?: string;\n  cursor?: string;\n  cursorAccent?: string;\n  selectionForeground?: string;\n  selectionBackground?: string;\n  selectionInactiveBackground?: string;\n  scrollbarSliderBackground?: string;\n  scrollbarSliderHoverBackground?: string;\n  scrollbarSliderActiveBackground?: string;\n  overviewRulerBorder?: string;\n  black?: string;\n  red?: string;\n  green?: string;\n  yellow?: string;\n  blue?: string;\n  magenta?: string;\n  cyan?: string;\n  white?: string;\n  brightBlack?: string;\n  brightRed?: string;\n  brightGreen?: string;\n  brightYellow?: string;\n  brightBlue?: string;\n  brightMagenta?: string;\n  brightCyan?: string;\n  brightWhite?: string;\n  extendedAnsi?: string[];\n}\n\nexport const IOscLinkService = createDecorator<IOscLinkService>('OscLinkService');\nexport interface IOscLinkService {\n  serviceBrand: undefined;\n  /**\n   * Registers a link to the service, returning the link ID. The link data is managed by this\n   * service and will be freed when this current cursor position is trimmed off the buffer.\n   */\n  registerLink(linkData: IOscLinkData): number;\n  /**\n   * Adds a line to a link if needed.\n   */\n  addLineToLink(linkId: number, y: number): void;\n  /** Get the link data associated with a link ID. */\n  getLinkData(linkId: number): IOscLinkData | undefined;\n}\n\n/*\n * Width and Grapheme_Cluster_Break properties of a character as a bit mask.\n *\n * bit 0: shouldJoin - should combine with preceding character.\n * bit 1..2: wcwidth - see UnicodeCharWidth.\n * bit 3..31: class of character (currently only 4 bits are used).\n *   This is used to determined grapheme clustering - i.e. which codepoints\n *   are to be combined into a single compound character.\n *\n * Use the UnicodeService static function createPropertyValue to create a\n * UnicodeCharProperties; use extractShouldJoin, extractWidth, and\n * extractCharKind to extract the components.\n */\nexport type UnicodeCharProperties = number;\n\n/**\n * Width in columns of a character.\n * In a CJK context, \"half-width\" characters (such as Latin) are width 1,\n * while \"full-width\" characters (such as Kanji) are 2 columns wide.\n * Combining characters (such as accents) are width 0.\n */\nexport type UnicodeCharWidth = 0 | 1 | 2;\n\nexport const IUnicodeService = createDecorator<IUnicodeService>('UnicodeService');\nexport interface IUnicodeService {\n  serviceBrand: undefined;\n  /** Register an Unicode version provider. */\n  register(provider: IUnicodeVersionProvider): void;\n  /** Registered Unicode versions. */\n  readonly versions: string[];\n  /** Currently active version. */\n  activeVersion: string;\n  /** Event triggered, when activate version changed. */\n  readonly onChange: Event<string>;\n\n  /**\n   * Unicode version dependent\n   */\n  wcwidth(codepoint: number): UnicodeCharWidth;\n  getStringCellWidth(s: string): number;\n  /**\n   * Return character width and type for grapheme clustering.\n   * If preceding != 0, it is the return code from the previous character;\n   * in that case the result specifies if the characters should be joined.\n   */\n  charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport interface IUnicodeVersionProvider {\n  readonly version: string;\n  wcwidth(ucs: number): UnicodeCharWidth;\n  charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport const IDecorationService = createDecorator<IDecorationService>('DecorationService');\nexport interface IDecorationService extends IDisposable {\n  serviceBrand: undefined;\n  readonly decorations: IterableIterator<IInternalDecoration>;\n  readonly onDecorationRegistered: Event<IInternalDecoration>;\n  readonly onDecorationRemoved: Event<IInternalDecoration>;\n  registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined;\n  reset(): void;\n  /**\n   * Trigger a callback over the decoration at a cell (in no particular order). This uses a callback\n   * instead of an iterator as it's typically used in hot code paths.\n   */\n  forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void;\n}\nexport interface IInternalDecoration extends IDecoration {\n  readonly options: IDecorationOptions;\n  readonly backgroundColorRGB: IColor | undefined;\n  readonly foregroundColorRGB: IColor | undefined;\n  readonly onRenderEmitter: Emitter<HTMLElement>;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { UnicodeV6 } from 'common/input/UnicodeV6';\nimport { IUnicodeService, IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from 'common/services/Services';\nimport { Emitter } from 'vs/base/common/event';\n\nexport class UnicodeService implements IUnicodeService {\n  public serviceBrand: any;\n\n  private _providers: {[key: string]: IUnicodeVersionProvider} = Object.create(null);\n  private _active: string = '';\n  private _activeProvider: IUnicodeVersionProvider;\n\n  private readonly _onChange = new Emitter<string>();\n  public readonly onChange = this._onChange.event;\n\n  public static extractShouldJoin(value: UnicodeCharProperties): boolean {\n    return (value & 1) !== 0;\n  }\n  public static extractWidth(value: UnicodeCharProperties): UnicodeCharWidth {\n    return ((value >> 1) & 0x3) as UnicodeCharWidth;\n  }\n  public static extractCharKind(value: UnicodeCharProperties): number {\n    return value >> 3;\n  }\n  public static createPropertyValue(state: number, width: number, shouldJoin: boolean = false): UnicodeCharProperties {\n    return ((state & 0xffffff) << 3) | ((width & 3) << 1) | (shouldJoin?1:0);\n  }\n\n  constructor() {\n    const defaultProvider = new UnicodeV6();\n    this.register(defaultProvider);\n    this._active = defaultProvider.version;\n    this._activeProvider = defaultProvider;\n  }\n\n  public dispose(): void {\n    this._onChange.dispose();\n  }\n\n  public get versions(): string[] {\n    return Object.keys(this._providers);\n  }\n\n  public get activeVersion(): string {\n    return this._active;\n  }\n\n  public set activeVersion(version: string) {\n    if (!this._providers[version]) {\n      throw new Error(`unknown Unicode version \"${version}\"`);\n    }\n    this._active = version;\n    this._activeProvider = this._providers[version];\n    this._onChange.fire(version);\n  }\n\n  public register(provider: IUnicodeVersionProvider): void {\n    this._providers[provider.version] = provider;\n  }\n\n  /**\n   * Unicode version dependent interface.\n   */\n  public wcwidth(num: number): UnicodeCharWidth {\n    return this._activeProvider.wcwidth(num);\n  }\n\n  public getStringCellWidth(s: string): number {\n    let result = 0;\n    let precedingInfo = 0;\n    const length = s.length;\n    for (let i = 0; i < length; ++i) {\n      let code = s.charCodeAt(i);\n      // surrogate pair first\n      if (0xD800 <= code && code <= 0xDBFF) {\n        if (++i >= length) {\n          // this should not happen with strings retrieved from\n          // Buffer.translateToString as it converts from UTF-32\n          // and therefore always should contain the second part\n          // for any other string we still have to handle it somehow:\n          // simply treat the lonely surrogate first as a single char (UCS-2 behavior)\n          return result + this.wcwidth(code);\n        }\n        const second = s.charCodeAt(i);\n        // convert surrogate pair to high codepoint only for valid second part (UTF-16)\n        // otherwise treat them independently (UCS-2 behavior)\n        if (0xDC00 <= second && second <= 0xDFFF) {\n          code = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n        } else {\n          result += this.wcwidth(second);\n        }\n      }\n      const currentInfo = this.charProperties(code, precedingInfo);\n      let chWidth = UnicodeService.extractWidth(currentInfo);\n      if (UnicodeService.extractShouldJoin(currentInfo)) {\n        chWidth -= UnicodeService.extractWidth(precedingInfo);\n      }\n      result += chWidth;\n      precedingInfo = currentInfo;\n    }\n    return result;\n  }\n\n  public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n    return this._activeProvider.charProperties(codepoint, preceding);\n  }\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n *   Fabrice Bellard's javascript vt100 for jslinux:\n *   http://bellard.org/jslinux/\n *   Copyright (c) 2011 Fabrice Bellard\n *   The original design remains. The terminal itself\n *   has been extended to include xterm CSI codes, among\n *   other features.\n *\n * Terminal Emulation References:\n *   http://vt100.net/\n *   http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n *   http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n *   http://invisible-island.net/vttest/\n *   http://www.inwap.com/pdp10/ansicode.txt\n *   http://linux.die.net/man/4/console_codes\n *   http://linux.die.net/man/7/urxvt\n */\n\nimport { DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine';\nimport { IBuffer } from 'common/buffer/Types';\nimport { CoreTerminal } from 'common/CoreTerminal';\nimport { IMarker, ITerminalOptions } from 'common/Types';\nimport { Emitter, Event } from 'vs/base/common/event';\n\nexport class Terminal extends CoreTerminal {\n  private readonly _onBell = this._register(new Emitter<void>());\n  public readonly onBell = this._onBell.event;\n  private readonly _onCursorMove = this._register(new Emitter<void>());\n  public readonly onCursorMove = this._onCursorMove.event;\n  private readonly _onTitleChange = this._register(new Emitter<string>());\n  public readonly onTitleChange = this._onTitleChange.event;\n  private readonly _onA11yCharEmitter = this._register(new Emitter<string>());\n  public readonly onA11yChar = this._onA11yCharEmitter.event;\n  private readonly _onA11yTabEmitter = this._register(new Emitter<number>());\n  public readonly onA11yTab = this._onA11yTabEmitter.event;\n\n  constructor(\n    options: ITerminalOptions = {}\n  ) {\n    super(options);\n\n    this._setup();\n\n    // Setup InputHandler listeners\n    this._register(this._inputHandler.onRequestBell(() => this.bell()));\n    this._register(this._inputHandler.onRequestReset(() => this.reset()));\n    this._register(Event.forward(this._inputHandler.onCursorMove, this._onCursorMove));\n    this._register(Event.forward(this._inputHandler.onTitleChange, this._onTitleChange));\n    this._register(Event.forward(this._inputHandler.onA11yChar, this._onA11yCharEmitter));\n    this._register(Event.forward(this._inputHandler.onA11yTab, this._onA11yTabEmitter));\n  }\n\n  /**\n   * Convenience property to active buffer.\n   */\n  public get buffer(): IBuffer {\n    return this.buffers.active;\n  }\n\n  // TODO: Support paste here?\n\n  public get markers(): IMarker[] {\n    return this.buffer.markers;\n  }\n\n  public addMarker(cursorYOffset: number): IMarker | undefined {\n    // Disallow markers on the alt buffer\n    if (this.buffer !== this.buffers.normal) {\n      return;\n    }\n\n    return this.buffer.addMarker(this.buffer.ybase + this.buffer.y + cursorYOffset);\n  }\n\n  public bell(): void {\n    this._onBell.fire();\n  }\n\n  public input(data: string, wasUserInput: boolean = true): void {\n    this.coreService.triggerDataEvent(data, wasUserInput);\n  }\n\n  /**\n   * Resizes the terminal.\n   *\n   * @param x The number of columns to resize to.\n   * @param y The number of rows to resize to.\n   */\n  public resize(x: number, y: number): void {\n    if (x === this.cols && y === this.rows) {\n      return;\n    }\n\n    super.resize(x, y);\n  }\n\n  /**\n   * Clear the entire buffer, making the prompt line the new first line.\n   */\n  public clear(): void {\n    if (this.buffer.ybase === 0 && this.buffer.y === 0) {\n      // Don't clear if it's already clear\n      return;\n    }\n    this.buffer.lines.set(0, this.buffer.lines.get(this.buffer.ybase + this.buffer.y)!);\n    this.buffer.lines.length = 1;\n    this.buffer.ydisp = 0;\n    this.buffer.ybase = 0;\n    this.buffer.y = 0;\n    for (let i = 1; i < this.rows; i++) {\n      this.buffer.lines.push(this.buffer.getBlankLine(DEFAULT_ATTR_DATA));\n    }\n    this._onScroll.fire({ position: this.buffer.ydisp });\n  }\n\n  /**\n   * Reset terminal.\n   * Note: Calling this directly from JS is synchronous but does not clear\n   * input buffers and does not reset the parser, thus the terminal will\n   * continue to apply pending input data.\n   * If you need in band reset (synchronous with input data) consider\n   * using DECSTR (soft reset, CSI ! p) or RIS instead (hard reset, ESC c).\n   */\n  public reset(): void {\n    /**\n     * Since _setup handles a full terminal creation, we have to carry forward\n     * a few things that should not reset.\n     */\n    this.options.rows = this.rows;\n    this.options.cols = this.cols;\n\n    this._setup();\n    super.reset();\n  }\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Permutation = exports.CallbackIterable = exports.ArrayQueue = exports.booleanComparator = exports.numberComparator = exports.CompareResult = void 0;\nexports.tail = tail;\nexports.tail2 = tail2;\nexports.equals = equals;\nexports.removeFastWithoutKeepingOrder = removeFastWithoutKeepingOrder;\nexports.binarySearch = binarySearch;\nexports.binarySearch2 = binarySearch2;\nexports.quickSelect = quickSelect;\nexports.groupBy = groupBy;\nexports.groupAdjacentBy = groupAdjacentBy;\nexports.forEachAdjacent = forEachAdjacent;\nexports.forEachWithNeighbors = forEachWithNeighbors;\nexports.sortedDiff = sortedDiff;\nexports.delta = delta;\nexports.top = top;\nexports.topAsync = topAsync;\nexports.coalesce = coalesce;\nexports.coalesceInPlace = coalesceInPlace;\nexports.move = move;\nexports.isFalsyOrEmpty = isFalsyOrEmpty;\nexports.isNonEmptyArray = isNonEmptyArray;\nexports.distinct = distinct;\nexports.uniqueFilter = uniqueFilter;\nexports.firstOrDefault = firstOrDefault;\nexports.lastOrDefault = lastOrDefault;\nexports.commonPrefixLength = commonPrefixLength;\nexports.range = range;\nexports.index = index;\nexports.insert = insert;\nexports.remove = remove;\nexports.arrayInsert = arrayInsert;\nexports.shuffle = shuffle;\nexports.pushToStart = pushToStart;\nexports.pushToEnd = pushToEnd;\nexports.pushMany = pushMany;\nexports.mapArrayOrNot = mapArrayOrNot;\nexports.asArray = asArray;\nexports.getRandomElement = getRandomElement;\nexports.insertInto = insertInto;\nexports.splice = splice;\nexports.compareBy = compareBy;\nexports.tieBreakComparators = tieBreakComparators;\nexports.reverseOrder = reverseOrder;\nconst errors_1 = require(\"vs/base/common/errors\");\nconst arraysFind_1 = require(\"./arraysFind\");\n/**\n * Returns the last element of an array.\n * @param array The array.\n * @param n Which element from the end (default is zero).\n */\nfunction tail(array, n = 0) {\n    return array[array.length - (1 + n)];\n}\nfunction tail2(arr) {\n    if (arr.length === 0) {\n        throw new Error('Invalid tail call');\n    }\n    return [arr.slice(0, arr.length - 1), arr[arr.length - 1]];\n}\nfunction equals(one, other, itemEquals = (a, b) => a === b) {\n    if (one === other) {\n        return true;\n    }\n    if (!one || !other) {\n        return false;\n    }\n    if (one.length !== other.length) {\n        return false;\n    }\n    for (let i = 0, len = one.length; i < len; i++) {\n        if (!itemEquals(one[i], other[i])) {\n            return false;\n        }\n    }\n    return true;\n}\n/**\n * Remove the element at `index` by replacing it with the last element. This is faster than `splice`\n * but changes the order of the array\n */\nfunction removeFastWithoutKeepingOrder(array, index) {\n    const last = array.length - 1;\n    if (index < last) {\n        array[index] = array[last];\n    }\n    array.pop();\n}\n/**\n * Performs a binary search algorithm over a sorted array.\n *\n * @param array The array being searched.\n * @param key The value we search for.\n * @param comparator A function that takes two array elements and returns zero\n *   if they are equal, a negative number if the first element precedes the\n *   second one in the sorting order, or a positive number if the second element\n *   precedes the first one.\n * @return See {@link binarySearch2}\n */\nfunction binarySearch(array, key, comparator) {\n    return binarySearch2(array.length, i => comparator(array[i], key));\n}\n/**\n * Performs a binary search algorithm over a sorted collection. Useful for cases\n * when we need to perform a binary search over something that isn't actually an\n * array, and converting data to an array would defeat the use of binary search\n * in the first place.\n *\n * @param length The collection length.\n * @param compareToKey A function that takes an index of an element in the\n *   collection and returns zero if the value at this index is equal to the\n *   search key, a negative number if the value precedes the search key in the\n *   sorting order, or a positive number if the search key precedes the value.\n * @return A non-negative index of an element, if found. If not found, the\n *   result is -(n+1) (or ~n, using bitwise notation), where n is the index\n *   where the key should be inserted to maintain the sorting order.\n */\nfunction binarySearch2(length, compareToKey) {\n    let low = 0, high = length - 1;\n    while (low <= high) {\n        const mid = ((low + high) / 2) | 0;\n        const comp = compareToKey(mid);\n        if (comp < 0) {\n            low = mid + 1;\n        }\n        else if (comp > 0) {\n            high = mid - 1;\n        }\n        else {\n            return mid;\n        }\n    }\n    return -(low + 1);\n}\nfunction quickSelect(nth, data, compare) {\n    nth = nth | 0;\n    if (nth >= data.length) {\n        throw new TypeError('invalid index');\n    }\n    const pivotValue = data[Math.floor(data.length * Math.random())];\n    const lower = [];\n    const higher = [];\n    const pivots = [];\n    for (const value of data) {\n        const val = compare(value, pivotValue);\n        if (val < 0) {\n            lower.push(value);\n        }\n        else if (val > 0) {\n            higher.push(value);\n        }\n        else {\n            pivots.push(value);\n        }\n    }\n    if (nth < lower.length) {\n        return quickSelect(nth, lower, compare);\n    }\n    else if (nth < lower.length + pivots.length) {\n        return pivots[0];\n    }\n    else {\n        return quickSelect(nth - (lower.length + pivots.length), higher, compare);\n    }\n}\nfunction groupBy(data, compare) {\n    const result = [];\n    let currentGroup = undefined;\n    for (const element of data.slice(0).sort(compare)) {\n        if (!currentGroup || compare(currentGroup[0], element) !== 0) {\n            currentGroup = [element];\n            result.push(currentGroup);\n        }\n        else {\n            currentGroup.push(element);\n        }\n    }\n    return result;\n}\n/**\n * Splits the given items into a list of (non-empty) groups.\n * `shouldBeGrouped` is used to decide if two consecutive items should be in the same group.\n * The order of the items is preserved.\n */\nfunction* groupAdjacentBy(items, shouldBeGrouped) {\n    let currentGroup;\n    let last;\n    for (const item of items) {\n        if (last !== undefined && shouldBeGrouped(last, item)) {\n            currentGroup.push(item);\n        }\n        else {\n            if (currentGroup) {\n                yield currentGroup;\n            }\n            currentGroup = [item];\n        }\n        last = item;\n    }\n    if (currentGroup) {\n        yield currentGroup;\n    }\n}\nfunction forEachAdjacent(arr, f) {\n    for (let i = 0; i <= arr.length; i++) {\n        f(i === 0 ? undefined : arr[i - 1], i === arr.length ? undefined : arr[i]);\n    }\n}\nfunction forEachWithNeighbors(arr, f) {\n    for (let i = 0; i < arr.length; i++) {\n        f(i === 0 ? undefined : arr[i - 1], arr[i], i + 1 === arr.length ? undefined : arr[i + 1]);\n    }\n}\n/**\n * Diffs two *sorted* arrays and computes the splices which apply the diff.\n */\nfunction sortedDiff(before, after, compare) {\n    const result = [];\n    function pushSplice(start, deleteCount, toInsert) {\n        if (deleteCount === 0 && toInsert.length === 0) {\n            return;\n        }\n        const latest = result[result.length - 1];\n        if (latest && latest.start + latest.deleteCount === start) {\n            latest.deleteCount += deleteCount;\n            latest.toInsert.push(...toInsert);\n        }\n        else {\n            result.push({ start, deleteCount, toInsert });\n        }\n    }\n    let beforeIdx = 0;\n    let afterIdx = 0;\n    while (true) {\n        if (beforeIdx === before.length) {\n            pushSplice(beforeIdx, 0, after.slice(afterIdx));\n            break;\n        }\n        if (afterIdx === after.length) {\n            pushSplice(beforeIdx, before.length - beforeIdx, []);\n            break;\n        }\n        const beforeElement = before[beforeIdx];\n        const afterElement = after[afterIdx];\n        const n = compare(beforeElement, afterElement);\n        if (n === 0) {\n            // equal\n            beforeIdx += 1;\n            afterIdx += 1;\n        }\n        else if (n < 0) {\n            // beforeElement is smaller -> before element removed\n            pushSplice(beforeIdx, 1, []);\n            beforeIdx += 1;\n        }\n        else if (n > 0) {\n            // beforeElement is greater -> after element added\n            pushSplice(beforeIdx, 0, [afterElement]);\n            afterIdx += 1;\n        }\n    }\n    return result;\n}\n/**\n * Takes two *sorted* arrays and computes their delta (removed, added elements).\n * Finishes in `Math.min(before.length, after.length)` steps.\n */\nfunction delta(before, after, compare) {\n    const splices = sortedDiff(before, after, compare);\n    const removed = [];\n    const added = [];\n    for (const splice of splices) {\n        removed.push(...before.slice(splice.start, splice.start + splice.deleteCount));\n        added.push(...splice.toInsert);\n    }\n    return { removed, added };\n}\n/**\n * Returns the top N elements from the array.\n *\n * Faster than sorting the entire array when the array is a lot larger than N.\n *\n * @param array The unsorted array.\n * @param compare A sort function for the elements.\n * @param n The number of elements to return.\n * @return The first n elements from array when sorted with compare.\n */\nfunction top(array, compare, n) {\n    if (n === 0) {\n        return [];\n    }\n    const result = array.slice(0, n).sort(compare);\n    topStep(array, compare, result, n, array.length);\n    return result;\n}\n/**\n * Asynchronous variant of `top()` allowing for splitting up work in batches between which the event loop can run.\n *\n * Returns the top N elements from the array.\n *\n * Faster than sorting the entire array when the array is a lot larger than N.\n *\n * @param array The unsorted array.\n * @param compare A sort function for the elements.\n * @param n The number of elements to return.\n * @param batch The number of elements to examine before yielding to the event loop.\n * @return The first n elements from array when sorted with compare.\n */\nfunction topAsync(array, compare, n, batch, token) {\n    if (n === 0) {\n        return Promise.resolve([]);\n    }\n    return new Promise((resolve, reject) => {\n        (async () => {\n            const o = array.length;\n            const result = array.slice(0, n).sort(compare);\n            for (let i = n, m = Math.min(n + batch, o); i < o; i = m, m = Math.min(m + batch, o)) {\n                if (i > n) {\n                    await new Promise(resolve => setTimeout(resolve)); // any other delay function would starve I/O\n                }\n                if (token && token.isCancellationRequested) {\n                    throw new errors_1.CancellationError();\n                }\n                topStep(array, compare, result, i, m);\n            }\n            return result;\n        })()\n            .then(resolve, reject);\n    });\n}\nfunction topStep(array, compare, result, i, m) {\n    for (const n = result.length; i < m; i++) {\n        const element = array[i];\n        if (compare(element, result[n - 1]) < 0) {\n            result.pop();\n            const j = (0, arraysFind_1.findFirstIdxMonotonousOrArrLen)(result, e => compare(element, e) < 0);\n            result.splice(j, 0, element);\n        }\n    }\n}\n/**\n * @returns New array with all falsy values removed. The original array IS NOT modified.\n */\nfunction coalesce(array) {\n    return array.filter((e) => !!e);\n}\n/**\n * Remove all falsy values from `array`. The original array IS modified.\n */\nfunction coalesceInPlace(array) {\n    let to = 0;\n    for (let i = 0; i < array.length; i++) {\n        if (!!array[i]) {\n            array[to] = array[i];\n            to += 1;\n        }\n    }\n    array.length = to;\n}\n/**\n * @deprecated Use `Array.copyWithin` instead\n */\nfunction move(array, from, to) {\n    array.splice(to, 0, array.splice(from, 1)[0]);\n}\n/**\n * @returns false if the provided object is an array and not empty.\n */\nfunction isFalsyOrEmpty(obj) {\n    return !Array.isArray(obj) || obj.length === 0;\n}\nfunction isNonEmptyArray(obj) {\n    return Array.isArray(obj) && obj.length > 0;\n}\n/**\n * Removes duplicates from the given array. The optional keyFn allows to specify\n * how elements are checked for equality by returning an alternate value for each.\n */\nfunction distinct(array, keyFn = value => value) {\n    const seen = new Set();\n    return array.filter(element => {\n        const key = keyFn(element);\n        if (seen.has(key)) {\n            return false;\n        }\n        seen.add(key);\n        return true;\n    });\n}\nfunction uniqueFilter(keyFn) {\n    const seen = new Set();\n    return element => {\n        const key = keyFn(element);\n        if (seen.has(key)) {\n            return false;\n        }\n        seen.add(key);\n        return true;\n    };\n}\nfunction firstOrDefault(array, notFoundValue) {\n    return array.length > 0 ? array[0] : notFoundValue;\n}\nfunction lastOrDefault(array, notFoundValue) {\n    return array.length > 0 ? array[array.length - 1] : notFoundValue;\n}\nfunction commonPrefixLength(one, other, equals = (a, b) => a === b) {\n    let result = 0;\n    for (let i = 0, len = Math.min(one.length, other.length); i < len && equals(one[i], other[i]); i++) {\n        result++;\n    }\n    return result;\n}\nfunction range(arg, to) {\n    let from = typeof to === 'number' ? arg : 0;\n    if (typeof to === 'number') {\n        from = arg;\n    }\n    else {\n        from = 0;\n        to = arg;\n    }\n    const result = [];\n    if (from <= to) {\n        for (let i = from; i < to; i++) {\n            result.push(i);\n        }\n    }\n    else {\n        for (let i = from; i > to; i--) {\n            result.push(i);\n        }\n    }\n    return result;\n}\nfunction index(array, indexer, mapper) {\n    return array.reduce((r, t) => {\n        r[indexer(t)] = mapper ? mapper(t) : t;\n        return r;\n    }, Object.create(null));\n}\n/**\n * Inserts an element into an array. Returns a function which, when\n * called, will remove that element from the array.\n *\n * @deprecated In almost all cases, use a `Set<T>` instead.\n */\nfunction insert(array, element) {\n    array.push(element);\n    return () => remove(array, element);\n}\n/**\n * Removes an element from an array if it can be found.\n *\n * @deprecated In almost all cases, use a `Set<T>` instead.\n */\nfunction remove(array, element) {\n    const index = array.indexOf(element);\n    if (index > -1) {\n        array.splice(index, 1);\n        return element;\n    }\n    return undefined;\n}\n/**\n * Insert `insertArr` inside `target` at `insertIndex`.\n * Please don't touch unless you understand https://jsperf.com/inserting-an-array-within-an-array\n */\nfunction arrayInsert(target, insertIndex, insertArr) {\n    const before = target.slice(0, insertIndex);\n    const after = target.slice(insertIndex);\n    return before.concat(insertArr, after);\n}\n/**\n * Uses Fisher-Yates shuffle to shuffle the given array\n */\nfunction shuffle(array, _seed) {\n    let rand;\n    if (typeof _seed === 'number') {\n        let seed = _seed;\n        // Seeded random number generator in JS. Modified from:\n        // https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript\n        rand = () => {\n            const x = Math.sin(seed++) * 179426549; // throw away most significant digits and reduce any potential bias\n            return x - Math.floor(x);\n        };\n    }\n    else {\n        rand = Math.random;\n    }\n    for (let i = array.length - 1; i > 0; i -= 1) {\n        const j = Math.floor(rand() * (i + 1));\n        const temp = array[i];\n        array[i] = array[j];\n        array[j] = temp;\n    }\n}\n/**\n * Pushes an element to the start of the array, if found.\n */\nfunction pushToStart(arr, value) {\n    const index = arr.indexOf(value);\n    if (index > -1) {\n        arr.splice(index, 1);\n        arr.unshift(value);\n    }\n}\n/**\n * Pushes an element to the end of the array, if found.\n */\nfunction pushToEnd(arr, value) {\n    const index = arr.indexOf(value);\n    if (index > -1) {\n        arr.splice(index, 1);\n        arr.push(value);\n    }\n}\nfunction pushMany(arr, items) {\n    for (const item of items) {\n        arr.push(item);\n    }\n}\nfunction mapArrayOrNot(items, fn) {\n    return Array.isArray(items) ?\n        items.map(fn) :\n        fn(items);\n}\nfunction asArray(x) {\n    return Array.isArray(x) ? x : [x];\n}\nfunction getRandomElement(arr) {\n    return arr[Math.floor(Math.random() * arr.length)];\n}\n/**\n * Insert the new items in the array.\n * @param array The original array.\n * @param start The zero-based location in the array from which to start inserting elements.\n * @param newItems The items to be inserted\n */\nfunction insertInto(array, start, newItems) {\n    const startIdx = getActualStartIndex(array, start);\n    const originalLength = array.length;\n    const newItemsLength = newItems.length;\n    array.length = originalLength + newItemsLength;\n    // Move the items after the start index, start from the end so that we don't overwrite any value.\n    for (let i = originalLength - 1; i >= startIdx; i--) {\n        array[i + newItemsLength] = array[i];\n    }\n    for (let i = 0; i < newItemsLength; i++) {\n        array[i + startIdx] = newItems[i];\n    }\n}\n/**\n * Removes elements from an array and inserts new elements in their place, returning the deleted elements. Alternative to the native Array.splice method, it\n * can only support limited number of items due to the maximum call stack size limit.\n * @param array The original array.\n * @param start The zero-based location in the array from which to start removing elements.\n * @param deleteCount The number of elements to remove.\n * @returns An array containing the elements that were deleted.\n */\nfunction splice(array, start, deleteCount, newItems) {\n    const index = getActualStartIndex(array, start);\n    let result = array.splice(index, deleteCount);\n    if (result === undefined) {\n        // see https://bugs.webkit.org/show_bug.cgi?id=261140\n        result = [];\n    }\n    insertInto(array, index, newItems);\n    return result;\n}\n/**\n * Determine the actual start index (same logic as the native splice() or slice())\n * If greater than the length of the array, start will be set to the length of the array. In this case, no element will be deleted but the method will behave as an adding function, adding as many element as item[n*] provided.\n * If negative, it will begin that many elements from the end of the array. (In this case, the origin -1, meaning -n is the index of the nth last element, and is therefore equivalent to the index of array.length - n.) If array.length + start is less than 0, it will begin from index 0.\n * @param array The target array.\n * @param start The operation index.\n */\nfunction getActualStartIndex(array, start) {\n    return start < 0 ? Math.max(start + array.length, 0) : Math.min(start, array.length);\n}\nvar CompareResult;\n(function (CompareResult) {\n    function isLessThan(result) {\n        return result < 0;\n    }\n    CompareResult.isLessThan = isLessThan;\n    function isLessThanOrEqual(result) {\n        return result <= 0;\n    }\n    CompareResult.isLessThanOrEqual = isLessThanOrEqual;\n    function isGreaterThan(result) {\n        return result > 0;\n    }\n    CompareResult.isGreaterThan = isGreaterThan;\n    function isNeitherLessOrGreaterThan(result) {\n        return result === 0;\n    }\n    CompareResult.isNeitherLessOrGreaterThan = isNeitherLessOrGreaterThan;\n    CompareResult.greaterThan = 1;\n    CompareResult.lessThan = -1;\n    CompareResult.neitherLessOrGreaterThan = 0;\n})(CompareResult || (exports.CompareResult = CompareResult = {}));\nfunction compareBy(selector, comparator) {\n    return (a, b) => comparator(selector(a), selector(b));\n}\nfunction tieBreakComparators(...comparators) {\n    return (item1, item2) => {\n        for (const comparator of comparators) {\n            const result = comparator(item1, item2);\n            if (!CompareResult.isNeitherLessOrGreaterThan(result)) {\n                return result;\n            }\n        }\n        return CompareResult.neitherLessOrGreaterThan;\n    };\n}\n/**\n * The natural order on numbers.\n*/\nconst numberComparator = (a, b) => a - b;\nexports.numberComparator = numberComparator;\nconst booleanComparator = (a, b) => (0, exports.numberComparator)(a ? 1 : 0, b ? 1 : 0);\nexports.booleanComparator = booleanComparator;\nfunction reverseOrder(comparator) {\n    return (a, b) => -comparator(a, b);\n}\nclass ArrayQueue {\n    /**\n     * Constructs a queue that is backed by the given array. Runtime is O(1).\n    */\n    constructor(items) {\n        this.items = items;\n        this.firstIdx = 0;\n        this.lastIdx = this.items.length - 1;\n    }\n    get length() {\n        return this.lastIdx - this.firstIdx + 1;\n    }\n    /**\n     * Consumes elements from the beginning of the queue as long as the predicate returns true.\n     * If no elements were consumed, `null` is returned. Has a runtime of O(result.length).\n    */\n    takeWhile(predicate) {\n        // P(k) := k <= this.lastIdx && predicate(this.items[k])\n        // Find s := min { k | k >= this.firstIdx && !P(k) } and return this.data[this.firstIdx...s)\n        let startIdx = this.firstIdx;\n        while (startIdx < this.items.length && predicate(this.items[startIdx])) {\n            startIdx++;\n        }\n        const result = startIdx === this.firstIdx ? null : this.items.slice(this.firstIdx, startIdx);\n        this.firstIdx = startIdx;\n        return result;\n    }\n    /**\n     * Consumes elements from the end of the queue as long as the predicate returns true.\n     * If no elements were consumed, `null` is returned.\n     * The result has the same order as the underlying array!\n    */\n    takeFromEndWhile(predicate) {\n        // P(k) := this.firstIdx >= k && predicate(this.items[k])\n        // Find s := max { k | k <= this.lastIdx && !P(k) } and return this.data(s...this.lastIdx]\n        let endIdx = this.lastIdx;\n        while (endIdx >= 0 && predicate(this.items[endIdx])) {\n            endIdx--;\n        }\n        const result = endIdx === this.lastIdx ? null : this.items.slice(endIdx + 1, this.lastIdx + 1);\n        this.lastIdx = endIdx;\n        return result;\n    }\n    peek() {\n        if (this.length === 0) {\n            return undefined;\n        }\n        return this.items[this.firstIdx];\n    }\n    peekLast() {\n        if (this.length === 0) {\n            return undefined;\n        }\n        return this.items[this.lastIdx];\n    }\n    dequeue() {\n        const result = this.items[this.firstIdx];\n        this.firstIdx++;\n        return result;\n    }\n    removeLast() {\n        const result = this.items[this.lastIdx];\n        this.lastIdx--;\n        return result;\n    }\n    takeCount(count) {\n        const result = this.items.slice(this.firstIdx, this.firstIdx + count);\n        this.firstIdx += count;\n        return result;\n    }\n}\nexports.ArrayQueue = ArrayQueue;\n/**\n * This class is faster than an iterator and array for lazy computed data.\n*/\nclass CallbackIterable {\n    static { this.empty = new CallbackIterable(_callback => { }); }\n    constructor(\n    /**\n     * Calls the callback for every item.\n     * Stops when the callback returns false.\n    */\n    iterate) {\n        this.iterate = iterate;\n    }\n    forEach(handler) {\n        this.iterate(item => { handler(item); return true; });\n    }\n    toArray() {\n        const result = [];\n        this.iterate(item => { result.push(item); return true; });\n        return result;\n    }\n    filter(predicate) {\n        return new CallbackIterable(cb => this.iterate(item => predicate(item) ? cb(item) : true));\n    }\n    map(mapFn) {\n        return new CallbackIterable(cb => this.iterate(item => cb(mapFn(item))));\n    }\n    some(predicate) {\n        let result = false;\n        this.iterate(item => { result = predicate(item); return !result; });\n        return result;\n    }\n    findFirst(predicate) {\n        let result;\n        this.iterate(item => {\n            if (predicate(item)) {\n                result = item;\n                return false;\n            }\n            return true;\n        });\n        return result;\n    }\n    findLast(predicate) {\n        let result;\n        this.iterate(item => {\n            if (predicate(item)) {\n                result = item;\n            }\n            return true;\n        });\n        return result;\n    }\n    findLastMaxBy(comparator) {\n        let result;\n        let first = true;\n        this.iterate(item => {\n            if (first || CompareResult.isGreaterThan(comparator(item, result))) {\n                first = false;\n                result = item;\n            }\n            return true;\n        });\n        return result;\n    }\n}\nexports.CallbackIterable = CallbackIterable;\n/**\n * Represents a re-arrangement of items in an array.\n */\nclass Permutation {\n    constructor(_indexMap) {\n        this._indexMap = _indexMap;\n    }\n    /**\n     * Returns a permutation that sorts the given array according to the given compare function.\n     */\n    static createSortPermutation(arr, compareFn) {\n        const sortIndices = Array.from(arr.keys()).sort((index1, index2) => compareFn(arr[index1], arr[index2]));\n        return new Permutation(sortIndices);\n    }\n    /**\n     * Returns a new array with the elements of the given array re-arranged according to this permutation.\n     */\n    apply(arr) {\n        return arr.map((_, index) => arr[this._indexMap[index]]);\n    }\n    /**\n     * Returns a new permutation that undoes the re-arrangement of this permutation.\n    */\n    inverse() {\n        const inverseIndexMap = this._indexMap.slice();\n        for (let i = 0; i < this._indexMap.length; i++) {\n            inverseIndexMap[this._indexMap[i]] = i;\n        }\n        return new Permutation(inverseIndexMap);\n    }\n}\nexports.Permutation = Permutation;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MonotonousArray = void 0;\nexports.findLast = findLast;\nexports.findLastIdx = findLastIdx;\nexports.findLastMonotonous = findLastMonotonous;\nexports.findLastIdxMonotonous = findLastIdxMonotonous;\nexports.findFirstMonotonous = findFirstMonotonous;\nexports.findFirstIdxMonotonousOrArrLen = findFirstIdxMonotonousOrArrLen;\nexports.findFirstIdxMonotonous = findFirstIdxMonotonous;\nexports.findFirstMax = findFirstMax;\nexports.findLastMax = findLastMax;\nexports.findFirstMin = findFirstMin;\nexports.findMaxIdx = findMaxIdx;\nexports.mapFindFirst = mapFindFirst;\nfunction findLast(array, predicate) {\n    const idx = findLastIdx(array, predicate);\n    if (idx === -1) {\n        return undefined;\n    }\n    return array[idx];\n}\nfunction findLastIdx(array, predicate, fromIndex = array.length - 1) {\n    for (let i = fromIndex; i >= 0; i--) {\n        const element = array[i];\n        if (predicate(element)) {\n            return i;\n        }\n    }\n    return -1;\n}\n/**\n * Finds the last item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[true, ..., true, false, ..., false]`!\n *\n * @returns `undefined` if no item matches, otherwise the last item that matches the predicate.\n */\nfunction findLastMonotonous(array, predicate) {\n    const idx = findLastIdxMonotonous(array, predicate);\n    return idx === -1 ? undefined : array[idx];\n}\n/**\n * Finds the last item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[true, ..., true, false, ..., false]`!\n *\n * @returns `startIdx - 1` if predicate is false for all items, otherwise the index of the last item that matches the predicate.\n */\nfunction findLastIdxMonotonous(array, predicate, startIdx = 0, endIdxEx = array.length) {\n    let i = startIdx;\n    let j = endIdxEx;\n    while (i < j) {\n        const k = Math.floor((i + j) / 2);\n        if (predicate(array[k])) {\n            i = k + 1;\n        }\n        else {\n            j = k;\n        }\n    }\n    return i - 1;\n}\n/**\n * Finds the first item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[false, ..., false, true, ..., true]`!\n *\n * @returns `undefined` if no item matches, otherwise the first item that matches the predicate.\n */\nfunction findFirstMonotonous(array, predicate) {\n    const idx = findFirstIdxMonotonousOrArrLen(array, predicate);\n    return idx === array.length ? undefined : array[idx];\n}\n/**\n * Finds the first item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[false, ..., false, true, ..., true]`!\n *\n * @returns `endIdxEx` if predicate is false for all items, otherwise the index of the first item that matches the predicate.\n */\nfunction findFirstIdxMonotonousOrArrLen(array, predicate, startIdx = 0, endIdxEx = array.length) {\n    let i = startIdx;\n    let j = endIdxEx;\n    while (i < j) {\n        const k = Math.floor((i + j) / 2);\n        if (predicate(array[k])) {\n            j = k;\n        }\n        else {\n            i = k + 1;\n        }\n    }\n    return i;\n}\nfunction findFirstIdxMonotonous(array, predicate, startIdx = 0, endIdxEx = array.length) {\n    const idx = findFirstIdxMonotonousOrArrLen(array, predicate, startIdx, endIdxEx);\n    return idx === array.length ? -1 : idx;\n}\n/**\n * Use this when\n * * You have a sorted array\n * * You query this array with a monotonous predicate to find the last item that has a certain property.\n * * You query this array multiple times with monotonous predicates that get weaker and weaker.\n */\nclass MonotonousArray {\n    static { this.assertInvariants = false; }\n    constructor(_array) {\n        this._array = _array;\n        this._findLastMonotonousLastIdx = 0;\n    }\n    /**\n     * The predicate must be monotonous, i.e. `arr.map(predicate)` must be like `[true, ..., true, false, ..., false]`!\n     * For subsequent calls, current predicate must be weaker than (or equal to) the previous predicate, i.e. more entries must be `true`.\n     */\n    findLastMonotonous(predicate) {\n        if (MonotonousArray.assertInvariants) {\n            if (this._prevFindLastPredicate) {\n                for (const item of this._array) {\n                    if (this._prevFindLastPredicate(item) && !predicate(item)) {\n                        throw new Error('MonotonousArray: current predicate must be weaker than (or equal to) the previous predicate.');\n                    }\n                }\n            }\n            this._prevFindLastPredicate = predicate;\n        }\n        const idx = findLastIdxMonotonous(this._array, predicate, this._findLastMonotonousLastIdx);\n        this._findLastMonotonousLastIdx = idx + 1;\n        return idx === -1 ? undefined : this._array[idx];\n    }\n}\nexports.MonotonousArray = MonotonousArray;\n/**\n * Returns the first item that is equal to or greater than every other item.\n*/\nfunction findFirstMax(array, comparator) {\n    if (array.length === 0) {\n        return undefined;\n    }\n    let max = array[0];\n    for (let i = 1; i < array.length; i++) {\n        const item = array[i];\n        if (comparator(item, max) > 0) {\n            max = item;\n        }\n    }\n    return max;\n}\n/**\n * Returns the last item that is equal to or greater than every other item.\n*/\nfunction findLastMax(array, comparator) {\n    if (array.length === 0) {\n        return undefined;\n    }\n    let max = array[0];\n    for (let i = 1; i < array.length; i++) {\n        const item = array[i];\n        if (comparator(item, max) >= 0) {\n            max = item;\n        }\n    }\n    return max;\n}\n/**\n * Returns the first item that is equal to or less than every other item.\n*/\nfunction findFirstMin(array, comparator) {\n    return findFirstMax(array, (a, b) => -comparator(a, b));\n}\nfunction findMaxIdx(array, comparator) {\n    if (array.length === 0) {\n        return -1;\n    }\n    let maxIdx = 0;\n    for (let i = 1; i < array.length; i++) {\n        const item = array[i];\n        if (comparator(item, array[maxIdx]) > 0) {\n            maxIdx = i;\n        }\n    }\n    return maxIdx;\n}\n/**\n * Returns the first mapped value of the array which is not undefined.\n */\nfunction mapFindFirst(items, mapFn) {\n    for (const value of items) {\n        const mapped = mapFn(value);\n        if (mapped !== undefined) {\n            return mapped;\n        }\n    }\n    return undefined;\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SetWithKey = void 0;\nexports.groupBy = groupBy;\nexports.diffSets = diffSets;\nexports.diffMaps = diffMaps;\nexports.intersection = intersection;\n/**\n * Groups the collection into a dictionary based on the provided\n * group function.\n */\nfunction groupBy(data, groupFn) {\n    const result = Object.create(null);\n    for (const element of data) {\n        const key = groupFn(element);\n        let target = result[key];\n        if (!target) {\n            target = result[key] = [];\n        }\n        target.push(element);\n    }\n    return result;\n}\nfunction diffSets(before, after) {\n    const removed = [];\n    const added = [];\n    for (const element of before) {\n        if (!after.has(element)) {\n            removed.push(element);\n        }\n    }\n    for (const element of after) {\n        if (!before.has(element)) {\n            added.push(element);\n        }\n    }\n    return { removed, added };\n}\nfunction diffMaps(before, after) {\n    const removed = [];\n    const added = [];\n    for (const [index, value] of before) {\n        if (!after.has(index)) {\n            removed.push(value);\n        }\n    }\n    for (const [index, value] of after) {\n        if (!before.has(index)) {\n            added.push(value);\n        }\n    }\n    return { removed, added };\n}\n/**\n * Computes the intersection of two sets.\n *\n * @param setA - The first set.\n * @param setB - The second iterable.\n * @returns A new set containing the elements that are in both `setA` and `setB`.\n */\nfunction intersection(setA, setB) {\n    const result = new Set();\n    for (const elem of setB) {\n        if (setA.has(elem)) {\n            result.add(elem);\n        }\n    }\n    return result;\n}\nclass SetWithKey {\n    static { _a = Symbol.toStringTag; }\n    constructor(values, toKey) {\n        this.toKey = toKey;\n        this._map = new Map();\n        this[_a] = 'SetWithKey';\n        for (const value of values) {\n            this.add(value);\n        }\n    }\n    get size() {\n        return this._map.size;\n    }\n    add(value) {\n        const key = this.toKey(value);\n        this._map.set(key, value);\n        return this;\n    }\n    delete(value) {\n        return this._map.delete(this.toKey(value));\n    }\n    has(value) {\n        return this._map.has(this.toKey(value));\n    }\n    *entries() {\n        for (const entry of this._map.values()) {\n            yield [entry, entry];\n        }\n    }\n    keys() {\n        return this.values();\n    }\n    *values() {\n        for (const entry of this._map.values()) {\n            yield entry;\n        }\n    }\n    clear() {\n        this._map.clear();\n    }\n    forEach(callbackfn, thisArg) {\n        this._map.forEach(entry => callbackfn.call(thisArg, entry, entry, this));\n    }\n    [Symbol.iterator]() {\n        return this.values();\n    }\n}\nexports.SetWithKey = SetWithKey;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BugIndicatingError = exports.ErrorNoTelemetry = exports.ExpectedError = exports.NotSupportedError = exports.NotImplementedError = exports.ReadonlyError = exports.CancellationError = exports.errorHandler = exports.ErrorHandler = void 0;\nexports.setUnexpectedErrorHandler = setUnexpectedErrorHandler;\nexports.isSigPipeError = isSigPipeError;\nexports.onUnexpectedError = onUnexpectedError;\nexports.onUnexpectedExternalError = onUnexpectedExternalError;\nexports.transformErrorForSerialization = transformErrorForSerialization;\nexports.transformErrorFromSerialization = transformErrorFromSerialization;\nexports.isCancellationError = isCancellationError;\nexports.canceled = canceled;\nexports.illegalArgument = illegalArgument;\nexports.illegalState = illegalState;\nexports.getErrorMessage = getErrorMessage;\n// Avoid circular dependency on EventEmitter by implementing a subset of the interface.\nclass ErrorHandler {\n    constructor() {\n        this.listeners = [];\n        this.unexpectedErrorHandler = function (e) {\n            setTimeout(() => {\n                if (e.stack) {\n                    if (ErrorNoTelemetry.isErrorNoTelemetry(e)) {\n                        throw new ErrorNoTelemetry(e.message + '\\n\\n' + e.stack);\n                    }\n                    throw new Error(e.message + '\\n\\n' + e.stack);\n                }\n                throw e;\n            }, 0);\n        };\n    }\n    addListener(listener) {\n        this.listeners.push(listener);\n        return () => {\n            this._removeListener(listener);\n        };\n    }\n    emit(e) {\n        this.listeners.forEach((listener) => {\n            listener(e);\n        });\n    }\n    _removeListener(listener) {\n        this.listeners.splice(this.listeners.indexOf(listener), 1);\n    }\n    setUnexpectedErrorHandler(newUnexpectedErrorHandler) {\n        this.unexpectedErrorHandler = newUnexpectedErrorHandler;\n    }\n    getUnexpectedErrorHandler() {\n        return this.unexpectedErrorHandler;\n    }\n    onUnexpectedError(e) {\n        this.unexpectedErrorHandler(e);\n        this.emit(e);\n    }\n    // For external errors, we don't want the listeners to be called\n    onUnexpectedExternalError(e) {\n        this.unexpectedErrorHandler(e);\n    }\n}\nexports.ErrorHandler = ErrorHandler;\nexports.errorHandler = new ErrorHandler();\n/** @skipMangle */\nfunction setUnexpectedErrorHandler(newUnexpectedErrorHandler) {\n    exports.errorHandler.setUnexpectedErrorHandler(newUnexpectedErrorHandler);\n}\n/**\n * Returns if the error is a SIGPIPE error. SIGPIPE errors should generally be\n * logged at most once, to avoid a loop.\n *\n * @see https://github.com/microsoft/vscode-remote-release/issues/6481\n */\nfunction isSigPipeError(e) {\n    if (!e || typeof e !== 'object') {\n        return false;\n    }\n    const cast = e;\n    return cast.code === 'EPIPE' && cast.syscall?.toUpperCase() === 'WRITE';\n}\nfunction onUnexpectedError(e) {\n    // ignore errors from cancelled promises\n    if (!isCancellationError(e)) {\n        exports.errorHandler.onUnexpectedError(e);\n    }\n    return undefined;\n}\nfunction onUnexpectedExternalError(e) {\n    // ignore errors from cancelled promises\n    if (!isCancellationError(e)) {\n        exports.errorHandler.onUnexpectedExternalError(e);\n    }\n    return undefined;\n}\nfunction transformErrorForSerialization(error) {\n    if (error instanceof Error) {\n        const { name, message } = error;\n        const stack = error.stacktrace || error.stack;\n        return {\n            $isError: true,\n            name,\n            message,\n            stack,\n            noTelemetry: ErrorNoTelemetry.isErrorNoTelemetry(error)\n        };\n    }\n    // return as is\n    return error;\n}\nfunction transformErrorFromSerialization(data) {\n    let error;\n    if (data.noTelemetry) {\n        error = new ErrorNoTelemetry();\n    }\n    else {\n        error = new Error();\n        error.name = data.name;\n    }\n    error.message = data.message;\n    error.stack = data.stack;\n    return error;\n}\nconst canceledName = 'Canceled';\n/**\n * Checks if the given error is a promise in canceled state\n */\nfunction isCancellationError(error) {\n    if (error instanceof CancellationError) {\n        return true;\n    }\n    return error instanceof Error && error.name === canceledName && error.message === canceledName;\n}\n// !!!IMPORTANT!!!\n// Do NOT change this class because it is also used as an API-type.\nclass CancellationError extends Error {\n    constructor() {\n        super(canceledName);\n        this.name = this.message;\n    }\n}\nexports.CancellationError = CancellationError;\n/**\n * @deprecated use {@link CancellationError `new CancellationError()`} instead\n */\nfunction canceled() {\n    const error = new Error(canceledName);\n    error.name = error.message;\n    return error;\n}\nfunction illegalArgument(name) {\n    if (name) {\n        return new Error(`Illegal argument: ${name}`);\n    }\n    else {\n        return new Error('Illegal argument');\n    }\n}\nfunction illegalState(name) {\n    if (name) {\n        return new Error(`Illegal state: ${name}`);\n    }\n    else {\n        return new Error('Illegal state');\n    }\n}\nclass ReadonlyError extends TypeError {\n    constructor(name) {\n        super(name ? `${name} is read-only and cannot be changed` : 'Cannot change read-only property');\n    }\n}\nexports.ReadonlyError = ReadonlyError;\nfunction getErrorMessage(err) {\n    if (!err) {\n        return 'Error';\n    }\n    if (err.message) {\n        return err.message;\n    }\n    if (err.stack) {\n        return err.stack.split('\\n')[0];\n    }\n    return String(err);\n}\nclass NotImplementedError extends Error {\n    constructor(message) {\n        super('NotImplemented');\n        if (message) {\n            this.message = message;\n        }\n    }\n}\nexports.NotImplementedError = NotImplementedError;\nclass NotSupportedError extends Error {\n    constructor(message) {\n        super('NotSupported');\n        if (message) {\n            this.message = message;\n        }\n    }\n}\nexports.NotSupportedError = NotSupportedError;\nclass ExpectedError extends Error {\n    constructor() {\n        super(...arguments);\n        this.isExpected = true;\n    }\n}\nexports.ExpectedError = ExpectedError;\n/**\n * Error that when thrown won't be logged in telemetry as an unhandled error.\n */\nclass ErrorNoTelemetry extends Error {\n    constructor(msg) {\n        super(msg);\n        this.name = 'CodeExpectedError';\n    }\n    static fromError(err) {\n        if (err instanceof ErrorNoTelemetry) {\n            return err;\n        }\n        const result = new ErrorNoTelemetry();\n        result.message = err.message;\n        result.stack = err.stack;\n        return result;\n    }\n    static isErrorNoTelemetry(err) {\n        return err.name === 'CodeExpectedError';\n    }\n}\nexports.ErrorNoTelemetry = ErrorNoTelemetry;\n/**\n * This error indicates a bug.\n * Do not throw this for invalid user input.\n * Only catch this error to recover gracefully from bugs.\n */\nclass BugIndicatingError extends Error {\n    constructor(message) {\n        super(message || 'An unexpected bug occurred.');\n        Object.setPrototypeOf(this, BugIndicatingError.prototype);\n        // Because we know for sure only buggy code throws this,\n        // we definitely want to break here and fix the bug.\n        // eslint-disable-next-line no-debugger\n        // debugger;\n    }\n}\nexports.BugIndicatingError = BugIndicatingError;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ValueWithChangeEvent = exports.Relay = exports.EventBufferer = exports.DynamicListEventMultiplexer = exports.EventMultiplexer = exports.MicrotaskEmitter = exports.DebounceEmitter = exports.PauseableEmitter = exports.AsyncEmitter = exports.createEventDeliveryQueue = exports.Emitter = exports.ListenerRefusalError = exports.ListenerLeakError = exports.EventProfiling = exports.Event = void 0;\nexports.setGlobalLeakWarningThreshold = setGlobalLeakWarningThreshold;\nconst errors_1 = require(\"vs/base/common/errors\");\nconst functional_1 = require(\"vs/base/common/functional\");\nconst lifecycle_1 = require(\"vs/base/common/lifecycle\");\nconst linkedList_1 = require(\"vs/base/common/linkedList\");\nconst stopwatch_1 = require(\"vs/base/common/stopwatch\");\n// -----------------------------------------------------------------------------------------------------------------------\n// Uncomment the next line to print warnings whenever a listener is GC'ed without having been disposed. This is a LEAK.\n// -----------------------------------------------------------------------------------------------------------------------\nconst _enableListenerGCedWarning = false;\n// -----------------------------------------------------------------------------------------------------------------------\n// Uncomment the next line to print warnings whenever an emitter with listeners is disposed. That is a sign of code smell.\n// -----------------------------------------------------------------------------------------------------------------------\nconst _enableDisposeWithListenerWarning = false;\n// -----------------------------------------------------------------------------------------------------------------------\n// Uncomment the next line to print warnings whenever a snapshotted event is used repeatedly without cleanup.\n// See https://github.com/microsoft/vscode/issues/142851\n// -----------------------------------------------------------------------------------------------------------------------\nconst _enableSnapshotPotentialLeakWarning = false;\nvar Event;\n(function (Event) {\n    Event.None = () => lifecycle_1.Disposable.None;\n    function _addLeakageTraceLogic(options) {\n        if (_enableSnapshotPotentialLeakWarning) {\n            const { onDidAddListener: origListenerDidAdd } = options;\n            const stack = Stacktrace.create();\n            let count = 0;\n            options.onDidAddListener = () => {\n                if (++count === 2) {\n                    console.warn('snapshotted emitter LIKELY used public and SHOULD HAVE BEEN created with DisposableStore. snapshotted here');\n                    stack.print();\n                }\n                origListenerDidAdd?.();\n            };\n        }\n    }\n    /**\n     * Given an event, returns another event which debounces calls and defers the listeners to a later task via a shared\n     * `setTimeout`. The event is converted into a signal (`Event<void>`) to avoid additional object creation as a\n     * result of merging events and to try prevent race conditions that could arise when using related deferred and\n     * non-deferred events.\n     *\n     * This is useful for deferring non-critical work (eg. general UI updates) to ensure it does not block critical work\n     * (eg. latency of keypress to text rendered).\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     *\n     * @param event The event source for the new event.\n     * @param disposable A disposable store to add the new EventEmitter to.\n     */\n    function defer(event, disposable) {\n        return debounce(event, () => void 0, 0, undefined, true, undefined, disposable);\n    }\n    Event.defer = defer;\n    /**\n     * Given an event, returns another event which only fires once.\n     *\n     * @param event The event source for the new event.\n     */\n    function once(event) {\n        return (listener, thisArgs = null, disposables) => {\n            // we need this, in case the event fires during the listener call\n            let didFire = false;\n            let result = undefined;\n            result = event(e => {\n                if (didFire) {\n                    return;\n                }\n                else if (result) {\n                    result.dispose();\n                }\n                else {\n                    didFire = true;\n                }\n                return listener.call(thisArgs, e);\n            }, null, disposables);\n            if (didFire) {\n                result.dispose();\n            }\n            return result;\n        };\n    }\n    Event.once = once;\n    /**\n     * Maps an event of one type into an event of another type using a mapping function, similar to how\n     * `Array.prototype.map` works.\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     *\n     * @param event The event source for the new event.\n     * @param map The mapping function.\n     * @param disposable A disposable store to add the new EventEmitter to.\n     */\n    function map(event, map, disposable) {\n        return snapshot((listener, thisArgs = null, disposables) => event(i => listener.call(thisArgs, map(i)), null, disposables), disposable);\n    }\n    Event.map = map;\n    /**\n     * Wraps an event in another event that performs some function on the event object before firing.\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     *\n     * @param event The event source for the new event.\n     * @param each The function to perform on the event object.\n     * @param disposable A disposable store to add the new EventEmitter to.\n     */\n    function forEach(event, each, disposable) {\n        return snapshot((listener, thisArgs = null, disposables) => event(i => { each(i); listener.call(thisArgs, i); }, null, disposables), disposable);\n    }\n    Event.forEach = forEach;\n    function filter(event, filter, disposable) {\n        return snapshot((listener, thisArgs = null, disposables) => event(e => filter(e) && listener.call(thisArgs, e), null, disposables), disposable);\n    }\n    Event.filter = filter;\n    /**\n     * Given an event, returns the same event but typed as `Event<void>`.\n     */\n    function signal(event) {\n        return event;\n    }\n    Event.signal = signal;\n    function any(...events) {\n        return (listener, thisArgs = null, disposables) => {\n            const disposable = (0, lifecycle_1.combinedDisposable)(...events.map(event => event(e => listener.call(thisArgs, e))));\n            return addAndReturnDisposable(disposable, disposables);\n        };\n    }\n    Event.any = any;\n    /**\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     */\n    function reduce(event, merge, initial, disposable) {\n        let output = initial;\n        return map(event, e => {\n            output = merge(output, e);\n            return output;\n        }, disposable);\n    }\n    Event.reduce = reduce;\n    function snapshot(event, disposable) {\n        let listener;\n        const options = {\n            onWillAddFirstListener() {\n                listener = event(emitter.fire, emitter);\n            },\n            onDidRemoveLastListener() {\n                listener?.dispose();\n            }\n        };\n        if (!disposable) {\n            _addLeakageTraceLogic(options);\n        }\n        const emitter = new Emitter(options);\n        disposable?.add(emitter);\n        return emitter.event;\n    }\n    /**\n     * Adds the IDisposable to the store if it's set, and returns it. Useful to\n     * Event function implementation.\n     */\n    function addAndReturnDisposable(d, store) {\n        if (store instanceof Array) {\n            store.push(d);\n        }\n        else if (store) {\n            store.add(d);\n        }\n        return d;\n    }\n    function debounce(event, merge, delay = 100, leading = false, flushOnListenerRemove = false, leakWarningThreshold, disposable) {\n        let subscription;\n        let output = undefined;\n        let handle = undefined;\n        let numDebouncedCalls = 0;\n        let doFire;\n        const options = {\n            leakWarningThreshold,\n            onWillAddFirstListener() {\n                subscription = event(cur => {\n                    numDebouncedCalls++;\n                    output = merge(output, cur);\n                    if (leading && !handle) {\n                        emitter.fire(output);\n                        output = undefined;\n                    }\n                    doFire = () => {\n                        const _output = output;\n                        output = undefined;\n                        handle = undefined;\n                        if (!leading || numDebouncedCalls > 1) {\n                            emitter.fire(_output);\n                        }\n                        numDebouncedCalls = 0;\n                    };\n                    if (typeof delay === 'number') {\n                        clearTimeout(handle);\n                        handle = setTimeout(doFire, delay);\n                    }\n                    else {\n                        if (handle === undefined) {\n                            handle = 0;\n                            queueMicrotask(doFire);\n                        }\n                    }\n                });\n            },\n            onWillRemoveListener() {\n                if (flushOnListenerRemove && numDebouncedCalls > 0) {\n                    doFire?.();\n                }\n            },\n            onDidRemoveLastListener() {\n                doFire = undefined;\n                subscription.dispose();\n            }\n        };\n        if (!disposable) {\n            _addLeakageTraceLogic(options);\n        }\n        const emitter = new Emitter(options);\n        disposable?.add(emitter);\n        return emitter.event;\n    }\n    Event.debounce = debounce;\n    /**\n     * Debounces an event, firing after some delay (default=0) with an array of all event original objects.\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     */\n    function accumulate(event, delay = 0, disposable) {\n        return Event.debounce(event, (last, e) => {\n            if (!last) {\n                return [e];\n            }\n            last.push(e);\n            return last;\n        }, delay, undefined, true, undefined, disposable);\n    }\n    Event.accumulate = accumulate;\n    /**\n     * Filters an event such that some condition is _not_ met more than once in a row, effectively ensuring duplicate\n     * event objects from different sources do not fire the same event object.\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     *\n     * @param event The event source for the new event.\n     * @param equals The equality condition.\n     * @param disposable A disposable store to add the new EventEmitter to.\n     *\n     * @example\n     * ```\n     * // Fire only one time when a single window is opened or focused\n     * Event.latch(Event.any(onDidOpenWindow, onDidFocusWindow))\n     * ```\n     */\n    function latch(event, equals = (a, b) => a === b, disposable) {\n        let firstCall = true;\n        let cache;\n        return filter(event, value => {\n            const shouldEmit = firstCall || !equals(value, cache);\n            firstCall = false;\n            cache = value;\n            return shouldEmit;\n        }, disposable);\n    }\n    Event.latch = latch;\n    /**\n     * Splits an event whose parameter is a union type into 2 separate events for each type in the union.\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     *\n     * @example\n     * ```\n     * const event = new EventEmitter<number | undefined>().event;\n     * const [numberEvent, undefinedEvent] = Event.split(event, isUndefined);\n     * ```\n     *\n     * @param event The event source for the new event.\n     * @param isT A function that determines what event is of the first type.\n     * @param disposable A disposable store to add the new EventEmitter to.\n     */\n    function split(event, isT, disposable) {\n        return [\n            Event.filter(event, isT, disposable),\n            Event.filter(event, e => !isT(e), disposable),\n        ];\n    }\n    Event.split = split;\n    /**\n     * Buffers an event until it has a listener attached.\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     *\n     * @param event The event source for the new event.\n     * @param flushAfterTimeout Determines whether to flush the buffer after a timeout immediately or after a\n     * `setTimeout` when the first event listener is added.\n     * @param _buffer Internal: A source event array used for tests.\n     *\n     * @example\n     * ```\n     * // Start accumulating events, when the first listener is attached, flush\n     * // the event after a timeout such that multiple listeners attached before\n     * // the timeout would receive the event\n     * this.onInstallExtension = Event.buffer(service.onInstallExtension, true);\n     * ```\n     */\n    function buffer(event, flushAfterTimeout = false, _buffer = [], disposable) {\n        let buffer = _buffer.slice();\n        let listener = event(e => {\n            if (buffer) {\n                buffer.push(e);\n            }\n            else {\n                emitter.fire(e);\n            }\n        });\n        if (disposable) {\n            disposable.add(listener);\n        }\n        const flush = () => {\n            buffer?.forEach(e => emitter.fire(e));\n            buffer = null;\n        };\n        const emitter = new Emitter({\n            onWillAddFirstListener() {\n                if (!listener) {\n                    listener = event(e => emitter.fire(e));\n                    if (disposable) {\n                        disposable.add(listener);\n                    }\n                }\n            },\n            onDidAddFirstListener() {\n                if (buffer) {\n                    if (flushAfterTimeout) {\n                        setTimeout(flush);\n                    }\n                    else {\n                        flush();\n                    }\n                }\n            },\n            onDidRemoveLastListener() {\n                if (listener) {\n                    listener.dispose();\n                }\n                listener = null;\n            }\n        });\n        if (disposable) {\n            disposable.add(emitter);\n        }\n        return emitter.event;\n    }\n    Event.buffer = buffer;\n    /**\n     * Wraps the event in an {@link IChainableEvent}, allowing a more functional programming style.\n     *\n     * @example\n     * ```\n     * // Normal\n     * const onEnterPressNormal = Event.filter(\n     *   Event.map(onKeyPress.event, e => new StandardKeyboardEvent(e)),\n     *   e.keyCode === KeyCode.Enter\n     * ).event;\n     *\n     * // Using chain\n     * const onEnterPressChain = Event.chain(onKeyPress.event, $ => $\n     *   .map(e => new StandardKeyboardEvent(e))\n     *   .filter(e => e.keyCode === KeyCode.Enter)\n     * );\n     * ```\n     */\n    function chain(event, sythensize) {\n        const fn = (listener, thisArgs, disposables) => {\n            const cs = sythensize(new ChainableSynthesis());\n            return event(function (value) {\n                const result = cs.evaluate(value);\n                if (result !== HaltChainable) {\n                    listener.call(thisArgs, result);\n                }\n            }, undefined, disposables);\n        };\n        return fn;\n    }\n    Event.chain = chain;\n    const HaltChainable = Symbol('HaltChainable');\n    class ChainableSynthesis {\n        constructor() {\n            this.steps = [];\n        }\n        map(fn) {\n            this.steps.push(fn);\n            return this;\n        }\n        forEach(fn) {\n            this.steps.push(v => {\n                fn(v);\n                return v;\n            });\n            return this;\n        }\n        filter(fn) {\n            this.steps.push(v => fn(v) ? v : HaltChainable);\n            return this;\n        }\n        reduce(merge, initial) {\n            let last = initial;\n            this.steps.push(v => {\n                last = merge(last, v);\n                return last;\n            });\n            return this;\n        }\n        latch(equals = (a, b) => a === b) {\n            let firstCall = true;\n            let cache;\n            this.steps.push(value => {\n                const shouldEmit = firstCall || !equals(value, cache);\n                firstCall = false;\n                cache = value;\n                return shouldEmit ? value : HaltChainable;\n            });\n            return this;\n        }\n        evaluate(value) {\n            for (const step of this.steps) {\n                value = step(value);\n                if (value === HaltChainable) {\n                    break;\n                }\n            }\n            return value;\n        }\n    }\n    /**\n     * Creates an {@link Event} from a node event emitter.\n     */\n    function fromNodeEventEmitter(emitter, eventName, map = id => id) {\n        const fn = (...args) => result.fire(map(...args));\n        const onFirstListenerAdd = () => emitter.on(eventName, fn);\n        const onLastListenerRemove = () => emitter.removeListener(eventName, fn);\n        const result = new Emitter({ onWillAddFirstListener: onFirstListenerAdd, onDidRemoveLastListener: onLastListenerRemove });\n        return result.event;\n    }\n    Event.fromNodeEventEmitter = fromNodeEventEmitter;\n    /**\n     * Creates an {@link Event} from a DOM event emitter.\n     */\n    function fromDOMEventEmitter(emitter, eventName, map = id => id) {\n        const fn = (...args) => result.fire(map(...args));\n        const onFirstListenerAdd = () => emitter.addEventListener(eventName, fn);\n        const onLastListenerRemove = () => emitter.removeEventListener(eventName, fn);\n        const result = new Emitter({ onWillAddFirstListener: onFirstListenerAdd, onDidRemoveLastListener: onLastListenerRemove });\n        return result.event;\n    }\n    Event.fromDOMEventEmitter = fromDOMEventEmitter;\n    /**\n     * Creates a promise out of an event, using the {@link Event.once} helper.\n     */\n    function toPromise(event) {\n        return new Promise(resolve => once(event)(resolve));\n    }\n    Event.toPromise = toPromise;\n    /**\n     * Creates an event out of a promise that fires once when the promise is\n     * resolved with the result of the promise or `undefined`.\n     */\n    function fromPromise(promise) {\n        const result = new Emitter();\n        promise.then(res => {\n            result.fire(res);\n        }, () => {\n            result.fire(undefined);\n        }).finally(() => {\n            result.dispose();\n        });\n        return result.event;\n    }\n    Event.fromPromise = fromPromise;\n    /**\n     * A convenience function for forwarding an event to another emitter which\n     * improves readability.allows Event.forward(event, emitter) instead of `event(e => emitter.fire(e))`.\n     * @param from The event to forward.\n     * @param to The emitter to forward the event to.\n     * @example\n     * Event.forward(event, emitter);\n     * // equivalent to\n     * event(e => emitter.fire(e));\n     * // equivalent to\n     * event(emitter.fire, emitter);\n     */\n    function forward(from, to) {\n        return from(e => to.fire(e));\n    }\n    Event.forward = forward;\n    function runAndSubscribe(event, handler, initial) {\n        handler(initial);\n        return event(e => handler(e));\n    }\n    Event.runAndSubscribe = runAndSubscribe;\n    class EmitterObserver {\n        constructor(_observable, store) {\n            this._observable = _observable;\n            this._counter = 0;\n            this._hasChanged = false;\n            const options = {\n                onWillAddFirstListener: () => {\n                    _observable.addObserver(this);\n                },\n                onDidRemoveLastListener: () => {\n                    _observable.removeObserver(this);\n                }\n            };\n            if (!store) {\n                _addLeakageTraceLogic(options);\n            }\n            this.emitter = new Emitter(options);\n            if (store) {\n                store.add(this.emitter);\n            }\n        }\n        beginUpdate(_observable) {\n            // assert(_observable === this.obs);\n            this._counter++;\n        }\n        handlePossibleChange(_observable) {\n            // assert(_observable === this.obs);\n        }\n        handleChange(_observable, _change) {\n            // assert(_observable === this.obs);\n            this._hasChanged = true;\n        }\n        endUpdate(_observable) {\n            // assert(_observable === this.obs);\n            this._counter--;\n            if (this._counter === 0) {\n                this._observable.reportChanges();\n                if (this._hasChanged) {\n                    this._hasChanged = false;\n                    this.emitter.fire(this._observable.get());\n                }\n            }\n        }\n    }\n    /**\n     * Creates an event emitter that is fired when the observable changes.\n     * Each listeners subscribes to the emitter.\n     */\n    function fromObservable(obs, store) {\n        const observer = new EmitterObserver(obs, store);\n        return observer.emitter.event;\n    }\n    Event.fromObservable = fromObservable;\n    /**\n     * Each listener is attached to the observable directly.\n     */\n    function fromObservableLight(observable) {\n        return (listener, thisArgs, disposables) => {\n            let count = 0;\n            let didChange = false;\n            const observer = {\n                beginUpdate() {\n                    count++;\n                },\n                endUpdate() {\n                    count--;\n                    if (count === 0) {\n                        observable.reportChanges();\n                        if (didChange) {\n                            didChange = false;\n                            listener.call(thisArgs);\n                        }\n                    }\n                },\n                handlePossibleChange() {\n                    // noop\n                },\n                handleChange() {\n                    didChange = true;\n                }\n            };\n            observable.addObserver(observer);\n            observable.reportChanges();\n            const disposable = {\n                dispose() {\n                    observable.removeObserver(observer);\n                }\n            };\n            if (disposables instanceof lifecycle_1.DisposableStore) {\n                disposables.add(disposable);\n            }\n            else if (Array.isArray(disposables)) {\n                disposables.push(disposable);\n            }\n            return disposable;\n        };\n    }\n    Event.fromObservableLight = fromObservableLight;\n})(Event || (exports.Event = Event = {}));\nclass EventProfiling {\n    static { this.all = new Set(); }\n    static { this._idPool = 0; }\n    constructor(name) {\n        this.listenerCount = 0;\n        this.invocationCount = 0;\n        this.elapsedOverall = 0;\n        this.durations = [];\n        this.name = `${name}_${EventProfiling._idPool++}`;\n        EventProfiling.all.add(this);\n    }\n    start(listenerCount) {\n        this._stopWatch = new stopwatch_1.StopWatch();\n        this.listenerCount = listenerCount;\n    }\n    stop() {\n        if (this._stopWatch) {\n            const elapsed = this._stopWatch.elapsed();\n            this.durations.push(elapsed);\n            this.elapsedOverall += elapsed;\n            this.invocationCount += 1;\n            this._stopWatch = undefined;\n        }\n    }\n}\nexports.EventProfiling = EventProfiling;\nlet _globalLeakWarningThreshold = -1;\nfunction setGlobalLeakWarningThreshold(n) {\n    const oldValue = _globalLeakWarningThreshold;\n    _globalLeakWarningThreshold = n;\n    return {\n        dispose() {\n            _globalLeakWarningThreshold = oldValue;\n        }\n    };\n}\nclass LeakageMonitor {\n    static { this._idPool = 1; }\n    constructor(_errorHandler, threshold, name = (LeakageMonitor._idPool++).toString(16).padStart(3, '0')) {\n        this._errorHandler = _errorHandler;\n        this.threshold = threshold;\n        this.name = name;\n        this._warnCountdown = 0;\n    }\n    dispose() {\n        this._stacks?.clear();\n    }\n    check(stack, listenerCount) {\n        const threshold = this.threshold;\n        if (threshold <= 0 || listenerCount < threshold) {\n            return undefined;\n        }\n        if (!this._stacks) {\n            this._stacks = new Map();\n        }\n        const count = (this._stacks.get(stack.value) || 0);\n        this._stacks.set(stack.value, count + 1);\n        this._warnCountdown -= 1;\n        if (this._warnCountdown <= 0) {\n            // only warn on first exceed and then every time the limit\n            // is exceeded by 50% again\n            this._warnCountdown = threshold * 0.5;\n            const [topStack, topCount] = this.getMostFrequentStack();\n            const message = `[${this.name}] potential listener LEAK detected, having ${listenerCount} listeners already. MOST frequent listener (${topCount}):`;\n            console.warn(message);\n            console.warn(topStack);\n            const error = new ListenerLeakError(message, topStack);\n            this._errorHandler(error);\n        }\n        return () => {\n            const count = (this._stacks.get(stack.value) || 0);\n            this._stacks.set(stack.value, count - 1);\n        };\n    }\n    getMostFrequentStack() {\n        if (!this._stacks) {\n            return undefined;\n        }\n        let topStack;\n        let topCount = 0;\n        for (const [stack, count] of this._stacks) {\n            if (!topStack || topCount < count) {\n                topStack = [stack, count];\n                topCount = count;\n            }\n        }\n        return topStack;\n    }\n}\nclass Stacktrace {\n    static create() {\n        const err = new Error();\n        return new Stacktrace(err.stack ?? '');\n    }\n    constructor(value) {\n        this.value = value;\n    }\n    print() {\n        console.warn(this.value.split('\\n').slice(2).join('\\n'));\n    }\n}\n// error that is logged when going over the configured listener threshold\nclass ListenerLeakError extends Error {\n    constructor(message, stack) {\n        super(message);\n        this.name = 'ListenerLeakError';\n        this.stack = stack;\n    }\n}\nexports.ListenerLeakError = ListenerLeakError;\n// SEVERE error that is logged when having gone way over the configured listener\n// threshold so that the emitter refuses to accept more listeners\nclass ListenerRefusalError extends Error {\n    constructor(message, stack) {\n        super(message);\n        this.name = 'ListenerRefusalError';\n        this.stack = stack;\n    }\n}\nexports.ListenerRefusalError = ListenerRefusalError;\nlet id = 0;\nclass UniqueContainer {\n    constructor(value) {\n        this.value = value;\n        this.id = id++;\n    }\n}\nconst compactionThreshold = 2;\nconst forEachListener = (listeners, fn) => {\n    if (listeners instanceof UniqueContainer) {\n        fn(listeners);\n    }\n    else {\n        for (let i = 0; i < listeners.length; i++) {\n            const l = listeners[i];\n            if (l) {\n                fn(l);\n            }\n        }\n    }\n};\nlet _listenerFinalizers;\nif (_enableListenerGCedWarning) {\n    const leaks = [];\n    setInterval(() => {\n        if (leaks.length === 0) {\n            return;\n        }\n        console.warn('[LEAKING LISTENERS] GC\\'ed these listeners that were NOT yet disposed:');\n        console.warn(leaks.join('\\n'));\n        leaks.length = 0;\n    }, 3000);\n    _listenerFinalizers = new FinalizationRegistry(heldValue => {\n        if (typeof heldValue === 'string') {\n            leaks.push(heldValue);\n        }\n    });\n}\n/**\n * The Emitter can be used to expose an Event to the public\n * to fire it from the insides.\n * Sample:\n    class Document {\n\n        private readonly _onDidChange = new Emitter<(value:string)=>any>();\n\n        public onDidChange = this._onDidChange.event;\n\n        // getter-style\n        // get onDidChange(): Event<(value:string)=>any> {\n        // \treturn this._onDidChange.event;\n        // }\n\n        private _doIt() {\n            //...\n            this._onDidChange.fire(value);\n        }\n    }\n */\nclass Emitter {\n    constructor(options) {\n        this._size = 0;\n        this._options = options;\n        this._leakageMon = (_globalLeakWarningThreshold > 0 || this._options?.leakWarningThreshold)\n            ? new LeakageMonitor(options?.onListenerError ?? errors_1.onUnexpectedError, this._options?.leakWarningThreshold ?? _globalLeakWarningThreshold) :\n            undefined;\n        this._perfMon = this._options?._profName ? new EventProfiling(this._options._profName) : undefined;\n        this._deliveryQueue = this._options?.deliveryQueue;\n    }\n    dispose() {\n        if (!this._disposed) {\n            this._disposed = true;\n            // It is bad to have listeners at the time of disposing an emitter, it is worst to have listeners keep the emitter\n            // alive via the reference that's embedded in their disposables. Therefore we loop over all remaining listeners and\n            // unset their subscriptions/disposables. Looping and blaming remaining listeners is done on next tick because the\n            // the following programming pattern is very popular:\n            //\n            // const someModel = this._disposables.add(new ModelObject()); // (1) create and register model\n            // this._disposables.add(someModel.onDidChange(() => { ... }); // (2) subscribe and register model-event listener\n            // ...later...\n            // this._disposables.dispose(); disposes (1) then (2): don't warn after (1) but after the \"overall dispose\" is done\n            if (this._deliveryQueue?.current === this) {\n                this._deliveryQueue.reset();\n            }\n            if (this._listeners) {\n                if (_enableDisposeWithListenerWarning) {\n                    const listeners = this._listeners;\n                    queueMicrotask(() => {\n                        forEachListener(listeners, l => l.stack?.print());\n                    });\n                }\n                this._listeners = undefined;\n                this._size = 0;\n            }\n            this._options?.onDidRemoveLastListener?.();\n            this._leakageMon?.dispose();\n        }\n    }\n    /**\n     * For the public to allow to subscribe\n     * to events from this Emitter\n     */\n    get event() {\n        this._event ??= (callback, thisArgs, disposables) => {\n            if (this._leakageMon && this._size > this._leakageMon.threshold ** 2) {\n                const message = `[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far (${this._size} vs ${this._leakageMon.threshold})`;\n                console.warn(message);\n                const tuple = this._leakageMon.getMostFrequentStack() ?? ['UNKNOWN stack', -1];\n                const error = new ListenerRefusalError(`${message}. HINT: Stack shows most frequent listener (${tuple[1]}-times)`, tuple[0]);\n                const errorHandler = this._options?.onListenerError || errors_1.onUnexpectedError;\n                errorHandler(error);\n                return lifecycle_1.Disposable.None;\n            }\n            if (this._disposed) {\n                // todo: should we warn if a listener is added to a disposed emitter? This happens often\n                return lifecycle_1.Disposable.None;\n            }\n            if (thisArgs) {\n                callback = callback.bind(thisArgs);\n            }\n            const contained = new UniqueContainer(callback);\n            let removeMonitor;\n            let stack;\n            if (this._leakageMon && this._size >= Math.ceil(this._leakageMon.threshold * 0.2)) {\n                // check and record this emitter for potential leakage\n                contained.stack = Stacktrace.create();\n                removeMonitor = this._leakageMon.check(contained.stack, this._size + 1);\n            }\n            if (_enableDisposeWithListenerWarning) {\n                contained.stack = stack ?? Stacktrace.create();\n            }\n            if (!this._listeners) {\n                this._options?.onWillAddFirstListener?.(this);\n                this._listeners = contained;\n                this._options?.onDidAddFirstListener?.(this);\n            }\n            else if (this._listeners instanceof UniqueContainer) {\n                this._deliveryQueue ??= new EventDeliveryQueuePrivate();\n                this._listeners = [this._listeners, contained];\n            }\n            else {\n                this._listeners.push(contained);\n            }\n            this._size++;\n            const result = (0, lifecycle_1.toDisposable)(() => {\n                _listenerFinalizers?.unregister(result);\n                removeMonitor?.();\n                this._removeListener(contained);\n            });\n            if (disposables instanceof lifecycle_1.DisposableStore) {\n                disposables.add(result);\n            }\n            else if (Array.isArray(disposables)) {\n                disposables.push(result);\n            }\n            if (_listenerFinalizers) {\n                const stack = new Error().stack.split('\\n').slice(2, 3).join('\\n').trim();\n                const match = /(file:|vscode-file:\\/\\/vscode-app)?(\\/[^:]*:\\d+:\\d+)/.exec(stack);\n                _listenerFinalizers.register(result, match?.[2] ?? stack, result);\n            }\n            return result;\n        };\n        return this._event;\n    }\n    _removeListener(listener) {\n        this._options?.onWillRemoveListener?.(this);\n        if (!this._listeners) {\n            return; // expected if a listener gets disposed\n        }\n        if (this._size === 1) {\n            this._listeners = undefined;\n            this._options?.onDidRemoveLastListener?.(this);\n            this._size = 0;\n            return;\n        }\n        // size > 1 which requires that listeners be a list:\n        const listeners = this._listeners;\n        const index = listeners.indexOf(listener);\n        if (index === -1) {\n            console.log('disposed?', this._disposed);\n            console.log('size?', this._size);\n            console.log('arr?', JSON.stringify(this._listeners));\n            throw new Error('Attempted to dispose unknown listener');\n        }\n        this._size--;\n        listeners[index] = undefined;\n        const adjustDeliveryQueue = this._deliveryQueue.current === this;\n        if (this._size * compactionThreshold <= listeners.length) {\n            let n = 0;\n            for (let i = 0; i < listeners.length; i++) {\n                if (listeners[i]) {\n                    listeners[n++] = listeners[i];\n                }\n                else if (adjustDeliveryQueue) {\n                    this._deliveryQueue.end--;\n                    if (n < this._deliveryQueue.i) {\n                        this._deliveryQueue.i--;\n                    }\n                }\n            }\n            listeners.length = n;\n        }\n    }\n    _deliver(listener, value) {\n        if (!listener) {\n            return;\n        }\n        const errorHandler = this._options?.onListenerError || errors_1.onUnexpectedError;\n        if (!errorHandler) {\n            listener.value(value);\n            return;\n        }\n        try {\n            listener.value(value);\n        }\n        catch (e) {\n            errorHandler(e);\n        }\n    }\n    /** Delivers items in the queue. Assumes the queue is ready to go. */\n    _deliverQueue(dq) {\n        const listeners = dq.current._listeners;\n        while (dq.i < dq.end) {\n            // important: dq.i is incremented before calling deliver() because it might reenter deliverQueue()\n            this._deliver(listeners[dq.i++], dq.value);\n        }\n        dq.reset();\n    }\n    /**\n     * To be kept private to fire an event to\n     * subscribers\n     */\n    fire(event) {\n        if (this._deliveryQueue?.current) {\n            this._deliverQueue(this._deliveryQueue);\n            this._perfMon?.stop(); // last fire() will have starting perfmon, stop it before starting the next dispatch\n        }\n        this._perfMon?.start(this._size);\n        if (!this._listeners) {\n            // no-op\n        }\n        else if (this._listeners instanceof UniqueContainer) {\n            this._deliver(this._listeners, event);\n        }\n        else {\n            const dq = this._deliveryQueue;\n            dq.enqueue(this, event, this._listeners.length);\n            this._deliverQueue(dq);\n        }\n        this._perfMon?.stop();\n    }\n    hasListeners() {\n        return this._size > 0;\n    }\n}\nexports.Emitter = Emitter;\nconst createEventDeliveryQueue = () => new EventDeliveryQueuePrivate();\nexports.createEventDeliveryQueue = createEventDeliveryQueue;\nclass EventDeliveryQueuePrivate {\n    constructor() {\n        /**\n         * Index in current's listener list.\n         */\n        this.i = -1;\n        /**\n         * The last index in the listener's list to deliver.\n         */\n        this.end = 0;\n    }\n    enqueue(emitter, value, end) {\n        this.i = 0;\n        this.end = end;\n        this.current = emitter;\n        this.value = value;\n    }\n    reset() {\n        this.i = this.end; // force any current emission loop to stop, mainly for during dispose\n        this.current = undefined;\n        this.value = undefined;\n    }\n}\nclass AsyncEmitter extends Emitter {\n    async fireAsync(data, token, promiseJoin) {\n        if (!this._listeners) {\n            return;\n        }\n        if (!this._asyncDeliveryQueue) {\n            this._asyncDeliveryQueue = new linkedList_1.LinkedList();\n        }\n        forEachListener(this._listeners, listener => this._asyncDeliveryQueue.push([listener.value, data]));\n        while (this._asyncDeliveryQueue.size > 0 && !token.isCancellationRequested) {\n            const [listener, data] = this._asyncDeliveryQueue.shift();\n            const thenables = [];\n            const event = {\n                ...data,\n                token,\n                waitUntil: (p) => {\n                    if (Object.isFrozen(thenables)) {\n                        throw new Error('waitUntil can NOT be called asynchronous');\n                    }\n                    if (promiseJoin) {\n                        p = promiseJoin(p, listener);\n                    }\n                    thenables.push(p);\n                }\n            };\n            try {\n                listener(event);\n            }\n            catch (e) {\n                (0, errors_1.onUnexpectedError)(e);\n                continue;\n            }\n            // freeze thenables-collection to enforce sync-calls to\n            // wait until and then wait for all thenables to resolve\n            Object.freeze(thenables);\n            await Promise.allSettled(thenables).then(values => {\n                for (const value of values) {\n                    if (value.status === 'rejected') {\n                        (0, errors_1.onUnexpectedError)(value.reason);\n                    }\n                }\n            });\n        }\n    }\n}\nexports.AsyncEmitter = AsyncEmitter;\nclass PauseableEmitter extends Emitter {\n    get isPaused() {\n        return this._isPaused !== 0;\n    }\n    constructor(options) {\n        super(options);\n        this._isPaused = 0;\n        this._eventQueue = new linkedList_1.LinkedList();\n        this._mergeFn = options?.merge;\n    }\n    pause() {\n        this._isPaused++;\n    }\n    resume() {\n        if (this._isPaused !== 0 && --this._isPaused === 0) {\n            if (this._mergeFn) {\n                // use the merge function to create a single composite\n                // event. make a copy in case firing pauses this emitter\n                if (this._eventQueue.size > 0) {\n                    const events = Array.from(this._eventQueue);\n                    this._eventQueue.clear();\n                    super.fire(this._mergeFn(events));\n                }\n            }\n            else {\n                // no merging, fire each event individually and test\n                // that this emitter isn't paused halfway through\n                while (!this._isPaused && this._eventQueue.size !== 0) {\n                    super.fire(this._eventQueue.shift());\n                }\n            }\n        }\n    }\n    fire(event) {\n        if (this._size) {\n            if (this._isPaused !== 0) {\n                this._eventQueue.push(event);\n            }\n            else {\n                super.fire(event);\n            }\n        }\n    }\n}\nexports.PauseableEmitter = PauseableEmitter;\nclass DebounceEmitter extends PauseableEmitter {\n    constructor(options) {\n        super(options);\n        this._delay = options.delay ?? 100;\n    }\n    fire(event) {\n        if (!this._handle) {\n            this.pause();\n            this._handle = setTimeout(() => {\n                this._handle = undefined;\n                this.resume();\n            }, this._delay);\n        }\n        super.fire(event);\n    }\n}\nexports.DebounceEmitter = DebounceEmitter;\n/**\n * An emitter which queue all events and then process them at the\n * end of the event loop.\n */\nclass MicrotaskEmitter extends Emitter {\n    constructor(options) {\n        super(options);\n        this._queuedEvents = [];\n        this._mergeFn = options?.merge;\n    }\n    fire(event) {\n        if (!this.hasListeners()) {\n            return;\n        }\n        this._queuedEvents.push(event);\n        if (this._queuedEvents.length === 1) {\n            queueMicrotask(() => {\n                if (this._mergeFn) {\n                    super.fire(this._mergeFn(this._queuedEvents));\n                }\n                else {\n                    this._queuedEvents.forEach(e => super.fire(e));\n                }\n                this._queuedEvents = [];\n            });\n        }\n    }\n}\nexports.MicrotaskEmitter = MicrotaskEmitter;\n/**\n * An event emitter that multiplexes many events into a single event.\n *\n * @example Listen to the `onData` event of all `Thing`s, dynamically adding and removing `Thing`s\n * to the multiplexer as needed.\n *\n * ```typescript\n * const anythingDataMultiplexer = new EventMultiplexer<{ data: string }>();\n *\n * const thingListeners = DisposableMap<Thing, IDisposable>();\n *\n * thingService.onDidAddThing(thing => {\n *   thingListeners.set(thing, anythingDataMultiplexer.add(thing.onData);\n * });\n * thingService.onDidRemoveThing(thing => {\n *   thingListeners.deleteAndDispose(thing);\n * });\n *\n * anythingDataMultiplexer.event(e => {\n *   console.log('Something fired data ' + e.data)\n * });\n * ```\n */\nclass EventMultiplexer {\n    constructor() {\n        this.hasListeners = false;\n        this.events = [];\n        this.emitter = new Emitter({\n            onWillAddFirstListener: () => this.onFirstListenerAdd(),\n            onDidRemoveLastListener: () => this.onLastListenerRemove()\n        });\n    }\n    get event() {\n        return this.emitter.event;\n    }\n    add(event) {\n        const e = { event: event, listener: null };\n        this.events.push(e);\n        if (this.hasListeners) {\n            this.hook(e);\n        }\n        const dispose = () => {\n            if (this.hasListeners) {\n                this.unhook(e);\n            }\n            const idx = this.events.indexOf(e);\n            this.events.splice(idx, 1);\n        };\n        return (0, lifecycle_1.toDisposable)((0, functional_1.createSingleCallFunction)(dispose));\n    }\n    onFirstListenerAdd() {\n        this.hasListeners = true;\n        this.events.forEach(e => this.hook(e));\n    }\n    onLastListenerRemove() {\n        this.hasListeners = false;\n        this.events.forEach(e => this.unhook(e));\n    }\n    hook(e) {\n        e.listener = e.event(r => this.emitter.fire(r));\n    }\n    unhook(e) {\n        e.listener?.dispose();\n        e.listener = null;\n    }\n    dispose() {\n        this.emitter.dispose();\n        for (const e of this.events) {\n            e.listener?.dispose();\n        }\n        this.events = [];\n    }\n}\nexports.EventMultiplexer = EventMultiplexer;\nclass DynamicListEventMultiplexer {\n    constructor(items, onAddItem, onRemoveItem, getEvent) {\n        this._store = new lifecycle_1.DisposableStore();\n        const multiplexer = this._store.add(new EventMultiplexer());\n        const itemListeners = this._store.add(new lifecycle_1.DisposableMap());\n        function addItem(instance) {\n            itemListeners.set(instance, multiplexer.add(getEvent(instance)));\n        }\n        // Existing items\n        for (const instance of items) {\n            addItem(instance);\n        }\n        // Added items\n        this._store.add(onAddItem(instance => {\n            addItem(instance);\n        }));\n        // Removed items\n        this._store.add(onRemoveItem(instance => {\n            itemListeners.deleteAndDispose(instance);\n        }));\n        this.event = multiplexer.event;\n    }\n    dispose() {\n        this._store.dispose();\n    }\n}\nexports.DynamicListEventMultiplexer = DynamicListEventMultiplexer;\n/**\n * The EventBufferer is useful in situations in which you want\n * to delay firing your events during some code.\n * You can wrap that code and be sure that the event will not\n * be fired during that wrap.\n *\n * ```\n * const emitter: Emitter;\n * const delayer = new EventDelayer();\n * const delayedEvent = delayer.wrapEvent(emitter.event);\n *\n * delayedEvent(console.log);\n *\n * delayer.bufferEvents(() => {\n *   emitter.fire(); // event will not be fired yet\n * });\n *\n * // event will only be fired at this point\n * ```\n */\nclass EventBufferer {\n    constructor() {\n        this.data = [];\n    }\n    wrapEvent(event, reduce, initial) {\n        return (listener, thisArgs, disposables) => {\n            return event(i => {\n                const data = this.data[this.data.length - 1];\n                // Non-reduce scenario\n                if (!reduce) {\n                    // Buffering case\n                    if (data) {\n                        data.buffers.push(() => listener.call(thisArgs, i));\n                    }\n                    else {\n                        // Not buffering case\n                        listener.call(thisArgs, i);\n                    }\n                    return;\n                }\n                // Reduce scenario\n                const reduceData = data;\n                // Not buffering case\n                if (!reduceData) {\n                    // TODO: Is there a way to cache this reduce call for all listeners?\n                    listener.call(thisArgs, reduce(initial, i));\n                    return;\n                }\n                // Buffering case\n                reduceData.items ??= [];\n                reduceData.items.push(i);\n                if (reduceData.buffers.length === 0) {\n                    // Include a single buffered function that will reduce all events when we're done buffering events\n                    data.buffers.push(() => {\n                        // cache the reduced result so that the value can be shared across all listeners\n                        reduceData.reducedResult ??= initial\n                            ? reduceData.items.reduce(reduce, initial)\n                            : reduceData.items.reduce(reduce);\n                        listener.call(thisArgs, reduceData.reducedResult);\n                    });\n                }\n            }, undefined, disposables);\n        };\n    }\n    bufferEvents(fn) {\n        const data = { buffers: new Array() };\n        this.data.push(data);\n        const r = fn();\n        this.data.pop();\n        data.buffers.forEach(flush => flush());\n        return r;\n    }\n}\nexports.EventBufferer = EventBufferer;\n/**\n * A Relay is an event forwarder which functions as a replugabble event pipe.\n * Once created, you can connect an input event to it and it will simply forward\n * events from that input event through its own `event` property. The `input`\n * can be changed at any point in time.\n */\nclass Relay {\n    constructor() {\n        this.listening = false;\n        this.inputEvent = Event.None;\n        this.inputEventListener = lifecycle_1.Disposable.None;\n        this.emitter = new Emitter({\n            onDidAddFirstListener: () => {\n                this.listening = true;\n                this.inputEventListener = this.inputEvent(this.emitter.fire, this.emitter);\n            },\n            onDidRemoveLastListener: () => {\n                this.listening = false;\n                this.inputEventListener.dispose();\n            }\n        });\n        this.event = this.emitter.event;\n    }\n    set input(event) {\n        this.inputEvent = event;\n        if (this.listening) {\n            this.inputEventListener.dispose();\n            this.inputEventListener = event(this.emitter.fire, this.emitter);\n        }\n    }\n    dispose() {\n        this.inputEventListener.dispose();\n        this.emitter.dispose();\n    }\n}\nexports.Relay = Relay;\nclass ValueWithChangeEvent {\n    static const(value) {\n        return new ConstValueWithChangeEvent(value);\n    }\n    constructor(_value) {\n        this._value = _value;\n        this._onDidChange = new Emitter();\n        this.onDidChange = this._onDidChange.event;\n    }\n    get value() {\n        return this._value;\n    }\n    set value(value) {\n        if (value !== this._value) {\n            this._value = value;\n            this._onDidChange.fire(undefined);\n        }\n    }\n}\nexports.ValueWithChangeEvent = ValueWithChangeEvent;\nclass ConstValueWithChangeEvent {\n    constructor(value) {\n        this.value = value;\n        this.onDidChange = Event.None;\n    }\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createSingleCallFunction = createSingleCallFunction;\n/**\n * Given a function, returns a function that is only calling that function once.\n */\nfunction createSingleCallFunction(fn, fnDidRunCallback) {\n    const _this = this;\n    let didCall = false;\n    let result;\n    return function () {\n        if (didCall) {\n            return result;\n        }\n        didCall = true;\n        if (fnDidRunCallback) {\n            try {\n                result = fn.apply(_this, arguments);\n            }\n            finally {\n                fnDidRunCallback();\n            }\n        }\n        else {\n            result = fn.apply(_this, arguments);\n        }\n        return result;\n    };\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Iterable = void 0;\nvar Iterable;\n(function (Iterable) {\n    function is(thing) {\n        return thing && typeof thing === 'object' && typeof thing[Symbol.iterator] === 'function';\n    }\n    Iterable.is = is;\n    const _empty = Object.freeze([]);\n    function empty() {\n        return _empty;\n    }\n    Iterable.empty = empty;\n    function* single(element) {\n        yield element;\n    }\n    Iterable.single = single;\n    function wrap(iterableOrElement) {\n        if (is(iterableOrElement)) {\n            return iterableOrElement;\n        }\n        else {\n            return single(iterableOrElement);\n        }\n    }\n    Iterable.wrap = wrap;\n    function from(iterable) {\n        return iterable || _empty;\n    }\n    Iterable.from = from;\n    function* reverse(array) {\n        for (let i = array.length - 1; i >= 0; i--) {\n            yield array[i];\n        }\n    }\n    Iterable.reverse = reverse;\n    function isEmpty(iterable) {\n        return !iterable || iterable[Symbol.iterator]().next().done === true;\n    }\n    Iterable.isEmpty = isEmpty;\n    function first(iterable) {\n        return iterable[Symbol.iterator]().next().value;\n    }\n    Iterable.first = first;\n    function some(iterable, predicate) {\n        let i = 0;\n        for (const element of iterable) {\n            if (predicate(element, i++)) {\n                return true;\n            }\n        }\n        return false;\n    }\n    Iterable.some = some;\n    function find(iterable, predicate) {\n        for (const element of iterable) {\n            if (predicate(element)) {\n                return element;\n            }\n        }\n        return undefined;\n    }\n    Iterable.find = find;\n    function* filter(iterable, predicate) {\n        for (const element of iterable) {\n            if (predicate(element)) {\n                yield element;\n            }\n        }\n    }\n    Iterable.filter = filter;\n    function* map(iterable, fn) {\n        let index = 0;\n        for (const element of iterable) {\n            yield fn(element, index++);\n        }\n    }\n    Iterable.map = map;\n    function* flatMap(iterable, fn) {\n        let index = 0;\n        for (const element of iterable) {\n            yield* fn(element, index++);\n        }\n    }\n    Iterable.flatMap = flatMap;\n    function* concat(...iterables) {\n        for (const iterable of iterables) {\n            yield* iterable;\n        }\n    }\n    Iterable.concat = concat;\n    function reduce(iterable, reducer, initialValue) {\n        let value = initialValue;\n        for (const element of iterable) {\n            value = reducer(value, element);\n        }\n        return value;\n    }\n    Iterable.reduce = reduce;\n    /**\n     * Returns an iterable slice of the array, with the same semantics as `array.slice()`.\n     */\n    function* slice(arr, from, to = arr.length) {\n        if (from < 0) {\n            from += arr.length;\n        }\n        if (to < 0) {\n            to += arr.length;\n        }\n        else if (to > arr.length) {\n            to = arr.length;\n        }\n        for (; from < to; from++) {\n            yield arr[from];\n        }\n    }\n    Iterable.slice = slice;\n    /**\n     * Consumes `atMost` elements from iterable and returns the consumed elements,\n     * and an iterable for the rest of the elements.\n     */\n    function consume(iterable, atMost = Number.POSITIVE_INFINITY) {\n        const consumed = [];\n        if (atMost === 0) {\n            return [consumed, iterable];\n        }\n        const iterator = iterable[Symbol.iterator]();\n        for (let i = 0; i < atMost; i++) {\n            const next = iterator.next();\n            if (next.done) {\n                return [consumed, Iterable.empty()];\n            }\n            consumed.push(next.value);\n        }\n        return [consumed, { [Symbol.iterator]() { return iterator; } }];\n    }\n    Iterable.consume = consume;\n    async function asyncToArray(iterable) {\n        const result = [];\n        for await (const item of iterable) {\n            result.push(item);\n        }\n        return Promise.resolve(result);\n    }\n    Iterable.asyncToArray = asyncToArray;\n})(Iterable || (exports.Iterable = Iterable = {}));\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DisposableMap = exports.ImmortalReference = exports.AsyncReferenceCollection = exports.ReferenceCollection = exports.SafeDisposable = exports.RefCountedDisposable = exports.MandatoryMutableDisposable = exports.MutableDisposable = exports.Disposable = exports.DisposableStore = exports.DisposableTracker = void 0;\nexports.setDisposableTracker = setDisposableTracker;\nexports.trackDisposable = trackDisposable;\nexports.markAsDisposed = markAsDisposed;\nexports.markAsSingleton = markAsSingleton;\nexports.isDisposable = isDisposable;\nexports.dispose = dispose;\nexports.disposeIfDisposable = disposeIfDisposable;\nexports.combinedDisposable = combinedDisposable;\nexports.toDisposable = toDisposable;\nexports.disposeOnReturn = disposeOnReturn;\nconst arrays_1 = require(\"vs/base/common/arrays\");\nconst collections_1 = require(\"vs/base/common/collections\");\nconst map_1 = require(\"./map\");\nconst functional_1 = require(\"vs/base/common/functional\");\nconst iterator_1 = require(\"vs/base/common/iterator\");\n// #region Disposable Tracking\n/**\n * Enables logging of potentially leaked disposables.\n *\n * A disposable is considered leaked if it is not disposed or not registered as the child of\n * another disposable. This tracking is very simple an only works for classes that either\n * extend Disposable or use a DisposableStore. This means there are a lot of false positives.\n */\nconst TRACK_DISPOSABLES = false;\nlet disposableTracker = null;\nclass DisposableTracker {\n    constructor() {\n        this.livingDisposables = new Map();\n    }\n    static { this.idx = 0; }\n    getDisposableData(d) {\n        let val = this.livingDisposables.get(d);\n        if (!val) {\n            val = { parent: null, source: null, isSingleton: false, value: d, idx: DisposableTracker.idx++ };\n            this.livingDisposables.set(d, val);\n        }\n        return val;\n    }\n    trackDisposable(d) {\n        const data = this.getDisposableData(d);\n        if (!data.source) {\n            data.source =\n                new Error().stack;\n        }\n    }\n    setParent(child, parent) {\n        const data = this.getDisposableData(child);\n        data.parent = parent;\n    }\n    markAsDisposed(x) {\n        this.livingDisposables.delete(x);\n    }\n    markAsSingleton(disposable) {\n        this.getDisposableData(disposable).isSingleton = true;\n    }\n    getRootParent(data, cache) {\n        const cacheValue = cache.get(data);\n        if (cacheValue) {\n            return cacheValue;\n        }\n        const result = data.parent ? this.getRootParent(this.getDisposableData(data.parent), cache) : data;\n        cache.set(data, result);\n        return result;\n    }\n    getTrackedDisposables() {\n        const rootParentCache = new Map();\n        const leaking = [...this.livingDisposables.entries()]\n            .filter(([, v]) => v.source !== null && !this.getRootParent(v, rootParentCache).isSingleton)\n            .flatMap(([k]) => k);\n        return leaking;\n    }\n    computeLeakingDisposables(maxReported = 10, preComputedLeaks) {\n        let uncoveredLeakingObjs;\n        if (preComputedLeaks) {\n            uncoveredLeakingObjs = preComputedLeaks;\n        }\n        else {\n            const rootParentCache = new Map();\n            const leakingObjects = [...this.livingDisposables.values()]\n                .filter((info) => info.source !== null && !this.getRootParent(info, rootParentCache).isSingleton);\n            if (leakingObjects.length === 0) {\n                return;\n            }\n            const leakingObjsSet = new Set(leakingObjects.map(o => o.value));\n            // Remove all objects that are a child of other leaking objects. Assumes there are no cycles.\n            uncoveredLeakingObjs = leakingObjects.filter(l => {\n                return !(l.parent && leakingObjsSet.has(l.parent));\n            });\n            if (uncoveredLeakingObjs.length === 0) {\n                throw new Error('There are cyclic diposable chains!');\n            }\n        }\n        if (!uncoveredLeakingObjs) {\n            return undefined;\n        }\n        function getStackTracePath(leaking) {\n            function removePrefix(array, linesToRemove) {\n                while (array.length > 0 && linesToRemove.some(regexp => typeof regexp === 'string' ? regexp === array[0] : array[0].match(regexp))) {\n                    array.shift();\n                }\n            }\n            const lines = leaking.source.split('\\n').map(p => p.trim().replace('at ', '')).filter(l => l !== '');\n            removePrefix(lines, ['Error', /^trackDisposable \\(.*\\)$/, /^DisposableTracker.trackDisposable \\(.*\\)$/]);\n            return lines.reverse();\n        }\n        const stackTraceStarts = new map_1.SetMap();\n        for (const leaking of uncoveredLeakingObjs) {\n            const stackTracePath = getStackTracePath(leaking);\n            for (let i = 0; i <= stackTracePath.length; i++) {\n                stackTraceStarts.add(stackTracePath.slice(0, i).join('\\n'), leaking);\n            }\n        }\n        // Put earlier leaks first\n        uncoveredLeakingObjs.sort((0, arrays_1.compareBy)(l => l.idx, arrays_1.numberComparator));\n        let message = '';\n        let i = 0;\n        for (const leaking of uncoveredLeakingObjs.slice(0, maxReported)) {\n            i++;\n            const stackTracePath = getStackTracePath(leaking);\n            const stackTraceFormattedLines = [];\n            for (let i = 0; i < stackTracePath.length; i++) {\n                let line = stackTracePath[i];\n                const starts = stackTraceStarts.get(stackTracePath.slice(0, i + 1).join('\\n'));\n                line = `(shared with ${starts.size}/${uncoveredLeakingObjs.length} leaks) at ${line}`;\n                const prevStarts = stackTraceStarts.get(stackTracePath.slice(0, i).join('\\n'));\n                const continuations = (0, collections_1.groupBy)([...prevStarts].map(d => getStackTracePath(d)[i]), v => v);\n                delete continuations[stackTracePath[i]];\n                for (const [cont, set] of Object.entries(continuations)) {\n                    stackTraceFormattedLines.unshift(`    - stacktraces of ${set.length} other leaks continue with ${cont}`);\n                }\n                stackTraceFormattedLines.unshift(line);\n            }\n            message += `\\n\\n\\n==================== Leaking disposable ${i}/${uncoveredLeakingObjs.length}: ${leaking.value.constructor.name} ====================\\n${stackTraceFormattedLines.join('\\n')}\\n============================================================\\n\\n`;\n        }\n        if (uncoveredLeakingObjs.length > maxReported) {\n            message += `\\n\\n\\n... and ${uncoveredLeakingObjs.length - maxReported} more leaking disposables\\n\\n`;\n        }\n        return { leaks: uncoveredLeakingObjs, details: message };\n    }\n}\nexports.DisposableTracker = DisposableTracker;\nfunction setDisposableTracker(tracker) {\n    disposableTracker = tracker;\n}\nif (TRACK_DISPOSABLES) {\n    const __is_disposable_tracked__ = '__is_disposable_tracked__';\n    setDisposableTracker(new class {\n        trackDisposable(x) {\n            const stack = new Error('Potentially leaked disposable').stack;\n            setTimeout(() => {\n                if (!x[__is_disposable_tracked__]) {\n                    console.log(stack);\n                }\n            }, 3000);\n        }\n        setParent(child, parent) {\n            if (child && child !== Disposable.None) {\n                try {\n                    child[__is_disposable_tracked__] = true;\n                }\n                catch {\n                    // noop\n                }\n            }\n        }\n        markAsDisposed(disposable) {\n            if (disposable && disposable !== Disposable.None) {\n                try {\n                    disposable[__is_disposable_tracked__] = true;\n                }\n                catch {\n                    // noop\n                }\n            }\n        }\n        markAsSingleton(disposable) { }\n    });\n}\nfunction trackDisposable(x) {\n    disposableTracker?.trackDisposable(x);\n    return x;\n}\nfunction markAsDisposed(disposable) {\n    disposableTracker?.markAsDisposed(disposable);\n}\nfunction setParentOfDisposable(child, parent) {\n    disposableTracker?.setParent(child, parent);\n}\nfunction setParentOfDisposables(children, parent) {\n    if (!disposableTracker) {\n        return;\n    }\n    for (const child of children) {\n        disposableTracker.setParent(child, parent);\n    }\n}\n/**\n * Indicates that the given object is a singleton which does not need to be disposed.\n*/\nfunction markAsSingleton(singleton) {\n    disposableTracker?.markAsSingleton(singleton);\n    return singleton;\n}\n/**\n * Check if `thing` is {@link IDisposable disposable}.\n */\nfunction isDisposable(thing) {\n    return typeof thing === 'object' && thing !== null && typeof thing.dispose === 'function' && thing.dispose.length === 0;\n}\nfunction dispose(arg) {\n    if (iterator_1.Iterable.is(arg)) {\n        const errors = [];\n        for (const d of arg) {\n            if (d) {\n                try {\n                    d.dispose();\n                }\n                catch (e) {\n                    errors.push(e);\n                }\n            }\n        }\n        if (errors.length === 1) {\n            throw errors[0];\n        }\n        else if (errors.length > 1) {\n            throw new AggregateError(errors, 'Encountered errors while disposing of store');\n        }\n        return Array.isArray(arg) ? [] : arg;\n    }\n    else if (arg) {\n        arg.dispose();\n        return arg;\n    }\n}\nfunction disposeIfDisposable(disposables) {\n    for (const d of disposables) {\n        if (isDisposable(d)) {\n            d.dispose();\n        }\n    }\n    return [];\n}\n/**\n * Combine multiple disposable values into a single {@link IDisposable}.\n */\nfunction combinedDisposable(...disposables) {\n    const parent = toDisposable(() => dispose(disposables));\n    setParentOfDisposables(disposables, parent);\n    return parent;\n}\n/**\n * Turn a function that implements dispose into an {@link IDisposable}.\n *\n * @param fn Clean up function, guaranteed to be called only **once**.\n */\nfunction toDisposable(fn) {\n    const self = trackDisposable({\n        dispose: (0, functional_1.createSingleCallFunction)(() => {\n            markAsDisposed(self);\n            fn();\n        })\n    });\n    return self;\n}\n/**\n * Manages a collection of disposable values.\n *\n * This is the preferred way to manage multiple disposables. A `DisposableStore` is safer to work with than an\n * `IDisposable[]` as it considers edge cases, such as registering the same value multiple times or adding an item to a\n * store that has already been disposed of.\n */\nclass DisposableStore {\n    static { this.DISABLE_DISPOSED_WARNING = false; }\n    constructor() {\n        this._toDispose = new Set();\n        this._isDisposed = false;\n        trackDisposable(this);\n    }\n    /**\n     * Dispose of all registered disposables and mark this object as disposed.\n     *\n     * Any future disposables added to this object will be disposed of on `add`.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        markAsDisposed(this);\n        this._isDisposed = true;\n        this.clear();\n    }\n    /**\n     * @return `true` if this object has been disposed of.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of all registered disposables but do not mark this object as disposed.\n     */\n    clear() {\n        if (this._toDispose.size === 0) {\n            return;\n        }\n        try {\n            dispose(this._toDispose);\n        }\n        finally {\n            this._toDispose.clear();\n        }\n    }\n    /**\n     * Add a new {@link IDisposable disposable} to the collection.\n     */\n    add(o) {\n        if (!o) {\n            return o;\n        }\n        if (o === this) {\n            throw new Error('Cannot register a disposable on itself!');\n        }\n        setParentOfDisposable(o, this);\n        if (this._isDisposed) {\n            if (!DisposableStore.DISABLE_DISPOSED_WARNING) {\n                console.warn(new Error('Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!').stack);\n            }\n        }\n        else {\n            this._toDispose.add(o);\n        }\n        return o;\n    }\n    /**\n     * Deletes a disposable from store and disposes of it. This will not throw or warn and proceed to dispose the\n     * disposable even when the disposable is not part in the store.\n     */\n    delete(o) {\n        if (!o) {\n            return;\n        }\n        if (o === this) {\n            throw new Error('Cannot dispose a disposable on itself!');\n        }\n        this._toDispose.delete(o);\n        o.dispose();\n    }\n    /**\n     * Deletes the value from the store, but does not dispose it.\n     */\n    deleteAndLeak(o) {\n        if (!o) {\n            return;\n        }\n        if (this._toDispose.has(o)) {\n            this._toDispose.delete(o);\n            setParentOfDisposable(o, null);\n        }\n    }\n}\nexports.DisposableStore = DisposableStore;\n/**\n * Abstract base class for a {@link IDisposable disposable} object.\n *\n * Subclasses can {@linkcode _register} disposables that will be automatically cleaned up when this object is disposed of.\n */\nclass Disposable {\n    /**\n     * A disposable that does nothing when it is disposed of.\n     *\n     * TODO: This should not be a static property.\n     */\n    static { this.None = Object.freeze({ dispose() { } }); }\n    constructor() {\n        this._store = new DisposableStore();\n        trackDisposable(this);\n        setParentOfDisposable(this._store, this);\n    }\n    dispose() {\n        markAsDisposed(this);\n        this._store.dispose();\n    }\n    /**\n     * Adds `o` to the collection of disposables managed by this object.\n     */\n    _register(o) {\n        if (o === this) {\n            throw new Error('Cannot register a disposable on itself!');\n        }\n        return this._store.add(o);\n    }\n}\nexports.Disposable = Disposable;\n/**\n * Manages the lifecycle of a disposable value that may be changed.\n *\n * This ensures that when the disposable value is changed, the previously held disposable is disposed of. You can\n * also register a `MutableDisposable` on a `Disposable` to ensure it is automatically cleaned up.\n */\nclass MutableDisposable {\n    constructor() {\n        this._isDisposed = false;\n        trackDisposable(this);\n    }\n    get value() {\n        return this._isDisposed ? undefined : this._value;\n    }\n    set value(value) {\n        if (this._isDisposed || value === this._value) {\n            return;\n        }\n        this._value?.dispose();\n        if (value) {\n            setParentOfDisposable(value, this);\n        }\n        this._value = value;\n    }\n    /**\n     * Resets the stored value and disposed of the previously stored value.\n     */\n    clear() {\n        this.value = undefined;\n    }\n    dispose() {\n        this._isDisposed = true;\n        markAsDisposed(this);\n        this._value?.dispose();\n        this._value = undefined;\n    }\n    /**\n     * Clears the value, but does not dispose it.\n     * The old value is returned.\n    */\n    clearAndLeak() {\n        const oldValue = this._value;\n        this._value = undefined;\n        if (oldValue) {\n            setParentOfDisposable(oldValue, null);\n        }\n        return oldValue;\n    }\n}\nexports.MutableDisposable = MutableDisposable;\n/**\n * Manages the lifecycle of a disposable value that may be changed like {@link MutableDisposable}, but the value must\n * exist and cannot be undefined.\n */\nclass MandatoryMutableDisposable {\n    constructor(initialValue) {\n        this._disposable = new MutableDisposable();\n        this._isDisposed = false;\n        this._disposable.value = initialValue;\n    }\n    get value() {\n        return this._disposable.value;\n    }\n    set value(value) {\n        if (this._isDisposed || value === this._disposable.value) {\n            return;\n        }\n        this._disposable.value = value;\n    }\n    dispose() {\n        this._isDisposed = true;\n        this._disposable.dispose();\n    }\n}\nexports.MandatoryMutableDisposable = MandatoryMutableDisposable;\nclass RefCountedDisposable {\n    constructor(_disposable) {\n        this._disposable = _disposable;\n        this._counter = 1;\n    }\n    acquire() {\n        this._counter++;\n        return this;\n    }\n    release() {\n        if (--this._counter === 0) {\n            this._disposable.dispose();\n        }\n        return this;\n    }\n}\nexports.RefCountedDisposable = RefCountedDisposable;\n/**\n * A safe disposable can be `unset` so that a leaked reference (listener)\n * can be cut-off.\n */\nclass SafeDisposable {\n    constructor() {\n        this.dispose = () => { };\n        this.unset = () => { };\n        this.isset = () => false;\n        trackDisposable(this);\n    }\n    set(fn) {\n        let callback = fn;\n        this.unset = () => callback = undefined;\n        this.isset = () => callback !== undefined;\n        this.dispose = () => {\n            if (callback) {\n                callback();\n                callback = undefined;\n                markAsDisposed(this);\n            }\n        };\n        return this;\n    }\n}\nexports.SafeDisposable = SafeDisposable;\nclass ReferenceCollection {\n    constructor() {\n        this.references = new Map();\n    }\n    acquire(key, ...args) {\n        let reference = this.references.get(key);\n        if (!reference) {\n            reference = { counter: 0, object: this.createReferencedObject(key, ...args) };\n            this.references.set(key, reference);\n        }\n        const { object } = reference;\n        const dispose = (0, functional_1.createSingleCallFunction)(() => {\n            if (--reference.counter === 0) {\n                this.destroyReferencedObject(key, reference.object);\n                this.references.delete(key);\n            }\n        });\n        reference.counter++;\n        return { object, dispose };\n    }\n}\nexports.ReferenceCollection = ReferenceCollection;\n/**\n * Unwraps a reference collection of promised values. Makes sure\n * references are disposed whenever promises get rejected.\n */\nclass AsyncReferenceCollection {\n    constructor(referenceCollection) {\n        this.referenceCollection = referenceCollection;\n    }\n    async acquire(key, ...args) {\n        const ref = this.referenceCollection.acquire(key, ...args);\n        try {\n            const object = await ref.object;\n            return {\n                object,\n                dispose: () => ref.dispose()\n            };\n        }\n        catch (error) {\n            ref.dispose();\n            throw error;\n        }\n    }\n}\nexports.AsyncReferenceCollection = AsyncReferenceCollection;\nclass ImmortalReference {\n    constructor(object) {\n        this.object = object;\n    }\n    dispose() { }\n}\nexports.ImmortalReference = ImmortalReference;\nfunction disposeOnReturn(fn) {\n    const store = new DisposableStore();\n    try {\n        fn(store);\n    }\n    finally {\n        store.dispose();\n    }\n}\n/**\n * A map the manages the lifecycle of the values that it stores.\n */\nclass DisposableMap {\n    constructor() {\n        this._store = new Map();\n        this._isDisposed = false;\n        trackDisposable(this);\n    }\n    /**\n     * Disposes of all stored values and mark this object as disposed.\n     *\n     * Trying to use this object after it has been disposed of is an error.\n     */\n    dispose() {\n        markAsDisposed(this);\n        this._isDisposed = true;\n        this.clearAndDisposeAll();\n    }\n    /**\n     * Disposes of all stored values and clear the map, but DO NOT mark this object as disposed.\n     */\n    clearAndDisposeAll() {\n        if (!this._store.size) {\n            return;\n        }\n        try {\n            dispose(this._store.values());\n        }\n        finally {\n            this._store.clear();\n        }\n    }\n    has(key) {\n        return this._store.has(key);\n    }\n    get size() {\n        return this._store.size;\n    }\n    get(key) {\n        return this._store.get(key);\n    }\n    set(key, value, skipDisposeOnOverwrite = false) {\n        if (this._isDisposed) {\n            console.warn(new Error('Trying to add a disposable to a DisposableMap that has already been disposed of. The added object will be leaked!').stack);\n        }\n        if (!skipDisposeOnOverwrite) {\n            this._store.get(key)?.dispose();\n        }\n        this._store.set(key, value);\n    }\n    /**\n     * Delete the value stored for `key` from this map and also dispose of it.\n     */\n    deleteAndDispose(key) {\n        this._store.get(key)?.dispose();\n        this._store.delete(key);\n    }\n    /**\n     * Delete the value stored for `key` from this map but return it. The caller is\n     * responsible for disposing of the value.\n     */\n    deleteAndLeak(key) {\n        const value = this._store.get(key);\n        this._store.delete(key);\n        return value;\n    }\n    keys() {\n        return this._store.keys();\n    }\n    values() {\n        return this._store.values();\n    }\n    [Symbol.iterator]() {\n        return this._store[Symbol.iterator]();\n    }\n}\nexports.DisposableMap = DisposableMap;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LinkedList = void 0;\nclass Node {\n    static { this.Undefined = new Node(undefined); }\n    constructor(element) {\n        this.element = element;\n        this.next = Node.Undefined;\n        this.prev = Node.Undefined;\n    }\n}\nclass LinkedList {\n    constructor() {\n        this._first = Node.Undefined;\n        this._last = Node.Undefined;\n        this._size = 0;\n    }\n    get size() {\n        return this._size;\n    }\n    isEmpty() {\n        return this._first === Node.Undefined;\n    }\n    clear() {\n        let node = this._first;\n        while (node !== Node.Undefined) {\n            const next = node.next;\n            node.prev = Node.Undefined;\n            node.next = Node.Undefined;\n            node = next;\n        }\n        this._first = Node.Undefined;\n        this._last = Node.Undefined;\n        this._size = 0;\n    }\n    unshift(element) {\n        return this._insert(element, false);\n    }\n    push(element) {\n        return this._insert(element, true);\n    }\n    _insert(element, atTheEnd) {\n        const newNode = new Node(element);\n        if (this._first === Node.Undefined) {\n            this._first = newNode;\n            this._last = newNode;\n        }\n        else if (atTheEnd) {\n            // push\n            const oldLast = this._last;\n            this._last = newNode;\n            newNode.prev = oldLast;\n            oldLast.next = newNode;\n        }\n        else {\n            // unshift\n            const oldFirst = this._first;\n            this._first = newNode;\n            newNode.next = oldFirst;\n            oldFirst.prev = newNode;\n        }\n        this._size += 1;\n        let didRemove = false;\n        return () => {\n            if (!didRemove) {\n                didRemove = true;\n                this._remove(newNode);\n            }\n        };\n    }\n    shift() {\n        if (this._first === Node.Undefined) {\n            return undefined;\n        }\n        else {\n            const res = this._first.element;\n            this._remove(this._first);\n            return res;\n        }\n    }\n    pop() {\n        if (this._last === Node.Undefined) {\n            return undefined;\n        }\n        else {\n            const res = this._last.element;\n            this._remove(this._last);\n            return res;\n        }\n    }\n    _remove(node) {\n        if (node.prev !== Node.Undefined && node.next !== Node.Undefined) {\n            // middle\n            const anchor = node.prev;\n            anchor.next = node.next;\n            node.next.prev = anchor;\n        }\n        else if (node.prev === Node.Undefined && node.next === Node.Undefined) {\n            // only node\n            this._first = Node.Undefined;\n            this._last = Node.Undefined;\n        }\n        else if (node.next === Node.Undefined) {\n            // last\n            this._last = this._last.prev;\n            this._last.next = Node.Undefined;\n        }\n        else if (node.prev === Node.Undefined) {\n            // first\n            this._first = this._first.next;\n            this._first.prev = Node.Undefined;\n        }\n        // done\n        this._size -= 1;\n    }\n    *[Symbol.iterator]() {\n        let node = this._first;\n        while (node !== Node.Undefined) {\n            yield node.element;\n            node = node.next;\n        }\n    }\n}\nexports.LinkedList = LinkedList;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SetMap = exports.BidirectionalMap = exports.CounterSet = exports.Touch = void 0;\nexports.getOrSet = getOrSet;\nexports.mapToString = mapToString;\nexports.setToString = setToString;\nexports.mapsStrictEqualIgnoreOrder = mapsStrictEqualIgnoreOrder;\nfunction getOrSet(map, key, value) {\n    let result = map.get(key);\n    if (result === undefined) {\n        result = value;\n        map.set(key, result);\n    }\n    return result;\n}\nfunction mapToString(map) {\n    const entries = [];\n    map.forEach((value, key) => {\n        entries.push(`${key} => ${value}`);\n    });\n    return `Map(${map.size}) {${entries.join(', ')}}`;\n}\nfunction setToString(set) {\n    const entries = [];\n    set.forEach(value => {\n        entries.push(value);\n    });\n    return `Set(${set.size}) {${entries.join(', ')}}`;\n}\nvar Touch;\n(function (Touch) {\n    Touch[Touch[\"None\"] = 0] = \"None\";\n    Touch[Touch[\"AsOld\"] = 1] = \"AsOld\";\n    Touch[Touch[\"AsNew\"] = 2] = \"AsNew\";\n})(Touch || (exports.Touch = Touch = {}));\nclass CounterSet {\n    constructor() {\n        this.map = new Map();\n    }\n    add(value) {\n        this.map.set(value, (this.map.get(value) || 0) + 1);\n        return this;\n    }\n    delete(value) {\n        let counter = this.map.get(value) || 0;\n        if (counter === 0) {\n            return false;\n        }\n        counter--;\n        if (counter === 0) {\n            this.map.delete(value);\n        }\n        else {\n            this.map.set(value, counter);\n        }\n        return true;\n    }\n    has(value) {\n        return this.map.has(value);\n    }\n}\nexports.CounterSet = CounterSet;\n/**\n * A map that allows access both by keys and values.\n * **NOTE**: values need to be unique.\n */\nclass BidirectionalMap {\n    constructor(entries) {\n        this._m1 = new Map();\n        this._m2 = new Map();\n        if (entries) {\n            for (const [key, value] of entries) {\n                this.set(key, value);\n            }\n        }\n    }\n    clear() {\n        this._m1.clear();\n        this._m2.clear();\n    }\n    set(key, value) {\n        this._m1.set(key, value);\n        this._m2.set(value, key);\n    }\n    get(key) {\n        return this._m1.get(key);\n    }\n    getKey(value) {\n        return this._m2.get(value);\n    }\n    delete(key) {\n        const value = this._m1.get(key);\n        if (value === undefined) {\n            return false;\n        }\n        this._m1.delete(key);\n        this._m2.delete(value);\n        return true;\n    }\n    forEach(callbackfn, thisArg) {\n        this._m1.forEach((value, key) => {\n            callbackfn.call(thisArg, value, key, this);\n        });\n    }\n    keys() {\n        return this._m1.keys();\n    }\n    values() {\n        return this._m1.values();\n    }\n}\nexports.BidirectionalMap = BidirectionalMap;\nclass SetMap {\n    constructor() {\n        this.map = new Map();\n    }\n    add(key, value) {\n        let values = this.map.get(key);\n        if (!values) {\n            values = new Set();\n            this.map.set(key, values);\n        }\n        values.add(value);\n    }\n    delete(key, value) {\n        const values = this.map.get(key);\n        if (!values) {\n            return;\n        }\n        values.delete(value);\n        if (values.size === 0) {\n            this.map.delete(key);\n        }\n    }\n    forEach(key, fn) {\n        const values = this.map.get(key);\n        if (!values) {\n            return;\n        }\n        values.forEach(fn);\n    }\n    get(key) {\n        const values = this.map.get(key);\n        if (!values) {\n            return new Set();\n        }\n        return values;\n    }\n}\nexports.SetMap = SetMap;\nfunction mapsStrictEqualIgnoreOrder(a, b) {\n    if (a === b) {\n        return true;\n    }\n    if (a.size !== b.size) {\n        return false;\n    }\n    for (const [key, value] of a) {\n        if (!b.has(key) || b.get(key) !== value) {\n            return false;\n        }\n    }\n    for (const [key] of b) {\n        if (!a.has(key)) {\n            return false;\n        }\n    }\n    return true;\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StopWatch = void 0;\nconst hasPerformanceNow = (globalThis.performance && typeof globalThis.performance.now === 'function');\nclass StopWatch {\n    static create(highResolution) {\n        return new StopWatch(highResolution);\n    }\n    constructor(highResolution) {\n        this._now = hasPerformanceNow && highResolution === false ? Date.now : globalThis.performance.now.bind(globalThis.performance);\n        this._startTime = this._now();\n        this._stopTime = -1;\n    }\n    stop() {\n        this._stopTime = this._now();\n    }\n    reset() {\n        this._startTime = this._now();\n        this._stopTime = -1;\n    }\n    elapsed() {\n        if (this._stopTime !== -1) {\n            return this._stopTime - this._startTime;\n        }\n        return this._now() - this._startTime;\n    }\n}\nexports.StopWatch = StopWatch;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { BufferNamespaceApi } from 'common/public/BufferNamespaceApi';\nimport { ParserApi } from 'common/public/ParserApi';\nimport { UnicodeApi } from 'common/public/UnicodeApi';\nimport { IBufferNamespace as IBufferNamespaceApi, IMarker, IModes, IParser, ITerminalAddon, ITerminalInitOnlyOptions, IUnicodeHandling, Terminal as ITerminalApi } from '@xterm/headless';\nimport { Terminal as TerminalCore } from 'headless/Terminal';\nimport { AddonManager } from 'common/public/AddonManager';\nimport { ITerminalOptions } from 'common/Types';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport type { Event } from 'vs/base/common/event';\n/**\n * The set of options that only have an effect when set in the Terminal constructor.\n */\nconst CONSTRUCTOR_ONLY_OPTIONS = ['cols', 'rows'];\n\nexport class Terminal extends Disposable implements ITerminalApi {\n  private _core: TerminalCore;\n  private _addonManager: AddonManager;\n  private _parser: IParser | undefined;\n  private _buffer: BufferNamespaceApi | undefined;\n  private _publicOptions: Required<ITerminalOptions>;\n\n  constructor(options?: ITerminalOptions & ITerminalInitOnlyOptions) {\n    super();\n\n    this._core = this._register(new TerminalCore(options));\n    this._addonManager = this._register(new AddonManager());\n\n    this._publicOptions = { ... this._core.options };\n    const getter = (propName: string): any => {\n      return this._core.options[propName];\n    };\n    const setter = (propName: string, value: any): void => {\n      this._checkReadonlyOptions(propName);\n      this._core.options[propName] = value;\n    };\n\n    for (const propName in this._core.options) {\n      Object.defineProperty(this._publicOptions, propName, {\n        get: () => {\n          return this._core.options[propName];\n        },\n        set: (value: any) => {\n          this._checkReadonlyOptions(propName);\n          this._core.options[propName] = value;\n        }\n      });\n      const desc = {\n        get: getter.bind(this, propName),\n        set: setter.bind(this, propName)\n      };\n      Object.defineProperty(this._publicOptions, propName, desc);\n    }\n  }\n\n  private _checkReadonlyOptions(propName: string): void {\n    // Throw an error if any constructor only option is modified\n    // from terminal.options\n    // Modifications from anywhere else are allowed\n    if (CONSTRUCTOR_ONLY_OPTIONS.includes(propName)) {\n      throw new Error(`Option \"${propName}\" can only be set in the constructor`);\n    }\n  }\n\n  private _checkProposedApi(): void {\n    if (!this._core.optionsService.options.allowProposedApi) {\n      throw new Error('You must set the allowProposedApi option to true to use proposed API');\n    }\n  }\n\n  public get onBell(): Event<void> { return this._core.onBell; }\n  public get onBinary(): Event<string> { return this._core.onBinary; }\n  public get onCursorMove(): Event<void> { return this._core.onCursorMove; }\n  public get onData(): Event<string> { return this._core.onData; }\n  public get onLineFeed(): Event<void> { return this._core.onLineFeed; }\n  public get onResize(): Event<{ cols: number, rows: number }> { return this._core.onResize; }\n  public get onScroll(): Event<number> { return this._core.onScroll; }\n  public get onTitleChange(): Event<string> { return this._core.onTitleChange; }\n  public get onWriteParsed(): Event<void> { return this._core.onWriteParsed; }\n\n  public get parser(): IParser {\n    this._checkProposedApi();\n    if (!this._parser) {\n      this._parser = new ParserApi(this._core);\n    }\n    return this._parser;\n  }\n  public get unicode(): IUnicodeHandling {\n    this._checkProposedApi();\n    return new UnicodeApi(this._core);\n  }\n  public get rows(): number { return this._core.rows; }\n  public get cols(): number { return this._core.cols; }\n  public get buffer(): IBufferNamespaceApi {\n    this._checkProposedApi();\n    if (!this._buffer) {\n      this._buffer = this._register(new BufferNamespaceApi(this._core));\n    }\n    return this._buffer;\n  }\n  public get markers(): ReadonlyArray<IMarker> {\n    this._checkProposedApi();\n    return this._core.markers;\n  }\n  public get modes(): IModes {\n    const m = this._core.coreService.decPrivateModes;\n    let mouseTrackingMode: 'none' | 'x10' | 'vt200' | 'drag' | 'any' = 'none';\n    switch (this._core.coreMouseService.activeProtocol) {\n      case 'X10': mouseTrackingMode = 'x10'; break;\n      case 'VT200': mouseTrackingMode = 'vt200'; break;\n      case 'DRAG': mouseTrackingMode = 'drag'; break;\n      case 'ANY': mouseTrackingMode = 'any'; break;\n    }\n    return {\n      applicationCursorKeysMode: m.applicationCursorKeys,\n      applicationKeypadMode: m.applicationKeypad,\n      bracketedPasteMode: m.bracketedPasteMode,\n      insertMode: this._core.coreService.modes.insertMode,\n      mouseTrackingMode: mouseTrackingMode,\n      originMode: m.origin,\n      reverseWraparoundMode: m.reverseWraparound,\n      sendFocusMode: m.sendFocus,\n      synchronizedOutputMode: m.synchronizedOutput,\n      wraparoundMode: m.wraparound\n    };\n  }\n  public get options(): Required<ITerminalOptions> {\n    return this._publicOptions;\n  }\n  public set options(options: ITerminalOptions) {\n    for (const propName in options) {\n      this._publicOptions[propName] = options[propName];\n    }\n  }\n  public input(data: string, wasUserInput: boolean = true): void {\n    this._core.input(data, wasUserInput);\n  }\n  public resize(columns: number, rows: number): void {\n    this._verifyIntegers(columns, rows);\n    this._core.resize(columns, rows);\n  }\n  public registerMarker(cursorYOffset: number = 0): IMarker | undefined {\n    this._checkProposedApi();\n    this._verifyIntegers(cursorYOffset);\n    return this._core.addMarker(cursorYOffset);\n  }\n  public addMarker(cursorYOffset: number): IMarker | undefined {\n    return this.registerMarker(cursorYOffset);\n  }\n  public dispose(): void {\n    super.dispose();\n  }\n  public scrollLines(amount: number): void {\n    this._verifyIntegers(amount);\n    this._core.scrollLines(amount);\n  }\n  public scrollPages(pageCount: number): void {\n    this._verifyIntegers(pageCount);\n    this._core.scrollPages(pageCount);\n  }\n  public scrollToTop(): void {\n    this._core.scrollToTop();\n  }\n  public scrollToBottom(): void {\n    this._core.scrollToBottom();\n  }\n  public scrollToLine(line: number): void {\n    this._verifyIntegers(line);\n    this._core.scrollToLine(line);\n  }\n  public clear(): void {\n    this._core.clear();\n  }\n  public write(data: string | Uint8Array, callback?: () => void): void {\n    this._core.write(data, callback);\n  }\n  public writeln(data: string | Uint8Array, callback?: () => void): void {\n    this._core.write(data);\n    this._core.write('\\r\\n', callback);\n  }\n  public reset(): void {\n    this._core.reset();\n  }\n  public loadAddon(addon: ITerminalAddon): void {\n    // TODO: This could cause issues if the addon calls renderer apis\n    this._addonManager.loadAddon(this as any, addon);\n  }\n\n  private _verifyIntegers(...values: number[]): void {\n    for (const value of values) {\n      if (value === Infinity || isNaN(value) || value % 1 !== 0) {\n        throw new Error('This API only accepts integers');\n      }\n    }\n  }\n}\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n  var i, r = new Float64Array(16);\n  if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n  return r;\n};\n\n//  Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n    gf1 = gf([1]),\n    _121665 = gf([0xdb41, 1]),\n    D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n    D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n    X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n    Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n    I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n  x[i]   = (h >> 24) & 0xff;\n  x[i+1] = (h >> 16) & 0xff;\n  x[i+2] = (h >>  8) & 0xff;\n  x[i+3] = h & 0xff;\n  x[i+4] = (l >> 24)  & 0xff;\n  x[i+5] = (l >> 16)  & 0xff;\n  x[i+6] = (l >>  8)  & 0xff;\n  x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n  var i,d = 0;\n  for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n  return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n  return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n  return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n  var j0  = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n      j1  = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n      j2  = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n      j3  = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n      j4  = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n      j5  = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n      j6  = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n      j7  = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n      j8  = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n      j9  = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n      j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n      j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n      j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n      j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n      j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n      j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n  var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n      x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n      x15 = j15, u;\n\n  for (var i = 0; i < 20; i += 2) {\n    u = x0 + x12 | 0;\n    x4 ^= u<<7 | u>>>(32-7);\n    u = x4 + x0 | 0;\n    x8 ^= u<<9 | u>>>(32-9);\n    u = x8 + x4 | 0;\n    x12 ^= u<<13 | u>>>(32-13);\n    u = x12 + x8 | 0;\n    x0 ^= u<<18 | u>>>(32-18);\n\n    u = x5 + x1 | 0;\n    x9 ^= u<<7 | u>>>(32-7);\n    u = x9 + x5 | 0;\n    x13 ^= u<<9 | u>>>(32-9);\n    u = x13 + x9 | 0;\n    x1 ^= u<<13 | u>>>(32-13);\n    u = x1 + x13 | 0;\n    x5 ^= u<<18 | u>>>(32-18);\n\n    u = x10 + x6 | 0;\n    x14 ^= u<<7 | u>>>(32-7);\n    u = x14 + x10 | 0;\n    x2 ^= u<<9 | u>>>(32-9);\n    u = x2 + x14 | 0;\n    x6 ^= u<<13 | u>>>(32-13);\n    u = x6 + x2 | 0;\n    x10 ^= u<<18 | u>>>(32-18);\n\n    u = x15 + x11 | 0;\n    x3 ^= u<<7 | u>>>(32-7);\n    u = x3 + x15 | 0;\n    x7 ^= u<<9 | u>>>(32-9);\n    u = x7 + x3 | 0;\n    x11 ^= u<<13 | u>>>(32-13);\n    u = x11 + x7 | 0;\n    x15 ^= u<<18 | u>>>(32-18);\n\n    u = x0 + x3 | 0;\n    x1 ^= u<<7 | u>>>(32-7);\n    u = x1 + x0 | 0;\n    x2 ^= u<<9 | u>>>(32-9);\n    u = x2 + x1 | 0;\n    x3 ^= u<<13 | u>>>(32-13);\n    u = x3 + x2 | 0;\n    x0 ^= u<<18 | u>>>(32-18);\n\n    u = x5 + x4 | 0;\n    x6 ^= u<<7 | u>>>(32-7);\n    u = x6 + x5 | 0;\n    x7 ^= u<<9 | u>>>(32-9);\n    u = x7 + x6 | 0;\n    x4 ^= u<<13 | u>>>(32-13);\n    u = x4 + x7 | 0;\n    x5 ^= u<<18 | u>>>(32-18);\n\n    u = x10 + x9 | 0;\n    x11 ^= u<<7 | u>>>(32-7);\n    u = x11 + x10 | 0;\n    x8 ^= u<<9 | u>>>(32-9);\n    u = x8 + x11 | 0;\n    x9 ^= u<<13 | u>>>(32-13);\n    u = x9 + x8 | 0;\n    x10 ^= u<<18 | u>>>(32-18);\n\n    u = x15 + x14 | 0;\n    x12 ^= u<<7 | u>>>(32-7);\n    u = x12 + x15 | 0;\n    x13 ^= u<<9 | u>>>(32-9);\n    u = x13 + x12 | 0;\n    x14 ^= u<<13 | u>>>(32-13);\n    u = x14 + x13 | 0;\n    x15 ^= u<<18 | u>>>(32-18);\n  }\n   x0 =  x0 +  j0 | 0;\n   x1 =  x1 +  j1 | 0;\n   x2 =  x2 +  j2 | 0;\n   x3 =  x3 +  j3 | 0;\n   x4 =  x4 +  j4 | 0;\n   x5 =  x5 +  j5 | 0;\n   x6 =  x6 +  j6 | 0;\n   x7 =  x7 +  j7 | 0;\n   x8 =  x8 +  j8 | 0;\n   x9 =  x9 +  j9 | 0;\n  x10 = x10 + j10 | 0;\n  x11 = x11 + j11 | 0;\n  x12 = x12 + j12 | 0;\n  x13 = x13 + j13 | 0;\n  x14 = x14 + j14 | 0;\n  x15 = x15 + j15 | 0;\n\n  o[ 0] = x0 >>>  0 & 0xff;\n  o[ 1] = x0 >>>  8 & 0xff;\n  o[ 2] = x0 >>> 16 & 0xff;\n  o[ 3] = x0 >>> 24 & 0xff;\n\n  o[ 4] = x1 >>>  0 & 0xff;\n  o[ 5] = x1 >>>  8 & 0xff;\n  o[ 6] = x1 >>> 16 & 0xff;\n  o[ 7] = x1 >>> 24 & 0xff;\n\n  o[ 8] = x2 >>>  0 & 0xff;\n  o[ 9] = x2 >>>  8 & 0xff;\n  o[10] = x2 >>> 16 & 0xff;\n  o[11] = x2 >>> 24 & 0xff;\n\n  o[12] = x3 >>>  0 & 0xff;\n  o[13] = x3 >>>  8 & 0xff;\n  o[14] = x3 >>> 16 & 0xff;\n  o[15] = x3 >>> 24 & 0xff;\n\n  o[16] = x4 >>>  0 & 0xff;\n  o[17] = x4 >>>  8 & 0xff;\n  o[18] = x4 >>> 16 & 0xff;\n  o[19] = x4 >>> 24 & 0xff;\n\n  o[20] = x5 >>>  0 & 0xff;\n  o[21] = x5 >>>  8 & 0xff;\n  o[22] = x5 >>> 16 & 0xff;\n  o[23] = x5 >>> 24 & 0xff;\n\n  o[24] = x6 >>>  0 & 0xff;\n  o[25] = x6 >>>  8 & 0xff;\n  o[26] = x6 >>> 16 & 0xff;\n  o[27] = x6 >>> 24 & 0xff;\n\n  o[28] = x7 >>>  0 & 0xff;\n  o[29] = x7 >>>  8 & 0xff;\n  o[30] = x7 >>> 16 & 0xff;\n  o[31] = x7 >>> 24 & 0xff;\n\n  o[32] = x8 >>>  0 & 0xff;\n  o[33] = x8 >>>  8 & 0xff;\n  o[34] = x8 >>> 16 & 0xff;\n  o[35] = x8 >>> 24 & 0xff;\n\n  o[36] = x9 >>>  0 & 0xff;\n  o[37] = x9 >>>  8 & 0xff;\n  o[38] = x9 >>> 16 & 0xff;\n  o[39] = x9 >>> 24 & 0xff;\n\n  o[40] = x10 >>>  0 & 0xff;\n  o[41] = x10 >>>  8 & 0xff;\n  o[42] = x10 >>> 16 & 0xff;\n  o[43] = x10 >>> 24 & 0xff;\n\n  o[44] = x11 >>>  0 & 0xff;\n  o[45] = x11 >>>  8 & 0xff;\n  o[46] = x11 >>> 16 & 0xff;\n  o[47] = x11 >>> 24 & 0xff;\n\n  o[48] = x12 >>>  0 & 0xff;\n  o[49] = x12 >>>  8 & 0xff;\n  o[50] = x12 >>> 16 & 0xff;\n  o[51] = x12 >>> 24 & 0xff;\n\n  o[52] = x13 >>>  0 & 0xff;\n  o[53] = x13 >>>  8 & 0xff;\n  o[54] = x13 >>> 16 & 0xff;\n  o[55] = x13 >>> 24 & 0xff;\n\n  o[56] = x14 >>>  0 & 0xff;\n  o[57] = x14 >>>  8 & 0xff;\n  o[58] = x14 >>> 16 & 0xff;\n  o[59] = x14 >>> 24 & 0xff;\n\n  o[60] = x15 >>>  0 & 0xff;\n  o[61] = x15 >>>  8 & 0xff;\n  o[62] = x15 >>> 16 & 0xff;\n  o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n  var j0  = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n      j1  = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n      j2  = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n      j3  = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n      j4  = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n      j5  = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n      j6  = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n      j7  = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n      j8  = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n      j9  = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n      j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n      j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n      j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n      j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n      j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n      j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n  var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n      x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n      x15 = j15, u;\n\n  for (var i = 0; i < 20; i += 2) {\n    u = x0 + x12 | 0;\n    x4 ^= u<<7 | u>>>(32-7);\n    u = x4 + x0 | 0;\n    x8 ^= u<<9 | u>>>(32-9);\n    u = x8 + x4 | 0;\n    x12 ^= u<<13 | u>>>(32-13);\n    u = x12 + x8 | 0;\n    x0 ^= u<<18 | u>>>(32-18);\n\n    u = x5 + x1 | 0;\n    x9 ^= u<<7 | u>>>(32-7);\n    u = x9 + x5 | 0;\n    x13 ^= u<<9 | u>>>(32-9);\n    u = x13 + x9 | 0;\n    x1 ^= u<<13 | u>>>(32-13);\n    u = x1 + x13 | 0;\n    x5 ^= u<<18 | u>>>(32-18);\n\n    u = x10 + x6 | 0;\n    x14 ^= u<<7 | u>>>(32-7);\n    u = x14 + x10 | 0;\n    x2 ^= u<<9 | u>>>(32-9);\n    u = x2 + x14 | 0;\n    x6 ^= u<<13 | u>>>(32-13);\n    u = x6 + x2 | 0;\n    x10 ^= u<<18 | u>>>(32-18);\n\n    u = x15 + x11 | 0;\n    x3 ^= u<<7 | u>>>(32-7);\n    u = x3 + x15 | 0;\n    x7 ^= u<<9 | u>>>(32-9);\n    u = x7 + x3 | 0;\n    x11 ^= u<<13 | u>>>(32-13);\n    u = x11 + x7 | 0;\n    x15 ^= u<<18 | u>>>(32-18);\n\n    u = x0 + x3 | 0;\n    x1 ^= u<<7 | u>>>(32-7);\n    u = x1 + x0 | 0;\n    x2 ^= u<<9 | u>>>(32-9);\n    u = x2 + x1 | 0;\n    x3 ^= u<<13 | u>>>(32-13);\n    u = x3 + x2 | 0;\n    x0 ^= u<<18 | u>>>(32-18);\n\n    u = x5 + x4 | 0;\n    x6 ^= u<<7 | u>>>(32-7);\n    u = x6 + x5 | 0;\n    x7 ^= u<<9 | u>>>(32-9);\n    u = x7 + x6 | 0;\n    x4 ^= u<<13 | u>>>(32-13);\n    u = x4 + x7 | 0;\n    x5 ^= u<<18 | u>>>(32-18);\n\n    u = x10 + x9 | 0;\n    x11 ^= u<<7 | u>>>(32-7);\n    u = x11 + x10 | 0;\n    x8 ^= u<<9 | u>>>(32-9);\n    u = x8 + x11 | 0;\n    x9 ^= u<<13 | u>>>(32-13);\n    u = x9 + x8 | 0;\n    x10 ^= u<<18 | u>>>(32-18);\n\n    u = x15 + x14 | 0;\n    x12 ^= u<<7 | u>>>(32-7);\n    u = x12 + x15 | 0;\n    x13 ^= u<<9 | u>>>(32-9);\n    u = x13 + x12 | 0;\n    x14 ^= u<<13 | u>>>(32-13);\n    u = x14 + x13 | 0;\n    x15 ^= u<<18 | u>>>(32-18);\n  }\n\n  o[ 0] = x0 >>>  0 & 0xff;\n  o[ 1] = x0 >>>  8 & 0xff;\n  o[ 2] = x0 >>> 16 & 0xff;\n  o[ 3] = x0 >>> 24 & 0xff;\n\n  o[ 4] = x5 >>>  0 & 0xff;\n  o[ 5] = x5 >>>  8 & 0xff;\n  o[ 6] = x5 >>> 16 & 0xff;\n  o[ 7] = x5 >>> 24 & 0xff;\n\n  o[ 8] = x10 >>>  0 & 0xff;\n  o[ 9] = x10 >>>  8 & 0xff;\n  o[10] = x10 >>> 16 & 0xff;\n  o[11] = x10 >>> 24 & 0xff;\n\n  o[12] = x15 >>>  0 & 0xff;\n  o[13] = x15 >>>  8 & 0xff;\n  o[14] = x15 >>> 16 & 0xff;\n  o[15] = x15 >>> 24 & 0xff;\n\n  o[16] = x6 >>>  0 & 0xff;\n  o[17] = x6 >>>  8 & 0xff;\n  o[18] = x6 >>> 16 & 0xff;\n  o[19] = x6 >>> 24 & 0xff;\n\n  o[20] = x7 >>>  0 & 0xff;\n  o[21] = x7 >>>  8 & 0xff;\n  o[22] = x7 >>> 16 & 0xff;\n  o[23] = x7 >>> 24 & 0xff;\n\n  o[24] = x8 >>>  0 & 0xff;\n  o[25] = x8 >>>  8 & 0xff;\n  o[26] = x8 >>> 16 & 0xff;\n  o[27] = x8 >>> 24 & 0xff;\n\n  o[28] = x9 >>>  0 & 0xff;\n  o[29] = x9 >>>  8 & 0xff;\n  o[30] = x9 >>> 16 & 0xff;\n  o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n  core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n  core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n            // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n  var z = new Uint8Array(16), x = new Uint8Array(64);\n  var u, i;\n  for (i = 0; i < 16; i++) z[i] = 0;\n  for (i = 0; i < 8; i++) z[i] = n[i];\n  while (b >= 64) {\n    crypto_core_salsa20(x,z,k,sigma);\n    for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n    u = 1;\n    for (i = 8; i < 16; i++) {\n      u = u + (z[i] & 0xff) | 0;\n      z[i] = u & 0xff;\n      u >>>= 8;\n    }\n    b -= 64;\n    cpos += 64;\n    mpos += 64;\n  }\n  if (b > 0) {\n    crypto_core_salsa20(x,z,k,sigma);\n    for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n  }\n  return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n  var z = new Uint8Array(16), x = new Uint8Array(64);\n  var u, i;\n  for (i = 0; i < 16; i++) z[i] = 0;\n  for (i = 0; i < 8; i++) z[i] = n[i];\n  while (b >= 64) {\n    crypto_core_salsa20(x,z,k,sigma);\n    for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n    u = 1;\n    for (i = 8; i < 16; i++) {\n      u = u + (z[i] & 0xff) | 0;\n      z[i] = u & 0xff;\n      u >>>= 8;\n    }\n    b -= 64;\n    cpos += 64;\n  }\n  if (b > 0) {\n    crypto_core_salsa20(x,z,k,sigma);\n    for (i = 0; i < b; i++) c[cpos+i] = x[i];\n  }\n  return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n  var s = new Uint8Array(32);\n  crypto_core_hsalsa20(s,n,k,sigma);\n  var sn = new Uint8Array(8);\n  for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n  return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n  var s = new Uint8Array(32);\n  crypto_core_hsalsa20(s,n,k,sigma);\n  var sn = new Uint8Array(8);\n  for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n  return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n  this.buffer = new Uint8Array(16);\n  this.r = new Uint16Array(10);\n  this.h = new Uint16Array(10);\n  this.pad = new Uint16Array(8);\n  this.leftover = 0;\n  this.fin = 0;\n\n  var t0, t1, t2, t3, t4, t5, t6, t7;\n\n  t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0                     ) & 0x1fff;\n  t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 <<  3)) & 0x1fff;\n  t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 <<  6)) & 0x1f03;\n  t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>>  7) | (t3 <<  9)) & 0x1fff;\n  t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>>  4) | (t4 << 12)) & 0x00ff;\n  this.r[5] = ((t4 >>>  1)) & 0x1ffe;\n  t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 <<  2)) & 0x1fff;\n  t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 <<  5)) & 0x1f81;\n  t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>>  8) | (t7 <<  8)) & 0x1fff;\n  this.r[9] = ((t7 >>>  5)) & 0x007f;\n\n  this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n  this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n  this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n  this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n  this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n  this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n  this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n  this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n  var hibit = this.fin ? 0 : (1 << 11);\n  var t0, t1, t2, t3, t4, t5, t6, t7, c;\n  var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n  var h0 = this.h[0],\n      h1 = this.h[1],\n      h2 = this.h[2],\n      h3 = this.h[3],\n      h4 = this.h[4],\n      h5 = this.h[5],\n      h6 = this.h[6],\n      h7 = this.h[7],\n      h8 = this.h[8],\n      h9 = this.h[9];\n\n  var r0 = this.r[0],\n      r1 = this.r[1],\n      r2 = this.r[2],\n      r3 = this.r[3],\n      r4 = this.r[4],\n      r5 = this.r[5],\n      r6 = this.r[6],\n      r7 = this.r[7],\n      r8 = this.r[8],\n      r9 = this.r[9];\n\n  while (bytes >= 16) {\n    t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0                     ) & 0x1fff;\n    t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 <<  3)) & 0x1fff;\n    t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 <<  6)) & 0x1fff;\n    t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>>  7) | (t3 <<  9)) & 0x1fff;\n    t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>>  4) | (t4 << 12)) & 0x1fff;\n    h5 += ((t4 >>>  1)) & 0x1fff;\n    t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 <<  2)) & 0x1fff;\n    t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 <<  5)) & 0x1fff;\n    t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>>  8) | (t7 <<  8)) & 0x1fff;\n    h9 += ((t7 >>> 5)) | hibit;\n\n    c = 0;\n\n    d0 = c;\n    d0 += h0 * r0;\n    d0 += h1 * (5 * r9);\n    d0 += h2 * (5 * r8);\n    d0 += h3 * (5 * r7);\n    d0 += h4 * (5 * r6);\n    c = (d0 >>> 13); d0 &= 0x1fff;\n    d0 += h5 * (5 * r5);\n    d0 += h6 * (5 * r4);\n    d0 += h7 * (5 * r3);\n    d0 += h8 * (5 * r2);\n    d0 += h9 * (5 * r1);\n    c += (d0 >>> 13); d0 &= 0x1fff;\n\n    d1 = c;\n    d1 += h0 * r1;\n    d1 += h1 * r0;\n    d1 += h2 * (5 * r9);\n    d1 += h3 * (5 * r8);\n    d1 += h4 * (5 * r7);\n    c = (d1 >>> 13); d1 &= 0x1fff;\n    d1 += h5 * (5 * r6);\n    d1 += h6 * (5 * r5);\n    d1 += h7 * (5 * r4);\n    d1 += h8 * (5 * r3);\n    d1 += h9 * (5 * r2);\n    c += (d1 >>> 13); d1 &= 0x1fff;\n\n    d2 = c;\n    d2 += h0 * r2;\n    d2 += h1 * r1;\n    d2 += h2 * r0;\n    d2 += h3 * (5 * r9);\n    d2 += h4 * (5 * r8);\n    c = (d2 >>> 13); d2 &= 0x1fff;\n    d2 += h5 * (5 * r7);\n    d2 += h6 * (5 * r6);\n    d2 += h7 * (5 * r5);\n    d2 += h8 * (5 * r4);\n    d2 += h9 * (5 * r3);\n    c += (d2 >>> 13); d2 &= 0x1fff;\n\n    d3 = c;\n    d3 += h0 * r3;\n    d3 += h1 * r2;\n    d3 += h2 * r1;\n    d3 += h3 * r0;\n    d3 += h4 * (5 * r9);\n    c = (d3 >>> 13); d3 &= 0x1fff;\n    d3 += h5 * (5 * r8);\n    d3 += h6 * (5 * r7);\n    d3 += h7 * (5 * r6);\n    d3 += h8 * (5 * r5);\n    d3 += h9 * (5 * r4);\n    c += (d3 >>> 13); d3 &= 0x1fff;\n\n    d4 = c;\n    d4 += h0 * r4;\n    d4 += h1 * r3;\n    d4 += h2 * r2;\n    d4 += h3 * r1;\n    d4 += h4 * r0;\n    c = (d4 >>> 13); d4 &= 0x1fff;\n    d4 += h5 * (5 * r9);\n    d4 += h6 * (5 * r8);\n    d4 += h7 * (5 * r7);\n    d4 += h8 * (5 * r6);\n    d4 += h9 * (5 * r5);\n    c += (d4 >>> 13); d4 &= 0x1fff;\n\n    d5 = c;\n    d5 += h0 * r5;\n    d5 += h1 * r4;\n    d5 += h2 * r3;\n    d5 += h3 * r2;\n    d5 += h4 * r1;\n    c = (d5 >>> 13); d5 &= 0x1fff;\n    d5 += h5 * r0;\n    d5 += h6 * (5 * r9);\n    d5 += h7 * (5 * r8);\n    d5 += h8 * (5 * r7);\n    d5 += h9 * (5 * r6);\n    c += (d5 >>> 13); d5 &= 0x1fff;\n\n    d6 = c;\n    d6 += h0 * r6;\n    d6 += h1 * r5;\n    d6 += h2 * r4;\n    d6 += h3 * r3;\n    d6 += h4 * r2;\n    c = (d6 >>> 13); d6 &= 0x1fff;\n    d6 += h5 * r1;\n    d6 += h6 * r0;\n    d6 += h7 * (5 * r9);\n    d6 += h8 * (5 * r8);\n    d6 += h9 * (5 * r7);\n    c += (d6 >>> 13); d6 &= 0x1fff;\n\n    d7 = c;\n    d7 += h0 * r7;\n    d7 += h1 * r6;\n    d7 += h2 * r5;\n    d7 += h3 * r4;\n    d7 += h4 * r3;\n    c = (d7 >>> 13); d7 &= 0x1fff;\n    d7 += h5 * r2;\n    d7 += h6 * r1;\n    d7 += h7 * r0;\n    d7 += h8 * (5 * r9);\n    d7 += h9 * (5 * r8);\n    c += (d7 >>> 13); d7 &= 0x1fff;\n\n    d8 = c;\n    d8 += h0 * r8;\n    d8 += h1 * r7;\n    d8 += h2 * r6;\n    d8 += h3 * r5;\n    d8 += h4 * r4;\n    c = (d8 >>> 13); d8 &= 0x1fff;\n    d8 += h5 * r3;\n    d8 += h6 * r2;\n    d8 += h7 * r1;\n    d8 += h8 * r0;\n    d8 += h9 * (5 * r9);\n    c += (d8 >>> 13); d8 &= 0x1fff;\n\n    d9 = c;\n    d9 += h0 * r9;\n    d9 += h1 * r8;\n    d9 += h2 * r7;\n    d9 += h3 * r6;\n    d9 += h4 * r5;\n    c = (d9 >>> 13); d9 &= 0x1fff;\n    d9 += h5 * r4;\n    d9 += h6 * r3;\n    d9 += h7 * r2;\n    d9 += h8 * r1;\n    d9 += h9 * r0;\n    c += (d9 >>> 13); d9 &= 0x1fff;\n\n    c = (((c << 2) + c)) | 0;\n    c = (c + d0) | 0;\n    d0 = c & 0x1fff;\n    c = (c >>> 13);\n    d1 += c;\n\n    h0 = d0;\n    h1 = d1;\n    h2 = d2;\n    h3 = d3;\n    h4 = d4;\n    h5 = d5;\n    h6 = d6;\n    h7 = d7;\n    h8 = d8;\n    h9 = d9;\n\n    mpos += 16;\n    bytes -= 16;\n  }\n  this.h[0] = h0;\n  this.h[1] = h1;\n  this.h[2] = h2;\n  this.h[3] = h3;\n  this.h[4] = h4;\n  this.h[5] = h5;\n  this.h[6] = h6;\n  this.h[7] = h7;\n  this.h[8] = h8;\n  this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n  var g = new Uint16Array(10);\n  var c, mask, f, i;\n\n  if (this.leftover) {\n    i = this.leftover;\n    this.buffer[i++] = 1;\n    for (; i < 16; i++) this.buffer[i] = 0;\n    this.fin = 1;\n    this.blocks(this.buffer, 0, 16);\n  }\n\n  c = this.h[1] >>> 13;\n  this.h[1] &= 0x1fff;\n  for (i = 2; i < 10; i++) {\n    this.h[i] += c;\n    c = this.h[i] >>> 13;\n    this.h[i] &= 0x1fff;\n  }\n  this.h[0] += (c * 5);\n  c = this.h[0] >>> 13;\n  this.h[0] &= 0x1fff;\n  this.h[1] += c;\n  c = this.h[1] >>> 13;\n  this.h[1] &= 0x1fff;\n  this.h[2] += c;\n\n  g[0] = this.h[0] + 5;\n  c = g[0] >>> 13;\n  g[0] &= 0x1fff;\n  for (i = 1; i < 10; i++) {\n    g[i] = this.h[i] + c;\n    c = g[i] >>> 13;\n    g[i] &= 0x1fff;\n  }\n  g[9] -= (1 << 13);\n\n  mask = (c ^ 1) - 1;\n  for (i = 0; i < 10; i++) g[i] &= mask;\n  mask = ~mask;\n  for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n  this.h[0] = ((this.h[0]       ) | (this.h[1] << 13)                    ) & 0xffff;\n  this.h[1] = ((this.h[1] >>>  3) | (this.h[2] << 10)                    ) & 0xffff;\n  this.h[2] = ((this.h[2] >>>  6) | (this.h[3] <<  7)                    ) & 0xffff;\n  this.h[3] = ((this.h[3] >>>  9) | (this.h[4] <<  4)                    ) & 0xffff;\n  this.h[4] = ((this.h[4] >>> 12) | (this.h[5] <<  1) | (this.h[6] << 14)) & 0xffff;\n  this.h[5] = ((this.h[6] >>>  2) | (this.h[7] << 11)                    ) & 0xffff;\n  this.h[6] = ((this.h[7] >>>  5) | (this.h[8] <<  8)                    ) & 0xffff;\n  this.h[7] = ((this.h[8] >>>  8) | (this.h[9] <<  5)                    ) & 0xffff;\n\n  f = this.h[0] + this.pad[0];\n  this.h[0] = f & 0xffff;\n  for (i = 1; i < 8; i++) {\n    f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n    this.h[i] = f & 0xffff;\n  }\n\n  mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n  mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n  mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n  mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n  mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n  mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n  mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n  mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n  mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n  mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n  mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n  mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n  mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n  mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n  mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n  mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n  var i, want;\n\n  if (this.leftover) {\n    want = (16 - this.leftover);\n    if (want > bytes)\n      want = bytes;\n    for (i = 0; i < want; i++)\n      this.buffer[this.leftover + i] = m[mpos+i];\n    bytes -= want;\n    mpos += want;\n    this.leftover += want;\n    if (this.leftover < 16)\n      return;\n    this.blocks(this.buffer, 0, 16);\n    this.leftover = 0;\n  }\n\n  if (bytes >= 16) {\n    want = bytes - (bytes % 16);\n    this.blocks(m, mpos, want);\n    mpos += want;\n    bytes -= want;\n  }\n\n  if (bytes) {\n    for (i = 0; i < bytes; i++)\n      this.buffer[this.leftover + i] = m[mpos+i];\n    this.leftover += bytes;\n  }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n  var s = new poly1305(k);\n  s.update(m, mpos, n);\n  s.finish(out, outpos);\n  return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n  var x = new Uint8Array(16);\n  crypto_onetimeauth(x,0,m,mpos,n,k);\n  return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n  var i;\n  if (d < 32) return -1;\n  crypto_stream_xor(c,0,m,0,d,n,k);\n  crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n  for (i = 0; i < 16; i++) c[i] = 0;\n  return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n  var i;\n  var x = new Uint8Array(32);\n  if (d < 32) return -1;\n  crypto_stream(x,0,32,n,k);\n  if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n  crypto_stream_xor(m,0,c,0,d,n,k);\n  for (i = 0; i < 32; i++) m[i] = 0;\n  return 0;\n}\n\nfunction set25519(r, a) {\n  var i;\n  for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n  var i, v, c = 1;\n  for (i = 0; i < 16; i++) {\n    v = o[i] + c + 65535;\n    c = Math.floor(v / 65536);\n    o[i] = v - c * 65536;\n  }\n  o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n  var t, c = ~(b-1);\n  for (var i = 0; i < 16; i++) {\n    t = c & (p[i] ^ q[i]);\n    p[i] ^= t;\n    q[i] ^= t;\n  }\n}\n\nfunction pack25519(o, n) {\n  var i, j, b;\n  var m = gf(), t = gf();\n  for (i = 0; i < 16; i++) t[i] = n[i];\n  car25519(t);\n  car25519(t);\n  car25519(t);\n  for (j = 0; j < 2; j++) {\n    m[0] = t[0] - 0xffed;\n    for (i = 1; i < 15; i++) {\n      m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n      m[i-1] &= 0xffff;\n    }\n    m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n    b = (m[15]>>16) & 1;\n    m[14] &= 0xffff;\n    sel25519(t, m, 1-b);\n  }\n  for (i = 0; i < 16; i++) {\n    o[2*i] = t[i] & 0xff;\n    o[2*i+1] = t[i]>>8;\n  }\n}\n\nfunction neq25519(a, b) {\n  var c = new Uint8Array(32), d = new Uint8Array(32);\n  pack25519(c, a);\n  pack25519(d, b);\n  return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n  var d = new Uint8Array(32);\n  pack25519(d, a);\n  return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n  var i;\n  for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n  o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n  for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n  for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n  var v, c,\n     t0 = 0,  t1 = 0,  t2 = 0,  t3 = 0,  t4 = 0,  t5 = 0,  t6 = 0,  t7 = 0,\n     t8 = 0,  t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n    t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n    t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n    b0 = b[0],\n    b1 = b[1],\n    b2 = b[2],\n    b3 = b[3],\n    b4 = b[4],\n    b5 = b[5],\n    b6 = b[6],\n    b7 = b[7],\n    b8 = b[8],\n    b9 = b[9],\n    b10 = b[10],\n    b11 = b[11],\n    b12 = b[12],\n    b13 = b[13],\n    b14 = b[14],\n    b15 = b[15];\n\n  v = a[0];\n  t0 += v * b0;\n  t1 += v * b1;\n  t2 += v * b2;\n  t3 += v * b3;\n  t4 += v * b4;\n  t5 += v * b5;\n  t6 += v * b6;\n  t7 += v * b7;\n  t8 += v * b8;\n  t9 += v * b9;\n  t10 += v * b10;\n  t11 += v * b11;\n  t12 += v * b12;\n  t13 += v * b13;\n  t14 += v * b14;\n  t15 += v * b15;\n  v = a[1];\n  t1 += v * b0;\n  t2 += v * b1;\n  t3 += v * b2;\n  t4 += v * b3;\n  t5 += v * b4;\n  t6 += v * b5;\n  t7 += v * b6;\n  t8 += v * b7;\n  t9 += v * b8;\n  t10 += v * b9;\n  t11 += v * b10;\n  t12 += v * b11;\n  t13 += v * b12;\n  t14 += v * b13;\n  t15 += v * b14;\n  t16 += v * b15;\n  v = a[2];\n  t2 += v * b0;\n  t3 += v * b1;\n  t4 += v * b2;\n  t5 += v * b3;\n  t6 += v * b4;\n  t7 += v * b5;\n  t8 += v * b6;\n  t9 += v * b7;\n  t10 += v * b8;\n  t11 += v * b9;\n  t12 += v * b10;\n  t13 += v * b11;\n  t14 += v * b12;\n  t15 += v * b13;\n  t16 += v * b14;\n  t17 += v * b15;\n  v = a[3];\n  t3 += v * b0;\n  t4 += v * b1;\n  t5 += v * b2;\n  t6 += v * b3;\n  t7 += v * b4;\n  t8 += v * b5;\n  t9 += v * b6;\n  t10 += v * b7;\n  t11 += v * b8;\n  t12 += v * b9;\n  t13 += v * b10;\n  t14 += v * b11;\n  t15 += v * b12;\n  t16 += v * b13;\n  t17 += v * b14;\n  t18 += v * b15;\n  v = a[4];\n  t4 += v * b0;\n  t5 += v * b1;\n  t6 += v * b2;\n  t7 += v * b3;\n  t8 += v * b4;\n  t9 += v * b5;\n  t10 += v * b6;\n  t11 += v * b7;\n  t12 += v * b8;\n  t13 += v * b9;\n  t14 += v * b10;\n  t15 += v * b11;\n  t16 += v * b12;\n  t17 += v * b13;\n  t18 += v * b14;\n  t19 += v * b15;\n  v = a[5];\n  t5 += v * b0;\n  t6 += v * b1;\n  t7 += v * b2;\n  t8 += v * b3;\n  t9 += v * b4;\n  t10 += v * b5;\n  t11 += v * b6;\n  t12 += v * b7;\n  t13 += v * b8;\n  t14 += v * b9;\n  t15 += v * b10;\n  t16 += v * b11;\n  t17 += v * b12;\n  t18 += v * b13;\n  t19 += v * b14;\n  t20 += v * b15;\n  v = a[6];\n  t6 += v * b0;\n  t7 += v * b1;\n  t8 += v * b2;\n  t9 += v * b3;\n  t10 += v * b4;\n  t11 += v * b5;\n  t12 += v * b6;\n  t13 += v * b7;\n  t14 += v * b8;\n  t15 += v * b9;\n  t16 += v * b10;\n  t17 += v * b11;\n  t18 += v * b12;\n  t19 += v * b13;\n  t20 += v * b14;\n  t21 += v * b15;\n  v = a[7];\n  t7 += v * b0;\n  t8 += v * b1;\n  t9 += v * b2;\n  t10 += v * b3;\n  t11 += v * b4;\n  t12 += v * b5;\n  t13 += v * b6;\n  t14 += v * b7;\n  t15 += v * b8;\n  t16 += v * b9;\n  t17 += v * b10;\n  t18 += v * b11;\n  t19 += v * b12;\n  t20 += v * b13;\n  t21 += v * b14;\n  t22 += v * b15;\n  v = a[8];\n  t8 += v * b0;\n  t9 += v * b1;\n  t10 += v * b2;\n  t11 += v * b3;\n  t12 += v * b4;\n  t13 += v * b5;\n  t14 += v * b6;\n  t15 += v * b7;\n  t16 += v * b8;\n  t17 += v * b9;\n  t18 += v * b10;\n  t19 += v * b11;\n  t20 += v * b12;\n  t21 += v * b13;\n  t22 += v * b14;\n  t23 += v * b15;\n  v = a[9];\n  t9 += v * b0;\n  t10 += v * b1;\n  t11 += v * b2;\n  t12 += v * b3;\n  t13 += v * b4;\n  t14 += v * b5;\n  t15 += v * b6;\n  t16 += v * b7;\n  t17 += v * b8;\n  t18 += v * b9;\n  t19 += v * b10;\n  t20 += v * b11;\n  t21 += v * b12;\n  t22 += v * b13;\n  t23 += v * b14;\n  t24 += v * b15;\n  v = a[10];\n  t10 += v * b0;\n  t11 += v * b1;\n  t12 += v * b2;\n  t13 += v * b3;\n  t14 += v * b4;\n  t15 += v * b5;\n  t16 += v * b6;\n  t17 += v * b7;\n  t18 += v * b8;\n  t19 += v * b9;\n  t20 += v * b10;\n  t21 += v * b11;\n  t22 += v * b12;\n  t23 += v * b13;\n  t24 += v * b14;\n  t25 += v * b15;\n  v = a[11];\n  t11 += v * b0;\n  t12 += v * b1;\n  t13 += v * b2;\n  t14 += v * b3;\n  t15 += v * b4;\n  t16 += v * b5;\n  t17 += v * b6;\n  t18 += v * b7;\n  t19 += v * b8;\n  t20 += v * b9;\n  t21 += v * b10;\n  t22 += v * b11;\n  t23 += v * b12;\n  t24 += v * b13;\n  t25 += v * b14;\n  t26 += v * b15;\n  v = a[12];\n  t12 += v * b0;\n  t13 += v * b1;\n  t14 += v * b2;\n  t15 += v * b3;\n  t16 += v * b4;\n  t17 += v * b5;\n  t18 += v * b6;\n  t19 += v * b7;\n  t20 += v * b8;\n  t21 += v * b9;\n  t22 += v * b10;\n  t23 += v * b11;\n  t24 += v * b12;\n  t25 += v * b13;\n  t26 += v * b14;\n  t27 += v * b15;\n  v = a[13];\n  t13 += v * b0;\n  t14 += v * b1;\n  t15 += v * b2;\n  t16 += v * b3;\n  t17 += v * b4;\n  t18 += v * b5;\n  t19 += v * b6;\n  t20 += v * b7;\n  t21 += v * b8;\n  t22 += v * b9;\n  t23 += v * b10;\n  t24 += v * b11;\n  t25 += v * b12;\n  t26 += v * b13;\n  t27 += v * b14;\n  t28 += v * b15;\n  v = a[14];\n  t14 += v * b0;\n  t15 += v * b1;\n  t16 += v * b2;\n  t17 += v * b3;\n  t18 += v * b4;\n  t19 += v * b5;\n  t20 += v * b6;\n  t21 += v * b7;\n  t22 += v * b8;\n  t23 += v * b9;\n  t24 += v * b10;\n  t25 += v * b11;\n  t26 += v * b12;\n  t27 += v * b13;\n  t28 += v * b14;\n  t29 += v * b15;\n  v = a[15];\n  t15 += v * b0;\n  t16 += v * b1;\n  t17 += v * b2;\n  t18 += v * b3;\n  t19 += v * b4;\n  t20 += v * b5;\n  t21 += v * b6;\n  t22 += v * b7;\n  t23 += v * b8;\n  t24 += v * b9;\n  t25 += v * b10;\n  t26 += v * b11;\n  t27 += v * b12;\n  t28 += v * b13;\n  t29 += v * b14;\n  t30 += v * b15;\n\n  t0  += 38 * t16;\n  t1  += 38 * t17;\n  t2  += 38 * t18;\n  t3  += 38 * t19;\n  t4  += 38 * t20;\n  t5  += 38 * t21;\n  t6  += 38 * t22;\n  t7  += 38 * t23;\n  t8  += 38 * t24;\n  t9  += 38 * t25;\n  t10 += 38 * t26;\n  t11 += 38 * t27;\n  t12 += 38 * t28;\n  t13 += 38 * t29;\n  t14 += 38 * t30;\n  // t15 left as is\n\n  // first car\n  c = 1;\n  v =  t0 + c + 65535; c = Math.floor(v / 65536);  t0 = v - c * 65536;\n  v =  t1 + c + 65535; c = Math.floor(v / 65536);  t1 = v - c * 65536;\n  v =  t2 + c + 65535; c = Math.floor(v / 65536);  t2 = v - c * 65536;\n  v =  t3 + c + 65535; c = Math.floor(v / 65536);  t3 = v - c * 65536;\n  v =  t4 + c + 65535; c = Math.floor(v / 65536);  t4 = v - c * 65536;\n  v =  t5 + c + 65535; c = Math.floor(v / 65536);  t5 = v - c * 65536;\n  v =  t6 + c + 65535; c = Math.floor(v / 65536);  t6 = v - c * 65536;\n  v =  t7 + c + 65535; c = Math.floor(v / 65536);  t7 = v - c * 65536;\n  v =  t8 + c + 65535; c = Math.floor(v / 65536);  t8 = v - c * 65536;\n  v =  t9 + c + 65535; c = Math.floor(v / 65536);  t9 = v - c * 65536;\n  v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n  v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n  v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n  v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n  v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n  v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n  t0 += c-1 + 37 * (c-1);\n\n  // second car\n  c = 1;\n  v =  t0 + c + 65535; c = Math.floor(v / 65536);  t0 = v - c * 65536;\n  v =  t1 + c + 65535; c = Math.floor(v / 65536);  t1 = v - c * 65536;\n  v =  t2 + c + 65535; c = Math.floor(v / 65536);  t2 = v - c * 65536;\n  v =  t3 + c + 65535; c = Math.floor(v / 65536);  t3 = v - c * 65536;\n  v =  t4 + c + 65535; c = Math.floor(v / 65536);  t4 = v - c * 65536;\n  v =  t5 + c + 65535; c = Math.floor(v / 65536);  t5 = v - c * 65536;\n  v =  t6 + c + 65535; c = Math.floor(v / 65536);  t6 = v - c * 65536;\n  v =  t7 + c + 65535; c = Math.floor(v / 65536);  t7 = v - c * 65536;\n  v =  t8 + c + 65535; c = Math.floor(v / 65536);  t8 = v - c * 65536;\n  v =  t9 + c + 65535; c = Math.floor(v / 65536);  t9 = v - c * 65536;\n  v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n  v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n  v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n  v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n  v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n  v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n  t0 += c-1 + 37 * (c-1);\n\n  o[ 0] = t0;\n  o[ 1] = t1;\n  o[ 2] = t2;\n  o[ 3] = t3;\n  o[ 4] = t4;\n  o[ 5] = t5;\n  o[ 6] = t6;\n  o[ 7] = t7;\n  o[ 8] = t8;\n  o[ 9] = t9;\n  o[10] = t10;\n  o[11] = t11;\n  o[12] = t12;\n  o[13] = t13;\n  o[14] = t14;\n  o[15] = t15;\n}\n\nfunction S(o, a) {\n  M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n  var c = gf();\n  var a;\n  for (a = 0; a < 16; a++) c[a] = i[a];\n  for (a = 253; a >= 0; a--) {\n    S(c, c);\n    if(a !== 2 && a !== 4) M(c, c, i);\n  }\n  for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n  var c = gf();\n  var a;\n  for (a = 0; a < 16; a++) c[a] = i[a];\n  for (a = 250; a >= 0; a--) {\n      S(c, c);\n      if(a !== 1) M(c, c, i);\n  }\n  for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n  var z = new Uint8Array(32);\n  var x = new Float64Array(80), r, i;\n  var a = gf(), b = gf(), c = gf(),\n      d = gf(), e = gf(), f = gf();\n  for (i = 0; i < 31; i++) z[i] = n[i];\n  z[31]=(n[31]&127)|64;\n  z[0]&=248;\n  unpack25519(x,p);\n  for (i = 0; i < 16; i++) {\n    b[i]=x[i];\n    d[i]=a[i]=c[i]=0;\n  }\n  a[0]=d[0]=1;\n  for (i=254; i>=0; --i) {\n    r=(z[i>>>3]>>>(i&7))&1;\n    sel25519(a,b,r);\n    sel25519(c,d,r);\n    A(e,a,c);\n    Z(a,a,c);\n    A(c,b,d);\n    Z(b,b,d);\n    S(d,e);\n    S(f,a);\n    M(a,c,a);\n    M(c,b,e);\n    A(e,a,c);\n    Z(a,a,c);\n    S(b,a);\n    Z(c,d,f);\n    M(a,c,_121665);\n    A(a,a,d);\n    M(c,c,a);\n    M(a,d,f);\n    M(d,b,x);\n    S(b,e);\n    sel25519(a,b,r);\n    sel25519(c,d,r);\n  }\n  for (i = 0; i < 16; i++) {\n    x[i+16]=a[i];\n    x[i+32]=c[i];\n    x[i+48]=b[i];\n    x[i+64]=d[i];\n  }\n  var x32 = x.subarray(32);\n  var x16 = x.subarray(16);\n  inv25519(x32,x32);\n  M(x16,x16,x32);\n  pack25519(q,x16);\n  return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n  return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n  randombytes(x, 32);\n  return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n  var s = new Uint8Array(32);\n  crypto_scalarmult(s, x, y);\n  return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n  var k = new Uint8Array(32);\n  crypto_box_beforenm(k, y, x);\n  return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n  var k = new Uint8Array(32);\n  crypto_box_beforenm(k, y, x);\n  return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n  var wh = new Int32Array(16), wl = new Int32Array(16),\n      bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n      bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n      th, tl, i, j, h, l, a, b, c, d;\n\n  var ah0 = hh[0],\n      ah1 = hh[1],\n      ah2 = hh[2],\n      ah3 = hh[3],\n      ah4 = hh[4],\n      ah5 = hh[5],\n      ah6 = hh[6],\n      ah7 = hh[7],\n\n      al0 = hl[0],\n      al1 = hl[1],\n      al2 = hl[2],\n      al3 = hl[3],\n      al4 = hl[4],\n      al5 = hl[5],\n      al6 = hl[6],\n      al7 = hl[7];\n\n  var pos = 0;\n  while (n >= 128) {\n    for (i = 0; i < 16; i++) {\n      j = 8 * i + pos;\n      wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n      wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n    }\n    for (i = 0; i < 80; i++) {\n      bh0 = ah0;\n      bh1 = ah1;\n      bh2 = ah2;\n      bh3 = ah3;\n      bh4 = ah4;\n      bh5 = ah5;\n      bh6 = ah6;\n      bh7 = ah7;\n\n      bl0 = al0;\n      bl1 = al1;\n      bl2 = al2;\n      bl3 = al3;\n      bl4 = al4;\n      bl5 = al5;\n      bl6 = al6;\n      bl7 = al7;\n\n      // add\n      h = ah7;\n      l = al7;\n\n      a = l & 0xffff; b = l >>> 16;\n      c = h & 0xffff; d = h >>> 16;\n\n      // Sigma1\n      h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n      l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // Ch\n      h = (ah4 & ah5) ^ (~ah4 & ah6);\n      l = (al4 & al5) ^ (~al4 & al6);\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // K\n      h = K[i*2];\n      l = K[i*2+1];\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // w\n      h = wh[i%16];\n      l = wl[i%16];\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      b += a >>> 16;\n      c += b >>> 16;\n      d += c >>> 16;\n\n      th = c & 0xffff | d << 16;\n      tl = a & 0xffff | b << 16;\n\n      // add\n      h = th;\n      l = tl;\n\n      a = l & 0xffff; b = l >>> 16;\n      c = h & 0xffff; d = h >>> 16;\n\n      // Sigma0\n      h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n      l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // Maj\n      h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n      l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      b += a >>> 16;\n      c += b >>> 16;\n      d += c >>> 16;\n\n      bh7 = (c & 0xffff) | (d << 16);\n      bl7 = (a & 0xffff) | (b << 16);\n\n      // add\n      h = bh3;\n      l = bl3;\n\n      a = l & 0xffff; b = l >>> 16;\n      c = h & 0xffff; d = h >>> 16;\n\n      h = th;\n      l = tl;\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      b += a >>> 16;\n      c += b >>> 16;\n      d += c >>> 16;\n\n      bh3 = (c & 0xffff) | (d << 16);\n      bl3 = (a & 0xffff) | (b << 16);\n\n      ah1 = bh0;\n      ah2 = bh1;\n      ah3 = bh2;\n      ah4 = bh3;\n      ah5 = bh4;\n      ah6 = bh5;\n      ah7 = bh6;\n      ah0 = bh7;\n\n      al1 = bl0;\n      al2 = bl1;\n      al3 = bl2;\n      al4 = bl3;\n      al5 = bl4;\n      al6 = bl5;\n      al7 = bl6;\n      al0 = bl7;\n\n      if (i%16 === 15) {\n        for (j = 0; j < 16; j++) {\n          // add\n          h = wh[j];\n          l = wl[j];\n\n          a = l & 0xffff; b = l >>> 16;\n          c = h & 0xffff; d = h >>> 16;\n\n          h = wh[(j+9)%16];\n          l = wl[(j+9)%16];\n\n          a += l & 0xffff; b += l >>> 16;\n          c += h & 0xffff; d += h >>> 16;\n\n          // sigma0\n          th = wh[(j+1)%16];\n          tl = wl[(j+1)%16];\n          h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n          l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n          a += l & 0xffff; b += l >>> 16;\n          c += h & 0xffff; d += h >>> 16;\n\n          // sigma1\n          th = wh[(j+14)%16];\n          tl = wl[(j+14)%16];\n          h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n          l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n          a += l & 0xffff; b += l >>> 16;\n          c += h & 0xffff; d += h >>> 16;\n\n          b += a >>> 16;\n          c += b >>> 16;\n          d += c >>> 16;\n\n          wh[j] = (c & 0xffff) | (d << 16);\n          wl[j] = (a & 0xffff) | (b << 16);\n        }\n      }\n    }\n\n    // add\n    h = ah0;\n    l = al0;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[0];\n    l = hl[0];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[0] = ah0 = (c & 0xffff) | (d << 16);\n    hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n    h = ah1;\n    l = al1;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[1];\n    l = hl[1];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[1] = ah1 = (c & 0xffff) | (d << 16);\n    hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n    h = ah2;\n    l = al2;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[2];\n    l = hl[2];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[2] = ah2 = (c & 0xffff) | (d << 16);\n    hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n    h = ah3;\n    l = al3;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[3];\n    l = hl[3];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[3] = ah3 = (c & 0xffff) | (d << 16);\n    hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n    h = ah4;\n    l = al4;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[4];\n    l = hl[4];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[4] = ah4 = (c & 0xffff) | (d << 16);\n    hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n    h = ah5;\n    l = al5;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[5];\n    l = hl[5];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[5] = ah5 = (c & 0xffff) | (d << 16);\n    hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n    h = ah6;\n    l = al6;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[6];\n    l = hl[6];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[6] = ah6 = (c & 0xffff) | (d << 16);\n    hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n    h = ah7;\n    l = al7;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[7];\n    l = hl[7];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[7] = ah7 = (c & 0xffff) | (d << 16);\n    hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n    pos += 128;\n    n -= 128;\n  }\n\n  return n;\n}\n\nfunction crypto_hash(out, m, n) {\n  var hh = new Int32Array(8),\n      hl = new Int32Array(8),\n      x = new Uint8Array(256),\n      i, b = n;\n\n  hh[0] = 0x6a09e667;\n  hh[1] = 0xbb67ae85;\n  hh[2] = 0x3c6ef372;\n  hh[3] = 0xa54ff53a;\n  hh[4] = 0x510e527f;\n  hh[5] = 0x9b05688c;\n  hh[6] = 0x1f83d9ab;\n  hh[7] = 0x5be0cd19;\n\n  hl[0] = 0xf3bcc908;\n  hl[1] = 0x84caa73b;\n  hl[2] = 0xfe94f82b;\n  hl[3] = 0x5f1d36f1;\n  hl[4] = 0xade682d1;\n  hl[5] = 0x2b3e6c1f;\n  hl[6] = 0xfb41bd6b;\n  hl[7] = 0x137e2179;\n\n  crypto_hashblocks_hl(hh, hl, m, n);\n  n %= 128;\n\n  for (i = 0; i < n; i++) x[i] = m[b-n+i];\n  x[n] = 128;\n\n  n = 256-128*(n<112?1:0);\n  x[n-9] = 0;\n  ts64(x, n-8,  (b / 0x20000000) | 0, b << 3);\n  crypto_hashblocks_hl(hh, hl, x, n);\n\n  for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n  return 0;\n}\n\nfunction add(p, q) {\n  var a = gf(), b = gf(), c = gf(),\n      d = gf(), e = gf(), f = gf(),\n      g = gf(), h = gf(), t = gf();\n\n  Z(a, p[1], p[0]);\n  Z(t, q[1], q[0]);\n  M(a, a, t);\n  A(b, p[0], p[1]);\n  A(t, q[0], q[1]);\n  M(b, b, t);\n  M(c, p[3], q[3]);\n  M(c, c, D2);\n  M(d, p[2], q[2]);\n  A(d, d, d);\n  Z(e, b, a);\n  Z(f, d, c);\n  A(g, d, c);\n  A(h, b, a);\n\n  M(p[0], e, f);\n  M(p[1], h, g);\n  M(p[2], g, f);\n  M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n  var i;\n  for (i = 0; i < 4; i++) {\n    sel25519(p[i], q[i], b);\n  }\n}\n\nfunction pack(r, p) {\n  var tx = gf(), ty = gf(), zi = gf();\n  inv25519(zi, p[2]);\n  M(tx, p[0], zi);\n  M(ty, p[1], zi);\n  pack25519(r, ty);\n  r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n  var b, i;\n  set25519(p[0], gf0);\n  set25519(p[1], gf1);\n  set25519(p[2], gf1);\n  set25519(p[3], gf0);\n  for (i = 255; i >= 0; --i) {\n    b = (s[(i/8)|0] >> (i&7)) & 1;\n    cswap(p, q, b);\n    add(q, p);\n    add(p, p);\n    cswap(p, q, b);\n  }\n}\n\nfunction scalarbase(p, s) {\n  var q = [gf(), gf(), gf(), gf()];\n  set25519(q[0], X);\n  set25519(q[1], Y);\n  set25519(q[2], gf1);\n  M(q[3], X, Y);\n  scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n  var d = new Uint8Array(64);\n  var p = [gf(), gf(), gf(), gf()];\n  var i;\n\n  if (!seeded) randombytes(sk, 32);\n  crypto_hash(d, sk, 32);\n  d[0] &= 248;\n  d[31] &= 127;\n  d[31] |= 64;\n\n  scalarbase(p, d);\n  pack(pk, p);\n\n  for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n  return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n  var carry, i, j, k;\n  for (i = 63; i >= 32; --i) {\n    carry = 0;\n    for (j = i - 32, k = i - 12; j < k; ++j) {\n      x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n      carry = Math.floor((x[j] + 128) / 256);\n      x[j] -= carry * 256;\n    }\n    x[j] += carry;\n    x[i] = 0;\n  }\n  carry = 0;\n  for (j = 0; j < 32; j++) {\n    x[j] += carry - (x[31] >> 4) * L[j];\n    carry = x[j] >> 8;\n    x[j] &= 255;\n  }\n  for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n  for (i = 0; i < 32; i++) {\n    x[i+1] += x[i] >> 8;\n    r[i] = x[i] & 255;\n  }\n}\n\nfunction reduce(r) {\n  var x = new Float64Array(64), i;\n  for (i = 0; i < 64; i++) x[i] = r[i];\n  for (i = 0; i < 64; i++) r[i] = 0;\n  modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n  var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n  var i, j, x = new Float64Array(64);\n  var p = [gf(), gf(), gf(), gf()];\n\n  crypto_hash(d, sk, 32);\n  d[0] &= 248;\n  d[31] &= 127;\n  d[31] |= 64;\n\n  var smlen = n + 64;\n  for (i = 0; i < n; i++) sm[64 + i] = m[i];\n  for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n  crypto_hash(r, sm.subarray(32), n+32);\n  reduce(r);\n  scalarbase(p, r);\n  pack(sm, p);\n\n  for (i = 32; i < 64; i++) sm[i] = sk[i];\n  crypto_hash(h, sm, n + 64);\n  reduce(h);\n\n  for (i = 0; i < 64; i++) x[i] = 0;\n  for (i = 0; i < 32; i++) x[i] = r[i];\n  for (i = 0; i < 32; i++) {\n    for (j = 0; j < 32; j++) {\n      x[i+j] += h[i] * d[j];\n    }\n  }\n\n  modL(sm.subarray(32), x);\n  return smlen;\n}\n\nfunction unpackneg(r, p) {\n  var t = gf(), chk = gf(), num = gf(),\n      den = gf(), den2 = gf(), den4 = gf(),\n      den6 = gf();\n\n  set25519(r[2], gf1);\n  unpack25519(r[1], p);\n  S(num, r[1]);\n  M(den, num, D);\n  Z(num, num, r[2]);\n  A(den, r[2], den);\n\n  S(den2, den);\n  S(den4, den2);\n  M(den6, den4, den2);\n  M(t, den6, num);\n  M(t, t, den);\n\n  pow2523(t, t);\n  M(t, t, num);\n  M(t, t, den);\n  M(t, t, den);\n  M(r[0], t, den);\n\n  S(chk, r[0]);\n  M(chk, chk, den);\n  if (neq25519(chk, num)) M(r[0], r[0], I);\n\n  S(chk, r[0]);\n  M(chk, chk, den);\n  if (neq25519(chk, num)) return -1;\n\n  if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n  M(r[3], r[0], r[1]);\n  return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n  var i;\n  var t = new Uint8Array(32), h = new Uint8Array(64);\n  var p = [gf(), gf(), gf(), gf()],\n      q = [gf(), gf(), gf(), gf()];\n\n  if (n < 64) return -1;\n\n  if (unpackneg(q, pk)) return -1;\n\n  for (i = 0; i < n; i++) m[i] = sm[i];\n  for (i = 0; i < 32; i++) m[i+32] = pk[i];\n  crypto_hash(h, m, n);\n  reduce(h);\n  scalarmult(p, q, h);\n\n  scalarbase(q, sm.subarray(32));\n  add(p, q);\n  pack(t, p);\n\n  n -= 64;\n  if (crypto_verify_32(sm, 0, t, 0)) {\n    for (i = 0; i < n; i++) m[i] = 0;\n    return -1;\n  }\n\n  for (i = 0; i < n; i++) m[i] = sm[i + 64];\n  return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n    crypto_secretbox_NONCEBYTES = 24,\n    crypto_secretbox_ZEROBYTES = 32,\n    crypto_secretbox_BOXZEROBYTES = 16,\n    crypto_scalarmult_BYTES = 32,\n    crypto_scalarmult_SCALARBYTES = 32,\n    crypto_box_PUBLICKEYBYTES = 32,\n    crypto_box_SECRETKEYBYTES = 32,\n    crypto_box_BEFORENMBYTES = 32,\n    crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n    crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n    crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n    crypto_sign_BYTES = 64,\n    crypto_sign_PUBLICKEYBYTES = 32,\n    crypto_sign_SECRETKEYBYTES = 64,\n    crypto_sign_SEEDBYTES = 32,\n    crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n  crypto_core_hsalsa20: crypto_core_hsalsa20,\n  crypto_stream_xor: crypto_stream_xor,\n  crypto_stream: crypto_stream,\n  crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n  crypto_stream_salsa20: crypto_stream_salsa20,\n  crypto_onetimeauth: crypto_onetimeauth,\n  crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n  crypto_verify_16: crypto_verify_16,\n  crypto_verify_32: crypto_verify_32,\n  crypto_secretbox: crypto_secretbox,\n  crypto_secretbox_open: crypto_secretbox_open,\n  crypto_scalarmult: crypto_scalarmult,\n  crypto_scalarmult_base: crypto_scalarmult_base,\n  crypto_box_beforenm: crypto_box_beforenm,\n  crypto_box_afternm: crypto_box_afternm,\n  crypto_box: crypto_box,\n  crypto_box_open: crypto_box_open,\n  crypto_box_keypair: crypto_box_keypair,\n  crypto_hash: crypto_hash,\n  crypto_sign: crypto_sign,\n  crypto_sign_keypair: crypto_sign_keypair,\n  crypto_sign_open: crypto_sign_open,\n\n  crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n  crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n  crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n  crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n  crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n  crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n  crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n  crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n  crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n  crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n  crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n  crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n  crypto_sign_BYTES: crypto_sign_BYTES,\n  crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n  crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n  crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n  crypto_hash_BYTES: crypto_hash_BYTES,\n\n  gf: gf,\n  D: D,\n  L: L,\n  pack25519: pack25519,\n  unpack25519: unpack25519,\n  M: M,\n  A: A,\n  S: S,\n  Z: Z,\n  pow2523: pow2523,\n  add: add,\n  set25519: set25519,\n  modL: modL,\n  scalarmult: scalarmult,\n  scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n  if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n  if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n  if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n  if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n  for (var i = 0; i < arguments.length; i++) {\n    if (!(arguments[i] instanceof Uint8Array))\n      throw new TypeError('unexpected type, use Uint8Array');\n  }\n}\n\nfunction cleanup(arr) {\n  for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n  var b = new Uint8Array(n);\n  randombytes(b, n);\n  return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n  checkArrayTypes(msg, nonce, key);\n  checkLengths(key, nonce);\n  var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n  var c = new Uint8Array(m.length);\n  for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n  crypto_secretbox(c, m, m.length, nonce, key);\n  return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n  checkArrayTypes(box, nonce, key);\n  checkLengths(key, nonce);\n  var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n  var m = new Uint8Array(c.length);\n  for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n  if (c.length < 32) return null;\n  if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n  return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n  checkArrayTypes(n, p);\n  if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n  if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n  var q = new Uint8Array(crypto_scalarmult_BYTES);\n  crypto_scalarmult(q, n, p);\n  return q;\n};\n\nnacl.scalarMult.base = function(n) {\n  checkArrayTypes(n);\n  if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n  var q = new Uint8Array(crypto_scalarmult_BYTES);\n  crypto_scalarmult_base(q, n);\n  return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n  var k = nacl.box.before(publicKey, secretKey);\n  return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n  checkArrayTypes(publicKey, secretKey);\n  checkBoxLengths(publicKey, secretKey);\n  var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n  crypto_box_beforenm(k, publicKey, secretKey);\n  return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n  var k = nacl.box.before(publicKey, secretKey);\n  return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n  var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n  var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n  crypto_box_keypair(pk, sk);\n  return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n  checkArrayTypes(secretKey);\n  if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n    throw new Error('bad secret key size');\n  var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n  crypto_scalarmult_base(pk, secretKey);\n  return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n  checkArrayTypes(msg, secretKey);\n  if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n    throw new Error('bad secret key size');\n  var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n  crypto_sign(signedMsg, msg, msg.length, secretKey);\n  return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n  checkArrayTypes(signedMsg, publicKey);\n  if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n    throw new Error('bad public key size');\n  var tmp = new Uint8Array(signedMsg.length);\n  var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n  if (mlen < 0) return null;\n  var m = new Uint8Array(mlen);\n  for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n  return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n  var signedMsg = nacl.sign(msg, secretKey);\n  var sig = new Uint8Array(crypto_sign_BYTES);\n  for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n  return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n  checkArrayTypes(msg, sig, publicKey);\n  if (sig.length !== crypto_sign_BYTES)\n    throw new Error('bad signature size');\n  if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n    throw new Error('bad public key size');\n  var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n  var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n  var i;\n  for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n  for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n  return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n  var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n  var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n  crypto_sign_keypair(pk, sk);\n  return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n  checkArrayTypes(secretKey);\n  if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n    throw new Error('bad secret key size');\n  var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n  for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n  return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n  checkArrayTypes(seed);\n  if (seed.length !== crypto_sign_SEEDBYTES)\n    throw new Error('bad seed size');\n  var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n  var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n  for (var i = 0; i < 32; i++) sk[i] = seed[i];\n  crypto_sign_keypair(pk, sk, true);\n  return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n  checkArrayTypes(msg);\n  var h = new Uint8Array(crypto_hash_BYTES);\n  crypto_hash(h, msg, msg.length);\n  return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n  checkArrayTypes(x, y);\n  // Zero length arguments are considered not equal.\n  if (x.length === 0 || y.length === 0) return false;\n  if (x.length !== y.length) return false;\n  return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n  randombytes = fn;\n};\n\n(function() {\n  // Initialize PRNG if environment provides CSPRNG.\n  // If not, methods calling randombytes will throw.\n  var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n  if (crypto && crypto.getRandomValues) {\n    // Browsers.\n    var QUOTA = 65536;\n    nacl.setPRNG(function(x, n) {\n      var i, v = new Uint8Array(n);\n      for (i = 0; i < n; i += QUOTA) {\n        crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n      }\n      for (i = 0; i < n; i++) x[i] = v[i];\n      cleanup(v);\n    });\n  } else if (typeof require !== 'undefined') {\n    // Node.js.\n    crypto = require('crypto');\n    if (crypto && crypto.randomBytes) {\n      nacl.setPRNG(function(x, n) {\n        var i, v = crypto.randomBytes(n);\n        for (i = 0; i < n; i++) x[i] = v[i];\n        cleanup(v);\n      });\n    }\n  }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","// Written in 2014-2016 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n(function(root, f) {\n  'use strict';\n  if (typeof module !== 'undefined' && module.exports) module.exports = f();\n  else if (root.nacl) root.nacl.util = f();\n  else {\n    root.nacl = {};\n    root.nacl.util = f();\n  }\n}(this, function() {\n  'use strict';\n\n  var util = {};\n\n  function validateBase64(s) {\n    if (!(/^(?:[A-Za-z0-9+\\/]{2}[A-Za-z0-9+\\/]{2})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=)?$/.test(s))) {\n      throw new TypeError('invalid encoding');\n    }\n  }\n\n  util.decodeUTF8 = function(s) {\n    if (typeof s !== 'string') throw new TypeError('expected string');\n    var i, d = unescape(encodeURIComponent(s)), b = new Uint8Array(d.length);\n    for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i);\n    return b;\n  };\n\n  util.encodeUTF8 = function(arr) {\n    var i, s = [];\n    for (i = 0; i < arr.length; i++) s.push(String.fromCharCode(arr[i]));\n    return decodeURIComponent(escape(s.join('')));\n  };\n\n  if (typeof atob === 'undefined') {\n    // Node.js\n\n    if (typeof Buffer.from !== 'undefined') {\n       // Node v6 and later\n      util.encodeBase64 = function (arr) { // v6 and later\n          return Buffer.from(arr).toString('base64');\n      };\n\n      util.decodeBase64 = function (s) {\n        validateBase64(s);\n        return new Uint8Array(Array.prototype.slice.call(Buffer.from(s, 'base64'), 0));\n      };\n\n    } else {\n      // Node earlier than v6\n      util.encodeBase64 = function (arr) { // v6 and later\n        return (new Buffer(arr)).toString('base64');\n      };\n\n      util.decodeBase64 = function(s) {\n        validateBase64(s);\n        return new Uint8Array(Array.prototype.slice.call(new Buffer(s, 'base64'), 0));\n      };\n    }\n\n  } else {\n    // Browsers\n\n    util.encodeBase64 = function(arr) {\n      var i, s = [], len = arr.length;\n      for (i = 0; i < len; i++) s.push(String.fromCharCode(arr[i]));\n      return btoa(s.join(''));\n    };\n\n    util.decodeBase64 = function(s) {\n      validateBase64(s);\n      var i, d = atob(s), b = new Uint8Array(d.length);\n      for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i);\n      return b;\n    };\n\n  }\n\n  return util;\n\n}));\n","var libheif=(()=>{var xe=Object.create;var wA=Object.defineProperty;var Le=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var Oe=Object.getPrototypeOf,Je=Object.prototype.hasOwnProperty;var be=(f=>typeof require!=\"undefined\"?require:typeof Proxy!=\"undefined\"?new Proxy(f,{get:(N,y)=>(typeof require!=\"undefined\"?require:N)[y]}):f)(function(f){if(typeof require!=\"undefined\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+f+'\" is not supported')});var Ej=(f,N)=>()=>(N||f((N={exports:{}}).exports,N),N.exports),De=(f,N)=>{for(var y in N)wA(f,y,{get:N[y],enumerable:!0})},Zj=(f,N,y,K)=>{if(N&&typeof N==\"object\"||typeof N==\"function\")for(let r of ye(N))!Je.call(f,r)&&r!==y&&wA(f,r,{get:()=>N[r],enumerable:!(K=Le(N,r))||K.enumerable});return f};var we=(f,N,y)=>(y=f!=null?xe(Oe(f)):{},Zj(N||!f||!f.__esModule?wA(y,\"default\",{value:f,enumerable:!0}):y,f)),Ce=f=>Zj(wA({},\"__esModule\",{value:!0}),f);var Qj=(()=>{for(var f=new Uint8Array(128),N=0;N<64;N++)f[N<26?N+65:N<52?N+71:N<62?N-4:N*4-205]=N;return y=>{for(var K=y.length,r=new Uint8Array((K-(y[K-1]==\"=\")-(y[K-2]==\"=\"))*3/4|0),z=0,AA=0;z<K;){var sj=f[y.charCodeAt(z++)],qA=f[y.charCodeAt(z++)],jA=f[y.charCodeAt(z++)],_A=f[y.charCodeAt(z++)];r[AA++]=sj<<2|qA>>4,r[AA++]=qA<<4|jA>>2,r[AA++]=jA<<6|_A}return r}})();var j6=Ej((v_,A6)=>{A6.exports={}});var e6=Ej((F_,t6)=>{t6.exports={}});var l6=Ej((k6,nj)=>{var r6=(()=>{var f,N=typeof document!=\"undefined\"?(f=document.currentScript)==null?void 0:f.src:void 0;return typeof __filename!=\"undefined\"&&(N||(N=__filename)),function(y={}){var K,r=y,z,AA,sj=new Promise((A,j)=>{z=A,AA=j}),qA=typeof window==\"object\",jA=typeof importScripts==\"function\",_A=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\",Gj=Object.assign({},r),dj=[],CA=\"./this.program\",$j=(A,j)=>{throw j},M=\"\";function a6(A){return r.locateFile?r.locateFile(A,M):M+A}var aA,SA,hA;if(_A){var PA=j6(),uj=e6();M=__dirname+\"/\",aA=(A,j)=>(A=RA(A)?new URL(A):uj.normalize(A),PA.readFileSync(A,j?void 0:\"utf8\")),hA=A=>{var j=aA(A,!0);return j.buffer||(j=new Uint8Array(j)),j},SA=(A,j,t,e=!0)=>{A=RA(A)?new URL(A):uj.normalize(A),PA.readFile(A,e?void 0:\"utf8\",(l,_)=>{l?t(l):j(e?_.buffer:_)})},!r.thisProgram&&process.argv.length>1&&(CA=process.argv[1].replace(/\\\\/g,\"/\")),dj=process.argv.slice(2),$j=(A,j)=>{throw process.exitCode=A,j}}else(qA||jA)&&(jA?M=self.location.href:typeof document!=\"undefined\"&&document.currentScript&&(M=document.currentScript.src),N&&(M=N),M.startsWith(\"blob:\")?M=\"\":M=M.substr(0,M.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1),aA=A=>{var j=new XMLHttpRequest;return j.open(\"GET\",A,!1),j.send(null),j.responseText},jA&&(hA=A=>{var j=new XMLHttpRequest;return j.open(\"GET\",A,!1),j.responseType=\"arraybuffer\",j.send(null),new Uint8Array(j.response)}),SA=(A,j,t)=>{if(RA(A)){var e=new XMLHttpRequest;e.open(\"GET\",A,!0),e.responseType=\"arraybuffer\",e.onload=()=>{if(e.status==200||e.status==0&&e.response){j(e.response);return}t()},e.onerror=t,e.send(null);return}fetch(A,{credentials:\"same-origin\"}).then(l=>l.ok?l.arrayBuffer():Promise.reject(new Error(l.status+\" : \"+l.url))).then(j,t)});var MA=r.print||console.log.bind(console),oA=r.printErr||console.error.bind(console);Object.assign(r,Gj),Gj=null,r.arguments&&(dj=r.arguments),r.thisProgram&&(CA=r.thisProgram),r.quit&&($j=r.quit);var KA;r.wasmBinary&&(KA=r.wasmBinary);var mA,pj=!1,o6,J,D,R,iA,H,m,Hj,cj;function qj(){var A=mA.buffer;r.HEAP8=J=new Int8Array(A),r.HEAP16=R=new Int16Array(A),r.HEAPU8=D=new Uint8Array(A),r.HEAPU16=iA=new Uint16Array(A),r.HEAP32=H=new Int32Array(A),r.HEAPU32=m=new Uint32Array(A),r.HEAPF32=Hj=new Float32Array(A),r.HEAPF64=cj=new Float64Array(A)}var hj=[],mj=[],Nj=[],i6=!1;function E6(){if(r.preRun)for(typeof r.preRun==\"function\"&&(r.preRun=[r.preRun]);r.preRun.length;)G6(r.preRun.shift());VA(hj)}function n6(){i6=!0,!r.noFSInit&&!k.init.initialized&&k.init(),k.ignorePermissions=!1,W.init(),VA(mj)}function s6(){if(r.postRun)for(typeof r.postRun==\"function\"&&(r.postRun=[r.postRun]);r.postRun.length;)$6(r.postRun.shift());VA(Nj)}function G6(A){hj.unshift(A)}function d6(A){mj.unshift(A)}function $6(A){Nj.unshift(A)}var tA=0,TA=null,EA=null;function Ke(A){return A}function XA(A){var j;tA++,(j=r.monitorRunDependencies)==null||j.call(r,tA)}function NA(A){var j;if(tA--,(j=r.monitorRunDependencies)==null||j.call(r,tA),tA==0&&(TA!==null&&(clearInterval(TA),TA=null),EA)){var t=EA;EA=null,t()}}function nA(A){var j;(j=r.onAbort)==null||j.call(r,A),A=\"Aborted(\"+A+\")\",oA(A),pj=!0,o6=1,A+=\". Build with -sASSERTIONS for more info.\";var t=new WebAssembly.RuntimeError(A);throw AA(t),t}var u6=\"data:application/octet-stream;base64,\",p6=A=>A.startsWith(u6),RA=A=>A.startsWith(\"file://\");function H6(){var A=\"libheif.wasm\";return p6(A)?A:a6(A)}var fA;function c6(A){if(A==fA&&KA)return new Uint8Array(KA);if(hA)return hA(A);throw'sync fetching of the wasm failed: you can preload it to Module[\"wasmBinary\"] manually, or emcc.py will do that for you when generating HTML (but not JS)'}function q6(A,j){var t,e=c6(A);t=new WebAssembly.Module(e);var l=new WebAssembly.Instance(t,j);return[l,t]}function h6(){return{a:fe}}function m6(){var A=h6();function j(e,l){return B=e.exports,mA=B.Q,qj(),Dj=B.T,d6(B.R),NA(\"wasm-instantiate\"),B}if(XA(\"wasm-instantiate\"),r.instantiateWasm)try{return r.instantiateWasm(A,j)}catch(e){oA(`Module.instantiateWasm callback failed with error: ${e}`),AA(e)}fA||(fA=H6());var t=q6(fA,A);return j(t[0])}var h,b,VA=A=>{for(;A.length>0;)A.shift()(r)},Te=r.noExitRuntime||!0,fj=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):void 0,kA=(A,j,t)=>{for(var e=j+t,l=j;A[l]&&!(l>=e);)++l;if(l-j>16&&A.buffer&&fj)return fj.decode(A.subarray(j,l));for(var _=\"\";j<l;){var a=A[j++];if(!(a&128)){_+=String.fromCharCode(a);continue}var o=A[j++]&63;if((a&224)==192){_+=String.fromCharCode((a&31)<<6|o);continue}var i=A[j++]&63;if((a&240)==224?a=(a&15)<<12|o<<6|i:a=(a&7)<<18|o<<12|i<<6|A[j++]&63,a<65536)_+=String.fromCharCode(a);else{var n=a-65536;_+=String.fromCharCode(55296|n>>10,56320|n&1023)}}return _},eA=(A,j)=>A?kA(D,A,j):\"\",N6=(A,j,t,e)=>{nA(`Assertion failed: ${eA(A)}, at: `+[j?eA(j):\"unknown filename\",t,e?eA(e):\"unknown function\"])};class f6{constructor(j){this.excPtr=j,this.ptr=j-24}set_type(j){m[this.ptr+4>>2]=j}get_type(){return m[this.ptr+4>>2]}set_destructor(j){m[this.ptr+8>>2]=j}get_destructor(){return m[this.ptr+8>>2]}set_caught(j){j=j?1:0,J[this.ptr+12]=j}get_caught(){return J[this.ptr+12]!=0}set_rethrown(j){j=j?1:0,J[this.ptr+13]=j}get_rethrown(){return J[this.ptr+13]!=0}init(j,t){this.set_adjusted_ptr(0),this.set_type(j),this.set_destructor(t)}set_adjusted_ptr(j){m[this.ptr+16>>2]=j}get_adjusted_ptr(){return m[this.ptr+16>>2]}get_exception_ptr(){var j=Fe(this.get_type());if(j)return m[this.excPtr>>2];var t=this.get_adjusted_ptr();return t!==0?t:this.excPtr}}var vj=0,v6=0,F6=(A,j,t)=>{var e=new f6(A);throw e.init(j,t),vj=A,v6++,vj};function vA(){var A=H[+w.varargs>>2];return w.varargs+=4,A}var lA=vA,I={isAbs:A=>A.charAt(0)===\"/\",splitPath:A=>{var j=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return j.exec(A).slice(1)},normalizeArray:(A,j)=>{for(var t=0,e=A.length-1;e>=0;e--){var l=A[e];l===\".\"?A.splice(e,1):l===\"..\"?(A.splice(e,1),t++):t&&(A.splice(e,1),t--)}if(j)for(;t;t--)A.unshift(\"..\");return A},normalize:A=>{var j=I.isAbs(A),t=A.substr(-1)===\"/\";return A=I.normalizeArray(A.split(\"/\").filter(e=>!!e),!j).join(\"/\"),!A&&!j&&(A=\".\"),A&&t&&(A+=\"/\"),(j?\"/\":\"\")+A},dirname:A=>{var j=I.splitPath(A),t=j[0],e=j[1];return!t&&!e?\".\":(e&&(e=e.substr(0,e.length-1)),t+e)},basename:A=>{if(A===\"/\")return\"/\";A=I.normalize(A),A=A.replace(/\\/$/,\"\");var j=A.lastIndexOf(\"/\");return j===-1?A:A.substr(j+1)},join:(...A)=>I.normalize(A.join(\"/\")),join2:(A,j)=>I.normalize(A+\"/\"+j)},I6=()=>{if(typeof crypto==\"object\"&&typeof crypto.getRandomValues==\"function\")return e=>crypto.getRandomValues(e);if(_A)try{var A=be(\"crypto\"),j=A.randomFillSync;if(j)return e=>A.randomFillSync(e);var t=A.randomBytes;return e=>(e.set(t(e.byteLength)),e)}catch{}nA(\"initRandomDevice\")},Fj=A=>(Fj=I6())(A),V={resolve:(...A)=>{for(var j=\"\",t=!1,e=A.length-1;e>=-1&&!t;e--){var l=e>=0?A[e]:k.cwd();if(typeof l!=\"string\")throw new TypeError(\"Arguments to path.resolve must be strings\");if(!l)return\"\";j=l+\"/\"+j,t=I.isAbs(l)}return j=I.normalizeArray(j.split(\"/\").filter(_=>!!_),!t).join(\"/\"),(t?\"/\":\"\")+j||\".\"},relative:(A,j)=>{A=V.resolve(A).substr(1),j=V.resolve(j).substr(1);function t(n){for(var s=0;s<n.length&&n[s]===\"\";s++);for(var u=n.length-1;u>=0&&n[u]===\"\";u--);return s>u?[]:n.slice(s,u-s+1)}for(var e=t(A.split(\"/\")),l=t(j.split(\"/\")),_=Math.min(e.length,l.length),a=_,o=0;o<_;o++)if(e[o]!==l[o]){a=o;break}for(var i=[],o=a;o<e.length;o++)i.push(\"..\");return i=i.concat(l.slice(a)),i.join(\"/\")}},UA=[],YA=A=>{for(var j=0,t=0;t<A.length;++t){var e=A.charCodeAt(t);e<=127?j++:e<=2047?j+=2:e>=55296&&e<=57343?(j+=4,++t):j+=3}return j},zA=(A,j,t,e)=>{if(!(e>0))return 0;for(var l=t,_=t+e-1,a=0;a<A.length;++a){var o=A.charCodeAt(a);if(o>=55296&&o<=57343){var i=A.charCodeAt(++a);o=65536+((o&1023)<<10)|i&1023}if(o<=127){if(t>=_)break;j[t++]=o}else if(o<=2047){if(t+1>=_)break;j[t++]=192|o>>6,j[t++]=128|o&63}else if(o<=65535){if(t+2>=_)break;j[t++]=224|o>>12,j[t++]=128|o>>6&63,j[t++]=128|o&63}else{if(t+3>=_)break;j[t++]=240|o>>18,j[t++]=128|o>>12&63,j[t++]=128|o>>6&63,j[t++]=128|o&63}}return j[t]=0,t-l};function FA(A,j,t){var e=t>0?t:YA(A)+1,l=new Array(e),_=zA(A,l,0,l.length);return j&&(l.length=_),l}var g6=()=>{if(!UA.length){var A=null;if(_A){var j=256,t=Buffer.alloc(j),e=0,l=process.stdin.fd;try{e=PA.readSync(l,t,0,j)}catch(_){if(_.toString().includes(\"EOF\"))e=0;else throw _}e>0&&(A=t.slice(0,e).toString(\"utf-8\"))}else typeof window!=\"undefined\"&&typeof window.prompt==\"function\"&&(A=window.prompt(\"Input: \"),A!==null&&(A+=`\n`));if(!A)return null;UA=FA(A,!0)}return UA.shift()},W={ttys:[],init(){},shutdown(){},register(A,j){W.ttys[A]={input:[],output:[],ops:j},k.registerDevice(A,W.stream_ops)},stream_ops:{open(A){var j=W.ttys[A.node.rdev];if(!j)throw new k.ErrnoError(43);A.tty=j,A.seekable=!1},close(A){A.tty.ops.fsync(A.tty)},fsync(A){A.tty.ops.fsync(A.tty)},read(A,j,t,e,l){if(!A.tty||!A.tty.ops.get_char)throw new k.ErrnoError(60);for(var _=0,a=0;a<e;a++){var o;try{o=A.tty.ops.get_char(A.tty)}catch{throw new k.ErrnoError(29)}if(o===void 0&&_===0)throw new k.ErrnoError(6);if(o==null)break;_++,j[t+a]=o}return _&&(A.node.timestamp=Date.now()),_},write(A,j,t,e,l){if(!A.tty||!A.tty.ops.put_char)throw new k.ErrnoError(60);try{for(var _=0;_<e;_++)A.tty.ops.put_char(A.tty,j[t+_])}catch{throw new k.ErrnoError(29)}return e&&(A.node.timestamp=Date.now()),_}},default_tty_ops:{get_char(A){return g6()},put_char(A,j){j===null||j===10?(MA(kA(A.output,0)),A.output=[]):j!=0&&A.output.push(j)},fsync(A){A.output&&A.output.length>0&&(MA(kA(A.output,0)),A.output=[])},ioctl_tcgets(A){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(A,j,t){return 0},ioctl_tiocgwinsz(A){return[24,80]}},default_tty1_ops:{put_char(A,j){j===null||j===10?(oA(kA(A.output,0)),A.output=[]):j!=0&&A.output.push(j)},fsync(A){A.output&&A.output.length>0&&(oA(kA(A.output,0)),A.output=[])}}},Ij=A=>{nA()},q={ops_table:null,mount(A){return q.createNode(null,\"/\",16895,0)},createNode(A,j,t,e){if(k.isBlkdev(t)||k.isFIFO(t))throw new k.ErrnoError(63);q.ops_table||(q.ops_table={dir:{node:{getattr:q.node_ops.getattr,setattr:q.node_ops.setattr,lookup:q.node_ops.lookup,mknod:q.node_ops.mknod,rename:q.node_ops.rename,unlink:q.node_ops.unlink,rmdir:q.node_ops.rmdir,readdir:q.node_ops.readdir,symlink:q.node_ops.symlink},stream:{llseek:q.stream_ops.llseek}},file:{node:{getattr:q.node_ops.getattr,setattr:q.node_ops.setattr},stream:{llseek:q.stream_ops.llseek,read:q.stream_ops.read,write:q.stream_ops.write,allocate:q.stream_ops.allocate,mmap:q.stream_ops.mmap,msync:q.stream_ops.msync}},link:{node:{getattr:q.node_ops.getattr,setattr:q.node_ops.setattr,readlink:q.node_ops.readlink},stream:{}},chrdev:{node:{getattr:q.node_ops.getattr,setattr:q.node_ops.setattr},stream:k.chrdev_stream_ops}});var l=k.createNode(A,j,t,e);return k.isDir(l.mode)?(l.node_ops=q.ops_table.dir.node,l.stream_ops=q.ops_table.dir.stream,l.contents={}):k.isFile(l.mode)?(l.node_ops=q.ops_table.file.node,l.stream_ops=q.ops_table.file.stream,l.usedBytes=0,l.contents=null):k.isLink(l.mode)?(l.node_ops=q.ops_table.link.node,l.stream_ops=q.ops_table.link.stream):k.isChrdev(l.mode)&&(l.node_ops=q.ops_table.chrdev.node,l.stream_ops=q.ops_table.chrdev.stream),l.timestamp=Date.now(),A&&(A.contents[j]=l,A.timestamp=l.timestamp),l},getFileDataAsTypedArray(A){return A.contents?A.contents.subarray?A.contents.subarray(0,A.usedBytes):new Uint8Array(A.contents):new Uint8Array(0)},expandFileStorage(A,j){var t=A.contents?A.contents.length:0;if(!(t>=j)){var e=1048576;j=Math.max(j,t*(t<e?2:1.125)>>>0),t!=0&&(j=Math.max(j,256));var l=A.contents;A.contents=new Uint8Array(j),A.usedBytes>0&&A.contents.set(l.subarray(0,A.usedBytes),0)}},resizeFileStorage(A,j){if(A.usedBytes!=j)if(j==0)A.contents=null,A.usedBytes=0;else{var t=A.contents;A.contents=new Uint8Array(j),t&&A.contents.set(t.subarray(0,Math.min(j,A.usedBytes))),A.usedBytes=j}},node_ops:{getattr(A){var j={};return j.dev=k.isChrdev(A.mode)?A.id:1,j.ino=A.id,j.mode=A.mode,j.nlink=1,j.uid=0,j.gid=0,j.rdev=A.rdev,k.isDir(A.mode)?j.size=4096:k.isFile(A.mode)?j.size=A.usedBytes:k.isLink(A.mode)?j.size=A.link.length:j.size=0,j.atime=new Date(A.timestamp),j.mtime=new Date(A.timestamp),j.ctime=new Date(A.timestamp),j.blksize=4096,j.blocks=Math.ceil(j.size/j.blksize),j},setattr(A,j){j.mode!==void 0&&(A.mode=j.mode),j.timestamp!==void 0&&(A.timestamp=j.timestamp),j.size!==void 0&&q.resizeFileStorage(A,j.size)},lookup(A,j){throw k.genericErrors[44]},mknod(A,j,t,e){return q.createNode(A,j,t,e)},rename(A,j,t){if(k.isDir(A.mode)){var e;try{e=k.lookupNode(j,t)}catch{}if(e)for(var l in e.contents)throw new k.ErrnoError(55)}delete A.parent.contents[A.name],A.parent.timestamp=Date.now(),A.name=t,j.contents[t]=A,j.timestamp=A.parent.timestamp},unlink(A,j){delete A.contents[j],A.timestamp=Date.now()},rmdir(A,j){var t=k.lookupNode(A,j);for(var e in t.contents)throw new k.ErrnoError(55);delete A.contents[j],A.timestamp=Date.now()},readdir(A){var j=[\".\",\"..\"];for(var t of Object.keys(A.contents))j.push(t);return j},symlink(A,j,t){var e=q.createNode(A,j,41471,0);return e.link=t,e},readlink(A){if(!k.isLink(A.mode))throw new k.ErrnoError(28);return A.link}},stream_ops:{read(A,j,t,e,l){var _=A.node.contents;if(l>=A.node.usedBytes)return 0;var a=Math.min(A.node.usedBytes-l,e);if(a>8&&_.subarray)j.set(_.subarray(l,l+a),t);else for(var o=0;o<a;o++)j[t+o]=_[l+o];return a},write(A,j,t,e,l,_){if(j.buffer===J.buffer&&(_=!1),!e)return 0;var a=A.node;if(a.timestamp=Date.now(),j.subarray&&(!a.contents||a.contents.subarray)){if(_)return a.contents=j.subarray(t,t+e),a.usedBytes=e,e;if(a.usedBytes===0&&l===0)return a.contents=j.slice(t,t+e),a.usedBytes=e,e;if(l+e<=a.usedBytes)return a.contents.set(j.subarray(t,t+e),l),e}if(q.expandFileStorage(a,l+e),a.contents.subarray&&j.subarray)a.contents.set(j.subarray(t,t+e),l);else for(var o=0;o<e;o++)a.contents[l+o]=j[t+o];return a.usedBytes=Math.max(a.usedBytes,l+e),e},llseek(A,j,t){var e=j;if(t===1?e+=A.position:t===2&&k.isFile(A.node.mode)&&(e+=A.node.usedBytes),e<0)throw new k.ErrnoError(28);return e},allocate(A,j,t){q.expandFileStorage(A.node,j+t),A.node.usedBytes=Math.max(A.node.usedBytes,j+t)},mmap(A,j,t,e,l){if(!k.isFile(A.node.mode))throw new k.ErrnoError(43);var _,a,o=A.node.contents;if(!(l&2)&&o.buffer===J.buffer)a=!1,_=o.byteOffset;else{if((t>0||t+j<o.length)&&(o.subarray?o=o.subarray(t,t+j):o=Array.prototype.slice.call(o,t,t+j)),a=!0,_=Ij(j),!_)throw new k.ErrnoError(48);J.set(o,_)}return{ptr:_,allocated:a}},msync(A,j,t,e,l){return q.stream_ops.write(A,j,0,e,t,!1),0}}},x6=(A,j,t,e)=>{var l=e?\"\":`al ${A}`;SA(A,_=>{j(new Uint8Array(_)),l&&NA(l)},_=>{if(t)t();else throw`Loading data file \"${A}\" failed.`}),l&&XA(l)},L6=(A,j,t,e,l,_)=>{k.createDataFile(A,j,t,e,l,_)},y6=r.preloadPlugins||[],O6=(A,j,t,e)=>{typeof Browser!=\"undefined\"&&Browser.init();var l=!1;return y6.forEach(_=>{l||_.canHandle(j)&&(_.handle(A,j,t,e),l=!0)}),l},J6=(A,j,t,e,l,_,a,o,i,n)=>{var s=j?V.resolve(I.join2(A,j)):A,u=`cp ${s}`;function d(G){function p(g){n==null||n(),o||L6(A,j,g,e,l,i),_==null||_(),NA(u)}O6(G,s,p,()=>{a==null||a(),NA(u)})||p(G)}XA(u),typeof t==\"string\"?x6(t,d,a):d(t)},b6=A=>{var j={r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090},t=j[A];if(typeof t==\"undefined\")throw new Error(`Unknown file open mode: ${A}`);return t},WA=(A,j)=>{var t=0;return A&&(t|=365),j&&(t|=146),t},k={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,ErrnoError:class{constructor(A){this.name=\"ErrnoError\",this.errno=A}},genericErrors:{},filesystems:null,syncFSRequests:0,FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(A){this.node=A}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(A){this.shared.flags=A}get position(){return this.shared.position}set position(A){this.shared.position=A}},FSNode:class{constructor(A,j,t,e){A||(A=this),this.parent=A,this.mount=A.mount,this.mounted=null,this.id=k.nextInode++,this.name=j,this.mode=t,this.node_ops={},this.stream_ops={},this.rdev=e,this.readMode=365,this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(A){A?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(A){A?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return k.isDir(this.mode)}get isDevice(){return k.isChrdev(this.mode)}},lookupPath(A,j={}){if(A=V.resolve(A),!A)return{path:\"\",node:null};var t={follow_mount:!0,recurse_count:0};if(j=Object.assign(t,j),j.recurse_count>8)throw new k.ErrnoError(32);for(var e=A.split(\"/\").filter(u=>!!u),l=k.root,_=\"/\",a=0;a<e.length;a++){var o=a===e.length-1;if(o&&j.parent)break;if(l=k.lookupNode(l,e[a]),_=I.join2(_,e[a]),k.isMountpoint(l)&&(!o||o&&j.follow_mount)&&(l=l.mounted.root),!o||j.follow)for(var i=0;k.isLink(l.mode);){var n=k.readlink(_);_=V.resolve(I.dirname(_),n);var s=k.lookupPath(_,{recurse_count:j.recurse_count+1});if(l=s.node,i++>40)throw new k.ErrnoError(32)}}return{path:_,node:l}},getPath(A){for(var j;;){if(k.isRoot(A)){var t=A.mount.mountpoint;return j?t[t.length-1]!==\"/\"?`${t}/${j}`:t+j:t}j=j?`${A.name}/${j}`:A.name,A=A.parent}},hashName(A,j){for(var t=0,e=0;e<j.length;e++)t=(t<<5)-t+j.charCodeAt(e)|0;return(A+t>>>0)%k.nameTable.length},hashAddNode(A){var j=k.hashName(A.parent.id,A.name);A.name_next=k.nameTable[j],k.nameTable[j]=A},hashRemoveNode(A){var j=k.hashName(A.parent.id,A.name);if(k.nameTable[j]===A)k.nameTable[j]=A.name_next;else for(var t=k.nameTable[j];t;){if(t.name_next===A){t.name_next=A.name_next;break}t=t.name_next}},lookupNode(A,j){var t=k.mayLookup(A);if(t)throw new k.ErrnoError(t);for(var e=k.hashName(A.id,j),l=k.nameTable[e];l;l=l.name_next){var _=l.name;if(l.parent.id===A.id&&_===j)return l}return k.lookup(A,j)},createNode(A,j,t,e){var l=new k.FSNode(A,j,t,e);return k.hashAddNode(l),l},destroyNode(A){k.hashRemoveNode(A)},isRoot(A){return A===A.parent},isMountpoint(A){return!!A.mounted},isFile(A){return(A&61440)===32768},isDir(A){return(A&61440)===16384},isLink(A){return(A&61440)===40960},isChrdev(A){return(A&61440)===8192},isBlkdev(A){return(A&61440)===24576},isFIFO(A){return(A&61440)===4096},isSocket(A){return(A&49152)===49152},flagsToPermissionString(A){var j=[\"r\",\"w\",\"rw\"][A&3];return A&512&&(j+=\"w\"),j},nodePermissions(A,j){return k.ignorePermissions?0:j.includes(\"r\")&&!(A.mode&292)||j.includes(\"w\")&&!(A.mode&146)||j.includes(\"x\")&&!(A.mode&73)?2:0},mayLookup(A){if(!k.isDir(A.mode))return 54;var j=k.nodePermissions(A,\"x\");return j||(A.node_ops.lookup?0:2)},mayCreate(A,j){try{var t=k.lookupNode(A,j);return 20}catch{}return k.nodePermissions(A,\"wx\")},mayDelete(A,j,t){var e;try{e=k.lookupNode(A,j)}catch(_){return _.errno}var l=k.nodePermissions(A,\"wx\");if(l)return l;if(t){if(!k.isDir(e.mode))return 54;if(k.isRoot(e)||k.getPath(e)===k.cwd())return 10}else if(k.isDir(e.mode))return 31;return 0},mayOpen(A,j){return A?k.isLink(A.mode)?32:k.isDir(A.mode)&&(k.flagsToPermissionString(j)!==\"r\"||j&512)?31:k.nodePermissions(A,k.flagsToPermissionString(j)):44},MAX_OPEN_FDS:4096,nextfd(){for(var A=0;A<=k.MAX_OPEN_FDS;A++)if(!k.streams[A])return A;throw new k.ErrnoError(33)},getStreamChecked(A){var j=k.getStream(A);if(!j)throw new k.ErrnoError(8);return j},getStream:A=>k.streams[A],createStream(A,j=-1){return A=Object.assign(new k.FSStream,A),j==-1&&(j=k.nextfd()),A.fd=j,k.streams[j]=A,A},closeStream(A){k.streams[A]=null},dupStream(A,j=-1){var t,e,l=k.createStream(A,j);return(e=(t=l.stream_ops)==null?void 0:t.dup)==null||e.call(t,l),l},chrdev_stream_ops:{open(A){var j,t,e=k.getDevice(A.node.rdev);A.stream_ops=e.stream_ops,(t=(j=A.stream_ops).open)==null||t.call(j,A)},llseek(){throw new k.ErrnoError(70)}},major:A=>A>>8,minor:A=>A&255,makedev:(A,j)=>A<<8|j,registerDevice(A,j){k.devices[A]={stream_ops:j}},getDevice:A=>k.devices[A],getMounts(A){for(var j=[],t=[A];t.length;){var e=t.pop();j.push(e),t.push(...e.mounts)}return j},syncfs(A,j){typeof A==\"function\"&&(j=A,A=!1),k.syncFSRequests++,k.syncFSRequests>1&&oA(`warning: ${k.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var t=k.getMounts(k.root.mount),e=0;function l(a){return k.syncFSRequests--,j(a)}function _(a){if(a)return _.errored?void 0:(_.errored=!0,l(a));++e>=t.length&&l(null)}t.forEach(a=>{if(!a.type.syncfs)return _(null);a.type.syncfs(a,A,_)})},mount(A,j,t){var e=t===\"/\",l=!t,_;if(e&&k.root)throw new k.ErrnoError(10);if(!e&&!l){var a=k.lookupPath(t,{follow_mount:!1});if(t=a.path,_=a.node,k.isMountpoint(_))throw new k.ErrnoError(10);if(!k.isDir(_.mode))throw new k.ErrnoError(54)}var o={type:A,opts:j,mountpoint:t,mounts:[]},i=A.mount(o);return i.mount=o,o.root=i,e?k.root=i:_&&(_.mounted=o,_.mount&&_.mount.mounts.push(o)),i},unmount(A){var j=k.lookupPath(A,{follow_mount:!1});if(!k.isMountpoint(j.node))throw new k.ErrnoError(28);var t=j.node,e=t.mounted,l=k.getMounts(e);Object.keys(k.nameTable).forEach(a=>{for(var o=k.nameTable[a];o;){var i=o.name_next;l.includes(o.mount)&&k.destroyNode(o),o=i}}),t.mounted=null;var _=t.mount.mounts.indexOf(e);t.mount.mounts.splice(_,1)},lookup(A,j){return A.node_ops.lookup(A,j)},mknod(A,j,t){var e=k.lookupPath(A,{parent:!0}),l=e.node,_=I.basename(A);if(!_||_===\".\"||_===\"..\")throw new k.ErrnoError(28);var a=k.mayCreate(l,_);if(a)throw new k.ErrnoError(a);if(!l.node_ops.mknod)throw new k.ErrnoError(63);return l.node_ops.mknod(l,_,j,t)},create(A,j){return j=j!==void 0?j:438,j&=4095,j|=32768,k.mknod(A,j,0)},mkdir(A,j){return j=j!==void 0?j:511,j&=1023,j|=16384,k.mknod(A,j,0)},mkdirTree(A,j){for(var t=A.split(\"/\"),e=\"\",l=0;l<t.length;++l)if(t[l]){e+=\"/\"+t[l];try{k.mkdir(e,j)}catch(_){if(_.errno!=20)throw _}}},mkdev(A,j,t){return typeof t==\"undefined\"&&(t=j,j=438),j|=8192,k.mknod(A,j,t)},symlink(A,j){if(!V.resolve(A))throw new k.ErrnoError(44);var t=k.lookupPath(j,{parent:!0}),e=t.node;if(!e)throw new k.ErrnoError(44);var l=I.basename(j),_=k.mayCreate(e,l);if(_)throw new k.ErrnoError(_);if(!e.node_ops.symlink)throw new k.ErrnoError(63);return e.node_ops.symlink(e,l,A)},rename(A,j){var t=I.dirname(A),e=I.dirname(j),l=I.basename(A),_=I.basename(j),a,o,i;if(a=k.lookupPath(A,{parent:!0}),o=a.node,a=k.lookupPath(j,{parent:!0}),i=a.node,!o||!i)throw new k.ErrnoError(44);if(o.mount!==i.mount)throw new k.ErrnoError(75);var n=k.lookupNode(o,l),s=V.relative(A,e);if(s.charAt(0)!==\".\")throw new k.ErrnoError(28);if(s=V.relative(j,t),s.charAt(0)!==\".\")throw new k.ErrnoError(55);var u;try{u=k.lookupNode(i,_)}catch{}if(n!==u){var d=k.isDir(n.mode),G=k.mayDelete(o,l,d);if(G)throw new k.ErrnoError(G);if(G=u?k.mayDelete(i,_,d):k.mayCreate(i,_),G)throw new k.ErrnoError(G);if(!o.node_ops.rename)throw new k.ErrnoError(63);if(k.isMountpoint(n)||u&&k.isMountpoint(u))throw new k.ErrnoError(10);if(i!==o&&(G=k.nodePermissions(o,\"w\"),G))throw new k.ErrnoError(G);k.hashRemoveNode(n);try{o.node_ops.rename(n,i,_),n.parent=i}catch(p){throw p}finally{k.hashAddNode(n)}}},rmdir(A){var j=k.lookupPath(A,{parent:!0}),t=j.node,e=I.basename(A),l=k.lookupNode(t,e),_=k.mayDelete(t,e,!0);if(_)throw new k.ErrnoError(_);if(!t.node_ops.rmdir)throw new k.ErrnoError(63);if(k.isMountpoint(l))throw new k.ErrnoError(10);t.node_ops.rmdir(t,e),k.destroyNode(l)},readdir(A){var j=k.lookupPath(A,{follow:!0}),t=j.node;if(!t.node_ops.readdir)throw new k.ErrnoError(54);return t.node_ops.readdir(t)},unlink(A){var j=k.lookupPath(A,{parent:!0}),t=j.node;if(!t)throw new k.ErrnoError(44);var e=I.basename(A),l=k.lookupNode(t,e),_=k.mayDelete(t,e,!1);if(_)throw new k.ErrnoError(_);if(!t.node_ops.unlink)throw new k.ErrnoError(63);if(k.isMountpoint(l))throw new k.ErrnoError(10);t.node_ops.unlink(t,e),k.destroyNode(l)},readlink(A){var j=k.lookupPath(A),t=j.node;if(!t)throw new k.ErrnoError(44);if(!t.node_ops.readlink)throw new k.ErrnoError(28);return V.resolve(k.getPath(t.parent),t.node_ops.readlink(t))},stat(A,j){var t=k.lookupPath(A,{follow:!j}),e=t.node;if(!e)throw new k.ErrnoError(44);if(!e.node_ops.getattr)throw new k.ErrnoError(63);return e.node_ops.getattr(e)},lstat(A){return k.stat(A,!0)},chmod(A,j,t){var e;if(typeof A==\"string\"){var l=k.lookupPath(A,{follow:!t});e=l.node}else e=A;if(!e.node_ops.setattr)throw new k.ErrnoError(63);e.node_ops.setattr(e,{mode:j&4095|e.mode&-4096,timestamp:Date.now()})},lchmod(A,j){k.chmod(A,j,!0)},fchmod(A,j){var t=k.getStreamChecked(A);k.chmod(t.node,j)},chown(A,j,t,e){var l;if(typeof A==\"string\"){var _=k.lookupPath(A,{follow:!e});l=_.node}else l=A;if(!l.node_ops.setattr)throw new k.ErrnoError(63);l.node_ops.setattr(l,{timestamp:Date.now()})},lchown(A,j,t){k.chown(A,j,t,!0)},fchown(A,j,t){var e=k.getStreamChecked(A);k.chown(e.node,j,t)},truncate(A,j){if(j<0)throw new k.ErrnoError(28);var t;if(typeof A==\"string\"){var e=k.lookupPath(A,{follow:!0});t=e.node}else t=A;if(!t.node_ops.setattr)throw new k.ErrnoError(63);if(k.isDir(t.mode))throw new k.ErrnoError(31);if(!k.isFile(t.mode))throw new k.ErrnoError(28);var l=k.nodePermissions(t,\"w\");if(l)throw new k.ErrnoError(l);t.node_ops.setattr(t,{size:j,timestamp:Date.now()})},ftruncate(A,j){var t=k.getStreamChecked(A);if(!(t.flags&2097155))throw new k.ErrnoError(28);k.truncate(t.node,j)},utime(A,j,t){var e=k.lookupPath(A,{follow:!0}),l=e.node;l.node_ops.setattr(l,{timestamp:Math.max(j,t)})},open(A,j,t){if(A===\"\")throw new k.ErrnoError(44);j=typeof j==\"string\"?b6(j):j,j&64?(t=typeof t==\"undefined\"?438:t,t=t&4095|32768):t=0;var e;if(typeof A==\"object\")e=A;else{A=I.normalize(A);try{var l=k.lookupPath(A,{follow:!(j&131072)});e=l.node}catch{}}var _=!1;if(j&64)if(e){if(j&128)throw new k.ErrnoError(20)}else e=k.mknod(A,t,0),_=!0;if(!e)throw new k.ErrnoError(44);if(k.isChrdev(e.mode)&&(j&=-513),j&65536&&!k.isDir(e.mode))throw new k.ErrnoError(54);if(!_){var a=k.mayOpen(e,j);if(a)throw new k.ErrnoError(a)}j&512&&!_&&k.truncate(e,0),j&=-131713;var o=k.createStream({node:e,path:k.getPath(e),flags:j,seekable:!0,position:0,stream_ops:e.stream_ops,ungotten:[],error:!1});return o.stream_ops.open&&o.stream_ops.open(o),r.logReadFiles&&!(j&1)&&(k.readFiles||(k.readFiles={}),A in k.readFiles||(k.readFiles[A]=1)),o},close(A){if(k.isClosed(A))throw new k.ErrnoError(8);A.getdents&&(A.getdents=null);try{A.stream_ops.close&&A.stream_ops.close(A)}catch(j){throw j}finally{k.closeStream(A.fd)}A.fd=null},isClosed(A){return A.fd===null},llseek(A,j,t){if(k.isClosed(A))throw new k.ErrnoError(8);if(!A.seekable||!A.stream_ops.llseek)throw new k.ErrnoError(70);if(t!=0&&t!=1&&t!=2)throw new k.ErrnoError(28);return A.position=A.stream_ops.llseek(A,j,t),A.ungotten=[],A.position},read(A,j,t,e,l){if(e<0||l<0)throw new k.ErrnoError(28);if(k.isClosed(A))throw new k.ErrnoError(8);if((A.flags&2097155)===1)throw new k.ErrnoError(8);if(k.isDir(A.node.mode))throw new k.ErrnoError(31);if(!A.stream_ops.read)throw new k.ErrnoError(28);var _=typeof l!=\"undefined\";if(!_)l=A.position;else if(!A.seekable)throw new k.ErrnoError(70);var a=A.stream_ops.read(A,j,t,e,l);return _||(A.position+=a),a},write(A,j,t,e,l,_){if(e<0||l<0)throw new k.ErrnoError(28);if(k.isClosed(A))throw new k.ErrnoError(8);if(!(A.flags&2097155))throw new k.ErrnoError(8);if(k.isDir(A.node.mode))throw new k.ErrnoError(31);if(!A.stream_ops.write)throw new k.ErrnoError(28);A.seekable&&A.flags&1024&&k.llseek(A,0,2);var a=typeof l!=\"undefined\";if(!a)l=A.position;else if(!A.seekable)throw new k.ErrnoError(70);var o=A.stream_ops.write(A,j,t,e,l,_);return a||(A.position+=o),o},allocate(A,j,t){if(k.isClosed(A))throw new k.ErrnoError(8);if(j<0||t<=0)throw new k.ErrnoError(28);if(!(A.flags&2097155))throw new k.ErrnoError(8);if(!k.isFile(A.node.mode)&&!k.isDir(A.node.mode))throw new k.ErrnoError(43);if(!A.stream_ops.allocate)throw new k.ErrnoError(138);A.stream_ops.allocate(A,j,t)},mmap(A,j,t,e,l){if(e&2&&!(l&2)&&(A.flags&2097155)!==2)throw new k.ErrnoError(2);if((A.flags&2097155)===1)throw new k.ErrnoError(2);if(!A.stream_ops.mmap)throw new k.ErrnoError(43);return A.stream_ops.mmap(A,j,t,e,l)},msync(A,j,t,e,l){return A.stream_ops.msync?A.stream_ops.msync(A,j,t,e,l):0},ioctl(A,j,t){if(!A.stream_ops.ioctl)throw new k.ErrnoError(59);return A.stream_ops.ioctl(A,j,t)},readFile(A,j={}){if(j.flags=j.flags||0,j.encoding=j.encoding||\"binary\",j.encoding!==\"utf8\"&&j.encoding!==\"binary\")throw new Error(`Invalid encoding type \"${j.encoding}\"`);var t,e=k.open(A,j.flags),l=k.stat(A),_=l.size,a=new Uint8Array(_);return k.read(e,a,0,_,0),j.encoding===\"utf8\"?t=kA(a,0):j.encoding===\"binary\"&&(t=a),k.close(e),t},writeFile(A,j,t={}){t.flags=t.flags||577;var e=k.open(A,t.flags,t.mode);if(typeof j==\"string\"){var l=new Uint8Array(YA(j)+1),_=zA(j,l,0,l.length);k.write(e,l,0,_,void 0,t.canOwn)}else if(ArrayBuffer.isView(j))k.write(e,j,0,j.byteLength,void 0,t.canOwn);else throw new Error(\"Unsupported data type\");k.close(e)},cwd:()=>k.currentPath,chdir(A){var j=k.lookupPath(A,{follow:!0});if(j.node===null)throw new k.ErrnoError(44);if(!k.isDir(j.node.mode))throw new k.ErrnoError(54);var t=k.nodePermissions(j.node,\"x\");if(t)throw new k.ErrnoError(t);k.currentPath=j.path},createDefaultDirectories(){k.mkdir(\"/tmp\"),k.mkdir(\"/home\"),k.mkdir(\"/home/web_user\")},createDefaultDevices(){k.mkdir(\"/dev\"),k.registerDevice(k.makedev(1,3),{read:()=>0,write:(e,l,_,a,o)=>a}),k.mkdev(\"/dev/null\",k.makedev(1,3)),W.register(k.makedev(5,0),W.default_tty_ops),W.register(k.makedev(6,0),W.default_tty1_ops),k.mkdev(\"/dev/tty\",k.makedev(5,0)),k.mkdev(\"/dev/tty1\",k.makedev(6,0));var A=new Uint8Array(1024),j=0,t=()=>(j===0&&(j=Fj(A).byteLength),A[--j]);k.createDevice(\"/dev\",\"random\",t),k.createDevice(\"/dev\",\"urandom\",t),k.mkdir(\"/dev/shm\"),k.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories(){k.mkdir(\"/proc\");var A=k.mkdir(\"/proc/self\");k.mkdir(\"/proc/self/fd\"),k.mount({mount(){var j=k.createNode(A,\"fd\",16895,73);return j.node_ops={lookup(t,e){var l=+e,_=k.getStreamChecked(l),a={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:()=>_.path}};return a.parent=a,a}},j}},{},\"/proc/self/fd\")},createStandardStreams(){r.stdin?k.createDevice(\"/dev\",\"stdin\",r.stdin):k.symlink(\"/dev/tty\",\"/dev/stdin\"),r.stdout?k.createDevice(\"/dev\",\"stdout\",null,r.stdout):k.symlink(\"/dev/tty\",\"/dev/stdout\"),r.stderr?k.createDevice(\"/dev\",\"stderr\",null,r.stderr):k.symlink(\"/dev/tty1\",\"/dev/stderr\");var A=k.open(\"/dev/stdin\",0),j=k.open(\"/dev/stdout\",1),t=k.open(\"/dev/stderr\",1)},staticInit(){[44].forEach(A=>{k.genericErrors[A]=new k.ErrnoError(A),k.genericErrors[A].stack=\"<generic error, no stack>\"}),k.nameTable=new Array(4096),k.mount(q,{},\"/\"),k.createDefaultDirectories(),k.createDefaultDevices(),k.createSpecialDirectories(),k.filesystems={MEMFS:q}},init(A,j,t){k.init.initialized=!0,r.stdin=A||r.stdin,r.stdout=j||r.stdout,r.stderr=t||r.stderr,k.createStandardStreams()},quit(){k.init.initialized=!1;for(var A=0;A<k.streams.length;A++){var j=k.streams[A];j&&k.close(j)}},findObject(A,j){var t=k.analyzePath(A,j);return t.exists?t.object:null},analyzePath(A,j){try{var t=k.lookupPath(A,{follow:!j});A=t.path}catch{}var e={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var t=k.lookupPath(A,{parent:!0});e.parentExists=!0,e.parentPath=t.path,e.parentObject=t.node,e.name=I.basename(A),t=k.lookupPath(A,{follow:!j}),e.exists=!0,e.path=t.path,e.object=t.node,e.name=t.node.name,e.isRoot=t.path===\"/\"}catch(l){e.error=l.errno}return e},createPath(A,j,t,e){A=typeof A==\"string\"?A:k.getPath(A);for(var l=j.split(\"/\").reverse();l.length;){var _=l.pop();if(_){var a=I.join2(A,_);try{k.mkdir(a)}catch{}A=a}}return a},createFile(A,j,t,e,l){var _=I.join2(typeof A==\"string\"?A:k.getPath(A),j),a=WA(e,l);return k.create(_,a)},createDataFile(A,j,t,e,l,_){var a=j;A&&(A=typeof A==\"string\"?A:k.getPath(A),a=j?I.join2(A,j):A);var o=WA(e,l),i=k.create(a,o);if(t){if(typeof t==\"string\"){for(var n=new Array(t.length),s=0,u=t.length;s<u;++s)n[s]=t.charCodeAt(s);t=n}k.chmod(i,o|146);var d=k.open(i,577);k.write(d,t,0,t.length,0,_),k.close(d),k.chmod(i,o)}},createDevice(A,j,t,e){var l=I.join2(typeof A==\"string\"?A:k.getPath(A),j),_=WA(!!t,!!e);k.createDevice.major||(k.createDevice.major=64);var a=k.makedev(k.createDevice.major++,0);return k.registerDevice(a,{open(o){o.seekable=!1},close(o){var i;(i=e==null?void 0:e.buffer)!=null&&i.length&&e(10)},read(o,i,n,s,u){for(var d=0,G=0;G<s;G++){var p;try{p=t()}catch{throw new k.ErrnoError(29)}if(p===void 0&&d===0)throw new k.ErrnoError(6);if(p==null)break;d++,i[n+G]=p}return d&&(o.node.timestamp=Date.now()),d},write(o,i,n,s,u){for(var d=0;d<s;d++)try{e(i[n+d])}catch{throw new k.ErrnoError(29)}return s&&(o.node.timestamp=Date.now()),d}}),k.mkdev(l,_,a)},forceLoadFile(A){if(A.isDevice||A.isFolder||A.link||A.contents)return!0;if(typeof XMLHttpRequest!=\"undefined\")throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");if(aA)try{A.contents=FA(aA(A.url),!0),A.usedBytes=A.contents.length}catch{throw new k.ErrnoError(29)}else throw new Error(\"Cannot load without read() or XMLHttpRequest.\")},createLazyFile(A,j,t,e,l){class _{constructor(){this.lengthKnown=!1,this.chunks=[]}get(G){if(!(G>this.length-1||G<0)){var p=G%this.chunkSize,g=G/this.chunkSize|0;return this.getter(g)[p]}}setDataGetter(G){this.getter=G}cacheLength(){var G=new XMLHttpRequest;if(G.open(\"HEAD\",t,!1),G.send(null),!(G.status>=200&&G.status<300||G.status===304))throw new Error(\"Couldn't load \"+t+\". Status: \"+G.status);var p=Number(G.getResponseHeader(\"Content-length\")),g,O=(g=G.getResponseHeader(\"Accept-Ranges\"))&&g===\"bytes\",F=(g=G.getResponseHeader(\"Content-Encoding\"))&&g===\"gzip\",E=1024*1024;O||(E=p);var $=(c,S)=>{if(c>S)throw new Error(\"invalid range (\"+c+\", \"+S+\") or no bytes requested!\");if(S>p-1)throw new Error(\"only \"+p+\" bytes available! programmer error!\");var L=new XMLHttpRequest;if(L.open(\"GET\",t,!1),p!==E&&L.setRequestHeader(\"Range\",\"bytes=\"+c+\"-\"+S),L.responseType=\"arraybuffer\",L.overrideMimeType&&L.overrideMimeType(\"text/plain; charset=x-user-defined\"),L.send(null),!(L.status>=200&&L.status<300||L.status===304))throw new Error(\"Couldn't load \"+t+\". Status: \"+L.status);return L.response!==void 0?new Uint8Array(L.response||[]):FA(L.responseText||\"\",!0)},x=this;x.setDataGetter(c=>{var S=c*E,L=(c+1)*E-1;if(L=Math.min(L,p-1),typeof x.chunks[c]==\"undefined\"&&(x.chunks[c]=$(S,L)),typeof x.chunks[c]==\"undefined\")throw new Error(\"doXHR failed!\");return x.chunks[c]}),(F||!p)&&(E=p=1,p=this.getter(0).length,E=p,MA(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=p,this._chunkSize=E,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(typeof XMLHttpRequest!=\"undefined\"){if(!jA)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var a=new _,o={isDevice:!1,contents:a}}else var o={isDevice:!1,url:t};var i=k.createFile(A,j,o,e,l);o.contents?i.contents=o.contents:o.url&&(i.contents=null,i.url=o.url),Object.defineProperties(i,{usedBytes:{get:function(){return this.contents.length}}});var n={},s=Object.keys(i.stream_ops);s.forEach(d=>{var G=i.stream_ops[d];n[d]=(...p)=>(k.forceLoadFile(i),G(...p))});function u(d,G,p,g,O){var F=d.node.contents;if(O>=F.length)return 0;var E=Math.min(F.length-O,g);if(F.slice)for(var $=0;$<E;$++)G[p+$]=F[O+$];else for(var $=0;$<E;$++)G[p+$]=F.get(O+$);return E}return n.read=(d,G,p,g,O)=>(k.forceLoadFile(i),u(d,G,p,g,O)),n.mmap=(d,G,p,g,O)=>{k.forceLoadFile(i);var F=Ij(G);if(!F)throw new k.ErrnoError(48);return u(d,J,F,G,p),{ptr:F,allocated:!0}},i.stream_ops=n,i}},w={DEFAULT_POLLMASK:5,calculateAt(A,j,t){if(I.isAbs(j))return j;var e;if(A===-100)e=k.cwd();else{var l=w.getStreamFromFD(A);e=l.path}if(j.length==0){if(!t)throw new k.ErrnoError(44);return e}return I.join2(e,j)},doStat(A,j,t){var e=A(j);H[t>>2]=e.dev,H[t+4>>2]=e.mode,m[t+8>>2]=e.nlink,H[t+12>>2]=e.uid,H[t+16>>2]=e.gid,H[t+20>>2]=e.rdev,b=[e.size>>>0,(h=e.size,+Math.abs(h)>=1?h>0?+Math.floor(h/4294967296)>>>0:~~+Math.ceil((h-+(~~h>>>0))/4294967296)>>>0:0)],H[t+24>>2]=b[0],H[t+28>>2]=b[1],H[t+32>>2]=4096,H[t+36>>2]=e.blocks;var l=e.atime.getTime(),_=e.mtime.getTime(),a=e.ctime.getTime();return b=[Math.floor(l/1e3)>>>0,(h=Math.floor(l/1e3),+Math.abs(h)>=1?h>0?+Math.floor(h/4294967296)>>>0:~~+Math.ceil((h-+(~~h>>>0))/4294967296)>>>0:0)],H[t+40>>2]=b[0],H[t+44>>2]=b[1],m[t+48>>2]=l%1e3*1e3,b=[Math.floor(_/1e3)>>>0,(h=Math.floor(_/1e3),+Math.abs(h)>=1?h>0?+Math.floor(h/4294967296)>>>0:~~+Math.ceil((h-+(~~h>>>0))/4294967296)>>>0:0)],H[t+56>>2]=b[0],H[t+60>>2]=b[1],m[t+64>>2]=_%1e3*1e3,b=[Math.floor(a/1e3)>>>0,(h=Math.floor(a/1e3),+Math.abs(h)>=1?h>0?+Math.floor(h/4294967296)>>>0:~~+Math.ceil((h-+(~~h>>>0))/4294967296)>>>0:0)],H[t+72>>2]=b[0],H[t+76>>2]=b[1],m[t+80>>2]=a%1e3*1e3,b=[e.ino>>>0,(h=e.ino,+Math.abs(h)>=1?h>0?+Math.floor(h/4294967296)>>>0:~~+Math.ceil((h-+(~~h>>>0))/4294967296)>>>0:0)],H[t+88>>2]=b[0],H[t+92>>2]=b[1],0},doMsync(A,j,t,e,l){if(!k.isFile(j.node.mode))throw new k.ErrnoError(43);if(e&2)return 0;var _=D.slice(A,A+t);k.msync(j,_,l,t,e)},getStreamFromFD(A){var j=k.getStreamChecked(A);return j},varargs:void 0,getStr(A){var j=eA(A);return j}};function D6(A,j,t){w.varargs=t;try{var e=w.getStreamFromFD(A);switch(j){case 0:{var l=vA();if(l<0)return-28;for(;k.streams[l];)l++;var _;return _=k.dupStream(e,l),_.fd}case 1:case 2:return 0;case 3:return e.flags;case 4:{var l=vA();return e.flags|=l,0}case 12:{var l=lA(),a=0;return R[l+a>>1]=2,0}case 13:case 14:return 0}return-28}catch(o){if(typeof k==\"undefined\"||o.name!==\"ErrnoError\")throw o;return-o.errno}}function w6(A,j,t){w.varargs=t;try{var e=w.getStreamFromFD(A);switch(j){case 21509:return e.tty?0:-59;case 21505:{if(!e.tty)return-59;if(e.tty.ops.ioctl_tcgets){var l=e.tty.ops.ioctl_tcgets(e),_=lA();H[_>>2]=l.c_iflag||0,H[_+4>>2]=l.c_oflag||0,H[_+8>>2]=l.c_cflag||0,H[_+12>>2]=l.c_lflag||0;for(var a=0;a<32;a++)J[_+a+17]=l.c_cc[a]||0;return 0}return 0}case 21510:case 21511:case 21512:return e.tty?0:-59;case 21506:case 21507:case 21508:{if(!e.tty)return-59;if(e.tty.ops.ioctl_tcsets){for(var _=lA(),o=H[_>>2],i=H[_+4>>2],n=H[_+8>>2],s=H[_+12>>2],u=[],a=0;a<32;a++)u.push(J[_+a+17]);return e.tty.ops.ioctl_tcsets(e.tty,j,{c_iflag:o,c_oflag:i,c_cflag:n,c_lflag:s,c_cc:u})}return 0}case 21519:{if(!e.tty)return-59;var _=lA();return H[_>>2]=0,0}case 21520:return e.tty?-28:-59;case 21531:{var _=lA();return k.ioctl(e,j,_)}case 21523:{if(!e.tty)return-59;if(e.tty.ops.ioctl_tiocgwinsz){var d=e.tty.ops.ioctl_tiocgwinsz(e.tty),_=lA();R[_>>1]=d[0],R[_+2>>1]=d[1]}return 0}case 21524:return e.tty?0:-59;case 21515:return e.tty?0:-59;default:return-28}}catch(G){if(typeof k==\"undefined\"||G.name!==\"ErrnoError\")throw G;return-G.errno}}function C6(A,j,t,e){w.varargs=e;try{j=w.getStr(j),j=w.calculateAt(A,j);var l=e?vA():0;return k.open(j,t,l).fd}catch(_){if(typeof k==\"undefined\"||_.name!==\"ErrnoError\")throw _;return-_.errno}}function S6(A,j,t){try{return j=w.getStr(j),j=w.calculateAt(A,j),t===0?k.unlink(j):t===512?k.rmdir(j):nA(\"Invalid flags passed to unlinkat\"),0}catch(e){if(typeof k==\"undefined\"||e.name!==\"ErrnoError\")throw e;return-e.errno}}var P6=()=>{nA(\"\")},IA={},ZA=A=>{for(;A.length;){var j=A.pop(),t=A.pop();t(j)}};function sA(A){return this.fromWireType(m[A>>2])}var BA={},rA={},gA={},gj,xA=A=>{throw new gj(A)},QA=(A,j,t)=>{A.forEach(function(o){gA[o]=j});function e(o){var i=t(o);i.length!==A.length&&xA(\"Mismatched type converter count\");for(var n=0;n<A.length;++n)T(A[n],i[n])}var l=new Array(j.length),_=[],a=0;j.forEach((o,i)=>{rA.hasOwnProperty(o)?l[i]=rA[o]:(_.push(o),BA.hasOwnProperty(o)||(BA[o]=[]),BA[o].push(()=>{l[i]=rA[o],++a,a===_.length&&e(l)}))}),_.length===0&&e(l)},M6=A=>{var j=IA[A];delete IA[A];var t=j.rawConstructor,e=j.rawDestructor,l=j.fields,_=l.map(a=>a.getterReturnType).concat(l.map(a=>a.setterArgumentType));QA([A],_,a=>{var o={};return l.forEach((i,n)=>{var s=i.fieldName,u=a[n],d=i.getter,G=i.getterContext,p=a[n+l.length],g=i.setter,O=i.setterContext;o[s]={read:F=>u.fromWireType(d(G,F)),write:(F,E)=>{var $=[];g(O,F,p.toWireType($,E)),ZA($)}}}),[{name:j.name,fromWireType:i=>{var n={};for(var s in o)n[s]=o[s].read(i);return e(i),n},toWireType:(i,n)=>{for(var s in o)if(!(s in n))throw new TypeError(`Missing field: \"${s}\"`);var u=t();for(s in o)o[s].write(u,n[s]);return i!==null&&i.push(e,u),u},argPackAdvance:X,readValueFromPointer:sA,destructorFunction:e}]})},K6=(A,j,t,e,l)=>{},T6=()=>{for(var A=new Array(256),j=0;j<256;++j)A[j]=String.fromCharCode(j);xj=A},xj,C=A=>{for(var j=\"\",t=A;D[t];)j+=xj[D[t++]];return j},GA,v=A=>{throw new GA(A)};function X6(A,j,t={}){var e=j.name;if(A||v(`type \"${e}\" must have a positive integer typeid pointer`),rA.hasOwnProperty(A)){if(t.ignoreDuplicateRegistrations)return;v(`Cannot register type '${e}' twice`)}if(rA[A]=j,delete gA[A],BA.hasOwnProperty(A)){var l=BA[A];delete BA[A],l.forEach(_=>_())}}function T(A,j,t={}){if(!(\"argPackAdvance\"in j))throw new TypeError(\"registerType registeredInstance requires argPackAdvance\");return X6(A,j,t)}var X=8,R6=(A,j,t,e)=>{j=C(j),T(A,{name:j,fromWireType:function(l){return!!l},toWireType:function(l,_){return _?t:e},argPackAdvance:X,readValueFromPointer:function(l){return this.fromWireType(D[l])},destructorFunction:null})},V6=A=>({count:A.count,deleteScheduled:A.deleteScheduled,preservePointerOnDelete:A.preservePointerOnDelete,ptr:A.ptr,ptrType:A.ptrType,smartPtr:A.smartPtr,smartPtrType:A.smartPtrType}),Aj=A=>{function j(t){return t.$$.ptrType.registeredClass.name}v(j(A)+\" instance already deleted\")},jj=!1,Lj=A=>{},U6=A=>{A.smartPtr?A.smartPtrType.rawDestructor(A.smartPtr):A.ptrType.registeredClass.rawDestructor(A.ptr)},yj=A=>{A.count.value-=1;var j=A.count.value===0;j&&U6(A)},Oj=(A,j,t)=>{if(j===t)return A;if(t.baseClass===void 0)return null;var e=Oj(A,j,t.baseClass);return e===null?null:t.downcast(e)},Jj={},Y6=()=>Object.keys(uA).length,z6=()=>{var A=[];for(var j in uA)uA.hasOwnProperty(j)&&A.push(uA[j]);return A},dA=[],tj=()=>{for(;dA.length;){var A=dA.pop();A.$$.deleteScheduled=!1,A.delete()}},$A,W6=A=>{$A=A,dA.length&&$A&&$A(tj)},Z6=()=>{r.getInheritedInstanceCount=Y6,r.getLiveInheritedInstances=z6,r.flushPendingDeletes=tj,r.setDelayFunction=W6},uA={},Q6=(A,j)=>{for(j===void 0&&v(\"ptr should not be undefined\");A.baseClass;)j=A.upcast(j),A=A.baseClass;return j},At=(A,j)=>(j=Q6(A,j),uA[j]),LA=(A,j)=>{(!j.ptrType||!j.ptr)&&xA(\"makeClassHandle requires ptr and ptrType\");var t=!!j.smartPtrType,e=!!j.smartPtr;return t!==e&&xA(\"Both smartPtrType and smartPtr must be specified\"),j.count={value:1},pA(Object.create(A,{$$:{value:j,writable:!0}}))};function jt(A){var j=this.getPointee(A);if(!j)return this.destructor(A),null;var t=At(this.registeredClass,j);if(t!==void 0){if(t.$$.count.value===0)return t.$$.ptr=j,t.$$.smartPtr=A,t.clone();var e=t.clone();return this.destructor(A),e}function l(){return this.isSmartPointer?LA(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:j,smartPtrType:this,smartPtr:A}):LA(this.registeredClass.instancePrototype,{ptrType:this,ptr:A})}var _=this.registeredClass.getActualType(j),a=Jj[_];if(!a)return l.call(this);var o;this.isConst?o=a.constPointerType:o=a.pointerType;var i=Oj(j,this.registeredClass,o.registeredClass);return i===null?l.call(this):this.isSmartPointer?LA(o.registeredClass.instancePrototype,{ptrType:o,ptr:i,smartPtrType:this,smartPtr:A}):LA(o.registeredClass.instancePrototype,{ptrType:o,ptr:i})}var pA=A=>typeof FinalizationRegistry==\"undefined\"?(pA=j=>j,A):(jj=new FinalizationRegistry(j=>{yj(j.$$)}),pA=j=>{var t=j.$$,e=!!t.smartPtr;if(e){var l={$$:t};jj.register(j,l,j)}return j},Lj=j=>jj.unregister(j),pA(A)),tt=()=>{Object.assign(yA.prototype,{isAliasOf(A){if(!(this instanceof yA)||!(A instanceof yA))return!1;var j=this.$$.ptrType.registeredClass,t=this.$$.ptr;A.$$=A.$$;for(var e=A.$$.ptrType.registeredClass,l=A.$$.ptr;j.baseClass;)t=j.upcast(t),j=j.baseClass;for(;e.baseClass;)l=e.upcast(l),e=e.baseClass;return j===e&&t===l},clone(){if(this.$$.ptr||Aj(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var A=pA(Object.create(Object.getPrototypeOf(this),{$$:{value:V6(this.$$)}}));return A.$$.count.value+=1,A.$$.deleteScheduled=!1,A},delete(){this.$$.ptr||Aj(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&v(\"Object already scheduled for deletion\"),Lj(this),yj(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||Aj(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&v(\"Object already scheduled for deletion\"),dA.push(this),dA.length===1&&$A&&$A(tj),this.$$.deleteScheduled=!0,this}})};function yA(){}var HA=(A,j)=>Object.defineProperty(j,\"name\",{value:A}),et=(A,j,t)=>{if(A[j].overloadTable===void 0){var e=A[j];A[j]=function(...l){return A[j].overloadTable.hasOwnProperty(l.length)||v(`Function '${t}' called with an invalid number of arguments (${l.length}) - expects one of (${A[j].overloadTable})!`),A[j].overloadTable[l.length].apply(this,l)},A[j].overloadTable=[],A[j].overloadTable[e.argCount]=e}},ej=(A,j,t)=>{r.hasOwnProperty(A)?((t===void 0||r[A].overloadTable!==void 0&&r[A].overloadTable[t]!==void 0)&&v(`Cannot register public name '${A}' twice`),et(r,A,A),r.hasOwnProperty(t)&&v(`Cannot register multiple overloads of a function with the same number of arguments (${t})!`),r[A].overloadTable[t]=j):(r[A]=j,t!==void 0&&(r[A].numArguments=t))},rt=48,kt=57,lt=A=>{if(A===void 0)return\"_unknown\";A=A.replace(/[^a-zA-Z0-9_]/g,\"$\");var j=A.charCodeAt(0);return j>=rt&&j<=kt?`_${A}`:A};function Bt(A,j,t,e,l,_,a,o){this.name=A,this.constructor=j,this.instancePrototype=t,this.rawDestructor=e,this.baseClass=l,this.getActualType=_,this.upcast=a,this.downcast=o,this.pureVirtualFunctions=[]}var rj=(A,j,t)=>{for(;j!==t;)j.upcast||v(`Expected null or instance of ${t.name}, got an instance of ${j.name}`),A=j.upcast(A),j=j.baseClass;return A};function _t(A,j){if(j===null)return this.isReference&&v(`null is not a valid ${this.name}`),0;j.$$||v(`Cannot pass \"${_j(j)}\" as a ${this.name}`),j.$$.ptr||v(`Cannot pass deleted object as a pointer of type ${this.name}`);var t=j.$$.ptrType.registeredClass,e=rj(j.$$.ptr,t,this.registeredClass);return e}function at(A,j){var t;if(j===null)return this.isReference&&v(`null is not a valid ${this.name}`),this.isSmartPointer?(t=this.rawConstructor(),A!==null&&A.push(this.rawDestructor,t),t):0;(!j||!j.$$)&&v(`Cannot pass \"${_j(j)}\" as a ${this.name}`),j.$$.ptr||v(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&j.$$.ptrType.isConst&&v(`Cannot convert argument of type ${j.$$.smartPtrType?j.$$.smartPtrType.name:j.$$.ptrType.name} to parameter type ${this.name}`);var e=j.$$.ptrType.registeredClass;if(t=rj(j.$$.ptr,e,this.registeredClass),this.isSmartPointer)switch(j.$$.smartPtr===void 0&&v(\"Passing raw pointer to smart pointer is illegal\"),this.sharingPolicy){case 0:j.$$.smartPtrType===this?t=j.$$.smartPtr:v(`Cannot convert argument of type ${j.$$.smartPtrType?j.$$.smartPtrType.name:j.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:t=j.$$.smartPtr;break;case 2:if(j.$$.smartPtrType===this)t=j.$$.smartPtr;else{var l=j.clone();t=this.rawShare(t,P.toHandle(()=>l.delete())),A!==null&&A.push(this.rawDestructor,t)}break;default:v(\"Unsupporting sharing policy\")}return t}function ot(A,j){if(j===null)return this.isReference&&v(`null is not a valid ${this.name}`),0;j.$$||v(`Cannot pass \"${_j(j)}\" as a ${this.name}`),j.$$.ptr||v(`Cannot pass deleted object as a pointer of type ${this.name}`),j.$$.ptrType.isConst&&v(`Cannot convert argument of type ${j.$$.ptrType.name} to parameter type ${this.name}`);var t=j.$$.ptrType.registeredClass,e=rj(j.$$.ptr,t,this.registeredClass);return e}var it=()=>{Object.assign(OA.prototype,{getPointee(A){return this.rawGetPointee&&(A=this.rawGetPointee(A)),A},destructor(A){var j;(j=this.rawDestructor)==null||j.call(this,A)},argPackAdvance:X,readValueFromPointer:sA,fromWireType:jt})};function OA(A,j,t,e,l,_,a,o,i,n,s){this.name=A,this.registeredClass=j,this.isReference=t,this.isConst=e,this.isSmartPointer=l,this.pointeeType=_,this.sharingPolicy=a,this.rawGetPointee=o,this.rawConstructor=i,this.rawShare=n,this.rawDestructor=s,!l&&j.baseClass===void 0?e?(this.toWireType=_t,this.destructorFunction=null):(this.toWireType=ot,this.destructorFunction=null):this.toWireType=at}var bj=(A,j,t)=>{r.hasOwnProperty(A)||xA(\"Replacing nonexistent public symbol\"),r[A].overloadTable!==void 0&&t!==void 0?r[A].overloadTable[t]=j:(r[A]=j,r[A].argCount=t)},Et=(A,j,t)=>{A=A.replace(/p/g,\"i\");var e=r[\"dynCall_\"+A];return e(j,...t)},JA=[],Dj,wj=A=>{var j=JA[A];return j||(A>=JA.length&&(JA.length=A+1),JA[A]=j=Dj.get(A)),j},nt=(A,j,t=[])=>{if(A.includes(\"j\"))return Et(A,j,t);var e=wj(j)(...t);return e},st=(A,j)=>(...t)=>nt(A,j,t),U=(A,j)=>{A=C(A);function t(){return A.includes(\"j\")?st(A,j):wj(j)}var e=t();return typeof e!=\"function\"&&v(`unknown function pointer with signature ${A}: ${j}`),e},Gt=(A,j)=>{var t=HA(j,function(e){this.name=j,this.message=e;var l=new Error(e).stack;l!==void 0&&(this.stack=this.toString()+`\n`+l.replace(/^Error(:[^\\n]*)?\\n/,\"\"))});return t.prototype=Object.create(A.prototype),t.prototype.constructor=t,t.prototype.toString=function(){return this.message===void 0?this.name:`${this.name}: ${this.message}`},t},Cj,Sj=A=>{var j=ve(A),t=C(j);return Z(j),t},Pj=(A,j)=>{var t=[],e={};function l(_){if(!e[_]&&!rA[_]){if(gA[_]){gA[_].forEach(l);return}t.push(_),e[_]=!0}}throw j.forEach(l),new Cj(`${A}: `+t.map(Sj).join([\", \"]))},dt=(A,j,t,e,l,_,a,o,i,n,s,u,d)=>{s=C(s),_=U(l,_),o&&(o=U(a,o)),n&&(n=U(i,n)),d=U(u,d);var G=lt(s);ej(G,function(){Pj(`Cannot construct ${s} due to unbound types`,[e])}),QA([A,j,t],e?[e]:[],p=>{var g,O;p=p[0];var F,E;e?(F=p.registeredClass,E=F.instancePrototype):E=yA.prototype;var $=HA(s,function(...ij){if(Object.getPrototypeOf(this)!==x)throw new GA(\"Use 'new' to construct \"+s);if(c.constructor_body===void 0)throw new GA(s+\" has no accessible constructor\");var Wj=c.constructor_body[ij.length];if(Wj===void 0)throw new GA(`Tried to invoke ctor of ${s} with invalid number of parameters (${ij.length}) - expected (${Object.keys(c.constructor_body).toString()}) parameters instead!`);return Wj.apply(this,ij)}),x=Object.create(E,{constructor:{value:$}});$.prototype=x;var c=new Bt(s,$,x,d,F,_,o,n);c.baseClass&&((O=(g=c.baseClass).__derivedClasses)!=null||(g.__derivedClasses=[]),c.baseClass.__derivedClasses.push(c));var S=new OA(s,c,!0,!1,!1),L=new OA(s+\"*\",c,!1,!1,!1),zj=new OA(s+\" const*\",c,!1,!0,!1);return Jj[A]={pointerType:L,constPointerType:zj},bj(G,$),[S,L,zj]})},kj=[],Y=[],lj=A=>{A>9&&--Y[A+1]===0&&(Y[A]=void 0,kj.push(A))},$t=()=>Y.length/2-5-kj.length,ut=()=>{Y.push(0,1,void 0,1,null,1,!0,1,!1,1),r.count_emval_handles=$t},P={toValue:A=>(A||v(\"Cannot use deleted val. handle = \"+A),Y[A]),toHandle:A=>{switch(A){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let j=kj.pop()||Y.length;return Y[j]=A,Y[j+1]=1,j}}}},pt={name:\"emscripten::val\",fromWireType:A=>{var j=P.toValue(A);return lj(A),j},toWireType:(A,j)=>P.toHandle(j),argPackAdvance:X,readValueFromPointer:sA,destructorFunction:null},Ht=A=>T(A,pt),ct=(A,j,t)=>{switch(j){case 1:return t?function(e){return this.fromWireType(J[e])}:function(e){return this.fromWireType(D[e])};case 2:return t?function(e){return this.fromWireType(R[e>>1])}:function(e){return this.fromWireType(iA[e>>1])};case 4:return t?function(e){return this.fromWireType(H[e>>2])}:function(e){return this.fromWireType(m[e>>2])};default:throw new TypeError(`invalid integer width (${j}): ${A}`)}},qt=(A,j,t,e)=>{j=C(j);function l(){}l.values={},T(A,{name:j,constructor:l,fromWireType:function(_){return this.constructor.values[_]},toWireType:(_,a)=>a.value,argPackAdvance:X,readValueFromPointer:ct(j,t,e),destructorFunction:null}),ej(j,l)},Bj=(A,j)=>{var t=rA[A];return t===void 0&&v(`${j} has unknown type ${Sj(A)}`),t},ht=(A,j,t)=>{var e=Bj(A,\"enum\");j=C(j);var l=e.constructor,_=Object.create(e.constructor.prototype,{value:{value:t},constructor:{value:HA(`${e.name}_${j}`,function(){})}});l.values[t]=_,l[j]=_},_j=A=>{if(A===null)return\"null\";var j=typeof A;return j===\"object\"||j===\"array\"||j===\"function\"?A.toString():\"\"+A},mt=(A,j)=>{switch(j){case 4:return function(t){return this.fromWireType(Hj[t>>2])};case 8:return function(t){return this.fromWireType(cj[t>>3])};default:throw new TypeError(`invalid float width (${j}): ${A}`)}},Nt=(A,j,t)=>{j=C(j),T(A,{name:j,fromWireType:e=>e,toWireType:(e,l)=>l,argPackAdvance:X,readValueFromPointer:mt(j,t),destructorFunction:null})};function ft(A){for(var j=1;j<A.length;++j)if(A[j]!==null&&A[j].destructorFunction===void 0)return!0;return!1}function vt(A,j,t,e,l,_){var a=j.length;a<2&&v(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");var o=j[1]!==null&&t!==null,i=ft(j),n=j[0].name!==\"void\",s=a-2,u=new Array(s),d=[],G=[],p=function(...g){g.length!==s&&v(`function ${A} called with ${g.length} arguments, expected ${s}`),G.length=0;var O;d.length=o?2:1,d[0]=l,o&&(O=j[1].toWireType(G,this),d[1]=O);for(var F=0;F<s;++F)u[F]=j[F+2].toWireType(G,g[F]),d.push(u[F]);var E=e(...d);function $(x){if(i)ZA(G);else for(var c=o?1:2;c<j.length;c++){var S=c===1?O:u[c-2];j[c].destructorFunction!==null&&j[c].destructorFunction(S)}if(n)return j[0].fromWireType(x)}return $(E)};return HA(A,p)}var Ft=(A,j)=>{for(var t=[],e=0;e<A;e++)t.push(m[j+e*4>>2]);return t},It=A=>{A=A.trim();let j=A.indexOf(\"(\");return j!==-1?A.substr(0,j):A},gt=(A,j,t,e,l,_,a)=>{var o=Ft(j,t);A=C(A),A=It(A),l=U(e,l),ej(A,function(){Pj(`Cannot call ${A} due to unbound types`,o)},j-1),QA([],o,i=>{var n=[i[0],null].concat(i.slice(1));return bj(A,vt(A,n,null,l,_,a),j-1),[]})},xt=(A,j,t)=>{switch(j){case 1:return t?e=>J[e]:e=>D[e];case 2:return t?e=>R[e>>1]:e=>iA[e>>1];case 4:return t?e=>H[e>>2]:e=>m[e>>2];default:throw new TypeError(`invalid integer width (${j}): ${A}`)}},Lt=(A,j,t,e,l)=>{j=C(j),l===-1&&(l=4294967295);var _=s=>s;if(e===0){var a=32-8*t;_=s=>s<<a>>>a}var o=j.includes(\"unsigned\"),i=(s,u)=>{},n;o?n=function(s,u){return i(u,this.name),u>>>0}:n=function(s,u){return i(u,this.name),u},T(A,{name:j,fromWireType:_,toWireType:n,argPackAdvance:X,readValueFromPointer:xt(j,t,e!==0),destructorFunction:null})},yt=(A,j,t)=>{var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],l=e[j];function _(a){var o=m[a>>2],i=m[a+4>>2];return new l(J.buffer,i,o)}t=C(t),T(A,{name:t,fromWireType:_,argPackAdvance:X,readValueFromPointer:_},{ignoreDuplicateRegistrations:!0})},Ot=(A,j,t)=>zA(A,D,j,t),Jt=(A,j)=>{j=C(j);var t=j===\"std::string\";T(A,{name:j,fromWireType(e){var l=m[e>>2],_=e+4,a;if(t)for(var o=_,i=0;i<=l;++i){var n=_+i;if(i==l||D[n]==0){var s=n-o,u=eA(o,s);a===void 0?a=u:(a+=\"\\0\",a+=u),o=n+1}}else{for(var d=new Array(l),i=0;i<l;++i)d[i]=String.fromCharCode(D[_+i]);a=d.join(\"\")}return Z(e),a},toWireType(e,l){l instanceof ArrayBuffer&&(l=new Uint8Array(l));var _,a=typeof l==\"string\";a||l instanceof Uint8Array||l instanceof Uint8ClampedArray||l instanceof Int8Array||v(\"Cannot pass non-string to std::string\"),t&&a?_=YA(l):_=l.length;var o=Rj(4+_+1),i=o+4;if(m[o>>2]=_,t&&a)Ot(l,i,_+1);else if(a)for(var n=0;n<_;++n){var s=l.charCodeAt(n);s>255&&(Z(i),v(\"String has UTF-16 code units that do not fit in 8 bits\")),D[i+n]=s}else for(var n=0;n<_;++n)D[i+n]=l[n];return e!==null&&e.push(Z,o),o},argPackAdvance:X,readValueFromPointer:sA,destructorFunction(e){Z(e)}})},Mj=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf-16le\"):void 0,bt=(A,j)=>{for(var t=A,e=t>>1,l=e+j/2;!(e>=l)&&iA[e];)++e;if(t=e<<1,t-A>32&&Mj)return Mj.decode(D.subarray(A,t));for(var _=\"\",a=0;!(a>=j/2);++a){var o=R[A+a*2>>1];if(o==0)break;_+=String.fromCharCode(o)}return _},Dt=(A,j,t)=>{if(t!=null||(t=2147483647),t<2)return 0;t-=2;for(var e=j,l=t<A.length*2?t/2:A.length,_=0;_<l;++_){var a=A.charCodeAt(_);R[j>>1]=a,j+=2}return R[j>>1]=0,j-e},wt=A=>A.length*2,Ct=(A,j)=>{for(var t=0,e=\"\";!(t>=j/4);){var l=H[A+t*4>>2];if(l==0)break;if(++t,l>=65536){var _=l-65536;e+=String.fromCharCode(55296|_>>10,56320|_&1023)}else e+=String.fromCharCode(l)}return e},St=(A,j,t)=>{if(t!=null||(t=2147483647),t<4)return 0;for(var e=j,l=e+t-4,_=0;_<A.length;++_){var a=A.charCodeAt(_);if(a>=55296&&a<=57343){var o=A.charCodeAt(++_);a=65536+((a&1023)<<10)|o&1023}if(H[j>>2]=a,j+=4,j+4>l)break}return H[j>>2]=0,j-e},Pt=A=>{for(var j=0,t=0;t<A.length;++t){var e=A.charCodeAt(t);e>=55296&&e<=57343&&++t,j+=4}return j},Mt=(A,j,t)=>{t=C(t);var e,l,_,a;j===2?(e=bt,l=Dt,a=wt,_=o=>iA[o>>1]):j===4&&(e=Ct,l=St,a=Pt,_=o=>m[o>>2]),T(A,{name:t,fromWireType:o=>{for(var i=m[o>>2],n,s=o+4,u=0;u<=i;++u){var d=o+4+u*j;if(u==i||_(d)==0){var G=d-s,p=e(s,G);n===void 0?n=p:(n+=\"\\0\",n+=p),s=d+j}}return Z(o),n},toWireType:(o,i)=>{typeof i!=\"string\"&&v(`Cannot pass non-string to C++ string type ${t}`);var n=a(i),s=Rj(4+n+j);return m[s>>2]=n/j,l(i,s+4,n+j),o!==null&&o.push(Z,s),s},argPackAdvance:X,readValueFromPointer:sA,destructorFunction(o){Z(o)}})},Kt=(A,j,t,e,l,_)=>{IA[A]={name:C(j),rawConstructor:U(t,e),rawDestructor:U(l,_),fields:[]}},Tt=(A,j,t,e,l,_,a,o,i,n)=>{IA[A].fields.push({fieldName:C(j),getterReturnType:t,getter:U(e,l),getterContext:_,setterArgumentType:a,setter:U(o,i),setterContext:n})},Xt=(A,j)=>{j=C(j),T(A,{isVoid:!0,name:j,argPackAdvance:0,fromWireType:()=>{},toWireType:(t,e)=>{}})},Rt=(A,j,t)=>D.copyWithin(A,j,j+t),Vt={},Kj=A=>{var j=Vt[A];return j===void 0?C(A):j},aj=[],Ut=(A,j,t,e,l)=>(A=aj[A],j=P.toValue(j),t=Kj(t),A(j,j[t],e,l)),Yt=A=>{var j=aj.length;return aj.push(A),j},zt=(A,j)=>{for(var t=new Array(A),e=0;e<A;++e)t[e]=Bj(m[j+e*4>>2],\"parameter \"+e);return t},Wt=Reflect.construct,Zt=(A,j,t)=>{var e=[],l=A.toWireType(e,t);return e.length&&(m[j>>2]=P.toHandle(e)),l},Qt=(A,j,t)=>{var e=zt(A,j),l=e.shift();A--;var _=new Array(A),a=(i,n,s,u)=>{for(var d=0,G=0;G<A;++G)_[G]=e[G].readValueFromPointer(u+d),d+=e[G].argPackAdvance;var p=t===1?Wt(n,_):n.apply(i,_);return Zt(l,s,p)},o=`methodCaller<(${e.map(i=>i.name).join(\", \")}) => ${l.name}>`;return Yt(HA(o,a))},Ae=A=>{A>9&&(Y[A+1]+=1)},je=()=>P.toHandle([]),te=A=>P.toHandle(Kj(A)),ee=()=>P.toHandle({}),re=A=>{var j=P.toValue(A);ZA(j),lj(A)},ke=(A,j,t)=>{A=P.toValue(A),j=P.toValue(j),t=P.toValue(t),A[j]=t},le=(A,j)=>{A=Bj(A,\"_emval_take_value\");var t=A.readValueFromPointer(j);return P.toHandle(t)},Be=()=>2147483648,_e=A=>{var j=mA.buffer,t=(A-j.byteLength+65535)/65536;try{return mA.grow(t),qj(),1}catch{}},ae=A=>{var j=D.length;A>>>=0;var t=Be();if(A>t)return!1;for(var e=(i,n)=>i+(n-i%n)%n,l=1;l<=4;l*=2){var _=j*(1+.2/l);_=Math.min(_,A+100663296);var a=Math.min(t,e(Math.max(A,_),65536)),o=_e(a);if(o)return!0}return!1},oj={},oe=()=>CA||\"./this.program\",cA=()=>{if(!cA.strings){var A=(typeof navigator==\"object\"&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",j={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:A,_:oe()};for(var t in oj)oj[t]===void 0?delete j[t]:j[t]=oj[t];var e=[];for(var t in j)e.push(`${t}=${j[t]}`);cA.strings=e}return cA.strings},ie=(A,j)=>{for(var t=0;t<A.length;++t)J[j++]=A.charCodeAt(t);J[j]=0},Ee=(A,j)=>{var t=0;return cA().forEach((e,l)=>{var _=j+t;m[A+l*4>>2]=_,ie(e,_),t+=e.length+1}),0},ne=(A,j)=>{var t=cA();m[A>>2]=t.length;var e=0;return t.forEach(l=>e+=l.length+1),m[j>>2]=e,0};function se(A){try{var j=w.getStreamFromFD(A);return k.close(j),0}catch(t){if(typeof k==\"undefined\"||t.name!==\"ErrnoError\")throw t;return t.errno}}var Ge=(A,j,t,e)=>{for(var l=0,_=0;_<t;_++){var a=m[j>>2],o=m[j+4>>2];j+=8;var i=k.read(A,J,a,o,e);if(i<0)return-1;if(l+=i,i<o)break;typeof e!=\"undefined\"&&(e+=i)}return l};function de(A,j,t,e){try{var l=w.getStreamFromFD(A),_=Ge(l,j,t);return m[e>>2]=_,0}catch(a){if(typeof k==\"undefined\"||a.name!==\"ErrnoError\")throw a;return a.errno}}var $e=(A,j)=>j+2097152>>>0<4194305-!!A?(A>>>0)+j*4294967296:NaN;function ue(A,j,t,e,l){var _=$e(j,t);try{if(isNaN(_))return 61;var a=w.getStreamFromFD(A);return k.llseek(a,_,e),b=[a.position>>>0,(h=a.position,+Math.abs(h)>=1?h>0?+Math.floor(h/4294967296)>>>0:~~+Math.ceil((h-+(~~h>>>0))/4294967296)>>>0:0)],H[l>>2]=b[0],H[l+4>>2]=b[1],a.getdents&&_===0&&e===0&&(a.getdents=null),0}catch(o){if(typeof k==\"undefined\"||o.name!==\"ErrnoError\")throw o;return o.errno}}var pe=(A,j,t,e)=>{for(var l=0,_=0;_<t;_++){var a=m[j>>2],o=m[j+4>>2];j+=8;var i=k.write(A,J,a,o,e);if(i<0)return-1;l+=i,typeof e!=\"undefined\"&&(e+=i)}return l};function He(A,j,t,e){try{var l=w.getStreamFromFD(A),_=pe(l,j,t);return m[e>>2]=_,0}catch(a){if(typeof k==\"undefined\"||a.name!==\"ErrnoError\")throw a;return a.errno}}var bA=A=>A%4===0&&(A%100!==0||A%400===0),ce=(A,j)=>{for(var t=0,e=0;e<=j;t+=A[e++]);return t},Tj=[31,29,31,30,31,30,31,31,30,31,30,31],Xj=[31,28,31,30,31,30,31,31,30,31,30,31],qe=(A,j)=>{for(var t=new Date(A.getTime());j>0;){var e=bA(t.getFullYear()),l=t.getMonth(),_=(e?Tj:Xj)[l];if(j>_-t.getDate())j-=_-t.getDate()+1,t.setDate(1),l<11?t.setMonth(l+1):(t.setMonth(0),t.setFullYear(t.getFullYear()+1));else return t.setDate(t.getDate()+j),t}return t},he=(A,j)=>{J.set(A,j)},me=(A,j,t,e)=>{var l=m[e+40>>2],_={tm_sec:H[e>>2],tm_min:H[e+4>>2],tm_hour:H[e+8>>2],tm_mday:H[e+12>>2],tm_mon:H[e+16>>2],tm_year:H[e+20>>2],tm_wday:H[e+24>>2],tm_yday:H[e+28>>2],tm_isdst:H[e+32>>2],tm_gmtoff:H[e+36>>2],tm_zone:l?eA(l):\"\"},a=eA(t),o={\"%c\":\"%a %b %d %H:%M:%S %Y\",\"%D\":\"%m/%d/%y\",\"%F\":\"%Y-%m-%d\",\"%h\":\"%b\",\"%r\":\"%I:%M:%S %p\",\"%R\":\"%H:%M\",\"%T\":\"%H:%M:%S\",\"%x\":\"%m/%d/%y\",\"%X\":\"%H:%M:%S\",\"%Ec\":\"%c\",\"%EC\":\"%C\",\"%Ex\":\"%m/%d/%y\",\"%EX\":\"%H:%M:%S\",\"%Ey\":\"%y\",\"%EY\":\"%Y\",\"%Od\":\"%d\",\"%Oe\":\"%e\",\"%OH\":\"%H\",\"%OI\":\"%I\",\"%Om\":\"%m\",\"%OM\":\"%M\",\"%OS\":\"%S\",\"%Ou\":\"%u\",\"%OU\":\"%U\",\"%OV\":\"%V\",\"%Ow\":\"%w\",\"%OW\":\"%W\",\"%Oy\":\"%y\"};for(var i in o)a=a.replace(new RegExp(i,\"g\"),o[i]);var n=[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],s=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];function u(E,$,x){for(var c=typeof E==\"number\"?E.toString():E||\"\";c.length<$;)c=x[0]+c;return c}function d(E,$){return u(E,$,\"0\")}function G(E,$){function x(S){return S<0?-1:S>0?1:0}var c;return(c=x(E.getFullYear()-$.getFullYear()))===0&&(c=x(E.getMonth()-$.getMonth()))===0&&(c=x(E.getDate()-$.getDate())),c}function p(E){switch(E.getDay()){case 0:return new Date(E.getFullYear()-1,11,29);case 1:return E;case 2:return new Date(E.getFullYear(),0,3);case 3:return new Date(E.getFullYear(),0,2);case 4:return new Date(E.getFullYear(),0,1);case 5:return new Date(E.getFullYear()-1,11,31);case 6:return new Date(E.getFullYear()-1,11,30)}}function g(E){var $=qe(new Date(E.tm_year+1900,0,1),E.tm_yday),x=new Date($.getFullYear(),0,4),c=new Date($.getFullYear()+1,0,4),S=p(x),L=p(c);return G(S,$)<=0?G(L,$)<=0?$.getFullYear()+1:$.getFullYear():$.getFullYear()-1}var O={\"%a\":E=>n[E.tm_wday].substring(0,3),\"%A\":E=>n[E.tm_wday],\"%b\":E=>s[E.tm_mon].substring(0,3),\"%B\":E=>s[E.tm_mon],\"%C\":E=>{var $=E.tm_year+1900;return d($/100|0,2)},\"%d\":E=>d(E.tm_mday,2),\"%e\":E=>u(E.tm_mday,2,\" \"),\"%g\":E=>g(E).toString().substring(2),\"%G\":g,\"%H\":E=>d(E.tm_hour,2),\"%I\":E=>{var $=E.tm_hour;return $==0?$=12:$>12&&($-=12),d($,2)},\"%j\":E=>d(E.tm_mday+ce(bA(E.tm_year+1900)?Tj:Xj,E.tm_mon-1),3),\"%m\":E=>d(E.tm_mon+1,2),\"%M\":E=>d(E.tm_min,2),\"%n\":()=>`\n`,\"%p\":E=>E.tm_hour>=0&&E.tm_hour<12?\"AM\":\"PM\",\"%S\":E=>d(E.tm_sec,2),\"%t\":()=>\"\t\",\"%u\":E=>E.tm_wday||7,\"%U\":E=>{var $=E.tm_yday+7-E.tm_wday;return d(Math.floor($/7),2)},\"%V\":E=>{var $=Math.floor((E.tm_yday+7-(E.tm_wday+6)%7)/7);if((E.tm_wday+371-E.tm_yday-2)%7<=2&&$++,$){if($==53){var x=(E.tm_wday+371-E.tm_yday)%7;x!=4&&(x!=3||!bA(E.tm_year))&&($=1)}}else{$=52;var c=(E.tm_wday+7-E.tm_yday-1)%7;(c==4||c==5&&bA(E.tm_year%400-1))&&$++}return d($,2)},\"%w\":E=>E.tm_wday,\"%W\":E=>{var $=E.tm_yday+7-(E.tm_wday+6)%7;return d(Math.floor($/7),2)},\"%y\":E=>(E.tm_year+1900).toString().substring(2),\"%Y\":E=>E.tm_year+1900,\"%z\":E=>{var $=E.tm_gmtoff,x=$>=0;return $=Math.abs($)/60,$=$/60*100+$%60,(x?\"+\":\"-\")+(\"0000\"+$).slice(-4)},\"%Z\":E=>E.tm_zone,\"%%\":()=>\"%\"};a=a.replace(/%%/g,\"\\0\\0\");for(var i in O)a.includes(i)&&(a=a.replace(new RegExp(i,\"g\"),O[i](_)));a=a.replace(/\\0\\0/g,\"%\");var F=FA(a,!1);return F.length>j?0:(he(F,A),F.length-1)},Ne=(A,j,t,e,l)=>me(A,j,t,e);k.createPreloadedFile=J6,k.staticInit(),gj=r.InternalError=class extends Error{constructor(A){super(A),this.name=\"InternalError\"}},T6(),GA=r.BindingError=class extends Error{constructor(A){super(A),this.name=\"BindingError\"}},tt(),Z6(),it(),Cj=r.UnboundTypeError=Gt(Error,\"UnboundTypeError\"),ut();var fe={b:N6,p:F6,r:D6,B:w6,F:C6,E:S6,C:P6,w:M6,z:K6,K:R6,m:dt,J:Ht,j:qt,a:ht,v:Nt,f:gt,i:Lt,e:yt,u:Jt,o:Mt,x:Kt,l:Tt,L:Xt,I:Rt,N:Ut,c:lj,O:Qt,P:Ae,q:je,h:te,k:ee,M:re,g:ke,d:le,D:ae,G:Ee,H:ne,s:se,t:de,y:ue,n:He,A:Ne},B=m6(),Xe=B.R,Re=r._memcpy=B.S,Ve=r._heif_color_conversion_options_set_defaults=B.U,Rj=r._malloc=B.V,Ue=r._heif_nclx_color_profile_set_color_primaries=B.W,Z=r._free=B.X,Ye=r._heif_nclx_color_profile_set_transfer_characteristics=B.Y,ze=r._heif_nclx_color_profile_set_matrix_coefficients=B.Z,We=r._heif_init=B._,Ze=r._heif_deinit=B.$,Qe=r._heif_load_plugin=B.aa,Ar=r._heif_unload_plugin=B.ba,jr=r._heif_load_plugins=B.ca,tr=r._heif_get_plugin_directories=B.da,er=r._heif_free_plugin_directories=B.ea,rr=r._heif_get_version=B.fa,kr=r._heif_get_version_number=B.ga,lr=r._heif_get_version_number_major=B.ha,Br=r._heif_get_version_number_minor=B.ia,_r=r._heif_get_version_number_maintenance=B.ja,ar=r._heif_check_filetype=B.ka,or=r._heif_read_main_brand=B.la,ir=r._heif_has_compatible_filetype=B.ma,Er=r._heif_list_compatible_brands=B.na,nr=r._heif_free_list_of_compatible_brands=B.oa,sr=r._heif_check_jpeg_filetype=B.pa,Gr=r._heif_main_brand=B.qa,dr=r._heif_fourcc_to_brand=B.ra,$r=r._heif_read_minor_version_brand=B.sa,ur=r._heif_brand_to_fourcc=B.ta,pr=r._heif_has_compatible_brand=B.ua,Hr=r._heif_get_global_security_limits=B.va,cr=r._heif_get_file_mime_type=B.wa,qr=r._heif_get_disabled_security_limits=B.xa,hr=r._heif_context_get_security_limits=B.ya,mr=r._heif_context_set_security_limits=B.za,Nr=r._heif_context_alloc=B.Aa,fr=r._heif_context_free=B.Ba,vr=r._heif_context_read_from_file=B.Ca,Fr=r._heif_context_read_from_memory=B.Da,Ir=r._heif_context_read_from_memory_without_copy=B.Ea,gr=r._heif_context_read_from_reader=B.Fa,xr=r._heif_context_debug_dump_boxes_to_file=B.Ga,Lr=r._heif_context_get_primary_image_handle=B.Ha,yr=r._heif_context_get_primary_image_ID=B.Ia,Or=r._heif_context_is_top_level_image_ID=B.Ja,Jr=r._heif_context_get_number_of_top_level_images=B.Ka,br=r._heif_context_get_list_of_top_level_image_IDs=B.La,Dr=r._heif_context_get_image_handle=B.Ma,wr=r._heif_image_handle_is_primary_image=B.Na,Cr=r._heif_image_handle_get_item_id=B.Oa,Sr=r._heif_image_handle_get_number_of_thumbnails=B.Pa,Pr=r._heif_image_handle_get_list_of_thumbnail_IDs=B.Qa,Mr=r._heif_image_handle_get_thumbnail=B.Ra,Kr=r._heif_image_handle_get_number_of_auxiliary_images=B.Sa,Tr=r._heif_image_handle_get_list_of_auxiliary_image_IDs=B.Ta,Xr=r._heif_image_handle_get_auxiliary_type=B.Ua,Rr=r._heif_image_handle_release_auxiliary_type=B.Va,Vr=r._heif_image_handle_free_auxiliary_types=B.Wa,Ur=r._heif_image_handle_get_auxiliary_image_handle=B.Xa,Yr=r._heif_image_handle_get_width=B.Ya,zr=r._heif_image_handle_get_height=B.Za,Wr=r._heif_image_handle_get_ispe_width=B._a,Zr=r._heif_image_handle_get_ispe_height=B.$a,Qr=r._heif_image_handle_get_context=B.ab,Ak=r._heif_image_handle_get_image_tiling=B.bb,jk=r._heif_image_handle_get_grid_image_tile_id=B.cb,tk=r._heif_context_get_entity_groups=B.db,ek=r._heif_entity_groups_release=B.eb,rk=r._heif_image_handle_get_preferred_decoding_colorspace=B.fb,kk=r._heif_image_handle_has_alpha_channel=B.gb,lk=r._heif_image_handle_is_premultiplied_alpha=B.hb,Bk=r._heif_image_handle_get_luma_bits_per_pixel=B.ib,_k=r._heif_image_handle_get_chroma_bits_per_pixel=B.jb,ak=r._heif_image_handle_has_depth_image=B.kb,ok=r._heif_depth_representation_info_free=B.lb,ik=r._heif_image_handle_get_depth_image_representation_info=B.mb,Ek=r._heif_image_handle_get_number_of_depth_images=B.nb,nk=r._heif_image_handle_get_list_of_depth_image_IDs=B.ob,sk=r._heif_image_handle_get_depth_image_handle=B.pb,Gk=r._heif_decoding_options_alloc=B.qb,dk=r._heif_decoding_options_free=B.rb,$k=r._heif_decode_image=B.sb,uk=r._heif_image_handle_decode_image_tile=B.tb,pk=r._heif_image_create=B.ub,Hk=r._heif_image_get_decoding_warnings=B.vb,ck=r._heif_image_add_decoding_warning=B.wb,qk=r._heif_image_has_content_light_level=B.xb,hk=r._heif_image_get_content_light_level=B.yb,mk=r._heif_image_handle_get_content_light_level=B.zb,Nk=r._heif_image_set_content_light_level=B.Ab,fk=r._heif_image_has_mastering_display_colour_volume=B.Bb,vk=r._heif_image_get_mastering_display_colour_volume=B.Cb,Fk=r._heif_image_handle_get_mastering_display_colour_volume=B.Db,Ik=r._heif_image_set_mastering_display_colour_volume=B.Eb,gk=r._heif_mastering_display_colour_volume_decode=B.Fb,xk=r._heif_image_get_pixel_aspect_ratio=B.Gb,Lk=r._heif_image_handle_get_pixel_aspect_ratio=B.Hb,yk=r._heif_image_set_pixel_aspect_ratio=B.Ib,Ok=r._heif_image_release=B.Jb,Jk=r._heif_image_handle_release=B.Kb,bk=r._heif_image_get_colorspace=B.Lb,Dk=r._heif_image_get_chroma_format=B.Mb,wk=r._heif_image_get_width=B.Nb,Ck=r._heif_image_get_height=B.Ob,Sk=r._heif_image_get_primary_width=B.Pb,Pk=r._heif_image_get_primary_height=B.Qb,Mk=r._heif_image_crop=B.Rb,Kk=r._heif_image_get_bits_per_pixel=B.Sb,Tk=r._heif_image_get_bits_per_pixel_range=B.Tb,Xk=r._heif_image_has_channel=B.Ub,Rk=r._heif_image_add_plane=B.Vb,Vk=r._heif_image_get_plane_readonly=B.Wb,Uk=r._heif_image_get_plane=B.Xb,Yk=r._heif_image_set_premultiplied_alpha=B.Yb,zk=r._heif_image_is_premultiplied_alpha=B.Zb,Wk=r._heif_image_extend_padding_to_size=B._b,Zk=r._heif_image_scale_image=B.$b,Qk=r._heif_image_extend_to_size_fill_with_zero=B.ac,A7=r._heif_image_set_raw_color_profile=B.bc,j7=r._heif_image_set_nclx_color_profile=B.cc,t7=r._heif_image_handle_get_number_of_metadata_blocks=B.dc,e7=r._heif_image_handle_get_list_of_metadata_block_IDs=B.ec,r7=r._heif_image_handle_get_metadata_type=B.fc,k7=r._heif_image_handle_get_metadata_content_type=B.gc,l7=r._heif_image_handle_get_metadata_item_uri_type=B.hc,B7=r._heif_image_handle_get_metadata_size=B.ic,_7=r._heif_image_handle_get_metadata=B.jc,a7=r._heif_image_handle_get_color_profile_type=B.kc,o7=r._heif_image_handle_get_raw_color_profile_size=B.lc,i7=r._heif_image_handle_get_nclx_color_profile=B.mc,E7=r._heif_image_handle_get_raw_color_profile=B.nc,n7=r._heif_image_get_color_profile_type=B.oc,s7=r._heif_image_get_raw_color_profile_size=B.pc,G7=r._heif_image_get_raw_color_profile=B.qc,d7=r._heif_image_get_nclx_color_profile=B.rc,$7=r._heif_nclx_color_profile_alloc=B.sc,u7=r._heif_nclx_color_profile_free=B.tc,p7=r._heif_image_handle_has_camera_intrinsic_matrix=B.uc,H7=r._heif_image_handle_get_camera_intrinsic_matrix=B.vc,c7=r._heif_image_handle_has_camera_extrinsic_matrix=B.wc,q7=r._heif_image_handle_get_camera_extrinsic_matrix=B.xc,h7=r._heif_camera_extrinsic_matrix_release=B.yc,m7=r._heif_camera_extrinsic_matrix_get_rotation_matrix=B.zc,N7=r._heif_register_decoder=B.Ac,f7=r._heif_register_decoder_plugin=B.Bc,v7=r._heif_register_encoder_plugin=B.Cc,F7=r._heif_context_write_to_file=B.Dc,I7=r._heif_context_write=B.Ec,g7=r._heif_context_add_compatible_brand=B.Fc,x7=r._heif_context_get_encoder_descriptors=B.Gc,L7=r._heif_get_encoder_descriptors=B.Hc,y7=r._heif_encoder_descriptor_get_name=B.Ic,O7=r._heif_encoder_descriptor_get_id_name=B.Jc,J7=r._heif_get_decoder_descriptors=B.Kc,b7=r._heif_decoder_descriptor_get_name=B.Lc,D7=r._heif_decoder_descriptor_get_id_name=B.Mc,w7=r._heif_encoder_descriptor_get_compression_format=B.Nc,C7=r._heif_encoder_descriptor_supports_lossy_compression=B.Oc,S7=r._heif_encoder_descriptor_supports_lossless_compression=B.Pc,P7=r._heif_encoder_descriptor_supportes_lossy_compression=B.Qc,M7=r._heif_encoder_descriptor_supportes_lossless_compression=B.Rc,K7=r._heif_encoder_get_name=B.Sc,T7=r._heif_context_get_encoder=B.Tc,X7=r._heif_have_decoder_for_format=B.Uc,R7=r._heif_have_encoder_for_format=B.Vc,V7=r._heif_context_get_encoder_for_format=B.Wc,U7=r._heif_encoder_release=B.Xc,Y7=r._heif_encoder_set_lossy_quality=B.Yc,z7=r._heif_encoder_set_lossless=B.Zc,W7=r._heif_encoder_set_logging_level=B._c,Z7=r._heif_encoder_list_parameters=B.$c,Q7=r._heif_encoder_parameter_get_name=B.ad,Al=r._heif_encoder_parameter_get_type=B.bd,jl=r._heif_encoder_set_parameter_integer=B.cd,tl=r._heif_encoder_parameter_get_valid_integer_values=B.dd,el=r._heif_encoder_get_parameter_integer=B.ed,rl=r._heif_encoder_parameter_get_valid_integer_range=B.fd,kl=r._heif_encoder_parameter_get_valid_string_values=B.gd,ll=r._heif_encoder_parameter_integer_valid_range=B.hd,Bl=r._heif_encoder_set_parameter_boolean=B.id,_l=r._heif_encoder_get_parameter_boolean=B.jd,al=r._heif_encoder_set_parameter_string=B.kd,ol=r._heif_encoder_get_parameter_string=B.ld,il=r._heif_encoder_parameter_string_valid_values=B.md,El=r._heif_encoder_parameter_integer_valid_values=B.nd,nl=r._heif_encoder_set_parameter=B.od,sl=r._heif_encoder_get_parameter=B.pd,Gl=r._heif_encoder_has_default=B.qd,dl=r._heif_encoding_options_alloc=B.rd,$l=r._heif_encoding_options_free=B.sd,ul=r._heif_context_encode_image=B.td,pl=r._heif_context_encode_grid=B.ud,Hl=r._heif_context_add_grid_image=B.vd,cl=r._heif_context_add_overlay_image=B.wd,ql=r._heif_context_add_image_tile=B.xd,hl=r._heif_context_assign_thumbnail=B.yd,ml=r._heif_context_encode_thumbnail=B.zd,Nl=r._heif_context_set_primary_image=B.Ad,fl=r._heif_context_add_exif_metadata=B.Bd,vl=r._heif_context_add_XMP_metadata=B.Cd,Fl=r._heif_context_add_XMP_metadata2=B.Dd,Il=r._heif_context_add_generic_metadata=B.Ed,gl=r._heif_context_add_generic_uri_metadata=B.Fd,xl=r._heif_context_set_maximum_image_size_limit=B.Gd,Ll=r._heif_context_set_max_decoding_threads=B.Hd,yl=r._heif_image_handle_get_number_of_region_items=B.Id,Ol=r._heif_image_handle_get_list_of_region_item_ids=B.Jd,Jl=r._heif_context_get_region_item=B.Kd,bl=r._heif_region_item_get_id=B.Ld,Dl=r._heif_region_item_release=B.Md,wl=r._heif_region_item_get_reference_size=B.Nd,Cl=r._heif_region_item_get_number_of_regions=B.Od,Sl=r._heif_region_item_get_list_of_regions=B.Pd,Pl=r._heif_image_handle_add_region_item=B.Qd,Ml=r._heif_region_item_add_region_point=B.Rd,Kl=r._heif_region_item_add_region_rectangle=B.Sd,Tl=r._heif_region_item_add_region_ellipse=B.Td,Xl=r._heif_region_item_add_region_polygon=B.Ud,Rl=r._heif_region_item_add_region_polyline=B.Vd,Vl=r._heif_region_item_add_region_referenced_mask=B.Wd,Ul=r._heif_region_item_add_region_inline_mask_data=B.Xd,Yl=r._heif_region_item_add_region_inline_mask=B.Yd,zl=r._heif_region_release=B.Zd,Wl=r._heif_region_release_many=B._d,Zl=r._heif_region_get_type=B.$d,Ql=r._heif_region_get_point=B.ae,AB=r._heif_region_get_point_transformed=B.be,jB=r._heif_region_get_rectangle=B.ce,tB=r._heif_region_get_rectangle_transformed=B.de,eB=r._heif_region_get_ellipse=B.ee,rB=r._heif_region_get_ellipse_transformed=B.fe,kB=r._heif_region_get_polygon_num_points=B.ge,lB=r._heif_region_get_polyline_num_points=B.he,BB=r._heif_region_get_polygon_points=B.ie,_B=r._heif_region_get_polyline_points=B.je,aB=r._heif_region_get_polygon_points_transformed=B.ke,oB=r._heif_region_get_polyline_points_transformed=B.le,iB=r._heif_region_get_referenced_mask_ID=B.me,EB=r._heif_region_get_inline_mask_data_len=B.ne,nB=r._heif_region_get_inline_mask_data=B.oe,sB=r._heif_region_get_mask_image=B.pe,GB=r._heif_item_get_properties_of_type=B.qe,dB=r._heif_item_get_transformation_properties=B.re,$B=r._heif_item_get_property_type=B.se,uB=r._heif_item_get_property_user_description=B.te,pB=r._heif_item_add_property_user_description=B.ue,HB=r._heif_item_get_property_transform_mirror=B.ve,cB=r._heif_item_get_property_transform_rotation_ccw=B.we,qB=r._heif_item_get_property_transform_crop_borders=B.xe,hB=r._heif_property_user_description_release=B.ye,mB=r._heif_item_add_raw_property=B.ze,NB=r._heif_item_get_property_raw_size=B.Ae,fB=r._heif_item_get_property_raw_data=B.Be,vB=r._heif_item_get_property_uuid_type=B.Ce,FB=r._heif_context_get_number_of_items=B.De,IB=r._heif_context_get_list_of_item_IDs=B.Ee,gB=r._heif_item_get_item_type=B.Fe,xB=r._heif_item_is_item_hidden=B.Ge,LB=r._heif_item_get_mime_item_content_type=B.He,yB=r._heif_item_get_mime_item_content_encoding=B.Ie,OB=r._heif_item_get_uri_item_uri_type=B.Je,JB=r._heif_item_get_item_name=B.Ke,bB=r._heif_item_get_item_data=B.Le,DB=r._heif_release_item_data=B.Me,wB=r._heif_context_get_item_references=B.Ne,CB=r._heif_release_item_references=B.Oe,SB=r._heif_context_add_item=B.Pe,PB=r._heif_context_add_mime_item=B.Qe,MB=r._heif_context_add_precompressed_mime_item=B.Re,KB=r._heif_context_add_uri_item=B.Se,TB=r._heif_context_add_item_reference=B.Te,XB=r._heif_context_add_item_references=B.Ue,RB=r._heif_item_set_item_name=B.Ve,VB=r._de265_get_version=B.We,UB=r._de265_init=B.Xe,YB=r._de265_free=B.Ye,zB=r._de265_new_decoder=B.Ze,WB=r._de265_set_parameter_bool=B._e,ZB=r._de265_free_decoder=B.$e,QB=r._de265_push_NAL=B.af,A_=r._de265_flush_data=B.bf,j_=r._de265_decode=B.cf,t_=r._de265_get_next_picture=B.df,e_=r._de265_get_chroma_format=B.ef,r_=r._de265_get_image_width=B.ff,k_=r._de265_get_image_height=B.gf,l_=r._de265_get_bits_per_pixel=B.hf,B_=r._de265_get_image_plane=B.jf,__=r._de265_get_image_colour_primaries=B.kf,a_=r._de265_get_image_transfer_characteristics=B.lf,o_=r._de265_get_image_matrix_coefficients=B.mf,i_=r._de265_get_image_full_range_flag=B.nf,E_=r._de265_release_next_picture=B.of,ve=B.pf,Fe=B.qf,n_=r.dynCall_ji=B.rf,s_=r.dynCall_iij=B.sf,G_=r.dynCall_jijj=B.tf,d_=r.dynCall_vijj=B.uf,$_=r.dynCall_jiji=B.vf,u_=r.dynCall_viijii=B.wf,p_=r.dynCall_iiiiij=B.xf,H_=r.dynCall_iiiiijj=B.yf,c_=r.dynCall_iiiiiijj=B.zf,q_=r._heif_error_ok=80028,h_=r._heif_error_success=79460,m_=r._heif_error_invalid_parameter_value=80052,N_=r._heif_error_unsupported_parameter=80040,DA;EA=function A(){DA||Vj(),DA||(EA=A)};function Vj(){if(tA>0||(E6(),tA>0))return;function A(){DA||(DA=!0,r.calledRun=!0,!pj&&(n6(),z(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),s6()))}r.setStatus?(r.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){r.setStatus(\"\")},1),A()},1)):A()}if(r.preInit)for(typeof r.preInit==\"function\"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();Vj();function Uj(A){for(var j=new ArrayBuffer(A.length),t=new Uint8Array(j),e=0,l=A.length;e<l;e++)t[e]=A.charCodeAt(e);return j}var Q=function(A){this.handle=A,this.img=null};Q.prototype.free=function(){this.handle&&(r.heif_image_handle_release(this.handle),this.handle=null)},Q.prototype._ensureImage=function(){if(!this.img){var A=r.heif_js_decode_image(this.handle,r.heif_colorspace.heif_colorspace_YCbCr,r.heif_chroma.heif_chroma_420);if(!A||A.code){console.log(\"Decoding image failed\",this.handle,A);return}this.data=new Uint8Array(Uj(A.data)),delete A.data,this.img=A,A.alpha!==void 0&&(this.alpha=new Uint8Array(Uj(A.alpha)),delete A.alpha)}},Q.prototype.get_width=function(){return r.heif_image_handle_get_width(this.handle)},Q.prototype.get_height=function(){return r.heif_image_handle_get_height(this.handle)},Q.prototype.is_primary=function(){return!!heif_image_handle_is_primary_image(this.handle)},Q.prototype.display=function(A,j){var t=this.get_width(),e=this.get_height();setTimeout(function(){if(!this.img){var l=r.heif_js_decode_image2(this.handle,r.heif_colorspace.heif_colorspace_RGB,r.heif_chroma.heif_chroma_interleaved_RGBA);if(!l||l.code){console.log(\"Decoding image failed\",this.handle,l),j(null);return}for(let _ of l.channels)if(_.id==r.heif_channel.heif_channel_interleaved)if(_.stride==_.width*4)A.data.set(_.data);else for(let a=0;a<_.height;a++){let o=_.data.slice(a*_.stride,a*_.stride+_.width*4),i=a*_.width*4;A.data.set(o,i)}r.heif_image_release(l.image)}j(A)}.bind(this),0)};var Yj=function(){this.decoder=null};Yj.prototype.decode=function(A){if(this.decoder&&r.heif_context_free(this.decoder),this.decoder=r.heif_context_alloc(),!this.decoder)return console.log(\"Could not create HEIF context\"),[];var j=r.heif_context_read_from_memory(this.decoder,A);if(j.code!==r.heif_error_code.heif_error_Ok)return console.log(\"Could not parse HEIF file\",j.message),[];var t=r.heif_js_context_get_list_of_top_level_image_IDs(this.decoder);if(!t||t.code)return console.log(\"Error loading image ids\",t),[];if(!t.length)return console.log(\"No images found\"),[];for(var e=[],l=0;l<t.length;l++){var _=r.heif_js_context_get_image_handle(this.decoder,t[l]);if(!_||_.code){console.log(\"Could not get image data for id\",t[l],_);continue}e.push(new Q(_))}return e};var Ie=function(A){return A.charCodeAt(0)<<24|A.charCodeAt(1)<<16|A.charCodeAt(2)<<8|A.charCodeAt(3)};r.HeifImage=Q,r.HeifDecoder=Yj,r.fourcc=Ie;let ge=[\"heif_error_code\",\"heif_suberror_code\",\"heif_compression_format\",\"heif_chroma\",\"heif_colorspace\",\"heif_channel\"];for(let A of ge)for(let j in r[A])!r[A].hasOwnProperty(j)||j===\"values\"||(r[j]=r[A][j]);for(let A in r)A.indexOf(\"_heif_\")!==0||r[A.slice(1)]!==void 0||(r[A.slice(1)]=r[A]);return K=r,K}})();typeof k6==\"object\"&&typeof nj==\"object\"?nj.exports=r6:typeof define==\"function\"&&define.amd&&define([],()=>r6)});var Me={};De(Me,{default:()=>Pe});var _6=we(l6());var B6=Qj(\"AGFzbQEAAAAB8ARJYAF/AGABfwF/YAJ/fwBgA39/fwBgA39/fwF/YAJ/fwF/YAR/f39/AGAFf39/f38AYAd/f39/f39/AGAGf39/f39/AGAEf39/fwF/YAZ/f39/f38Bf2AFf39/f38Bf2AIf39/f39/f38AYAAAYAABf2ACf34Bf2AKf39/f39/f39/fwBgAX8BfmAIf39/f39/f38Bf2AJf39/f39/f39/AGAHf39/f39/fwF/YAN/fn4BfmADf35/AX5gBX9/fn9/AGAFf35+fn4AYAV/f39/fgF/YA1/f39/f39/f39/f39/AGAEf35+fwBgA39+fgBgBX9/f398AX9gC39/f39/f39/f39/AX9gCn9/f39/f39/f38Bf2ACfn8Bf2APf39/f39/f39/f39/f39/AGAMf39/f39/f39/f39/AGAHf39/f39+fgF/YAZ/f39/fn4Bf2ADf39+AGACfH8BfGAGf39/f35+AGADf35/AX9gDH9/f39/f39/f39/fwF/YAF8AXxgDn9/f39/f39/f39/f39/AGACf38BfmAEf39/fwF+YAZ/fH9/f38Bf2ADfn5/AGAFf39/f38BfGACf3wBf2ACf34AYAJ/fABgAX0Bf2AEfn5+fgF/YAR/f39+AX5gA3x8fwF8YAJ8fAF8YAl/f39/f39+fn8AYAt/f39/f39/f39/fwBgA39+fwBgAn5+AXxgBH9/fn4AYAN/f38BfGADf39/AX1gAn5+AX1gBH9+fn4AYAN+fn4Bf2ACfH8Bf2AKf39/f39/f35/fwF/YAZ/f39+f38Bf2AFf39/fn8Bf2AJf39/f39/f39/AX8C/QEqAWEBYQADAWEBYgAGAWEBYwAAAWEBZAAFAWEBZQADAWEBZgAIAWEBZwADAWEBaAABAWEBaQAHAWEBagAGAWEBawAPAWEBbAARAWEBbQAbAWEBbgAKAWEBbwADAWEBcAADAWEBcQAPAWEBcgAEAWEBcwABAWEBdAAKAWEBdQACAWEBdgADAWEBdwAAAWEBeAAJAWEBeQAMAWEBegAIAWEBQQAMAWEBQgAEAWEBQwAOAWEBRAABAWEBRQAEAWEBRgAKAWEBRwAFAWEBSAAFAWEBSQADAWEBSgAAAWEBSwAGAWEBTAACAWEBTQAAAWEBTgAxAWEBTwAEAWEBUAAAA+0P6w8AAAEE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QCABIAggAyABKAIAKAIwEQQAIANHDQELIAZBADYCDCABIQILIAVBEGokACACDAELEDgACw0AIAAgACgCAEEMaygCAGoiASABKAIQQQVyEHoLIAsQciAHQRBqJAAgAAvaAQECfyMAQRBrIgQkAAJAAkAgAkELSQRAIAAiAyAALQALQYABcSACQf8AcXI6AAsgACAALQALQf8AcToACwwBCyACQff///8HSw0BIARBCGogAkELTwR/IAJBCGpBeHEiAyADQQFrIgMgA0ELRhsFQQoLQQFqEPIBIAQoAgwaIAAgBCgCCCIDNgIAIAAgACgCCEGAgICAeHEgBCgCDEH/////B3FyNgIIIAAgACgCCEGAgICAeHI2AgggACACNgIECyABIAJBAWogAxCxASAEQRBqJAAPCxCKAQALSQAgACACNgIEIAAgATYCACAAQQhqIQEgAywAC0EATgRAIAEgAykCADcCACABIAMoAgg2AgggAA8LIAEgAygCACADKAIEEC4gAAtYAQN/IwBBEGsiAyQAQZSvAygCACEEIAEtAABBKkYiBUUEQEGEwwFBBkEBIAQQeBoLIAMgAjYCDCAAIAEgBWogAkGPCkGQChDbAhogBBDPARogA0EQaiQAC7YBAgN/An4CQCAAKAIQIgIgAU4NACACQThKDQBBwAAgAmutIQUgACgCBCECA0ACQCAFpyEEIAJFBEAgBCEDDAELIAAgACgCACIDQQFqNgIAIAMxAAAhBiAAIAJBAWsiAjYCBCAAIAApAwggBiAEQQhrIgOthoQ3AwggBUIIfSEFIARBD0oNAQsLQcAAIANrIQILIAAgAiABazYCECAAIAApAwgiBSABrYY3AwggBUHAACABa62IpwuABAEDfyACQYAETwRAIAAgASACECIgAA8LIAAgAmohAwJAIAAgAXNBA3FFBEACQCAAQQNxRQRAIAAhAgwBCyACRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAkEDcUUNASACIANJDQALCwJAIANBfHEiBEHAAEkNACACIARBQGoiBUsNAANAIAIgASgCADYCACACIAEoAgQ2AgQgAiABKAIINgIIIAIgASgCDDYCDCACIAEoAhA2AhAgAiABKAIUNgIUIAIgASgCGDYCGCACIAEoAhw2AhwgAiABKAIgNgIg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AiwgA0IANwIUIANBADYCECADIAI2AgwgAyAFNgIEIANBADYCPCADQoGAgICAgICAATcCNCADIAA2AgggBSADQQRqIAYgBkEBQQAgBSgCACgCFBEJACAAQQAgAygCHBshBwsgA0FAayQAIAciAw0AIwBBQGoiAyQAIANBADYCECADIAE2AgwgAyAANgIIIAMgAjYCBEEAIQAgA0EUakEAQScQNBogA0EANgI8IANBAToAOyAFIANBBGogBkEBQQAgBSgCACgCGBEHAAJAAkACQCADKAIoDgIAAQILIAMoAhhBACADKAIkQQFGG0EAIAMoAiBBAUYbQQAgAygCLEEBRhshAAwBCyADKAIcQQFHBEAgAygCLA0BIAMoAiBBAUcNASADKAIkQQFHDQELIAMoAhQhAAsgA0FAayQAIAAhAwsgBEEQaiQAIAML9wQBAX8jAEFAaiIHJAAgB0IANwMoIAdCADcDMCAHQQA2AjggB0IANwMgIAdBgAI7ARwgB0EBNgIYIAcgB0EYaiADIARBAUEIQQggBSABKAIkIgNBCkYbIAUgBUEYRhsiBCAEQSBGGyAEIANBC0YbAn9BASEEAkACQAJAAkAgAw5kAwMDAwICAgICAgABAAEAAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwILQQMMAwtBBAwCC0EAIQQLIAQLIAYQuQICQCAHKAIABEAgACAHKQMANwIAIAAgBygCEDYCECAAIAcpAwg3AgggB0EANgIQIAdCADcDCAwBCwJAAkAgASgCQCIDRQRAIAFBQGsiBiEFDAELA0AgAiADIgUoAhAiA0gEQCAFIgYoAgAiAw0BDAILIAIgA0wNAiAFKAIEIgMNAAsgBUEEaiEGC0E4ECwiAyACNgIQIAMgBykDGDcCFCADIAcpAyA3AhwgAyAHKQMoNwIkIAMgBykDMDcCLCADIAcoAjg2AjQgAyAFNgIIIANCADcCACAGIAM2AgAgASgCPCgCACICBEAgASACNgI8IAYoAgAhAwsgASgCQCADEI4BIAEgASgCREEBajYCRAsgAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyAHLAATQQBIBEAgBygCEBogBygCCBAqCyAHQUBrJAALagECfyAAQfTZAzYCACAAKAIoIQEDQCABBEBBACAAIAFBAWsiAUECdCICIAAoAiRqKAIAIAAoAiAgAmooAgARAwAMAQsLIABBHGoQRyAAKAIgECogACgCJBAqIAAoAjAQKiAAKAI8ECogAAvWAQEFfyMAQRBrIgIkACACQQhqIAAQcxoCQCACLQAIRQ0AIAJBBGoiBCAAIAAoAgBBDGsoAgBqKAIcIgM2AgAgA0HszgZHBEAgAyADKAIEQQFqNgIECyAEQeTNBhBDIQMgBBBHIAIgACAAKAIAQQxrKAIAaigCGDYCACAAIAAoAgBBDGsoAgBqIgUQlAIhBiACIAMgAigCACAFIAYgASADKAIAKAIYEQwANgIEIAQoAgANACAAIAAoAgBBDGsoAgBqQQUQowELIAJBCGoQciACQRBqJAAgAAsUACAAQdjIAzYCACAAQQRqEEcgAAs/ACAAQQA2AhQgACABNgIYIABBADYCDCAAQoKggIDgADcCBCAAIAFFNgIQIABBIGpBAEEoEDQaIABBHGoQpQMLKgAgAEHYyAM2AgAgAEEEahClAyAAQgA3AhggAEIANwIQIABCADcCCCAAC18BA38Cf0H/ASAAKAJAIgJFDQAaIABBQGsiAyEAA0AgACACIAIoAhAgAUgiBBshACACIARBAnRqKAIAIgINAAtB/wEgACADRg0AGkH/ASAAKAIQIAFKDQAaIAAtABgLC+QOAQZ/IwBBoAFrIgQkACABKAIAIQMCQCAAAn8CQAJAAkAgAgRAIANFBEAgAkGKrAIiAzYCDEEADAULIARBoNMDNgIYIARBtNMDNgJQIARBxNMDKAIAIgM2AhAgBEEQaiIHIgUgA0EMaygCAGpByNMDKAIANgIAIARBADYCFCAFIAQoAhBBDGsoAgBqIgMgBEEcaiIGED4gA0KAgICAcDcCSCAEQczTAygCACIDNgIYIARBGGoiBSADQQxrKAIAakHQ0wMoAgA2AgAgBEHA0wMoAgAiAzYCECAHIANBDGsoAgBqQdTTAygCADYCACAEQbTTAzYCUCAEQYzTAzYCECAEQaDTAzYCGCAGED8iB0HwywM2AgAgBEIANwJEIARCADcCPCAEQRg2AkwgBSABKAIAIgNBDEsEf0HcKwUgA0ECdEHc4gRqKAIACyIDIAMQWBAtQbTEAUECEC0CfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABKAIEIgNBzw9MBEBB2O0AIQYCQCADDpcBTk1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQIDBgcICQoODxAREhMUFhcYGQQFGhscHR4VHyAhIiMMJCUmJygpKissCy4NTU1NTU0vLQALIANB6AdrDgIvMEwLIANBnx9MBEACQCADQdAPaw4JMjM0NTY3ODk6AAsgA0G4F2sOCDo7PD0+P0BBTAsCQCADQYgnaw4FQkNERUYACyADQfAuaw4ERkdISUoLQfHUAAxNC0GGygAMTAtB5PkADEsLQaomDEoLQfoSDEkLQdASDEgLQYwUDEcLQd4SDEYLQbYUDEULQagUDEQLQdIUDEMLQcQUDEILQaQTDEELQZYTDEALQZoUDD8LQf4TDD4LQdQTDD0LQYgTDDwLQeITDDsLQfATDDoLQf0uDDkLQZYKDDgLQfw8DDcLQaD5AAw2C0GNNQw1C0HC+AAMNAtB6PoADDMLQabtAAwyC0HhPAwxC0HO0QAMMAtBhx4MLwtBqjEMLgtB7MoADC0LQcERDCwLQbjFAAwrC0H1JAwqC0HaJwwpC0HCHwwoC0Gx+QAMJwtB1QoMJgtB4+sADCULQcHrAAwkC0GcPgwjC0HfNAwiC0HsEgwhC0GyEwwgC0GK7gAMHwtB4SwMHgtB3PEADB0LQZHkAAwcC0Gq8AAMGwtBreUADBoLQfvkAAwZC0G4LgwYC0GEzQAMFwtBxAoMFgtBttYADBULQab0AAwUC0Hp0QAMEwtBnzcMEgtB3TUMEQtBiOMADBALQa3jAAwPC0HT4wAMDgtB8gkMDQtB1/gADAwLQc89DAsLQeY9DAoLQb89DAkLQcSYAQwIC0Gw7wAMBwtBg+8ADAYLQbchDAULQc46DAQLIANBoB9GDQILQdjiBCgCACEGCyAGDAELQaLFAAsiAyADEFgQLRogASgCDCABLAATIgMgA0EASBsEQCAFQbTEAUECEC0gASgCCCABQQhqIAEsABMiA0EASCIFGyABKAIMIAMgBRsQLRoLAn8gBCgCTCIDQRBxBEAgBCgCSCIDIAQoAjQiBUkEQCAEIAU2AkggBSEDCyAEQTBqDAELIANBCHFFBEBBACEDIARBADoADyAEQQRqIQUMBQsgBCgCLCEDIARBJGoLIQUgAyAFKAIAIgZrIgNB+P///wdPDQEgA0ELTwRAIANBB3JBAWoiCBAsIQUgBCAIQYCAgIB4cjYCDCAEIAU2AgQgBCADNgIIDAMLIAQgAzoADyAEQQRqIQUgAw0CQQAhAwwDCyAAIAM2AgAgACABKAIENgIEQdjiBCgCACEDDAQLEDgACyAFIAYgAxA3GgsgAyAFakEAOgAAAkAgBEEEaiACRg0AIAQsAA8hAyACLAALQQBOBEAgA0EATgRAIAIgBCkCBDcCACACIAQoAgw2AggMAgsgAiAEKAIEIAQoAggQlwEMAQsgAiAEKAIEIARBBGogA0EASCIFGyAEKAIIIAMgBRsQnQELIAIgAigCACACIAIsAAtBAEgbNgIMIAQsAA9BAEgEQCAEKAIMGiAEKAIEECoLIARBvNMDKAIAIgM2AhAgA0EMaygCACAEQRBqakHc0wMoAgA2AgAgBEHg0wMoAgA2AhggB0HwywM2AgAgBCwAR0EASARAIAQoAkQaIAQoAjwQKgsgBxA9GiAEQdAAahA7GiACKAIMIQMgASgCAAs2AgAgACABKAIENgIECyAAIAM2AgggBEGgAWokAAveAQEFfyMAQRBrIgIkACACQQhqIAAQcxoCQCACLQAIRQ0AIAAgACgCAEEMaygCAGoiAygCBBogAkEEaiIEIAMoAhwiAzYCACADQezOBkcEQCADIAMoAgRBAWo2AgQLIARB5M0GEEMhAyAEEEcgAiAAIAAoAgBBDGsoAgBqKAIYNgIAIAAgACgCAEEMaygCAGoiBRCUAiEGIAIgAyACKAIAIAUgBiABIAMoAgAoAhARDAA2AgQgBCgCAA0AIAAgACgCAEEMaygCAGpBBRCjAQsgAkEIahByIAJBEGokACAACycAIAAoAgAiACABEGciARDxBEUEQBBsAAsgACgCCCABQQJ0aigCAAunAwIEfwN+IAApAwghBSAAKAIQIQECQANAIAACfyABQQBKBEAgBSEGIAEMAQtBwAAgAWutIQcgACgCBCEBIAUhBgNAAkAgB6chBCABRQRAIAQhAgwBCyAAIAAoAgAiAkEBajYCACACMQAAIQUgACABQQFrIgE2AgQgACAGIAUgBEEIayICrYaEIgY3AwggB0IIfSEHIARBD0oNAQsLQcAAIAJrCyICQQFrIgE2AhAgACAGQgGGIgU3AwggBkIAUw0BIANBAWoiA0EVRw0AC0Hh8nkPCyADRQRAQQAPCwJAIAIgA0oNACACQTlKDQBBwQAgAmutIQcgACgCBCEBA0ACQCAHpyEEIAFFBEAgBCECDAELIAAgACgCACICQQFqNgIAIAIxAAAhBiAAIAFBAWsiATYCBCAAIAUgBiAEQQhrIgKthoQiBTcDCCAHQgh9IQcgBEEPSg0BCwtBwAAgAmshAQsgACABIANrNgIQIAAgBSADrYY3AwggBUHAACADa62Ip0EBIAN0aiIAQQFKBEAgAEEBaw8LQbeOAUGZ9QBBkgFByfMAEAEAC8QBAgV/A34CQCAAKAIYIgIgAU4NACACQThKDQBBwAAgAmutIQcgACkDECEIIAAoAgghAiAAKAIAIQMDQAJAIAenIQQgAkUEQCAEIQUMAQsgACADQQFqIgY2AgAgAzEAACEJIAAgAkEBayICNgIIIAAgCSAEQQhrIgWthiAIhCIINwMQIAdCCH0hByAGIQMgBEEPSg0BCwtBwAAgBWshAgsgACACIAFrNgIYIAAgACkDECIHIAGthjcDECAHQcAAIAFrrYinCx8AIAAtAAtBB3YEQCAAKAIIGiAAKAIAQQEQvwELIAALNwEBfyAAKAIAIgBB7M4GRwRAIAAgACgCBEEBayIBNgIEIAFBf0YEQCAAIAAoAgAoAggRAAALCwuaAwEIfwJAIAAoAgwiAiAAKAIEIgYgACgCACIEayIIRgRAAkAgACgCCCIHIAZLBEAgBiABOgAAIAZBAWohBQwBCyACQQFqIgNBAEgNAiACQf////8HIAcgBGsiB0EBdCIFIAMgAyAFSRsgB0H/////A08bIgUEfyAFECwFQQALIgdqIgMgAToAACAFIAdqIQkgA0EBaiEFAkAgBCAGRgRAIAMhBwwBCwJAIAhBA3EiCEUEQCAGIQIMAQtBACEBIAYhAgNAIANBAWsiAyACQQFrIgItAAA6AAAgAUEBaiIBIAhHDQALCyAEIAZrQXxNBEADQCADQQFrIAJBAWstAAA6AAAgA0ECayACQQJrLQAAOgAAIANBA2sgAkEDay0AADoAACADQQRrIgMgAkEEayICLQAAOgAAIAIgBEcNAAsLIAAoAggaIAAoAgAhBAsgACAJNgIIIAAgBTYCBCAAIAc2AgAgBEUNACAEECoLIAAgBTYCBCAAIAAoAgxBAWo2AgwPCyAAIAJBAWo2AgwgAiAEaiABOgAADwsQNgALtgEBA38jAEEQayIDJAACQCAAQQQQiwFFDQAgACgCACECIAAoAgQiAQRAIAEgASgCBEEBajYCBAsCfyACIANBDGpBBCACKAIAKAIQEQQARQRAIAAQogFBAAwBCyADKAAMIgBBGHQgAEGA/gNxQQh0ciAAQQh2QYD+A3EgAEEYdnJyCyECIAFFDQAgASABKAIEIgBBAWs2AgQgAA0AIAEgASgCACgCCBEAACABECsLIANBEGokACACC6sBAQR/IAAoAgwiAkEEaiIEIAAoAgQgACgCACIDayIFSwRAIAAgBCAFaxBlIAAoAgAhAyAAKAIMIQILIAAgAkEBajYCDCACIANqIAFBGHY6AAAgACAAKAIMIgJBAWo2AgwgAiAAKAIAaiABQRB2OgAAIAAgACgCDCICQQFqNgIMIAIgACgCAGogAUEIdjoAACAAIAAoAgwiAkEBajYCDCACIAAoAgBqIAE6AAALEwAgAEEQaiAAKAIQKAIAEQEAGgv4AgEDfyAAIAAoAgwiAiABLQAAQQF0QfwDcSACQQZ2akGM+gJqLQAAIgNrIgI2AgwCQCAAKAIQIgQgAkEHdCICSQRAIAEgAS0AACIBQQF2QZD8AmotAABBAXQgAUEBcSIBcjoAACACQf//AUsNASAAIAJBBnY2AgwgACAAKAIQQQF0IgM2AhAgACAALwEUQQFqIgI7ARQgAkH//wNxIAJGDQEgAEH4/wM7ARQgACgCBCICIAAoAghPDQEgACACQQFqNgIEIAAgAyACLQAAcjYCECABDwsgACADIANBA3ZB0PwCai0AACIDdDYCDCAAIAQgAmsgA3Q2AhAgASABLQAAIgJBAXZB8PwCai0AAEEBdCACQQFxIgRFIgEgBCACQQJJG3I6AAAgACADIAAvARRqIgI7ARQgAsEiAkEASA0AIAAoAgQiAyAAKAIISQRAIAAgA0EBajYCBCAAIAAoAhAgAy0AACACdHI2AhALIAAgAkEIazsBFAsgAQttAQR/IAAoAgwiAkECaiIEIAAoAgQgACgCACIDayIFSwRAIAAgBCAFaxBlIAAoAgAhAyAAKAIMIQILIAAgAkEBajYCDCACIANqIAFBCHY6AAAgACAAKAIMIgJBAWo2AgwgAiAAKAIAaiABOgAAC6UBAQN/IwBBEGsiAyQAAkAgAEECEIsBRQ0AIAAoAgAhAiAAKAIEIgEEQCABIAEoAgRBAWo2AgQLAn8gAiADQQ5qQQIgAigCACgCEBEEAEUEQCAAEKIBQQAMAQsgAy8ADiIAQQh0IABBCHZyCyECIAFFDQAgASABKAIEIgBBAWs2AgQgAA0AIAEgASgCACgCCBEAACABECsLIANBEGokACACQf//A3ELLwEBf0EEEKADIgBBgLoENgIAIABB2LkENgIAIABB7LkENgIAIABB3LoEQSAQDwALgwIBA38CQAJ/IAAtAAtBB3YEQCAAKAIEDAELIAAtAAtB/wBxCyICIAFJBEAjAEEQayIEJAAgASACayICBEAgAiAALQALQQd2BH8gACgCCEH/////B3FBAWsFQQoLIgMCfyAALQALQQd2BEAgACgCBAwBCyAALQALQf8AcQsiAWtLBEAgACADIAIgA2sgAWogASABEKkDCyABAn8gAC0AC0EHdgRAIAAoAgAMAQsgAAsiA2ogAkEAENYEIAAgASACaiIAENgBIARBADoADyAAIANqIAQtAA86AAALIARBEGokAAwBCyAAAn8gAC0AC0EHdgRAIAAoAgAMAQsgAAsgARDgBAsLlAEBAn8CQAJAIAJFDQAgACgCpAEiA0EASgRAIABB1ABqIQRBACECA0AgBCACQQJ0aigCACABRg0DIAJBAWoiAiADRw0ACyADQRNKDQELIAAgA0EBajYCpAEgACADQQJ0aiABNgJUCyAAKAJQIgJBFEYEQCAAQekHNgJMDwsgACACQQFqNgJQIAAgAkECdGogATYCAAsLlQEBA38jAEEQayIDJAACQCAAQQEQiwFFDQAgACgCACECIAAoAgQiAQRAIAEgASgCBEEBajYCBAsCfyACIANBD2pBASACKAIAKAIQEQQARQRAIAAQogFBAAwBCyADLQAPCyECIAFFDQAgASABKAIEIgBBAWs2AgQgAA0AIAEgASgCACgCCBEAACABECsLIANBEGokACACC/ECAQZ/AkAgACgCBCIEIAAoAgAiB2tBA3UiBkEBaiICQYCAgIACSQRAQf////8BIAAoAgggB2siA0ECdSIFIAIgAiAFSRsgA0H4////B08bIgMEfyADQYCAgIACTw0CIANBA3QQLAVBAAsiBSAGQQN0aiICIAEoAgA2AgAgAiABKAIENgIEIAFCADcCACAFIANBA3RqIQUgAkEIaiEGAkAgBCAHRgRAIAIhAQwBCwNAIAJBCGsiASAEQQhrIgMoAgA2AgAgAkEEayAEQQRrKAIANgIAIANCADcCACABIQIgAyIEIAdHDQALCyAAKAIAIQIgACABNgIAIAAoAgQhASAAIAY2AgQgACgCCBogACAFNgIIIAEgAkcEQANAAkAgAUEEaygCACIARQ0AIAAgACgCBCIEQQFrNgIEIAQNACAAIAAoAgAoAggRAAAgABArCyABQQhrIgEgAkcNAAsLIAIEQCACECoLIAYPCxA2AAsQTwALtwECBX8DfgJAIAAoAhgiAiABTg0AIAJBOEoNAEHAACACa60hByAAKQMQIQggACgCCCECIAAoAgAhAwNAAkAgB6chBCACRQRAIAQhBQwBCyAAIANBAWoiBjYCACADMQAAIQkgACACQQFrIgI2AgggACAJIARBCGsiBa2GIAiEIgg3AxAgB0IIfSEHIAYhAyAEQQ9KDQELC0HAACAFayECCyAAIAIgAWs2AhggACAAKQMQIAGthjcDEAvUKAEMfyMAQRBrIgokAAJAAkACQAJAAkACQAJAAkACQAJAIABB9AFNBEBBqLgGKAIAIgRBECAAQQtqQfgDcSAAQQtJGyIGQQN2IgB2IgFBA3EEQAJAIAFBf3NBAXEgAGoiAkEDdCIBQdC4BmoiACABQdi4BmooAgAiASgCCCIFRgRAQai4BiAEQX4gAndxNgIADAELIAUgADYCDCAAIAU2AggLIAFBCGohACABIAJBA3QiAkEDcjYCBCABIAJqIgEgASgCBEEBcjYCBAwLCyAGQbC4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B2ohCCABIAYgB2oiAkEAIAEQNCIDaiEJAkAgBCAFRgRAIAMhBwwBCwJAIAZBA3EiBkUEQCAEIQEMAQtBACEDIAQhAQNAIAJBAWsiAiABQQFrIgEtAAA6AAAgA0EBaiIDIAZHDQALCyAFIARrQXxNBEADQCACQQFrIAFBAWstAAA6AAAgAkECayABQQJrLQAAOgAAIAJBA2sgAUEDay0AADoAACACQQRrIgIgAUEEayIBLQAAOgAAIAEgBUcNAAsLIAAoAggaIAAoAgAhBQsgACAINgIIIAAgCTYCBCAAIAc2AgAgBQRAIAUQKgsPCxA2AAvJCgIFfxF+IwBB4ABrIgUkACAEQv///////z+DIQwgAiAEhUKAgICAgICAgIB/gyEKIAJC////////P4MiDUIgiCEOIARCMIinQf//AXEhBwJAAkAgAkIwiKdB//8BcSIJQf//AWtBgoB+TwRAIAdB//8Ba0GBgH5LDQELIAFQIAJC////////////AIMiC0KAgICAgIDA//8AVCALQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQoMAgsgA1AgBEL///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhCiADIQEMAgsgASALQoCAgICAgMD//wCFhFAEQCACIAOEUARAQoCAgICAgOD//wAhCkIAIQEMAwsgCkKAgICAgIDA//8AhCEKQgAhAQwCCyADIAJCgICAgICAwP//AIWEUARAIAEgC4QhGUIAIQEgGVAEQEKAgICAgIDg//8AIQoMAwsgCkKAgICAgIDA//8AhCEKDAILIAEgC4RQBEBCACEBDAILIAIgA4RQBEBCACEBDAILIAtC////////P1gEQCAFQdAAaiABIA0gASANIA1QIgYbeSAGQQZ0rXynIgZBD2sQhgFBECAGayEGIAUpA1giDUIgiCEOIAUpA1AhAQsgAkL///////8/Vg0AIAVBQGsgAyAMIAMgDCAMUCIIG3kgCEEGdK18pyIIQQ9rEIYBIAYgCGtBEGohBiAFKQNIIQwgBSkDQCEDCyADQg+GIgtCgID+/w+DIgIgAUIgiCIEfiIQIAtCIIgiEyABQv////8PgyIBfnwiD0IghiIRIAEgAn58IgsgEVStIAIgDUL/////D4Mi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DQAgASABKAIEIgRBAWs2AgQgBA0AIAEgASgCACgCCBEAACABECsLIANBCGsiAyACRw0ACyAAKAK0ASEBCyAAIAI2ArgBIAAoArwBGiABECoLIAAoAqgBIgIEQCAAKAKsASIDIAIiAUcEQANAAkAgA0EEaygCACIBRQ0AIAEgASgCBCIEQQFrNgIEIAQNACABIAEoAgAoAggRAAAgARArCyADQQhrIgMgAkcNAAsgACgCqAEhAQsgACACNgKsASAAKAKwARogARAqCyAALACnAUEASARAIAAoAqQBGiAAKAKcARAqCwJAIAAoAlQiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAJIIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLIAAoAjQiAgRAIAAoAjgiAyACIgFHBEADQAJAIANBBGsoAgAiAUUNACABIAEoAgQiBEEBazYCBCAEDQAgASABKAIAKAIIEQAAIAEQKwsgA0EIayIDIAJHDQALIAAoAjQhAQsgACACNgI4IAAoAjwaIAEQKgsgACgCGCICBEAgACgCHCIDIAIiAUcEQANAAkAgA0EEaygCACIBRQ0AIAEgASgCBCIEQQFrNgIEIAQNACABIAEoAgAoAggRAAAgARArCyADQQhrIgMgAkcNAAsgACgCGCEBCyAAIAI2AhwgACgCIBogARAqCyAALAAPQQBIBEAgACgCDBogACgCBBAqCyAACy0AIAJFBEAgACgCBCABKAIERg8LIAAgAUYEQEEBDwsgACgCBCABKAIEEIgBRQsNACAAKAIAEMYFGiAACw0AIAAoAgAQzQUaIAALQgEBfyABIAJsIQQgBAJ/IAMoAkxBAEgEQCAAIAQgAxDfAgwBCyAAIAQgAxDfAgsiAEYEQCACQQAgARsPCyAAIAFuC70DAgd/BH4gACkDECEJIAAoAgAhBiAAKAIYIQIgACgCCCIHIQMCQANAIAACfyACQQBKBEAgCSEKIAIMAQtBwAAgAmshAgJ+IANFBEBBACEDIAIhBCAJDAELIAKtIQsCQANAIAAgBkEBaiIINgIAIAYxAAAhCiAAIANBAWsiAzYCCCAAIAogAkEIayIErYYgCYQiCTcDECACQQ9MDQEgC0IIfSILpyECIAghBiADDQALIAMhB0EAIQMgAiEEIAkMAQsgAyEHIAghBiAJCyEKQcAAIARrCyIEQQFrIgI2AhggACAKQgGGIgk3AxAgCkIAWQRAIAVBAWoiBUEVRw0BDAILCyABIAUEfwJAIAQgBUoNACAEQTlKDQBBwQAgBGutIQsDQAJAIAunIQIgB0UEQCACIQQMAQsgACAGQQFqIgM2AgAgBjEAACEMIAAgB0EBayIHNgIIIAAgDCACQQhrIgSthiAJhCIJNwMQIAtCCH0hCyADIQYgAkEPSg0BCwtBwAAgBGshAgsgACACIAVrNgIYIAAgCSAFrYY3AxAgCUHAACAFa62Ip0F/IAV0QX9zagVBAAs2AgALIApCP4inCyAAIAAgACgCGEUgAXIiATYCECAAKAIUIAFxBEAQbAALC8wBAQJ/IwBBEGsiAyQAIAEgAhBJIgRB////B3E2AmQgASAEQRh2OgBhIAEgASgCIEEEajYCIAJAIAItABRBAUYEQCADQQA6AAQgA0EAOgAPIABBAkHkACADQQRqEC8aIAMsAA9BAE4NASADKAIMGiADKAIEECoMAQsgAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADQRBqJAALdQEBfiAAIAEgBH4gAiADfnwgA0IgiCICIAFCIIgiBH58IANC/////w+DIgMgAUL/////D4MiAX4iBUIgiCADIAR+fCIDQiCIfCABIAJ+IANC/////w+DfCIBQiCIfDcDCCAAIAVC/////w+DIAFCIIaENwMACxgAIAAtAABBIHFFBEAgASACIAAQ3wIaCwuoAQACQCABQYAITgRAIABEAAAAAAAA4H+iIQAgAUH/D0kEQCABQf8HayEBDAILIABEAAAAAAAA4H+iIQBB/RcgASABQf0XTxtB/g9rIQEMAQsgAUGBeEoNACAARAAAAAAAAGADoiEAIAFBuHBLBEAgAUHJB2ohAQwBCyAARAAAAAAAAGADoiEAQfBoIAEgAUHwaE0bQZIPaiEBCyAAIAFB/wdqrUI0hr+iC30BA38gACAAKAIQQQF0IgI2AhAgACAALwEUQQFqIgE7ARQCQCABwUEASA0AIABB+P8DOwEUIAAoAgQiASAAKAIITw0AIAAgAUEBajYCBCAAIAIgAS0AAHIiAjYCEAsgACgCDEEHdCIBIAJNBH8gACACIAFrNgIQQQEFQQALC3cBA38gARBYIgJB+P///wdJBEACQAJAIAJBC08EQCACQQdyQQFqIgQQLCEDIAAgBEGAgICAeHI2AgggACADNgIAIAAgAjYCBAwBCyAAIAI6AAsgACEDIAJFDQELIAMgASACEDcaCyACIANqQQA6AAAgAA8LEDgAC4MBAQN/AkACQCABKAKAASIDRQ0AIAFBgAFqIgQhAQNAIAEgAyADKAIQIAJJIgUbIQEgAyAFQQJ0aigCACIDDQALIAEgBEYNACABKAIQIAJNDQELIABCADcCAA8LIAAgASgCFDYCACAAIAEoAhgiADYCBCAABEAgACAAKAIEQQFqNgIECwttAQJ/IwBBEGsiBSQAIAUgAjYCDCAFIAQ2AgggBUEEaiAFQQxqEKcBIQYgACABIAMgBSgCCBDaAiEBIAYoAgAiAARAQeivBigCABogAARAQeivBkHwrgYgACAAQX9GGzYCAAsLIAVBEGokACABC+0BAQJ/An8gAC0AC0EHdgRAIAAoAgQMAQsgAC0AC0H/AHELIQQCQCACIAFrQQVIDQAgBEUNACABIAIQxQIgAkEEayEEAn8gAC0AC0EHdgRAIAAoAgQMAQsgAC0AC0H/AHELAn8gAC0AC0EHdgRAIAAoAgAMAQsgAAsiAmohBQJAA0ACQCACLAAAIQAgASAETw0AAkAgAEEATA0AIABB/wBODQAgACABKAIARw0DCyABQQRqIQEgAiAFIAJrQQFKaiECDAELCyAAQQBMDQEgAEH/AE4NASACLAAAIAQoAgBBAWtLDQELIANBBDYCAAsLugEBAn8jAEEQayICJAAgAC0AC0EHdgRAIAAoAggaIAAoAgBBARC/AQsCfyABLQALQQd2BEAgASgCBAwBCyABLQALCxogAS0AC0EHdiEDIAAgASgCCDYCCCAAIAEpAgA3AgAgASABLQALQYABcToACyABIAEtAAtB/wBxOgALIAJBADoADyABIAItAA86AAACQCAAIAFGIgENACADDQALIAAtAAtBB3YhAAJAIAENACAADQALIAJBEGokAAvWAQEFfyMAQRBrIgIkACACQQhqIAAQcxoCQCACLQAIRQ0AIAJBBGoiBCAAIAAoAgBBDGsoAgBqKAIc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IAMgAigCCCIANgIIIAAgACgCACACR0ECdGogAzYCACADIAI2AgQgAiADNgIIDwsCQCADRQ0AIAMtAAxBAUYNACADQQxqIQMMAQsCQCABIAQoAgAiA0cEQCAEIQMMAQsgBCADKAIEIgA2AgAgAARAIAAgBDYCCCAEKAIIIQILIAMgAjYCCCACIAIoAgAgBEdBAnRqIAM2AgAgAyAENgIEIAQgAzYCCCADKAIIIQILIANBAToADCACQQA6AAwgAiACKAIEIgEoAgAiADYCBCAABEAgACACNgIICyABIAIoAggiADYCCCAAIAAoAgAgAkdBAnRqIAE2AgAgASACNgIAIAIgATYCCAwCCyAEQQE6AAwgAiAAIAJGOgAMIANBAToAACACIgEgAEcNAAsLC9MJAgR/BX4jAEHwAGsiBiQAIARC////////////AIMhCQJAAkAgAVAiBSACQv///////////wCDIgpCgICAgICAwP//AH1CgICAgICAwICAf1QgClAbRQRAIANCAFIgCUKAgICAgIDA//8AfSILQoCAgICAgMCAgH9WIAtCgICAgICAwICAf1EbDQELIAUgCkKAgICAgIDA//8AVCAKQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQQgASEDDAILIANQIAlCgICAgICAwP//AFQgCUKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEEDAILIAEgCkKAgICAgIDA//8AhYRQBEBCgICAgICA4P//ACACIAEgA4UgAiAEhUKAgICAgICAgIB/hYRQIgUbIQRCACABIAUbIQMMAgsgAyAJQoCAgICAgMD//wCFhFANASABIAqEUARAIAMgCYRCAFINAiABIAODIQMgAiAEgyEEDAILIAMgCYRCAFINACABIQMgAiEEDAELIAMgASABIANUIAkgClYgCSAKURsiCBshCiAEIAIgCBsiDEL///////8/gyEJIAIgBCAIGyILQjCIp0H//wFxIQcgDEIwiKdB//8BcSIFRQRAIAZB4ABqIAogCSAKIAkgCVAiBRt5IAVBBnStfKciBUEPaxCGASAGKQNoIQkgBikDYCEKQRAgBWshBQsgASADIAgbIQMgC0L///////8/gyEBIAcEfiABBSAGQdAAaiADIAEgAyABIAFQIgcbeSAHQQZ0rXynIgdBD2sQhgFBECAHayEHIAYpA1AhAyAGKQNYC0IDhiADQj2IhEKAgICAgICABIQhASAJQgOGIApCPYiEIQ0gAiAEhSEEAn4gA0IDhiICIAUgB0YNABogBSAHayIHQf8ASwRAQgAhAUIBDAELIAZBQGsgAiABQYABIAdrEIYBIAZBMGogAiABIAcQ3QEgBikDOCEBIAYpAzAgBikDQCAGKQNIhEIAUq2ECyEJIA1CgICAgICAgASEIQsgCkIDhiEKAkAgBEIAUwRAQgAhA0IAIQQgCSAKhSABIAuFhFANAiAKIAl9IQIgCyABfSAJIApWrX0iBEL/////////A1YNASAGQSBqIAIgBCACIAQgBFAiBxt5IAdBBnStfKdBDGsiBxCGASAFIAdrIQUgBikDKCEEIAYpAyAhAgwBCyAJIAp8IgIgCVStIAEgC3x8IgRCgICAgICAgAiDUA0AIAlCAYMgBEI/hiACQgGIhIQhAiAFQQFqIQUgBEIBiCEECyAMQoCAgICAgICAgH+DIQMgBUH//wFOBEAgA0KAgICAgIDA//8AhCEEQgAhAwwBC0EAIQcCQCAFQQBKBEAgBSEHDAELIAZBEGogAiAEIAVB/wBqEIYBIAYgAiAEQQEgBWsQ3QEgBikDACAGKQMQIAYpAxiEQgBSrYQhAiAGKQMIIQQLIARCPYYgAkIDiIQhASAEQgOIQv///////z+DIAetQjCGhCADhCEEAkACQCACp0EHcSIFQQRHBEAgBCABIAEgBUEES618IgNWrXwhBAwBCyAEIAEgASABQgGDfCIDVq18IQQMAQsgBUUNAQsLIAAgAzcDACAAIAQ3AwggBkHwAGokAAuQAgEGfwJAIAEEQCAAKAIsIgIgACgCKCIFayIEQQJ1IgNBD00EQCAAKAIwIgYgAksEQCACIAE2AgAgACACQQRqNgIsDwtB/////wMgBiAFayIGQQF1IgcgA0EBaiIDIAMgB0kbIAZB/P///wdPGyIDQYCAgIAETw0CIANBAnQiAxAsIgYgBGoiBCABNgIAIARBBGohASACIAVHBEADQCAEQQRrIgQgAkEEayICKAIANgIAIAIgBUcNAAsLIAAgAyAGajYCMCAAIAE2AiwgACAENgIoIAUEQCAFECoLIAAgATYCLA8LIAEoAhQQKiABKAIgIgAEQCABIAA2AiQgASgCKBogABAqCyABECoLDwsQTwALiQUBBX8jAEGgAWsiAyQAIANBoNMDNgIYIANBtNMDNgJQIANBxNMDKAIAIgQ2AhAgA0EQaiIFIARBDGsoAgBqQcjTAygCADYCACADQQA2AhQgBSADKAIQQQxrKAIAaiIEIANBHGoiBhA+IARCgICAgHA3AkggA0HM0wMoAgAiBDYCGCADQRhqIgcgBEEMaygCAGpB0NMDKAIANgIAIANBwNMDKAIAIgQ2AhAgBSAEQQxrKAIAakHU0wMoAgA2AgAgA0G00wM2AlAgA0GM0wM2AhAgA0Gg0wM2AhggBhA/IgRB8MsDNgIAIANCADcCRCADQgA3AjwgA0EYNgJMIAcgAiACEFgQLUGeqgFBEhAtIAEtAGEQQkHfHEEXEC0aAkACfyADKAJMIgFBEHEEQCADKAJIIgEgAygCNCICSQRAIAMgAjYCSCACIQELIANBMGoMAQsgAUEIcUUEQEEAIQEgA0EAOgAPIANBBGohAgwCCyADKAIsIQEgA0EkagshAgJAIAEgAigCACIFayIBQfj///8HSQRAIAFBC08EQCABQQdyQQFqIgYQLCECIAMgBkGAgICAeHI2AgwgAyACNgIEIAMgATYCCAwCCyADIAE6AA8gA0EEaiECIAENAUEAIQEMAgsQOAALIAIgBSABEDcaCyABIAJqQQA6AAAgAEEEQboXIANBBGoQLxogAywAD0EASARAIAMoAgwaIAMoAgQQKgsgA0G80wMoAgAiADYCECAAQQxrKAIAIANBEGpqQdzTAygCADYCACADQeDTAygCADYCGCAEQfDLAzYCACADLABHQQBIBEAgAygCRBogAygCPBAqCyAEED0aIANB0ABqEDsaIANBoAFqJAALoAIBB38CQAJAIAAoAmwiAiABIAAoAnAiAyACa0ECdRDLAyICIAMgAhsiBiAAKAJwIgJGBEACQCAAKAJ0IgQgBksEQCACIAE2AgAgAkEEaiEBDAELIAYgACgCbCIDa0ECdSIIQQFqIgVBgICAgARPDQJB/////wMgBCADayIEQQF1IgcgBSAFIAdJGyAEQfz///8HTxsiBAR/IARBgICAgARPDQQgBEECdBAsBUEACyIHIAhBAnRqIgUgATYCACAFQQRqIQEgAyAGRwRAA0AgBUEEayIFIAJBBGsiAigCADYCACACIANHDQALCyAA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AAAiBDoAACAFIAItAABBAnRqIAItAAFBB3RqIAQ6AAAgACACLQAAQQJ0aiACLQABQQd0aiADLQAAIgQ6ACAgByACLQAAQQJ0aiACLQABQQd0aiAEOgAgIAYgAi0AAEECdGogAi0AAUEHdGogAy0AACIEOgAgIAUgAi0AAEECdGogAi0AAUEHdGogBDoAICAAIAItAABBAnRqIAItAAFBB3RqIAMtAAAiBDoAQCAHIAItAABBAnRqIAItAAFBB3RqIAQ6AEAgBiACLQAAQQJ0aiACLQABQQd0aiADLQAAIgQ6AEAgBSACLQAAQQJ0aiACLQABQQd0aiAEOgBAIAAgAi0AAEECdGogAi0AAUEHdGogAy0AACIEOgBgIAcgAi0AAEECdGogAi0AAUEHdGogBDoAYCAGIAItAABBAnRqIAItAAFBB3RqIAMtAAAiAzoAYCAFIAItAABBAnRqIAItAAFBB3RqIAM6AGAgCEEBaiIIQcAARw0ACwwCC0GdkAFB3fQAQeEGQacpEAEACyAAQdiLAygCACgCCCICLQABQQJ0aiACLQAAaiABLQAAOgAAIAItAAIgACACLQADQQJ0amogAS0AAToAACACLQAEIAAgAi0ABUECdGpqIAEtAAI6AAAgAi0ABiAAIAItAAdBAnRqaiABLQADOgAAIAItAAggACACLQAJQQJ0amogAS0ABDoAACACLQAKIAAgAi0AC0ECdGpqIAEtAAU6AAAgAi0ADCAAIAItAA1BAnRqaiABLQAGOgAAIAItAA4gACACLQAPQQJ0amogAS0ABzoAACACLQAQIAAgAi0AEUECdGpqIAEtAAg6AAAgAi0AEiAAIAItABNBAnRqaiABLQAJOgAAIAItABQgACACLQAVQQJ0amogAS0ACjoAACACLQAWIAAgAi0AF0ECdGpqIAEtAAs6AAAgAi0AGCAAIAItABlBAnRqaiABLQAMOgAAIAItABogACACLQAbQQJ0amogAS0ADToAACACLQAcIAAgAi0AHUECdGpqIAEtAA46AAAgAi0AHiAAIAItAB9BAnRqaiABLQAPOgAACwvqAwEBfwJAAkACQAJAAkACQCABIAlKDQAgASADaiAJTA0AIAIgCkoNACACIANqIApKDQELQQAhAyAJIApyQQBIDQIgACgCfCIBKALkAyAJTA0CIAEoAugDIApM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DC8BQEEBdGsiByAHQR91IgdzIAdrSg0BCyAJQYABaiEHDAELIAlBgAFqIQcgDyAMQYABay8BACINIAtqIAxBQGovAQBBAXRrIg4gDkEfdSIOcyAOa00NACAJIAo7AYACIAkgDTsBACAJIAs7AYABIAogC2shDyANIAtrIQ5BASEKA0AgByAKQQF0Ig1rIAsgCiAObEEgakEGdmo7AQAgByANaiALIAogD2xBIGpBBnZqOwEAIApBAWoiDUHAAEcEQCAHIApBf3NBAXRqIAsgDSAObEEgakEGdmo7AQAgByANQQF0aiALIA0gD2xBIGpBBnZqOwEAIApBAmohCgwBCwtBACADQQF0ayEODAELIAlBgAFqIgsgA0ECdCIKayAMIAprLwEAOwEAIAogC2ogCiAMai8BADsBAEEAIANBAXQiDWshDkEBIA1rIgogDU4NACALIApBAXQiEGogDEECayISIBBqLwEAIAxBAiANayIKQQF0ai8BACIPIAwgEGovAQBBAXRqakECakECdjsBAANAIAsgCkEBdCIQaiAQIBJqLwEAIAwgEEECaiIYai8BACIVIA9BAXRqakECakECdjsBACALIBhqIAwgEGovAQAgDCAKQQJqIgpBAXRqLwEAIg8gFUEBdGpqQQJqQQJ2OwEAIAogDUcNAAsLIAwgDkEBdCIKaiAHIApqIANBA3RBAnIQMhoLIAlBkAJqJAALAkACQAJAAkAgEQ4CAAECC0EBIQsgA0ECTgRAQQAhByADIQgDQCAHIgpBAWohByAIQQNLISIgCEEBdiEIICINAAsgCkECaiELCyADQQBMDQIgA0H+////B3EhGCADQQFxIRUgA0EBayEKIAwgA0F/c0EBdGovAQAhFiAMIANBAXRqLwECIQlBACEIA0AgCiAIayERIAhBAWoiByAWbCENIBMgCCAUbEEBdGohDyAMIAhBf3NBAXRqLwEAIQ5BACEIQQAhECADQQFHBEADQCAPIAhBAXRqIAogCGsgDmwgA2ogCEEBciISIAlsaiARIAwgEkEBdCIXai8BAGxqIA1qIAt1OwEAIA8gF2ogCiASayAObCADaiAIQQJqIgggCWxqIBEgDCAIQQF0ai8BAGxqIA1qIAt1OwEAIBBBAmoiECAYRw0ACwsgFQRAIA8gCEEBdGogCiAIayAObCADaiAIQQFqIggg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QQAhAiAFQQNLBEADQCAJIAovAQA7AQAgCSABQQF0IgdqIgkgCi8BAjsBACAHIAlqIgkgCi8BBDsBACAHIAlqIgkgCi8BBjsBACAHIAlqIQkgCkEIaiEKIAJBBGoiAiALRw0ACwtBACECIAhFDQADQCAJIAovAQA7AQAgCkECaiEKIAkgAUEBdGohCSACQQFqIgIgCEcNAAsLIANBAWoiAyAERw0ACwsLsgwBC38gCEECdCIJQaCJA2ooAgAgBWoiDCAJQZCJA2ooAgAiCWohDiAHQQJ0QZCJA2ooAgAhCgJAAkACQAJAAkAgBw4EAAECAwQLIAxBACAJayINTA0DIARBAEwNAyAGIAlBAXRqIRAgAiAKayERIARB/P///wdxIRIgBEEDcSEPIARBBEkhEwNAIBAgDUEBdGohCiARIAMgDWxqIQlBACELIBNFBEADQCAKIAktAAA7AQAgCiAOQQF0IgJqIgogCS0AATsBACACIApqIgogCS0AAjsBACACIApqIgogCS0AAzsBACACIApqIQogCUEEaiEJIAtBBGoiCyASRw0ACwtBACECIA8EQANAIAogCS0AADsBACAJQQFqIQkgCiAOQQF0aiEKIAJBAWoiAiAPRw0ACwsgDUEBaiINIAxHDQALDAMLIAxBACAJayILTA0CIARBAEwNAiAGIAlBAXRqIQ0gAiAKayEPA0AgDSALQQF0aiEKIA8gAyALbGohCUEAIQIDQCAKIAktAAYgCS0AAUECdCAJLQAAayAJLQACQXZsaiAJLQADQTpsaiAJLQAEQRFsaiAJLQAFQXtsamo7AQAgCUEBaiEJIAogDkEBdGohCiACQQFqIgIgBEcNAAsgC0EBaiILIAxHDQALDAILIAxBACAJayILTA0BIARBAEwNASAGIAlBAXRqIQ0gAiAKayEPA0AgDSALQQF0aiEKIA8gAyALbGohCUEAIQIDQCAKIAktAAFBAnQgCS0AAGsgCS0ABCAJLQADakEobGogCS0ABkECdGogCS0AB2sgCS0ABSAJLQACakF1bGo7AQAgCUEBaiEJIAogDkEBdGohCiACQQFqIgIgBEcNAAsgC0EBaiILIAxHDQALDAELIAxBACAJayILTA0AIARBAEwNACAGIAlBAXRqIQ0gAiAKayEPA0AgDSALQQF0aiEKIA8gAyALbGohCUEAIQID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BiAJbGogAxAyGgsgAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyAKLAAbQQBIBEAgCigCGBogCigCEBAqCyAKQSBqJAALPwEBfyMAQSBrIgQkACAEQQxqIAAoAkQgASACIAMQ4AMgBCwAH0EASARAIAQoAhwaIAQoAhQQKgsgBEEgaiQACwwAIABBgoaAIDYAAAsfACABBEAgACABKAIAEMoBIAAgASgCBBDKASABECoLC18BAn8CfyAALQALQQd2BEAgACgCAAwBCyAACwJ/IAAtAAtBB3YEQCAAKAIEDAELIAAtAAtB/wBxC0ECdGohASMAQRBrIgAkACAAIAE2AgwgACgCDCECIABBEGokACACC6wBAQF/AkAgA0GAEHFFDQAgA0HKAHEiBEEIRg0AIARBwABGDQAgAkUNACAAQSs6AAAgAEEBaiEACyADQYAEcQRAIABBIzoAACAAQQFqIQALA0AgAS0AACIEBEAgACAEOgAAIABBAWohACABQQFqIQEMAQsLIAACf0HvACADQcoAcSIBQcAARg0AGkHYAEH4ACADQYCAAXEbIAFBCEYNABpB5ABB9QAgAhsLOgAAC1wBAn8CfyAALQALQQd2BEAgACgCAAwBCyAACwJ/IAAtAAtBB3YEQCAAKAIEDAELIAAtAAtB/wBxC2ohASMAQRBrIgAkACAAIAE2AgwgACgCDCECIABBEGokACACC5oBAgF9An8gALwiAkEXdkH/AXEiA0GVAU0EQCADQf0ATQR9IABDAAAAAJQFAn0gAIsiAEMAAABLkkMAAADLkiAAkyIBQwAAAD9eBEAgACABkkMAAIC/kgwBCyAAIAGSIgAgAUMAAAC/X0UNABogAEMAAIA/kgsiAIwgACACQQBIGwshAAsgAItDAAAAT10EQCAAqA8LQYCAgIB4C+kBAQN/IABFBEBB2KMFKAIAIgAEQCAAEM8BIQELQcCiBSgCACIABEAgABDPASABciEBC0HMrgYoAgAiAARAA0AgACgCTBogACgCFCAAKAIcRwRAIAAQzwEgAXIhAQsgACgCOCIADQALCyABDwsgACgCTEEASCECAkACQCAAKAIUIAAoAhxGDQAgAEEAQQAgACgCJBEEABogACgCFA0AQX8hAQwBCyAAKAIEIgEgACgCCCIDRwRAIAAgASADa6xBASAAKAIoERcAGgtBACEBIABBADYCHCAAQgA3AxAgAEIANwIEIAINAAsgAQujAwAgAEIANwIEIABBADoAmAEgACABNgIUIABCADcDGCAAQgA3AjQgAEIANwJEIABCADcDUCAAQgA3ApwBIABBADYCDCAAQa4gNgIQIABCADcDICAAQgA3AyggAEEAOwEwIABCADcBOiAAQQA6AEwgAEEAOgBYIABBADYCzAEgAEIANwLEASAAQgA3ArwBIABCADcCtAEgAEIANwKsASAAQgA3AqQBIABBlIQFNgIAIABBADYCoAIgAEIANwOYAiAAQQE6ANABIABCADcC1AEgAEIANwDZASAAQgA3A+gBIABCADcD8AEgAEIANwP4ASAAQgA3A4ACIABCADcDiAIgAEEAOgCQAiAAQQE7AaQCIABCADcDqAIgAEIANwOwAiAAQgA3A7gCIABBADYC8AIgAEIANwPoAiAAQoCAgICAgID4PzcDwAIgAEIANwOQASAAQgA3A4gBIABCADcDgAEgAEIANwN4IABCADcDcCAAQgA3A2ggAEIANwNgIABBADYC4AIgAEIANwPYAiAAQgA3A9ACIABCADcDyAIgACACNgIkIAALKgEBfyAAKAJsIgIgASAAKAJwIgEgAmtBAnUQywMiAiABIAIbIAAoAnBHC40BAgJ/AX4gASkCACEFIAFCADcCACAAKAIEIQMgACAFNwIAAkAgA0UNACADIAMoAgQiBEEBazYCBCAEDQAgAyADKAIAKAIIEQAAIAMQKwsgAEEBOgAIIAAgAjYCGAJAIAEoAgQiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQKwsLTAEBfiABKQIAIQIgAUIANwIAIAAoAgQhASAAIAI3AgACQCABRQ0AIAEgASgCBCIAQQFrNgIEIAANACABIAEoAgAoAggRAAAgARArCwsEAEEEC8YKAQR/IwBBoAFrIgQkAAJAAkACQCABKAIwIAIQ5wEiBUHk0sm7BkYNACAFQezsvcsGRg0AIAVB7sqRywZHDQELIAEoAjAiBSgCVCEGIAUoAlgiBQRAIAUgBSgCBEEBajYCBAsCQCAGRQRAIARBOBAsIgE2AgQgBEK2gICAgIeAgIB/NwIIIAFB5iEpAAA3AAAgAUEAOgA2IAFBlCIpAAA3AC4gAUGOIikAADcAKCABQYYiKQAANwAgIAFB/iEpAAA3ABggAUH2ISkAADcAECABQe4hKQAANwAIIABBAkH1ACAEQQRqEC8aIAQsAA9BAE4NASAEKAIMGiAEKAIEECoMAQsgBEEEaiAGIAJB59qlowYQugECQAJAIAQoAgQiBiAEKAIIRwRAIAIgBigCACIGRw0BCyAEQTgQLCIBNgKUASAEQraAgICAh4CAgH83ApgBIAFB5iEpAAA3AAAgAUEAOgA2IAFBlCIpAAA3AC4gAUGOIikAADcAKCABQYYiKQAANwAgIAFB/iEpAAA3ABggAUH2ISkAADcAECABQe4hKQAANwAIIABBAkH1ACAEQZQBahAvGiAELACfAUEATg0BIAQoApwBGiAEKAKUARAqDAELIAAgASAGIAMQ1QELIAQoAgQiAEUNACAEIAA2AgggBCgCDBogABAqCyAFRQ0BIAUgBSgCBCIAQQFrNgIEIAANASAFIAUoAgAoAggRAAAgBRArDAELAkACQAJAAkACQCABKAIUIgVFDQAgAUEUaiIGIQEDQCABIAUgBSgCECACSSIHGyEBIAUgB0ECdGooAgAiBQ0ACyABIAZGDQAgASgCECACSw0AIAMgAjYCACAAQZClBSkCADcCACAAQQhqIQBBo6UFLAAAQQBIDQEgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMBQsgBEGg0wM2AgwgBEG00wM2AkQgBEHE0wMoAgAiATYCBCAEQQRqIgMgAUEMaygCAGpByNMDKAIANgIAIARBADYCCCADIAQoAgRBDGsoAgBqIgEgBEEQaiIFED4gAUKAgICAcDcCSCAEQczTAygCACIBNgIMIARBDGoiBiABQQxrKAIAakHQ0wMoAgA2AgAgBEHA0wMoAgAiATYCBCADIAFBDGsoAgBqQdTTAygCADYCACAEQbTTAzYCRCAEQYzTAzYCBCAEQaDTAzYCDCAFED8iA0HwywM2AgAgBEIANwI4IARCADcCMCAEQRg2AkAgBkHRqwFBCxAtIAIQPEH0xAFBIxAtGgJ/IAQoAkAiAUEQcQRAIAQoAjwiBSAEKAIoIgFJBEAgBCABNgI8IAEhBQsgBEEkagwBCyABQQhxRQRAQQAhBSAEQQA6AJ8BIARBlAFqIQEMBQsgBCgCICEFIARBGGoLIQEgBSABKAIAIgJrIgVB+P///wdPDQEgBUELTwRAIAVBB3JBAWoiBhAsIQEgBCAGQYCAgIB4cjYCnAEgBCABNgKUASAEIAU2ApgBDAMLIAQgBToAnwEgBEGUAWohASAFDQJBACEFDAMLIABBmKUFKAIAQZylBSgCABAuDAMLEDgACyABIAIgBRA3GgsgASAFakEAOgAAIABBAkHQDyAEQZQBahAvGiAELACfAUEASARAIAQoApwBGiAEKAKUARAqCyAEQbzTAygCACIANgIEIABBDGsoAgAgBEEEampB3NMDKAIANgIAIARB4NMDKAIANgIMIANB8MsDNgIAIAQsADtBAEgEQCAEKAI4GiAEKAIwECoLIAMQPRogBEHEAGoQOxoLIARBoAFqJAALQgEDfyMAQRBrIgEkACABIAA2AgwgASgCDCECIwBBEGsiACQAIAAgAjYCDCAAKAIMIQMgAEEQaiQAIAFBEGokACADC7UCAQN/IAMgACgCCCIEIAAoAgAiBWtBAnVNBEAgAyAAKAIEIgQgBWsiBkECdUsEQCAEIAVHBEAgBSABIAYQNxogACgCBCEECyACIAEgBmoiAWshAyABIAJHBEAgBCABIAMQNxoLIAAgAyAEajYCBA8LIAIgAWshAyABIAJHBEAgBSABIAMQNxoLIAAgAyAFajYCBA8LIAUEQCAAIAU2AgQgBRAqIABBADYCCCAAQgA3AgBBACEECwJAIANBgICAgARPDQBB/////wMgBEEBdSIFIAMgAyAFSRsgBEH8////B08bIgNBgICAgARPDQAgACADQQJ0IgQQLCIDNgIEIAAgAzYCACAAIAMgBGo2AgggAiABayEEIAEgAkcEQCADIAEgBBAyGgsgACADIARqNgIEDwsQNgALOAAgAC0AC0EHdgRAIAAgATYCBA8LIAAgAC0AC0GAAXEgAUH/AHFyOgALIAAgAC0AC0H/AHE6AAsLdgEBfyMAQRBrIgIkACACIAA2AgwCQCAAIAFGDQADQCACIAFBAWsiATYCCCAAIAFPDQEgAigCDCIALQAAIQEgACACKAIIIgAtAAA6AAAgACABOgAAIAIgAigCDEEBaiIANgIMIAIoAgghAQwACwALIAJBEGokAAsoACAAQRh0IABBgP4DcUEIdHIgAEEI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BEAgAygCSCICIAMoAjQiAUkEQCADIAE2AkggASECCyADQTBqDAELIAFBCHFFBEBBACECIABBADoACwwCCyADKAIsIQIgA0EkagshAQJAIAIgASgCACIEayICQfj///8HSQRAIAJBC08EQCACQQdyQQFqIgUQLCEBIAAgBUGAgICAeHI2AgggACABNgIAIAAgAjYCBCABIQAMAgsgACACOgALIAINAUEAIQIMAgsQOAALIAAgBCACEDcaCyAAIAJqQQA6AAAgA0Hs1QMoAgAiADYCGCAAQQxrKAIAIANBGGpqQfjVAygCADYCACAGQfDLAzYCACADLABHQQBIBEAgAygCRBogAygCPBAqCyAGED0aIANB0ABqEDsaIANBoAFqJAALwgMBCH8CQAJAIAAoAgQiAiAAKAIAIgRrQQxtIgdBAWoiA0HWqtWqAUkEQEHVqtWqASAAKAIIIARrQQxtIgVBAXQiBiADIAMgBkkbIAVBqtWq1QBPGyIFBEAgBUHWqtWqAU8NAiAFQQxsECwhCAsgCCAHQQxsaiIDQQA2AgggA0IANwIAIAEoAgQiBiABKAIAIgdHBEAgBiAHayIBQQBIDQMgAyABECwiBjYCACADIAEgBmoiCTYCCCAGIAcgARAyGiADIAk2AgQLIAggBUEMbGohByADQQxqIQgCQCACIARGBEAgAyEBDAELA0AgA0EEayIGQQA2AgAgA0EMayIBIAJBDGsiBSgCADYCACADQQhrIAJBCGsoAgA2AgAgBiACQQRrIgIoAgA2AgAgAkEANgIAIAVCADcCACABIQMgBSICIARHDQALIAAoAggaIAAoAgQhAiAAKAIAIQQLIAAgBzYCCCAAIAg2AgQgACABNgIAIAIgBEcEQANAIAJBDGsiACgCACIBBEAgAkEIayABNgIAIAJBBGsoAgAaIAEQKgsgACICIARHDQALCyAEBEAgBBAqCyAIDwsQNgALEE8ACxA2AAvOAQEBfyABKAL0AiECAkAgASgC+AIiAUUEQCAAQQA2AgQgACACNgIADAELIAEgASgCBEEBajYCBCAAIAE2AgQgACACNgIAIAEgASgCBEEBajYCBAsgAEGQpQUpAgA3AgggAEEQaiEAAkBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUF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ARogBigCoAEQKgsgBigCsAEiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQKwsgBiwAzwFBAEgEQCAGKALMARogBigCxAEQKgsCQCAGKAK4ASIARQ0AIAAgACgCBCIBQQFrNgIEIAENACAAIAAoAgAoAggRAAAgABArCwJAIAYoAvwBIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLIAZBgAJqJAAPCxA2AAtSAQF/IAEEQCAAIAEoAgAQhAIgACABKAIEEIQCAkAgASgCGCIARQ0AIAAgACgCBCICQQFrNgIEIAINACAAIAAoAgAoAggRAAAgABArCyABECoLC8wDAgJ+An8gAEEANgIYIABCADcDECAAIAI2AgggACACNgIEIAAgATYCAEFAIQYCQCACRQ0AIAAgAUEBajYCACABMQAAIQMgACACQQFrIgU2AgggACADQjiGIgM3AxAgBUUNACAAIAFBAmo2AgAgATEAASEEIAAgAkECayIFNgIIIAAgBEIwhiADhCIDNwMQIAVFDQAgACABQQNqNgIAIAExAAIhBCAAIAJBA2siBTYCCCAAIARCKIYgA4QiAzcDECAFRQ0AIAAgAUEEajYCACABMQADIQQgACACQQRrIgU2AgggACAEQiCGIAOEIgM3AxAgBUUNACAAIAFBBWo2AgAgATEABCEEIAAgAkEFayIFNgIIIAAgBEIYhiADhCIDNwMQIAVFDQAgACABQQZqNgIAIAExAAUhBCAAIAJBBmsiBTYCCCAAIARCEIYgA4QiAzcDECAFRQ0AIAAgAUEHajYCACABMQAGIQQgACACQQdrIgU2AgggACAEQgiGIAOEIgM3AxAgBUUNACAAIAFBCGo2AgAgATEAByEEIAAgAkEIazYCCCAAIAMgBIQ3AxBBSCEGCyAAIAZBByACIAJBB08bQQN0akFAazYCGCAAC/wBAQN/IwBBEGsiAiQAIAIgAToADwJAAkACfyAALQALIgNBB3YiBEUEQEEKIQEgA0H/AHEMAQsgACgCCEH/////B3FBAWshASAAKAIECyIDIAFGBEAgACABQQEgASABEKkDAn8gAC0AC0EHdgRAIAAoAgAMAQtBAAsaDAELAn8gAC0AC0EHdgRAIAAoAgAMAQtBAAsaIAQNACAA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IgogCSgCRCIBSQRAIAkgATYCWCABIQoLIAlBQGsMAQsgAUEIcUUEQEEAIQogCUEAOgAfIAlBFGohAgwMCyAJKAI8IQogCUE0agshASAKIAEoAgAiAWsiCkH4////B08NECAKQQtPBEAgCkEHckEBaiIEECwhAiAJIARBgICAgHhyNgIcIAkgAjYCFCAJIAo2AhgMCgsgCSAKOgAfIAlBFGohAiAKDQlBACEKDAoLIAMoAgAiASAKKQMIIAIpAwggEnx8IgYgBiARfCABKAIAKAIYERYAIRcgAygCACEBIBdQBEAgACABKQIENwIAIABBCGohACABLAAXQQBOBEAgACABKQIMNwIAIAAgASgCFDYCCAwQCyAAIAEoAgwgASgCEBAuDA8LIAEgBiABKAIAKAIUERAARQRAIABBAkEAIAlBIGpB1jMQgAEiABAvGiAALAALQQBODQ8gACgCCBogACgCABAqDA8LAkAgCyARpyINaiIBIAUoAgQgBSgCACIOayIMSwRAIAUgASAMaxBlDAELIAEgDEkEQCAFIAEgDmo2AgQLCyADKAIAIgEgBSgCACALaiANIAEoAgAoAhARBAANAiAAQQJBACAJQSBqQYzUABCAASIAEC8aIAAsAAtBAE4NDiAAKAIIGiAAKAIAECoMDgsgBCgCACIBRQRAIAlBOBAsIgE2AiAgCUK2gICAgIeAgIB/NwIkIAFBpdQAKQAANwAAIAFBADoANiABQdPUACkAADcALiABQc3UACkAADcAKCABQcXUACkAADcAICABQb3UACkAADcAGCABQbXUACkAADcAECABQa3UACkAADcACCAAQQJB5wAgCUEgahAvGiAJLAArQQBODQ4gCSgCKBogCSgCIBAqDA4LIAopAwggAikDCHwhEiACKQMQIREjAEGgAWsiCyQAIAUoAgQgBSgCAGshDAJAAkACQAJAAkAgCCkDKCITUA0AIBMgDK0iFX0gEVoNACALQaDTAzYCGCALQbTTAzYCUCALQcTTAygCACIMNgIQIAtBEGoiASAMQQxrKAIAakHI0wMoAgA2AgAgC0EANgIUIAEgCygCEEEMaygCAGoiDCALQRxqIg0QPiAMQoCAgIBwNwJIIAtBzNMDKAIAIgw2AhggC0EYaiIOIAxBDGsoAgBqQdDTAygCADYCACALQcDTAygCACIMNgIQ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EC4LIAMsABtBAEgEQCADKAIYGiADKAIQECoLIAYNAQsgBCAFNgIAIARBkKUFKQIANwIEIARBDGohAUGjpQUsAABBAE4EQCABQZilBSkCADcCACABQaClBSgCADYCCAwBCyABQZilBSgCAEGcpQUoAgAQLgsgA0EgaiQAAkAgAigCEARAIABBADYCCCAAQgA3AgAgACACKQIQNwIMIABBFGohACACLAAjQQBOBEAgACACKQIYNwIAIAAgAigCIDYCCAwCCyAAIAIoAhggAigCHBAuDAELIAJBJGogAigCKCACKAIMIgEoAgAiAyABKAIEIgEgASADaxDFASAAQQA2AgggAEIANwIAIAIoAigiASACKAIkIgRHBEAgASAEayIBQQBIDQQgACABECwiAzYCBCAAIAM2AgAgACABIANqIgU2AgggAyAEIAEQMhogACAFNgIECyAAQZClBSkCADcCDCAAQRRqIQBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIAIsACNBAEgEQCACKAIgGiACKAIYECoLIAIoAiQiAEUNACACIAA2AiggAigCLBogABAqCyACLABPQQBIBEAgAigCTBogAigCRBAqCyACKAIwIgAEQCACIAA2AjQgAigCOBogABAqCyACQdAAaiQADwsQNgALEDYAC8kCAgF+An8gAigCBCEFAkAgASgCBCIGIAAoAgRMBEAgBSAGTA0BIAEpAgAhBCABIAIpAgA3AgAgAiAENwIAIAEoAgQgACgCBEwEQCAEQiCIpyEFDAILIAApAgAhBCAAIAEpAgA3AgAgASAENwIAIAIoAgQhBQwBCyAAKQIAIQQgBSAGSgRAIAAgAikCADcCACACIAQ3AgAgBEIgiKchBQwBCyAAIAEpAgA3AgAgASAENwIAIAIoAgQiBSAEQiCIpyIGTA0AIAEgAikCADcCACACIAQ3AgAgBiEFCwJAIAMoAgQgBUwNACACKQIAIQQgAiADKQIANwIAIAMgBDcCACACKAIEIAEoAgRMDQAgASkCACEEIAEgAikCADcCACACIAQ3AgAgASgCBCAAKAIETA0AIAApAgAhBCAAIAEpAgA3AgAgASAENwIACwv2BQEFfyMAQaABayIDJAAgA0Hk1QM2AkQgA0Hw1QMoAgAiBjYCDCADQQxqIgQgBkEMaygCAGpB9NUDKAIANgIAIAQgAygCDEEMaygCAGoiBiADQRBqIgUQPiAGQoCAgIBwNwJIIANB5NUDNgJEIANB0NUDNgIMIAUQPyIGQfDLAzYCACADQgA3AjggA0IANwIwIANBEDYCQCADQZQBaiIFIAIQNSAEIAMoApQBIAUgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpBvLEBQQUQLSEHIANBlAFqIgUgARD+ASAHIAMoApQBIAUgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC1Byo4CQQcQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0GUAWoiBCACEDUgA0EMaiADKAKUASAEIAMsAJ8BIgJBAEgiBBsgAygCmAEgAiAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqQfW8AUEGEC0gASkDCBCFAUG9vAFBERAtIAEoAiAQPEHOkAJBAhAtGgJAAn8gAygCQCIBQRBxBEAgAygCPCIBIAMoAigiAkkEQCADIAI2AjwgAiEBCyADQSRqDAELIAFBCHFFBEBBACEBIABBADoACwwCCyADKAIgIQEgA0EYagshAgJAIAEgAigCACIEayIBQfj///8HSQRAIAFBC08EQCABQQdyQQFqIgUQLCECIAAgBUGAgICAeHI2AgggACACNgIAIAAgATYCBCACIQAMAgsgACABOgALIAENAUEAIQEMAgsQOAALIAAgBCABEDcaCyAAIAFqQQA6AAAgA0Hs1QMoAgAiADYCDCAAQQxrKAIAIANBDGpqQfjVAygCADYCACAGQfDLAzYCACADLAA7QQBIBEAgAygCOBogAygCMBAqCyAGED0aIANBxABqEDsaIANBoAFqJAAL1wsCBX8BfiMAQaABayIDJAAgAigCACIEIAQoAgAoAggREgAhCAJAIAIoAgAiBCAIQgh8IAQoAgAoAgwREAAEQCADQQA6ABAgA0EAOgAbIABBAkHkACADQRBqEC8aIAMsABtBAE4NASADKAIYGiADKAIQECoMAQsgASACEEmtNwMIIAIQSSEEIAFBCDYCICABIAQ2AhACQAJAAkAgASkDCEIBUQR/IAIoAgAiBCAEKAIAKAIIERIAIQggAigCACIEIAhCCHwgBCgCACgCDBEQAARAIANBADoAECADQQA6ABsgAEECQeQAIANBEGoQLxogAywAG0EATg0FIAMoAhgaIAMoAhAQKgwFCyABIAIQSa1CIIYgAhBJrYQ3AwggASABKAIgQQhqNgIgIANBoNMDNgIYIANBtNMDNgJQIANBxNMDKAIAIgQ2AhAgA0EQaiIFIARBDGsoAgBqQcjTAygCADYCACADQQA2AhQgBSADKAIQQQxrKAIAaiIEIANBHGoiBhA+IARCgICAgHA3AkggA0HM0wMoAgAiBDYCGCADQRhqIgcgBEEMaygCAGpB0NMDKAIANgIAIANBwNMDKAIAIgQ2AhAgBSAEQQxrKAIAakHU0wMoAgA2AgAgA0G00wM2AlAgA0GM0wM2AhAgA0Gg0wM2AhggBhA/IgRB8MsDNgIAIANCADcCRCADQgA3AjwgA0EYNgJMIAdBxq0BQQkQLSABKQMIEIUBQdOUAUEYEC0aIANB0ABqIQUgASkDCEKAgICAgICAgBBaBEACfyADKAJMIgFBEHEEQCADKAJIIgIgAygCNCIBSQRAIAMgATYCSCABIQILIANBMGoMAQsgAUEIcUUEQEEAIQIgA0EAOgAPIANBBGohAQwGCyADKAIsIQIgA0EkagshASACIAEoAgAiBmsiAkH4////B08NAiACQQtPBEAgAkEHckEBaiIHECwhASADIAdBgICAgHhyNgIMIAMgATYCBCADIAI2AggMBAsgAyACOgAPIANBBGohASACDQNBACECDAQLIANBvNMDKAIAIgY2AhAgBkEMaygCACADQRBqakHc0wMoAgA2AgAgA0Hg0wMoAgA2AhggBEHwywM2AgAgAywAR0EASARAIAMoAkQaIAMoAjwQKgsgBBA9GiAFEDsaIAEoAhAFIAQLQeTS1asHRgRAIAIoAgAiBCAEKAIAKAIIERIAIQggAigCACIEIAhCEHwgBCgCACgCDBEQAARAIANBADoAECADQQA6ABsgAEECQeQAIANBEGoQLxogAywAG0EATg0FIAMoAhgaIAMoAhAQKgwFCwJAIAJBEBCLAUUNACABQRRqIQYCQCABKAIYIAEoAhQiBWsiBEEPTQRAIAZBECAEaxBlDAELIARBEEYNACABIAVBEGo2AhgLIAIoAgAhBSAC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IGsiBSQAIABBADYCCCAAQgA3AgACQCABKAIgIgQgASgCHCIBRwRAIAQgAWsiA0EASA0BIAAgAxAsIgI2AgQgACACNgIAIAAgAiADajYCCANAIAIgASgCADYCACACIAEoAgQiAzYCBCADBEAgAyADKAIEQQFqNgIECyACQQhqIQIgAUEIaiIBIARHDQALIAAgAjYCBAsgBUEgaiQADwsQNgALSQECfyAAKAIEIgVBCHUhBiAAKAIAIgAgASAFQQFxBH8gBiACKAIAaigCAAUgBgsgAmogA0ECIAVBAnEbIAQgACgCACgCGBEHAAuDAwEFfyMAQRBrIggkACACIAFBf3NB9////wdqTQRAAn8gAC0AC0EHdgRAIAAoAgAMAQsgAAshCiAIQQRqIgkgAUHz////A0kEfyAIIAFBAXQ2AgwgCCABIAJqNgIEIwBBEGsiAiQAIAkoAgAgCEEMaiILKAIASSEMIAJBEGokACALIAkgDBsoAgAiAkELTwR/IAJBCGpBeHEiAiACQQFrIgIgAkELRhsFQQoLQQFqBUH3////BwsQ8gEgCCgCBCECIAgoAggaIAQEQCAKIAQgAhCxAQsgBgRAIAcgBiACIARqELEBCyADIAQgBWoiCWshByADIAlHBEAgBCAKaiAFaiAHIAIgBGogBmoQsQELIAFBCkcEQCAKQQEQvwELIAAgAjYCACAAIAAoAghBgICAgHhxIAgoAghB/////wdxcjYCCCAAIAAoAghBgICAgHhyNgIIIAAgBCAGaiAHaiIANgIEIAhBADoADCAAIAJqIAgtAAw6AAAgCEEQaiQADwsQigEACwgAQf////8HCwUAQf8AC3YBAX8jAEEQayICJAAgAiAANgIMAkAgACABRg0AA0AgAiABQQRrIgE2AgggACABTw0BIAIoAgwiACgCACEBIAAgAigCCCIAKAIANgIAIAAgATYCACACIAIoAgxBBGoiADYCDCACKAIIIQEMAAsACyACQRBqJAAL/QQBCH8jAEEQayILJAAgBkGc0AYQQyEJIAtBBGoiByAGQeTQBhBDIgggCCgCACgCFBECAAJAAn8gBy0AC0EHdgRAIAcoAgQMAQsgBy0AC0H/AHELRQRAIAkgACACIAMgCSgCACgCMBEKABogBSADIAIgAGtBAnRqIgY2AgAMAQsgBSADNgIAAkACQCAA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/////wNPGyIHBH8gBxAsBUEACyIFaiIDIAE6AAAgBSAHaiEIIANBAWohBwJAIAQgBkYEQCADIQUMAQsCQCACQQNxIglFBEAgBCECDAELQQAhASAEIQIDQCADQQFrIgMgAkEBayICLQAAOgAAIAFBAWoiASAJRw0ACwsgBiAEa0F8TQRAA0AgA0EBayACQQFrLQAAOgAAIANBAmsgAkECay0AADoAACADQQNrIAJBA2stAAA6AAAgA0EEayIDIAJBBGsiAi0AADoAACACIAZHDQALCyAAKAJwGiAAKAJoIQYLIAAgCDYCcCAAIAc2AmwgACAFNgJoIAYEQCAGECoLIAAgBzYCbA8LEDYAC8EVAQJ/AkACQAJAAkACQAJAAkAgAkEBaw4KAQYAAgMGBAYFBAYLQZADECwiA0IANwIUIANCADcCBCADQQA6AKgBIAMgATYCJCADQa4gNgIgIANCADcDKCADQgA3AkQgA0IANwJUIANCADcDYCADQgA3AqwBIANBkIUFNgIAIANBADYCHCADQgA3AzAgA0IANwM4IANBQGtBADsBACADQgA3AUogA0EAOgBcIANBADoAaCADQgA3ArQBIANCADcCvAEgA0IANwLEASADQgA3AswBIANCADcC1AEgA0EANgLcASADQQA2ArACIANCADcDqAIgA0EBOgDgASADQgA3AuQBIANCADcA6QEgA0IANwP4ASADQgA3A4ACIANCADcDiAIgA0IANwOQAiADQgA3A5gCIANBADoAoAIgA0EBOwG0AiADQgA3A7gCIANCADcDwAIgA0IANwPIAiADQQA2AoADIANCADcC+AIgA0KAgICAgICA+D83A9ACIANCADcDoAEgA0IANwOYASADQgA3A5ABIANCADcDiAEgA0IANwOAASADQgA3A3ggA0IANwNwIANBADYC8AIgA0IANwPoAiADQgA3A+ACIANCADcD2AIgA0IANwKEAyADQfj4BDYCECADQRBqIQQMBQtBkAMQLCIDQgA3AhQgA0IANwIEIANBADoAqAEgAyABNgIkIANBriA2AiAgA0IANwMoIANCADcCRCADQgA3AlQgA0IANwNgIANCADcCrAEgA0G4hQU2AgAgA0EANgIcIANCADcDMCADQgA3AzggA0FAa0EAOwEAIANCADcBSiADQQA6AFwgA0EAOgBoIANCADcCtAEgA0IANwK8ASADQgA3AsQBIANCADcCzAEgA0IANwLUASADQQA2AtwBIANBADYCsAIgA0IANwOoAiADQQE6AOABIANCADcC5AEgA0IANwDpASADQgA3A/gBIANCADcDgAIgA0IANwOIAiADQgA3A5ACIANCADcDmAIgA0EAOgCgAiADQQE7AbQCIANCADcDuAIgA0IANwPAAiADQgA3A8gCIANBADYCgAMgA0IANwL4AiADQoCAgICAgID4PzcD0AIgA0IANwOgASADQgA3A5gBIANCADcDkAEgA0IANwOIASADQgA3A4ABIANCADcDeCADQgA3A3AgA0EANgLwAiADQgA3A+gCIANCADcD4AIgA0IANwPYAiADQgA3AoQDIANB6PMENgIQIANBEGohBAwEC0GQAxAsIgNCADcCFCADQgA3AgQgA0EAOgCoASADIAE2AiQgA0GuIDYCICADQgA3AyggA0IANwJEIANCADcCVCADQgA3A2AgA0IANwKsASADQeCFBTYCACADQQA2AhwgA0IANwMwIANCADcDOCADQUBrQQA7AQAgA0IANwFKIANBADoAXCADQQA6AGggA0IANwK0ASADQgA3ArwBIANCADcCxAEgA0IANwLMASADQgA3AtQBIANBADYC3AEgA0EANgKwAiADQgA3A6gCIANBAToA4AEgA0IANwLkASADQgA3AOkBIANCADcD+AEgA0IANwOAAiADQgA3A4gCIANCADcDkAIgA0IANwOYAiADQQA6AKACIANBATsBtAIgA0IANwO4AiADQgA3A8ACIANCADcDyAIgA0EANgKAAyADQgA3AvgCIANCgICAgICAgPg/NwPQAiADQgA3A6ABIANCADcDmAEgA0IANwOQASADQgA3A4gBIANCADcDgAEgA0IANwN4IANCADcDcCADQQA2AvACIANCADcD6AIgA0IANwPgAiADQgA3A9gCIANCADcChAMgA0GE9gQ2AhAgA0EQaiEEDAMLQZADECwiA0IANwIUIANCADcCBCADQQA6AKgBIAMgATYCJCADQa4gNgIgIANCADcDKCADQgA3AkQgA0IANwJUIANCADcDYCADQgA3AqwBIANBiIYFNgIAIANBADYCHCADQgA3AzAgA0IANwM4IANBQGtBADsBACADQgA3AUogA0EAOgBcIANBADoAaCADQgA3ArQBIANCADcCvAEgA0IANwLEASADQgA3AswBIANCADcC1AEgA0EANgLcASADQQA2ArACIANCADcDqAIgA0EBOgDgASADQgA3AuQBIANCADcA6QEgA0IANwP4ASADQgA3A4ACIANCADcDiAIgA0IANwOQAiADQgA3A5gCIANBADoAoAIgA0EBOwG0AiADQgA3A7gCIANCADcDwAIgA0IANwPIAiADQQA2AoADIANCADcC+AIgA0KAgICAgICA+D83A9ACIANCADcDoAEgA0IANwOYASADQgA3A5ABIANCADcDiAEgA0IANwOAASADQgA3A3ggA0IANwNwIANBADYC8AIgA0IANwPoAiADQgA3A+ACIANCADcD2AIgA0IANwKEAyADQeD+BDYCECADQRBqIQQMAgtBkAMQLCIDQgA3AhQgA0IANwIEIANBADoAqAEgAyABNgIkIANBriA2AiAgA0IANwMoIANCADcCRCADQgA3AlQgA0IANwNgIANCADcCrAEgA0HchwU2AgAgA0EANgIcIANCADcDMCADQgA3AzggA0FAa0EAOwEAIANCADcBSiADQQA6AFwgA0EAOgBoIANCADcCtAEgA0IANwK8ASADQgA3AsQBIANCADcCzAEgA0IANwLUASADQQA2AtwBIANBADYCsAIgA0IANwOoAiADQQE6AOABIANCADcC5AEgA0IANwDpASADQgA3A/gBIANCADcDgAIgA0IANwOIAiADQgA3A5ACIANCADcDmAIgA0EAOgCgAiADQQE7AbQCIANCADcDuAIgA0IANwPAAiADQgA3A8gCIANBADYCgAMgA0IANwL4AiADQoCAgICAgID4PzcD0AIgA0IANwOgASADQgA3A5gBIANCADcDkAEgA0IANwOIASADQgA3A4ABIANCADcDeCADQgA3A3AgA0EANgLwAiADQgA3A+gCIANCADcD4AIgA0IANwPYAiADQgA3AoQDIANB3PoENgIQIANBEGohBAwBC0GIAxAsIgNCADcCFCADQgA3AgQgA0EAOgCoASADIAE2AiQgA0GuIDYCICADQgA3AyggA0IANwJEIANCADcCVCADQgA3A2AgA0IANwKsASADQYSIBTYCACADQQA2AhwgA0IANwMwIANCADcDOCADQUBrQQA7AQAgA0IANwFKIANBADoAXCADQQA6AGggA0IANwK0ASADQgA3ArwBIANCADcCxAEgA0IANwLMASADQgA3AtQBIANBADYC3AEgA0EANgKwAiADQgA3A6gCIANBAToA4AEgA0IANwLkASADQgA3AOkBIANCADcD+AEgA0IANwOAAiADQgA3A4gCIANCADcDkAIgA0IANwOYAiADQQA6AKACIANBATsBtAIgA0IANwO4AiADQgA3A8ACIANCADcDyAIgA0EANgKAAyADQgA3AvgCIANCgICAgICAgPg/NwPQAiADQgA3A6ABIANCADcDmAEgA0IANwOQASADQgA3A4gBIANCADcDgAEgA0IANwN4IANCADcDcCADQQA2AvACIANCADcD6AIgA0IANwPgAiADQgA3A9gCIANBrIMFNgIQIANBEGohBAsgACADNgIEIAAgBDYCAAsIACAAEHQQKgsPACAAIAAoAgAoAgwRAQALwQEBBH8CQAJAIAMEQCADQdaq1aoBTw0BIAAgA0EMbCIEECwiAzYCBCAAIAM2AgAgACADIARqNgIIIAEgAkcEQANAIANBADYCCCADQgA3AgAgASgCBCIEIAEoAgAiBkcEQCAEIAZrIgRBAEgNBSADIAQQLCIFNgIEIAMgBTYCACADIAQgBWoiBzYCCCAFIAYgBBAyGiADIAc2AgQLIANBDGohAyABQQxqIgEgAkcNAAsLIAAgAzYCBAsPCxA2AAsQNgALnQMBB38CQCAAKAIEIAAoAgAiAmtBDG0iBUEBaiIGQdaq1aoBSQRAQdWq1aoBIAAoAgggAmtBDG0iA0EBdCICIAYgAiAGSxsgA0Gq1arVAE8bIgIEQCACQdaq1aoBTw0CIAJBDGwQLCEHCyAHIAVBDGxqIgMgASgCADYCACADIAEoAgQ2AgQgAyABKAIINgIIIAFBADYCCCABQgA3AgAgByACQQxsaiEGIANBDGohCAJAIAAoAgQiASAAKAIAIgRGBEAgAyECDAELA0AgA0EEayIHQQA2AgAgA0EMayICIAFBDGsiBSgCADYCACADQQhrIAFBCGsoAgA2AgAgByABQQRrIgEoAgA2AgAgAUEANgIAIAVCADcCACACIQMgBSIBIARHDQALIAAoAgQhASAAKAIAIQQLIAAgCDYCBCAAIAI2AgAgACgCCBogACAGNgIIIAEgBEcEQANAIAFBDGsiACgCACIC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IBJCIHwiEyAHKQMwIhFWBEAgByACKAIAIgUgEiATIAUoAgAoAhgRFgAiETcDMAsgESATVARAIANBGBAsIgI2AmAgA0KXgICAgIOAgIB/NwJkIAJBiPkAKQAANwAAIAJBADoAFyACQZf5ACkAADcADyACQZD5ACkAADcACCAJQQJBACADQeAAahAvGiADLABrQQBODQIgAygCaBogAygCYBAqDAILIAMgBygCODYCiAEgAyAHKAI8IgU2AowBIAUEQCAFIAUoAgRBAWo2AgQgBykDMCERCyADIAMpAogBNwMIIANBkAFqIANBCGogEqciCCARpxDVAyEGIANB4ABqIgVCADcDCCAFQgA3AxAgBUIANwMYIAVBADYCICAFQdS9BDYCACADQcgAaiAFIAYQrQIgAyADKQNIIhE3A9ABIAMsAOMBQQBOBH8gEacFIAMoAuABGiADKALYARAqIAMoAtABCyEGIAMgAykDUDcD2AEgAyADKAJYNgLgAQJAIAYEQCAJIAMpA9ABNwIAIAkgAygC4AE2AhAgCSADKQLYATcCCCADQgA3A9gBIANBADYC4AFBASEGDAELIAMpA2ghESADKAJwQeHolesGRgRAIBFQBEAgA0EwECwiBjYCSCADQqqAgICAhoCAgH83AkwgBkHWywApAAA3AAAgBkEAOgAqIAZB/ssALwAAOwAoIAZB9ssAKQAANwAgIAZB7ssAKQAANwAYIAZB5ssAKQAANwAQIAZB3ssAKQAANwAIIAlBAkHoACADQcgAahAvGiADLABTQQBIBEAgAygCUBogAygCSBAqC0EBIQYMAgsgBykDMCITIBEgEnwiEVQEQCAHIAcoAjgiBiASIBEgBigCACgCGBEWACITNwMwCyARIBNWBEAgA0EgECwiBjYCSCADQpmAgICAhICAgH83AkwgBkHSESkAADcAACAGQQA6ABkgBkHqES0AADoAGCAGQeIRKQAANwAQIAZB2hEpAAA3AAggCUECQegAIANByABqEC8aIAMsAFNBAEgEQCADKAJQGiADKAJIECoLQQEhBgwCCyADIAcoAjg2AkAgAyAHKAI8IgY2AkQgBgRAIAYgBigCBEEBajYCBAsgAyADKQJANwMAIANByABqIAMgCCARpxDVAyEGIANCADcCOCADQSBqIAYgA0E4aiAKEPsBIAMgAykDICIR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ADcCtAEgAkIANwKsASACQQA2ArACIAJCADcDqAIgAkEBOgDgASACQgA3AuQBIAJCADcA6QEgAkIANwP4ASACQgA3A4ACIAJCADcDiAIgAkIANwOQAiACQgA3A5gCIAJBADoAoAIgAkEBOwG0AiACQgA3A7gCIAJCADcDwAIgAkIANwPIAiACQQA2AoADIAJCADcC+AIgAkKAgICAgICA+D83A9ACIAJCADcDoAEgAkIANwOYASACQgA3A5ABIAJCADcDiAEgAkIANwOAASACQgA3A3ggAkIANwNwIAJBADYC8AIgAkIANwPoAiACQgA3A+ACIAJCADcD2AIgAkIANwKEAyACIAU2AjQgAkHc+gQ2AhAgA0EkaiIFIAI2AgQgBSACQRBqNgIAIAQgAygCJDYChAIgBCADKAIoNgKIAiADQgA3AiQgBRBtDAkLIAJB6NbN6wZMBEAgAkHnysHTBkcEQCACQbHsoeMGRg0GIAJB5dql6wZHDQkgBSgChAEgBSwAiwEiAiACQQBIIgIbQQpHDQkgBSgCgAEgBUGAAWogAhtBr8gAQQoQXw0JC0GQAxAsIgJCADcCFCACQgA3AgQgAkEAOgCoASACIAE2AiQgAkGuIDYCICACQgA3AyggAkIANwJEIAJCADcCVCACQgA3A2AgAkIANwKsASACQZCFBTYCACACQQA2AhwgAkIANwMwIAJCADcDOCACQUBrQQA7AQAgAkIANwFKIAJBADoAXCACQQA6AGggAkIANwK0ASACQgA3ArwBIAJCADcCxAEgAkIANwLMASACQgA3AtQBIAJBADYC3AEgAkEANgKwAiACQgA3A6gCIAJBAToA4AEgAkIANwLkASACQgA3AOkBIAJCADcD+AEgAkIANwOAAiACQgA3A4gCIAJCADcDkAIgAkIANwOYAiACQQA6AKACIAJBATsBtAIgAkIANwO4AiACQgA3A8ACIAJCADcDyAIgAkEANgKAAyACQgA3AvgCIAJCgICAgICAgPg/NwPQAiACQgA3A6ABIAJCADcDmAEgAkIANwOQASACQgA3A4gBIAJCADcDgAEgAkIANwN4IAJCADcDcCACQQA2AvACIAJCADcD6AIgAkIANwPgAiACQgA3A9gCIAJCADcChAMgAiAGNgI0IAJB+PgENgIQIAQgAjYCiAIgBCACQRBqNgKEAgwJCyACQejGuasHTARAIAJB6dbN6wZGDQYgAkHp2KWjB0cNCEH4AxAsIgVCADcCBCAFQaSJBTYCACAFQRBqIAMoArwBIAMoArQBENABIgJCADcCtAMgAkIANwPYAyACQQA6ANQDIAJBgIAENgLQAyACQgA3A8gDIAJBhIwFNgIAIAJCADcCvAMgAkIANwPgAyADQSRqIgYgBTYCBCAGIAI2AgAgBCADKAIkNgKEAiAEIAMoAig2AogCIANCADcCJCAGEG0MCQsgAkHpxrmrB0YNAyACQbHG2bMHRw0HQZADECwiAkIANwIUIAJCADcCBCACQQA6AKgBIAIgATYCJCACQa4gNgIgIAJCADcDKCACQgA3AkQgAkIANwJUIAJCADcDYCACQgA3AqwBIAJBiIYFNgIAIAJBADYCHCACQgA3AzAgAkIANwM4IAJBQGtBADsBACACQgA3AUogAkEAOgBcIAJBADoAaCACQgA3ArQBIAJCADcCvAEgAkIANwLEASACQgA3AswBIAJCADcC1AEgAkEANgLcASACQQA2ArACIAJCADcDqAIgAkEBOgDgASACQgA3AuQBIAJCADcA6QEgAkIANwP4ASACQgA3A4ACIAJCADcDiAIgAkIANwOQAiACQgA3A5gCIAJBADoAoAIgAkEBOwG0AiACQgA3A7gCIAJCADcDwAIgAkIANwPIAiACQQA2AoADIAJCADcC+AIgAkKAgICAgICA+D83A9ACIAJCADcDoAEgAkIANwOYASACQgA3A5ABIAJCADcDiAEgAkIANwOAASACQgA3A3ggAkIANwNwIAJBADYC8AIgAkIANwPoAiACQgA3A+ACIAJCADcD2AIgAkIANwKEAyACIAY2AjQgAkHg/gQ2AhAgBCACNgKIAiAEIAJBEGo2AoQCDAgLQZADECwiAkIANwIUIAJCADcCBCACQQA6AKgBIAIgATYCJCACQa4gNgIgIAJCADcDKCACQgA3AkQgAkIANwJUIAJCADcDYCACQgA3AqwBIAJBuIUFNgIAIAJBADYCHCACQgA3AzAgAkIANwM4IAJBQGtBADsBACACQgA3AUogAkEAOgBcIAJBADoAaCACQgA3ArQBIAJCADcCvAEgAkIANwLEASACQgA3AswBIAJCADcC1AEgAkEANgLcASACQQA2ArACIAJCADcDqAIgAkEBOgDgASACQgA3AuQBIAJCADcA6QEgAkIANwP4ASACQgA3A4ACIAJCADcDiAIgAkIANwOQAiACQgA3A5gCIAJBADoAoAIgAkEBOwG0AiACQgA3A7gCIAJCADcDwAIgAkIANwPIAiACQQA2AoADIAJCADcC+AIgAkKAgICAgICA+D83A9ACIAJCADcDoAEgAkIANwOYASACQgA3A5ABIAJCADcDiAEgAkIANwOAASACQgA3A3ggAkIANwNwIAJBADYC8AIgAkIANwPoAiACQgA3A+ACIAJCADcD2AIgAkIANwKEAyACIAY2AjQgAkHo8wQ2AhAgBCACNgKIAiAEIAJBEGo2AoQCDAcLQZADECwiAkIANwIUIAJCADcCBCACQQA6AKgBIAIgATYCJCACQa4gNgIgIAJCADcDKCACQgA3AkQgAkIANwJUIAJCADcDYCACQgA3AqwBIAJB4IUFNgIAIAJBADYCHCACQgA3AzAgAkIANwM4IAJBQGtBADsBACACQgA3AUogAkEAOgBcIAJBADoAaCACQgA3ArQBIAJCADcCvAEgAkIANwLEASACQgA3AswBIAJCADcC1AEgAkEANgLcASACQQA2ArACIAJCADcDqAIgAkEBOgDgASACQgA3AuQBIAJCADcA6QEgAkIANwP4ASACQgA3A4ACIAJCADcDiAIgAkIANwOQAiACQgA3A5gCIAJBADoAoAIgAkEBOwG0AiACQgA3A7gCIAJCADcDwAIgAkIANwPIAiACQQA2AoADIAJCADcC+AIgAkKAgICAgICA+D83A9ACIAJCADcDoAEgAkIANwOYASACQgA3A5ABIAJCADcDiAEgAkIANwOAASACQgA3A3ggAkIANwNwIAJBADYC8AIgAkIANwPoAiACQgA3A+ACIAJCADcD2AIgAkIANwKEAyACIAY2AjQgAkGE9gQ2AhAgBCACNgKIAiAEIAJBEGo2AoQCDAYLQZADECwiAkIANwIUIAJCADcCBCACQQA6AKgBIAIgATYCJCACQa4gNgIgIAJCADcDKCACQgA3AkQgAkIANwJUIAJCADcDYCACQgA3AqwBIAJBsIYFNgIAIAJBADYCHCACQgA3AzAgAkIANwM4IAJBQGtBADsBACACQgA3AUogAkEAOgBcIAJBADoAaCACQgA3ArQBIAJCADcCvAEgAkIANwLEASACQgA3AswBIAJCADcC1AEgAkEANgLcASACQQA2ArACIAJCADcDqAIgAkEBOgDgASACQgA3AuQBIAJCADcA6QEgAkIANwP4ASACQgA3A4ACIAJCADcDiAIgAkIANwOQAiACQgA3A5gCIAJBADoAoAIgAkEBOwG0AiACQgA3A7gCIAJCADcDwAIgAkIANwPIAiACQQA2AoADIAJCADcC+AIgAkKAgICAgICA+D83A9ACIAJCADcDoAEgAkIANwOYASACQgA3A5ABIAJCADcDiAEgAkIANwOAASACQgA3A3ggAkIANwNwIAJBADYC8AIgAkIANwPoAiACQgA3A+ACIAJCADcD2AIgAkIANwKEAyACIAY2AjQgAkGAgQU2AhAgBCACNgKIAiAEIAJBEGo2AoQCDAULIANBJGoQvwQiC0EIakHKpQFBFBAtISsgA0EQaiIFIAMoArgBEKQBICsgAygCECAFIAMsABsiAkEASCIFGyADKAIUIAIgBRsQLUHCmwFBExAtGiADLAAbQQBIBEAgAygCGBogAygCEBAqCyADQQRqIgIgCxC+BCADQRBqQQRBuRcgAhAvIQYgAywAD0EASARAIAMoAgwaIAMoAgQQKgsgA0EEaiEKQaADECwiEUIANwIEIBFB2IYFNgIAIBFBEGohAiMAQSBrIgUkACADKAK0ASEQIAMoArgBIQ8gBSAGKQIAIjs3AwggBUEQaiEIAkAgBiwAE0EATgRAIAggBikCCDcCACAIIAYoAhA2AggMAQsgCCAGKAIIIAYoAgwQLiAFKQMIITsLIAJCADcCBCACQQA6AJgBIAJCADcCNCACQgA3AkQgAkIANwNQIAJCADcCnAEgAkEANgIMIAJBriA2AhAgAkIANwE6IAJBADoATCACQQA6AFggAkIANwKkASACQgA3AqwBIAJCADcCtAEgAkIANwK8ASACQgA3AsQBIAJBADYCzAEgAkIANwEqIAJCADcCJCACQgA3AhwgAkIANwIUIAJBADYCoAIgAkIANwOYAiACQQE6ANABIAJCADcC1AEgAkIANwDZASACQgA3A+gBIAJCADcD8AEgAkIANwP4ASACQgA3A4ACIAJCADcDiAIgAkEAOgCQAiACQQE7AaQCIAJCADcDqAIgAkIANwOwAiACQgA3A7gCIAJBADYC8AIgAkIANwLoAiACQoCAgICAgID4PzcDwAIgAkIANwOQASACQgA3A4gBIAJCADcDgAEgAkIANwN4IAJCADcDcCACQgA3A2ggAkIANwNgIAJBADYC4AIgAkIANwPYAiACQgA3A9ACIAJCADcDyAIgAiA7NwL4AiACIBA2AiQgAiAPNgL0AiACQYCHBTYCACACQYADaiEQAkAgBSwAG0EATgRAIBAgCCkDADcDACAQIAgoAgg2AggMAQsgECAFKAIQIAUoAhQQLiAFLAAbQQBODQAgBSgCGBogBSgCEBAqCyAFQSBqJAAgCiARNgIEIAogAjYCACAEIAMoAgQ2AoQCIAQgAygCCDYCiAIgA0IANwIEIAoQbSAGLAATQQBIBEAgBigCEBogBigCCBAqCyALEOkBGgwECyADQSRqQQRBuRcgA0EQakGuHBCAASIGEC8hBSAEAn9BoAMQLCICQgA3AgQgAkHYhgU2AgAgBSgCDCEKIAUoAgghCCADKAK4ASEQIAMoArQBIQsgBUIANwIIIAUoAhAhESAFQQA2AhAgBSkCACE7IAJBADYCHCACQgA3AhQgAkEAOgCoASACQa4gNgIgIAJCADcCRCACQgA3AUogAkIANwJUIAJBADoAXCACQgA3A2AgAkEAOgBoIAJCADcCrAEgAkIANwK0ASACQgA3ArwBIAJCADcCxAEgAkIANwLMASACQgA3AtQBIAJBADYC3AEgAkIANwE6IAJCADcCNCACQgA3AiwgAkIANwIkIAJBADYCsAIgAkIANwOoAiACQQE6AOABIAJCADcC5AEgAkIANwDpASACQgA3A/gBIAJCADcDgAIgAkIANwOIAiACQgA3A5ACIAJCADcDmAIgAkEAOgCgAiACQQE7AbQCIAJCADcDuAIgAkIANwPAAiACQgA3A8gCIAJBADYCgAMgAkIANwP4AiACQoCAgICAgID4PzcD0AIgAkIANwOgASACQgA3A5gBIAJCADcDkAEgAkIANwOIASACQgA3A4ABIAJCADcDeCACQgA3A3AgAkEANgLwAiACQgA3A+gCIAJCADcD4AIgAkIANwPYAiACIDs3A4gDIAIgCzYCNCACIBA2AoQDIAJBgIcFNgIQIBFBAE4EQCACIBE2ApgDIAIgCjYClAMgAiAINgKQAyACDAELIAJBkANqIAggChAuIAgQKiACCyICNgKIAiAEIAJBEGo2AoQCIANCADcCBCADQQRqEG0gBSwAE0EASARAIAUoAhAaIAUoAggQKgsgBiwAC0EATg0DIAYoAggaIAYoAgAQKgwDC0GIAxAsIgJCADcCBCACQYSIBTYCACADKAK0ASEFIAMoArwBIQYgAkEANgIcIAJCADcCFCACQQA6AKgBIAIgBjYCJCACQa4gNgIgIAJCADcDKCACQgA3AzAgAkIANwM4IAJBQGtBADsBACACQgA3AkQgAkIANwFKIAJCADcCVCACQQA6AFwgAkIANwNgIAJBADoAaCACQQA2AtwBIAJCADcC1AEgAkIANwLMASACQgA3AsQBIAJCADcCvAEgAkIANwK0ASACQgA3AqwBIAJBADYCsAIgAkIANwOoAiACQQE6AOABIAJCADcC5AEgAkIANwDpASACQgA3A/gBIAJCADcDgAIgAkIANwOIAiACQgA3A5ACIAJCADcDmAIgAkEAOgCgAiACQQE7AbQCIAJCADcDuAIgAkIANwPAAiACQgA3A8gCIAJBADYCgAMgAkIANwL4AiACQoCAgICAgID4PzcD0AIgAkIANwOgASACQgA3A5gBIAJCADcDkAEgAkIANwOIASACQgA3A4ABIAJCADcDeCACQgA3A3AgAkEANgLwAiACQgA3A+gCIAJCADcD4AIgAkIANwPYAiACIAU2AjQgAkGsgwU2AhAgA0EkaiIFIAI2AgQgBSACQRBqNgIAIAQgAygCJDYChAIgBCADKAIoNgKIAiADQgA3AiQgBRBtDAILQbADECwiBUIANwIEIAVB1IgFNgIAIAVBEGogAygCvAEgAygCtAEQ0AEiAkIANwL0AiACQgA3A4ADIAJBtIoFNgIAIAJBADsB/AIgAkIANwOIAyACQgA3A5ADIAJCADcDmAMgA0EkaiIGIAU2AgQgBiACNgIAIAQgAygCJDYChAIgBCADKAIoNgKIAiADQgA3AiQgBhBtDAELIARCADcChAILIANBwAFqJAACQCAEKAKEAiIIRQRAQQMhCgwBCyAEKAKIAiIFBEAgBSAFKAIEQQFqNgIECwJAAkACQCANIgYiAygCACICRQ0AA0AgAiIDKAIQIgIgCUsEQCADIQYgAygCACICDQEMAgsgAiAJTw0CIAMoAgQiAg0ACyADQQRqIQYLQRwQLCICIAU2AhggAiAINgIUIAIgCTYCECACIAM2Aggg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IRgDQCAEQagCaiAUIAIoAhQoAiQQpgMCQCAEKAKoAiIKIAQoAqwCIidGBEBBEiEHDAELIAJBFGohDwJ/AkACQANAAkAgCigCECIDQezw1YsGRwRAIANB4tqhowdHDQEgBEEANgJoIARCADcCYAJ/AkAgCigCMCIDIAooAiwiBUYiBw0AIAMgBWsiA0EASA0PIAQgAxAsIgg2AmAgBCADIAhqIgY2AmggCCAFIAMQMhogBCAGNgJkIAcNAANAIAgoAgAhByAPKAIAIglBAToAMQJAAkAgDSIFKAIAIgNFDQADQCAFIAMgAygCECAHSSILGyEFIAMgC0ECdGooAgAiAw0ACyAFIA1GDQAgByAFKAIQTw0BCyAEQTAQLCIDNgLwASAEQqmAgICAhoCAgH83AvQBIANBq9wAKQAANwAAIANBADoAKSADQdPcAC0AADoAKCADQcvcACkAADcAICADQcPcACkAADcAGCADQbvcACkAADcAECADQbPcACkAADcACCAAQQJB0A8gBEHwAWoQLxogBCwA+wFBAEgEQCAEKAL4ARogBCgC8AEQKgtBAAwDCyAFKAIUIgMtADFBAUYEQCAEQSgQLCIDNgLwASAEQqaAgICAhYCAgH83AvQBIANB9z4pAAA3AAAgA0EAOgAmIANBlT8pAAA3AB4gA0GPPykAADcAGCADQYc/KQAANwAQIANB/z4pAAA3AAggAEECQdAPIARB8AFqEC8aIAQsAPsBQQBIBEAgBCgC+AEaIAQoAvABECoLQQAMAwsgAyAJRgRAIARBKBAsIgM2AvABIARCooCAgICFgICAfzcC9AEgA0GL6QApAAA3AAAgA0EAOgAiIANBq+kALwAAOwAgIANBo+kAKQAANwAYIANBm+kAKQAANwAQIANBk+kAKQAANwAIIABBAkHQDyAEQfABahAvGiAELAD7AUEASARAIAQoAvgBGiAEKALwARAqC0EADAMLIAMCfyADKAI4IgUgAygCPEkEQCAFIAk2AgAgBSACKAIYIgM2AgQgAwRAIAMgAygCBEEBajYCBAsgBUEIagwBCyADQTRqIA8QYQs2AjggCEEEaiIIIAZHDQALCyABIA8QmANBAQshMiAEKAJgIgMEQCAEIAM2AmQgBCgCaBogAxAqCyAyDQFBAQwFCwJAAkACQAJAAkACQAJAAkACQCAPKAIAIgUoAhgiAyAFKAIcIgVHBEADQAJAIAMoAgAiBkUNACAGQaC/BEHYxwQQOSIMRQ0AIAMoAgQiEgRAIBIgEigCBEEBajYCBAtBACELIARBADYCaCAEQgA3AmBBACEJIAooAjAiAyAKKAIsIgVHBEAgAyAFayIDQQBIDRkgBCADECwiCTYCYCAEIAMgCWoiCzYCaCAJIAUgAxAyGiAEIAs2AmQLIAxB6ABqIQ4gDCgCbCIFIAwsAHMiAyADQQBIIgYbIgdBGWsOEwMEBwcHBwcHBwcHBwcHBwcHBwUHCyADQQhqIgMgBUcNAAsLIAQgITYCYCAEQaDTAzYCaCAEQbTTAzYCoAEgBEHgAGoiAyAiKAIAaiAWNgIAIARBADYCZCADIAQoAmBBDGsoAgBqIgUgGRA+IAVCgICAgHA3AkggBCAfNgJoIBogICgCAGogJjYCACAEIB02AmAgAyAeKAIAaiAlNgIAIARBtNMDNgKgASAEQYzTAzYCYCAEQaDTAzYCaCAZED8iB0HwywM2AgAgBEIANwKUASAEQgA3AowBIARBGDYCnAEgGkGxrgFBGxAtIA8oAgAoAiQQPBoCQCAEKAKcASIDQRBxBEAgECEDIAQoApgBIgYgBCgChAEiBU8NASAEIAU2ApgBIAUhBgwBCyADQQhxRQRAQQAhAyAEQQA6APsBIARB8AFqIQYMDgsgBCgCfCEGIBEhAwsgBiADKAIAIgVrIgNB+P///wdPDQUgA0ELTwRAIANBB3JBAWoiCRAsIQYgBCAJQYCAgIB4cjYC+AEgBCAGNgLwASAEIAM2AvQBDAwLIAQgAzoA+wEgBEHwAWohBiADDQtBACEDDAwLIA4oAgAgDiAGG0H0jQFBGRBfDQMgCSALRw0CDAMLIA4oAgAgDiAGG0HZjQEgBxBfDQIgCSALRw0BDAILIA4oAgAgDiAGG0Gp+gAgBxBfDQEgCSALRg0BCwNAIAkoAgAhBgJAAkACQCANIgUoAgAiA0UNAANAIAUgAyADKAIQIAZJIgcbIQUgAyAHQQJ0aigCACIDDQALIAUgDUYNACAGIAUoAhBPDQELIAEoAjAgBhC7Ag0BIARBKBAsIgM2AvABIARCo4CAgICFgICAfzcC9AEgA0G48QApAAA3AAAgA0EAOgAjIANB1/EAKAAANgAfIANB0PEAKQAANwAYIANByPEAKQAANwAQIANBwPEAKQAANwAIIABBAkHQDyAEQfABahAvGiAELAD7AUEASARAIAQoAvgBGiAEKALwARAqC0EBIQMMBgsgBSgCFCEHIAUoAhgiBQRAIAUgBSgCBEEBajYCBAsCQCAHIA8oAgAiCEYEQCAEQSAQLCIDNgLwASAEQp6AgICAhICAgH83AvQBIANBzekAKQAANwAAIANBADoAHiADQePpACkAADcAFiADQd3pACkAADcAECADQdXpACkAADcACCAAQQJB0A8gBEHwAWoQLxogBCwA+wFBAEgEQCAEKAL4ARogBCgC8AEQKgtBASEDDAELIAhBAToAQCACKAIYIgMEQCADIAMoAgRBAWo2AgQLIAcgCDYCRCAHKAJIIQYgByADNgJIQQAhAyAGRQ0AIAYgBigCBCITQQFrNgIEIBMNACAGIAYoAgAoAggRAAAgBhArCwJAIAVFDQAgBSAFKAIEIgZBAWs2AgQgBg0AIAUgBSgCACgCCBEAACAFECsLIAcgCEYNBQsgCUEEaiIJIAtHDQALIAwtAHMhAyAMKAJsIQULAkACQAJAIAUgAyADwEEASCIDG0Eaaw4SAAQEBAQEBAQEBAQEBAQEBAQBBAsgDigCACAOIAMbQeqLAUEaEF9FDQEMAwsgDigCACAOIAMbQfbEAEErEF8NAgsgDygCAEEBOgBMIAQoAmAiCSAEKAJkIihGDQEDQAJAIAkoAgAhBgJAAkACQCANIgUoAgAiA0UNAANAIAUgAyADKAIQIAZJIgcbIQUgAyAHQQJ0aigCACIDDQALIAUgDUYNACAGIAUoAhBPDQELIAEoAjAgBhC7Ag0BIARBKBAsIgM2AvABIARCo4CAgICFgICAfzcC9AEgA0Hy8AApAAA3AAAgA0EAOgAjIANBkfEAKAAANgAfIANBivEAKQAANwAYIANBgvEAKQAANwAQIANB+vAAKQAANwAIIABBAkHQDyAEQfABahAvGiAELAD7AUEASARAIAQoAvgBGiAEKALwARAqC0EBIQMMBgsgDygCACIDIAUoAhQiBUYEQCAEQSAQLCIDNgLwASAEQp6AgICAhICAgH83AvQBIANBrukAKQAANwAAIANBADoAHiADQcTpACkAADcAFiADQb7pACkAADcAECADQbbpACkAADcACCAAQQJB0A8gBEHwAWoQLxogBCwA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BEAgBCgCsAIaIAQoAqgCECoLIAJBI0dBACACGw0CIAdBBGoiByARRw0ACwJAIAQoApwCIhEgBCgCoAIiEEYNACAURQ0AA0AgBEHgAGogFCARKAIAIgZB7crJgwcQugECQCAEKAJgIgggBCgCZCIJRgRAQQEhAwwBCyAIIQcCQCANKAIAIgVFDQADQCANIQIgBSEDA0AgAiADIAMoAhAgBkkiChshAiADIApBAnRqKAIAIgMNAAsgAiANRg0BIAYgAigCEEkNAUEBIQMgAigCFEEBOgBBIAdBBGoiByAJRw0ACwwBCyAEQTAQLCIDNgKoAiAEQqqAgICAhoCAgH83AqwCIANB2NsAKQAANwAAIANBADoAKiADQYDcAC8AADsAKCADQfjbACkAADcAICADQfDbACkAADcAGCADQejbACkAADcAECADQeDbACkAADcACCAAQQJB0A8gBEGoAmoQLxogBCwAswJBAEgEQCAEKAKwAhogBCgCqAIQKgtBACEDIAQoAmAhCAsgCARAIAQgCDYCZCAEKAJoGiAIECoLIANFDQMgEUEEaiIRIBBHDQALIAQoAqACIRAgBCgCnAIhEQsgECARRg0AIAFBgAFqIQ4DQAJAIAEoAjAgESgCACILEOcBQe7CnZMHRw0AQSQQLCIDQgA3AhAgA0IANwIEIANBpOQENgIAIANCADcCGCADQQA2AiAgBCADNgIcIAQgA0EMajYCGCADIAs2AgwgBEEANgL4ASAEQgA3AvABIARBqAJqIAEoAjAgCyAEQfABahCBAgJAIAQoAqgCBEAgACAEKQOoAjcCACAAIAQoArgCNgIQIAAgBCkCsAI3AgggBEIANwOwAiAEQQA2ArgCQQEhBgwBCyAEQQRqIQkgBCgCGCEIIwBBEGsiAyQAAkAgBEHwAWoiCigCBCAKKAIAIgJrIgVBB00EQCADQSAQLCICNgIEIANCmYCAgICEgICAfzcCCCACQcr5ACkAADcAACACQQA6ABkgAkHi+QAtAAA6ABggAkHa+QApAAA3ABAgAkHS+QApAAA3AAggCUECQYgBIANBBGoQLxogAywAD0EATg0BIAMoAgwaIAMoAgQQKgwBCwJ/IAItAAFBAXEiDARAIAVBC00EQCADQRgQLCICNgIEIANCloCAgICDgICAfzcCCCACQYTOACkAADcAACACQQA6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BEGg0wM2AiAgBRA/IgVB8MsDNgIAIARCADcCTCAEQgA3AkQgBEEYNgJUIAdB8KYBQRoQLSAGEDxBhqkBQSwQLSADKAI4EDxB3pYBQQoQLRoCfyAEKAJUIgFBEHEEQCAEKAJQIgEgBCgCPCICSQRAIAQgAjYCUCACIQELIARBOGoMAQsgAUEIcUUEQEEAIQEgBEEAOgAXIARBDGohAgwGCyAEKAI0IQEgBEEsagshAiABIAIoAgAiA2siAUH4////B08NAiABQQtPBEAgAUEHckEBaiIGECwhAiAEIAZBgICAgHhyNgIUIAQgAjYCDCAEIAE2AhAMBAsgBCABOgAXIARBDGohAiABDQNBACEBDAQLIAFB7ABqIQMCQAJAIAEoAnAgASgCbCIHa0ECdSIFIAZJBEAgAyAGIAVrEKoBDAELIAUgBksEQCABIAcgBkECdGo2AnALIAZFDQELQQAhAQNAIAIQSSEFIAMoAgAgAUECdGogBTYCACABQQFqIgEgBkcNAAsLIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwHCyAAQZilBSgCAEGcpQUoAgAQLgwGCxA4AAsQOAALIAIgAyABEDcaCyABIAJqQQA6AAAgAEECQegHIARBDGoQLxogBCwAF0EASARAIAQoAhQaIAQoAgwQKgsgBEG80wMoAgAiADYCGCAAQQxrKAIAIARBGGpqQdzTAygCADYCACAEQeDTAygCADYCICAFQfDLAzYCACAELABPQQBIBEAgBCgCTBogBCgCRBAqCyAFED0aIARB2ABqEDsaDAILIAIgBiABEDcaCyABIAJqQQA6AAAgAEECQeQAIARBDGoQLxogBCwAF0EASARAIAQoAhQaIAQoAgwQKgsgBEG80wMoAgAiADYCGCAAQQxrKAIAIARBGGpqQdzTAygCADYCACAEQeDTAygCADYCICADQfDLAzYCACAELABPQQBIBEAgBCgCTBogBCgCRBAqCyADED0aIARB2ABqEDsaCyAELAC7AUEASARAIAQoArgBGiAEKAKwARAqCyAEQcABaiQAC18BAn8jAEEQayIDJAAgAyACNgIMIANBCGogA0EMahCnASEEIAAgARDZAiEBIAQoAgAiAARAQeivBigCABogAARAQeivBkHw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IAAoAgBBDGsoAgBqKAIQRQRAIAAgACgCAEEMaygCAGooAkgiAgRAIAIQvwMLIAFBAToACAsCQCABLQAIRQ0AIAAgACgCAEEMaygCAGooAhgiAiACKAIAKAIYEQEAQX9HDQAgACAAKAIAQQxrKAIAakEBEKMBCyABQQhqEHILIAFBEGokAAsUACAAQdDKAzYCACAAQQRqEEcgAAsJACAAEM8CECoLJAEBfwJAIAAoAgAiAkUNACACIAEQzAVBf0cNACAAQQA2AgALCwkAIAAQ0QIQKgukAQEEfyMAQTBrIgMkACAAIAAoAgBBDGsoAgBqIgQgBCgCEEF9cSIEEHogA0EvaiAAEMYDIAMtAC8EQCADQRhqIgUgACAAKAIAQQxrKAIAaigCGCIGIAEgAkEIIAYoAgAoAhARGAAgA0EIaiICQn83AwggAkIANwMAIAAgACgCAEEMaygCAGogBEEEciAEIAUpAwggAikDCFEbEKMBCyADQTBqJAALCQAgACABEKMBC2cBAn8jAEEQayIDJAAgAEEAOgAAIAEgASgCAEEMaygCAGohAgJAIAIoAhBFBEAgAigCSARAIAIoAkgQlQILIAAgASABKAIAQQxrKAIAaigCEEU6AAAMAQsgAkEEEKMBCyADQRBqJAALCQAgABDSAhAqCwsAIAEgAiAAELEBC3MBBn8gACgCTBogABDPASEGIAAgACgCDBEBACEFIAAtAABBAXFFBEAgACgCOCEBIAAoAjQiAgRAIAIgATYCOAsgAQRAIAEgAjYCNAsgAEHMrgYoAgBGBEBBzK4GIAE2AgALIAAoAmAQKiAAECoLIAYgBXIL6wMCA34FfyMAQSBrIgYkACABQv///////z+DIQICfiABQjCIQv//AYMiA6ciBUGB+ABrQf0PTQRAIAJCBIYgAEI8iIQhAiAFQYD4AGutIQMCQCAAQv//////////D4MiAEKBgICAgICAgAhaBEAgAkIBfCECDAELIABCgICAgICAgIAIUg0AIAJCAYMgAnwhAgtCACACIAJC/////////wdWIgUbIQQgBa0gA3wMAQsCQCAAIAKEUA0AIANC//8BUg0AIAJCBIYgAEI8iIRCgICAgICAgASEIQRC/w8MAQsgBUH+hwFLBEBC/w8MAQtCAEGA+ABBgfgAIANQIggbIgkgBWsiB0HwAEoNABog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LQAAOgAAIAlBAWoiCSACRw0ACwsgCCAAa0F8TQRAA0AgA0EBayAFQQFrLQAAOgAAIANBAmsgBUECay0AADoAACADQQNrIAVBA2stAAA6AAAgA0EEayIDIAVBBGsiBS0AADoAACAFIAhHDQALCyAGKAKAARogBigCeCEICyAGIA02AoABIAYgBDYCfCAGIAE2AnggCEUNACAIECoLIAYgBDYCfCAPKAIAQQEQQCEEAkAgBigCfCIAIAYoAoABIgFJBEAgACAEOgAAIABBAWohBAwBCyAAIAYoAngiCGsiBUEBaiIDQQBIDQQgBUH/////ByABIAhrIgJBAXQiASADIAEgA0sbIAJB/////wNPGyICBH8gAhAsBUEACyIBaiIDIAQ6AAAgASACaiENIANBAWohBAJAIAAgCEYEQCADIQEMAQsCQCAFQQNxIgJFBEAgACEFDAELQQAhCSAAIQUDQCADQQFrIgMgBUEBayIFLQAAOgAAIAlBAWoiCSACRw0ACwsgCCAAa0F8TQRAA0AgA0EBayAFQQFrLQAAOgAAIANBAmsgBUECay0AADoAACADQQNrIAVBA2stAAA6AAAgA0EEayIDIAVBBGsiBS0AADoAACAFIAhHDQALCyAGKAKAARogBigCeCEICyAGIA02AoABIAYgBDYCfCAGIAE2AnggCEUNACAIECoLIAYgBDYCfCAPKAIAQQIQQCEEIAYoAnwiACAGKAKAASIBSQRAIAAgBDoAACAGIABBAWo2AnwMAgsgACAGKAJ4IghrIgVBAWoiA0EASA0DIAVB/////wcgASAIayICQQF0IgEgAyABIANLGyACQf////8DTxsiAgR/IAIQLAVBAAsiAWoiAyAEOgAAIAEgAmohBCADQQFqIQ0CQCAAIAhGBEAgAyEBDAELAkAgBUEDcSICRQRAIAAhBQwBC0EAIQkgACEFA0AgA0EBayIDIAVBAWsiBS0AADoAACAJQQFqIgkgAkcNAAsLIAggAGtBfE0EQANAIANBAWsgBUEBay0AADoAACADQQJrIAVBAmstAAA6AAAgA0EDayAFQQNrLQAAOgAAIANBBGsiAyAFQQRrIgUtAAA6AAAgBSAIRw0ACwsgBigCgAEaIAYoAnghCAsgBiAENgKAASAGIA02AnwgBiABNgJ4IAgEQCAIECoLIAYgDTYCfAwBCyAB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AlA2AXIgCyACNgIEIAsgADYCACACIAIoAgRBAWo2AgQCQCAKKAIEIgEgCigCCEkEQCABIAI2AgQgASAANgIAIAogAUEIajYCBAwBCyAKIAsQUyEAIAsoAgQhASAKIAA2AgQgAUUNACABIAEoAgQiAEEBazYCBCAADQAgASABKAIAKAIIEQAAIAEQKwsgAiACKAIEIgBBAWs2AgQgAA0AIAIgAigCACgCCBEAACACECsLAkAgDygCAC0AbEEBRw0AQZABECwiAkIANwIEIAJB4N0ENgIAIAJBEGoiAUIANwMQIAFCADcDCCABQn83AzggAUIANwNIIAFCADcCZCABQQA2AjAgAUIANwMoIAFCADcDICABQgA3AxggAUFAa0J/NwMAIAFCADcDUCABQgA3A1ggAUEAOgBgIAFCADcCbCABQgA3AnQgAUH2xpHrBjYCECABQai+BDYCACAPKAIAIgApAlwhECAAKQJUIREgAiAAKQJkNwKEASACIBA3AnwgAiARNwJ0IAsgAjYCBCALIAE2AgAgAiACKAIEQQFqNgIEAkAgCigCBCIAIAooAghJBEAgACACNgIEIAAgATYCACAKIABBCGo2AgQMAQsgCiALEFMhACALKAIEIQEgCiAANgIEIAFFDQAgASABKAIEIgBBAWs2AgQgAA0AIAEgASgCACgCCBEAACABECsLIAIgAigCBCIAQQFrNgIEIAANACACIAIoAgAoAggRAAAgAhArCyAGIAYoAgQiAEEBazYCBCAARQRAIAYgBigCACgCCBEAACAGECsLIAwgDCgCBCIAQQFrNgIEIAANACAMIAwoAgAoAggRAAAgDBArCyALQRBqJAAPCxA2AAuNAQACfwJAAkACQAJAIABB5srB0wZMBEAgAEGx4NiLBkYNAiAAQbHG2cMGRg0BIABBsdbJ0QZHDQRBBw8LIABB6Ma5qwdMBEBBAyAAQefKwdMGRg0FGiAAQenWzesGRw0EQQkPCyAAQenGuasHRg0CIABBscbZswdHDQNBBQ8LQQEPC0EEDwtBCA8LQQALC3oBA38CfwJAAkAgACgCQCIDRQ0AIABBQGsiBCEAA0AgACADIAMoAhAgAUgiBRshACADIAVBAnRqKAIAIgMNAAsgACAERg0AIAAoAhAgAUwNAQtBACACRQ0BGiACQQA2AgBBAA8LIAIEQCACIAAoAjQ2AgALIAAoAiwLC8QCAQR/IABB6IEFNgIAIAAoAowBIgMEQCAAKAKQASICIAMiAUcEQANAIAJBDGsiASgCACIEBEAgAkEIayAENgIAIAJBBGsoAgAaIAQQKgsgASICIANHDQALIAAoAowBIQELIAAgAzYCkAEgACgClAEaIAEQKgsgACgCgAEiAwRAIAAoAoQBIgIgAyIBRwRAA0AgAkEMayIBKAIAIgQEQCACQQhrIAQ2AgAgAkEEaygCABogBBAqCyABIgIgA0cNAAsgACgCgAEhAQsgACADNgKEASAAKAKIARogARAqCyAAKAJ0IgMEQCAAKAJ4IgIgAyIBRwRAA0AgAkEMayIBKAIAIgQEQCACQQhrIAQ2AgAgAkEEaygCABogBBAqCyABIgIgA0cNAAsgACgCdCEBCyAAIAM2AnggACgCfBogARAqCyAAEFYLTQAgAEIANwIAIABBADYCMCAAQgA3AiggAEEgaiIBQgA3AgAgAEIANwIYIABCADcCECAAQgA3AgggAUIANwIAIAFBADYCECABQgA3AggLtAIBCH8gAEGYgAU2AgAgACgCsAEiBARAIAAoArQBIgIgBCIBRwRAA0AgAkEMayIHKAIAIgUEQCACQQhrIggoAgAiASAFIgNHBEADQCABQQxrIgMoAgAiBgRAIAFBCGsgBjYCACABQQRrKAIAGiAGECoLIAMiASAFRw0ACyAHKAIAIQMLIAggBTYCACACQQRrKAIAGiADECoLIAJBEGsiAiAERw0ACyAAKAKwASEBCyAAIAQ2ArQBIAAoArgBGiABECoLIAAoApwBIgEEQCAAIAE2AqABIAAoAqQBGiABECoLIAAoApABIgEEQCAAIAE2ApQBIAAoApgBGiABECoLIAAoAoQBIgEEQCAAKAKMARogARAqCyAAKAJ4IgEEQCAAIAE2AnwgACgCgAEaIAEQKgsgABBWC84OAQ9/IAAoArABIg0gACgCtAEiDkcEQANAAkAgDSgCBCILIA0oAggiD0YNAANAAkAgCygCACEMIAsoAgQhEAJAIAEoAgQiBCABKAIIIgBJBEAgBEEAOgAAIARBAWohBQwBCyAEIAEoAgAiA2siB0EBaiICQQBIDQEgB0H/////ByAAIANrIgZBAXQiACACIAAgAksbIAZB/////wNPGyIABH8gABAsBUEACyIGaiICQQA6AAAgACAGaiEJIAJBAWohBQJAIAMgBEYEQCACIQYMAQtBACEIIAQhACAHQQNxIgcEQANAIAJBAWsiAiAAQQFrIgAtAAA6AAAgCEEBaiIIIAdHDQALCyADIARrQXxNBEADQCACQQFrIABBAWstAAA6AAAgAkECayAAQQJrLQAAOgAAIAJBA2sgAEEDay0AADoAACACQQRrIgIgAEEEayIALQAAOgAAIAAgA0cNAAsLIAEoAggaIAEoAgAhAwsgASAJNgIIIAEgBTYCBCABIAY2AgAgA0UNACADECoLIAEgBTYCBAJAIAEoAggiACAFSwRAIAVBADoAACAFQQFqIQQMAQsgBSABKAIAIgNrIgdBAWoiAkEASA0BIAdB/////wcgACADayIGQQF0IgAgAiAAIAJLGyAGQf////8DTxsiAAR/IAAQLAVBAAsiBmoiAkEAOgAAIAAgBmohCSACQQFqIQQCQCADIAVGBEAgAiEGDAELQQAhCCAFIQAgB0EDcSIHBEADQCACQQFrIgIgAEEBayIALQAAOgAAIAhBAWoiCCAHRw0ACwsgAyAFa0F8TQRAA0AgAkEBayAAQQFrLQAAOgAAIAJBAmsgAEECay0AADoAACACQQNrIABBA2stAAA6AAAgAkEEayICIABBBGsiAC0AADoAACAAIANHDQALCyABKAIIGiABKAIAIQMLIAEgCTYCCCABIAQ2AgQgASAGNgIAIANFDQAgAxAqCyABIAQ2AgQgECAMayIKQQh2IQUCQCABKAIIIgAgBEsEQCAEIAU6AAAgBEEBaiEFDAELIAQgASgCACIDayIHQQFqIgJBAEgNASAHQf////8HIAAgA2siBkEBdCIAIAIgACACSxsgBkH/////A08bIgAEfyAAECwFQQALIgZqIgIgBToAACAAIAZqIQkgAkEBaiEFAkAgAyAERgRAIAIhBgwBC0EAIQggBCEAIAdBA3EiBwRAA0AgAkEBayICIABBAWsiAC0AADoAACAIQQFqIgggB0cNAAsLIAMgBGtBfE0EQANAIAJBAWsgAEEBay0AADoAACACQQJrIABBAmstAAA6AAAgAkEDayAAQQNrLQAAOgAAIAJBBGsiAiAAQQRrIgAtAAA6AAAgACADRw0ACwsgASgCCBogASgCACEDCyABIAk2AgggASAFNgIEIAEgBjYCACADRQ0AIAMQKgsgASAFNgIEAkAgASgCCCIAIAVLBEAgBSAKOgAAIAVBAWohBAwBCyAFIAEoAgAiA2siB0EBaiICQQBIDQEgB0H/////ByAAIANrIgZBAXQiACACIAAgAksbIAZB/////wNPGyIABH8gABAsBUEACyIGaiICIAo6AAAgACAGaiEJIAJBAWohBAJAIAMgBUYEQCACIQYMAQtBACEIIAUhACAHQQNxIgcEQANAIAJBAWsiAiAAQQFrIgAtAAA6AAAgCEEBaiIIIAdHDQALCyADIAVrQXxNBEADQCACQQFrIABBAWstAAA6AAAgAkECayAAQQJrLQAAOgAAIAJBA2sgAEEDay0AADoAACACQQRrIgIgAEEEayIALQAAOgAAIAAgA0cNAAsLIAEoAggaIAEoAgAhAwsgASAJNgIIIAEgBDYCBCABIAY2AgAgA0UNACADECoLIAEgBDYCBAJAIAsoAgQiBiALKAIAIglrIghBAEwNACAIIAEoAggiACAEa0wEQCAGIAlHBEAgBCAJIAgQNxoLIAEgBCAIajYCBAwBCyAEIAEoAgAiA2siCiAIaiICQQBIDQFBACEMQQAhBUH/////ByAAIANrIgZBAXQiACACIAAgAksbIAZB/////wNPGyIABEAgABAsIQULIAAgBWohByAFIApqIgIgCSAIEDIiACAIaiEJAkAgAyAERgRAIAAhBQwBC0EAIQggBCEAIApBA3EiBgRAA0AgAkEBayICIABBAWsiAC0AADoAACAIQQFqIgggBkcNAAsLIAMgBGtBfE0EQANAIAJBAWsgAEEBay0AADoAACACQQJrIABBAmstAAA6AAAgAkEDayAAQQNrLQAAOgAAIAJBBGsiAiAAQQRrIgAtAAA6AAAgACADRw0ACwsgASgCBCIAIARrIQwgACAERg0AIAkgBCAMEDcaCyABIAkgDGo2AgQgASgCACEAIAEgBTYCACABKAIIGiABIAc2AgggAEUNACAAECoLIA8gC0EMaiILRw0BDAILCxA2AAsgDUEQaiINIA5HDQALC0EBC6IGAQt/IwBBEGsiBCQAAkACQCAAKAIEIgIgAUkEQAJAAkAgACgCCCIFQQV0IgMgASACayIGSQ0AIAIgAyAGa0sNACAAIAE2AgQgAkEfcSEDIAAoAgAgAkEDdkH8////AXFq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dSIEQQFqIgNBgICAgAFJBEBB/////wAgACgCCCACayICQQN1IgYgAyADIAZJGyACQfD///8HTxsiAgRAIAJBgICAgAFPDQIgAkEEdBAsIQULIAEvAQAhBiAFIARBBHRqIgNBADYCDCADQgA3AgQgAyAGOwEAIANBBGogASgCBCIEIAEoAggiASABIARrQQxtEPcCIAUgAkEEdGohCCADQRBqIQYCQCAAKAIEIgIgACgCACIERgRAIAMhBQwBCwNAIAJBEGsiAS8BACEHIANBBGsiCUEANgIAIANBDGsiCkIANwIAIANBEGsiBSAHOwEAIAogAkEMayIHKAIANgIAIANBCGsgAkEIaygCADYCACAJIAJBBGsiAygCADYCACADQQA2AgAgB0IANwIAIAUhAyABIgIgBEcNAAsgACgCBCECIAAoAgAhBAsgACAGNgIEIAAgBTYCACAAKAIIGiAAIAg2AgggAiAERwRAA0AgAkEMayIIKAIAIgAEQCACQQhrIgcoAgAiAyAAIgFHBEADQCADQQxrIgEoAgAiBQRAIANBCGsgBTYCACADQQRrKAIAGiAFECoLIAEiAyAARw0ACyAIKAIAIQELIAcgADYCACACQQRrKAIAGiABECoLIAJBEGsiAiAERw0ACwsgBARAIAQQKgsgBg8LEDYACxBPAAuHBAEIfwJAIAAoAgQgACgCACICa0EEdSIFQQFqIgNBgICAgAFJBEBB/////wAgACgCCCACayICQQN1IgcgAyADIAdJGyACQfD///8HTxsiAgRAIAJBgICAgAFPDQIgAkEEdBAsIQQLIAQgBUEEdGoiAyABLwEAOwEAIAMgASgCBDYCBCADIAEoAgg2AgggAyABKAIMNgIMIAFBADYCDCABQgA3AgQgBCACQQR0aiEIIANBEGohBwJAIAAoAgQiAiAAKAIAIgVGBEAgAyEEDAELA0AgAkEQayIBLwEAIQYgA0EEayIJQQA2AgAgA0EQayIEIAY7AQAgA0EMayACQQxrIgYoAgA2AgAgA0EIayACQQhrKAIANgIAIAkgAkEEayIDKAIANgIAIANBADYCACAGQgA3AgAgBCEDIAEiAiAFRw0ACyAAKAIEIQIgACgCACEFCyAAIAc2AgQgACAENgIAIAAoAggaIAAgCDYCCCACIAVHBEADQCACQQxrIggoAgAiAARA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ACADECsLCwsAIAAoAgAgARBkCx8BAX8CQCAARQ0AIAAoAgAiAEUNACAAKAIsIQELIAELHwEBfwJAIABFDQAgACgCACIARQ0AIAAoAighAQsgAQsfAAJAIAFFDQAgASgCACIARQ0AIAAQKiABQQA2AgALC/0EAQN/AkACQCACRQRAIABBADYCCCAAQgA3AgAgASgCrAEiBCABKAKoASIBRg0BIAQgAWsiAkEASA0CIAAgAhAsIgM2AgQgACADNgIAIAAgAiADajYCCANAIAMgASgCADYCACADIAEoAgQiAjYCBCACBEAgAiACKAIEQQFqNgIECyADQQhqIQMgAUEIaiIBIARHDQALIAAgAzYCBA8LIABBADYCCCAAQgA3AgAgASgCqAEiAyABKAKsASIERg0AIAJBBHEhBSACQQJxRQRAQQAhASAFRQRAA0AgAAJ/IAAoAgggAU0EQCAAIAMQYQwBCyABIAMoAgA2AgAgASADKAIEIgI2AgQgAgRAIAIgAigCBEEBajYCBAsgAUEIagsiATYCBCADQQhqIgMgBEcNAAwDCwALA0AgAygCACICLQBMRQRAIAACfyAAKAIIIAFNBEAgACADEGEMAQsgASACNgIAIAEgAygCBCICNgIEIAIEQCACIAIoAgRBAWo2AgQLIAFBCGoLIgE2AgQLIANBCGoiAyAERw0ACwwBC0EAIQEgBUUEQANAIAMoAgAiAi0AQEUEQCAAAn8gACgCCCABTQRAIAAgAxBhDAELIAEgAjYCACABIAMoAgQiAjYCBCACBEAgAiACKAIEQQFqNgIECyABQQhqCyIBNgIECyADQQhqIgMgBEcNAAwCCwALA0ACQCADKAIAIgItAEANACACLQBMDQAgAAJ/IAAoAgggAUsEQCABIAI2AgAgASADKAIEIgI2AgQgAgRAIAIgAigCBEEBajYCBAsgAUEIagwBCyAAIAMQYQsiATYCBAsgA0EIaiIDIARHDQALCw8LEDYACwoAIAAoAgAoAiQLCgAgACgCAC0AMAt1AQJ/IAJBgYAEa0H//3dJBEADQCABQQJtIQEgAkECbSICQYGABGtB//93SQ0ACwsCQCACQQFMDQADQCABQYGABGtB/v93Sw0BIAFBAm0hASACQQNLIQQgAkEBdiECIAQNAAsLIAAgAa0gAq1CIIaENwIAIAALogMBCH8jAEEQayIDJAACQCAARQ0AIAFFDQAgAkUNACADQQRqIAAoAgAQwAICQCADKAIIIgYgAygCBCIAa0EDdSIEIAIgAiAEShsiBEEASgRAQQAhAiAEQQRPBEAgBEH8////B3EhBwNAIAEgAkECdGogACACQQN0aigCACgCJDYCACABIAJBAXIiBUECdGogACAFQQN0aigCACgCJDYCACABIAJBAnIiBUECdGogACAFQQN0aigCACgCJDYCACABIAJBA3IiBUECdGogACAFQQN0aigCACgCJDYCACACQQRqIQIgCEEEaiIIIAdHDQALCyAEQQNxIgdFDQEDQCABIAJBAnRqIAAgAkEDdGooAgAoAiQ2AgAgAkEBaiECIAlBAWoiCSAHRw0ACwwBCyAARQ0BCyAAIAZGBH8gAAUDQAJAIAZBBGsoAgAiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgBkEIayIGIABHDQALIAMoAgQLIQogAyAANgIIIAMoAgwaIAoQKgsgA0EQaiQAIAQLowEBBX8jAEEQayIBJAAgAUEEaiAAKAIAEMACIAEoAgghBCABKAIEIgMEQCADIgAgBEcEQCAEIQADQAJAIABBBGsoAgAiAkUNACACIAIoAgQiBUEBazYCBCAFDQAgAiACKAIAKAIIEQAAIAIQKwsgAEEIayIAIANHDQALIAEoAgQhAAsgASADNgIIIAEoAgwaIAAQKgsgAUEQaiQAIAQgA2tBA3UL1QQBA38jAEEwayIDJAACQCACRQRAIANBADoAECADQQA6ABsgA0EcakEFQdEPIANBEGoQLyECIAMsABtBAEgEQCADKAIYGiADKAIQECoLIAAgAiABKAIAEEEgAiwAE0EATg0BIAIoAhAaIAIoAggQKgwBCyADQQhqIAEoAgAQxgQCQCADKAIIIgVFBEAgA0EAOgAQIANBADoAGyADQRxqQQJB/AAgA0EQahAvIQIgAywAG0EASARAIAMoAhgaIAMoAhAQKgsgACACIAEoAgAQQSACLAATQQBODQEgAigCEBogAigCCBAqDAELIAVB8IQFQdDwBBA5IgQEQCADKAIMIgIEQCACIAIoAgRBAWo2AgQLIANBHGoiBSAEIAQoAgAoAhQRAgAgACAFIAEoAgAQQSADLAAvQQBIBEAgAygCLBog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Qn83A0ggAUJ/NwNQIAFCADcDWCABQgA3A2AgAUIANwNoIAFBADoAcCACQdjFBDYCACABQe/GwcsGNgIgIAMgAjYCNCADKAI4IQIgAyABNgI4AkAgAkUNACACIAIoAgQiAUEBazYCBCABDQAgAiACKAIAKAIIEQAAIAIQKwtBiAEQLCIBQgA3AgQgAUH41QQ2AgAgAUEQaiICQgA3AwggAkIANwMQIAJCADcDGCACQQA2AiAgAkHUvQQ2AgAgAUIANwI8IAFCADcCNCABQn83A0ggAUJ/NwNQIAFBADYCdCABQgA3A1ggAUIANwNgIAFCADcDaCABQQA7AXAgAkHcxgQ2AgAgAUEANgKAASABQgA3AnggAUHh2sHLBjYCICADIAI2AjwgAygCQCECIAMgATYCQAJAIAJFDQAgAiACKAIEIgFBAWs2AgQgAQ0AIAIgAigCACgCCBEAACACECsLQbABECwiAkIANwIEIAJBsNQENgIAIAJBEGoiAUIANwMIIAFCfzcDOCABQgA3A0ggAUEANgJkIAFBADYCiAEgAUEANgKAASABQgA3A2ggAUEANgIwIAFCADcDKCABQgA3AyAgAUIANwMYIAFCADcDECABQUBrQn83AwAgAUIANwNQIAFCADcDWCABQQA7AWAgAUIANwNwIAFCADcAdSABQey9BDYCACABQQA6AIQBIAFB496xywY2AhAgAyABNgJEIAMoAkghASADIAI2AkgCQCABRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArC0H4ABAsIgFCADcCBCABQdjUBDYCACABQRBqIgJCADcDCCACQgA3AxAgAkIANwMYIAJBADYCICACQdS9BDYCACABQgA3AjwgAUIANwI0IAFCfzcDSCABQn83A1AgAUEANgJ0IAFCADcDWCABQgA3A2AgAUIANwNoIAFBADsBcCACQcjEBDYCACABQebcpcsGNgIgIAMgAjYCZCADKAJoIQIgAyABNgJoAkAgAkUNACACIAIoAgQiAUEBazYCBCABDQAgAiACKAIAKAIIEQAAIAIQKwtB+AAQLCIBQgA3AgQgAUGo1QQ2AgAgAUEQaiICQgA3AwggAkIANwMQIAJCADcDGCACQQA2AiAgAkHUvQQ2AgAgAUIANwI8IAFCADcCNCABQn83A0ggAUJ/NwNQIAFCADcDWCABQgA3A2AgAUIANwNoIAFBADoAcCACQZDFBDYCACABQfDkwcsGNgIgIAMgAjYCdCADKAJ4IQIgAyABNgJ4AkAgAkUNACACIAIoAgQiAUEBazYCBCABDQAgAiACKAIAKAIIEQAAIAIQKwtBgAEQLCIBQgA3AgQgAUGI1AQ2AgAgAUEQaiICQgA3AwggAkIANwMQIAJCADcDGCACQQA2AiAgAkHUvQQ2AgAgAUIANwI8IAFCADcCNCABQn83A0ggAUJ/NwNQIAFBADYCdCABQgA3A1ggAUIANwNgIAFCADcDaCABQQA7AXAgAkG4wwQ2AgAgAUHt6KWDBzYCICABQQA2AnggAyACNgJcIAMoAmAhAiADIAE2AmACQCACRQ0AIAIgAigCBCIBQQFrNgIEIAENACACIAIoAgAoAggRAAAgAhArCyADKAIsIQEgBCADKAIkIgU2AgggBCADKAIoIgI2AgwgAgRAIAIgAigCBEEBajYCBAsgAQJ/IAEoAigiAiABKAIsSQRAIAIgBTYCACACIAQoAgwiATYCBCABBEAgASABKAIEQQFqNgIECyACQQhqDAELIAFBJGogBEEIahBhCzYCKAJAIAQoAgwiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgAygCLCEBIAQgAygCXCIFNgIIIAQgAygCYCICNgIMIAIEQCACIAIoAgRBAWo2AgQLIAECfyABKAIoIgIgASgCLEkEQCACIAU2AgAgAiAEKAIMIgE2AgQgAQRAIAEgASgCBEEBajYCBAsgAkEIagwBCyABQSRqIARBCGoQYQs2AigCQCAEKAIMIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLIAMoAiwhASAEIAMoAkQiBTYCCCAEIAMoAkgiAjYCDCACBEAgAiACKAIEQQFqNgIECyABAn8gASgCKCICIAEoAixJBEAgAiAFNgIAIAIgBCgCDCIBNgIEIAEEQCABIAEoAgRBAWo2AgQLIAJBCGoMAQsgAUEkaiAEQQhqEGELNgIoAkAgBCgCDCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyADKAIsIQEgBCADKAJkIgU2AgggBCADKAJoIgI2AgwgAgRAIAIgAigCBEEBajYCBAsgAQJ/IAEoAigiAiABKAIsSQRAIAIgBTYCACACIAQoAgwiATYCBCABBEAgASABKAIEQQFqNgIECyACQQhqDAELIAFBJGogBEEIahBhCzYCKAJAIAQoAgwiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgAygCLCEBIAQgAygCdCIFNgIIIAQgAygCeCICNgIMIAIEQCACIAIoAgRBAWo2AgQLIAECfyABKAIoIgIgASgCLEkEQCACIAU2AgAgAiAEKAIMIgE2AgQgAQRAIAEgASgCBEEBajYCBAsgAkEIagwBCyABQSRqIARBCGoQYQs2AigCQCAEKAIMIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLIAMoAnQhBiAEIAMoAjQiBzYCCCAEIAMoAjgiATYCDAJAAkACQCABRQRAIAZBKGohBSAGKAIoIgIgBigCLE8NAiACIAE2AgQgAiAHNgIADAELIAEgASgCBEEBajYCBCAGQShqIQUgBigCKCICIAYoAixPDQEgAiABNgIEIAIgBzYCACABIAEoAgRBAWo2AgQLIAJBCGohAgwBCyAGQSRqIARBCGoQYSECIAQoAgwhAQsgBSACNgIAAkAgAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgAygCdCEGIAQgAygCPCIHNgIIIAQgAygCQCIBNgIMAkACQAJAIAFFBEAgBkEoaiEFIAYoAigiAiAGKAIsTw0CIAIgATYCBCACIAc2AgAMAQsgASABKAIEQQFqNgIEIAZBKGohBSAGKAIoIgIgBigCLE8NASACIAE2AgQgAiAHNgIAIAEgASgCBEEBajYCBAsgAkEIaiECDAELIAZBJGogBEEIahBhIQIgBCgCDCEBCyAFIAI2AgACQCABRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyADQfwAaiADKAKAARC8AiADIANBgAFqNgJ8IANCADcCgAEgBCADKAIcIgY2AgggBCADKAIgIgE2AgwgAQRAIAEgASgCBEEBajYCBAsgA0EQaiEFAkAgAygCFCICIAMoAhhJBEAgAiABNgIEIAIgBjYCACADIAJBCGo2AhQMAQsgBSAEQQhqEFMhAiAEKAIMIQEgAyACNgIUIAFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLIAQgAygCLCIGNgIIIAQgAygCMCIBNgIMIAEEQCABIAEoAgRBAWo2AgQLAkAgAygCFCICIAMoAhhJBEAgAiABNgIEIAIgBjYCACADIAJBCGo2AhQMAQsgBSAEQQhqEFMhAiAEKAIMIQEgAyACNgIUIAFFDQAgASABKAIEIgNBAWs2AgQgAw0AIAEgASgCACgCCBEAACABECsLIARBEGokACAAQRBqIAAoAhQQhAIgACAAQRRqNgIQIABCADcCFCAAKAIgIgUgACgCHCIERwRAA0ACQCAFQQRrKAIAIgNFDQAgAyADKAIEIgFBAWs2AgQgAQ0AIAMgAygCACgCCBEAACADECsLIAVBCGsiBSAERw0ACwsgACAENgIgIAAoAiwhAyAAQgA3AygCQCADRQ0AIAMgAygCBCIAQQFrNgIEIAANACADIAMoAgAoAggRAAAgAxArCws2ACABKAIERQRAIAAgAUEEaiABKAIAKAIkEQIADwsgAEGQ4wQpAgA3AgAgAEGY4wQoAgA2AggLzAECBX8DfiABBEAgACkDECEHIAAoAgghAyAAKAIYIQIgACgCACEEA0AgACACQQdMBH9BwAAgAmutIQggBCECA0ACQCAIpyEFIANFBEBBACEDIAIhBCAFIQYMAQsgACACQQFqIgQ2AgAgAjEAACEJIAAgA0EBayIDNgIIIAAgCSAFQQhrIgathiAHhCIHNwMQIAhCCH0hCCAEIQIgBUEPSg0BCwtBwAAgBmsFIAILQQhrIgI2AhggACAHQgiGIgc3AxAgAUEBayIBDQALCwsuAQF/IABBnMsENgIAIAAoAmwiAQRAIAAgATYCcCAAKAJ0GiABECoLIAAQVhAqCxwAIAAgAUEIIAKnIAJCIIinIAOnIANCIIinEBkLDAAgABDPBBogABAqCzQBAn8gAEHwugQ2AgACQCAAKAIEQQxrIgEgASgCCEEBayICNgIIIAJBAE4NACABECoLIAALUAEBfwJAIAFFDQAgAUHssgRB7LQEEDkiAUUNACABKAIIIAAoAghBf3NxDQAgACgCDCABKAIMQQAQdUUNACAAKAIQIAEoAhBBABB1IQILIAILzQYCA38BfiMAQRBrIgIkAAJAAkACQAJAAkACQCABQQhrQR13DggAAQIDBQUFBAULIABBARCLAUUNBCAAKAIAIQMgACgCBCIBBEAgASABKAIEQQFqNgIECwJ+IAMgAkEGakEBIAMoAgAoAhARBABFBEAgABCiAUIADAELIAIxAAYLIQUgAUUNBCABIAEoAgQiAEEBazYCBCAADQQgASABKAIAKAIIEQAAIAEQKwwECyAAQQIQiwFFDQMgACgCACEDIAAoAgQiAQRAIAEgASgCBEEBajYCBAsCfiADIAJBB2pBAiADKAIAKAIQEQQARQRAIAAQogFCAAwBCyACMQAIIAIxAAdCCIaECyEFIAFFDQMgASABKAIEIgBBAWs2AgQgAA0DIAEgASgCACgCCBEAACABECsMAwsgAEEDEIsBRQ0CIAAoAgAhAyAAKAIEIgEEQCABIAEoAgRBAWo2AgQLAn4gAyACQQlqQQMgAygCACgCEBEEAEUEQCAAEKIBQgAMAQsgAjEACyACMQAKQgiGIAIxAAlCEIaEhAshBSABRQ0CIAEgASgCBCIAQQFrNgIEIAANAiABIAEoAgAoAggRAAAgARArDAILIABBBBCLAUUNASAAKAIAIQMgACgCBCIBBEAgASABKAIEQQFqNgIECwJ+IAMgAkEMakEEIAMoAgAoAhARBABFBEAgABCiAUIADAELIAIxAA8gAjEADUIQhiACMQAMQhiGhCACMQAOQgiGhIQLIQUgAUUNASABIAEoAgQiAEEBazYCBCAADQEgASABKAIAKAIIEQAAIAEQKwwBCyMAQRBrIgMkAAJAIABBCBCLAUUNACAAKAIAIQQgACgCBCIBBEAgASABKAIEQQFqNgIECwJ+IAQgA0EIakEIIAQoAgAoAhARBABFBEAgABCiAUIADAELIAMpAAgiBUI4hiAFQoD+A4NCKIaEIAVCgID8B4NCGIYgBUKAgID4D4NCCIaEhCAFQgiIQoCAgPgPgyAFQhiIQoCA/AeDhCAFQiiIQoD+A4MgBUI4iISEhAshBSABRQ0AIAEgASgCBCIAQQFrNgIEIAANACABIAEoAgAoAggRAAAgARArCyADQRBqJAALIAJBEGokACAFCw0AIAApAyAgAVRBAXQLggEBA38gACgCBCIEQQFxIQUCfyABLQA3QQFGBEAgBEEIdSIGIAVFDQEaIAYgAigCAGooAgAMAQsgBEEIdSAFRQ0AGiABIAAoAgAoAgQ2AjggACgCBCEEQQAhAkEACyEFIAAoAgAiACABIAIgBWogA0ECIARBAnEbIAAoAgAoAhwRBgALCgAgACABQQAQdQuYAwEFfyMAQRBrIggkACACIAFBf3NB9////wNqTQRAAn8gAC0AC0EHdgRAIAAoAgAMAQsgAAshCiAIQQRqIgkgAUHz////AUkEfyAIIAFBAXQ2AgwgCCABIAJqNgIEIwBBEGsiAiQAIAkoAgAgCEEMaiILKAIASSEMIAJBEGokACALIAkgDBsoAgAiAkECTwR/IAJBAmpBfnEiAiACQQFrIgIgAkECRhsFQQELQQFqBUH3////AwsQ6wEgCCgCBCECIAgoAggaIAQEQCAKIAQgAhDcAQsgBgRAIAcgBiAEQQJ0IAJqENwBCyADIAQgBWoiCWshByADIAlHBEAgBEECdCIDIAJqIAZBAnRqIQkgAyAKaiAFQQJ0aiAHIAkQ3AELIAFBAUcEQCAKQQQQvwELIAAgAjYCACAAIAAoAghBgICAgHhxIAgoAghB/////wdxcjYCCCAAIAAoAghBgICAgHhyNgIIIAAgBCAGaiAHaiIANgIEIAhBADYCDCACIABBAnRqIAgoAgw2AgAgCEEQaiQADwsQigEACz0BAX8jAEEQayIDJAAgAyACOgAPA0AgAQRAIAAgAy0ADzoAACABQQFrIQEgAEEBaiEADAELCyADQRBqJAALCQAgABBgNgIACyMBAn8gACEBA0AgASICQQRqIQEgAigCAA0ACyACIABrQQJ1Cy8BAX8jAEEQayICJAACQCAAIAFGBEAgAEEAOgB4DAELIAFBBBC/AQsgAkEQaiQACyYBAX8gACgCBCECA0AgASACRwRAIAJBBGshAgwBCwsgACABNgIEC0kBAX8jAEEQayIDJAACQAJAIAJBHksNACABLQB4QQFxDQAgAUEBOgB4DAELIAIQ4QQhAQsgA0EQaiQAIAAgAjYCBCAAIAE2AgALXwEFfyMAQRBrIgAkACAAQf////8DNgIMIABB/////wc2AggjAEEQayIBJAAgAEEIaiICKAIAIABBDGoiAygCAEkhBCABQRBqJAAgAiADIAQbKAIAIQUgAEEQaiQAIAULPAEBfyMAQRBrIgMkACADIAEQ3gQ2AgwgAyACEN4ENgIIIAAgAygCDDYCACAAIAMoAgg2AgQgA0EQaiQACwcAIAAQ1gELTwEBfyMAQRBrIgMkACADIAE2AgggAyAANgIMIAMgAjYCBEEAIQEgA0EEaiIAKAIAIAMoAgxPBEAgACgCACADKAIISSEBCyADQRBqJAAgAQtKAQF/IwBBEGsiAyQAAn8gAC0AC0EHdgRAIAAoAgQMAQsgAC0ACwsaIAAgAhDYASADQQA6AA8gASACaiADLQAPOgAAIANBEGokAAsbACAAQf////8DSwRAEGwACyAAQQJ0QQQQugULzgYBBH8jAEGgAWsiAyQAIANB5NUDNgJEIANB8NUDKAIAIgY2AgwgA0EMaiIEIAZBDGsoAgBqQfTVAygCADYCACAEIAMoAgxBDGsoAgBqIgYgA0EQaiIFED4gBkKAgICAcDcCSCADQeTVAzYCRCADQdDVAzYCDCAFED8iBkHwywM2AgAgA0IANwI4IANCADcCMCADQRA2AkAgA0GUAWoiBSABIAIQWSAEIAMoApQBIAUgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBlAFqIgQgAhA1IANBDGogAygClAEgBCADLACfASIEQQBIIgUbIAMoApgBIAQgBRsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakHwwAFBChAtIAEoAmgQPEHPkAJBARAtIQQgA0GUAWoiBSACEDUgBCADKAKUASAFIAMsAJ8BIgJBAEgiBRsgAygCmAEgAiAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyAEQbm3AUEMEC0aAkAgASgCbCICIAEoAnAiBEYNACADQQxqIAIoAgAQPBogAkEEaiIBIARGDQADQCABKAIAIQIgA0EgOgCUASADQQxqIgUgA0GUAWpBARAtGiAFIAIQPBogAUEEaiIBIARHDQALCyADQQxqQc+QAkEBEC0aAkACfyADKAJAIgFBEHEEQCADKAI8IgEgAygCKCICSQRAIAMgAjYCPCACIQELIANBJGoMAQsgAUEIcUUEQEEAIQEgAEEAOgALDAILIAMoAiAhASADQRhqCyECAkAgASACKAIAIgRrIgFB+P///wdJBEAgAUELTwRAIAFBB3JBAWoiBRAsIQIgACAFQYCAgIB4cjYCCCAAIAI2AgAgACABNgIEIAIhAAwCCyAAIAE6AAsgAQ0BQQAhAQwCCxA4AAsgACAEIAEQNxoLIAAgAWpBADoAACADQezVAygCACIANgIMIABBDGsoAgAgA0EMampB+NUDKAIANgIAIAZB8MsDNgIAIAMsADtBAEgEQCADKAI4GiADKAIwECoLIAYQPRogA0HEAGoQOxogA0GgAWokAAsJACAAEKIDECoLFQAgAEHghgQ2AgAgAEEQahBGGiAACxUAIABBuIYENgIAIABBDGoQRhogAAusAwEGfwJAIAMgAiIAa0EDSA0ACwNAAkAgACADTw0AIAQgB00NACAALAAAIgFB/wFxIQYCQCABQQBOBEBBASEBDAELIAFBQkkNASABQV9NBEAgAyAAa0ECSA0CIAAtAAFBwAFxQYABRw0CQQIhAQwBCyABQW9NBEAgAyAAa0EDSA0CIAAtAAIhCiAALQABIQECQAJAIAZB7QFHBEAgBkHgAUcNASABQeABcUGgAUYNAgwFCyABQeABcUGAAUcNBAwBCyABQcABcUGAAUcNAwsgCkHAAXFBgAFHDQJBAyEBDAELIAFBdEsNASADIABrQQRIDQEgAC0AAyEIIAAtAAIhCSAALQABIQUCQAJAAkACQCAGQfABaw4FAAICAgECCyAFQfAAakH/AXFBME8NBAwCCyAFQfABcUGAAUcNAwwBCyAFQcABcUGAAUcNAgsgCUHAAXFBgAFHDQEgCEHAAXFBgAFHDQFBBCEBIAhBP3EgCUEGdEHAH3EgBkESdEGAgPAAcSAFQT9xQQx0cnJyQf//wwBLDQELIAdBAWohByAAIAFqIQAMAQsLIAAgAmsL7AQBBn8jAEEQayIAJAAgACACNgIMIAAgBTYCCAJ/IAAgAjYCDCAAIAU2AggCQAJAA0ACQCAAKAIMIgEgA08NACAAKAIIIgogBk8NACABLAAAIgVB/wFxIQICQCAFQQBOBEAgAkH//8MASw0FQQEhCQwBCyAFQUJJDQQgBUFfTQRAQQEgAyABa0ECSA0GGkECIQUgAS0AASIIQcABcUGAAUcNBEECIQkgCEE/cSACQQZ0QcAPcXIhAgwBCyAFQW9NBEBBASEFIAMgAWsiCUECSA0EIAEtAAEhCAJAAkAgAkHtAUcEQCACQeABRw0BIAhB4AFxQaABRg0CDAgLIAhB4AFxQYABRg0BDAcLIAhBwAFxQYABRw0GCyAJQQJGDQQgAS0AAiIFQcABcUGAAUcNBUEDIQkgBUE/cSACQQx0QYDgA3EgCEE/cUEGdHJyIQIMAQsgBUF0Sw0EQQEhBSADIAFrIglBAkgNAyABLQABIQgCQAJAAkACQCACQfABaw4FAAICAgECCyAIQfAAakH/AXFBME8NBwwCCyAIQfABcUGAAUcNBgwBCyAIQcABcUGAAUcNBQsgCUECRg0DIAEtAAIiC0HAAXFBgAFHDQQgCUEDRg0DIAEtAAMiDEHAAXFBgAFHDQRBBCEJQQIhBSAMQT9xIAtBBnRBwB9xIAJBEnRBgIDwAHEgCEE/cUEMdHJyciICQf//wwBLDQMLIAogAjYCACAAIAEgCWo2AgwgACAAKAIIQQRqNgIIDAELCyABIANJIQULIAUMAQtBAgshDSAEIAAoAgw2AgAgByAAKAIINgIAIABBEGokACANC5EEAQF/IwBBEGsiACQAIAAgAjYCDCAAIAU2AggCfyAAIAI2AgwgACAFNgIIIAAoAgwhAQJAA0AgASADTwRAQQAhAgwCC0ECIQIgASgCACIBQf//wwBLDQEgAUGAcHFBgLADRg0BAkACQCABQf8ATQRAQQEhAiAGIAAoAggiBWtBAEwNBCAAIAVBAWo2AgggBSABOgAADAELIAFB/w9NBEAgBiAAKAIIIgJrQQJIDQIgACACQQFqNgIIIAIgAUEGdkHAAXI6AAAgACAAKAIIIgJBAWo2AgggAiABQT9xQYABcjoAAAwBCyAGIAAoAggiAmshBSABQf//A00EQCAFQQNIDQIgACACQQFqNgIIIAIgAUEMdkHgAXI6AAAgACAAKAIIIgJBAWo2AgggAiABQQZ2QT9xQYABcjoAACAAIAAoAggiAkEBajYCCCACIAFBP3FBgAFyOgAADAELIAVBBEgNASAAIAJBAWo2AgggAiABQRJ2QfABcjoAACAAIAAoAggiAkEBajYCCCACIAFBDHZBP3FBgAFyOgAAIAAgACgCCCICQQFqNgIIIAIgAUEGdkE/cUGAAXI6AAAgACAAKAIIIgJBAWo2AgggAiABQT9xQYABcjoAAAsgACAAKAIMQQRqIgE2AgwMAQsLQQEMAQsgAgshCCAEIAAoAgw2AgAgByAAKAIINgIAIABBEGokACAIC7cDAQV/AkAgAyACIgBrQQNIDQALA0ACQCAAIANPDQAgBCAGTQ0AAn8gAEEBaiAALQAAIgHAQQBODQAaIAFBwgFJDQEgAUHfAU0EQCADIABrQQJIDQIgAC0AAUHAAXFBgAFHDQIgAEECagwBCyABQe8BTQRAIAMgAGtBA0gNAiAALQACIQkgAC0AASEFAkACQCABQe0BRwRAIAFB4AFHDQEgBUHgAXFBoAFGDQIMBQsgBUHgAXFBgAFHDQQMAQsgBUHAAXFBgAFHDQMLIAlBwAFxQYABRw0CIABBA2oMAQsgAUH0AUsNASADIABrQQRIDQEgBCAGa0ECSQ0BIAAtAAMhByAALQACIQggAC0AASEFAkACQAJAAkAgAUHwAWsOBQACAgIBAgsgBUHwAGpB/wFxQTBPDQQMAgsgBUHwAXFBgAFHDQMMAQsgBUHAAXFBgAFHDQILIAhBwAFxQYABRw0BIAdBwAFxQYABRw0BIAdBP3EgCEEGdEHAH3EgAUESdEGAgPAAcSAFQT9xQQx0cnJyQf//wwBLDQEgBkEBaiEGIABBBGoLIQAgBkEBaiEGDAELCyAAIAJrC7sFAQV/IwBBEGsiACQAIAAgAjYCDCAAIAU2AggCfyAAIAI2AgwgACAFNgIIAkACQANAAkAgACgCDCIBIANPDQAgACgCCCIFIAZPDQBBAiEJIAACfyABLQAAIgLAQQBOBEAgBSACOwEAIAFBAWoMAQsgAkHCAUkNBCACQd8BTQRAQQEgAyABa0ECSA0GGiABLQABIghBwAFxQYABRw0EIAUgCEE/cSACQQZ0QcAPcXI7AQAgAUECagwBCyACQe8BTQRAQQEhCSADIAFrIgpBAkgNBCABLQABIQgCQAJAIAJB7QFHBEAgAkHgAUcNASAIQeABcUGgAUcNCAwCCyAIQeABcUGAAUcNBwwBCyAIQcABcUGAAUcNBgsgCkECRg0EIAEtAAIiCUHAAXFBgAFHDQUgBSAJQT9xIAhBP3FBBnQgAkEMdHJyOwEAIAFBA2oMAQsgAkH0AUsNBEEBIQkgAyABayIKQQJIDQMgAS0AASEIAkACQAJAAkAgAkHwAWsOBQACAgIBAgsgCEHwAGpB/wFxQTBPDQcMAgsgCEHwAXFBgAFHDQYMAQsgCEHAAXFBgAFHDQULIApBAkYNAyABLQACIgtBwAFxQYABRw0EIApBA0YNAyABLQADIgFBwAFxQYABRw0EIAYgBWtBA0gNA0ECIQkgAUE/cSIBIAtBBnQiCkHAH3EgCEEMdEGA4A9xIAJBB3EiAkESdHJyckH//8MASw0DIAUgC0EEdkEDcSAIQQJ0IglBwAFxIAJBCHRyIAlBPHFyckHA/wBqQYCwA3I7AQAgACAFQQJqNgIIIAUgASAKQcAHcXJBgLgDcjsBAiAAKAIMQQRqCzYCDCAAIAAoAghBAmo2AggMAQsLIAEgA0khCQsgCQwBC0ECCyEMIAQgACgCDDYCACAHIAAoAgg2AgAgAEEQaiQAIAwL5wUBAn8jAEEQayIAJAAgACACNgIMIAAgBTYCCAJ/IAAgAjYCDCAAIAU2AgggACgCDCECAkACQANAIAIgA08EQEEAIQUMAwtBAiEFAkACQCACLwEAIgFB/wBNBEBBASEFIAYgACgCCCICa0EATA0FIAAgAkEBajYCCCACIAE6AAAMAQsgAUH/D00EQCAGIAAoAggiAmtBAkgNBCAAIAJBAWo2AgggAiABQQZ2QcABcjoAACAAIAAoAggiAkEBajYCCCACIAFBP3FBgAFyOgAADAELIAFB/68DTQRAIAYgACgCCCICa0EDSA0EIAAgAkEBajYCCCACIAFBDHZB4AFyOgAAIAAgACgCCCICQQFqNgIIIAIgAUEGdkE/cUGAAXI6AAAgACAAKAIIIgJBAWo2AgggAiABQT9xQYABcjoAAAwBCyABQf+3A00EQEEBIQUgAyACa0EDSA0FIAIvAQIiCEGA+ANxQYC4A0cNAiAGIAAoAghrQQRIDQUgCEH/B3EgAUEKdEGA+ANxIAFBwAdxIgVBCnRyckH//z9LDQIgACACQQJqNgIMIAAgACgCCCICQQFqNgIIIAIgBUEGdkEBaiICQQJ2QfABcjoAACAAIAAoAggiBUEBajYCCCAFIAJBBHRBMHEgAUECdkEPcXJBgAFyOgAAIAAgACgCCCICQQFqNgIIIAIgCEEGdkEPcSABQQR0QTBxckGAAXI6AAAgACAAKAIIIgFBAWo2AgggASAIQT9xQYABcjoAAAwBCyABQYDAA0kNBCAGIAAoAggiAmtBA0gNAyAAIAJBAWo2AgggAiABQQx2QeABcjoAACAAIAAoAggiAkEBajYCCCACIAFBBnZBvwFxOgAAIAAgACgCCCICQQFqNgIIIAIgAUE/cUGAAXI6AAALIAAgACgCDEECaiICNgIMDAELC0ECDAILQQEMAQsgBQshCSAEIAAoAgw2AgAgByAAKAIINgIAIABBEGokACAJC1oBA38jAEEQayIBJAAgASAANgIMIAFBCGogAUEMahCnASEDQQRBAUHorwYoAgAoAgAbIQIgAygCACIABEBB6K8GQfCuBiAAIABBf0YbNgIACyABQRBqJAAgAgtjAQJ/IwBBEGsiBSQAIAUgBDYCDCAFQQhqIAVBDGoQpwEhBiAAIAEgAiADEJACIQEgBigCACIABEBB6K8GKAIAGiAABEBB6K8GQfCuBiAAIABBf0YbNgIACwsgBUEQaiQAIAELEgAgBCACNgIAIAcgBTYCAEEDCyoBAX8gAEHM/QM2AgACQCAAKAIIIgFFDQAgAC0ADEEBRw0AIAEQKgsgAAsrAQF/IAAoAgAoAgAoAgAhAUGY0AZBmNAGKAIAQQFqIgA2AgAgASAANgIECy4AIAEgAEEIaiIAKAIEIAAoAgAiAGtBAnVJBH8gAUECdCAAaigCAEEARwVBAAsLwwEBBH8gAEG4/QM2AgAgAEEIaiEDA0AgAiAAKAIMIAAoAggiAWtBAnVJBEAgAkECdCABaigCACIBBEAgASABKAIEQQFrIgQ2AgQgBEF/RgRAIAEgASgCACgCCBEAAAsLIAJBAWohAgwBCwsgAEGQAWoQRhojAEEQayIBJAAgASADNgIMIAEoAgwiAigCAARAIAIQ8wQgASgCDCICKAIAIQMgAigCCBogAigCABogASgCDEEMaiADENkECyABQRBqJAAgAAsMACAAIAAoAgAQ2gQLcAEBfyMAQRBrIgIkACACIAA2AgQgAiAAKAIEIgA2AgggAiAAIAFBAnRqNgIMIAIoAgghASACKAIMIQADQCAAIAFGBEAgAigCBCACKAIINgIEIAJBEGokAAUgAUEANgIAIAIgAUEEaiIBNgIIDAELCwsgACAAQYiGBDYCACAAKAIIEGBHBEAgACgCCBCfBQsgAAsEAEF/C9sBAQh/IwBBEGsiBSQAIwBBIGsiAyQAIANBGGogACABEN0EIANBEGogAygCGCADKAIcIAIQvAUgAygCECEEIwBBEGsiASQAIAEgADYCDCABQQxqIgAhCiAEIQcgACgCACEEIwBBEGsiACQAIAAgBDYCDCAKIAchCSAAKAIMIQYgAEEQaiQAIAkgBmtBAnUQpwMhACABQRBqJAAgAyAANgIMIAMgAiADKAIUIAJrajYCCCAFIAMoAgw2AgggBSADKAIINgIMIANBIGokACAFKAIMIQggBUEQaiQAIAgL9gcBDH8jAEEQayITJAAgAiAANgIAQQRBACAHGyEVIANBgARxIRYDQCAUQQRGBEACfyANLQALQQd2BEAgDSgCBAwBCyANLQALQf8AcQtBAUsEQCATIA0QmQE2AgwgAiATQQxqQQEQpwMgDRDLASACKAIAEPcENgIACyADQbABcSIDQRBHBEAgASADQSBGBH8gAigCAAUgAAs2AgALIBNBEGokAAUCQAJAAkACQAJAAkAgCCAUai0AAA4FAAEDAgQFCyABIAIoAgA2AgAMBAsgASACKAIANgIAIAZBICAGKAIAKAIsEQUAIQcgAiACKAIAIg9BBGo2AgAgDyAHNgIADAMLAn8gDS0AC0EHdgRAIA0oAgQMAQsgDS0AC0H/AHELRQ0CAn8gDS0AC0EHdgRAIA0oAgAMAQsgDQsoAgAhByACIAIoAgAiD0EEajYCACAPIAc2AgAMAgsCfyAMLQALQQd2BEAgDCgCBAwBCyAMLQALQf8AcQtFIRkgFkUNASAZDQEgAiAMEJkBIAwQywEgAigCABD3BDYCAAwBCyACKAIAIRogBCAVaiIEIQcDQAJAIAUgB00NACAGQcAAIAcoAgAgBigCACgCDBEEAEUNACAHQQRqIQcMAQsLIA5BAEoEQCACKAIAIQ8gDiEQA0ACQCAEIAdPDQAgEEUNACAQQQFrIRAgB0EEayIHKAIAIREgAiAPQQRqIhI2AgAgDyARNgIAIBIhDwwBCwsCQCAQRQRAQQAhEQwBCyAGQTAgBigCACgCLBEFACERIAIoAgAhDwsDQCAPQQRqIRIgEEEASgRAIA8gETYCACAQQQFrIRAgEiEPDAELCyACIBI2AgAgDyAJNgIACwJAIAQgB0YEQCAGQTAgBigCACgCLBEFACEPIAIgAigCACIQQQRqIgc2AgAgECAPNgIADAELAn8gCy0AC0EHdgRAIAsoAgQMAQsgCy0AC0H/AHELBH8CfyALLQALQQd2BEAgCygCAAwBCyALCywAAAVBfwshEUEAIQ9BACESA0AgBCAHRwRAAkAgDyARRwRAIA8hEAwBCyACIAIoAgAiEEEEajYCACAQIAo2AgBBACEQAn8gCy0AC0EHdgRAIAsoAgQMAQsgCy0AC0H/AHELIBJBAWoiEk0EQCAPIREMAQsCfyALLQALQQd2BEAgCygCAAwBCyALCyASai0AAEH/AEYEQEF/IREMAQsCfyALLQALQQd2BEAgCygCAAwBCyALCyASaiwAACERCyAHQQRrIgcoAgAhDyACIAIoAgAiGEEEajYCACAYIA82AgAgEEEBaiEPDAELCyACKAIAIQcLIBogBxDFAgsgFEEBaiEUDAELCwvvAwEBfyMAQRBrIgokACAJAn8gAARAIAJBrM4GEEMhAAJAIAEEQCAKQQRqIgEgACAAKAIAKAIsEQIAIAMgCigCBDYAACABIAAgACgCACgCIBECAAwBCyAKQQRqIgEgACAAKAIAKAIoEQIAIAMgCigCBDYAACABIAAgACgCACgCHBECAAsgCCABEKsBIAEQahogBCAAIAAoAgAoAgwRAQA2AgAgBSAAIAAoAgAoAhARAQA2AgAgCkEEaiIBIAAgACgCACgCFBECACAGIAEQhAEgARBGGiABIAAgACgCACgCGBECACAHIAEQqwEgARBqGiAAIAAoAgAoAiQRAQAMAQsgAkGkzgYQQyEAAkAgAQRAIApBBGoiASAAIAAoAgAoAiwRAgAgAyAKKAIENgAAIAEgACAAKAIAKAIgEQIADAELIApBBGoiASAAIAAoAgAoAigRAgAgAyAKKAIENgAAIAEgACAAKAIAKAIcEQIACyAIIAEQqwEgARBqGiAEIAAgACgCACgCDBEBADYCACAFIAAgACgCACgCEBEBADYCACAKQQRqIgEgACAAKAIAKAIUEQIAIAYgARCEASABEEYaIAEgACAAKAIAKAIYEQIAIAcgARCrASABEGoaIAAgACgCACgCJBEBAAs2AgAgCkEQaiQAC9gBAQh/IwBBEGsiBSQAIwBBIGsiAyQAIANBGGogACABEN0EIANBEGogAygCGCADKAIcIAIQvgUgAygCECEEIwBBEGsiASQAIAEgADYCDCABQQxqIgAhCiAEIQcgACgCACEEIwBBEGsiACQAIAAgBDYCDCAKIAchCSAAKAIMIQYgAEEQaiQAIAkgBmsQqAMhACABQRBqJAAgAyAANgIMIAMgAiADKAIUIAJrajYCCCAFIAMoAgw2AgggBSADKAIINgIMIANBIGokACAFKAIMIQggBUEQaiQAIAgL3AcBDH8jAEEQayITJAAgAiAANgIAIANBgARxIRYDQCAUQQRGBEACfyANLQALQQd2BEAgDSgCBAwBCyANLQALQf8AcQtBAUsEQCATIA0QmQE2AgwgAiATQQxqQQEQqAMgDRDNASACKAIAEPoENgIACyADQbABcSIDQRBHBEAgASADQSBGBH8gAigCAAUgAAs2AgALIBNBEGokAAUCQAJAAkACQAJAAkAgCCAUai0AAA4FAAEDAgQFCyABIAIoAgA2AgAMBAsgASACKAIANgIAIAZBICAGKAIAKAIcEQUAIQ8gAiACKAIAIhBBAWo2AgAgECAPOgAADAMLAn8gDS0AC0EHdgRAIA0oAgQMAQsgDS0AC0H/AHELRQ0CAn8gDS0AC0EHdgRAIA0oAgAMAQsgDQstAAAhDyACIAIoAgAiEEEBajYCACAQIA86AAAMAgsCfyAMLQALQQd2BEAgDCgCBAwBCyAMLQALQf8AcQtFIRkgFkUNASAZDQEgAiAMEJkBIAwQzQEgAigCABD6BDYCAAwBCyACKAIAIRogBCAHaiIEIREDQAJAIAUgEU0NACARLAAAIg9BAE4EfyAGKAIIIA9BAnRqKAIAQcAAcUEARwVBAAtFDQAgEUEBaiERDAELCyAOIg9BAEoEQANAAkAgBCARTw0AIA9FDQAgD0EBayEPIBFBAWsiES0AACEQIAIgAigCACISQQFqNgIAIBIgEDoAAAwBCwsgDwR/IAZBMCAGKAIAKAIcEQUABUEACyESA0AgAiACKAIAIhBBAWo2AgAgD0EASgRAIBAgEjoAACAPQQFrIQ8MAQsLIBAgCToAAAsCQCAEIBFGBEAgBkEwIAYoAgAoAhwRBQAhDyACIAIoAgAiEEEBajYCACAQIA86AAAMAQsCfyALLQALQQd2BEAgCygCBAwBCyALLQALQf8AcQsEfwJ/IAstAAtBB3YEQCALKAIADAELIAsLLAAABUF/CyESQQAhD0EAIRADQCAEIBFGDQECQCAPIBJHBEAgDyEVDAELIAIgAigCACISQQFqNgIAIBIgCjoAAEEAIRUCfyALLQALQQd2BEAgCygCBAwBCyALLQALQf8AcQsgEEEBaiIQTQRAIA8hEgwBCwJ/IAstAAtBB3YEQCALKAIADAELIAsLIBBqLQAAQf8ARgRAQX8hEgwBCwJ/IAstAAtBB3YEQCALKAIADAELIAsLIBBqLAAAIRILIBFBAWsiES0AACEPIAIgAigCACIYQQFqNgIAIBggDzoAACAVQQFqIQ8MAAsACyAaIAIoAgAQ2QELIBRBAWohFAwBCwsL7wMBAX8jAEEQayIKJAAgCQJ/IAAEQCACQZzOBhBDIQACQCABBEAgCkEEaiIBIAAgACgCACgCLBECACADIAooAgQ2AAAgASAAIAAoAgAoAiARAgAMAQsgCkEEaiIBIAAgACgCACgCKBECACADIAooAgQ2AAAgASAAIAAoAgAoAhwRAgALIAggARCEASABEEYaIAQgACAAKAIAKAIMEQEAOgAAIAUgACAAKAIAKAIQEQEAOgAAIApBBGoiASAAIAAoAgAoAhQRAgAgBiABEIQBIAEQRhogASAAIAAoAgAoAhgRAgAgByABEIQBIAEQRhogACAAKAIAKAIkEQEADAELIAJBlM4GEEMhAAJAIAEEQCAKQQRqIgEgACAAKAIAKAIsEQIAIAMgCigCBDYAACABIAAgACgCACgCIBECAAwBCyAKQQRqIgEgACAAKAIAKAIoEQIAIAMgCigCBDYAACABIAAgACgCACgCHBECAAsgCCABEIQBIAEQRhogBCAAIAAoAgAoAgwRAQA6AAAgBSAAIAAoAgAoAhARAQA6AAAgCkEEaiIBIAAgACgCACgCFBECACAGIAEQhAEgARBGGiABIAAgACgCACgCGBECACAHIAEQhAEgARBGGiAAIAAoAgAoAiQRAQALNgIAIApBEGokAAvNAgEFfyMAQRBrIgUkAAJAIAJB9////wMgAWtNBEACfyAALQALQQd2BEAgACgCAAwBCyAACyEHIAVBBGoiBiABQfP///8BSQR/IAUgAUEBdDYCDCAFIAEgAmo2AgQjAEEQayICJAAgBigCACAFQQxqIggoAgBJIQkgAkEQaiQAIAggBiAJGygCACICQQJPBH8gAkECakF+cSICIAJBAWsiAiACQQJGGwVBAQtBAWoFQff///8DCxDrASAFKAIEIQIgBSgCCBogBARAIAIgByAEEM4CCyADIARHBEAgBEECdCIGIAJqIAYgB2ogAyAEaxDOAgsgAUEBRwRAIAdBBBC/AQsgACACNgIAIAAgACgCCEGAgICAeHEgBSgCCEH/////B3FyNgIIIAAgACgCCEGAgICAeHI2AgggBUEQaiQADAELEIoBAAsgACADNgIECx8BAX8gASgCABDGBSECIAAgASgCADYCBCAAIAI2AgALmBgBC38jAEGQBGsiCyQAIAsgCjYCiAQgCyABNgKMBAJAIAAgC0GMBGoQXQRAIAUgBSgCAEEEcjYCAEEAIQAMAQsgC0GGCzYCSCALIAtB6ABqIAtB8ABqIAtByABqIg8QayIRKAIAIgE2AmQgCyABQZADajYCYCMAQRBrIgEkACAPQgA3AgAgD0EANgIIIAFBEGokACMAQRBrIgEkACALQTxqIg5CADcCACAOQQA2AgggAUEQaiQAIwBBEGsiASQAIAtBMGoiDUIANwIAIA1BADYCCCABQRBqJAAjAEEQayIBJAAgC0EkaiIMQgA3AgAgDEEANgIIIAFBEGokACMAQRBrIgEkACALQRhqIhBCADcCACAQQQA2AgggAUEQaiQAIwBBEGsiCiQAIAsCfyACBEAgCkEEaiICIANBrM4GEEMiASABKAIAKAIsEQIAIAsgCigCBDYAXCACIAEgASgCACgCIBECACAMIAIQqwEgAhBqGiACIAEgASgCACgCHBECACANIAIQqwEgAhBqGiALIAEgASgCACgCDBEBADYCWCALIAEgASgCACgCEBEBADYCVCACIAEgASgCACgCFBECACAPIAIQhAEgAhBGGiACIAEgASgCACgCGBECACAOIAIQqwEgAhBqGiABIAEoAgAoAiQRAQAMAQsgCkEEaiICIANBpM4GEEMiASABKAIAKAIsEQIAIAsgCigCBDYAXCACIAEgASgCACgCIBECACAMIAIQqwEgAhBqGiACIAEgASgCACgCHBECACANIAIQqwEgAhBqGiALIAEgASgCACgCDBEBADYCWCALIAEgASgCACgCEBEBADYCVCACIAEgASgCACgCFBECACAPIAIQhAEgAhBGGiACIAEgASgCACgCGBECACAOIAIQqwEgAhBqGiABIAEoAgAoAiQRAQALNgIUIApBEGokACAJIAgoAgA2AgAgBEGABHEhEkEAIQNBACEBA0AgASECAkACQAJAAkAgA0EERg0AIAAgC0GMBGoQXQ0AQQAhCgJAAkACQAJAAkACQCALQdwA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B0H//wNxC8IBAgF+An8jAEEQayIFJAACQAJAIAAgAUcEQEHArgYoAgAhBkHArgZBADYCABBgGiAAIAVBDGogA0KAgICAgICAgIB/EI8CIQQCQEHArgYoAgAiAARAIAUoAgwgAUcNASAAQcQARg0DDAQLQcCuBiAGNgIAIAUoAgwgAUYNAwsLIAJBBDYCAEIAIQQMAQsgAkEENgIAIARCAFUEQEL///////////8AIQQMAQtCgICAgICAgICAfyEECyAFQRBqJAAgBAvQAQIDfwF+IwBBEGsiBCQAAn8CQAJAIAAgAUcEQEHArgYoAgAhBUHArgZBADYCABBgGiAAIARBDGogA0KAgICAgICAgIB/EI8CIQcCQEHArgYoAgAiAARAIAQoAgwgAUcNASAAQcQARg0EDAMLQcCuBiAFNgIAIAQoAgwgAUYNAgsLIAJBBDYCAEEADAILIAdCgICAgHhTDQAgB0L/////B1UNACAHpwwBCyACQQQ2AgBB/////wcgB0IAVQ0AGkGAgICAeAshBiAEQRBqJAAgBguQAgEDfwJAIwBBEGsiBCQAIAIgAWtBAnUiBUH3////A00EQAJAIAVBAkkEQCAAIAAtAAtBgAFxIAVB/wBxcjoACyAAIAAtAAtB/wBxOgALIAAhAwwBCyAEQQhqIAVBAk8EfyAFQQJqQX5xIgMgA0EBayIDIANBAkYbBUEBC0EBahDrASAEKAIMGiAAIAQoAggiAzYCACAAIAAoAghBgICAgHhxIAQoAgxB/////wdxcjYCCCAAIAAoAghBgICAgHhyNgIIIAAgBTYCBAsDQCABIAJHBEAgAyABKAIANgIAIANBBGohAyABQQRqIQEMAQsLIARBADYCBCADIAQoAgQ2AgAgBEEQaiQADAELEIoBAAsLtggBBX8gASgCACEEAkACQAJAAkACQAJAAkACfwJAAkACQAJAIANFDQAgAygCACIGRQ0AIABFBEAgAiEDDAMLIANBADYCACACIQMMAQsCQEHorwYoAgAoAgBFBEAgAEUNASACRQ0MIAIhBgNAIAQsAAAiAwRAIAAgA0H/vwNxNgIAIABBBGohACAEQQFqIQQgBkEBayIGDQEMDgsLIABBADYCACABQQA2AgAgAiAGaw8LIAIhAyAARQ0DDAULIAQQWA8LQQEhBQwDC0EADAELQQELIQUD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qAMhGCAEKQOgAyEZAkAgFEECayAHQf////8HcU4NACAEIBhC////////////AIM3A5gDIAQgGTcDkAMgBEGAA2ogGSAYQgBCgICAgICAgP8/EGYgBCkDkAMgBCkDmANCgICAgICAgLjAABCrBSEDIAQpA4gDIBggA0EATiICGyEYIAQpA4ADIBkgAhshGSAXIBpCAEIAENsBIQEgFCACIA5qIg5B7gBqTgRAIAggBiAJRyADQQBIcnEgAUEAR3FFDQELQcCuBkHEADYCAAsgBEHwAmogGSAYIA4QqQUgBCkD+AIhFyAEKQPwAgshGCAMIBc3AyggDCAYNwMgIARBkMYAaiQAIAwpAyghFyAMKQMgIRgMAQtCACEXCyAAIBg3AwAgACAXNwMIIAxBMGokAAvHBgIEfwR+IwBBgAFrIgUkAAJAAkACQCADIARCAEIAENsBRQ0AAn8gBEL///////8/gyEKAn8gBEIwiKdB//8BcSIHQf//AUcEQEEEIAcNARpBAkEDIAMgCoRQGwwCCyADIAqEUAsLRQ0AIAJCMIinIghB//8BcSIGQf//AUcNAQsgBUEQaiABIAIgAyAEEGYgBSAFKQMQIgIgBSkDGCIBIAIgARCoBSAFKQMIIQIgBSkDACEEDAELIAEgAkL///////////8AgyIKIAMgBEL///////////8AgyIJENsBQQBMBEAgASAKIAMgCRDbAQRAIAEhBAwCCyAFQfAAaiABIAJCAEIAEGYgBSkDeCECIAUpA3AhBAwBCyAEQjCIp0H//wFxIQcgBgR+IAEFIAVB4ABqIAEgCkIAQoCAgICAgMC7wAAQZiAFKQNoIgpCMIinQfgAayEGIAUpA2ALIQQgB0UEQCAFQdAAaiADIAlCAEKAgICAgIDAu8AAEGYgBSkDWCIJQjCIp0H4AGshByAFKQNQIQMLIAlC////////P4NCgICAgICAwACEIQsgCkL///////8/g0KAgICAgIDAAIQhCiAGIAdKBEADQAJ+IAogC30gAyAEVq19IglCAFkEQCAJIAQgA30iBIRQBEAgBUEgaiABIAJCAEIAEGYgBSkDKCECIAUpAyAhBAwFCyAJQgGGIARCP4iEDAELIApCAYYgBEI/iIQLIQogBEIBhiEEIAZBAWsiBiAHSg0ACyAHIQYLAkAgCiALfSADIARWrX0iCUIAUwRAIAohCQwBCyAJIAQgA30iBIRCAFINACAFQTBqIAEgAkIAQgAQZiAFKQM4IQIgBSkDMCEEDAELIAlC////////P1gEQANAIARCP4ghDCAGQQFrIQYgBEIBhiEEIAwgCUIBhoQiCUKAgICAgIDAAFQNAAsLIAhBgIACcSEHIAZBAEwEQCAFQUBrIAQgCUL///////8/gyAGQfgAaiAHcq1CMIaEQgBCgICAgICAwMM/EGYgBSkDSCECIAUpA0AhBAwBCyAJQv///////z+DIAYgB3KtQjCGhCECCyAAIAQ3AwAgACACNwMIIAVBgAFqJAALrQ8CBX8PfiMAQdACayIFJAAgBEL///////8/gyEKIAJC////////P4MhCyACIASFQoCAgICAgICAgH+DIQwgBEIwiKdB//8BcSEIAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgCEH//wFrQYGAfksNAQsgAVAgAkL///////////8AgyINQoCAgICAgMD//wBUIA1CgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhDAwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEMIAMhAQwCCyABIA1CgICAgICAwP//AIWEUARAIAMgAkKAgICAgIDA//8AhYRQBEBCACEBQoCAgICAgOD//wAhDAwDCyAMQoCAgICAgMD//wCEIQxCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEBCACEBDAILIAEgDYRQBEBCgICAgICA4P//ACAMIAIgA4RQGyEMQgAhAQwCCyACIAOEUARAIAxCgICAgICAwP//AIQhDEIAIQEMAgsgDUL///////8/WARAIAVBwAJqIAEgCyABIAsgC1AiBht5IAZBBnStfKciBkEPaxCGAUEQIAZrIQYgBSkDyAIhCyAFKQPAAiEBCyACQv///////z9WDQAgBUGwAmogAyAKIAMgCiAKUCIHG3kgB0EGdK18pyIHQQ9rEIYBIAYgB2pBEGshBiAFKQO4AiEKIAUpA7ACIQMLIAVBoAJqIApCgICAgICAwACEIhJCD4YgA0IxiIQiAkIAQoCAgICw5ryC9QAgAn0iBEIAEHwgBUGQAmpCACAFKQOoAn1CACAEQgAQfCAFQYACaiAFKQOYAkIBhiAFKQOQAkI/iIQiBEIAIAJCABB8IAVB8AFqIARCAEIAIAUpA4gCfUIAEHwgBUHgAWogBSkD+AFCAYYgBSkD8AFCP4iEIgRCACACQgAQfCAFQdABaiAEQgBCACAFKQPoAX1CABB8IAVBwAFqIAUpA9gBQgGGIAUpA9ABQj+IhCIEQgAgAkIAEHwgBUGwAWogBEIAQgAgBSkDyAF9QgAQfCAFQaABaiACQgAgBSkDuAFCAYYgBSkDsAFCP4iEQgF9IgJCABB8IAVBkAFqIANCD4ZCACACQgAQfCAFQfAAaiACQgBCACAFKQOoASAFKQOgASINIAUpA5gBfCIEIA1UrXwgBEIBVq18fUIAEHwgBUGAAWpCASAEfUIAIAJCABB8IAYgCSAIa2ohBgJ/IAUpA3AiE0IBhiIOIAUpA4gBIg9CAYYgBSkDgAFCP4iEfCIQQufsAH0iFEIgiCICIAtCgICAgICAwACEIhVCAYYiFkIgiCIEfiIRIAFCAYYiDUIgiCIKIBAgFFatIA4gEFatIAUpA3hCAYYgE0I/iIQgD0I/iHx8fEIBfSITQiCIIhB+fCIOIBFUrSAOIA4gE0L/////D4MiEyABQj+IIhcgC0IBhoRC/////w+DIgt+fCIOVq18IAQgEH58IAQgE34iESALIBB+fCIPIBFUrUIghiAPQiCIhHwgDiAOIA9CIIZ8Ig5WrXwgDiAOIBRC/////w+DIhQgC34iESACIAp+fCIPIBFUrSAPIA8gEyANQv7///8PgyIRfnwiD1atfHwiDlatfCAOIAQgFH4iGCAQIBF+fCIEIAIgC358IgsgCiATfnwiEEIgiCALIBBWrSAEIBhUrSAEIAtWrXx8QiCGhHwiBCAOVK18IAQgDyACIBF+IgIgCiAUfnwiCkIgiCACIApWrUIghoR8IgIgD1StIAIgEEIghnwgAlStfHwiAiAEVK18IgRC/////////wBYBEAgFiAXhCEVIAVB0ABqIAIgBCADIBIQfCABQjGGIAUpA1h9IAUpA1AiAUIAUq19IQpCACABfSELIAZB/v8AagwBCyAFQeAAaiAEQj+GIAJCAYiEIgIgBEIBiCIEIAMgEhB8IAFCMIYgBSkDaH0gBSkDYCINQgBSrX0hCkIAIA19IQsgASENIAZB//8AagsiBkH//wFOBEAgDEKAgICAgIDA//8AhCEMQgAhAQwBCwJ+IAZBAEoEQCAKQgGGIAtCP4iEIQEgBEL///////8/gyAGrUIwhoQhCiALQgGGDAELIAZBj39MBEBCACEBDAILIAVBQGsgAiAEQQEgBmsQ3QEgBUEwaiANIBUgBkHwAGoQhgEgBUEgaiADIBIgBSkDQCICIAUpA0giChB8IAUpAzggBSkDKEIBhiAFKQMgIgFCP4iEfSAFKQMwIgQgAUIBhiINVK19IQEgBCANfQshBCAFQRBqIAMgEkIDQgAQfCAFIAMgEkIFQgAQfCAKIAIgAiADIAQgAkIBgyIEfCIDVCABIAMgBFStfCIBIBJWIAEgElEbrXwiAlatfCIEIAIgAiAEQoCAgICAgMD//wBUIAMgBSkDEFYgASAFKQMYIgRWIAEgBFEbca18IgJWrXwiBCACIARCgICAgICAwP//AFQgAyAFKQMAViABIAUpAwgiA1YgASADURtxrXwiASACVK18IAyEIQwLIAAgATcDACAAIAw3AwggBUHQAmokAAu/AgEBfyMAQdAAayIEJAACQCADQYCAAU4EQCAEQSBqIAEgAkIAQoCAgICAgID//wAQZiAEKQMoIQIgBCkDICEBIANB//8BSQRAIANB//8AayEDDAILIARBEGogASACQgBCgICAgICAgP//ABBmQf3/AiADIANB/f8CTxtB/v8BayEDIAQpAxghAiAEKQMQIQEMAQsgA0GBgH9KDQAgBEFAayABIAJCAEKAgICAgICAORBmIAQpA0ghAiAEKQNAIQEgA0H0gH5LBEAgA0GN/wBqIQMMAQsgBEEwaiABIAJCAEKAgICAgICAORBmQeiBfSADIANB6IF9TRtBmv4BaiEDIAQpAzghAiAEKQMwIQELIAQgASACQgAgA0H//wBqrUIwhhBmIAAgBCkDCDcDCCAAIAQpAwA3AwAgBEHQAGokAAs8ACAAIAE3AwAgACACQv///////z+DIAJCgICAgICAwP//AINCMIinIANCMIinQYCAAnFyrUIwhoQ3AwgLwAECAX8CfkF/IQMCQCAAQgBSIAFC////////////AIMiBEKAgICAgIDA//8AViAEQoCAgICAgMD//wBRGw0AIAJC////////////AIMiBUKAgICAgIDA//8AViAFQoCAgICAgMD//wBS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AClFBEAgAQRAAkAgGkEITARAICogIyAEQYCAAmogCCAJIAogCygCsAERCQAMAQsgKiAjIARBgIACaiAIIAkgCiAaIAsoAsABEQgACyACKAIURQ0EIAogMW0hACAJIDNtIQEgGUEITARAICcgDiAEIAggASAAIAsoArABEQkAICYgDiArIAggASAAIAsoArABEQkADAULICcgDiAEIAggASAAIBkgCygCwAERCAAgJiAOICsgCCABIAAgGSALKALAAREIAAwECyA0QfMHQQAQUSACQQM6ALgCDAMLIAEEQCARIAUtAIQDaiEBIAUgOCwAACIHaiwAhgQgBnQhBiAFIAdBAXRqIg8sAKcFIUcgBSAHQQJ0aiIRLgGoBCEHIA8sAKYFIUYgES4BpgQhESAPLgHGAyEPIAUtAIUDIUUCQCAaQQhMBEAgKiAjIARBgIACaiAIIAkgCiAPIAYgASALKAK0AREUAAwBCyAqICMgBEGAgAJqIAggCSAKIA8gBiABIBogCygCxAEREQALIAIoAhRFDQMgCiAxbSEBIAkgM20hBSBFIBVqIQYgRiAAdCEPIEcgAHQhACAZQQhMBEAgJyAOIAQgCCAFIAEgESAPIAYgCygCtAERFAAgJiAOICsgCCAFIAEgByAAIAYgCygCtAERFAAMBAsgJyAOIAQgCCAFIAEgESAPIAYgGSALKALEARERACAmIA4gKyAIIAUgASAHIAAgBiAZIAsoAsQBEREADAMLIDRB8wdBABBRIAJBAzoAuAIMAgtB6IEBQYL1AEGQBEGAJBABAAsCQCAHQQFHDQAgD0EBRw0AIDctACpFBEAgBEGAwAJqIQACQCAaQQhMBEAgKiAjIARBgIACaiAAIAggCSAKIAsoAqwBEQgADAELICogIyAEQYCAAmogACAIIAkgCiAaIAsoArwBEQ0ACyACKAIURQ0CIAogMW0hACAJIDNtIQEgBEGAQGshBSAEQYDAAWohBiAZQQhMBEAgJyAOIAQgBSAIIAEgACALKAKsAREIACAmIA4gKyAGIAggASAAIAsoAqwBEQgADAMLICcgDiAEIAUgCCABIAAgGSALKAK8ARENACAmIA4gKyAGIAggASAAIBkgCygCvAERDQAMAgsgBSADLAADIgFBAXRqIgcsAMcFIQ0gBSABQQJ0aiIPLgHoBCEMIAcsAMYFIRAg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IAE6AAAgAEHX2AVqQQs6AAAgAEHW2AVqIAE6AAAgAEHZ2AVqQQw6AAAgAEHY2AVqIAE6AAAgAEHb2AVqQQ06AAAgAEHa2AVqIAE6AAAgAEHd2AVqQQ46AAAgAEHc2AVqIAE6AAAgAEHf2AVqQQ86AAAgAEHe2AVqIAE6AAAgAkEQaiECIAFBAWoiAUEQRw0AC0EAIQMDQEEAIQIgA0EASAR/QQAFAkAgA0UEQEEAIQEgAyEADAELIANBAWpBfnEhBkEAIQEgAyEAQQAhBQNAAkAgAEEPSg0AIAFBD0sNACAEQQF0IgdB4a0FaiAAOgAAIAdB4K0FaiABOgAAIARBAWohBAsCQCAAQRBKDQAgAUEBciIHQQ9LDQAgBEEBdCIJQeGtBWogAEEBazoAACAJQeCtBWogBzoAACAEQQFqIQQLIAFBAmohASAAQQJrIQAgBUECaiIFIAZHDQALCwJAIANBAXENACAAQQ9KDQAgAUEPSw0AIARBAXQiBUHhrQVqIAA6AAAgBUHgrQVqIAE6AAAgBEEBaiEECyADQQFqCyEDIARBgAJIDQALQQAhBANAIARBAXQiAEGRxwVqIAI6AABBACEBIABBkMcFakEAOgAAIABBk8cFaiACOgAAIABBkscFakEBOgAAIABBlccFaiACOgAAIABBlMcFakECOgAAIABBl8cFaiACOgAAIABBlscFakEDOgAAIABBmccFaiACOgAAIABBmMcFakEEOgAAIABBm8cFaiACOgAAIABBmscFakEFOgAAIABBnccFaiACOgAAIABBnMcFakEGOgAAIABBn8cFaiACOgAAIABBnscFakEHOgAAIABBoccFaiACOgAAIABBoMcFakEIOgAAIABBo8cFaiACOgAAIABBoscFakEJOgAAIABBpccFaiACOgAAIABBpMcFakEKOgAAIABBp8cFaiACOgAAIABBpscFakELOgAAIABBqccFaiACOgAAIABBqMcFakEMOgAAIABBq8cFaiACOgAAIABBqscFakENOgAAIABBrccFaiACOgAAIABBrMcFakEOOgAAIABBr8cFaiACOgAAIABBrscFakEPOgAAIABBsccFaiACOgAAIABBsMcFakEQOgAAIABBs8cFaiACOgAAIABBsscFakEROgAAIABBtccFaiACOgAAIABBtMcFakESOgAAIABB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AiAuIC9CGIaEIi43AwggA0UNACACIARBBmo2AgAgBDEABSEvIAIgBUEGayIDNgIEIAIgLiAvQhCGhCIuNwMIIANFDQAgAiAEQQdqNgIAIAQxAAYhLyACIAVBB2siAzYCBCACIC4gL0IIhoQiLjcDCCADRQ0AIAIgBEEIajYCACAEMQAHIS8gAiAFQQhrNgIEIAIgLiAvhDcDCEFIIQcLIAIgB0EHIAUgBUEHTxtBA3RqQUBrNgIQIBlBADoAByAZQQA7AAUgAkEBEOABIBkgAkEGEDE6AAUgGSACQQYQMToABiAZIAJBAxAxQQFrOgAHIAAgGS0ABSIEOgCEGSAAIARB+AFxQRBGOgCGGSAAIARBE2tB/wFxQQJJOgCFGQJAIBktAAYEQCAAQaQEaiANEJABDAELIAAoAvAOIBktAAdIBEAgAEGkBGogDRCQAQwBCyAEQR9NBEACfyAAIQQgGUEIaiEAIA0hBSMAQRBrIhAkAEHUChAsIgNBADYCmAYgA0IANwKQBiADQgA3AgQgA0G8CmoiFkIANwIAIANBADYC0AogA0IANwLICiADKAIIIQIgA0IANwIEAkAgAkUNACACIAIoAgQiBkEBazYCBCAGDQAgAiACKAIAKAIIEQAAIAIQKwsgA0EAOgAoIANBADYCJCADQQA6ABQgA0EANgIQIANBADsBDCADQQA2AgAgA0IANwIYIANBADsBICADQSpqEOQCIANCADcCiAYgA0GQAWpBAEHtARA0GiADQYADakEAQeYCEDQaIANBADYA9wUgA0IANwLwBSADQgA3AugFIANCADcC/AUgA0EAOgCEBiADQgA3ApwGIANCADcCpAYgA0IANwKsBiADIAMoApAGNgKUBiADQbQGahDkAiADQZgHakEAQaQDEDQaIANBADoAxAogAyADKALICjYCzAogEAJ/IAAhDSAQQQA6AA8gAygCCCEAIANCADcCBAJAIABFDQAgACAAKAIEIgJBAWs2AgQgAg0AIAAgACgCACgCCBEAACAAECsLIANBADoAKCADQQA2AiQgA0EAOgAUIANBADYCECADQQA7AQwgA0EANgIAIANCADcCGCADQQA7ASAgA0EqaiIHEOQCIANCADcCiAYgA0GQAWpBAEHtARA0IQogA0GAA2pBAEHmAhA0IQwgA0EANgD3BSADQgA3AvAFIANC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QAJAAkAgBkEBaw4CAQACC0GQrwMhAAsgACgCACIFQdCMAkEAEDAgAiADKAIANgLgAiAFQbaEAiACQeACahAwIAIgAygCBDYC0AIgBUHmhwIgAkHQAmoQMCACIAMoAgg2AsACIAVBg4UCIAJBwAJqEDAgAiADKAIMNgKwAiAFQZL6ASACQbACahAwIAMoAgghACADQRBqQQEgBRDgAiAAQQJOBEAgAEECayEGIANBxABqIQlBACEAA0AgAiAANgKgAiAFQZCJAiACQaACahAwIAkgAEE0bGpBACAFEOACIAAgBkchJSAAQQFqIQAgJQ0ACwsgAiADKALkAzYCkAIgBUHD1gEgAkGQAmoQMAJAIAMoAuQDBEAgAygCCEEATA0BIANB6ANqIQlBACEAA0AgAiAJIABBDGxqIgYoAgA2AoQCIAIgADYCgAIgBUGAywEgAkGAAmoQMCACIAYoAgQ2AvABIAVBo80BIAJB8AFqEDAgAiAGKAIINgLgASAFQdDNASACQeABahAwIABBAWoiACADKAIISA0ACwwBCyACIAMoAugDNgLQASAFQarLASACQdABahAwIAIgAygC7AM2AsABIAVBn80BIAJBwAFqEDAgAiADKALwAzYCsAEgBUHMzQEgAkGwAWoQMAsgAiADLQDIBDYCoAEgBUH5zQEgAkGgAWoQMCACIAMoAswENgKQASAFQcvKASACQZABahAwIAMoAswEQQJOBEBBASEGA0BBACEAIAZBDGwhCQNAIAIgAygC0AQgCWooAgAgAGosAAA2AogBIAIgADYChAEgAiAGNgKAASAFQfrMASACQYABahAwIAAgAy0AyARJISYgAEEBaiEAICYNAAsgBkEBaiIGIAMoAswESA0ACwsgAiADLADcBDYCcCAFQdfLASACQfAAahAwAkAgAy0A3ARFDQAgAiADKALgBDYCYCAFQeTKASACQeAAahAwIAIgAygC5AQ2AlAgBUGzzgEgAkHQAGoQMCACIAMsAOgENgJAIAVBk8wBIAJBQGsQMCADLQDoBEUNACACIAMoAuwENgIwIAVBvcwBIAJBMGoQMCACIAMoAvAENgIgIAVBks4BIAJBIGoQMCADKALwBEEATA0AIAIgAygC9AQvAQA2AhQgAkEANgIQIAVB3swBIAJBEGoQMAwBCyACIAMsAIwFNgIAIAVB+ssB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5gIgBSgCzAMiAyAFKALIAyIERwRAQQAhAgNAIAQgAkECdGooAgAiCQRAIAkgCSgCACgCBBEAACAFKALIAyEEIAUoAswDIQMLIAJBAWoiAiADIARrQQJ1SQ0ACwsgBSAENgLMAwwBC0GAkAFBvPQAQesHQZb9ABABAAsgBkECNgIoQQAhAyAFKAKsAyAFKAKoAyICa0ECdUEBayIERQ0BA0AgBiACIAhBAnRqIgkoAgBHBEAgCEEBaiIIIARHDQEMAwsLIAkoAgQiAkUNASAGKAIEKAIYIgggAigCBCgCGE4NAQNAIAggBSgCACIGKAKQAU4NAiAGKALAAiAIQcwAbGoiBigCAEEATARAIAZBATYCAAsgCEEBaiIIIAIoAgQoAhhIDQALDAELIARFDQECfyAFIgkoAgAiBygCzAJBACAHKALIAmtGBEAgAigChAENByAHKAKEASEMIAcoAnwoAvyDASEPQX8gAigCBCIQKAKIBiILQQFqIgStQrCRAX4iIadBBHIgIUIgiKcbECwiCiAENgIAIApBBGohAwJAIARFBEAgAiAENgKIASACIAM2AoQBDAELIAMgBEGwkQFsaiESIAMhBQNAIAVBjJEBakIANwIAIAVB1JABakEANgIAIAVBzJABakIANwIAIAVCADcCxJABIAVCADcCmJEBIAVBoJEBakIANwIAIAVBqJEBakEANgIAIAUgBUEmakFxcUEQaiINNgK4ECANQQBBgBAQNBogBUGwkQFqIgUgEkcNAAsgAiAENgKIASACIAM2AoQBIAtBAEgNACALQf////8HRg0JIBAoAhgiDUECdCIEIAwoAqRCaigCACEFIAogEDYCpJEBIAcoAnAhEiAKIAI2AqyRASAKIAk2AqiRASAKIAc2AqCRASAKIBI2ApyRASAKIAwoAoBCIARqKAIANgIIIAMQngIgAkEMaiISIQQgCwR/IBAoApAGBSAECygCACIOIBIoAgBKBEBBESEGDAELQQEhBCAOQQBMBEBBESEGDAELIApB+JABaiACKAIIIA4QoQIgByAHKALEAkEBajYCxAIgByAHKALUAkEBajYC1AIgAiACKAJ4QQFqNgJ4IAAgA0EBIA0gDSAPbSIDIA9sayADEI0GIAtFDQAgDEHUwQBqIRMgDEGowQBqIREDQCAFQQFqIgUgDCgCMCIDIAwoAjRs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IAMQkAYQKiAAKAKIGSECIAAoAowZBSABC0EEayIBNgKMGSABIAJHDQALCyACBEAgACACNgKMGSAAKAKQGRogAhAqC0EAIQIgAEHcEGoiASgCDCIDIAEoAggiBEcEQANAIAQgAkECdGooAgAiBQRAIAUQ0wMQKiABKAIIIQQgASgCDCEDCyACQQFqIgIgAyAEa0ECdUkNAAsLIAFBIGoQ1gMgASgCFCICBEAgASACNgIYIAEoAhwaIAIQKgsgASgCCCICBEAgASACNgIMIAEoAhAaIAIQKgsgAEH0CmoQ1gMCQCAAKALsCiIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAuQKIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgC3AoiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgAEEEaiEDQdgKIQEDQAJAIAMgAUEIayIBaigCACICRQ0AIAIgAigCBCIEQQFrNgIEIAQNACACIAIoAgAoAggRAAAgAhArCyABQdgGRw0ACwJAIAAoAtQGIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCzAYiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKALEBiIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoArwGIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCtAYiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAKsBiIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAqQGIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCnAYiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAKUBiIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAowGIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgChAYiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAL8BSIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAvQFIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgC7AUiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKALkBSIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAtwFIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgC1AUiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKALMBSIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAsQFIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCvAUiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAK0BSIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAqwFIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCpAUiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAKcBSIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoApQFIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCjAUiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAKEBSIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAvwEIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgC9AQiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKALsBCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAuQEIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgC3AQiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgAEGkBGoiASgCICICBEADQCABKAIQIgUgASgCHCIDQQh2Qfz//wdxaigCACADQf8HcUECdGooAgAhBCABIAJBAWs2AiAgASADQQFqIgI2AhwgAkGAEE8EQCAFKAIAECogASABKAIQQQRqNgIQIAEgASgCHEGACGs2AhwLIAEgASgCJCAEKAIYazYCJCABIAQQkAEgASgCICICDQALCyABKAIIIgIEQCABIAIQkAELIAEoAiwiBSABKAIoIgJHBEBBACEDA0AgAiADQQJ0aigCACIEBEAgBCgCFBAqIAQoAiAiAgRAIAQgAjYCJCAEKAIoGiACECoLIAQQKiABKAIsIQUgASgCKCECCyADQQFqIgMgBSACa0ECdUkNAAsLIAIEQCABIAI2AiwgASgCMBogAhAqCyABQQxqENYDIAALsAMBBX8gACgCrAMiASAAKAKoAyICRwRAA0AgAiADQQJ0aigCACIEBEAgBCgCjAFBpARqIAQoAgAQkAEgBCgChAEiAQRAIAFBBGsiBSgCACICBEAgASACQbCRAWxqIQIDQCACQSRrEMQBGiACQbCRAWsiAiABRw0ACwsgBRAqCyAEECogACgCqAMhAiAAKAKsAyEBCyADQQFqIgMgASACa0ECdUkNAAsLIAAoAswDIgMgACgCyAMiAUcEQEEAIQIDQCABIAJBAnRqKAIAIgQEQCAEIAQoAgAoAgQRAAAgACgCzAMhAyAAKALIAyEBCyACQQFqIgIgAyABa0ECdUkNAAsLIAAoAtQDIgMEQCAAKALYAyICIAMiAUcEQANAIAJBCGsQxAEiAiADRw0ACyAAKALUAyEBCyAAIAM2AtgDIAAoAtwDGiAB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IANBH0YNAEEBIAIgAkEBTBshCiAEIAhqQQRtIQUgBCAGakEEbSEHQQAhAwNAIAMgCGpBBG0hCSAAKAKUAiEEAkAgByAAKAKQAiICTg0AIAQgCUwNACAAKAKEAiAHaiACIAlsaiICIAItAABBwAByOgAAIAAoApQCIQQgACgCkAIhAgsCQCADIAZqQQRtIgkgAk4NACAEIAVMDQAgACgChAIgCWogAiAFbGoiAiACLQAAQYABcjoAAAsgA0EBaiIDIApHDQALCwwACyAAKAJ8IQJBASEeCyABQQFqIgEgAigC+IMBSA0ACwsgDkEBaiIOIBZHDQALCyAeDwtBiSBBtMYAQfYAQZMdEAEAC0HjH0G0xgBB9wBBkx0QAQALOAEBfyAAQgA3AwggACgCECEBIABBADYCECAAIAAoAgAgAUEDdSIBazYCACAAIAAoAgQgAWo2AgQLnQEBA38jAEEQayIBJABBrawFLQAAQQFGBEAgASAAKAIENgIEIAEgADYCAEGsjwIgARCyAQsgACgCBCICBEAgAigCACIDQQJOBEAgAiADQQFrNgIAIAAoAgAhAiAAQawBECwiAzYCACAAQQQQLCIANgIEIABBATYCACADIAJBrAEQMhoLIAFBEGokAA8LQb0aQab1AEHfAEGs0wAQAQALfgEDfyMAQRBrIgEkAEGtrAUtAABBAUYEQCABIAAoAgQ2AgQgASAANgIAQZvHASABELIBCyAAKAIEIgIEQCACIAIoAgBBAWsiAzYCAAJAIAMNACAAKAIAIgMEQCADECogACgCBCICRQ0BCyACECoLIABCADcCAAsgAUEQaiQAC2QBA38gAUEDSQRAIAAgAUECdCIDakFAaygCACEFIAIEQCACIABBLEEoIAEbaigCACAAKAJ8IANB3OwCaigCAGooAgBBB2pBCG1sNgIACyAFDwtB2YwBQe31AEGfBUGf0gAQAQALQwEBfyAAKAKQEQRAIAAoAoARIAAoAowRIgFBCHZB/P//B3FqKAIAIAFB/wdxQQJ0aigCAEEAOgBoIABB3BBqEIIGCwtVAQJ/AkAgACgCkBFBAEwNACAAKAKAESAAKAKMESIBQQh2Qfz//wdxaigCACABQf8HcUECdGooAgAiAUUNACABQQA6AGggAEHcEGoQggYgASECCyACC54IAQh/An8CQCAAQaQEaiIH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IAFBIGokACACC5QJAQR/IwBBoAFrIgMkAAJAIAIoAgQgAigCACICayIEQQdNBEAgA0EgECwiATYCECADQpmAgICAhICAgH83AhQgAUHK+QApAAA3AAAgAUEAOgAZIAFB4vkALQAAOgAYIAFB2vkAKQAANwAQIAFB0vkAKQAANwAIIABBAkH2ACADQRBqEC8aIAMsABtBAE4NASADKAIYGiADKAIQECoMAQsCQAJAAkAgAi0AACIFBEAgA0Gg0wM2AhggA0G00wM2AlAgA0HE0wMoAgAiATYCECADQRBqIgIgAUEMaygCAGpByNMDKAIANgIAIANBADYCFCACIAMoAhBBDGsoAgBqIgEgA0EcaiIEED4gAUKAgICAcDcCSCADQczTAygCACIBNgIYIANBGGoiBiABQQxrKAIAakHQ0wMoAgA2AgAgA0HA0wMoAgAiATYCECACIAFBDGsoAgBqQdTTAygCADYCACADQbTTAzYCUCADQYzTAzYCECADQaDTAzYCGCAEED8iBEHwywM2AgAgA0IANwJEIANCADcCPCADQRg2AkwgBkGKqgFBExAtIAUQQkGo5gBBERAtGgJ/IAMoAkwiAUEQcQRAIANBMGohASADKAJIIgUgAygCNCICSQR/IAMgAjYCSCACBSAFCwwBCyABQQhxRQRAQQAhAiADQQA6AA8gA0EEaiEBDAULIANBJGohASADKAIsCyABKAIAIgVrIgJB+P///wdPDQEgAkELTwRAIAJBB3JBAWoiBhAsIQEgAyAGQYCAgIB4cjYCDCADIAE2AgQgAyACNgIIDAMLIAMgAjoADyADQQRqIQEgAg0CQQAhAgwDCyACLQABIQUgASACLQACQQFqOwEAIAEgAi0AA0EBajsBAgJ/IAVBAXEEQEELIQUgBEELTQRAIANBIBAsIgE2AhAgA0KagICAgISAgIB/NwIUIAFBuc4AKQAANwAAIAFBADoAGiABQdHOAC8AADsAGCABQcnOACkAADcAECABQcHOACkAADcACCAAQQJB9gAgA0EQahAvGiADLAAbQQBODQYgAygCGBogAygCEBAqDAYLIAEgAigABCIEQRh0IARBgP4DcUEIdHIgBEEIdkGA/gNxIARBGHZycjYCBCACLQAJQRB0IAItAAhBGHRyIAItAApBCHRyDAELIAEgAi0ABSACLQAEQQh0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C8cBAQJ/IwBBIGsiAyQAIAIgASACQQAgASgCACgCLBEEACIENgIMIANBDGogASACIAIoAgQgBCACKAIAamtBACABKAIAKAIwEQcAIAIgAigCBCACKAIAazYCDCADLAAfQQBIBEAgAygCHBogAygCFBAqCyAAQZClBSkCADcCACAAQQhqIQACQEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EgaiQAC5MBAQR/QX8hAwJAIAAoAhgiASAAKAIcIgBGDQADQAJAAkAgASgCACICRQ0AIAJBoL8EQZiDBRA5IgJFDQAgASgCBCIADQEgAi0AaA8LIAFBCGoiASAARw0BDAILCyAAIAAoAgQiAUEBaiIENgIEIAItAGghAyAAIAE2AgQgBA0AIAAgACgCACgCCBEAACAAECsLIAMLtwoBAn8jAEHQAGsiAyQAIANCADcDSCADQUBrQgA3AwAgA0IANwM4IANCADcDMAJAIAIoAgAiASgCIEECRwRAIANBKBAsIgE2AgwgA0KngICAgIWAgIB/NwIQIAFBqjgpAAA3AB8gAUGjOCkAADcAGCABQZs4KQAANwAQIAFBkzgpAAA3AAggAUGLOCkAADcAACABQQA6ACcgA0EYakEEQboXIANBDGoQLyEBIABCADcCGCAAQgA3AhAgAEIANwIIIABCADcCACAAIAEpAwA3AiAgAEEoaiEAAkAgASwAE0EATgRAIAAgASkCCDcCACAAIAEoAhA2AggMAQsgACABKAIIIAEoAgwQLiABLAATQQBODQAgASgCEBogASgCCBAqCyADLAAXQQBODQEgAygCFBogAygCDBAqDAELQQAhBSABQQAQQEEIRwRAIANBKBAsIgE2AgwgA0KlgICAgIWAgIB/NwIQIAFBgjgpAAA3AB0gAUH9NykAADcAGCABQfU3KQAANwAQIAFB7TcpAAA3AAggAUHlNykAADcAACABQQA6ACUgA0EYakEEQboXIANBDGoQLyEBIABCADcCGCAAQgA3AhAgAEIANwIIIABCADcCACAAIAEpAwA3AiAgAEEoaiEAAkAgASwAE0EATgRAIAAgASkCCDcCACAAIAEoAhA2AggMAQsgACABKAIIIAEoAgwQLiABLAATQQBODQAgASgCEBog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AgQgAQRAIAEgASgCBEEBajYCBAsgAEGQpQUpAgA3AgggAEEQaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyACLAATQQBODQAgAigCEBogAigCCBAqCyACLAArQQBIBEAgAigCKBogAigCIBAqCyACKAIsIgAEQCACIAA2AjAgAigCNBogABAqCwJAIAIoAjwiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQKwsgAkFAayQAC6UBAQJ/IwBBIGsiAyQAIAEgAkEAIAEoAgAoAiwRBAAhBCACIAEtAGgQSCADQQxqIAEgAiAEEJsBIAMsAB9BAEgEQCADKAIcGiADKAIUECoLIABBkKUFKQIANwIAIABBCGohAAJAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADQSBqJAALgwUBBH8jAEGgAWsiAyQAIANB5NUDNgJEIANB8NUDKAIAIgY2AgwgA0EMaiIEIAZBDGsoAgBqQfTVAygCADYCACAEIAMoAgxBDGsoAgBqIgYgA0EQaiIFED4gBkKAgICAcDcCSCADQeTVAzYCRCADQdDVAzYCDCAFED8iBkHwywM2AgAgA0IANwI4IANCADcCMCADQRA2AkAgA0GUAWoiBSABIAIQWSAEIAMoApQBIAUgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBlAFqIgQgAhA1IANBDGogAygClAEgBCADLACfASICQQBIIgQbIAMoApgBIAIgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakHUuQFBEBAtIAEtAGgQQkHPkAJBARAtGgJAAn8gAygCQCIBQRBxBEAgAygCPCICIAMoAigiAUkEQCADIAE2AjwgASECCyADQSRqDAELIAFBCHFFBEBBACECIABBADoACwwCCyADKAIgIQIgA0EYagshAQJAIAIgASgCACIEayICQfj///8HSQRAIAJBC08EQCACQQdyQQFqIgUQLCEBIAAgBUGAgICAeHI2AgggACABNgIAIAAgAjYCBCABIQAMAgsgACACOgALIAINAUEAIQIMAgsQOAALIAAgBCACEDcaCyAAIAJqQQA6AAAgA0Hs1QMoAgAiADYCDCAAQQxrKAIAIANBDGpqQfjVAygCADYCACAGQfDLAzYCACADLAA7QQBIBEAgAygCOBogAygCMBAqCyAGED0aIANBxABqEDsaIANBoAFqJAALywEAIwBBIGsiAyQAIAMgASACEHsgAywAE0EASARAIAMoAhAaIAMoAggQKgsgASACEFI6AGgCQCACLQAUQQFGBEAgA0EAOgAUIANBADoAHyAAQQJB5AAgA0EUahAvGiADLAAfQQBODQEgAygCHBogAygCFBAqDAELIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EgaiQAC5cBAQJ/IABBsIIFNgIAAkAgACgCJCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyAAQcjxBDYCACAAKAIQIgEEQCAAIAE2AhQgACgCGBogARAqCwJAIAAoAggiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgABAqC5UBAQJ/IABBsIIFNgIAAkAgACgCJCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyAAQcjxBDYCACAAKAIQIgEEQCAAIAE2AhQgACgCGBogARAqCwJAIAAoAggiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgAAtnACADIAEoAiAoAmwiATYCACACIAFFQQF0NgIAIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCA8LIABBmKUFKAIAQZylBSgCABAuC/EBAQF/IwBBEGsiASQAIAIoAhAiAwRAIAIoAggiBARAIAQgAxCcAyACKAIQIQMLIAIoAgAiBCAEIAQoAgAoAggREgAgA618IAQoAgAoAhQREAAaIAJBADYCEAsCQCACLQAUQQFGBEAgAUEAOgAEIAFBADoADyAAQQJB5AAgAUEEahAvGiABLAAPQQBODQEgASgCDBogASgCBBAqDAELIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgAUEQaiQACwoAIAAoAiAtAHELCgAgACgCIC0AcAvGJAENfyMAQRBrIg4kACAOQQA2AgwgDkIANwIEIA5BBGohAwJAAkAgASgCICILKAJ0IgkgCygCeCINRwRAA0AgCSgCBCAJKAIAa0EYdiECAkAgAygCBCIEIAMoAggiBUkEQCAEIAI6AAAgBEEBaiEGDAELIAQgAygCACIHayIIQQFqIgFBAEgNAyAIQf////8HIAUgB2siBUEBdCIGIAEgASAGSRsgBUH/////A08bIgYEfyAGECwFQQALIgVqIgEgAjoAACAFIAZqIQwgAUEBaiEGAkAgBCAHRgRAIAEhBQwBC0EAIQogBCECIAhBA3EiCARAA0AgAUEBayIBIAJBAWsiAi0AADoAACAKQQFqIgogCEcNAAsLIAcgBGtBfE0EQANAIAFBAWsgAkEBay0AADoAACABQQJrIAJBAmstAAA6AAAgAUEDayACQQNrLQAAOgAAIAFBBGsiASACQQRrIgItAAA6AAAgAiAHRw0ACwsgAygCCBogAygCACEHCyADIAw2AgggAyAGNgIEIAMgBTYCACAHRQ0AIAcQKgsgAyAGNgIEIAkoAgQgCSgCAGtBEHYhAgJAIAMoAggiBSAGSwRAIAYgAjoAACAGQQFqIQQMAQsgBiADKAIAIgdrIghBAWoiAUEASA0DIAhB/////wcgBSAHayIFQQF0IgQgASABIARJGyAFQf////8DTxsiBAR/IAQQLAVBAAsiBWoiASACOgAAIAQgBWohDCABQQFqIQQCQCAGIAdGBEAgASEFDAELQQAhCiAGIQIgCEEDcSIIBEADQCABQQFrIgEgAkEBayICLQAAOgAAIApBAWoiCiAIRw0ACwsgByAGa0F8TQRAA0AgAUEBayACQQFrLQAAOgAAIAFBAmsgAkECay0AADoAACABQQNrIAJBA2stAAA6AAAgAUEEayIBIAJBBGsiAi0AADoAACACIAdHDQALCyADKAIIGiADKAIAIQcLIAMgDDYCCCADIAQ2AgQgAyAFNgIAIAdFDQAgBxAqCyADIAQ2AgQgCSgCBCAJKAIAa0EIdiECAkAgAygCCCIFIARLBEAgBCACOgAAIARBAWohBgwBCyAEIAMoAgAiB2siCEEBaiIBQQBIDQMgCEH/////ByAFIAdrIgVBAXQiBiABIAEgBkkbIAVB/////wNPGyIGBH8gBhAsBUEACyIFaiIBIAI6AAAgBSAGaiEMIAFBAWohBgJAIAQgB0YEQCABIQUMAQtBACEKIAQhAiAIQQNxIggEQANAIAFBAWsiASACQQFrIgItAAA6AAAgCkEBaiIKIAhHDQALCyAHIARrQXxNBEADQCABQQFrIAJBAWstAAA6AAAgAUECayACQQJrLQAAOgAAIAFBA2sgAkEDay0AADoAACABQQRrIgEgAkEEayICLQAAOgAAIAIgB0cNAAsLIAMoAggaIAMoAgAhBwsgAyAMNgIIIAMgBjYCBCADIAU2AgAgB0UNACAHECoLIAMgBjYCBCAJKAIEIAkoAgBrIQICQCADKAIIIgUgBksEQCAGIAI6AAAgBkEBaiEEDAELIAYgAygCACIHayIIQQFqIgFBAEgNAyAIQf////8HIAUgB2siBUEBdCIEIAEgASAESRsgBUH/////A08bIgQEfyAEECwFQQALIgVqIgEgAjoAACAEIAVqIQwgAUEBaiEEAkAgBiAHRgRAIAEhBQwBC0EAIQogBiECIAhBA3EiCARAA0AgAUEBayIBIAJBAWsiAi0AADoAACAKQQFqIgogCEcNAAsLIAcgBmtBfE0EQANAIAFBAWsgAkEBay0AADoAACABQQJrIAJBAmstAAA6AAAgAUEDayACQQNrLQAAOgAAIAFBBGsiASACQQRrIgItAAA6AAAgAiAHRw0ACwsgAygCCBogAygCACEHCyADIAw2AgggAyAENgIEIAMgBTYCACAHRQ0AIAcQKgsgAyAENgIEIAMgBCAJKAIAIgEgCSgCBCICIAIgAWsQxQEgCUEMaiIJIA1HDQALCyALKAKMASIJIAsoApABIg1HBEADQCAJKAIEIAkoAgBrQRh2IQICQCADKAIEIgQgAygCCCIFSQRAIAQgAjoAACAEQQFqIQYMAQsgBCADKAIAIgdrIghBAWoiAUEASA0DIAhB/////wcgBSAHayIFQQF0IgYgASABIAZJGyAFQf////8DTxsiBgR/IAYQLAVBAAsiBWoiASACOgAAIAUgBmohDCABQQFqIQYCQCAEIAdGBEAgASEFDAELQQAhCiAEIQIgCEEDcSIIBEADQCABQQFrIgEgAkEBayICLQAAOgAAIApBAWoiCiAIRw0ACwsgByAEa0F8TQRAA0AgAUEBayACQQFrLQAAOgAAIAFBAmsgAkECay0AADoAACABQQNrIAJBA2stAAA6AAAgAUEEayIBIAJBBGsiAi0AADoAACACIAdHDQALCyADKAIIGiADKAIAIQcLIAMgDDYCCCADIAY2AgQgAyAFNgIAIAdFDQAgBxAqCyADIAY2AgQgCSgCBCAJKAIAa0EQdiECAkAgAygCCCIFIAZLBEAgBiACOgAAIAZBAWohBAwBCyAGIAMoAgAiB2siCEEBaiIBQQBIDQMgCEH/////ByAFIAdrIgVBAXQiBCABIAEgBEkbIAVB/////wNPGyIEBH8gBBAsBUEACyIFaiIBIAI6AAAgBCAFaiEMIAFBAWohBAJAIAYgB0YEQCABIQUMAQtBACEKIAYhAiAIQQNxIggEQANAIAFBAWsiASACQQFrIgItAAA6AAAgCkEBaiIKIAhHDQALCyAHIAZrQXxNBEADQCABQQFrIAJBAWstAAA6AAAgAUECayACQQJrLQAAOgAAIAFBA2sgAkEDay0AADoAACABQQRrIgEgAkEEayICLQAAOgAAIAIgB0cNAAsLIAMoAggaIAMoAgAhBwsgAyAMNgIIIAMgBDYCBCADIAU2AgAgB0UNACAHECoLIAMgBDYCBCAJKAIEIAkoAgBrQQh2IQICQCADKAIIIgUgBEsEQCAEIAI6AAAgBEEBaiEGDAELIAQgAygCACIHayIIQQFqIgFBAEgNAyAIQf////8HIAUgB2siBUEBdCIGIAEgASAGSRsgBUH/////A08bIgYEfyAGECwFQQALIgVqIgEgAjoAACAFIAZqIQwgAUEBaiEGAkAgBCAHRgRAIAEhBQwBC0EAIQogBCECIAhBA3EiCARAA0AgAUEBayIBIAJBAWsiAi0AADoAACAKQQFqIgogCEcNAAsLIAcgBGtBfE0EQANAIAFBAWsgAkEBay0AADoAACABQQJrIAJBAmstAAA6AAAgAUEDayACQQNrLQAAOgAAIAFBBGsiASACQQRrIgItAAA6AAAgAiAHRw0ACwsgAygCCBogAygCACEHCyADIAw2AgggAyAGNgIEIAMgBTYCACAHRQ0AIAcQKgsgAyAGNgIEIAkoAgQgCSgCAGshAgJAIAMoAggiBSAGSwRAIAYgAjoAACAGQQFqIQQMAQsgBiADKAIAIgdrIghBAWoiAUEASA0DIAhB/////wcgBSAHayIFQQF0IgQgASABIARJGyAFQf////8DTxsiBAR/IAQQLAVBAAsiBWoiASACOgAAIAQgBWohDCABQQFqIQQCQCAGIAdGBEAgASEFDAELQQAhCiAGIQIgCEEDcSIIBEADQCABQQFrIgEgAkEBayICLQAAOgAAIApBAWoiCiAIRw0ACwsgByAGa0F8TQRAA0AgAUEBayACQQFrLQAAOgAAIAFBAmsgAkECay0AADoAACABQQNrIAJBA2stAAA6AAAgAUEEayIBIAJBBGsiAi0AADoAACACIAdHDQALCyADKAIIGiADKAIAIQcLIAMgDDYCCCADIAQ2AgQgAyAFNgIAIAdFDQAgBxAqCyADIAQ2AgQgAyAEIAkoAgAiASAJKAIEIgIgAiABaxDFASAJQQxqIgkgDUcNAAsLIAsoAoABIgkgCygChAEiCEcEQANAIAkoAgQgCSgCAGtBGHYhAgJAIAMoAgQiBCADKAIIIgVJBEAgBCACOgAAIARBAWohBgwBCyAEIAMoAgAiB2siC0EBaiIBQQBIDQMgC0H/////ByAFIAdrIgVBAXQiBiABIAEgBkkbIAVB/////wNPGyIGBH8gBhAsBUEACyIFaiIBIAI6AAAgBSAGaiENIAFBAWohBgJAIAQgB0YEQCABIQUMAQtBACEKIAQhAiALQQNxIgsEQANAIAFBAWsiASACQQFrIgItAAA6AAAgCkEBaiIKIAtHDQALCyAHIARrQXxNBEADQCABQQFrIAJBAWstAAA6AAAgAUECayACQQJrLQAAOgAAIAFBA2sgAkEDay0AADoAACABQQRrIgEgAkEEayICLQAAOgAAIAIgB0cNAAsLIAMoAggaIAMoAgAhBwsgAyANNgIIIAMgBjYCBCADIAU2AgAgB0UNACAHECoLIAMgBjYCBCAJKAIEIAkoAgBrQRB2IQICQCADKAIIIgUgBksEQCAGIAI6AAAgBkEBaiEEDAELIAYgAygCACIHayILQQFqIgFBAEgNAyALQf////8HIAUgB2siBUEBdCIEIAEgASAESRsgBUH/////A08bIgQEfyAEECwFQQALIgVqIgEgAjoAACAEIAVqIQ0gAUEBaiEEAkAgBiAHRgRAIAEhBQwBC0EAIQogBiECIAtBA3EiCwRAA0AgAUEBayIBIAJBAWsiAi0AADoAACAKQQFqIgogC0cNAAsLIAcgBmtBfE0EQANAIAFBAWsgAkEBay0AADoAACABQQJrIAJBAmstAAA6AAAgAUEDayACQQNrLQAAOgAAIAFBBGsiASACQQRrIgItAAA6AAAgAiAHRw0ACwsgAygCCBogAygCACEHCyADIA02AgggAyAENgIEIAMgBTYCACAHRQ0AIAcQKgsgAyAENgIEIAkoAgQgCSgCAGtBCHYhAgJAIAMoAggiBSAESwRAIAQgAjoAACAEQQFqIQYMAQsgBCADKAIAIgdrIgtBAWoiAUEASA0DIAtB/////wcgBSAHayIFQQF0IgYgASABIAZJGyAFQf////8DTxsiBgR/IAYQLAVBAAsiBWoiASACOgAAIAUgBmohDSABQQFqIQYCQCAEIAdGBEAgASEFDAELQQAhCiAEIQIgC0EDcSILBEADQCABQQFrIgEgAkEBayICLQAAOgAAIApBAWoiCiALRw0ACwsgByAEa0F8TQRAA0AgAUEBayACQQFrLQAAOgAAIAFBAmsgAkECay0AADoAACABQQNrIAJBA2stAAA6AAAgAUEEayIBIAJBBGsiAi0AADoAACACIAdHDQALCyADKAIIGiADKAIAIQcLIAMgDTYCCCADIAY2AgQgAyAFNgIAIAdFDQAgBxAqCyADIAY2AgQgCSgCBCAJKAIAayECAkAgAygCCCIFIAZLBEAgBiACOgAAIAZBAWohBAwBCyAGIAMoAgAiB2siC0EBaiIBQQBIDQMgC0H/////ByAFIAdrIgVBAXQiBCABIAEgBEkbIAVB/////wNPGyIEBH8gBBAsBUEACyIFaiIBIAI6AAAgBCAFaiENIAFBAWohBAJAIAYgB0YEQCABIQUMAQtBACEKIAYhAiALQQNxIgsEQANAIAFBAWsiASACQQFrIgItAAA6AAAgCkEBaiIKIAtHDQALCyAHIAZrQXxNBEADQCABQQFrIAJBAWstAAA6AAAgAUECayACQQJrLQAAOgAAIAFBA2sgAkEDay0AADoAACABQQRrIgEgAkEEayICLQAAOgAAIAIgB0cNAAsLIAMoAggaIAMoAgAhBwsgAyANNgIIIAMgBDYCBCADIAU2AgAgB0UNACAHECoLIAMgBDYCBCADIAQgCSgCACIBIAkoAgQiAiACIAFrEMUBIAlBDGoiCSAIRw0ACwsMAQsQNgALIABBADYCCCAAQgA3AgACQCAOKAIIIgIgDigCBCIBRwRAIAIgAWsiAkEASA0BIAAgAhAsIgU2AgAgACACIAVqIgY2AgggBSABIAIQMhogACAGNgIECyAAQZClBSkCADcCDCAAQRRqIQACQEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLiAOKAIEIQELIAEEQCAOIAE2AgggDigCDBogARAqCyAOQRBqJAAPCxA2AAsJACAAEOoDECoLySMBFH8jAEGgAWsiAyQAIANB5NUDNgJEIANB8NUDKAIAIgQ2AgwgA0EMaiIHIARBDGsoAgBqQfTVAygCADYCACAHIAMoAgxBDGsoAgBqIgUgA0EQaiIEED4gBUKAgICAcDcCSCADQeTVAzYCRCADQdDVAzYCDCAEED8iEEHwywM2AgAgA0IANwI4IANCADcCMCADQRA2AkAgA0GUAWoiBCABIAIQWSAHIAMoApQBIAQgAywAnwEiBUEASCIEGyADKAKYASAFIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBlAFqIgQgAhA1IANBDGogAygClAEgBCADLACfASIFQQBIIgQbIAMoApgBIAUgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakGeuQFBFxAtIAEtAGQQQkHPkAJBARAtIQcgA0GUAWoiBCACEDUgByADKAKUASAEIAMsAJ8BIgVBAEgiBBsgAygCmAEgBSAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyAHQYe5AUEWEC0gAS0AZRBCQZKkAUECEC0hEwJAAn8CQAJ/AkACQAJAAkACQAJAAkACQCABLQBlIgRBwgBrDjkJBwcHBwcHBwcHBwEHBwcHBwcHBwcHAgcHBwcHBwcHBwcHAwcHBwcHBwcHBwQHBwcHBwcHBwcHBwUACyAEQfQBRg0FIARBLEcNBiADQRAQLCIENgIAIANCi4CAgICCgICAfzcCBCAEQfKKASkAADcAACAEQfmKASgAADYAByAEQQtqDAkLIANBzcKl8wY2AgAgA0EEOgALQQQMBgsgA0LF8NGr5o3ZsuQANwMAIANBCDoAC0EIDAULIANBEBAsIgQ2AgAgA0KMgICAgIKAgIB/NwIEIARBzRopAAA3AAAgBEHVGigAADYACCAEQQxqDAYLIANBBzoACyADQaGPASgAADYCACADQaSPASgAADYAA0EHDAMLIANBjYwBLwAAOwEIIANBCjoACyADQYWMASkAADcDAEEKDAILIANB74oBLwAAOwEIIANBCjoACyADQeeKASkAADcDAEEKDAELIANBBzoACyADQbczKAAANgIAIANBujMoAAA2AANBBwsiCCADakEAOgAAIAMhBAwCCyADQRgQLCIENgIAIANClICAgICDgICAfzcCBCAEQYrSACkAADcAACAEQZrSACgAADYAECAEQZLSACkAADcACCAEQRRqC0EAOgAAIAMoAgQhCAsgEyAEIAgQLUHOkAJBAhAtIQcgA0GUAWoiBCACEDUgByADKAKUASAEIAMsAJ8BIgVBAEgiBBsgAygCmAEgBSAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyAHQdOwAUEXEC0gAS0AZhBCQc+QAkEBEC0hByADQZQBaiIEIAIQNSAHIAMoApQBIAQgAywAnwEiBUEASCIEGyADKAKYASAFIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIAdB8rgBQRQQLSABLQBnEEJBz5ACQQEQLSEHIANBlAFqIgQgAhA1IAcgAygClAEgBCADLACfASIFQQBIIgQbIAMoApgBIAUgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgB0HgswFBDxAtGiADLAALQQBIBEAgAygCCBogAygCABAqCwJAAkACQAJAAkACQCABKAJsDgQAAQIDBAsgA0EMakHaigJBBhAtGgwECyADQQxqQdOKAkEGEC0aDAMLIANBDGpBzIoCQQYQLRoMAgsgA0EMakHFigJBBhAtGgwBCyADQQxqQcbJAUEMEC0aCyADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiBUEASCIEGyADKAKYASAFIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANB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IANCrYCAgICGgICAfzcCGCABQY6TASkAADcAACABQQA6AC0gAUGzkwEpAAA3ACUgAUGukwEpAAA3ACAgAUGmkwEpAAA3ABggAUGekwEpAAA3ABAgAUGWkwEpAAA3AAggAEEJQQAgA0EUahAvGiADLAAfQQBODQEgAygCHBogAygCFBAqDAELIAIgBEH/AXEQSCABKAKAASIEIAEoAoQBIgVHBEADQCAEKAIEIAQoAgBrIgZBgIAETwRAIANBOBAsIgE2AhQgA0K3gICAgIeAgIB/NwIYIAFB1pIBKQAANwAAIAFBADoANyABQYWTASkAADcALyABQf6SASkAADcAKCABQfaSASkAADcAICABQe6SASkAADcAGCABQeaSASkAADcAECABQd6SASkAADcACCAAQQlBACADQRRqEC8aIAMsAB9BAE4NAyADKAIcGiADKAIUECoMAwsgAiAGQf//A3EQTSACIAQQlAEgBEEMaiIEIAVHDQALCwJAIAEtAGVBwgBrIgRBFk1BAEEBIAR0QYGQgAJxGw0AIAIgAS0AbBBIIAIgAS0AcEEIa0H/AXEQSCACIAEtAHFBCGtB/wFxEEggASgCkAEgASgCjAFrQQxtIgRBgAJPBEAgAEEJQQAgA0EUakGwkQEQgAEiABAvGiAALAALQQBODQIgACgCCBogACgCABAqDAILIAIgBEH/AXEQSCABKAKMASIEIAEoApABIgVGDQADQCAEKAIEIAQoAgBrIgZBgIAETwRAIANBwAAQLCIBNgIUIANCu4CAgICIgICAfzcCGCABQeKRASkAADcAACABQQA6ADsgAUGZkgEoAAA2ADcgAUGSkgEpAAA3ADAgAUGKkgEpAAA3ACggAUGCkgEpAAA3ACAgAUH6kQEpAAA3ABggAUHykQEpAAA3ABAgAUHqkQEpAAA3AAggAEEJQQAgA0EUahAvGiADLAAfQQBODQMgAygCHBogAygCFBAqDAMLIAIgBkH//wNxEE0gAiAEEJQBIARBDGoiBCAFRw0ACwsgAyABIAIgBxCbASADLAATQQBIBEAgAygCEBogAygCCBAqCyAAQZClBSkCADcCACAAQQhqIQBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIANBIGokAAuGCQEI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ADoAECADQQA6ABsgAEECQYMBIANBEGoQLxogAywAG0EATg0CIAMoAhgaIAMoAhAQKgwCCyACQgA3AhAgAkIANwIcIAJBADYCMCACIAU2AiwgAkEAOgAYIAJCADcCJCACQbCCBTYCDAsgASAGNgL0AiABKAL4AiEFIAEgAjYC+AICQCAFRQ0AIAUgBSgCBCICQQFrNgIEIAINACAFIAUoAgAoAggRAAAgBRArCyADQQA6ABggA0IANwIkIANCADcDECADQgA3AhwgAyABKAIUIgIoAjA2AgggAyACKAI0IgI2AgwgAgRAIAIgAigCBEEBajYCBAsgASgCJCECIAMgAykCCDcDACADQRBqIAMgAhDSASABKAL0AiEBIAMoAhQhBSADQQA2AhQgAygCECECIANBADYCECADKAIkIQYgA0EANgIkIAMoAiAhByADQQA2AiAgAygCHCEIIANBADYCHCADLQAYIQkgAygCKCEKIAEgAjYCBCABKAIIIQIgASAFNgIIAkAgAkUNACACIAIoAgQiBUEBazYCBCAFDQAgAiACKAIAKAIIEQAAIAIQKwsgASAJOgAMIAEoAhAiAgRAIAEgAjYCFCABKAIYGiACECoLIAEgCjYCHCABIAY2AhggASAHNgIUIAEgCDYCECAAQZClBSkCADcCACAAQQhqIQACQEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgAygCHCIABEAgAyAANgIgIAMoAiQaIAAQKgsCQCADKAIUIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLIARFDQAgBCAEKAIEIgBBAWs2AgQgAA0AIAQgBCgCACgCCBEAACAEECsLIANBMGokAAsJACAAEOwDECoLmh8BEH8jAEHAAWsiAyQAIANB5NUDNgJcIANB8NUDKAIAIgU2AiQgA0EkaiILIAVBDGsoAgBqQfTVAygCADYCACALIAMoAiRBDGsoAgBqIgUgA0EoaiIEED4gBUKAgICAcDcCSCADQeTVAzYCXCADQdDVAzYCJCAEED8iDUHwywM2AgAgA0IANwJQIANCADcCSCADQRA2AlggA0G0AWoiCiEEIwBBoAFrIgYkACAGQeTVAzYCRCAGQfDVAygCACIF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ayICQfj///8HSQRAIAJBC08EQCACQQdyQQFqIgQQLCEBIAAgBEGAgICAeHI2AgggACABNgIAIAAgAjYCBCABIQAMAgsgACACOgALIAINAUEAIQIMAgsQOAALIAAgBSACEDcaCyAAIAJqQQA6AAAgA0Hs1QMoAgAiADYCJCAAQQxrKAIAIANBJGpqQfjVAygCADYCACANQfDLAzYCACADLABTQQBIBEAgAygCUBogAygCSBAqCyANED0aIANB3ABqEDsaIANBwAFqJAALswoBDH8jAEEgayIEJAAgASACQQAgASgCACgCLBEEACEKIAIgAS0AaSABLQBoQQF0QQZxckH4AXIQSCABLQBpQQFGBEAgAiABLQBuIAEtAGxBBHQgAS8BakEHdHIgAS0AbUECdHJyQf//A3EQTSACIAEtAG9BBXRBH3JB/wFxEEggAiABLQBwQT9xEEggAiABLQByIAEtAHFBAXRB/gFxchBIIAIgAS0AcxBIAkAgAS0AcEUNACACIAEoAngtAAAgAS0AdUEGdCABLQB0QQd0cnJB/wFxEEhBASEDIAEtAHBBAU0NAANAIAIgASgCeCADai0AABBIIANBAWoiAyABLQBwSQ0ACwsCQCABLQBsIgNBAU0NACADQQFrIgVBAXEhDSABKAKEASEHAkAgA0ECayIDRQRAQYABIQZBACEFDAELIAVBfnEhC0GAASEGQQAhBQNAQQAgByADQQFrIglBA3ZB/P///wFxaigCACAJdkEBcWsgBkH/AXEiCUEBdnFBACAHIANBA3ZB/P///wFxaigCACADdkEBcWsgBnEgBXJyIQUgA0ECayEDIAlBAnYhBiAMQQJqIgwgC0cNAAsLIA1FDQBBACAHIANBA3ZB/P///wFxaigCACADdkEBcWsgBnEgBXIhBQsgAiAFQf8BcRBIIAEtAGwiA0ECTwRAIANBAmshAwNAIAEoAoQBIANBA3ZB/P///wFxaigCACADdkEBcQRAIAIgASgCkAEgA2otAAAQSAsgA0EASiEOIANBAWshAyAODQALCyACIAEoAqABIAEoApwBa0ECdkH/AXEiBRBIIAUEQEEAIQMDQCACIAEoApwBIANBAnRqKAIAEEogA0EBaiIDIAVHDQALCyACIAEvAagBEE0gAiABLwGqARBNIAIgAS8BrAEQTQsCQCABKAK0ASAB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QgA3AiQgA0IANwMQIANCADcCHCADIAEoAhQiAigCMDYCCCADIAIoAjQiAjYCDCACBEAgAiACKAIEQQFqNgIECyABKAIkIQIgAyADKQIINwMAIANBEGogAyACENIBIAEoAvQCIQEgAygCFCEFIANBADYCFCADKAIQIQIgA0EANgIQIAMoAiQhBiADQQA2AiQgAygCICEHIANBADYCICADKAIcIQggA0EANgIcIAMtABghCSADKAIoIQogASACNgIEIAEoAgghAiABIAU2AggCQCACRQ0AIAIgAigCBCIFQQFrNgIEIAUNACACIAIoAgAoAggRAAAgAhArCyABIAk6AAwgASgCECICBEAgASACNgIUIAEoAhgaIAIQKgsgASAKNgIcIAEgBjYCGCABIAc2AhQgASAINgIQIABBkKUFKQIANwIAIABBCGohAAJAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADKAIcIgAEQCADIAA2AiAgAygCJBogABAqCwJAIAMoAhQiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQKwsgBEUNACAEIAQoAgQiAEEBazYCBCAADQAgBCAEKAIAKAIIEQAAIAQQKwsgA0EwaiQAC8EFAQV/IwBBMGsiAiQAAkACQAJAAkACQAJAIAEoAhgiAyABKAIcIgFHBEADQAJAIAMoAgAiBEUNACAEQaC/BEHMgAUQOSIERQ0AIAMoAgQiAwRAIAMgAygCBEEBajYCBAsgAkEANgIUIAJCADcCDCAEIAJBDGoQ7QMNBSACQQA6AAAgAkEAOgALIAJBGGpBAkH1ACACEC8hASAAQQA2AgggAEIANwIAIAAgASkDADcCDCAAQRRqIQAgASwAE0EASA0DIAAgASkCCDcCACAAIAEoAhA2AggMBAsgA0EIaiIDIAFHDQALCyACQQA6AAwgAkEAOgAXIAJBGGpBAkGNASACQQxqEC8hASAAQQA2AgggAEIANwIAIAAgASkDADcCDCAAQRRqIQACQCABLAATQQBOBEAgACABKQIINwIAIAAgASgCEDYCCAwBCyAAIAEoAgggASgCDBAuIAEsABNBAE4NACABKAIQGiABKAIIECoLIAIsABdBAE4NBCACKAIUGiACKAIMECoMBAsgACABKAIIIAEoAgwQLiABLAATQQBODQAgASgCEBogASgCCBAqCyACLAALQQBODQEgAigCCBogAigCABAqDAELIABBADYCCCAAQgA3AgAgAigCECIBIAIoAgwiBUcEQCABIAVrIgFBAEgNAyAAIAEQLCIENgIEIAAgBDYCACAAIAEgBGoiBjYCCCAEIAUgARAyGiAAIAY2AgQLIABBkKUFKQIANwIMIABBFGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgAigCDCIABEAgAiAANgIQIAIoAhQaIAAQKgsgA0UNACADIAMoAgQiAEEBazYCBCAADQAgAyADKAIAKAIIEQAAIAMQKwsgAkEwaiQADwsQNgAL7wkBBn8jAEGgAWsiAyQAIANB5NUDNgJEIANB8NUDKAIAIgY2AgwgA0EMaiIFIAZBDGsoAgBqQfTVAygCADYCACAFIAMoAgxBDGsoAgBqIgYgA0EQaiIEED4gBkKAgICAcDcCSCADQeTVAzYCRCADQdDVAzYCDCAEED8iBkHwywM2AgAgA0IANwI4IANCADcCMCADQRA2AkAgA0GUAWoiBCABIAIQrAIgBSADKAKUASAEIAMsAJ8BIgVBAEgiBBsgAygCmAEgBSAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQZQBaiIFIAIQNSADQQxqIAMoApQBIAUgAywAnwEiBUEASCIEGyADKAKYASAFIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpB18ABQQ0QLSEIIAMgASgCZBCkASAIIAMoAgAgAyADLAALIgVBAEgiBBsgAygCBCAFIAQbEC1Bz5ACQQEQLSEFIANBlAFqIgQgAhA1IAUgAygClAEgBCADLACfASIEQQBIIgcbIAMoApgBIAQgBxsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgBUG2uQFBDxAtGiADLAALQQBIBEAgAygCCBogAygCABAqCwJAIAEoAmgiBUH///+HBE0EQCADQQxqIAUQPBoMAQsgA0GUAWoiBCAFEKQBIANBDGogAygClAEgBCADLACfASIFQQBIIgQbIAMoApgBIAUgBBsQLRogAywAnwFBAE4NACADKAKcARogAygClAEQKgsgA0EMakHPkAJBARAtIQUgA0GUAWoiBCACEDUgBSADKAKUASAEIAMsAJ8BIgJBAEgiBBsgAygCmAEgAiAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyAFQYq3AUETEC0aAkAgASgCbCICIAEoAnAiBUYNACADQZQBaiIBIAIoAgAQpAEgA0EMaiADKAKUASABIAMsAJ8BIgFBAEgiBBsgAygCmAEgASAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyACQQRqIgEgBUYNAANAIAEoAgAhBCADQSw6AJQBIANBDGoiByADQZQBaiICQQEQLRogAiAEEKQBIAcgAygClAEgAiADLACfASICQQBIIgQbIAMoApgBIAIgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgAUEEaiIBIAVHDQALCyADQQxqQc+QAkEBEC0aAkACfyADKAJAIgFBEHEEQCADKAI8IgEgAygCKCICSQRAIAMgAjYCPCACIQELIANBJGoMAQsgAUEIcUUEQEEAIQEgAEEAOgALDAILIAMoAiAhASADQRhqCyECAkAgASACKAIAIgVrIgFB+P///wdJBEAgAUELTwRAIAFBB3JBAWoiBBAsIQIgACAEQYCAgIB4cjYCCCAAIAI2AgAgACABNgIEIAIhAAwCCyAAIAE6AAsgAQ0BQQAhAQwCCxA4AAsgACAFIAEQNxoLIAAgAWpBADoAACADQezVAygCACIANgIMIABBDGsoAgAgA0EMampB+NUDKAIANgIAIAZB8MsDNgIAIAMsADtBAEgEQCADKAI4GiADKAIwECoLIAYQPRogA0HEAGoQOxogA0GgAWokAAv+JQESfyMAQbABayIBJAAgAUIANwOoASABQgA3A6ABIAFCADcDmAEgAUIANwOQAUHQARAsIgtB4NgENgIAIAtCADcCBCALQRBqIgxCADcDCCAMQgA3AxAgDEIANwMYIAxBADYCICAMQdS9BDYCACALQgA3AjwgC0IANwI0IAtCfzcDSCALQn83A1AgC0EANgJ0IAtCADcDWCALQgA3A2AgC0IANwNoIAtBADsBcCAMQZiABTYCACALQgA3A4gBIAtBgwI7AXggC0IANwOQASALQgA3A5gBIAtCADcDoAEgC0IANwOoASALQgA3A7ABIAtBADYCyAEgC0IANwLAASALQcPG2bMHNgIgIAEgCzYCHCABIAw2AhggCyALKAIEQQFqNgIEIAEgAUGQAWogAUEYahBTNgKUAQJAIAEoAhwiBEUNACAEIAQoAgQiBkEBazYCBCAGDQAgBCAEKAIAKAIIEQAAIAQQKwsgAUEANgKMASACKAIAIQYCQCACKAIEIgRFBEAgAUEANgKMASABIAY2AogBDAELIAQgBCgCBEEBajYCBCABIAY2AogBIAEoAowBIQIgASAENgKMASACRQ0AIAIgAigCBCIEQQFrNgIEIAQNACACIAIoAgAoAggRAAAgAhArCyABQfwAaiADKAIEIAFBiAFqIAUgAygCACgCZBEGAAJAAkAgASgCfCIEBEAgASgCgAEhBSABKAKEASIGEFgiAkH4////B08NAgJAAkAgAkELTwRAIAJBB3JBAWoiCBAsIQMgASAIQYCAgIB4cjYCeCABIAM2AnAgASACNgJ0DAELIAEgAjoAeyABQfAAaiEDIAJFDQELIAMgBiACEDcaCyACIANqQQA6AAAgAUEYaiAEIAUgAUHwAGoQLyECIABCADcCGCAAQgA3AhAgAEIANwIIIABCADcCACAAIAIpAwA3AiAgAEEoaiEAAkAgAiwAE0EATgRAIAAgAikCCDcCACAAIAIoAhA2AggMAQsgACACKAIIIAIoAgwQLiACLAATQQBODQAgAigCEBogAigCCBAqCyABLAB7QQBODQEgASgCeBogASgCcBAqDAELIAFBADYCcCABQQA2AmwgAUEYaiADKAIEIAFB6ABqIAFB5ABqQQAgAygCACgCaBEHACABKAJoIgIEQANAAkACQCABKAJkIgVBAkgNAAJAAkAgAi0AAUEDdkEOaw4DAQABAgsgAUGDAjsBGCABQgA3AlAgAUIANwJIIAFCADcCQCABQgA3AjggAUIANwIwIAFCADcCKCABQQRqIRIgAiEQIAFBGGohCUEAIQZBACEEQQAhCEEAIQcjAEHQAGsiCiQAIApBADYCTCAKQgA3AkQCQAJAAkACQAJAAkACQCAFIhMEQANAAkACQCAHQQJqIgIgE08NACAHIBBqIgUtAAANACAFLQABDQAgAiAQai0AAEEDRw0AAkAgBiAISwRAIAhBADoAACAI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aiEFAkAgB0EIEEUiBCAJKAI4IAkoAjQiBmtBAnUiAksEQCAFIAQgAmsQqgEMAQsgAiAETQ0AIAkgBiAEQQJ0ajYCOAtBACECIARBAEwNAANAIAdBIBBFIQYgBSgCACACQQJ0aiAGNgIAIAJBAWoiAiAERw0ACwsgB0EBEFQgB0EBEEUEQCAHQQEQVAsgByAKQRxqEHkaIAcgCkEYahB5GiABIAooAhwiAjYCcCABIAooAhgiBDYCbAJAIARBgIAESCACQf//A0xxRQRAIApBOBAsIgI2AgwgCkK3gICAgIeAgIB/NwIQIAJBuJ8BKQAANwAAIAJBADoANyACQeefASkAADcALyACQeCfASkAADcAKCACQdifASkAADcAICACQdCfASkAADcAGCACQcifASkAADcAECACQcCfASkAADcACCASQQlB1g8gCkEMahAvGiAKLAAXQQBODQEgCigCFBogCigCDBAqDAELIAkgBDsBQiAJIAI7AUAgB0EBEEUEQCAHIApBDGoQeRogByAKQQhqEHkaIAcgCkEEahB5GiAHIAoQeRoLIAdBARBFGiAHIApBCGoQeRogCigCCCICQfgBTgRAIApBIBAsIgI2AgwgCkKbgICAgISAgIB/NwIQIAJBz5kBKQAANwAAIAJBADoAGyACQeaZASgAADYAFyACQd+ZASkAADcAECACQdeZASkAADcACCASQQlBACAKQQxqEC8aIAosABdBAE4NASAKKAIUGiAKKAIMECoMAQsgCUEBOgAFIAkgAjoAByASQZClBSkCADcCACASQQhqIQJBo6UFLAAAQQBOBEAgAkGYpQUpAgA3AgAgAkGgpQUoAgA2AggMAQsgAkGYpQUoAgBBnKUFKAIAEC4LIAooAkQiAgRAIAogAjYCSCAKKAJMGiACECoLIApB0ABqJAAMAgsgCiAINgJICyAKIAQ2AkQgCiAGNgJMEDYACyABLAAXQQBIBEAgASgCFBogASgCDBAqCyAMIAFBGGoiAikCADcDaCAMIAIoAgg2AnAgDCACLwEMOwF0AkAgAiAMQegAakYEQCAMQYQBaiACQRxqEO8DDAELIAxB+ABqIAIoAhAiBCACKAIUIgUgBSAEaxCpASAMQYQBaiACQRxqEO8DIAxBkAFqIAIoAigiBCACKAIsIgUgBSAEaxCpASAMQZwBaiACKAI0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AUKAgICAcDcCSCADQczTAygCACIBNgIIIANBCGoiBiABQQxrKAIAakHQ0wMoAgA2AgAgA0HA0wMoAgAiATYCACADIAFBDGsoAgBqQdTTAygCADYCACADQbTTAzYCQCADQYzTAzYCACADQaDTAzYCCCAEED8iAUHwywM2AgAgA0IANwI0IANCADcCLCADQRg2AjwgBkGXrgFBGRAtIAUQPEGWpgFBLBAtIAIoAhBBBW4QPEG6JEEPEC0aAn8gAygCPCICQRBxBEAgA0EgaiEEIAMoAjgiBSADKAIkIgJJBH8gAyACNgI4IAIFIAULDAELIAJBCHFFBEBBACECIANBADoAnwEgA0GUAWohBAwGCyADQRRqIQQgAygCHAsgBCgCACIFayICQfj///8HTw0BIAJBC08EQCACQQdyQQFqIgYQLCEEIAMgBkGAgICAeHI2ApwBIAMgBDYClAEgAyACNgKYAQwECyADIAI6AJ8BIANBlAFqIQQgAg0DQQAhAgwECyABQegAaiEGAkAgASgCbCABKAJoIgdrQQZtIgQgBUkEQCAGIAUgBGsQ8QMMAQsgBCAFTQ0AIAEgByAFQQZsajYCbAsgBUUNAUEAIQQDQCACLQAUDQIgAigCEEUNAiACEE4hCCACEFIhCSACEE4hCiAGKAIAIARBBmxqIgcgCjsBBCAHIAk6AAIgByAIOwEAIARBAWoiBCAFRw0ACwwBCxA4AAsCQCACLQAUQQFGBEAgA0EAOgCUASADQQA6AJ8BIANBAkHkACADQZQBahAvGiADLACfAUEATg0BIAMoApwBGiADKAKUARAqDAELIANBkKUFKQIANwMAIANBCGohBEGjpQUsAABBAE4EQCAEQZilBSkCADcCACAEQaClBSgCADYCCAwBCyAEQZilBSgCAEGcpQUoAgAQLgsgAygCACELIAMsABNBAEgEQCADKAIQGiADKAIIECoLIAsEQCABIAEoAmg2AmwLIAItABRBAUYEQCADQQA6AAAgA0EAOgALIABBAkHkACADEC8aIAMsAAtBAE4NAyADKAIIGiADKAIAECoMAwsgAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAMLIABBmKUFKAIAQZylBSgCABAuDAILIAQgBSACEDcaCyACIARqQQA6AAAgAEECQeQAIANBlAFqEC8aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBvNMDKAIAIgA2AgAgAyAAQQxrKAIAakHc0wMoAgA2AgAgA0Hg0wMoAgA2AgggAUHwywM2AgAgAywAN0EASARAIAMoAjQaIAMoAiwQKgsgARA9GiADQUBrEDsaCyADQaABaiQAC5cEAQh/IwBBIGsiBCQAAkACQAJAIAEoAmggASgCZGtB/wFxRQRAIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAEgNASAAQZilBSkCADcCACAAQaClBSgCADYCCAwDCyABIAJBACABKAIAKAIsEQQAIQggAiABKAJ0IAEoAnBrQQxtQf8BcRBNIAIgASgCaCABKAJka0H/AXEQSCABKAJkIgMgASgCaCIFRwRAA0AgAiADLQAAEEggA0EBaiIDIAVHDQALCyABKAJwIgUgASgCdCIJRg0BA0AgBEEANgIcIARCADcCFCAFKAIEIgMgBSgCACIGRiIHRQRAAkAgAyAGayIDQQBOBEAgAxAsIAYgAxAyIQYgBw0BQQEgA0EBdiIDIANBAU0bIQpBACEDA0AgBiADQQF0ai8BACEHAkAgASgCZCADai0AAEEITQRAIAIgB0H/AXEQSAwBCyACIAcQTQsgA0EBaiIDIApHDQALDAELEDYACyAGECoLIAVBDGoiBSAJRw0ACwwBCyAAQZilBSgCAEGcpQUoAgAQLgwBCyAEIAEgAiAIEJsBIAQsABNBAEgEQCAEKAIQGiAEKAIIECoLIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgBEEgaiQAC/EFAQR/IwBBoAFrIgMkACADQeTVAzYCRCADQfDVAygCACIGNgIMIANBDGoiBCAGQQxrKAIAakH01QMoAgA2AgAgBCADKAIMQQxrKAIAaiIGIANBEGoiBRA+IAZCgICAgHA3AkggA0Hk1QM2AkQgA0HQ1QM2AgwgBRA/IgZB8MsDNgIAIANCADcCOCADQgA3AjAgA0EQNgJAIANBlAFqIgUgASACEFkgBCADKAKUASAFIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiAkEASCIEGyADKAKYASACIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGoiAkGLwwFBBBAtIAEoAnQgASgCcGtBDG0QPBogAkHhwwFBBxAtIAEoAmggASgCZGtB/wFxEEIaIAJB6cMBQQUQLRogASgCZCICIAEoAmgiAUcEQANAIANBDGogAi0AABBCQbjEAUECEC0aIAJBAWoiAiABRw0ACwsgA0EMakHPkAJBARAtGgJAAn8gAygCQCIBQRBxBEAgAygCPCICIAMoAigiAUkEQCADIAE2AjwgASECCyADQSRqDAELIAFBCHFFBEBBACECIABBADoACwwCCyADKAIgIQIgA0EYagshAQJAIAIgASgCACIEayICQfj///8HSQRAIAJBC08EQCACQQdyQQFqIgUQLCEBIAAgBUGAgICAeHI2AgggACABNgIAIAAgAjYCBCABIQAMAgsgACACOgALIAINAUEAIQIMAgsQOAALIAAgBCACEDcaCyAAIAJqQQA6AAAgA0Hs1QMoAgAiADYCDCAAQQxrKAIAIANBDGpqQfjVAygCADYCACAGQfDLAzYCACADLAA7QQBIBEAgAygCOBogAygCMBAqCyAGED0aIANBxABqEDsaIANBoAFqJAALvAgBDH8jAEEQayIEJAAgAhBOIQsCQAJAIAIQUiINRQ0AA0AgAhBSIgXAQQBIBEAgBEEoECwiATYCBCAEQqaAgICAhYCAgH83AgggAUGT5gApAAA3AAAgAUEAOgAmIAFBseYAKQAANwAeIAFBq+YAKQAANwAYIAFBo+YAKQAANwAQIAFBm+YAKQAANwAIIABBBEG6FyAEQQRqEC8aIAQsAA9BAE4NAyAEKAIMGiAEKAIEECoMAwsgBUERTwRAIARBOBAsIgE2AgQgBEKzgICAgIeAgIB/NwIIIAFB3+UAKQAANwAAIAFBADoAMyABQY7mACgAADYALyABQYfmACkAADcAKCABQf/lACkAADcAICABQfflACkAADcAGCABQe/lACkAADcAECABQeflACkAADcACCAAQQRBuhcgBEEEahAvGiAELAAPQQBODQMgBCgCDBogBCgCBBAqDAMLAkACQCABKAJo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BSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EQaiQACwgAQbHWydEGC0UBAn8gAEHc+gQ2AgACQCAAKAL4AiIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyAAEHQQKgtDAQJ/IABB3PoENgIAAkAgACgC+AIiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgABB0C9kHAQl/IwBBMGsiAyQAAkACQAJAIAEoAhgiAiABKAIcIgRHBEADQAJAIAIoAgAiBUUNACAFQaC/BEHM/gQQOSIFRQ0AIAIoAgQiBARAIAQgBCgCBEEBajYCBAtBNBAsIgJCADcCBCACQfDyBDYCACACQQxqIQYgBEUNAyAEIAQoAgRBAWo2AgQgAkEAOgAYIAJCADcCECACQgA3AhwgAkIANwIkIAIgBDYCMCACIAU2AiwgAkHE+wQ2AgwgBCgCBEF/Rw0EIAQgBCgCACgCCBEAACAEECsMBAsgAkEIaiICIARHDQALCyADQRgQLCIBNgIQIANCkoCAgICDgICAfzcCFCABQd2aASkAADcAACABQQA6ABIgAUHtmgEvAAA7ABAgAUHlmgEpAAA3AAggAEECQQAgA0EQahAvGiADLAAbQQBODQIgAygCGBogAygCEBAqDAILIAJCADcCECACQgA3AhwgAkEANgIwIAIgBTYCLCACQQA6ABggAkIANwIkIAJBxPsENgIMCyABIAY2AvQCIAEoAvgCIQUgASACNgL4AgJAIAVFDQAgBSAFKAIEIgJBAWs2AgQgAg0AIAUgBSgCACgCCBEAACAFECsLIANBADoAGCADQgA3AiQgA0IANwMQIANCADcCHCADIAEoAhQiAigCMDYCCCADIAIoAjQiAjYCDCACBEAgAiACKAIEQQFqNgIECyABKAIkIQIgAyADKQIINwMAIANBEGogAyACENIBIAEoAvQCIQEgAygCFCEFIANBADYCFCADKAIQIQIgA0EANgIQIAMoAiQhBiADQQA2AiQgAygCICEHIANBADYCICADKAIcIQggA0EANgIcIAMtABghCSADKAIoIQogASACNgIEIAEoAgghAiABIAU2AggCQCACRQ0AIAIgAigCBCIFQQFrNgIEIAUNACAC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LSABKAJoIAEoAmRrEDxBz5ACQQEQLRoCQAJ/IAMoAkAiAUEQcQRAIAMoAjwiASADKAIoIgJJBEAgAyACNgI8IAIhAQsgA0EkagwBCyABQQhxRQRAQQAhASAAQQA6AAsMAgsgAygCICEBIANBGGoLIQICQCABIAIoAgAiBGsiAUH4////B0kEQCABQQtPBEAgAUEHckEBaiIFECwhAiAAIAVBgICAgHhyNgIIIAAgAjYCACAAIAE2AgQgAiEADAILIAAgAToACyABDQFBACEBDAILEDgACyAAIAQgARA3GgsgACABakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBhA9GiADQcQAahA7GiADQaABaiQACwgAQefKwdMGC9EGAQV/IwBBoAFrIgMkACADQeTVAzYCRCADQfDVAygCACIGNgIMIANBDGoiBCAGQQxrKAIAakH01QMoAgA2AgAgBCADKAIMQQxrKAIAaiIGIANBEGoiBRA+IAZCgICAgHA3AkggA0Hk1QM2AkQgA0HQ1QM2AgwgBRA/IgZB8MsDNgIAIANCADcCOCADQgA3AjAgA0EQNgJAIANBlAFqIgUgAhA1IAQgAygClAEgBSADLACfASIEQQBIIgUbIAMoApgBIAQgBRsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EnOgCUASADQQxqIANBlAFqIgRBARAtIQcgBCABKAJkEKQBIAcgAygClAEgBCADLACfASIEQQBIIgUbIAMoApgBIAQgBRsQLUHjtwFBDxAtIAEoAnAgAUHwAGogASwAeyIEQQBIIgUbIAEoAnQgBCAFGxAtQc+QAkEBEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBlAFqIgQgAhA1IANBDGogAygClAEgBCADLACfASICQQBIIgQbIAMoApgBIAIgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakHrsAFBChAtGgJAAkACQAJAIAEoAnwOAwABAgMLIANBDGpB38cBQQYQLRoMAgsgA0EMakGayQFBChAtGgwBCyADQQxqQebHAUEJEC0aCwJAAn8gAygCQCIBQRBxBEAg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E0EATg0AIAIoAhAaIAIoAggQKgsgASwAF0EATg0BIAEoAhQaIAEoAgwQKgwBCyABQQA2AiAgAUIANwIYIAFBDGogAygCBCABQQhqIAFBBGpBACADKAIAKAJoEQcAA0AgASgCCCIGBEACQCABKAIcIAEoAhgiAmsiBCAEIAEoAgQiBWoiB0kEQCABQRhqIAUQZSABKAIEIQUgASgCCCEGIAEoAhghAgwBCyAEIAdNDQAgASACIAdqNgIcCyACIARqIAYgBRAyGiABQQxqIAMoAgQgAUEIaiABQQRqQQAgAygCACgCaBEHAAwBCwsgASgCICECIAFBADYCICABIAI2AlQgASABKQIYNwJMIAFCADcCGCAAIAFBQGsQ5AEgASgCGCIARQ0AIAEgADYCHCABKAIgGiAAECoLAkAgASgCPCIARQ0AIAAgACgCBCICQQFrNgIEIAINACAAIAAoAgAoAggRAAAgABArCyABKAJMIgAEQCABIAA2AlAgASgCVBogABAqCyABKAJAIgAEQCABKAJEIgIgACIFRwRAA0ACQCACQQRrKAIAIgNFDQAgAyADKAIEIgRBAWs2AgQgBA0AIAMgAygCACgCCBEAACADECsLIAJBCGsiAiAARw0ACyABKAJAIQULIAEgADYCRCABKAJIGiAFECoLIAFB4ABqJAAPCxA4AAsvAEGYpgVBBjYCAEGMpgVBAToAAEGcpgVBAToAAEGQpgVChoCAgOAANwIAQYymBQsuAQF/IABBoPcENgIAIAAoAnAiAQRAIAAgATYCdCAAKAJ4GiABECoLIAAQVhAqCywBAX8gAEGg9wQ2AgAgACgCcCIBBEAgACABNgJ0IAAoAngaIAEQKgsgABBWC48CAQN/IwBBIGsiAyQAIAEgAkEAIAEoAgAoAiwRBAAhBAJAAkACQCABKAJkQf//A0sNACABKAJoQf//A0sNACACIAEoAmxB//8DSyIFEEggBQ0BIAIgAS8BZBBNIAIgAS8BaBBNIAIgAS8BbBBNDAILIAJBARBICyACIAEoAmQQSiACIAEoAmgQSiACIAEoAmwQSgsgA0EMaiABIAIgBBCbASADLAAfQQBIBEAgAygCHBogAygCFBAqCyAAQZClBSkCADcCACAAQQhqIQACQEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EgaiQAC6EFAQR/IwBBoAFrIgMkACADQeTVAzYCRCADQfDVAygCACIGNgIMIANBDGoiBCAGQQxrKAIAakH01QMoAgA2AgAgBCADKAIMQQxrKAIAaiIGIANBEGoiBRA+IAZCgICAgHA3AkggA0Hk1QM2AkQgA0HQ1QM2AgwgBRA/IgZB8MsDNgIAIANCADcCOCADQgA3AjAgA0EQNgJAIANBlAFqIgUgASACEFkgBCADKAKUASAFIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiAkEASCIEGyADKAKYASACIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpBz/sAQQ4QLSABKAJkEDxBnp0BQQEQLSABKAJoEDxBnp0BQQEQLSABKAJsEDxB+IkCQQIQLRoCQAJ/IAMoAkAiAUEQcQRAIAMoAjwiASADKAIoIgJJBEAgAyACNgI8IAIhAQsgA0EkagwBCyABQQhxRQRAQQAhASAAQQA6AAsMAgsgAygCICEBIANBGGoLIQICQCABIAIoAgAiBGsiAUH4////B0kEQCABQQtPBEAgAUEHckEBaiIFECwhAiAAIAVBgICAgHhyNgIIIAAgAjYCACAAIAE2AgQgAiEADAILIAAgAToACyABDQFBACEBDAILEDgACyAAIAQgARA3GgsgACABakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBhA9GiADQcQAahA7GiADQaABaiQAC+IBACMAQRBrIgMkACABAn8gAhBSQQFxBEAgASACEEk2AmQgASACEEk2AmggAhBJDAELIAEgAhBONgJkIAEgAhBONgJoIAIQTgs2AmwCQCACLQAUQQFGBEAgA0EAOgAEIANBADoADyAAQQJB5AAgA0EEahAvGiADLAAPQQBODQEgAygCDBogAygCBBAqDAELIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EQaiQAC8UIAgR/AX4jAEGwAWsiAyQAIANB5NUDNgJUIANB8NUDKAIAIgY2AhwgA0EcaiIEIAZBDGsoAgBqQfTVAygCADYCACAEIAMoAhxBDGsoAgBqIgYgA0EgaiIFED4gBkKAgICAcDcCSCADQeTVAzYCVCADQdDVAzYCHCAFED8iBkHwywM2AgAgA0IANwJIIANCADcCQCADQRA2AlAgA0GkAWoiBSABIAIQrAIgBCADKAKkASAFIAMsAK8BIgRBAEgiBRsgAygCqAEgBCAFGxAtGiADLACvAUEASARAIAMoAqwBGiADKAKkARAqCwJ/AkACQAJAAkAgASkDCCIHIAEoAiAiBK1aBEAgASgCZCEBIANBiMIBLwAAOwEUIANBBjoAGyADQYTCASgAADYCECADQQA6ABYgA0HoxAEvAAA7AQggA0EGOgAPIANB5MQBKAAANgIEIANBADoACiADQaQBaiICIAEgB6cgBGsgA0EQaiADQQRqEKwEIANBHGogAygCpAEgAiADLACvASIBQQBIIgIbIAMoAqgBIAEgAhsQLRogAywArwFBAEgEQCADKAKsARogAygCpAEQKgsgAywAD0EASARAIAMoAgwaIAMoAgQQKgsgAywAG0EASARAIAMoAhgaIAMoAhAQKgsCfyADKAJQIgFBEHEEQCADKAJMIgEgAygCOCICSQRAIAMgAjYCTCACIQELIANBNGoMAQsgAUEIcUUEQCAAQQA6AAsgAAwHCyADKAIwIQEgA0EoagshAiABIAIoAgAiBGsiAkH4////B08NASACQQtPBEAgAkEHckEBaiIFECwhASAAIAVBgICAgHhyNgIIIAAgATYCACAAIAI2AgQgASEADAULIAAgAjoACyACDQQgAAwFCyADQaQBaiIEIAIQNSADQRxqIAMoAqQBIAQgAywArwEiAkEASCIEGyADKAKoASACIAQbEC0aIAMsAK8BQQBIBEAgAygCrAEaIAMoAqQBECoLIANBHGpBtK0BQREQLSABKQMIEIUBQZSPAkEXEC0aAn8gAygCUCIBQRBxBEAgAygCTCIBIAMoAjgiAkkEQCADIAI2AkwgAiEBCyADQTRqDAELIAFBCHFFBEBBACEBIABBADoACwwECyADKAIwIQEgA0EoagshAiABIAIoAgAiBGsiAUH4////B08NACABQQtPBEAgAUEHckEBaiIFECwhAiAAIAVBgICAgHhyNgIIIAAgAjYCACAAIAE2AgQgAiEADAILIAAgAToACyABDQFBACEBDAILEDgACyAAIAQgARA3GgsgACABagwBCyAAIAQgAhA3IAJqC0EAOgAAIANB7NUDKAIAIgA2AhwgAEEMaygCACADQRxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAS0EASARAIAMoAkgaIAMoAkAQKgsgBhA9GiADQdQAahA7GiADQbABaiQAC6UBAQJ/IwBBIGsiAyQAIAEgAkEAIAEoAgAoAiwRBAAhBCACIAEtAGEQSCADQQxqIAEgAiAEEJsBIAMsAB9BAEgEQCADKAIcGiADKAIUECoLIABBkKUFKQIANwIAIABBCGohAAJAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADQSBqJAALgwUBBH8jAEGgAWsiAyQAIANB5NUDNgJEIANB8NUDKAIAIgY2AgwgA0EMaiIEIAZBDGsoAgBqQfTVAygCADYCACAEIAMoAgxBDGsoAgBqIgYgA0EQaiIFED4gBkKAgICAcDcCSCADQeTVAzYCRCADQdDVAzYCDCAFED8iBkHwywM2AgAgA0IANwI4IANCADcCMCADQRA2AkAgA0GUAWoiBSABIAIQWSAEIAMoApQBIAUgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBlAFqIgQgAhA1IANBDGogAygClAEgBCADLACfASICQQBIIgQbIAMoApgBIAIgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakGhsgFBChAtIAEtAGEQQkHPkAJBARAtGgJAAn8gAygCQCIBQRBxBEAgAygCPCICIAMoAigiAUkEQCADIAE2AjwgASECCyADQSRqDAELIAFBCHFFBEBBACECIABBADoACwwCCyADKAIgIQIgA0EYagshAQJAIAIgASgCACIEayICQfj///8HSQRAIAJBC08EQCACQQdyQQFqIgUQLCEBIAAgBUGAgICAeHI2AgggACABNgIAIAAgAjYCBCAB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QSBrIgMkACABIAJBACABKAIAKAIsEQQAIQQCQCABKQMIIAE1AiBaBEAgAiABQeQAahCUASACIAQ2AgwgA0EMaiABIAIgAigCBCAEIAIoAgBqa0EAIAEoAgAoAjARBwAgAiACKAIEIAIoAgBrNgIMIAMsAB9BAEgEQCADKAIcGiADKAIUECoLIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwCCyAAQZilBSgCAEGcpQUoAgAQLgwBCyADQQA6AAAgA0EAOgALIABBAkHlACADEC8aIAMsAAtBAE4NACADKAIIGiADKAIAECoLIANBIGokAAsZAEEMQQogACgCICIALQBmG0EIIAAtAGUbC7ICAQR/IwBBEGsiAiQAIAJBADYCDCACQgA3AgQCQAJAIAEoAiAiASACQewAa0YEQCAAQQA2AgggAEIANwIADAELIAJBBGogASgCcCIDIAEoAnQiASABIANrEKkBIAIoAgghASACKAIEIQMgAEEANgIIIABCADcCACABIANHBEAgASADayIBQQBIDQIgACABECwiBDYCBCAAIAQ2AgAgACABIARqIgU2AgggBCADIAEQMhogACAFNgIECwsgAEGQpQUpAgA3AgwgAEEUaiEAAkBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4gAigCBCEDCyADBEAgAiADNgIIIAIoAgwaIAMQKgsgAkEQaiQADwsQNgALCABBseDYiwYLRQECfyAAQYT2BDYCAAJAIAAoAvgCIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLIAAQdBAqC0MBAn8gAEGE9gQ2AgACQCAAKAL4AiIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyAAEHQLpBgCC38CfiMAQYABayIBJAAgAUIANwN4IAFCADcDcCABQgA3A2ggAUIANwNgIAFBADYAXCABQgA3AFUgAUEBOgBUIAFBQGshBiACKAIAQQAQQCEHQQFBAiACKAIAKAIkIgRBA0YbQQIgB0ELSCIIGyIJQQAgBEECTxsgCSAIGyELIAIoAgBBABCmASIIIAIoAgBB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CBEAACADECsLIAAgAUHgAGoQ5AEgAiACKAIEIgBBAWs2AgQgAA0AIAIgAigCACgCCBEAACACECsLAkAgASgCPCIARQ0AIAAgACgCBCICQQFrNgIEIAINACAAIAAoAgAoAggRAAAgABArCyABKAJsIgAEQCABIAA2AnAgASgCdBogABAqCyABKAJgIgAEQCABKAJkIgMgACICRwRAA0ACQCADQQRrKAIAIgJFDQAgAiACKAIEIgRBAWs2AgQgBA0AIAIgAigCACgCCBEAACACECsLIANBCGsiAyAARw0ACyABKAJgIQILIAEgADYCZCABKAJoGiACECoLIAFBgAFqJAAPCxA4AAuiBwEJfyMAQTBrIgMkAAJAAkACQCABKAIYIgIgASgCHCIERwRAA0ACQCACKAIAIgVFDQAgBUGgvwRB1PcEEDkiBUUNACACKAIEIgQEQCAEIAQoAgRBAWo2AgQLQTQQLCICQgA3AgQgAkGg8gQ2AgAgAkEMaiEGIARFDQMgBCAEKAIEQQFqNgIEIAJBADoAGCACQgA3AhAgAkIANwIcIAJCADcCJCACIAQ2AjAgAiAFNgIsIAJB7PYENgIMIAQoAgRBf0cNBCAEIAQoAgAoAggRAAAgBBArDAQLIAJBCGoiAiAERw0ACwsgA0EAOgAQIANBADoAGyAAQQJBgwEgA0EQahAvGiADLAAbQQBODQIgAygCGBogAygCEBAqDAILIAJCADcCECACQgA3AhwgAkEANgIwIAIgBTYCLCACQQA6ABggAkIANwIkIAJB7PYENgIMCyABIAY2AvQCIAEoAvgCIQUgASACNgL4AgJAIAVFDQAgBSAFKAIEIgJBAWs2AgQgAg0AIAUgBSgCACgCCBEAACAFECsLIANBADoAGCADQgA3AiQgA0IANwMQIANCADcCHCADIAEoAhQiAigCMDYCCCADIAIoAjQiAjYCDCACBEAgAiACKAIEQQFqNgIECyABKAIkIQIgAyADKQIINwMAIANBEGogAyACENIBIAEoAvQCIQEgAygCFCEFIANBADYCFCADKAIQIQIgA0EANgIQIAMoAiQhBiADQQA2AiQgAygCICEHIANBADYCICADKAIcIQggA0EANgIcIAMtABghCSADKAIoIQogASACNgIEIAEoAgghAiABIAU2AggCQCACRQ0AIAIgAigCBCIFQQFrNgIEIAUNACACIAIoAgAoAggRAAAgAhArCyABIAk6AAwgASgCECICBEAgASACNgIUIAEoAhgaIAIQKgsgASAKNgIcIAEgBjYCGCABIAc2AhQgASAINgIQIABBkKUFKQIANwIAIABBCGohAAJAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADKAIcIgAEQCADIAA2AiAgAygCJBogABAqCwJAIAMoAhQiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQKwsgBEUNACAEIAQoAgQiAEEBazYCBCAADQAgBCAEKAIAKAIIEQAAIAQQKwsgA0EwaiQAC5cBAQJ/IABB0PUENgIAAkAgACgCJCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyAAQcjxBDYCACAAKAIQIgEEQCAAIAE2AhQgACgCGBogARAqCwJAIAAoAggiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgABAqC5UBAQJ/IABB0PUENgIAAkAgACgCJCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyAAQcjxBDYCACAAKAIQIgEEQCAAIAE2AhQgACgCGBogARAqCwJAIAAoAggiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgAAvEAwICfgN/IwBBEGsiAyQAAkACQAJAIAEpAwgiBEIAUgRAIAQgATUCICIFVA0BIAQgBX0iBEKAgICACFoEQCADQRgQLCIBNgIEIANCkoCAgICDgICAfzcCCCABQZ7XACkAADcAACABQQA6ABIgAUGu1wAvAAA7ABAgAUGm1wApAAA3AAggAEECQegHIANBBGoQLxogAywAD0EATg0EIAMoAgwaIAMoAgQQKgwECwJAIASnIgYgASgCaCABKAJkIgdrIghLBEAgAUHkAGogBiAIaxBlIAEoAmQhBwwBCyAGIAhPDQAgASAGIAdqNgJoCyACIAcgBhDqAQsgAi0AFEEBRw0BIANBADoABCADQQA6AA8gAEECQeQAIANBBGoQLxogAywAD0EATg0CIAMo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pAEgBCADLACvASIBQQBIIgQbIAMoAqgBIAEgBBsQLRogAywArwFBAEgEQCADKAKsARogAygCpAEQKgsgA0EIakGitAFBFBAtIAstAAAQQkHPkAJBARAtIQEgA0GkAWoiBCACEDUgASADKAKkASAEIAMsAK8BIgRBAEgiBRsgAygCqAEgBCAFGxAtGiADLACvAUEASARAIAMoAqwBGiADKAKkARAqCyABQYG+AUEPEC0gCy0AARBCQc+QAkEBEC0aAkAgCygCBCINIAsoAggiE0YNAANAIANBkAFqIAIQNSADLACbASEGIAMoApABIQggAygClAEhCgJAIANBnAFqIANBCGoiARBzIg4tAABBAUcNACABIAMoAghBDGsoAgBqIgcoAgQhDyAHKAIYIQQgBygCTCIFQX9GBEAgA0GkAWoiCSAHKAIcIgE2AgAgAUHszgZHBEAgASABKAIEQQFqNgIECyAJQaTQBhBDIgFBICABKAIAKAIcEQUAIQUgCRBHIAcgBTYCTAsCQCAERQ0AIAcoAgwhCSAIIANBkAFqIAZBAEgiCBsiASAKIAYgCBsiBmoiECABIA9BsAFxQSBGGyIIIAFrIgpBAEoEQCAEIAEgCiAEKAIAKAIwEQQAIApHDQELIAkgBmtBACAGIAlIGyIBQQBKBEAgAUH4////B08NBwJAIAFBC08EQCABQQdyQQFqIgkQLCEGIAMgCUGAgICAeHI2AqwBIAMgBjYCpAEgAyABNgKoAQwBCyADIAE6AK8BIANBpAFqIQYLIAYgBSABEDQgAWpBADoAACAEIAMoAqQBIANBpAFqIAMsAK8BQQBIGyABIAQoAgAoAjARBAAhBSADLACvAUEASARAIAMoAqwBGiADKAKkARAqCyABIAVHDQELIBAgCGsiAUEASgRAIAQgCCABIAQoAgAoAjARBAAgAUcNAQsgB0EANgIMDAELIAMoAghBDGsoAgAgA0EIamoiASABKAIQQQVyEHoLIA4QciADLACbAUEASARAIAMoApgBGiADKAKQARAqCyANKAIAIgQgDSgCBCIORwRAA0AgBC0AACEHIAMoAggiAUEMaygCACADQQhqaiIFKAJMQX9GBEAgA0GkAWoiBiAFKAIcIgE2AgAgAUHszgZHBEAgASABKAIEQQFqNgIECyAGQaTQBhBDIgFBICABKAIAKAIc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ADcCACAAIAEpAwA3AiAgAEEoaiEAAkAgASwAE0EATgRAIAAgASkCCDcCACAAIAEoAhA2AggMAQsgACABKAIIIAEoAgwQLiABLAATQQBODQAgASgCEBogASgCCBAqCyAELABbQQBODQEgBCgCWBogBCgCUBAqDAELIARBADYCTCAEQQA2AkggBEEgaiADKAIEIARB0ABqIARBxABqQQAgAygCACgCaBEHACAEKAJQIgYEQANAIAYtAAAiBUH+AXFBwgBGBEAgBEIANwIoIARBDGohFiAGIREgBCgCRCETIARBzABqIRQgBEHIAGohFUEAIQFBACEFQQAhBkEAIQhBACESIwBB0ABrIgokACAKQQA2AkwgCkIANwJEAkACQAJAAkACQAJAIBMEQANAAkACQCAIQQJqIgsgE08NACAIIBFqIgctAAANACAHLQABDQAgCyARai0AAEEDRw0AAkAgASAGSwRAIAZBADoAACAGQQFqIQgMAQsgBiAFayIMQQFqIgdBAEgNCCAMQf////8HIAEgBWsiAUEBdCIIIAcgByAISRsgAUH/////A08bIhAEfyAQECwFQQALIg9qIghBADoAAAJ/IAggBSAGRg0AGkEAIQ0gCCEHIAYhASAMQQNxIgwEQANAIAdBAWsiByABQQFrIgEtAAA6AAAgDUEBaiINIAxHDQALCyAPIAUgBmtBfEsNABoDQCAHQQFrIAFBAWstAAA6AAAgB0ECayABQQJrLQAAOgAAIAdBA2sgAUEDay0AADoAACAHQQRrIgcgAUEEayIBLQAAOgAAIAEgBUcNAAsgDwshFyAPIBBqIQEgCEEBaiEIIAUEQCAFECoLIBchBQsgASAISwRAIAhBADoAACAIQQFqIQYMAgsgCCAFayIMQQFqIgZBAEgNBCAMQf////8HIAEgBWsiAUEBdCIHIAYgBiAHSRsgAUH/////A08bIhAEfyAQECwFQQALIg9qIgZBADoAAAJ/IAYgBSAIRg0AGkEAIQ0gBiEHIAghASAMQQNxIgwEQANAIAdBAWsiByABQQFrIgEtAAA6AAAgDUEBaiINIAxHDQALCyAPIAUgCGtBfEsNABoDQCAHQQFrIAFBAWstAAA6AAAgB0ECayABQQJrLQAAOgAAIAdBA2sgAUEDay0AADoAACAHQQRrIgcgAUEEayIBLQAAOgAAIAEg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NwIEIAJB+PEENgIAIAJBDGohBiAERQ0DIAQgBCgCBEEBajYCBCACQQA6ABggAkIANwIQIAJCADcCHCACQgA3AiQgAiAENgIwIAIgBTYCLCACQdD1BDYCDCAEKAIEQX9HDQQgBCAEKAIAKAIIEQAAIAQQKwwECyACQQhqIgIgBEcNAAsLIANBADoAECADQQA6ABsgAEECQeoAIANBEGoQLxogAywAG0EATg0CIAMoAhgaIAMoAhAQKgwCCyACQgA3AhAgAkIANwIcIAJBADYCMCACIAU2AiwgAkEAOgAYIAJCADcCJCACQdD1BDYCDAsgASAGNgL0AiABKAL4AiEFIAEgAjYC+AICQCAFRQ0AIAUgBSgCBCICQQFrNgIEIAINACAFIAUoAgAoAggRAAAgBRArCyADQQA6ABggA0IANwIkIANCADcDECADQgA3AhwgAyABKAIUIgIoAjA2AgggAyACKAI0IgI2AgwgAgRAIAIgAigCBEEBajYCBAsgASgCJCECIAMgAykCCDcDACADQRBqIAMgAhDSASABKAL0AiEBIAMoAhQhBSADQQA2AhQgAygCECECIANBADYCECADKAIkIQYgA0EANgIkIAMoAiAhByADQQA2AiAgAygCHCEIIANBADYCHCADLQAYIQkgAygCKCEKIAEgAjYCBCABKAIIIQIgASAFNgIIAkAgAkUNACACIAIoAgQiBUEBazYCBCAFDQAgAiACKAIAKAIIEQAAIAIQKwsgASAJOgAMIAEoAhAiAgRAIAEgAjYCFCABKAIYGiACECoLIAEgCjYCHCABIAY2AhggASAHNgIUIAEgCDYCECAAQZClBSkCADcCACAAQQhqIQACQEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgAygCHCIABEAgAyAANgIgIAMoAiQaIAAQKgsCQCADKAIUIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLIARFDQAgBCAEKAIEIgBBAWs2AgQgAA0AIAQgBCgCACgCCBEAACAEECsLIANBMGokAAsPACAAQcDzBDYCACAAECoLDQAgAEHA8wQ2AgAgAAsPACAAQZjzBDYCACAAECoLDQAgAEGY8wQ2AgAgAAsPACAAQfDyBDYCACAAECoLDQAgAEHw8gQ2AgAgAAsPACAAQcjyBDYCACAAECoLDQAgAEHI8gQ2AgAgAAsPACAAQaDyBDYCACAAECoLDQAgAEGg8gQ2AgAgAAsPACAAQfjxBDYCACAAECoLDQAgAEH48QQ2AgAgAAtbAQJ/IABByPEENgIAIAAoAhAiAQRAIAAgATYCFCAAKAIYGiABECoLAkAgACgCCCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyAAC70NAgd/AX4jAEHgAGsiAyQAAkACQAJAIAEgASgCACgCCBEBACACKAIYELEEIgRFBEAgA0EAOgAYIANBADoAIyADQTBqQQtB8y4gA0EYahAvIQEgAEIANwIAIAAgASkDADcCCCAAQRBqIQACQCABLAATQQBOBEAgACABKQIINwIAIAAgASgCEDYCCAwBCyAAIAEoAgggASgCDBAuIAEsABNBAE4NACABKAIQGiABKAIIECoLIAMsACNBAE4NASADKAIgGiADKAIYECoMAQsgBCgCFCIFRQRAIANBMBAsIgE2AhggA0KrgICAgIaAgIB/NwIcIAFB0ZYBKAAANgAnIAFBypYBKQAANwAgIAFBwpYBKQAANwAYIAFBupYBKQAANwAQIAFBspYBKQAANwAIIAFBqpYBKQAANwAAIAFBADoAKyADQTBqQQtB8y4gA0EYahAvIQEgAEIANwIAIAAgASkDADcCCCAAQRBqIQACQCABLAATQQBOBEAgACABKQIINwIAIAAgASgCEDYCCAwBCyAAIAEoAgggASgCDBAuIAEsABNBAE4NACABKAIQGiABKAIIECoLIAMsACNBAE4NASADKAIgGiADKAIYECoMAQsgA0HQAGogA0HcAGogBRECACADKAJQIgUEQCADKAJUIQQgAygCWCIHEFgiAkH4////B08NAgJAAkAgAkELTwRAIAJBB3JBAWoiBhAsIQEgAyAGQYCAgIB4cjYCICADIAE2AhggAyACNgIcDAELIAMgAjoAIyADQRhqIQEgAkUNAQsgASAHIAIQNxoLIAEgAmpBADoAACADQTBqIAUgBCADQRhqEC8hASAAQgA3AgAgACABKQMANwIIIABBEGohAAJAIAEsABNBAE4EQCAAIAEpAgg3AgAgACABKAIQNgIIDAELIAAgASgCCCABKAIMEC4gASwAE0EATg0AIAEoAhAaIAEoAggQKgsgAywAI0EATg0BIAMoAiAaIAMoAhgQKgwBCyAEKAIYIQcgAygCXCEFAkAgBCgCAEECSA0AIAQoAiQiBkUNACAFIAItABUgBhECAAsgA0EwaiABEKoCAkAgAygCPARAIABCADcCACAAIAMpAjw3AgggAEEQaiEAIAMsAE9BAE4EQCAAIAMpAkQ3AgAgACADKAJMNgIIDAILIAAgAygCRCADKAJIEC4MAQsgA0EYaiADKAJcIAMoAjAiASADKAI0IAFrIAQoAhwRBgAgAyADKAIgNgJYIAMgAykCGCIKNwNQIAqnIgYEQCADKAJUIQQgAygCWCIIEFgiAkH4////B08NBAJAAkAgAkELTwRAIAJBB3JBAWoiCRAsIQEgAyAJQYCAgIB4cjYCFCADIAE2AgwgAyACNgIQDAELIAMgAjoAFyADQQxqIQEgAkUNAQsgASAIIAIQNxoLIAEgAmpBADoAACADQRhqIAYgBCADQQxqEC8hASAAQgA3AgAgACABKQMANwIIIABBEGohAAJAIAEsABNBAE4EQCAAIAEpAgg3AgAgACABKAIQNgIIDAELIAAgASgCCCABKAIMEC4gASwAE0EATg0AIAEoAhAaIAEoAggQKgsgAywAF0EATg0BIAMoAhQaIAMoAgwQKgwBCyADQQA2AgggA0EYaiIBIAMoAlwgA0EIaiAEKAIgEQMAIAMgAygCIDYCWCADIAMpAhgiCjcDUCAKpyICBEAgASACIAMoAlQgA0EMaiADKAJYEIABIgIQLyEBIABCADcCACAAIAEpAwA3AgggAEEQaiEAAkAgASwAE0EATgRAIAAgASkCCDcCACAAIAEoAhA2AggMAQsgACABKAIIIAEoAgwQLiABLAATQQBODQAgASgCEBogASgCCBAqCyACLAALQQBODQEgAigCCBogAigCABAqDAELIAMoAggiAUUEQCADQRhqQQdBACADQQxqQdCQAhCAASICEC8hASAAQgA3AgAgACABKQMANwIIIABBEGohAAJAIAEsABNBAE4EQCAAIAEpAgg3AgAgACABKAIQNgIIDAELIAAgASgCCCABKAIMEC4gASwAE0EATg0AIAEoAhAaIAEoAggQKgsgAiwAC0EATg0BIAIoAggaIAIoAgAQKgwBCyAD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LAATQQBODQEgAigCEBogAigCCBAqDAELIARBDGogAkEAELYCIAQoAhQaAkAgBCgCDCICIAQoAhBHBEAgAyEFQQgQLCEDIAIoAgAoAgAhASADQQA2AgQgAyABNgIAIAUgAzYCACAAIAMQygQMAQsgA0EANgIAIARBADoAACAEQQA6AAsgBEEMakEDQQAgBBAvIQMgBCwAC0EASARAIAQoAggaIAQoAgAQKgsgACADIAEEfyABKAIABUEACxBBIAMsABNBAEgEQCADKAIQGiADKAIIECoLIAJFDQELIAIQKgsgBEEgaiQAC2IBA38jAEEQayIBJAAQtAIgAUEEaiAAQQAQtgICQAJAIAEoAggiAyABKAIEIgBHBEAgACgCACgCACECDAELIANFDQELIAEgADYCCCABKAIMGiAAECoLIAFBEGokACACQQBHCwwAIABBABCxBEEARwutAQEBfyMAQSBrIgQkAAJAIAJBACADG0UEQCAEQQA6AAAgBEEAOgALIARBDGpBBUHRDyAEEC8hAiAELAALQQBIBEAgBCgCCBogBCgCABAqCyAAIAIgAQR/IAEoAgAFQQALEEEgAiwAE0EATg0BIAIoAhAaIAIoAggQKgwBC0EIECwhASACKAIAIQIgAUEANgIEIAEgAjYCACADIAE2AgAgACABEMoECyAEQSBqJAALCgAgACgCACgCBAsXAQF/IAAoAgBBA04EfyAAKAIoBUEACwsKACAAKAIEEQ8AC8wGAQp/IwBBMGsiAyQAIANBADYCLCADQgA3AiQCQCAARQRAIANBiL8CKQIANwMYIANBgL8CKQIANwMQIANB+L4CKQIANwMIIANBJGogA0EIaiADQSBqQQYQ1wEMAQtBBBAsIgUgADYCACADIAVBBGoiADYCLCADIAU2AiQgAyAANgIoCxC0AgJAQbilBSgCACIFQbylBUYNACADKAIkIAMoAihGDQACQANAAkACQCADKAIkIgAgAygCKCIGRg0AIAUoAhAhCQNAIAAoAgAgCSgCEBEBACILRQRAIAYgAEEEaiIARw0BDAILCyAEIAhJBEAgBCALNgIEIAQgCTYCACAEQQhqIQQMAQsgBCAHa0EDdSIGQQFqIgBBgICAgAJPDQFB/////wEgCCAHayIIQQJ1IgogACAAIApJGyAIQfj///8HTxsiCAR/IAhBgICA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BBArCyADQSBqJAAL4wIBA38jAEEgayIDJAACQCACRQRAIANBADoAACADQQA6AAsgA0EMakEFQdEPIAMQLyECIAMsAAtBAEgEQCADKAIIGiADKAIAECoLIAAgAiABKAIAIgBBCGpBACAAGxBBIAIsABNBAE4NASACKAIQGiACKAIIECoMAQsgASgCACIEKAI0IQUgBCgCOCIEBEAgBCAEKAIEQQFqNgIECwJAIAUEQCACIAUoAggiAiAFKAIMIAJrEDIaIABBkKUFIAEoAgAiAEEIakEAIAAbEEEMAQsgA0EAOgAAIANBADoACyADQQxqQQpBACADEC8hAiADLAALQQBIBEAgAygCCBogAygCABAqCyAAIAIgASgCACIAQQhqQQAgABsQQSACLAATQQBODQAgAigCEBogAigCCBAqCyAERQ0AIAQgBCgCBCIAQQFrNgIEIAANACAEIAQoAgAoAggRAAAgBBArCyADQSBqJAALagEDfyAAKAIAIgAoAjQhASAAKAI4IgAEQCAAIAAoAgRBAWo2AgQLIAEEfyABKAIMIAEoAghrBUEACyEDAkAgAEUNACAAIAAoAgQiAkEBazYCBCACDQAgACAAKAIAKAIIEQAAIAAQKwsgAwvMAQEEfyAAKAIAIgEoAjQhAiABKAI4IgEEQCABIAEoAgRBAWo2AgQLAn8CQCACBEAgASEADAELIAAoAgAiACgCLCECIAAoAjAiAARAIAAgACgCBEEBajYCBAsCQCABRQ0AIAEgASgCBCIDQQFrNgIEIAMNACABIAEoAgAoAggRAAAgARArCyACDQBBAAwBCyACIAIoAgAoAggRAQALIQQCQCAARQ0AIAAgACgCBCIBQQFrNgIEIAENACAAIAAoAgAoAggRAAAgABArCyAEC+UCAQN/IwBBIGsiAyQAAkAgAkUEQCADQQA6AAAgA0EAOgALIANBDGpBBUHRDyADEC8hAiADLAALQQBIBEAgAygCCBogAygCABAqCyAAIAIgASgCACIAQQRqQQAgABsQQSACLAATQQBODQEgAigCEBogAigCCBAqDAELIAEoAgAiBCgCyAEhBSAEKALMASIEBEAgBCAEKAIEQQFqNgIECwJAIAUEQCACIAUoAggiAiAFKAIMIAJrEDIaIABBkKUFIAEoAgAiAEEEakEAIAAbEEEMAQsgA0EAOgAAIANBADoACyADQQxqQQpBACADEC8hAiADLAALQQBIBEAgAygCCBogAygCABAqCyAAIAIgASgCACIAQQRqQQAgABsQQSACLAATQQBODQAgAigCEBogAigCCBAqCyAERQ0AIAQgBCgCBCIAQQFrNgIEIAANACAEIAQoAgAoAggRAAAgBBArCyADQSBqJAAL9QIBBH8jAEEgayIDJAACQCACRQRAIANBADoAACADQQA6AAsgA0EMakEFQdEPIAMQLyECIAMsAAtBAEgEQCADKAIIGiADKAIAECoLIAAgAiABKAIAIgBBBGpBACAAGxBBIAIsABNBAE4NASACKAIQGiACKAIIECoMAQsgASgCACIEKALAASEFIAQoAsQBIgQEQCAEIAQoAgRBAWo2AgQLAkAgBUUEQCADQQA6AAAgA0EAOgALIANBDGpBCkEAIAMQLyECIAMsAAtBAEgEQCADKAIIGiADKAIAECoLIAAgAiABKAIAIgBBBGpBACAAGxBBIAIsABNBAE4NASACKAIQGiACKAIIECoMAQsgA0EMaiIGIAUgAhCvBCAAIAYgASgCACIAQQRqQQAgABsQQSADLAAfQQBODQAgAygCHBogAygCFBAqCyAERQ0AIAQgBCgCBCIAQQFrNgIEIAANACAEIAQoAgAoAggRAAAgBBArCyADQSBqJAALEABB+KUFQfylBSgCABDKAQvRAQAjAEEgayIEJAAgBEEIaiABIAIgA0EAEJYEAkAgBCgCCARAIAAgBCkDCDcCACAAIAQoAhg2AhAgACAEKQMQNwIIIARBADYCGCAEQgA3AxAMAQsgAiABKAJkIAEtAGFBGHRyEEogAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyAELAAbQQBIBEAgBCgCGBogBCgCEBAqCyAEQSBqJAALEABB7KUFQfClBSgCABDKAQsQAEHgpQVB5KUFKAIAEMoBC2wBA38gACgCACIAKALIASEBIAAoAswBIgAEQCAAIAAoAgRBAWo2AgQLIAEEfyABKAIMIAEoAghrBUEACyEDAkAgAEUNACAAIAAoAgQiAkEBazYCBCACDQAgACAAKAIAKAIIEQAAIAAQKwsgAwvVAQEDfyAAKAIAIgEoAsgBIQIgASgCzAEiAQRAIAEgASgCBEEBajYCBAsCQCACBEAgAiACKAIAKAIIEQEAIQIMAQsgACgCACIAKALAASECIAAoAsQBIgAEQCAAIAAoAgRBAWo2AgQLIAIEfyACIAIoAgAoAggRAQAFQQALIQIgAEUNACAAIAAoAgQiA0EBazYCBCADDQAgACAAKAIAKAIIEQAAIAAQKwsCQCABRQ0AIAEgASgCBCIAQQFrNgIEIAANACABIAEoAgAoAggRAAAgARArCyACC9gCAQV/IwBBIGsiBCQAAkACQCABKAIAIgUoArQBIgYgBSgCuAEiCEYNAANAIAIgBigCACIHKAIARwRAIAggBkEIaiIGRw0BDAILCyAHKAIoIgIgBygCLCIGRwRAIANFBEAgBEEAOgAAIARBADoACyAEQQxqQQVB0Q8gBBAvIQIgBCwAC0EASARAIAQoAggaIAQoAgAQKgsgACACIAEoAgAiAEEEakEAIAAbEEEgAiwAE0EATg0DIAIoAhAaIAIoAggQKgwDCyADIAIgBiACaxAyGiABKAIAIQULIABBkKUFIAVBBGpBACAFGxBBDAELIARBADoAACAEQQA6AAsgBEEMakEFQdAPIAQQLyECIAQsAAtBAEgEQCAEKAIIGiAEKAIAECoLIAAgAiABKAIAIgBBBGpBACAAGxBBIAIsABNBAE4NACACKAIQGiACKAIIECoLIARBIGokAAtPAQN/AkAgACgCACICKAK0ASIAIAIoArgBIgRGDQADQCABIAAoAgAiAigCAEcEQCAEIABBCGoiAEcNAQwCCwsgAigCLCACKAIoayEDCyADC1cBA38CQCAAKAIAIgIoArQBIgAgAigCuAEiBEYNAANAIAEgACgCACICKAIARwRAIAQgAEEIaiIARw0BDAILCyACKAIcIAJBHGogAiwAJ0EASBshAwsgAwtXAQN/AkAgACgCACICKAK0ASIAIAIoArgBIgRGDQADQCABIAAoAgAiAigCAEcEQCAEIABBCGoiAEcNAQwCCwsgAigCECACQRBqIAIsABtBAEgbIQMLIAMLVwEDfwJAIAAoAgAiAigCtAEiACACKAK4ASIERg0AA0AgASAAKAIAIgIoAgBHBEAgBCAAQQhqIgBHDQEMAgsLIAIoAgQgAkEEaiACLAAPQQBIGyEDCyADCzQBAn8gASgCDCEEIAFBGEEIIAAoAhBB5NLVqwdGGyIAQQhqIAAgAhsQvwIgAUEEEL8CIAQL0AEBBX8CQCAAKAIAIgUoArQBIgAgBSgCuAEiB0YNACABBEADQAJAIAAoAgAiBSgCCCAFLAAPIgYgBkEASCIGGyIIIAEQWEcNACAFKAIEIAVBBGogBhsgASAIEF8NACADIARMDQMgAiAEQQJ0aiAFKAIANgIAIARBAWohBAsgAEEIaiIAIAdHDQAMAgsACyADQQAgA0EAShshAQNAIAEgBEYEQCABDwsgAiAEQQJ0aiAAKAIAKAIANgIAIARBAWohBCAAQQhqIgAgB0cNAAsLIAQLjgEBBX8gACgCACICKAK0ASIAIAIoArgBIgVGBEBBAA8LAkAgAUUEQCAFIABrQQhrQQN2QQFqIQIMAQsgARBYIQZBACECA0AgBiAAKAIAIgMoAgggAywADyIEIARBAEgiBBtGBEAgAiADKAIEIANBBGogBBsgASAGEF9FaiECCyAAQQhqIgAgBUcNAAsLIAIL1wMBA38jAEEQayIFJAACQAJAIAIQWEEERwRAIABB/OwEKQIANwIAIABBhO0EKAIANgIIDAELIAIoAAAhBiAFQQA2AgwgBUIANwIEIAVBBGpBACADIAMgBGogBBDFAUEgECwiAkEANgIcIAJCADcCFCACIAZBGHQgBkGA/gNxQQh0ciAGQQh2QYD+A3EgBkEYdnJyNgIQIAJBpOYENgIMIAJBvOcENgIAIAJCADcCBCAFKAIIIgMgBSgCBCIERwRAIAMgBGsiA0EASA0CIAIgAxAsIgY2AhQgAiADIAZqIgc2AhwgBiAEIAMQMhogAiAHNgIYCyABKAIAIQMgAiACKAIEQQJqNgIEIAMgAkEMajYCNCADKAI4IQEgAyACNgI4AkAgAUUNACABIAEoAgQiA0EBazYCBCADDQAgASABKAIAKAIIEQAAIAEQKwsgAiACKAIEIgFBAWs2AgQgAUUEQCACIAIoAgAoAggRAAAgAhArCyAAQeTsBCkCADcCACAAQezsBCgCADYCCCACIAIoAgQiAEEBazYCBCAARQRAIAIgAigCACgCCBEAACACECsLIAUoAgQiAEUNACAFIAA2AgggBSgCDBogABAqCyAFQRBqJAAPCxA2AAuTCgEQfyMAQSBrIgskACALQQxqIQggASgCACEKIAIhDyADIRAjAEEwayIEJAACQCAKKAI8IgMgCkFAayINRwRAIAhBCGohDgNAIA8gECADKAIQIAooAiQgBEEsaiAEQShqEIkDAkAgAygCECIGQQpGBEBB/wEhByAKKAIkQQprIgJBBk8NAUKYwMCBhIYQIAJBA3StiKchBwwBC0EAIQcgDSIFKAIAIgJFDQADQCAFIAIgAigCECAGSCIJGyEFIAIgCUECdGooAgAiAg0ACyAFIA1GDQAgBSgCECAGSg0AIAUtABhBB2ohBwsgAygCICEFIAMoAhwhDCAHQQN2QR9xIQkgBCgCKCECAkACQAJAAkACQCAEKAIsIgcgAygCJE0EQCADKAIoIAJPDQELIARBgAI7AQggBEEBNgIEIARBADYCJCAEQgA3AhwgBEIANwIUIARCADcCDCAIIARBBGogByACIAMoAhQgAy0AGAJ/QQEhAgJAAkACQAJAIAooAiQOZAMDAwMCAgICAgIAAQABAAECAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCC0EDDAMLQQQMAgtBACECCyACC0EAELkCIAgoAgANByAILAATQQBIBEAgCCgCEBogCCgCCBAqCyAEKAIcIgZFDQEgAygCIARAQQAhAiAEKAIkIQcDQCAGIAIgB2xqIAMoAiwgAygCNCACbGogAygCHCAJbBAyGiACQQFqIgIgAygCIEkNAAsLIAMgBCkCBDcCFCADIAQoAiQ2AjQgAyAEKQIcNwIsIAMgBCkCFDcCJCADIAQpAgw3AhwgAygCECEGIAQoAiwhBwtBgH9BACAGQQFrQQJJG0EAIAlBAUYbIQICQCAHIAxGDQAgBUUNACAJIAxsIQdBACEGIAVBAUcEQCAFQX5xIRJBACERA0AgAygCLCADKAI0IAZsaiAHaiACIAQoAiwgDGsgCWwQNBogAygCLCADKAI0IAZBAXJsaiAHaiACIAQoAiwgDGsgCWwQNBogBkECaiEGIBFBAmoiESASRw0ACwsgBUEBcUUNACADKAIsIAMoAjQgBmxqIAdqIAIgBCgCLCAMayAJbBA0GgsgBSAEKAIoIgZJDQEMAwsgCEGkpQUpAgA3AgBBt6UFLAAAQQBIDQEgDkGspQUpAgA3AgAgDkG0pQUoAgA2AggMBQsDQCADKAIsIAMoAjQgBWxqIAIgBCgCLCAJbBA0GiAFQQFqIgUgBCgCKCIGSQ0ACwwBCyAOQaylBSgCAEGwpQUoAgAQLgwDCyAEKAIsIQIgAyAGNgIgIAMgAjYCHAJAIAMoAgQiBQRAA0AgBSICKAIAIgUNAAwCCwALA0AgAygCCCICKAIAIANHIRMgAiEDIBMNAAsLIAIiAyANRw0ACwsgCiAQNgIcIAogDzYCGCAIQZClBSkCADcCACAIQQhqIQJBo6UFLAAAQQBOBEAgAkGYpQUpAgA3AgAgAkGgpQUoAgA2AggMAQsgAkGYpQUoAgBBnKUFKAIAEC4LIARBMGokAAJAIAsoAgwEQCAAIAggASgCACIAQQhqQQAgABsQQQwBCyAAQZzxBCkCADcCACAAQaTxBCgCADYCCAsgCywAH0EASARAIAsoAhwaIAsoAhQQKgsgC0EgaiQAC8IBAgF/AX4jAEEgayIFJAAgBUIANwIYIAVBBGoiBiABKAIAIAVBGGogAyAEQQAQjAMgACAFKAIEBH8gBgUgAkEIECwiADYCACAFKQIYIQcgBUIANwIYIAAgBzcCAEGQpQULIAEoAgAiAEEIakEAIAAbEEEgBSwAF0EASARAIAUoAhQaIAUoAgwQKgsCQCAFKAIcIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLIAVBIGokAAuUCQEPfyMAQSBrIgokACAKQQxqIQggASgCACELIAIhDyADIRAjAEEwayIEJAACQAJAIAsoAjwiAyALQUBrIg1HBEAgCEEIaiEOA0AgDyAQIAMoAhAgCygCJCAEQSxqIARBKGoQiQMCQCADKAIQIglBCkYEQEH/ASEGIAsoAiRBCmsiAkEGTw0BQpjAwIGEhhAgAkEDdK2IpyEGDAELQQAhBiANIgUoAgAiAkUNAANAIAUgAiACKAIQIAlIIgcbIQUgAiAHQQJ0aigCACICDQALIAUgDUYNACAFKAIQIAlKDQAgBS0AGEEHaiEGCyADKAIgIQkgAygCHCEFIAZB+AFxQQN2IQwgBCgCKCECAkAgBCgCLCIHIAMoAiRNBEAgAygCKCACTw0BCyAEQYACOwEIIARBATYCBCAEQQA2AiQgBEIANwIcIARCADcCFCAEQgA3AgwgCCAEQQRqIAcgAiADKAIUIAMtABgCf0EBIQICQAJAAkACQCALKAIkDmQDAwMDAgICAgICAAEAAQABAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgtBAwwDC0EEDAILQQAhAgsgAgtBABC5AiAIKAIADQQgCCwAE0EASARAIAgoAhAaIAgoAggQKgsgBCgCHCIGRQ0DIAMoAiAEQEEAIQIgBCgCJCEHA0AgBiACIAdsaiADKAIsIAMoAjQgAmxqIAMoAhwgDGwQMhogAkEBaiICIAMoAiBJDQALCyADIAQpAgQ3AhQgAyAEKAIkNgI0IAMgBCkCHDcCLCADIAQpAhQ3AiQgAyAEKQIMNwIcIAQoAiwhBwsCQCAFIAdGDQAgCUUNACAFIAdPDQAgBUEBayAMbCERQQAhBgNAIAUiAiAHSQRAA0AgAygCLCADKAI0IAZsaiIHIAIgDGxqIAcgEWogDBAyGiACQQFqIgIgBCgCLCIHSQ0ACwsgBkEBaiIGIAlHDQALCyAEKAIoIAlLBEAgCUEBayECA0AgAygCLCIFIAMoAjQiBiAJbGogBSACIAZsaiAEKAIsIAxsEDIaIAlBAWoiCSAEKAIoSQ0ACwsCQCADKAIEIgUEQANAIAUiAigCACIFDQAMAgsACwNAIAMoAggiAigCACADRyESIAIhAyASDQALCyACIgMgDUcNAAsLIAhBkKUFKQIANwIAIAhBCGohAkGjpQUsAABBAE4EQCACQZilBSkCADcCACACQaClBSgCADYCCAwCCyACQZilBSgCAEGcpQUoAgAQLgwBCyAIQaSlBSkCADcCAEG3pQUsAABBAE4EQCAOQaylBSkCADcCACAOQbSlBSgCADYCCAwBCyAOQaylBSgCAEGwpQUoAgAQLgsgBEEwaiQAAkAgCigCDARAIAAgCCABKAIAIgBBCGpBACAAGxBBDAELIABB5OwEKQIANwIAIABB7OwEKAIANgIICyAKLAAfQQBIBEAgCigCHBogCigCFBAqCyAKQSBqJAALEwAgAEUEQEEADwsgACgCAC0AKAsUACAABEAgACgCACABQQBHOgAoCwstAQJ/IAEoAgwhBCABQRhB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EEggASACIAA0AgQQaCABIAIgADQCCBBoCyEAIAAoAgRBgIACa0GAgHxJIAAoAghBgIACa0GAgHxJcgvfAwEFfyMAQRBrIgckAAJAIAIoAgQgBCgCACIGIAIoAgBqIgVrIANBCG1BAXRJBEAgB0EwECwiATYCBCAHQqyAgICAhoCAgH83AgggAUG4NykAADcAACABQQA6ACwgAUHgNygAADYAKCABQdg3KQAANwAgIAFB0DcpAAA3ABggAUHINykAADcAECABQcA3KQAANwAIIABBAkGIASAHQQRqEC8aIAcsAA9BAE4NASAHKAIMGiAHKAIEECoMAQsgBS0AACEIIAUtAAEhCQJ/IANBIEYEQCAGQQRqIQYgBS0AAyAJQRB0IAhBGHRyIAUtAAJBCHRycgwBCyAGQQJqIQYgCUEQdCAIQRh0ckEQdQshBSAEIAY2AgAgASAFNgIEIAQoAgAiBSACKAIAaiICLQAAIQYgAi0AASEIAn8gA0EgRgRAIAVBBGohAyACLQADIAhBEHQgBkEYdHIgAi0AAkEIdHJyDAELIAVBAmohAyAIQRB0IAZBGHRyQRB1CyECIAQgAzYCACABIAI2AgggAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyAHQRBqJAALLQECfyAAKAIAIgEEQANAIAEQKiAAIAJBAWoiAkECdGooAgAiAQ0ACwsgABAqC1ABAX8gACgCGCEBIABBADYCGCAAQfi7BDYCACABBEAgASABKAIAKAIEEQAACyAAQai9BDYCACAALAAXQQBIBEAgACgCFBogACgCDBAqCyAACxEBAX9BBBAsIgBBADYCACAACyYAIAMEQCADQQA2AgALIABB4OgEKQIANwIAIABB6OgEKAIANgIICxoAIABB4OgEKQIANwIAIABB6OgEKAIANgIICxoAIABB4OgEKQIANwIAIABB6OgEKAIANgIIC6ADAQR/AkACQAJAQdClBSgCACIADgICAAELQbilBSgCACIAQbylBUcEQANAIAAoAhAoAgwiAQRAIAERDgALAkAgACgCBCIBBEADQCABIgAoAgAiAQ0ADAILAAsDQCAAIAAoAggiACgCAEcNAAsLIABBvKUFRw0ACwtB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BCADKAIMQQxrKAIAaiIGIANBEGoiBRA+IAZCgICAgHA3AkggA0Hk1QM2AkQgA0HQ1QM2AgwgBRA/IgZB8MsDNgIAIANCADcCOCADQgA3AjAgA0EQNgJAIANBlAFqIgUgASACEFkgBCADKAKUASAFIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCwJAIAEoAmQEQCADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpBkb4BQQ0QLSEIIANBlAFqIgUgASgCZCIHIAcoAgAoAggRAQAQpAEgCCADKAKUASAFIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtQc+QAkEBEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBlAFqIgQgASgCZCIBIAIgASgCACgCDBEDACADQQxqIAMoApQBIAQgAywAnwEiAUEASCICGyADKAKYASABIAIbEC0aIAMsAJ8BQQBODQEgAygCnAEaIAMoApQBECoMAQsgA0GUAWoiASACEDUgA0EMaiADKAKUASABIAMsAJ8BIgFBAEgiAhsgAygCmAEgASACGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqIgFB0o4CQREQLRogAUGIyQFBERAtGgsCQAJ/IAMoAkAiAUEQcQRAIAMoAjwiASADKAIoIgJJBEAgAyACNgI8IAIhAQsgA0EkagwBCyABQQhxRQRAQQAhASAAQQA6AAsMAgsgAygCICEBIANBGGoLIQICQCABIAIoAgAiBGsiAUH4////B0kEQCABQQtPBEAgAUEHckEBaiIFECwhAiAAIAVBgICAgHhyNgIIIAAgAjYCACAAIAE2AgQgAiEADAILIAAgAToACyABDQFBACEBDAILEDgACyAAIAQgARA3GgsgACABakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBhA9GiADQcQAahA7GiADQaABaiQAC9MLAgZ/An4jAEEQayIEJAACQAJAAkACQAJAAkACQCACEEkiCUHDhqWSB0YNACAJQebeyYMHRg0AIAlB+NiN8wZHDQFBGBAsIgVBAToAFiAFQQY7ARQgBUGBgDQ2AhAgBUIBNwIEIAVBzOYENgIMIAVB1OMENgIAIAEgBUEMaiIDNgJkIAEoAmghBiABIAU2AmgCQCAGRQ0AIAYgBigCBCIBQQFrNgIEIAENACAGIAYoAgAoAggRAAAgBhArCyMAQRBrIgYkACACKAIAIgEgASgCACgCCBESACEKAkAgAigCACIBIApCB3wgASgCACgCDBEQAARAIAZBADoABCAGQQA6AA8gAEECQeQAIAZBBGoQLxogBiwAD0EATg0BIAYoAgwaIAYoAgQQKgwBCyADIAIQTjsBBCADIAIQTjsBBiADIAIQTjsBCCADIAIQUkEHdjoACiAAQZClBSkCADcCACAAQQhqIQFBo6UFLAAAQQBOBEAgAUGYpQUpAgA3AgAgAUGgpQUoAgA2AggMAQsgAUGYpQUoAgBBnKUFKAIAEC4LIAZBEGokACAAKAIADQIgACwAE0EASARAIAAoAhAaIAAoAggQKgsgBSAFKAIEIgFBAWs2AgQgAQ0FIAUgBSgCACgCCBEAACAFECsMBQsgASkDCCIKUARAIARBOBAsIgE2AgQgBEK0gICAgIeAgIB/NwIIIAFBl+cAKQAANwAAIAFBADoANCABQcfnACgAADYAMCABQb/nACkAADcAKCABQbfnACkAADcAICABQa/nACkAADcAGCABQafnACkAADcAECABQZ/nACkAADcACCAAQQRBACAEQQRqEC8aIAQsAA9BAE4NBiAEKAIMGiAEKAIEECoMBgsgCiABNQIgfUIEfSELAkAgAzUCICIKUA0AIAogC1oNACAEQTAQLCIBNgIEIARCrICAgICGgICAfzcCCCABQanLACkAADcAACABQQA6ACwgAUHRywAoAAA2ACggAUHJywApAAA3ACAgAUHBywApAAA3ABggAUG5ywApAAA3ABAgAUGxywApAAA3AAggAEECQegHIARBBGoQLxogBCwAD0EATg0GIAQoAgwaIAQoAgQQKgwGCyACKAIAIgMgAygCACgCCBESACEKIAIoAgAiAyAKIAunIgetfCADKAIAKAIMERAABEAgBEEAOgAEIARBADoADyAAQQJB5AAgBEEEahAvGiAELAAPQQBODQYgBCgCDBogBCgCBBAqDAYLIARBADYCDCAEQgA3AgQgBwRAIAdBAEgNAyAEIAcQLCIINgIEIAQgByAIaiIFNgIMQQAhAyAIQQAgBxA0IQYgBCAFNgIIA0AgAyAGaiACEFI6AAAgA0EBaiIDIAdHDQALC0EgECwiB0EANgIcIAdCADcCFCAHIAk2AhAgB0IANwIEIAdBpOYENgIMIAdBvOcENgIAIAUgCEcEQCAFIAhrIgVBAEgNBCAHIAUQLCIGNgIUIAcgBSAGaiIDNgIcIAYgCCAFEDIaIAcgAzYCGAsgASAHQQxqNgJkIAEoAmghAyABIAc2AmgCQCADRQ0AIAMgAygCBCIBQQFrNgIEIAENACADIAMoAgAoAggRAAAgAxArCyAEKAIEIgFFDQQgBCgCDBogARAqDAQLIARBADoABCAEQQA6AA8gAEECQf4AIARBBGoQLxogBCwAD0EATg0EIAQoAgwaIAQoAgQQKgwECyAFIAUoAgQiAEEBazYCBCAADQMgBSAFKAIAKAIIEQAAIAUQKwwDCxA2AAsQNgALIAItABRBAUYEQCAEQQA6AAQgBEEAOgAPIABBAkHkACAEQQRqEC8aIAQsAA9BAE4NASAEKAIMGiAEKAIEECoMAQsgAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyAEQRBqJAALEABBxKUFQcilBSgCABC3AgsQAEG4pQVBvKUFKAIAELgCC4oRAgd/AX4jAEHgAWsiAyQAQn8hCiAAKAIYIgQoAgBBAk4EQCADQcgBaiABIAIgACgCHCAEKAIUERwAIANBADYCwAEgA0IANwO4AQJAAkACQAJAAkACQAJAAkACQAJAIAMoAtwBIgdFDQAgBxBYIgVB+P///wdPDQECQAJAIAVBC08EQCAFQQdyQQFqIgYQLCEEIAMgBkGAgICAeHI2AjAgAyAENgIoIAMgBTYCLAwBCyADIAU6ADMgA0EoaiEEIAVFDQELIAQgByAFEDcaCyAEIAVqQQA6AAAgAywAwwFBAEgEQCADKALAARogAygCuAEQKgsgAyADKAIwNgLAASADIAMpAig3A7gBIAAoAhgoAiAiBEUNACADKALcASAEEQAACwJAAkACQCADKALIAQ4ECwoAAQILIANBGBAsIgQ2AhAgA0KVgICAgIOAgIB/NwIUIARB48oAKQAANwANIARB3soAKQAANwAIIARB1soAKQAANwAAIARBADoAFSAAIANBKGpBAkHkACADQRBqEC8iBCkDADcCBCAALAAXQQBIBEAgACgCFBogACgCDBAqCyAAIAQpAgg3AgwgACAEKAIQNgIUIARBADoAEyAEQQA6AAggAywAG0EASARAIAMoAhgaIAMoAhAQKgsgAykD0AEhAgwKCyADKALcAQRAIANBoNMDNgIwIANBtNMDNgJoIANBxNMDKAIAIgQ2AiggBEEMaygCACADQShqakHI0wMoAgA2AgAgAygCKCEJIANBADYCLCAJQQxrKAIAIANBKGpqIgQgA0E0aiIFED4gBEKAgICAcDcCSCADQczTAygCACIENgIwIANBMGoiBiAEQQxrKAIAakHQ0wMoAgA2AgAgA0HA0wMoAgAiBDYCKCAEQQxrKAIAIANBKGpqQdTTAygCADYCACADQbTTAzYCaCADQYzTAzYCKCADQaDTAzYCMCAFED8iB0HwywM2AgAgA0IANwJcIANCADcCVCADQRg2AmQgBkHEowFBDRAtIAMoAtgBEEJBssQBQQQQLSADKAK4ASADQbgBaiADLADDASIEQQBIIgUbIAMoArwBIAQgBRsQLRoCfyADKAJkIgRBEHEEQCADQcgAaiEEIAMoAmAiBiADKAJMIgVJBH8gAyAFNgJgIAUFIAYLDAELIARBCHFFBEBBACEFIANBADoADyADQQRqIQQMCgsgA0E8aiEEIAMoAkQLIAQoAgAiBmsiBUH4////B08NAyAFQQtPBEAgBUEHckEBaiIIECwhBCADIAhBgICAgHhyNgIMIAMgBDYCBCADIAU2AggMCAsgAyAFOgAPIANBBGohBCAFDQdBACEFDAgLIANBoNMDNgIwIANBtNMDNgJoIANBxNMDKAIAIgQ2AiggA0EoaiIFIARBDGsoAgBqQcjTAygCADYCACADQQA2AiwgBSADKAIoQQxrKAIAaiIEIANBNGoiBxA+IARCgICAgHA3AkggA0HM0wMoAgAiBDYCMCADQTBqIgYgBEEMaygCAGpB0NMDKAIANgIAIANBwNMDKAIAIgQ2AiggBSAEQQxrKAIAakHU0wMoAgA2AgAgA0G00wM2AmggA0GM0wM2AiggA0Gg0wM2AjAgBxA/IgdB8MsDNgIAIANCADcCXCADQgA3AlQgA0EYNgJkIAZBxKMBQQ0QLSADKALYARBCQcSiAUEBEC0aAn8gAygCZCIEQRBxBEAgA0HIAGohBCADKAJgIgYgAygCTCIFSQR/IAMgBTYCYCAFBSAGCwwBCyAEQQhxRQRAQQAhBSADQQA6AA8gA0EEaiEEDAcLIANBPGohBCADKAJECyAEKAIAIgZrIgVB+P///wdPDQMgBUELTwRAIAVBB3JBAWoiCBAsIQQgAyAIQYCAgIB4cjYCDCADIAQ2AgQgAyAFNgIIDAULIAMgBToADyADQQRqIQQgBQ0EQQAhBQwFCyADQSgQLCIENgIQIANCoYCAgICFgICAfzcCFCAEQdTNAC0AADoAICAEQczNACkAADcAGCAEQcTNACkAADcAECAEQbzNACkAADcACCAEQbTNACkAADcAACAEQQA6ACEgACADQShqQQJBACADQRBqEC8iBCkDADcCBCAALAAXQQBIBEAgACgCFBogACgCDBAqCyAAIAQpAgg3AgwgACAEKAIQNgIUIARBADoAEyAEQQA6AAggAywAG0EATg0HIAMoAhgaIAMoAhAQKgwHCxA4AAsQOAALEDgACyAEIAYgBRA3GgsgBCAFakEAOgAAIAAgA0EQakECQQAgA0EEahAvIgQpAwA3AgQgACwAF0EASARAIAAoAhQaIAAoAgwQKgsgACAEKQIINwIMIAAgBCgCEDYCFCAEQQA6ABMgBEEAOgAIIAMsAA9BAEgEQCADKAIMGiADKAIEECoLIANBvNMDKAIAIgA2AiggAEEMaygCACADQShqakHc0wMoAgA2AgAgA0Hg0wMoAgA2AjAgB0HwywM2AgAgAywAX0EASARAIAMoAlwaIAMoAlQQKgsgBxA9GiADQegAahA7GgwCCyAEIAYgBRA3GgsgBCAFakEAOgAAIAAgA0EQakECQQAgA0EEahAvIgQpAwA3AgQgACwAF0EASARAIAAoAhQaIAAoAgwQKgsgACAEKQIINwIMIAAgBCgCEDYCFCAEQQA6ABMgBEEAOgAIIAMsAA9BAEgEQCADKAIMGiADKAIEECoLIANBvNMDKAIAIgA2AiggAEEMaygCACADQShqakHc0wMoAgA2AgAgA0Hg0wMoAgA2AjAgB0HwywM2AgAgAywAX0EASARAIAMoAlwaIAMoAlQQKgsgBxA9GiADQegAahA7GgtCACECCyADLADDAUEASARAIAMoAsABGiADKAK4ARAqCyACIQoLIANB4AFqJAAgCgsPACAAQfzlBDYCACAAECoLDQAgAEH85QQ2AgAgAAsPACAAQdTlBDYCACAAECoLDQAgAEHU5QQ2AgAgAAu+AgEEfwJAIAAoAlQiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAJMIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCOCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAjAiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgACgCICIBBEAgASECIAEgACgCJCIDRwRAA0ACQCADQQRrKAIAIgJFDQAgAiACKAIEIgRBAWs2AgQgBA0AIAIgAigCACgCCBEAACACECsLIANBCGsiAyABRw0ACyAAKAIgIQILIAAgATYCJCAAKAIoGiACECoLCxUAIAEgACgCHCAAKAIYKAIMESEARQsPACAAQazlBDYCACAAECoLDQAgAEGs5QQ2AgAgAAsXACABIAIgACgCHCAAKAIYKAIIEQQARQsSACAAKAIcIAAoAhgoAgQREgALJwAgAEGovQQ2AgAgACwAF0EASARAIAAoAhQaIAAoAgwQKgsgABAqCyIBAX4gASAAKQMgIgJYBEAgACgCGCABQQAQxAMLIAEgAlgLZwEBfyAAKAI0IgEEQCAAIAE2AjggACgCPBogARAqCyAALAAzQQBIBEAgACgCMBogACgCKBAqCyAALAAnQQBIBEAgACgCJBogACgCHBAqCyAALAAbQQBIBEAgACgCGBogACgCEBAqCwsPACAAQfzkBDYCACAAECoLDQAgAEH85AQ2AgAgAAt4AQR/IAAoAhgiAgRAIAAoAhwiAyACIgFHBEADQAJAIANBBGsoAgAiAUUNACABIAEoAgQiBEEBazYCBCAEDQAgASABKAIAKAIIEQAAIAEQKwsgA0EIayIDIAJHDQALIAAoAhghAQsgACACNgIcIAAoAiAaIAEQKgsLDwAgAEGk5AQ2AgAgABAqCw0AIABBpOQENgIAIAALuAYBBH8gAEGIAWogACgCjAEQvAICQCAAKAKEASIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAnwiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAJ0IgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCbCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAmQiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAJcIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCVCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAkwiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAJEIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLAkAgACgCPCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCwJAIAAoAjQiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAIsIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECsLIAAoAhwiAQRAIAEhAiABIAAoAiAiA0cEQANAAkAgA0EEaygCACICRQ0AIAIgAigCBCIEQQFrNgIEIAQNACACIAIoAgAoAggRAAAgAhArCyADQQhrIgMgAUcNAAsgACgCHCECCyAAIAE2AiAgACgCJBogAhAqCwJAIAAoAhgiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKAIQIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLCw8AIABB/OMENgIAIAAQKgsNACAAQfzjBDYCACAACyUAIABBqL0ENgIA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AiADRw0ACyAAKAJoIQELIAAgAzYCbCAAKAJwGiABECoLIAAQVgt6ACAAQYDEBDYCACAALACjAUEASARAIAAoAqABGiAAKAKYARAqCyAALACXAUEASARAIAAoApQBGiAAKAKMARAqCyAALACLAUEASARAIAAoAogBGiAAKAKAARAqCyAALAB/QQBIBEAgACgCfBogACgCdBAqCyAAEFYQKgt4ACAAQYDEBDYCACAALACjAUEASARAIAAoAqABGiAAKAKYARAqCyAALACXAUEASARAIAAoApQBGiAAKAKMARAqCyAALACLAUEASARAIAAoAogBGiAAKAKAARAqCyAALAB/QQBIBEAgACgCfBogACgCdBAqCyAAEFYLKwAgAEHwwgQ2AgAgACwAhwFBAEgEQCAAKAKEARogACgCfBAqCyAAEFYQKgspACAAQfDCBDYCACAALACHAUEASARAIAAoAoQBGiAAKAJ8ECoLIAAQVgsuAQF/IABBmMEENgIAIAAoAmwiAQRAIAAgATYCcCAAKAJ0GiABECoLIAAQVhAqCywBAX8gAEGYwQQ2AgAgACgCbCIBBEAgACABNgJwIAAoAnQaIAEQKgsgABBWC00AIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCA8LIABBmKUFKAIAQZylBSgCABAuC4oBACMAQRBrIgEkACABQSAQLCICNgIEIAFCnYCAgICEgICAfzcCCCACQfOQASkAADcAACACQQA6AB0gAkGIkQEpAAA3ABUgAkGDkQEpAAA3ABAgAkH7kAEpAAA3AAggAEEFQQAgAUEEahAvGiABLAAPQQBIBEAgASgCDBogASgCBBAqCyABQRBqJAALKQAgAEHQwAQ2AgAgACwAe0EASARAIAAoAngaIAAoAnAQKgsgABBWECoLJwAgAEHQwAQ2AgAgACwAe0EASARAIAAoAngaIAAoAnAQKgsgABBWCy4BAX8gAEGIwAQ2AgAgACgCZCIBBEAgACABNgJoIAAoAmwaIAEQKgsgABBWECoLLAEBfyAAQYjABDYCACAAKAJkIgEEQCAAIAE2AmggACgCbBogARAqCyAAEFYLCQAgAEEAOgBhCywBAX8gAEHUvQQ2AgAgACgCFCIBBEAgACABNgIYIAAoAhwaIAEQ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aiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGoiBEHaugFBDhAtIAErA2gQngFBz5ACQQEQLRogA0GUAWoiASACEDUgBCADKAKUASABIAMsAJ8BIgFBAEgiAhsgAygCmAEgASACGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqQevEAUEIEC0aCwJAAn8gAygCQCIBQRBxBEAgAygCPCIBIAMoAigiAkkEQCADIAI2AjwgAiEBCyADQSRqDAELIAFBCHFFBEBBACEBIABBADoACwwCCyADKAIgIQEgA0EYagshAgJAIAEgAigCACIEayIBQfj///8HSQRAIAFBC08EQCABQQdyQQFqIgUQLCECIAAgBUGAgICAeHI2AgggACACNgIAIAAgATYCBCACIQAMAgsgACABOgALIAENAUEAIQEMAgsQOAALIAAgBCABEDcaCyAAIAFqQQA6AAAgA0Hs1QMoAgAiADYCDCAAQQxrKAIAIANBDGpqQfjVAygCADYCACAGQfDLAzYCACADLAA7QQBIBEAgAygCOBogAygCMBAqCyAGED0aIANBxABqEDsaIANBoAFqJAAL9QEBAn8jAEEgayIDJAAgASACQQAgASgCACgCLBEEACEEIAIgAUHoAGoQoAEgAiABQfQAahCgASACIAFBgAFqEKABIAIgAUGMAWoQoAEgAiAENgIMIANBDGogASACIAIoAgQgBCACKAIAamtBACABKAIAKAIwEQcAIAIgAigCBCACKAIAazYCDCADLAAfQQBIBEAgAygCHBogAygCFBAqCyAAQZClBSkCADcCACAAQQhqIQACQEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EgaiQAC7wIAQZ/IwBBoAFrIgMkACADQeTVAzYCRCADQfDVAygCACIHNgIMIANBDGoiBCAHQQxrKAIAakH01QMoAgA2AgAgBCADKAIMQQxrKAIAaiIHIANBEGoiBhA+IAdCgICAgHA3AkggA0Hk1QM2AkQgA0HQ1QM2AgwgBhA/IgdB8MsDNgIAIANCADcCOCADQgA3AjAgA0EQNgJAIANBlAFqIgYgASACEFkgBCADKAKUASAGIAMsAJ8BIgRBAEgiBhsgAygCmAEgBCAGGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiBEEASCIGGyADKAKYASAEIAYbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGoiBEG2uwFBBhAtIAEoAmggAUHoAGoiBiABLABzIgVBAEgiCBsgASgCbCAFIAgbEC1Bz5ACQQEQLRogA0GUAWoiBSACEDUgBCADKAKUASAFIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqIgRBp78BQQYQLSABKAJ0IAFB9ABqIAEsAH8iBUEASCIIGyABKAJ4IAUgCBsQLUHPkAJBARAtGiADQZQBaiIFIAIQNSAEIAMoApQBIAUgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGoiBEHztwFBDRAtIAEoAoABIAFBgAFqIAEsAIsBIgVBAEgiCBsgASgChAEgBSAIGxAtQc+QAkEBEC0aIANBlAFqIgUgAhA1IAQgAygClAEgBSADLACfASICQQBIIgQbIAMoApgBIAIgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakGXtQFBBhAtIAEoAmggBiABLABzIgJBAEgiBBsgASgCbCACIAQbEC1Bz5ACQQEQLRoCQAJ/IAMoAkAiAUEQcQRAIAMoAjwiASADKAIoIgJJBEAgAyACNgI8IAIhAQsgA0EkagwBCyABQQhxRQRAQQAhASAAQQA6AAsMAgsgAygCICEBIANBGGoLIQICQCABIAIoAgAiBGsiAUH4////B0kEQCABQQtPBEAgAUEHckEBaiIGECwhAiAAIAZBgICAgHhyNgIIIAAgAjYCACAAIAE2AgQgAiEADAILIAAgAToACyABDQFBACEBDAILEDgACyAAIAQgARA3GgsgACABakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgB0HwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBxA9GiADQcQAahA7GiADQaABaiQAC7gDACMAQSBrIgMkACADIAEgAhB7IAMsABNBAEgEQCADKAIQGiADKAIIECoLAkAgAS0AYQRAIAAgAUG+JhCRAQwBCyADQRRqIAIQlgEgASwAc0EASARAIAEoAnAaIAEoAmgQKgsgASADKQIUNwJoIAEgAygCHDYCcCADQRRqIAIQlgEgASwAf0EASARAIAEoAnwaIAEoAnQQKgsgASADKQIUNwJ0IAEgAygCHDYCfCADQRRqIAIQlgEgASwAiwFBAEgEQCABKAKIARogASgCgAEQKgsgASADKQIUNwKAASABIAMoAhw2AogBIANBFGogAhCWASABLACXAUEASARAIAEoApQBGiABKAKMARAqCyABIAMpAhQ3AowBIAEgAygCHDYClAEgAi0AFEEBRgRAIANBADoAFCADQQA6AB8gAEECQeQAIANBFGoQLxogAywAH0EATg0BIAMoAhwaIAMoAhQQKgwBCyAAQZClBSkCADcCACAAQQhqIQBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIANBIGokAAugBQEEfyMAQaABayIDJAAgA0Hk1QM2AkQgA0Hw1QMoAgAiBjYCDCADQQxqIgQgBkEMaygCAGpB9NUDKAIANgIAIAQgAygCDEEMaygCAGoiBiADQRBqIgUQPiAGQoCAgIBwNwJIIANB5NUDNgJEIANB0NUDNgIMIAUQPyIGQfDLAzYCACADQgA3AjggA0IANwIwIANBEDYCQCADQZQBaiIFIAEgAhBZIAQgAygClAEgBSADLACfASIEQQBIIgUbIAMoApgBIAQgBRsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0GUAWoiBCACEDUgA0EMaiADKAKUASAEIAMsAJ8BIgJBAEgiBBsgAygCmAEgAiAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqQee4AUEKEC0gASgCaCABQegAaiABLABzIgJBAEgiBBsgASgCbCACIAQbEC1Bz5ACQQEQLRoCQAJ/IAMoAkAiAUEQcQRAIAMoAjwiASADKAIoIgJJBEAgAyACNgI8IAIhAQsgA0EkagwBCyABQQhxRQRAQQAhASAAQQA6AAsMAgsgAygCICEBIANBGGoLIQICQCABIAIoAgAiBGsiAUH4////B0kEQCABQQtPBEAgAUEHckEBaiIFECwhAiAAIAVBgICAgHhyNgIIIAAgAjYCACAAIAE2AgQgAiEADAILIAAgAToACyABDQFBACEBDAILEDgACyAAIAQgARA3GgsgACABakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBhA9GiADQcQAahA7GiADQaABaiQAC8gCACMAQSBrIgMkACADIAEgAhB7IAMsABNBAEgEQCADKAIQGiADKAIIECoLAkAgAS0AYQRAIAAgAUG9PhCRAQwBCwJAIAEtAGRBAXEEQCABLABzQQBIBEAgASgCaEEAOgAAIAFBADYCbAwCCyABQQA6AHMgAUEAOgBoDAELIANBFGogAhCWASABLABzQQBIBEAgASgCcBogASgCaBAqCyABIAMpAhQ3AmggASADKAIcNgJwCyACLQAUQQFGBEAgA0EAOgAUIANBADoAHyAAQQJB5AAgA0EUahAvGiADLAAfQQBODQEgAygCHBogAygCFBAqDAELIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EgaiQACyUAIAEgAiADIAQgBSAGrSAHrUIghoQgCK0gCa1CIIaEIAARJAALIwAgASACIAMgBCAFrSAGrUIghoQgB60gCK1CIIaEIAARJQALGQAgASACIAMgBCAFrSAGrUIghoQgABEaAAsZACABIAIgA60gBK1CIIaEIAUgBiAAERgACxYAIAEgAq0gA61CIIaEIAQgABEXAKcLHQAgASACrSADrUIghoQgBK0gBa1CIIaEIAARHQALHgAgASACrSADrUIghoQgBK0gBa1CIIaEIAARFgCnCxMAIAEgAq0gA61CIIaEIAAREAALCgAgASAAERIApwvfAQECfyMAQSBrIgQkACAEQQxqIAEgAhB7IAQsAB9BAEgEQCAEKAIcGiAEKAIUECoLAkAgAS0AYQRAIAAgAUGayQAQkQEMAQsgAhBJIgVBAEgEQCAEQSAQLCIBNgIAIARCnoCAgICEgICAfzcCBCABQZGRASkAADcAACABQQA6AB4gAUGnkQEpAAA3ABYgAUGhkQEpAAA3ABAgAUGZkQEpAAA3AAggAEEGQegHIAQQLxogBCwAC0EATg0BIAQoAggaIAQoAgAQKgwBCyAAIAEgAiAFIAMQqQILIARBIGokAAsXACAAIAEgAiADrSAErUIghoQgBRCZBgsGAEHtxQALBgBB6fIACwUAQcczCxoAIABFBEBBAA8LIABB7LIEQfyzBBA5QQBHC40IAQd/IwBBoAFrIgMkACADQeTVAzYCRCADQfDVAygCACIHNgIMIANBDGoiBCAHQQxrKAIAakH01QMoAgA2AgAgBCADKAIMQQxrKAIAaiIHIANBEGoiBRA+IAdCgICAgHA3AkggA0Hk1QM2AkQgA0HQ1QM2AgwgBRA/IgdB8MsDNgIAIANCADcCOCADQgA3AjAgA0EQNgJAIANBlAFqIgUgASACEOIEIAQgAygClAEgBSADLACfASIEQQBIIgUbIAMoApgBIAQgBRsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0GUAWoiBCACEDUgA0EMaiADKAKUASAEIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqQeG8AUELEC0gAS8BeBA8QbUVQQEQLSABLwF6EDxBz5ACQQEQLRogASgCfCIEIAEoAoABIglHBEBBACEBA0AgA0GUAWoiBSACEDUgA0EMaiADKAKUASAFIAMsAJ8BIgVBAEgiBhsgAygCmAEgBSAGGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqQcioAUEGEC0gARBCQcKKAkECEC0hBSADQZQBaiIGIAIQNSAFIAMoApQBIAYgAywAnwEiBkEASCIIGyADKAKYASAGIAgbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIAVBgbsBQQsQLSAELwEAEDxBz5ACQQEQLSEFIANBlAFqIgYgAhA1IAUgAygClAEgBiADLACfASIGQQBIIggbIAMoApgBIAYgCBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgBUG+tgFBCRAtIAQv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AjAgA0EQNgJAIANBlAFqIgUgASACEFkgBCADKAKUASAFIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCwJAIAEpAwggATUCIFoEQCADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiAkEASCIEGyADKAKYASACIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpBmLYBQRYQLSABKQMIIAE1AiB9EIUBQc+QAkEBEC0aDAELIANBlAFqIgEgAhA1IANBDGogAygClAEgASADLACfASIBQQBIIgIbIAMoApgBIAEgAhsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakGlyQFBIBAtGgsCQAJ/IAMoAkAiAUEQcQRAIAMoAjwiASADKAIoIgJJBEAgAyACNgI8IAIhAQsgA0EkagwBCyABQQhxRQRAQQAhASAAQQA6AAsMAgsgAygCICEBIANBGGoLIQICQCABIAIoAgAiBGsiAUH4////B0kEQCABQQtPBEAgAUEHckEBaiIFECwhAiAAIAVBgICAgHhyNgIIIAAgAjYCACAAIAE2AgQgAiEADAILIAAgAToACyABDQFBACEBDAILEDgACyAAIAQgARA3GgsgACABakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBhA9GiADQcQAahA7GiADQaABaiQACwkAIAAQ5QQQKgsVACAAKAIIIgBFBEBBAQ8LIAAQ7AQL1AEBAn8jAEEgayIDJAAgASACQQAgASgCACgCLBEEACEEIAIgAUH4AGoQlAEgAiAENgIMIANBDGogASACIAIoAgQgBCACKAIAamtBACABKAIAKAIwEQcAIAIgAigCBCACKAIAazYCDCADLAAfQQBIBEAgAygCHBogAygCFBAqCyAAQZClBSkCADcCACAAQQhqIQACQEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EgaiQAC7gBAQd/A0ACQCAEIAlNDQAgAiADRg0AQQEhCCAAKAII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aiIFIApHDQALCyADQThqIgMgCEcNAAsLIAIgBjYCDCAEQQxqIAEgAiACKAIEIAYgAigCAGprQQAgASgCACgCMBEHACACIAIoAgQgAigCAGs2AgwgBCwAH0EASARAIAQoAhwaIAQoAhQQKgsgAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyAEQSBqJAALygQBBH8jAEHwBGsiACQAIAAgAjYC6AQgACABNgLsBCAAQYYLNgIQIABByAFqIABB0AFqIABBEGoiARBrIQggAEHAAWoiCSAEKAIcIgc2AgAgB0HszgZHBEAgByAHKAIEQQFqNgIECyAJQZzQBhBDIQcgAEEAOgC/AQJAIABB7ARqIAIgAyAJIAQoAgQgBSAAQb8BaiAHIAggAEHEAWogAEHgBGoQ/wRFDQAgAEHeiAEoAAA2ALcBIABB14gBKQAANwOwASAHIABBsAFqIABBugFqIABBgAFqIAcoAgAoAjARCgAaIABBhQs2AhAgAEEIakEAIAEQayEDIAEhBAJAIAAoAsQBIAgoAgBrIgFBiQNOBEAgAUECdUECahBVIQIgAygCACEBIAMgAjYCACABBEAgASADKAIEEQAACyADKAIAIgRFDQELIAAtAL8BQQFGBEAgBEEtOgAAIARBAWohBAsgCCgCACECA0AgACgCxAEgAk0EQAJAIARBADoAACAAIAY2AgAgAEEQaiAAEKAFQQFHDQAgAygCACEBIANBADYCACABBEAgASADKAIEEQAACwwECwUgBCAAQbABaiAAQYABaiIBIAFBKGogAhCuAyABa0ECdWotAAA6AAAgBEEBaiEEIAJBBGohAgwBCwsQbAALEGwACyAAQewEaiAAQegEahBdBEAgBSAFKAIAQQJyNgIACyAAKALsBCEKIABBwAFqEEcgCCgCACEBIAhBADYCACABBEAgASAIKAIEEQAACyAAQfAEaiQAIAoLqAgBBn8jAEGQAWsiACQAIAAgAjYCiAEgACABNgKMASAAQYYLNgIUIABBGGogAEEgaiAAQRRqIggQayEJIABBEGoiByAEKAIcIgE2AgAgAUHszgZHBEAgASABKAIEQQFqNgIECyAHQaTQBhBDIQEgAEEAOgAPIABB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AghB/////wdxQQFrBUEKCxBQIAACfyABLQALQQd2BEAgASgCAAwBCyABCyICNgK0ASAAIABBEGo2AgwgAEEANgIIA0ACQCAAQcwCaiAAQcgCahBdDQAgACgCtAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgAmpGBEACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQshAyABAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELQQF0EFAgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEFAgACADAn8gAS0AC0EHdgRAIAEoAgAMAQsgAQsiAmo2ArQBCwJ/IABBzAJqIggoAgAiAygCDCIJIAMoAhBGBEAgAyADKAIAKAIkEQEADAELIAkoAgALIAYgAiAAQbQBaiAAQQhqIAAoAsQCIABBxAFqIABBEGogAEEMaiAHEO4BDQAgCBB2GgwBCwsCQAJ/IAAtAM8BQQd2BEAgACgCyAEMAQsgAC0AzwFB/wBxC0UNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArQBIAQgBhCbBTcDACAAQcQBaiAAQRBqIAAoAgwgBBCDASAAQcwCaiAAQcgCahBdBEAgBCAEKAIAQQJyNgIACyAAKALMAiEKIAEQRhogAEHEAWoQRhogAEHQAmokACAKC5sFAQV/IwBB0AJrIgAkACAAIAI2AsgCIAAgATYCzAIgAxCvASEGIAMgAEHQAWoQjAIhByAAQcQBaiADIABBxAJqEIsCIwBBEGsiAiQAIABBuAFqIgFCADcCACABQQA2AgggAkEQaiQAIAEgAS0AC0EHdgR/IAEoAghB/////wdxQQFrBUEKCxBQIAACfyABLQALQQd2BEAgASgCAAwBCyABCyICNgK0ASAAIABBEGo2AgwgAEEANgIIA0ACQCAAQcwCaiAAQcgCahBdDQAgACgCtAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgAmpGBEACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQshAyABAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELQQF0EFAgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEFAg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IABB+AFqEF4EQCAEIAQoAgBBAnI2AgALIAAoAvwBIQggARBGGiAAQcABahBGGiAAQYACaiQAIAgLvQUBA38jAEGAAmsiACQAIAAgAjYC+AEgACABNgL8ASAAQcABaiADIABB0AFqIABBzwFqIABBzgFqELQDIwBBEGsiAiQAIABBtAFqIgFCADcCACABQQA2AgggAkEQaiQAIAEgAS0AC0EHdgR/IAEoAghB/////wdxQQFrBUEKCxBQIAACfyABLQALQQd2BEAgASgCAAwBCyABCyICNgKwASAAIABBEGo2AgwgAEEANgIIIABBAToAByAAQcUAOgAGA0ACQCAAQfwBaiAAQfgBahBeDQAgACgCsAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgAmpGBEACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQshAyABAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELQQF0EFAgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEFAgACADAn8gAS0AC0EHdgRAIAEoAgAMAQsgAQsiAmo2ArABCwJ/IABB/AFqIgYoAgAiAygCDCIHIAMoAhBGBEAgAyADKAIAKAIkEQEADAELIActAAALwCAAQQdqIABBBmogAiAAQbABaiAALADPASAALADOASAAQcABaiAAQRBqIABBDGogAEEIaiAAQdABahCzAw0AIAYQdxoMAQsLAkACfyAALQDLAUEHdgRAIAAoAsQBDAELIAAtAMsBQf8AcQtFDQAgAC0AB0EBRw0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCsAEgBBCWBTgCACAAQcABaiAAQRBqIAAoAgwgBBCDASAAQfwBaiAAQfgBahBeBEAgBCAEKAIAQQJyNgIACyAAKAL8ASEIIAEQRhogAEHAAWoQRhogAEGAAmokACAIC8oGAQR/IwBBoAFrIgMkACADQeTVAzYCRCADQfDVAygCACIGNgIMIANBDGoiBCAGQQxrKAIAakH01QMoAgA2AgAgBCADKAIMQQxrKAIAaiIGIANBEGoiBRA+IAZCgICAgHA3AkggA0Hk1QM2AkQgA0HQ1QM2AgwgBRA/IgZB8MsDNgIAIANCADcCOCAD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IANBDGpB08cBQQsQLRoMAQsgA0EMakG9yQFBCBAtGgsCQAJ/IAMoAkAiAUEQcQRAIAMoAjwiAiADKAIoIgFJBEAgAyABNgI8IAEhAgsgA0EkagwBCyABQQhxRQRAQQAhAiAAQQA6AAsMAgsgAygCICECIANBGGoLIQECQCACIAEoAgAiBGsiAkH4////B0kEQCACQQtPBEAgAkEHckEBaiIFECwhASAAIAVBgICAgHhyNgIIIAAgATYCACAAIAI2AgQgASEADAILIAAgAjoACyACDQFBACECDAILEDgACyAAIAQgAhA3GgsgACACakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBhA9GiADQcQAahA7GiADQaABaiQAC1QBAn8gASAAKAJUIgEgAUEAIAJBgAJqIgMQzAMiBCABayADIAQbIgMgAiACIANLGyICEDIaIAAgASADaiIDNgJUIAAgAzYCCCAAIAEgAmo2AgQgAgvSAQECfyMAQSBrIgMkACABIAJBACABKAIAKAIsEQQAIQQgAiABLQBkEEggAiAENgIMIANBDGogASACIAIoAgQgBCACKAIAamtBACABKAIAKAIwEQcAIAIgAigCBCACKAIAazYCDCADLAAfQQBIBEAgAygCHBogAygCFBAqCyAAQZClBSkCADcCACAAQQhqIQACQEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EgaiQAC64BACMAQRBrIgMkACABIAIQUkEBcTYCZAJAIAItABRBAUYEQCADQQA6AAQgA0EAOgAPIABBAkHkACADQQRqEC8aIAMsAA9BAE4NASADKAIMGiADKAIEECoMAQsgAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADQRBqJAALlwIBBn8jAEEgayICJAACfwJAAkAgAUF/Rg0AIAIgATYCFCAALQAsQQFGBEACfyAAKAIgIgAoAkxBAEgEQCABIAAQtQUMAQsgASAAELUFC0F/Rg0CDAELIAIgAkEYaiIFNgIQIAJBIGohBiACQRRqIQMDQCAAKAIkIgQgACgCKCADIAUgAkEMaiACQRhqIAYgAkEQaiAEKAIAKAIMERMAIQQgAigCDCADRg0CIARBA0YEQCADQQFBASAAKAIgEHhBAUYNAgwDCyAEQQFLDQIgAkEYaiIDQQEgAigCECADayIDIAAoAiAQeCADRw0CIAIoAgwhAyAEQQFGDQALCyABQQAgAUF/RxsMAQtBfwshByACQSBqJAAgBwtlAQF/AkAgAC0ALEUEQCACQQAgAkEAShshAgNAIAIgA0YNAiAAIAEoAgAgACgCACgCNBEFAEF/RgRAIAMPBSABQQRqIQEgA0EBaiEDDAELAAsACyABQQQgAiAAKAIgEHghAgsgAgsxACAAIAAoAgAoAhgRAQAaIAAgAUG00AYQQyIBNgIkIAAgASABKAIAKAIcEQEAOgAsC6QCAQN/IwBBIGsiAiQAAkAgAUF/RgRAIAAtADQNASAAIAAoAjAiAUF/RzoANAwBCyAALQA0IQMCQAJAAkAgAC0ANUUEQCADQQFxDQEMAwsgA0EBcSIDBEAgACgCMCAAKAIgEKwFDQMMAgsgA0UNAgsgAiAAKAIwNgIQAkACQCAAKAIkIgMgACgCKCACQRBqIAJBFGoiBCACQQxqIAJBGGogAkEgaiAEIAMoAgAoAgwREwBBAWsOAwICAAELIAAoAjAhAyACIAJBGWo2AhQgAiADOgAYCwNAIAIoAhQiAyACQRhqTQ0CIAIgA0EBayIDNgIUIAMsAAAgACgCIBDxAUF/Rw0ACwtBfyEBDAELIABBAToANCAAIAE2AjALIAJBIGokACABCwkAIABBARCtBQsJACAAQQAQrQULgwUBBH8jAEGgAWsiAyQAIANB5NUDNgJEIANB8NUDKAIAIgY2AgwgA0EMaiIEIAZBDGsoAgBqQfTVAygCADYCACAEIAMoAgxBDGsoAgBqIgYgA0EQaiIFED4gBkKAgICAcDcCSCADQeTVAzYCRCADQdDVAzYCDCAFED8iBkHwywM2AgAgA0IANwI4IANCADcCMCADQRA2AkAgA0GUAWoiBSABIAIQWSAEIAMoApQBIAUgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBlAFqIgQgAhA1IANBDGogAygClAEgBCADLACfASICQQBIIgQbIAMoApgBIAIgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakGtuAFBChAtIAEoAmQQQkHBkAJBDxAtGgJAAn8gAygCQCIBQRBxBEAgAygCPCICIAMoAigiAUkEQCADIAE2AjwgASECCyADQSRqDAELIAFBCHFFBEBBACECIABBADoACwwCCyADKAIgIQIgA0EYagshAQJAIAIgASgCACIEayICQfj///8HSQRAIAJBC08EQCACQQdyQQFqIgUQLCEBIAAgBUGAgICAeHI2AgggACABNgIAIAAgAjYCBCABIQAMAgsgACACOgALIAINAUEAIQIMAgsQOAALIAAgBCACEDcaCyAAIAJqQQA6AAAgA0Hs1QMoAgAiADYCDCAAQQxrKAIAIANBDGpqQfjVAygCADYCACAGQfDLAzYCACADLAA7QQBIBEAgAygCOBogAygCMBAqCyAGED0aIANBxABqEDsaIANBoAFqJAALSAAgACABQbTQBhBDIgE2AiQgACABIAEoAgAoAhgRAQA2AiwgACAAKAIkIgEgASgCACgCHBEBADoANSAAKAIsQQlOBEAQbAALC6YCAQd/IwBBIGsiAiQAAn8CQAJAIAFBf0YNACACIAHAIgM6ABcgAC0ALEEBRgRAIAAoAiAhBCMAQRBrIgAkACAAIAM6AA8gAEEPakEBQQEgBBB4IQcgAEEQaiQAIAdBAUcNAgwBCyACIAJBGGoiBTYCECACQSBqIQYgAkEXaiEDA0AgACgCJCIEIAAoAiggAyAFIAJBDGogAkEYaiAGIAJBEGogBCgCACgCDBETACEEIAIoAgwgA0YNAiAEQQNGBEAgA0EBQQEgACgCIBB4QQFGDQIMAwsgBEEBSw0CIAJBGGoiA0EBIAIoAhAgA2siAyAAKAIgEHggA0cNAiACKAIMIQMgBEEBRg0ACwsgAUEAIAFBf0cbDAELQX8LIQggAkEgaiQAIAgLZQEBfwJAIAAtACxFBEAgAkEAIAJBAEobIQIDQCACIANGDQIgACABLQAAIAAoAgAoAjQRBQBBf0YEQCADDwUgAUEBaiEBIANBAWohAwwBCwALAAsgAUEBIAIgACgCIBB4IQILIAILMQAgACAAKAIAKAIYEQEAGiAAIAFBrNAGEEMiATYCJCAAIAEgASgCACgCHBEBADoALAulAgEDfyMAQSBrIgIkAAJAIAFBf0YEQCAALQA0DQEgACAAKAIwIgFBf0c6ADQMAQsgAC0ANCEDAkACQAJAIAAtADVFBEAgA0EBcQ0BDAMLIANBAXEiAwRAIAAoAjAgACgCIBCwBQ0DDAILIANFDQILIAIgACgCMMA6ABMCQAJAIAAoAiQiAyAAKAIoIAJBE2ogAkEUaiIEIAJBDGogAkEYaiACQSBqIAQgAygCACgCDBETAEEBaw4DAgIAAQsgACgCMCEDIAIgAkEZajYCFCACIAM6ABgLA0AgAigCFCIDIAJBGGpNDQIgAiADQQFrIgM2AhQgAywAACAAKAIgEPEBQX9HDQALC0F/IQEMAQsgAEEBOgA0IAAgATYCMAsgAkEgaiQAIAELCQAgAEEBELEFC9oBAQJ/IwBBIGsiAyQAIAEgAkEAIAEoAgAoAiwRBAAhBCACIAEoAmRB2gBtQf8BcRBIIAIgBDYCDCADQQxqIAEgAiACKAIEIAQgAigCAGprQQAgASgCACgCMBEHACACIAIoAgQgAigCAGs2AgwgAywAH0EASARAIAMoAhwaIAMoAhQQKgsgAEGQpQUpAgA3AgAgAEEIaiEAAkBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIANBIGokAAsJACAAQQAQsQULSAAgACABQazQBhBDIgE2AiQgACABIAEoAgAoAhgRAQA2AiwgACAAKAIkIgEgASgCACgCHBEBADoANSAAKAIsQQlOBEAQbAALCx4AQdzFBhCVAkGsyAYQlQJBsMYGEL8DQYDJBhC/AwuyAQAjAEEQayIDJAAgASACEFJBA3FB2gBsNgJkAkAgAi0AFEEBRgRAIANBADoABCADQQA6AA8gAEECQeQAIANBBGoQLxogAywAD0EATg0BIAMoAgwaIAMoAgQQKgwBCyAAQZClBSkCADcCACAAQQhqIQBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIANBEGokAAsIACAAEDsQKgvQBwEHfyMAQaABayIDJAAgA0Hk1QM2AkQgA0Hw1QMoAgAiBjYCDCADQQxqIgUgBkEMaygCAGpB9NUDKAIANgIAIAUgAygCDEEMaygCAGoiBiADQRBqIgQQPiAGQoCAgIBwNwJIIANB5NUDNgJEIANB0NUDNgIMIAQQPyIGQfDLAzYCACADQgA3AjggA0IANwIwIANBEDYCQCADQZQBaiIEIAEgAhBZIAUgAygClAEgBCADLACfASIFQQBIIgQbIAMoApgBIAUgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0GUAWoiBSACEDUgA0EMaiADKAKUASAFIAMsAJ8BIgVBAEgiBBsgAygCmAEgBSAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqQe++AUEKEC0gASgCaCABQegAaiABLABzIgVBAEgiBBsgASgCbCAFIAQbEC1Bz5ACQQEQLSEFIANBlAFqIgQgAhA1IAUgAygClAEgBCADLACfASICQQBIIgQbIAMoApgBIAIgBBsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgBUGvtgFBDhAtGiADQRhqIQUgASgCdCICIAEoAngiCEcEQANAIAItAAAhCSAGIAMoAgxBDGsiASgCAGoiBCAEKAIAQbV/cUEIcjYCACAFIAEoAgBqQQI2AgAgASgCACADQQxqaiIEKAJMQX9GBEAgA0GUAWoiByAEKAIcIgE2AgAgAUHszgZHBEAgASABKAIEQQFqNgIECyAHQaTQBhBDIgFBICABKAIAKAIcEQUAGiAHEEcLIARBMDYCTCADQQxqIAkQQkHpxAFBARAtGiACQQFqIgIgCEcNAAsLIANBDGpBz5ACQQEQLRoCQAJAAn8gAygCQCIBQRBxBEAgA0EkaiEFIAMoAjwiAiADKAIoIgFJBH8gAyABNgI8IAEFIAILDAELIAFBCHFFBEBBACECIABBADoACwwDCyADKAIgCyAFKAIAIgVrIgJB+P///wdJBEAgAkELTwRAIAJBB3JBAWoiBBAsIQEgACAEQYCAgIB4cjYCCCAAIAE2AgAgACACNgIEIAEhAAwCCyAAIAI6AAsgAg0BQQAhAgwCCxA4AAsgACAFIAIQNxoLIAAgAmpBADoAACADQezVAygCACIANgIMIABBDGsoAgAgA0EMampB+NUDKAIANgIAIAZB8MsDNgIAIAMsADtBAEgEQCADKAI4GiADKAIwECoLIAYQPRogA0HEAGoQOxogA0GgAWokAAv+AQEEfyMAQSBrIgMkACABIAJBACABKAIAKAIsEQQAIQUgAiABQegAahCgASABKAJ0IgQgASgCeCIGRwRAA0AgAiAELQAAEEggBEEBaiIEIAZHDQALCyACIAU2AgwgA0EMaiABIAIgAigCBCAFIAIoAgBqa0EAIAEoAgAoAjARBwAgAiACKAIEIAIoAgBrNgIMIAMsAB9BAEgEQCADKAIcGiADKAIUECoLIABBkKUFKQIANwIAIABBCGohAAJAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADQSBqJAALEwAgACAAKAIAQQxrKAIAahC/BQsTACAAIAAoAgBBDGsoAgBqELoDCxMAIAAgACgCAEEMaygCAGoQwAULEwAgACAAKAIAQQxrKAIAahC7AwuEBQEJfyMAQSBrIgQkACAEIAEgAhB7IAQsABNBAEgEQCAEKAIQGiAEKAIIECoLAkACQCABLQBhBEAgACABQamAARCRAQwBCyAEQRRqIAIQlgEgASwAc0EASARAIAEoAnAaIAEoAmgQKgsgASAEKQIUNwJoIAEgBCgCHDYCcCACKAIQBEADQCACEFIhAwJAIAEoAngiCSABKAJ8IgdJBEAgCSADOgAAIAlBAWohBgwBCyAJIAEoAnQiCGsiCkEBaiIFQQBIDQQgCkH/////ByAHIAhrIgdBAXQiBiAFIAUgBkkbIAdB/////wNPGyIGBH8gBhAsBUEACyIHaiIFIAM6AAAgBiAHaiEMIAVBAWohBgJAIAggCUYEQCAFIQcMAQtBACELIAkhAyAKQQNxIgoEQANAIAVBAWsiBSADQQFrIgMtAAA6AAAgC0EBaiILIApHDQALCyAIIAlrQXxNBEADQCAFQQFrIANBAWstAAA6AAAgBUECayADQQJrLQAAOgAAIAVBA2sgA0EDay0AADoAACAFQQRrIgUgA0EEayIDLQAAOgAAIAMgCEcNAAsLIAEoAnwaIAEoAnQhCAsgASAMNgJ8IAEgBjYCeCABIAc2AnQgCEUNACAIECoLIAEgBjYCeCACKAIQDQALCyACLQAUQQFGBEAgBEEAOgAUIARBADoAHyAAQQJB5AAgBEEUahAvGiAELAAfQQBODQEgBCgCHBogBCgCFBAqDAELIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgBEEgaiQADwsQNgALEwAgACAAKAIAQQxrKAIAahDBBQsTACAAIAAoAgBBDGsoAgBqELwDCxMAIAAgACgCAEEMaygCAGoQvQMLEwAgACAAKAIAQQxrKAIAahDpAQsKACAAQQhrEL0DCwoAIABBCGsQ6QELrgMBCH8jAEEgayIFJAAgASACQQAgASgCACgCLBEEACEGIAIgASgCbCABKAJoa0EEdRBKIAEoAmgiAyABKAJsIglHBEADQCADKAIAIQQCQCABLQBhRQRAIAIgBEH//wNxEE0MAQsgAiAEEEoLIAIgAygCCCADKAIEa0ECdkH/AXEQSCADKAIEIgQgAygCCCIKRwRAA0AgBC8BAiEHIAQtAAAhCAJAIAEtAGRBAXEEQCACIAdB//8BcUGAgH5BACAIQQFxG3JB//8DcRBNDAELIAIgB0H/AHFBgH9BACAIQQFxG3JB/wFxEEgLIARBBGoiBCAKRw0ACwsgA0EQaiIDIAlHDQALCyACIAY2AgwgBUEMaiABIAIgAigCBCAGIAIoAgBqa0EAIAEoAgAoAjARBwAgAiACKAIEIAIoAgBrNgIMIAUsAB9BAEgEQCAFKAIcGiAFKAIUECoLIABBkKUFKQIANwIAIABBCGohAAJAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyAFQSBqJAALGgAgACABIAIpAwhBACADIAEoAgAoAhARGAALCQAgABC+AxAqC7ICAQF/IAAgACgCACgCGBEBABogACABQazQBhBDIgE2AkQgAC0AYiECIAAgASABKAIAKAIcEQEAIgE6AGIgASACRwRAIABBADYCECAAQQA2AgwgAEEANgIIIABBADYCHCAAQQA2AhQgAEEANgIYIAAtAGAhASAALQBiQQFGBEACQCABQQFxRQ0AIAAoAiAiAUUNACABECoLIAAgAC0AYToAYCAAIAAoAjw2AjQgACgCOCEBIABCADcCOCAAIAE2AiAgAEEAOgBhDwsCQCABQQFxDQAgACgCICIB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ASACIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpB/7kBQR0QLSABLwFkEDxBz5ACQQEQLRoCQAJ/IAMoAkAiAUEQcQRAIAMoAjwiAiADKAIoIgFJBEAgAyABNgI8IAEhAgsgA0EkagwBCyABQQhxRQRAQQAhAiAAQQA6AAsMAgsgAygCICECIANBGGoLIQECQCACIAEoAgAiBGsiAkH4////B0kEQCACQQtPBEAgAkEHckEBaiIFECwhASAAIAVBgICAgHhyNgIIIAAgATYCACAAIAI2AgQgASEADAILIAAgAjoACyACDQFBACECDAILEDgACyAAIAQgAhA3GgsgACACakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBhA9GiADQcQAahA7GiADQaABaiQAC6QBAQN/IwBBgAFrIgMkACADIAEoAgg2AgAgA0EQaiIBQbvyACADENwCIAEQWCICQfj///8HSQRAAkACQCACQQtPBEAgAkEHckEBaiIEECwhASAAIARBgICAgHhyNgIIIAAgATYCACAAIAI2AgQgASEADAELIAAgAjoACyACRQ0BCyAAIANBEGogAhAyGgsgACACakEAOgAAIANBgAFqJAAPCxA4AAv4CQEMfyAAQQE2AgQgACgCDCIBIAEoAsQCQQFrNgLEAiABIAEoAsgCQQFqNgLIAiAAKAIMIgEoAnwiCigC7IMBIQkgASAAIAooAvyDASIMQQFrIgMgACgCCCAAKAIYELUBIAAoAggiAkEASgRAIAAoAgwgACADIAJBAWsgACgCGBC1ASAAKAIIIQILIAJBAWoiASAKKAKEhAFIBEAgACgCDCAAIAMgASAAKAIYELUBIAAoAggiAkEBaiEBCyAAKAIUIQUgACgCECEDIAEgCXQhAQJAAkACQCACIAl0IgJBAXFFBEAgAygCHCIHIAEgASAHShsiBEEBcQ0BIAUoAnwiASgCyIMBQQdqQQhtIQcgASgCwIMBQQdqQQhtIQYgAygCKCIBIAUoAihGDQIgAiAETg0DIAIhAQNAIAUoAgQgASAGbCIIIAUoAihsaiADKAIEIAggAygCKGxqIAMoAhggBmwQMhogAUEBaiIB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BUH8////B3EhCyAFQQNxIQlBACEDIAVBBEkhDANAIAAgA0EBdGohAiAGIAMgBWxBAXRqIQdBACEKIAxFBEADQCACIAcvAQA7AQAgAiABQQF0IghqIgIgBy8BAjsBACACIAhqIgIgBy8BBDsBACACIAhqIgIgBy8BBjsBACACIAhqIQIgB0EIaiEHIApBBGoiCiALRw0ACwtBACEIIAkEQANAIAIgBy8BADsBACAHQQJqIQcgAiABQQF0aiECIAhBAWoiCCAJRw0ACwsgA0EBaiIDIARHDQALCwurAQAjAEEQayIDJAAgASACEE47AWICQCACLQAUQQFGBEAgA0EAOgAEIANBADoADyAAQQJB5AAgA0EEahAvGiADLAAPQQBODQEgAygCDBogAygCBBAqDAELIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EQaiQACxkAIAAgASACIAMgBCAFIAZBAkEDIAcQwgELGQAgACABIAIgAyAEIAUgBkECQQIgBxDCAQsZACAAIAEgAiADIAQgBSAGQQJBASAHEMIBC5ADAQV/AkAgBUEATA0AIARBAEwNACAHQQhrIQogAkEGayELA0AgBiAJQQF0aiECIAsgAyAJbEEBdGohB0EAIQgDQCACIAcvAQJBAnQgBy8BAGsgBy8BCCAHLwEGakEobGogBy8BDEECdGogBy8BDmsgBy8BCiAHLwEEakF1bGogCnU7AQAgB0ECaiEHIAIgBUEBdGohAiAIQQFqIgggBEcNAAsgCUEBaiIJIAVHDQALIAVBAEwNACAFQfz///8HcSELIAVBA3EhCUEAIQMgBUEESSEMA0AgACADQQF0aiECIAYgAyAFbEEBdGohB0EAIQogDEUEQANAIAIgBy8BADsBACACIAFBAXQiCGoiAiAHLwECOwEAIAIgCGoiAiAHLwEEOwEAIAIgCGoiAiAHLwEGOwEAIAIgCGohAiAHQQhqIQcgCkEEaiIKIAtHDQALC0EAIQggCQRAA0AgAiAHLwEAOwEAIAdBAmohByACIAFBAXRqIQIgCEEBaiIIIAlHDQALCyADQQFqIgMgBEcNAAsLCxkAIAAgASACIAMgBCAFIAZBAUEDIAcQwgELGQAg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bEEBdGohAkEAIQkgDEUEQANAIAcgAi8BADsBACAHIAFBAXQiCGoiByACLwECOwEAIAcgCGoiByACLwEEOwEAIAcgCGoiByACLwEGOwEAIAcgCGohByACQQhqIQIgCUEEaiIJIAtHDQALC0EAIQggCgRAA0AgByACLwEAOwEAIAJBAmohAiAHIAFBAXRqIQcgCEEBaiIIIApHDQALCyADQQFqIgMgBEcNAAsLC+8FAQR/IwBBoAFrIgMkACADQeTVAzYCRCADQfDVAygCACIGNgIMIANBDGoiBCAGQQxrKAIAakH01QMoAgA2AgAgBCADKAIMQQxrKAIAaiIGIANBEGoiBRA+IAZCgICAgHA3AkggA0Hk1QM2AkQgA0HQ1QM2AgwgBRA/IgZB8MsDNgIAIANCADcCOCADQgA3AjAgA0EQNgJAIANBlAFqIgUgASACEFkgBCADKAKUASAFIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGoiBEGruwFBChAtIAEoAmQQPEHPkAJBARAtGiADQZQBaiIFIAIQNSAEIAMoApQBIAUgAywAnwEiAkEASCIEGyADKAKYASACIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpBoLsBQQoQLSABKAJoEDxBz5ACQQEQLRoCQAJ/IAMoAkAiAUEQcQRAIAMoAjwiAiADKAIoIgFJBEAgAyABNgI8IAEhAgsgA0EkagwBCyABQQhxRQRAQQAhAiAAQQA6AAsMAgsgAygCICECIANBGGoLIQECQCACIAEoAgAiBGsiAkH4////B0kEQCACQQtPBEAgAkEHckEBaiIFECwhASAAIAVBgICAgHhyNgIIIAAgATYCACAAIAI2AgQgASEADAILIAAgAjoACyACDQFBACECDAILEDgACyAAIAQgAhA3GgsgACACakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBhA9GiADQcQAahA7GiADQaABaiQACxcAIAAgASACIAMgBCAFIAZBAUEDEMMBCxcAIAAgASACIAMgBCAFIAZBAUECEMMBCxcAIAAgASACIAMgBCAFIAZBAUEBEMMBC4ADAQZ/AkAgBUEATA0AIARBAEwNACACQQNrIQoDQCAGIAlBAXRqIQcgCiADIAlsaiECQQAhCANAIAcgAi0ABiACLQABQQJ0IAItAABrIAItAAJBdmxqIAItAANBOmxqIAItAARBEWxqIAItAAVBe2xqajsBACACQQFqIQIgByAFQQF0aiEHIAhBAWoiCCAERw0ACyAJQQFqIgkgBUcNAAsgBUEATA0AIAVB/P///wdxIQsgBUEDcSEKQQAhAyAFQQRJIQwDQCAAIANBAXRqIQcgBiADIAVsQQF0aiECQQAhCSAMRQRAA0AgByACLwEAOwEAIAcgAUEBdCIIaiIHIAIvAQI7AQAgByAIaiIHIAIvAQQ7AQAgByAIaiIHIAIvAQY7AQAgByAIaiEHIAJBCGohAiAJQQRqIgkgC0cNAAsLQQAhCCAKBEADQCAHIAIvAQA7AQAgAkECaiECIAcgAUEBdGohByAIQQFqIgggCkcNAAsLIANBAWoiAyAERw0ACwsLnAMBC38gBUEGaiELAkAgBUEEaiIOQX9OBEAgBEEATA0BIAZBBGohDyAEQfz///8HcSEQIARBA3EhDEF+IQogBEEESSERA0AgDyAKQQF0aiEIIAIgAyAKbGohB0EAIQ0gEUUEQANAIAggBy0AADsBACAIIAtBAXQiCWoiCCAHLQABOwEAIAggCWoiCCAHLQACOwEAIAggCWoiCCAHLQADOwEAIAggCWohCCAHQQRqIQcgDUEEaiINIBBHDQALC0EAIQkgDARAA0AgCCAHLQAAOwEAIAdBAWohByAIIAtBAXRqIQggCUEBaiIJIAxHDQALCyAKQQFqIgogDkcNAAsLIARBAEwNACAFQQBMDQBBACECIAFBAXQhAQNAIAAgAkEBdGohCCAGIAIgC2xBAXRqIQdBACEJA0AgCCAHLwEAIAcvAQJBe2xqIAcvAQRBEWxqIAcvAQZBOmxqIAcvAQhBdmxqIAcvAQpBAnRqIAcvAQxrOwEAIAdBAmohByABIAhqIQggCUEBaiIJIAVHDQALIAJBAWoiAiAERw0ACwsLnwMBC38gBUEHaiELAkAgBUEEaiIOQX5OBEAgBEEATA0BIAZBBmohDyAEQfz///8HcSEQIARBA3EhDEF9IQogBEEESSERA0AgDyAKQQF0aiEIIAIgAyAKbGohB0EAIQ0gEUUEQANAIAggBy0AADsBACAIIAtBAXQiCWoiCCAHLQABOwEAIAggCWoiCCAHLQACOwEAIAggCWoiCCAHLQADOwEAIAggCWohCCAHQQRqIQcgDUEEaiINIBBHDQALC0EAIQkgDARAA0AgCCAHLQAAOwEAIAdBAWohByAIIAtBAXRqIQggCUEBaiIJIAxHDQALCyAKQQFqIgogDkcNAAsLIARBAEwNACAFQQBMDQBBACECIAFBAXQhAQNAIAAgAkEBdGohCCAGIAIgC2xBAXRqIQdBACEJA0AgCCAHLwECQQJ0IAcvAQBrIAcvAQggBy8BBmpBKGxqIAcvAQxBAnRqIAcvAQ5rIAcvAQogBy8BBGpBdWxqOwEAIAdBAmohByABIAhqIQggCUEBaiIJIAVHDQALIAJBAWoiAiAERw0ACwsLnAMBC38gBUEGaiELAkAgBUEDaiIOQX5OBEAgBEEATA0BIAZBBmohDyAEQfz///8HcSEQIARBA3EhDEF9IQogBEEESSERA0AgDyAKQQF0aiEIIAIgAyAKbGohB0EAIQ0gEUUEQANAIAggBy0AADsBACAIIAtBAXQiCWoiCCAHLQABOwEAIAggCWoiCCAHLQACOwEAIAggCWoiCCAHLQADOwEAIAggCWohCCAHQQRqIQcgDUEEaiINIBBHDQALC0EAIQkgDARAA0AgCCAHLQAAOwEAIAdBAWohByAIIAtBAXRqIQggCUEBaiIJIAxHDQALCyAKQQFqIgogDkcNAAsLIARBAEwNACAFQQBMDQBBACECIAFBAXQhAQNAIAAgAkEBdGohCCAGIAIgC2xBAXRqIQdBACEJA0AgCCAHLwEMIAcvAQJBAnQgBy8BAGsgBy8BBEF2bGogBy8BBkE6bGogBy8BCEERbGogBy8BCkF7bGpqOwEAIAdBAmohByABIAhqIQggCUEBaiIJIAVHDQALIAJBAWoiAiAERw0ACwsL7AEBBX8CQCAFQQBMDQAgBEEATA0AQQ4gB2shBiAEQfz///8HcSELIARBA3EhCiAEQQRJIQwDQCAAIAEgCWxBAXRqIQQgAiADIAlsQQF0aiEHQQAhCCAMRQRAA0AgBCAHLwEAIAZ0OwEAIAQgBy8BAiAGdDsBAiAEIAcvAQQgBnQ7AQQgBCAHLwEGIAZ0OwEGIARBCGohBCAHQQhqIQcgCEEEaiIIIAtHDQALC0EAIQggCgRAA0AgBCAHLwEAIAZ0OwEAIARBAmohBCAHQQJqIQcgCEEBaiIIIApHDQALCyAJQQFqIgkgBUcNAAsLC8wCAQh/AkAgBUEATA0AIARBAEwNACAEQQFrIgZBBHEhDCAGQQJ2QQFqQf7///8HcSENIARBBUkhDgNAIAIgAyAJbGohBCAAIAEgCWxBAXRqIQZBACEKIA5FBEADQCAELQAAIQcgBC0AASEIIAQtAAIhCyAGIAQtAANBBnQ7AQYgBiALQQZ0OwEEIAYgCEEGdDsBAiAGIAdBBnQ7AQAgBC0ABCEHIAQtAAUhCCAELQAGIQsgBiAELQAHQQZ0OwEOIAYgC0EGdDsBDCAGIAhBBnQ7AQogBiAHQQZ0OwEIIARBCGohBCAGQRBqIQYgCkECaiIKIA1HDQALCyAMRQRAIAQtAAAhCiAELQABIQcgBC0AAiEIIAYgBC0AA0EGdDsBBiAGIAhBBnQ7AQQgBiAHQQZ0OwECIAYgCkEGdDsBAAsgCUEBaiIJIAVHDQALCwu0AQAjAEEQayIDJAAgASACEEk2AmQgASACEEk2AmgCQCACLQAUQQFGBEAgA0EAOgAEIANBADoADyAAQQJB5AAgA0EEahAvGiADLAAPQQBODQEgAygCDBogAygCBBAqDAELIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgA0EQaiQAC6ERARF/IAlBCGshDSMAIAQgBUEDaiIMbEEBdEEPakFwcWshFQJAIAVBfk4EQCAEQQBMDQEgAkECayERIBVBAmohEiAFQQJqIgJBACACQQBKGyETIARB/v///wdxIRQgBEEBcSEWIAQgBmtBA3EhEEF/IQ4gBEEBayIXIAZrQQNJIRgDQCASIA5BAXRqIQsgESADIA5sQQF0aiEJAkACQAJAAkACQAJAAkACQAJAAkAgBg4HAAIDBAUGBwELQQAhCCAGIQIgEARAA0AgCyACIAxsQQF0aiAJLwECOwEAIAJBAWohAiAJQQJqIQkgCEEBaiIIIBBHDQALCyAYDQgDQCALIAIgDGxBAXRqIAkvAQI7AQAgCyACQQFqIAxsQQF0aiAJLwEEOwEAIAsgAkECaiAMbEEBdGogCS8BBjsBACALIAJBA2ogDGxBAXRqIAkvAQg7AQAgCUEIaiEJIAJBBGoiAiAERw0ACwwICyAJLwEAIQhBACECA0AgCyACIAxsQQF0aiAJLwEEQTpsIAkvAQIiCkEKbGogCS8BBiAIQf//A3FqQQF0ayANdTsBACAJQQJqIQkgCiEIIAJBAWoiAiAERw0ACwwHCyAJLwEAIQhBACECA0AgCyACIAxsQQF0aiAJLwEEQQpsIAkvAQIiCkE6bGogCS8BBiAIQf//A3FqQQF0ayANdTsBACAJQQJqIQkgCiEIIAJBAWoiAiAERw0ACwwGCyAJLwEAIQhBACECA0AgCEH//wNxIQogCyACIAxsQQF0aiAJLwECIghBNmwgCS8BBEEEdGogCkECdCAJLwEGQQF0amsgDXU7AQAgCUECaiEJIAJBAWoiAiAERw0ACwwFCyAJLwEAIQhBACECA0AgCEH//wNxIQogCyACIAxsQQF0aiAJLwECIghBLmwgCkF6bGogCS8BBEEcbGogCS8BBkECdGsgDXU7AQAgCUECaiEJIAJBAWoiAiAERw0ACwwECyAJLwEAIQhBACECQQAhDyAXRQ0CA0AgCEH//wNxIQogCyACIAxsQQF0aiAJLwEEIgggCS8BAiIZakEkbCAKIAkvAQYiGmpBAnRrIA11OwEAIAsgAkEBciAMbEEBdGogCCAaakEkbCAZIAkvAQhqQQJ0ayANdTsBACACQQJqIQIgCUEEaiEJIA9BAmoiDyAURw0ACwwCCyAJLwEAIQhBACECA0AgCEH//wNxIQogCyACIAxsQQF0aiAJLwECIghBHGwgCkECdGsgCS8BBEEubGogCS8BBkF6bGogDXU7AQAgCUECaiEJIAJBAWoiAiAERw0ACwwCCyAJLwEAIQhBACECA0AgCEH//wNxIQogCyACIAxsQQF0aiAJLwEEQTZsIAkvAQIiCEEEdGogCkEBdCAJLwEGQQJ0amsgDXU7AQAgCUECaiEJIAJBAWoiAiAERw0ACwwBCyAWRQ0AIAsgAiAMbEEBdGogCS8BBCAJLwECakEkbCAJLwEGIAhB//8DcWpBAnRrIA11OwEACyAOQQFqIg4gE0cNAAsLIARBAEwNACAFQQBMDQBBBiANIAYbIQogBUH+////B3EhDSAFQQFxIRAgBSAHa0EDcSELQQAhDiAFQQFrIhEgB2tBA0khEgNAIAAgDkEBdGohBiAVIAwgDmxBAXRqIQkCQAJAAkACQAJAAkACQAJAAkACQCAHDgcAAgMEBQYHAQtBACEIIAchAiALBEADQCAGIAEgAmxBAXRqIAkvAQI7AQAgAkEBaiECIAlBAmohCSAIQQFqIgggC0cNAAsLIBINCANAIAYgASACbEEBdGogCS8BAjsBACAGIAJBAWogAWxBAXRqIAkvAQQ7AQAgBiACQQJqIAFsQQF0aiAJLwEGOwEAIAYgAkEDaiABbEEBdGogCS8BCDsBACAJQQhqIQkgAkEEaiICIAVHDQALDAgLIAkvAQAhCEEAIQIDQCAGIAEgAmxBAXRqIAkuAQRBOmwgCS4BAiIDQQpsaiAJLgEGIAjBakEBdGsgCnU7AQAgCUECaiEJIAMhCCACQQFqIgIgBUcNAAsMBwsgCS8BACEIQQAhAgNAIAYgASACbEEBdGogCS4BBEEKbCAJLgECIgNBOmxqIAkuAQYgCMFqQQF0ayAKdTsBACAJQQJqIQkgAyEIIAJBAWoiAiAFRw0ACwwGCyAJLwEAIQhBACECA0AgCMEhAyAGIAEgAmxBAXRqIAkuAQIiCEE2bCAJLgEEQQR0aiADQQJ0IAkuAQZBAXRqayAKdTsBACAJQQJqIQkgAkEBaiICIAVHDQALDAULIAkvAQAhCEEAIQIDQCAIwSEDIAYgASACbEEBdGogCS4BAiIIQS5sIANBemxqIAkuAQRBHGxqIAkuAQZBAnRrIAp1OwEAIAlBAmohCSACQQFqIgIgBUcNAAsMBAsgCS8BACEIQQAhAkEAIQ8gEUUNAgNAIAjBIQMgBiABIAJsQQF0aiAJLgEEIgggCS4BAiITakEkbCADIAkuAQYiFGpBAnRrIAp1OwEAIAYgAkEBciABbEEBdGogCCAUakEkbCATIAkuAQhqQQJ0ayAKdTsBACACQQJqIQIgCUEEaiEJIA9BAmoiDyANRw0ACwwCCyAJLwEAIQhBACECA0AgCMEhAyAGIAEgAmxBAXRqIAkuAQIiCEEcbCADQQJ0ayAJLgEEQS5saiAJLgEGQXpsaiAKdTsBACAJQQJqIQkgAkEBaiICIAVHDQALDAILIAkvAQAhCEEAIQIDQCAIwSEDIAYgASACbEEBdGogCS4BBEE2bCAJLgECIghBBHRqIANBAXQgCS4BBkECdGprIAp1OwEAIAlBAmohCSACQQFqIgIgBUcNAAsMAQsgEEUNACAGIAEgAmxBAXRqIAkuAQQgCS4BAmpBJGwgCS4BBiAIwWpBAnRrIAp1OwEACyAOQQFqIg4gBEcNAAsLC5YRARF/IAlBCGshDSMAIAQgBUEDaiIMbEEBdEEPakFwcWshFQJAIAVBfk4EQCAEQQBMDQEgAkEBayERIBVBAmohEiAFQQJqIgJBACACQQBKGyETIARB/v///wdxIRQgBEEBcSEWIAQgBmtBA3EhEEF/IQ4gBEEBayIXIAZrQQNJIRgDQCASIA5BAXRqIQsgESADIA5saiEJAkACQAJAAkACQAJAAkACQAJAAkAgBg4HAAIDBAUGBwELQQAhCCAGIQIgEARAA0AgCyACIAxsQQF0aiAJLQABOwEAIAJBAWohAiAJQQFqIQkgCEEBaiIIIBBHDQALCyAYDQgDQCALIAIgDGxBAXRqIAktAAE7AQAgCyACQQFqIAxsQQF0aiAJLQACOwEAIAsgAkECaiAMbEEBdGogCS0AAzsBACALIAJBA2ogDGxBAXRqIAktAAQ7AQAgCUEEaiEJIAJBBGoiAiAERw0ACwwICyAJLQAAIQhBACECA0AgCyACIAxsQQF0aiAJLQACQTpsIAktAAEiCkEKbGogCS0AAyAIQf8BcWpBAXRrIA11OwEAIAlBAWohCSAKIQggAkEBaiICIARHDQALDAcLIAktAAAhCEEAIQIDQCALIAIgDGxBAXRqIAktAAJBCmwgCS0AASIKQTpsaiAJLQADIAhB/wFxakEBdGsgDXU7AQAgCUEBaiEJIAohCCACQQFqIgIgBEcNAAsMBgsgCS0AACEIQQAhAgNAIAhB/wFxIQogCyACIAxsQQF0aiAJLQABIghBNmwgCS0AAkEEdGogCkECdCAJLQADQQF0amsgDXU7AQAgCUEBaiEJIAJBAWoiAiAERw0ACwwFCyAJLQAAIQhBACECA0AgCEH/AXEhCiALIAIgDGxBAXRqIAktAAEiCEEubCAKQXpsaiAJLQACQRxsaiAJLQADQQJ0ayANdTsBACAJQQFqIQkgAkEBaiICIARHDQALDAQLIAktAAAhCEEAIQJBACEPIBdFDQIDQCAIQf8BcSEKIAsgAiAMbEEBdGogCS0AAiIIIAktAAEiGWpBJGwgCiAJLQADIhpqQQJ0ayANdTsBACALIAJBAXIgDGxBAXRqIAggGmpBJGwgGSAJLQAEakECdGsgDXU7AQAgAkECaiECIAlBAmohCSAPQQJqIg8gFEcNAAsMAgsgCS0AACEIQQAhAgNAIAhB/wFxIQogCyACIAxsQQF0aiAJLQABIghBHGwgCkECdGsgCS0AAkEubGogCS0AA0F6bGogDXU7AQAgCUEBaiEJIAJBAWoiAiAERw0ACwwCCyAJLQAAIQhBACECA0AgCEH/AXEhCiALIAIgDGxBAXRqIAktAAJBNmwgCS0AASIIQQR0aiAKQQF0IAktAANBAnRqayANdTsBACAJQQFqIQkgAkEBaiICIARHDQALDAELIBZFDQAgCyACIAxsQQF0aiAJLQACIAktAAFqQSRsIAktAAMgCEH/AXFqQQJ0ayANdTsBAAsgDkEBaiIOIBNHDQALCyAEQQBMDQAgBUEATA0AQQYgDSAGGyEKIAVB/v///wdxIQ0gBUEBcSEQIAUgB2tBA3EhC0EAIQ4gBUEBayIRIAdrQQNJIRIDQCAAIA5BAXRqIQYgFSAMIA5sQQF0aiEJAkACQAJAAkACQAJAAkACQAJAAkAgBw4HAAIDBAUGBwELQQAhCCAHIQIgCwRAA0AgBiABIAJsQQF0aiAJLwECOwEAIAJBAWohAiAJQQJqIQkgCEEBaiIIIAtHDQALCyASDQgDQCAGIAEgAmxBAXRqIAkvAQI7AQAgBiACQQFqIAFsQQF0aiAJLwEEOwEAIAYgAkECaiABbEEBdGogCS8BBjsBACAGIAJBA2ogAWxBAXRqIAkvAQg7AQAgCUEIaiEJIAJBBGoiAiAFRw0ACwwICyAJLwEAIQhBACECA0AgBiABIAJsQQF0aiAJLgEEQTpsIAkuAQIiA0EKbGogCS4BBiAIwWpBAXRrIAp1OwEAIAlBAmohCSADIQggAkEBaiICIAVHDQALDAcLIAkvAQAhCEEAIQIDQCAGIAEgAmxBAXRqIAkuAQRBCmwgCS4BAiIDQTpsaiAJLgEGIAjBakEBdGsgCnU7AQAgCUECaiEJIAMhCCACQQFqIgIgBUcNAAsMBgsgCS8BACEIQQAhAgNAIAjBIQMgBiABIAJsQQF0aiAJLgECIghBNmwgCS4BBEEEdGogA0ECdCAJLgEGQQF0amsgCnU7AQAgCUECaiEJIAJBAWoiAiAFRw0ACwwFCyAJLwEAIQhBACECA0AgCMEhAyAGIAEgAmxBAXRqIAkuAQIiCEEubCADQXpsaiAJLgEEQRxsaiAJLgEGQQJ0ayAKdTsBACAJQQJqIQkgAkEBaiICIAVHDQALDAQLIAkvAQAhCEEAIQJBACEPIBFFDQIDQCAIwSEDIAYgASACbEEBdGogCS4BBCIIIAkuAQIiE2pBJGwgAyAJLgEGIhRqQQJ0ayAKdTsBACAGIAJBAXIgAWxBAXRqIAggFGpBJGwgEyAJLgEIakECdGsgCnU7AQAgAkECaiECIAlBBGohCSAPQQJqIg8gDUcNAAsMAgsgCS8BACEIQQAhAgNAIAjBIQMgBiABIAJsQQF0aiAJLgECIghBHGwgA0ECdGsgCS4BBEEubGogCS4BBkF6bGogCnU7AQAgCUECaiEJIAJBAWoiAiAFRw0ACwwCCyAJLwEAIQhBACECA0AgCMEhAyAGIAEgAmxBAXRqIAkuAQRBNmwgCS4BAiIIQQR0aiADQQF0IAkuAQZBAnRqayAKdTsBACAJQQJqIQkgAkEBaiICIAVHDQALDAELIBBFDQAgBiABIAJsQQF0aiAJLgEEIAkuAQJqQSRsIAkuAQYgCMFqQQJ0ayAKdTsBAAsgDkEBaiIOIARHDQALCwvwAQEDfwJAIAVBAEwNACAEQQBMDQBBDiAJayEGIARB/P///wdxIQsgBEEDcSEKQQAhCCAEQQRJIQwDQCACIAMgCGxBAXRqIQQgACABIAhsQQF0aiEJQQAhByAMRQRAA0AgCSAELwEAIAZ0OwEAIAkgBC8BAiAGdDsBAiAJIAQvAQQgBnQ7AQQgCSAELwEGIAZ0OwEGIARBCGohBCAJQQhqIQkgB0EEaiIHIAtHDQALC0EAIQcgCgRAA0AgCSAELwEAIAZ0OwEAIARBAmohBCAJQQJqIQkgB0EBaiIHIApHDQALCyAIQQFqIgggBUcNAAsLC+YBAQN/AkAgBUEATA0AIARBAEwNACAEQfz///8HcSEKIARBA3EhCUEAIQggBEEESSELA0AgAiADIAhsaiEEIAAgASAIbEEBdGohBkEAIQcgC0UEQANAIAYgBC0AAEEGdDsBACAGIAQtAAFBBnQ7AQIgBiAELQACQQZ0OwEEIAYgBC0AA0EGdDsBBiAEQQRqIQQgBkEIaiEGIAdBBGoiByAKRw0ACwtBACEHIAkEQANAIAYgBC0AAEEGdDsBACAEQQFqIQQgBkECaiEGIAdBAWoiByAJRw0ACwsgCEEBaiIIIAVHDQALCwv2AQEIfyAFQQFxRQRAAkAgBkEATA0AIAVBAEwNAEEPIAdrIQ1BAUEOIAdrdCEOQX8gB3RBf3MhCgNAIAAgASALbEEBdGohByADIAQgC2xBAXQiCGohDCACIAhqIQhBACEPA0AgByAMLgEAIA4gCC4BAGpqIA11IgkgCiAJIApIG0EAIAlBAE4bOwEAIAcgDC4BAiAOIAguAQJqaiANdSIJIAogCSAKSBtBACAJQQBOGzsBAiAMQQRqIQwgCEEEaiEIIAdBBGohByAPQQJqIg8gBUgNAAsgC0EBaiILIAZHDQALCw8LQfeOAUH59ABB7gFB7MIAEAEAC9ECAQd/IAtBAEoEQAJAIAZBAEwNACAFQQBMDQAgCCAKakEBaiALdCEPIAtBAWohEEF/IAx0QX9zIQggBUH+////B3EhEiAFQQFxIRMDQCAAIAEgDmxBAXRqIQsgAyAEIA5sQQF0IgpqIQwgAiAKaiEKQQAhESAFQQFHBEADQCALIAouAQAgB2wgD2ogDC4BACAJbGogEHUiDSAIIAggDUobQQAgDUEAThs7AQAgCyAKLgECIAdsIA9qIAwuAQIgCWxqIBB1Ig0gCCAIIA1KG0EAIA1BAE4bOwECIAxBBGohDCAKQQRqIQogC0EEaiELIBFBAmoiESASRw0ACwsgEwRAIAsgCi4BACAHbCAPaiAMLgEAIAlsaiAQdSIKIAggCCAKShtBACAKQQBOGzsBAAsgDkEBaiIOIAZHDQALCw8LQc+NAUH59ABB1QFBjsMAEAEAC6UCAQh/IAhBAEoEQAJAIAVBAEwNACAEQQBMDQBBASAIQQFrdCEOQX8gCXRBf3MhCiAEQf7///8HcSEQIARBAXEhEQNAIAAgASANbEEBdGohCSACIAMgDWxBAXRqIQtBACEPIARBAUcEQANAIAkgCy4BACAGbCAOaiAIdSAHaiIMIAogCiAMShtBACAMQQBOGzsBACAJIAsuAQIgBmwgDmogCHUgB2oiDCAKIAogDEobQQAgDEEAThs7AQIgC0EEaiELIAlBBGohCSAPQQJqIg8gEEcNAAsLIBEEQCAJIAsuAQAgBmwgDmogCHUgB2oiCSAKIAkgCkgbQQAgCUEAThs7AQALIA1BAWoiDSAFRw0ACwsPC0HPjQFB+fQAQcEBQc7DABABAAviAQEHfyAEQQFxRQRAAkAgBUEATA0AIARBAEwNAEEBQQ0gBmt0QQAgBkEOSBshC0EOIAZrIQxBfyAGdEF/cyEIA0AgACABIAlsQQF0aiEGIAIgAyAJbEEBdGohCkEAIQ0DQCAGIAsgCi4BAGogDHUiByAIIAcgCEgbQQAgB0EAThs7AQAgBiALIAouAQJqIAx1IgcgCCAHIAhIG0EAIAdBAE4bOwECIApBBGohCiAGQQRqIQYgDUECaiINIARIDQALIAlBAWoiCSAFRw0ACwsPC0H3jgFB+fQAQawBQa7DABABAAvgAQEGfyAFQQFxRQRAAkAgBkEATA0AIAVBAEwNAANAIAAgASAJbGohCiADIAQgCWxBAXQiCGohCyACIAhqIQhBACEMA0AgCkH/ASAILgEAIAsuAQBqQUBrQQd1IgcgB0H/AU4bIgdBACAHQQBKGzoAACAKQf8BIAguAQIgCy4BAmpBQGtBB3UiByAHQf8BThsiB0EAIAdBAEobOgABIAtBBGohCyAIQQRqIQggCkECaiEKIAxBAmoiDCAFSA0ACyAJQQFqIgkgBkcNAAsLDwtB944BQfn0AEHpAEHVwQAQAQAL0AIBB38gC0EASgRAAkAgBkEATA0AIAVBAEwNACAIIApqQQFqIAt0IQ4gC0EBaiEPIAVB/v///wdxIREgBUEBcSESA0AgACABIA1saiELIAMgBCANbEEBdCIIaiEKIAIgCGohCEEAIRAgBUEBRwRAA0AgC0H/ASAILgEAIAdsIA5qIAouAQAgCWxqIA91IgwgDEH/AU4bIgxBACAMQQBKGzoAACALQf8BIAguAQIgB2wgDmogCi4BAiAJbGogD3UiDCAMQf8BThsiDEEAIAxBAEobOgABIApBBGohCiAIQQRqIQggC0ECaiELIBBBAmoiECARRw0ACwsgEgRAIAtB/wEgCC4BACAHbCAOaiAKLgEAIAlsaiAPdSIIIAhB/wFOGyIIQQAgCEEAShs6AAALIA1BAWoiDSAGRw0ACwsPC0HPjQFB+fQAQdAAQfbBABABAAuSAgEEfyMAQSBrIgMkACABIAJBACABKAIAKAIsEQQAIQQgAiABKAJsIAEoAmhrQf8BcRBIIAEoAmgiBSABKAJsRwRAA0AgAiAFIAZqLQAAEEggBkEBaiIGIAEoAmwgASgCaCIFa0kNAAsLIAIgBDYCDCADQQxqIAEgAiACKAIEIAQgAigCAGprQQAgASgCACgCMBEHACACIAIoAgQgAigCAGs2AgwgAywAH0EASARAIAMoAhwaIAMoAhQQKgsgAEGQpQUpAgA3AgAgAEEIaiEAAkBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIANBIGokAAujAgEIfyAIQQBKBEACQCAFQQBMDQAgBEEATA0AQQEgCEEBa3QhDSAEQf7///8HcSEPIARBAXEhEANAIAAgASAMbGohCSACIAMgDGxBAXRqIQtBACEOIARBAUcEQANAIAlB/wEgCy4BACAGbCANaiAIdSAHaiIKIApB/wFOGyIKQQAgCkEAShs6AAAgCUH/ASALLgECIAZsIA1qIAh1IAdqIgogCkH/AU4bIgpBACAKQQBKGzoAASALQQRqIQsgCUECaiEJIA5BAmoiDiAPRw0ACwsgEARAIAlB/wEgCy4BACAGbCANaiAIdSAHaiIJIAlB/wFOGyIJQQAgCUEAShs6AAALIAxBAWoiDCAFRw0ACwsPC0HPjQFB+fQAQTxBtMIAEAEAC8MBAQV/IARBAXFFBEACQCAFQQBMDQAgBEEATA0AA0AgACABIAdsaiEIIAIgAyAHbEEBdGohCUEAIQoDQCAIQf8BIAkuAQBBIGpBBnUiBiAGQf8BThsiBkEAIAZBAEobOgAAIAhB/wEgCS4BAkEgakEGdSIGIAZB/wFOGyIGQQAgBkEAShs6AAEgCUEEaiEJIAhBAmohCCAKQQJqIgogBEgNAAsgB0EBaiIHIAVHDQALCw8LQfeOAUH59ABBKEGVwgAQAQALDQAgAEEgIAEgAhCJBgsNACAAQRAgASACEIkGC7wUAXx/IAAgAS8BDiITIAEvAQYiDmoiByABLwEKIhcgAS8BAiIYaiIJaiIEIAEvAQwiGSABLwEEIhpqIgogAS8BCCIbIAEvAQAiIGoiDGoiBWoiBiABIAJBA3RqIgMvAQ4iISADLwEGIiJqIg8gAy8BCiIjIAMvAQIiJGoiEGoiCyADLwEMIiUgAy8BBCImaiIRIAMvAQgiJyADLwEAIihqIhRqIg1qIghrIhIgASACQQJ0aiIDLwEOIjIgAy8BBiIzaiIpIAMvAQoiNCADLwECIjVqIipqIhwgAy8BDCI2IAMvAQQiN2oiKyADLwEIIjggAy8BACI5aiIsaiIdaiIVIAEgAkEMbGoiAy8BDiI6IAMvAQYiO2oiLSADLwEKIjwgAy8BAiI9aiIuaiIeIAMvAQwiPiADLwEEIj9qIi8gAy8BCCJAIAMvAQAiQWoiMGoiMWoiH2siFmsiQiABIAJBAXRqIgMvAQ4iQyADLwEGIkRqIkUgAy8BCiJGIAMvAQIiR2oiSGoiSSADLwEMIkogAy8BBCJLaiJMIAMvAQgiTSADLwEAIk5qIk9qIlBqIlEgASACQQpsaiIDLwEOIlIgAy8BBiJTaiJUIAMvAQoiVSADLwECIlZqIldqIlggAy8BDCJZIAMvAQQiWmoiWyADLwEIIlwgAy8BACJdaiJeaiJfaiJgayJhIAEgAkEGbGoiAy8BDiJiIAMvAQYiY2oiZCADLwEKImUgAy8BAiJmaiJnaiJoIAMvAQwiaSADLwEEImpqImsgAy8BCCJsIAMvAQAiA2oibWoibmoibyABIAJBDmxqIgEvAQ4iAiABLwEGInBqInEgAS8BCiJyIAEvAQIic2oidGoidSABLwEMInYgAS8BBCJ3aiJ4IAEvAQgieSABLwEAIgFqInpqIntqInxrIn1rIn5rOwFwIAAgQiB+ajsBYCAAIBIgFmoiEiBhIH1qIhZrOwFQIAAgEiAWajsBQCAAIAYgCGoiBiAVIB9qIghrIhIgUSBgaiIVIG8gfGoiH2siFms7ATAgACASIBZqOwEgIAAgBiAIaiIGIBUgH2oiCGs7ARAgACAGIAhqOwEAIAAgBSAEayIEIA0gC2siBWsiBiAdIBxrIgsgMSAeayINayIIayISIFAgSWsiHCBfIFhrIh1rIhUgbiBoayIeIHsgdWsiMWsiH2siFms7AXIgACASIBZqOwFiIAAgBiAIaiIGIBUgH2oiCGs7AVIgACAGIAhqOwFCIAAgBCAFaiIEIAsgDWoiBWsiBiAcIB1qIgsgHiAxaiINayIIazsBMiAAIAYgCGo7ASIgACAEIAVqIgQgCyANaiIFazsBEiAAIAQgBWo7AQIgACAJIAdrIgcgDCAKayIJaiIEIBAgD2siCiAUIBFrIgxqIgVrIgYgKiApayIPICwgK2siEGoiCyAuIC1rIhEgMCAvayIUaiINayIIayISIEggRWsiKSBPIExrIipqIhwgVyBUayIrIF4gW2siLGoiHWsiFSBnIGRrIi0gbSBrayIuaiIeIHQgcWsiLyB6IHhrIjBqIjFrIh9rIhZrOwF0IAAgEiAWajsBZCAAIAYgCGoiBiAVIB9qIghrOwFUIAAgBiAIajsBRCAAIAQgBWoiBCALIA1qIgVrIgYgHCAdaiILIB4gMWoiDWsiCGs7ATQgACAGIAhqOwEkIAAgBCAFaiIEIAsgDWoiBWs7ARQgACAEIAVqOwEEIAAgCSAHayIHIAwgCmsiCWsiBCAQIA9rIgogFCARayIMayIFayIGICogKWsiDyAsICtrIhBrIgsgLiAtayIRIDAgL2siFGsiDWsiCGs7AXYgACAGIAhqOwFmIAAgBCAFaiIEIAsgDWoiBWs7AVYgACAEIAVqOwFGIAAgByAJaiIHIAogDGoiCWsiBCAPIBBqIgogESAUaiIMayIFazsBNiAAIAQgBWo7ASYgACAHIAlqIgcgCiAMaiIJazsBFiAAIAcgCWo7AQYgACAOIBNrIhMgGCAXayIOaiIHIBogGWsiFyAgIBtrIhhqIglqIgQgIiAhayIZICQgI2siGmoiCiAmICVrIhsgKCAnayIgaiIMaiIFayIGIDMgMmsiISA1IDRrIiJqIg8gNyA2ayIjIDkgOGsiJGoiEGoiCyA7IDprIiUgPSA8ayImaiIRID8gPmsiJyBBIEBrIihqIhRqIg1rIghrIhIgRCBDayIyIEcgRmsiM2oiKSBLIEprIjQgTiBNayI1aiIqaiIcIFMgUmsiNiBWIFVrIjdqIisgWiBZayI4IF0gXGsiOWoiLGoiHWsiFSBjIGJrIjogZiBlayI7aiItIGogaWsiPCADIGxrIgNqIj1qIi4gcCACayICIHMgcmsiHmoiPiB3IHZrIj8gASB5ayIBaiIvaiJAayJBayIwazsBeCAAIBIgMGo7AWggACAGIAhqIgYgFSBBaiIIazsBWCAAIAYgCGo7AUggACAEIAVqIgQgCyANaiIFayIGIBwgHWoiCyAuIEBqIg1rIghrOwE4IAAgBiAIajsBKCAAIAQgBWoiBCALIA1qIgVrOwEYIAAgBCAFajsBCCAAIAkgB2siByAMIAprIglrIgQgECAPayIKIBQgEWsiDGsiBWsiBiAqIClrIg8gLCArayIQayILID0gLWsiESAvID5rIhRrIg1rIghrOwF6IAAgBiAIajsBaiAAIAQgBWoiBCALIA1qIgVrOwFaIAAgBCAFajsBSiAAIAcgCWoiByAKIAxqIglrIgQgDyAQaiIKIBEgFGoiDGsiBWs7ATogACAEIAVqOwEqIAAgByAJaiIHIAogDGoiCWs7ARogACAHIAlqOwEKIAAgDiATayITIBggF2siDmoiByAaIBlrIhcgICAbayIYaiIJayIEICIgIWsiGSAkICNrIhpqIgogJiAlayIbICggJ2siIGoiDGsiBWsiBiAzIDJrIiEgNSA0ayIiaiIPIDcgNmsiIyA5IDhrIiRqIhBrIgsgOyA6ayIlIAMgPGsiA2oiJiAeIAJrIgIgASA/ayIBaiIRayInayIoazsBfCAAIAYgKGo7AWwgACAEIAVqIgQgCyAnaiIFazsBXCAAIAQgBWo7AUwgACAHIAlqIgcgCiAMaiIJayIEIA8gEGoiCiARICZqIgxrIgVrOwE8IAAgBCAFajsBLCAAIAcgCWoiByAKIAxqIglrOwEcIAAgByAJajsBDCAAIAEgAmsiASADICVrIgJqIgMgJCAjayIHICIgIWsiCWoiBGoiCiAgIBtrIhsgGiAZayIZaiIaIBggF2siFyAOIBNrIhNqIg5qIhhqOwEOIAAgGCAKazsBHiAAIAQgA2siAyAOIBprIg5qOwEuIAAgDiADazsBPiAAIAIgAWsiASAJIAdrIgJqIgMgGSAbayIOIBMgF2siE2oiB2o7AU4gACAHIANrOwFeIAAgAiABayIBIBMgDmsiAmo7AW4gACACIAFrOwF+C/wDARx/IAAgAS8BBiIHIAEvAQIiCGoiBCABLwEEIgsgAS8BACIMaiIFaiIGIAEgAkECdGoiAy8BBiINIAMvAQIiDmoiCSADLwEEIg8gAy8BACIRaiIQaiIKayISIAEgAkEBdGoiAy8BBiITIAMvAQIiFGoiFSADLwEEIhYgAy8BACIDaiIXaiIYIAEgAkEGbGoiAS8BBiICIAEvAQIiGWoiGiABLwEEIhsgAS8BACIBaiIcaiIdayIeazsBGCAAIBIgHmo7ARAgACAGIApqIgYgGCAdaiIKazsBCCAAIAYgCmo7AQAgACAFIARrIgQgECAJayIFayIGIBcgFWsiCSAcIBprIhBrIgprOwEaIAAgBiAKajsBEiAAIAQgBWoiBCAJIBBqIgVrOwEKIAAgBCAFajsBAiAAIAggB2siByAMIAtrIghqIgQgDiANayILIBEgD2siDGoiBWsiBiAUIBNrIg0gAyAWayIDaiIOIBkgAmsiAiABIBtrIgFqIglrIg9rOwEcIAAgBiAPajsBFCAAIAQgBWoiBCAJIA5qIgVrOwEMIAAgBCAFajsBBCAAIAggB2siByAMIAtrIghrIgQgAyANayIDIAEgAmsiAWsiAms7AR4gACACIARqOwEWIAAgByAIaiICIAEgA2oiAWs7AQ4gACABIAJqOwEGCw0AIABBICABIAIQ6QILDQAgAEEQIAEgAhDpAgsNACAAQQggASACEOkCC+wFAQR/IwBBoAFrIgMkACADQeTVAzYCRCADQfDVAygCACIGNgIMIANBDGoiBCAGQQxrKAIAakH01QMoAgA2AgAgBCADKAIMQQxrKAIAaiIGIANBEGoiBRA+IAZCgICAgHA3AkggA0Hk1QM2AkQgA0HQ1QM2AgwgBRA/IgZB8MsDNgIAIANCADcCOCADQgA3AjAgA0EQNgJAIANBlAFqIgUgASACEFkgBCADKAKUASAFIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiAkEASCIEGyADKAKYASACIAQbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGoiAkGdugFBEhAtGgJAIAEoAmgiBCABKAJsRg0AIAIgBC0AABBCGkEBIQIgASgCbCABKAJoa0EBTQ0AA0AgA0EMaiIEQZ6dAUEBEC0aIAQgASgCaCACai0AABBCGiACQQFqIgIgASgCbCABKAJoa0kNAAsLIANBDGpBz5ACQQEQLRoCQAJ/IAMoAkAiAUEQcQRAIAMoAjwiASADKAIoIgJJBEAgAyACNgI8IAIhAQsgA0EkagwBCyABQQhxRQRAQQAhASAAQQA6AAsMAgsgAygCICEBIANBGGoLIQICQCABIAIoAgAiBGsiAUH4////B0kEQCABQQtPBEAgAUEHckEBaiIFECwhAiAAIAVBgICAgHhyNgIIIAAgAjYCACAAIAE2AgQgAiEADAILIAAgAToACyABDQFBACEBDAILEDgACyAAIAQgARA3GgsgACABakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBhA9GiADQcQAahA7GiADQaABaiQACw0AIABBBCABIAIQ6QILDwAgACACQSAgASADEOoCCw8AIAAgAkEQIAEgAxDqAgsPACAAIAJBCCABIAMQ6gILDwAgACACQQQgASADEOoCCw0AIAAgAkEgIAEQ6wILDQAgACACQRAgARDrAgsNACAAIAJBCCABEOsCC60DAgR/AX4jAEEgayIDJAAgAyABIAIQeyADLAATQQBIBEAgAygCEBogAygCCBAqCwJAIAEtAGEEQCAAIAFBhsQAEJEBDAELIAIQUiEEIAIoAgAiBSAFKAIAKAIIERIAIQggAigCACIFIAggBK18IAUoAgAoAgwREAAEQCADQQA6ABQgA0EAOgAfIABBAkHkACADQRRqEC8aIAMsAB9BAE4NASADKAIcGiADKAIUECoMAQsgAUHoAGohBQJAIAEoAmwgASgCaCIHayIGIARJBEAgBSAEIAZrEGUMAQsgBCAGTw0AIAEgBCAHajYCbAsgBARAQQAhAQNAIAIQUiEGIAUoAgAgAWogBjoAACABQQFqIgEgBEcNAAsLIAItABRBAUYEQCADQQA6ABQgA0EAOgAfIABBAkHkACADQRRqEC8aIAMsAB9BAE4NASADKAIcGiADKAIUECoMAQsgAEGQpQUpAgA3AgAgAEEIaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADQSBqJAALDQAgACACQQQgARDrAgsPACAAQSAgASACIAMQ7AILDwAgAEEQIAEgAiADEOwCCw8AIABBCCABIAIgAxDsAgsPACAAQQQgASACIAMQ7AILowsBGX8gAS4BCiEc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LRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0GUAWoiBCACEDUgA0EMaiADKAKUASAEIAMsAJ8BIgRBAEgiBRsgAygCmAEgBCAFGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqQZDDAUEJEC0gASgCaBA8Qc+QAkEBEC0hBCADQZQBaiIFIAIQNSAEIAMoApQBIAUgAywAnwEiBUEASCIGGyADKAKYASAFIAYbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIARB1LEBQRcQLSABLwFsEDxBz5ACQQEQLSEEIANBlAFqIgUgAhA1IAQgAygClAEgBSADLACfASIFQQBIIgYbIAMoApgBIAUgBhsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgBEHBvgFBCxAtIQggAyABKAJwEKQBIAggAygCACADIAMsAAsiBEEASCIFGyADKAIEIAQgBRsQLUHPkAJBARAtIQQgA0GUAWoiBSACEDUgBCADKAKUASAFIAMsAJ8BIgVBAEgiBhsgAygCmAEgBSAGGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyAEQaK/AUELEC0gASgCdCABQfQAaiABLAB/IgRBAEgiBRsgASgCeCAEIAUbEC1Bz5ACQQEQLRogAywAC0EASARAIAMoAggaIAMoAgAQKgsgASgCcCIEQeXapesGRgR/IANBlAFqIgQgAhA1IANBDGogAygClAEgBCADLACfASIEQQBIIgUbIAMoApgBIAQgBRsQLRogAywAnwFBAEgEQCADKAKcARogAygClAEQKgsgA0EMakHyvQFBDhAtIAEoAoABIAFBgAFqIAEsAIsBIgRBAEgiBRsgASgChAEgBCAFGxAtQc+QAkEBEC0hBCADQZQBaiIFIAIQNSAEIAMoApQBIAUgAywAnwEiBUEASCIGGyADKAKYASAFIAYbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIARBjbsBQRIQLSABKAKMASABQYwBaiABLACXASIEQQBIIgUbIAEoApABIAQgBRsQLUHPkAJBARAtGiABKAJwBSAEC0Gg0smrB0YEQCADQZQBaiIEIAIQNSADQQxqIAMoApQBIAQgAywAnwEiBEEASCIFGyADKAKYASAEIAUbEC0aIAMsAJ8BQQBIBEAgAygCnAEaIAMoApQBECoLIANBDGpB+r4BQQ8QLSABKAKYASABQZgBaiABLACjASIEQQBIIgUbIAEoApwBIAQgBRsQLUHPkAJBARAtGgsgA0GUAWoiBCACEDUgA0EMaiADKAKUASAEIAMsAJ8BIgJBAEgiBBsgAygCmAEgAiAEGxAtGiADLACfAUEASARAIAMoApwBGiADKAKUARAqCyADQQxqQca5AUENEC0iAiACKAIAQQxrKAIAaiIEIAQoAgRBAXI2AgQgAiABLQCkARDQAkHPkAJBARAtGgJAAn8gAygCQCIBQRBxBEAgAygCPCIBIAMoAigiAkkEQCADIAI2AjwgAiEBCyADQSRqDAELIAFBCHFFBEBBACEBIABBADoACwwCCyADKAIgIQEgA0EYagshAgJAIAEgAigCACIEayIBQfj///8HSQRAIAFBC08EQCABQQdyQQFqIgUQLCECIAAgBUGAgICAeHI2AgggACACNgIAIAAgATYCBCACIQAMAgsgACABOgALIAENAUEAIQEMAgsQOAALIAAgBCABEDcaCyAAIAFqQQA6AAAgA0Hs1QMoAgAiADYCDCAAQQxrKAIAIANBDGpqQfjVAygCADYCACAHQfDLAzYCACADLAA7QQBIBEAgAygCOBogAygCMBAqCyAHED0aIANBxABqEDsaIANBoAFqJAALBwAgACgCFAslAQF/IAFBAk0EfyAAKAJ8IAFBAnRB3OwCaigCAGooAgAFQQALCyIBAX8gAUECTQR/IAAgAUECdEHQ7AJqKAIAaigCAAVBAAsLIgEBfyABQQJNBH8gACABQQJ0QcTsAmooAgBqKAIABUEACwsJACAAIAEQigYLkgMBA38jAEEgayIDJAAgASACQQAgASgCACgCLBEEACEFAkAgAS0AYSIEQQFNBEAgAiABLwFoEE0gAiABLwFsEE0gAiABQfQAahCgASACIAFBgAFqEKABIAIgAUGMAWoQoAEgAS0AYSIEQQJJDQELAkACQAJAIARBAmsOAgABAgsgAiABLwFoEE0MAQsgAiABKAJoEEoLIAIgAS8BbBBNIAIgASgCcBBKIAIgAUH0AGoQoAEgAiABKAJwIgRBoNLJqwdGBH9BmAEFIARB5dql6wZHDQEgAiABQYABahCgAUGMAQsgAWoQoAEL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CBEAACAIECsLIA9FDQAgDyAPKAIEIgBBAWs2AgQgAA0AIA8gDygCACgCCBEAACAPECsLIAdBgAFqJAAL/wEBAn8jAEEgayIFJAACQCACKAIABEAgAEEANgIIIABCADcCAAwBCyACKAIEQQNHBEAgAEEANgIIIABCADcCAAwBCyAEKAIEQQJHBEAgAEEANgIIIABCADcCAAwBCyACKAIMQQhMBEAgAEEANgIIIABCADcCAAwBCyACLwEYRQRAIABBADYCCCAAQgA3AgAMAQsgAygCBCEGIABBADYCCCAAQgA3AgAgBkECRw0AIAVBBGoQxgEiAUKAgICAIDcCACABIAItAAg6AAggASACKAIMNgIMIAEgAigCFDYCFCABIAIoABc2ABcgBUELNgIAIAAgASAFEGILIAVBIGokAAu1AQIDfwF+IABBADYAeUECIAAtAHgiASABQQJNGyABIAAoAmwiAyAAKAJoIgFrQeD//wBLGyECIAEgA0YEf0EEBQNAQQFBAiACIAJBAkwbIAIgASgCAEH//wNLGyICIAJBAUwbIAIgAS0ABBshAiABKAIQKQMQIAR8IQQgAUEgaiIBIANHDQALQQhBBCAEQoCAgIAPfUKAgICAcFQbCyEBIABBhAg7AHkgACABOgB7IAAgAjoAYQuxFQEdfyMAQYABayIHJAAgAigCAEEAEEAhASACKAIAQQEQQCEEIAIoAgBBAhBAIQUgAigCAEEGEGQiFARAIAIoAgBBBhBAIRULAkACQAJAIAFBCEsNACAEQQhLDQAgBUEJSQ0BCyAAQgA3AgAgAEGkpQUpAgA3AgggAEEQaiEAQbelBSwAAEEATgRAIABBrKUFKQIANwIAIABBtKUFKAIANgIIDAILIABBrKUFKAIAQbClBSgCABAuDAELIAEgBEYgASAFRnFFBEAgAEIANwIAIABBpKUFKQIANwIIIABBEGohAEG3pQUsAABBAE4EQCAAQaylBSkCADcCACAAQbSlBSgCADYCCAwCCyAAQaylBSgCAEGwpQUoAgAQLgwBCyACKAIAIgMoAjAiDgRAIA4gDigCBEEBajYCBCACKAIAIQMLIAMoAhwhCiADKAIYIQtBiAEQLCIIQazjBDYCACAIQgA3AgQgCEEUakEAQegAEDQaIAggCCgCBCIJQQFqIg82AgQgCEIANwI4IAhC44CA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LQAAOgAAIAEgCSANbGogAyANIBJsai0AADoAACACQQJqIQIgFkECaiIWIBFHDQALCyAQQQFxRQ0AIAQgAiATbGogBiACIA9sai0AADoAACABIAIgCWxqIAMgAiASbGotAAA6AAALIApFDQELIAtBAWsiAwRAQQAhAQNAIAEgEmwhBCABIA9sIQYgGiABIAlsaiENIBkgASATbGohEEEAIQIDQCAYIAIgBGpqIhEtAAAhFiARLQABIREgECACQQF2IiJqIBcgAiAGamoiIy0AACAjLQABakEBakEBdjoAACANICJqIBEgFmpBAWpBAXY6AAAgAkECaiICIANJDQALIAFBAWoiASAKRw0ACwsgCyAVQQhLdCEBQQAhAgNAIB0gAiAebGogGyACIBxsaiALEDIaIBQEQCAhIAIgBWxqIB8gAiAgbGogARAyGgsgAkEBaiICIApHDQALCyAAIAg2AgQgACAMNgIAIAggCCgCBEEBajYCBCAAQZClBSkCADcCCCAAQRBqIQBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIAggCCgCBCIAQQFrNgIEIABFBEAgCCAIKAIAKAIIEQAAIAgQKwsgDkUNACAOIA4oAgQiAEEBazYCBCAADQAgDiAOKAIAKAIIEQAAIA4QKwsgB0GAAWokAAv/AQECfyMAQSBrIgUkAAJAIAIoAgAEQCAAQQA2AgggAEIANwIADAELIAIoAgRBA0cEQCAAQQA2AgggAEIANwIADAELIAQoAgRBAkcEQCAAQQA2AgggAEIANwIADAELIAIoAgxBCU4EQCAAQQA2AgggAEIANwIADAELIAIvARhFBEAgAEEANgIIIABCADcCAAwBCyADKAIEIQYgAEEANgIIIABCADcCACAGQQJHDQAgBUEEahDGASIBQoCAgIAgNwIAIAEgAi0ACDoACCABIAIoAgw2AgwgASACKAIUNgIUIAEgAigAFzYAFyAFQQs2AgAgACABIAUQYgsgBUEgaiQAC5cYASJ/IwBBgAFrIgckACACKAIAQQAQQCEDIAIoAgBBARBAIQUgAigCAEECEEAhCSACKAIAQQYQZCIaBEAgAigCAEEGEEAhGwsCQAJAAkAgA0EJSQ0AIAVBCUkNACAJQQhLDQELIABC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QQAMAQtBACABKAIQQQZKDQAaIAEoAjQhGSABKAIsCyEFAn9BACADKAIAIgFFDQAaIAMhAgNAIAIgASABKAIQQQpIIgYbIQIgASAGQQJ0aigCACIBDQALQQAgAiADRg0AGkEAIAIoAhBBCkoNABogAigCNCETIAIoAiwLIQMgEQRAIA1BfnEhFCANQQFxIRUgDUEBayEWQQAhAgNAAkAgBC0ACEUEQCANRQ0BIAMgAiATbGohCyAPIAIgEmxqIQxBACEBQQAhBiAWBEADQCALIAFBA2xqIgggASAMai0AACIJOgAAIAggCToAAiAIIAk6AAEgCyABQQFyIglBA2xqIgggCSAMai0AACIJOgACIAggCToAASAIIAk6AAAgAUECaiEBIAZBAmoiBiAURw0ACwsgFUUNASALIAFBA2xqIgYgASAMai0AACIBOgAAIAYgAToAAiAGIAE6AAEMAQsgF0UEQCANRQ0BIAMgAiATbGohCyAPIAIgEmxqIQxBACEBQQAhBiAWBEADQCALIAFBAnRqIgggASAMai0AACIJOgAAIAhB/wE6AAMgCCAJOgACIAggCToAASAMIAFBAXIiCWotAAAhCCALIAlBAnRqIglB/wE6AAMgCSAIOgACIAkgCDoAASAJIAg6AAAgAUECaiEBIAZBAmoiBiAURw0ACwsgFUUNASALIAFBAnRqIgYgASAMai0AACIBOgAAIAZB/wE6AAMgBiABOgACIAYgAToAAQwBCyANRQ0AIAIgGWwhBiADIAIgE2xqIQsgDyACIBJsaiEMQQAhAUEAIQkgFgRAA0AgCyABQQJ0aiIIIAEgDGotAAAiEDoAACAIIBA6AAIgCCAQOgABIAggBSABIAZqai0AADoAAyALIAFBAXIiEEECdGoiCCAMIBBqLQAAIhg6AAIgCCAYOgABIAggGDoAACAIIAUgBiAQamotAAA6AAMgAUECaiEBIAlBAmoiCSAURw0ACwsgFUUNACALIAFBAnRqIgsgASAMai0AACIMOgAAIAsgDDoAAiALIAw6AAEgCyAFIAEgBmpqLQAAOgADCyACQQFqIgIgEUcNAAsLIAAgBzYCBCAAIA42AgAgByAHKAIEQQFqNgIEIABBkKUFKQIANwIIIABBEGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgByAHKAIEIgBBAWs2AgQgAA0AIAcgBygCACgCCBEAACAHECsLIApBIGokAAv+AQEBfyMAQSBrIgEkACACKAIMIQMgAigCBCEEIAIoAgAhBSAAQQA2AgggAEIANwIAAkAgBUECRw0AIAQNACADQQhHDQAgAUEBOgAeIAFBAjsBHCABQYKACDYCGCABQQA6AAwgAULjgICAsAw3AgQgAUEINgIQIAFBzOYENgIUIAFBAToAHiABQQY7ARwgAUGBgDQ2AhggAi0ACEUEQCABQQg2AhAgAUEAOgAMIAFCgYCAgKABNwIEIAFBCzYCACAAIAFBBGogARBiCyABQQg2AhAgAUEBOgAMIAFCgYCAgLABNwIEIAFBCzYCACAAIAFBBGogARBiCyABQSBqJAALgBcBGH8jAEGAAWsiBSQAQYgBECwiB0IANwIEIAdBrOMENgIAIAdBFGpBAEHoABA0GiAHIAcoAgQiAUEBaiIENgIEIAdCADcCOCAHQuOAgICwDDcCLCAHQa4gNgIgIAdBQGtCADcCACAHQQA2AoQBIAdCADcCfCAHQoGAgIAQNwJUIAcgB0HMAGoiAzYCSCAHQgA3AlwgB0IANwJkIAdCADcCbCAHQgA3AHEgByAHQQxqIhA2AgwgByAHKAIIQQFqNgIIIAcgATYCBCAHIAc2AhAgBEUEQCAHIAcoAgAoAggRAAAgBxArCyACKAIAIgEoAhgiDSEEIAEoAhwiCiEBIBBBATYCJCAQQQA2AiAgECABNgIcIBAgBDYCGCAFQThqIBBBACANIAogAigCAEEAEEAiDCAGEDogBUEgaiAQQQEgDUEBaiIJQQF2IgggCkEBaiIOQQF2IhIgDCAGEDogBUHYAGohAQJAIAUoAjgEQCAFIAUpAzg3A1AgBSwAS0EATgRAIAEgBUFAayIEKQMANwMAIAEgBCgCCDYCCAwCCyABIAUoAkAgBSgCRBAuDAELIAUgBSkDIDcDUCAFLAAzQQBOBEAgASAFKQMoNwMAIAEgBSgCMDYCCAwBCyABIAUoAiggBSgCLBAuCyAFQQhqIBBBAiAIIBIgDCAGEDogBUHwAGohBAJAIAUoAlAEQCAFIAUpA1A3A2ggBSwAY0EATgRAIAQgASkDADcDACAEIAEoAgg2AggMAgsgBCAFKAJYIAUoAlwQLgwBCyAFIAUpAwg3A2ggBSwAG0EATgRAIAQgBSkDEDcDACAEIAUoAhg2AggMAQsgBCAFKAIQIAUoAhQQLgsgBSwAG0EASARAIAUoAhgaIAUoAhAQKgsgBSwAY0EASARAIAUoAmAaIAUoAlgQKgsgBSwAM0EASARAIAUoAjAaIAUoAigQKgsgBSwAS0EASARAIAUoAkgaIAUoAkAQKgsCQCAFKAJoBEAgAEIANwIAIAAgBSkDaDcCCCAAQRBqIQAgBSwAe0EATgRAIAAgBCkCADcCACAAIAQoAgg2AggMAgsgACAFKAJwIAUoAnQQLiAFLAB7QQBODQEgBSgCeBogBSgCcBAqDAELIAUsAHtBAEgEQCAFKAJ4GiAFKAJwECoLAkAgAigCAEEGEGQiFEUNACAFQegAaiAQQQYgDSAKIAIoAgBBBhBAIhUgBhA6IAUoAmgEQCAAQgA3AgAgACAFKQNoNwIIIABBEGohACAFLAB7QQBOBEAgACAFKQJwNwIAIAAgBSgCeDYCCAwDCyAAIAUoAnAgBSgCdBAuIAUsAHtBAE4NAiAFKAJ4GiAFKAJwECoMAgsgBSwAe0EATg0AIAUoAngaIAUoAnAQKgsgAigCACIBQUBrIQQgASgCQCEGAkACfwJAIAxBCE0EQEEAIQkgBkUNASAEIQEDQCABIAYgBigCECIIQQBIGyEBIAYgCEEddkEEcWooAgAiBg0ACyABIARGDQFBACABKAIQQQBKDQIaIAEoAiwhCyABKAI0DAILAn8CQCAGRQ0AIAQhAQNAIAEgBiAGKAIQIhFBAEgbIQEgBiARQR12QQRxaigCACIGDQALIAEgBEYNAEEAIAEoAhBBAEoNARogASgCNCEWIAEoAiwMAQtBAAshEQJ/AkACQCADKAIAIgZFBEBBACEEDAELIAMhBCAGIQEDQCAEIAEgASgCECILQQBIGyEEIAEgC0EddkEEcWooAgAiAQ0ACwJ/QQAgAyAERg0AGkEAIAQoAhBBAEoNABogBCgCNCEXIAQoAiwLIQsgAyEEIAYhAQNAIAQgASABKAIQQQBMIg8bIQQgASAPQQJ0aigCACIBDQALAn9BACADIARGDQAaQQAgBCgCEEEBSg0AGiAEKAIsIRggBCgCNAshBCADIQEDQCABIAYgBigCEEECSCIPGyEBIAYgD0ECdGooAgAiBg0ACyABIANHDQELQQAMAQtBACABKAIQQQJKDQAaIAEoAjRBAXYhGSABKAIsCyEaAkAgDkECTwRAIAlBAkkNASAEQQF2IRtBgAEgDEEIa3QhBCAIQfz///8HcSEcIAhBA3EhD0EAIQkgCEEBa0EDSSEdA0AgGiAJIBlsQQF0aiEGIBggCSAbbEEBdGohDEEAIQFBACEOIB1FBEADQCAMIAFBAXQiCGogBDsBACAGIAhqIAQ7AQAgDCAIQQJyIhNqIAQ7AQAgBiATaiAEOwEAIAwgCEEEciITaiAEOwEAIAYgE2ogBDsBACAMIAhBBnIiCGogBDsBACAGIAhqIAQ7AQAgAUEEaiEBIA5BBGoiDiAcRw0ACwtBACEIIA8EQANAIAwgAUEBdCIOaiAEOwEAIAYgDmogBDsBACABQQFqIQEgCEEBaiIIIA9HDQALCyAJQQFqIgkgEkcNAAsLIApFDQMLIBdBAXYhASAWQQF2IQQgDUEBdCEJQQAhBiAKQQFHBEAgCkF+cSEMQQAhCANAIAsgASAGbEEBdGogESAEIAZsQQF0aiAJEDIaIAsgBkEBciISIAFsQQF0aiARIAQgEmxBAXRqIAkQMhogBkECaiEGIAhBAmoiCCAMRw0ACwsgCkEBcUUNAiALIAEgBmxBAXRqIBEgBCAGbEEBdGogCRAyGgwCC0EACyERAn8CQAJAIAMoAgAiBkUEQEEAIQRBACEIDAELIAMhBCAGIQEDQCAEIAEgASgCECIIQQBIGyEEIAEgCEEddkEEcWooAgAiAQ0ACwJ/QQAgAyAERg0AGkEAIAQoAhBBAEoNABogBCgCLCEPIAQoAjQLIQggAyEEIAYhAQNAIAQgASABKAIQQQBMIg4bIQQgASAOQQJ0aigCACIBDQALAn9BACADIARGDQAaQQAgBCgCEEEBSg0AGiAEKAIsIQkgBCgCNAshBCADIQEDQCABIAYgBigCEEECSCIOGyEBIAYgDkECdGooAgAiBg0ACyABIANHDQELQQAhBkEADAELQQAhBkEAIAEoAhBBAkoNABogASgCNCEGIAEoAiwLIR4gCUEBIAxBAWt0IgkgBCASbBA0GiAeIAkgBiASbBA0GiAKRQ0AQQAhBiAKQQFHBEAgCkF+cSEEQQAhAQNAIA8gBiAIbGogCyAGIBFsaiANEDIaIA8gBkEBciIJIAhsaiALIAkgEWxqIA0QMhogBkECaiEGIAFBAmoiASAERw0ACwsgCkEBcUUNACAPIAYgCGxqIAsgBiARbGogDRAyGgsCQCAURQ0AQQAhBAJ/AkAgAigCACIBKAJAIgZFDQAgAUFAayICIQEDQCABIAYgBigCEEEGSCIIGyEBIAYgCEECdGooAgAiBg0ACyABIAJGDQBBACEIQQAgASgCEEEGSg0BGiABKAI0IQggASgCLAwBC0EAIQhBAAshAgJ/QQAgAygCACIGRQ0AGiADIQEDQCABIAYgBigCEEEGSCILGyEBIAYgC0ECdGooAgAiBg0AC0EAIAEgA0YNABpBACABKAIQQQZKDQAaIAEoAjQhBCABKAIsCyEBIApFDQAgDSAVQQhLdCEDQQAhBiAKQQFHBEAgCkF+cSENQQAhCwNAIAEgBCAGbGogAiAGIAhsaiADEDIaIAEgBkEBciIJIARsaiACIAggCWxqIAMQMhogBkECaiEGIAtBAmoiCyANRw0ACwsgCkEBcUUNACABIAQgBmxqIAIgBiAIbGogAxAyGgsgACAHNgIEIAAgEDYCACAHIAcoAgRBAWo2AgQgAEGQpQUpAgA3AgggAEEQaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyAHIAcoAgQiAEEBazYCBCAARQRAIAcgBygCACgCCBEAACAHECsLIAVBgAFqJAALvgEAIwBBIGsiASQAIAIoAgQhAyACKAIAIQQgAEEANgIIIABCADcCAAJAIARBAkcNACADDQAgAUEBOgAeIAFBAjsBHCABQYKACDYCGCABQQA6AAwgAULjgICAsAw3AgQgAUEINgIQIAFBzOYENgIUIAFBAToAHiABQQY7ARwgAUGBgDQ2AhggAUKAgICAEDcCBCABIAItAAg6AAwgASACKAIMNgIQIAFBBjYCACAAIAFBBGogARBiCyABQSBqJAALzQkBDH8jAEEgayIFJABBiAEQLCIEQgA3AgQgBEGs4wQ2AgAgBEEUakEAQegAEDQaIAQgBCgCBCIBQQFqIgg2AgQgBEIANwI4IARC44CAgLAMNwIsIARBriA2AiAgBEFAa0IANwIAIARBADYChAEgBEIANwJ8IARCgYCAgBA3AlQgBCAEQcwAaiIDNgJIIARCADcCXCAEQgA3AmQgBEIANwJsIARCADcAcSAEIARBDGoiCzYCDCAEIAQoAghBAWo2AgggBCABNgIEIAQgBDYCECAIRQRAIAQgBCgCACgCCBEAACAEECsLAkAgAigCACIBKAIkQQxrIgpBBE8EQCAAQgA3AgAgAEGkpQUpAgA3AgggAEEQaiEAQbelBSwAAEEATgRAIABBrKUFKQIANwIAIABBtKUFKAIANgIIDAILIABBrKUFKAIAQbClBSgCABAuDAELIAEoAhghCCABKAIcIgwhASALIApBAnRBmOsCaigCADYCJCALQQE2AiAgCyABNgIcIAsgCDYCGCAFQQhqIAtBCiAIIAwgAigCAEEKEEAgBhA6IAUoAggEQCAAQgA3AgAgACAFKQMINwIIIABBEGohACAFLAAbQQBOBEAgACAFKQIQNwIAIAAgBSgCGDYCCAwCCyAAIAUoAhAgBSgCFBAuIAUsABtBAE4NASAFKAIYGiAFKAIQECoMAQsgBSwAG0EASARAIAUoAhgaIAUoAhAQKgtBACEGAn8CQCACKAIAIgEoAkAiAkUNACABQUBrIgghAQNAIAEgAiACKAIQQQpIIgobIQEgAiAKQQJ0aigCACICDQALIAEgCEYNAEEAIAEoAhBBCkoNARogASgCLCEPIAEoAjQMAQtBAAshCgJ/QQAgAygCACICRQ0AGiADIQEDQCABIAIgAigCEEEKSCIGGyEBIAIgBkECdGooAgAiAg0ACyABIANGBEBBACEGQQAMAQtBACEGQQAgASgCEEEKSg0AGiABKAI0IQYgASgCLAshEAJAIAxFDQAgBiAKIAYgCkkbIgFFDQAgAUEBayIBQQF2QQFqIgJBfHEhESACQQNxIQ4gAUEGSSESA0AgECAGIA1saiEBIA8gCiANbGohA0EAIQJBACEIIBJFBEADQCABIAJqIgcgAiADaiIJLQABOgAAIAcgCS0AADoAASABIAJBAnIiB2oiCSADIAdqIgctAAE6AAAgCSAHLQAAOgABIAEgAkEEciIHaiIJIAMgB2oiBy0AAToAACAJIActAAA6AAEgASACQQZyIgdqIgkgAyAHaiIHLQABOgAAIAkgBy0AADoAASACQQhqIQIgCEEEaiIIIBFHDQALC0EAIQggDgRAA0AgASACaiIHIAIgA2oiCS0AAToAACAHIAktAAA6AAEgAkECaiECIAhBAWoiCCAORw0ACwsgDUEBaiINIAxHDQALCyAAIAQ2AgQgACALNgIAIAQgBCgCBEEBajYCBCAAQZClBSkCADcCCCAAQRBqIQBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIAQgBCgCBCIAQQFrNgIEIABFBEAgBCAEKAIAKAIIEQAAIAQQKwsgBUEgaiQAC7wCACMAQSBrIgEkAAJAAkAgAigCAEEBRgRAIAIoAgRBfHFBDEYNAQsgAEEANgIIIABCADcCAAwBCyAAQQA2AgggAEIANwIAIAFBAToAHiABQYKACDYCGCABQQA6AAwgAULjgICAsAw3AgQgAUEINgIQIAFBzOYENgIUIAFBAjsBHCABQQE6AB4gAUEGOwEcIAFBgYA0NgIYAkACQCACKAIEIgNBDGsOAwABAAELIAFBADoADCABQQE2AgQgAUEMQQ4gA0EORhs2AgggASACKAIMNgIQIAFBCzYCACAAIAFBBGogARBiIAIoAgQhAwsCQCADQQ1rDgMAAQABCyABQQE6AAwgAUEBNgIEIAFBDUEPIANBD0YbNgIIIAEgAigCDDYCECABQQs2AgAgACABQQRqIAEQYgsgAUEgaiQAC/oQARN/IwBBgAFrIgMkACAELQAIIQkgAigCACgCJCEMQYgBECwiBUGs4wQ2AgAgBUIANwIEIAVBFGpBAEHoABA0GiAFIAUoAgQiBEEBaiIINgIEIAVCADcCOCAFQuOAgICwDDcCLCAFQa4gNgIgIAVBQGtCADcCACAFQQA2AoQBIAVCADcCfCAFQoGAgIAQNwJUIAUgBUHMAGoiATYCSCAFQgA3AlwgBUIANwJkIAVCADcCbCAFQgA3AHEgBSAFQQxqIgo2AgwgBSAFKAIIQQFqNgIIIAUgBDYCBCAFIAU2AhAgCEUEQCAFIAUoAgAoAggRAAAgBRArCyACKAIAIgQoAhghCCAEKAIcIg0hBCAKQQM2AiQgCkEBNgIgIAogBDYCHCAKIAg2AhggA0E4aiAKQQMgCCANQQggBhA6IANBIGogCkEEIAggDUEIIAYQOiADQdgAaiEEAkAgAygCOARAIAMgAykDODcDUCADLABLQQBOBEAgBCADQUBrIgcpAwA3AwAgBCAHKAIINgIIDAILIAQgAygCQCADKAJEEC4MAQsgAyADKQMgNwNQIAMsADNBAE4EQCAEIAMpAyg3AwAgBCADKAIwNgIIDAELIAQgAygCKCADKAIsEC4LIANBCGogCkEFIAggDUEIIAYQOiADQfAAaiEHAkAgAygCUARAIAMgAykDUDcDaCADLABjQQBOBEAgByAEKQMANwMAIAcgBCgCCDYCCAwCCyAHIAMoAlggAygCXBAuDAELIAMgAykDCDcDaCADLAAbQQBOBEAgByADKQMQNwMAIAcgAygCGDYCCAwBCyAHIAMoAhAgAygCFBAuCyADLAAbQQBIBEAgAygCGBogAygCEBAqCyADLABjQQBIBEAgAygCYBogAygCWBAqCyADLAAzQQBIBEAgAygCMBogAygCKBAqCyADLABLQQBIBEAgAygCSBogAygCQBAqCwJAIAMoAmgEQCAAQgA3AgAgACADKQNoNwIIIABBEGohACADLAB7QQBOBEAgACAHKQIANwIAIAAgBygCCDYCCAwCCyAAIAMoAnAgAygCdBAuIAMsAHtBAE4NASADKAJ4GiADKAJwECoMAQsgAywAe0EASARAIAMoAngaIAMoAnAQKgsCQCAJQQFxRQ0AIANB6ABqIApBBiAIIA1BCCAGEDogAygCaARAIABCADcCACAAIAMpA2g3AgggAEEQaiEAIAMsAHtBAE4EQCAAIAMpAnA3AgAgACADKAJ4NgIIDAMLIAAgAygCcCADKAJ0EC4gAywAe0EATg0CIAMoAngaIAMoAnAQKgwCCyADLAB7QQBODQAgAygCeBogAygCcBAqCwJ/AkAgAigCACICKAJAIgZFDQAgAkFAayIEIQIDQCACIAYgBigCEEEKSCIHGyECIAYgB0ECdGooAgAiBg0ACyACIARGDQBBACACKAIQQQpKDQEaIAIoAiwhEiACKAI0DAELQQALIRMCfwJAIAEoAgAiAgRAIAEhBCACIQYDQCAEIAYgBigCEEEDSCIHGyEEIAYgB0ECdGooAgAiBg0ACwJ/QQAgASAERg0AGkEAIAQoAhBBA0oNABogBCgCNCEUIAQoAiwLIRUgASEEIAIhBgNAIAQgBiAGKAIQQQRIIgcbIQQgBiAHQQJ0aigCACIGDQALAn9BACABIARGDQAaQQAgBCgCEEEESg0AGiAEKAIsIRYgBCgC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QQJ0aigCACICDQALAn9BACABIAZGDQAaQQAgBigCEEEESg0AGiAGKAI0IRUgBigCLAshESABIQYgBCECA0AgBiACIAIoAhBBBUgiEhshBiACIBJBAnRqKAIAIgINAAsgASAGRw0BC0EADAELQQAgBigCEEEFSg0AGiAGKAI0IRYgBigCLAshEgJ/QQAgAygCACICRQ0AGiADIQYDQCAGIAIgAigCEEEKSCIMGyEGIAIgDEECdGooAgAiAg0ACyADIAZGBEBBACEMQQAMAQtBACEMQQAgBigCEEEKSg0AGiAGKAI0IQwgBigCLAshF0EAIQYCf0EAIARFIAlBAXNyDQAaIAEhAgNAIAIgBCAEKAIQQQZIIgMbIQIgBCADQQJ0aigCACIEDQALQQAgASACRg0AGkEAIAIoAhBBBkoNABogAigCNCEGIAIoAiwLIQMCQCAPRQ0AIAkEQCAORQ0BQQAhAQNAIAEgBmwhCSASIAEgFmxqIQogESABIBVsaiELIBQgASAQbGohCCAXIAEgDGxqIRhBACEEA0AgGCAEQQN0aiICQQA6AAAgBCAIai0AACETIAJBADoAAiACIBM6AAEgBCALai0AACETIAJBADoABCACIBM6AAMgBCAKai0AACETIAJBADoABiACIBM6AAUgAiADIAQgCWpqLQAAOgAHIARBAWoiBCAORw0ACyABQQFqIgEgD0cNAAsMAQsgDkUNAEEIQQYgC0EBcRshBkEAIQMgCkEBcQRAA0AgEiADIBZsaiECIBEgAyAVbGohCSAUIAMgEGxqIQogFyADIAxsaiELQQAhBANAIAsgBCAGbGoiAUEAOgAAIAQgCmotAAAhCCABQQA6AAIgASAIOgABIAQgCWotAAAhCCABQQA6AAQgASAIOgADIAIgBGotAAAhCCABQYD+AzsABiABIAg6AAUgBEEBaiIEIA5HDQALIANBAWoiAyAPRw0ADAILAAsDQCASIAMgFmxqIQQgESADIBVsaiEJIBQgAyAQbGohCiAXIAMgDGxqIQtBACECA0AgCyACIAZsaiIBQQA6AAAgAiAKai0AACEIIAFBADoAAiABIAg6AAEgAiAJai0AACEIIAFBADoABCABIAg6AAMgASACIARqLQAAOgAFIAJBAWoiAiAORw0ACyADQQFqIgMgD0cNAAsLIAAgBTYCBCAAIA02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CEEBajYCCCAFIAc2AgQgBSAFNgIQIAhFBEAgBSAFKAIAKAIIEQAAIAUQKwsgDUEDNgIkIA1BADYCICANIA42AhwgDSAKNgIYIAQtAAghCCACKAIAKAIkIQ8gA0E4aiANQQAgCiAOQQggBhA6IANBIGogDUEBIAogDkEIIAYQOiADQdgAaiEEAkAgAygCOARAIAMgAykDODcDUCADLABLQQBOBEAgBCADQUBrIgcpAwA3AwAgBCAHKAIINgIIDAILIAQgAygCQCADKAJEEC4MAQsgAyADKQMgNwNQIAMsADNBAE4EQCAEIAMpAyg3AwAgBCADKAIwNgIIDAELIAQgAygCKCADKAIsEC4LIANBCGogDUECIAogDkEIIAYQOiADQfAAaiEHAkAgAygCUARAIAMgAykDUDcDaCADLABjQQBOBEAgByAEKQMANwMAIAcgBCgCCDYCCAwCCyAHIAMoAlggAygCXBAuDAELIAMgAykDCDcDaCADLAAbQQBOBEAgByADKQMQNwMAIAcgAygCGDYCCAwBCyAHIAMoAhAgAygCFBAuCyADLAAbQQBIBEAgAygCGBogAygCEBAqCyADLABjQQBIBEAgAygCYBogAygCWBAqCyADLAAzQQBIBEAgAygCMBogAygCKBAqCyADLABLQQBIBEAgAygCSBogAygCQBAqCwJAIAMoAmgEQCAAQgA3AgAgACADKQNoNwIIIABBEGohACADLAB7QQBOBEAgACAHKQIANwIAIAAgBygCCDYCCAwCCyAAIAMoAnAgAygCdBAuIAMsAHtBAE4NASADKAJ4GiADKAJwECoMAQsgAywAe0EASARAIAMoAngaIAMoAnAQKgsCQCAIQQFxRQ0AIANB6ABqIA1BBiAKIA5BCCAGEDogAygCaARAIABCADcCACAAIAMpA2g3AgggAEEQaiEAIAMsAHtBAE4EQCAAIAMpAnA3AgAgACADKAJ4NgIIDAMLIAAgAygCcCADKAJ0EC4gAywAe0EATg0CIAMoAngaIAMoAnAQKgwCCyADLAB7QQBODQAgAygCeBogAygCcBAqCwJ/AkAgAigCACICKAJAIgZFDQAgAkFAayICIQQDQCAEIAYgBigCEEEKSCIHGyEEIAYgB0ECdGooAgAiBg0ACyACIARGDQBBACAEKAIQQQpKDQEaIAQoAjQhFiAEKAIs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GSALQQNxIRYgEUEBcSEPIAtBBEkhIUEAIQUDQCAUIAUgGGxqIQMgHSAFIBxsaiEEAkAgIwRAIB8gBSAebGohDCAXIAUgG2xqIRJBACEBA0AgASADakH/AQJ/IAEgDGotAACzIAcqAjyUIAEgEmotAACzIAcqAjSUIAcqAjggASAEai0AALOUkpIiKSApQwAAW0OUQwAAgDuUQwAAgEGSIA8bQwAAAD+SIimLQwAAAE9dBEAgKagMAQtBgICAgHgLIgYgBkH/AU8bQQAgBkEAThs6AAAgAUEBaiIBIAtHDQALDAELQQAhAQJAIA8EQEEAIQZBACEMICENAQNAIAEgA2ogASAEai0AADoAACADIAFBAXIiEmogBCASai0AADoAACADIAFBAnIiEmogBCASai0AADoAACADIAFBA3IiEmogBCASai0AADoAACABQQRqIQEgDEEEaiIMIBlHDQALDAELA0AgASADakH/AQJ/IAEgBGotAACzQwAAW0OUQwAAgDuUQwAAgEGSQwAAAD+SIimLQwAAAE9dBEAgKagMAQtBgICAgHgLIgYgBkH/AU8bQQAgBkEAThs6AAAgCyABQQFqIgFHDQALDAELIBZFDQADQCABIANqIAEgBGotAAA6AAAgAUEBaiEBIAZBAWoiBiAWRw0ACwsgBUEBaiIFIA1HDQALIBNBAkYhFiAOIBNyQQJJISFBACEDA0AgHyADIB5sIgFqIQUgJSADIBNuIgQgJGwiD2ohBgJAICMEQCAfIANBAWoiASADIAEgDUkbIAMgFhsiASAebGohDyAdIAEgHGxqIQwgFyABIBtsaiEUIB0gAyAcbGohGCAXIAMgG2xqIRkgIiAEICZsaiESQQAhAQNAIAEgBWotAACzISkgASAYai0AALMhKiABIBlqLQAAsyErICFFBEAgKSAFIAFBAWoiBCABIAQgC0kbIAEgDkECRhsgASAWGyIEai0AALOSIAEgD2otAACzkiAEIA9qLQAAs5JDAACAPpQhKSArIAQgGWotAACzkiABIBRqLQAAs5IgBCAUai0AALOSQwAAgD6UISsgKiAEIBhqLQAAs5IgASAMai0AALOSIAQgDGotAACzkkMAAIA+lCEqCyAHKgJUIS0gByoCTCEuIAcqAlAhLyAGIAEgDm4iJ2pB/wECfyApIAcqAkiUICsgByoCQJQgKiAHKgJElJKSIiwgLEMAAGBDlEMAAIA7lCARQQFxIigbQwAAAEOSQwAAAD+SIiyLQwAAAE9dBEAgLKgMAQtBgICAgHgLIgQgBEH/AU8bQQAgBEEAThs6AAAgEiAnakH/AQJ/ICkgLZQgKyAulCAqIC+UkpIiKSApQwAAYEOUQwAAgDuUICgbQwAAAEOSQwAAAD+SIimLQwAAAE9dBEAgKagMAQtBgICAgHgLIgQgBEH/AU8bQQAgBEEAThs6AAAgASAOaiIBIAtJDQALDAELIAEgF2ohBCAPICJqIQ9BACEBIBFBAXFFBEADQCAGIAEgDm4iFGpB/wECfyABIAVqLQAAs0MAAGBDlEMAAIA7lEMAAIBBkkMAAAA/kiIpi0MAAABPXQRAICmoDAELQYCAgIB4CyIMIAxB/wFPG0EAIAxBAE4bOgAAIA8gFGpB/wECfyABIARqLQAAs0MAAGBDlEMAAIA7lEMAAIBBkkMAAAA/kiIpi0MAAABPXQRAICmoDAELQYCAgIB4CyIMIAxB/wFPG0EAIAxBAE4bOgAAIAsgASAOaiIBSw0ADAILAAsDQCAGIAEgDm4iDGogASAFai0AADoAACAMIA9qIAEgBGotAAA6AAAgASAOaiIBIAtJDQALCyADIBNqIgMgDUkNAAsLAkAgGkUNACACKAIAQQYQQCEBIA1FDQAgCyABQQhLdCECQQAhASANQQFHBEAgDUF+cSEEQQAhAwNAIAogASAJbGogICABIBVsaiACEDIaIAogAUEBciIFIAlsaiAgIAUgFWxqIAIQMhogAUECaiEBIANBAmoiAyAERw0ACwsgDUEBcUUNACAKIAEgCWxqICAgASAVbGogAhAyGgsgACAINgIEIAAgEDYCACAIIAgoAgRBAWo2AgQgAEGQpQUpAgA3AgggAEEQaiEAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyAIIAgoAgQiAEEBazYCBCAADQAgCCAIKAIAKAIIEQAAIAgQKwsgB0GgAWokAAsJACAAEJ8GECoLrwMBAX8jAEEgayIBJAACQCACKAIMIgVBCU4EQCAAQQA2AgggAEIANwIADAELIAVBCEcEQCAAQQA2AgggAEIANwIADAELAkAgAigCAEEBRgRAIAIoAgRBA0YNAQsgAEEANgIIIABCADcCAAwBCwJAIAMvARgiBUEOSw0AQQEgBXRBgJIBcUUNACAAQQA2AgggAEIANwIADAELIABBADYCCCAAQgA3AgAgAUEBOgAeIAFBAjsBHCABQYKACDYCGCABQQA6AAwgAULjgICAsAw3AgQgAUEINgIQIAFBzOYENgIUIAFBAToAHiABQQY7ARwgAUGBgDQ2AhgCQCADKAIEIgVBA0YNACAEKAIEQQFHBEAgBC0ADA0BCyABIAU2AgggAUEANgIEIAEgAi0ACDoADCABIAIoAgw2AhAgASADKAAXNgAbIAEgAygCFDYCGCABQQs2AgAgACABQQRqIAEQYgwBCyABQoCAgIAwNwIEIAEgAi0ACDoADCABIAIoAgw2AhAgASADKAAXNgAbIAEgAygCFDYCGCABQQs2AgAgACABQQRqIAEQYgsgAUEgaiQACw8AIABBuJkFNgIAIAAQKgsNACAAQbiZBTYCACAACw8AIABB7JgFNgIAIAAQKgsNACAAQeyYBTYCACAACw8AIABBoJgFNgIAIAAQKgsNACAAQaCYBTYCACAACw8AIABB1JcFNgIAIAAQKgsNACAAQdSXBTYCACAACw8AIABBiJcFNgIAIAAQKgsNACAAQYiXBTYCACAACw8AIABBvJYFNgIAIAAQKgsNACAAQbyWBTYCACAACw8AIABB8JUFNgIAIAAQKgsNACAAQfCVBTYCACAACw8AIABBpJUFNgIAIAAQKgsNACAAQaSVBTYCACAACw8AIABB2JQFNgIAIAAQKgsNACAAQdiUBTYCACAACw8AIABBsJQFNgIAIAAQKgsNACAAQbCUBTYCACAACw8AIABBiJQFNgIAIAAQKgsNACAAQYiUBTYCACAACw8AIABB4JMFNgIAIAAQKgsNACAAQeCTBTYCACAACw8AIABBuJMFNgIAIAAQKgsNACAAQbiTBTYCACAACw8AIABBkJMFNgIAIAAQKgsNACAAQZCTBTYCACAACw8AIABBxJIFNgIAIAAQKgsNACAAQcSSBTYCACAACw8AIABB+JEFNgIAIAAQKgsNACAAQfiRBTYCACAACw8AIABB0JEFNgIAIAAQKgsNACAAQdCRBTYCACAACw8AIABBqJEFNgIAIAAQKgsNACAAQaiRBTYCACAACw8AIABBgJEFNgIAIAAQ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CBEAACABECsLIAAoArQDIgEEQCAAIAE2ArgDIAAoArwDGiABECoLIAAQdBAqC5MBAQJ/IABBhIwFNgIAAkAgACgC5AMiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsCQCAAKALcAyIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARArCyAAKAK0AyIBBEAgACABNgK4AyAAKAK8AxogARAqCyAAEHQLkgMBCn8jAEFAaiIBJAAgAUEAOgAoIAFCADcCNCABQgA3AyAgAUIANwIsIAFBDGogACABQSxqQQBBABDjAyABLAAfQQBIBEAgASgCHBogASgCFBAqCyAAKALgAyECIAEoAjQhBSABQQA2AjQgASgCJCEEIAFBADYCJCABKAIgIQMgAUEANgIgIAEoAiwhBiABKAIwIQcgAUIANwIsIAEoAjghCCABLQAoIQkgAiADNgIEIAIoAgghAyACIAQ2AggCQCADRQ0AIAMgAygCBCIEQQFrNgIEIAQNACADIAMoAgAoAggRAAAgAxArCyACIAk6AAwgAigCECIDBEAgAiADNgIUIAIoAhgaIAMQKgsgAiAINgIcIAIgBTYCGCACIAc2AhQgAiAGNgIQIAAoAuADIgAgACgCACgCEBEBACEKIAEoAiwiAARAIAEgADYCMCABKAI0GiAAECoLAkAgASgCJCIARQ0AIAAgACgCBCIDQQFrNgIEIAMNACAAIAAoAgAoAggRAAAgABArCyABQUBrJAAgCgsRACAAIAAoAmhB//8DSzoAYQuSAwEKfyMAQUBqIgEkACABQQA6ACggAUIANwI0IAFCADcDICABQgA3AiwgAUEMaiAAIAFBLGpBAEEAEOMDIAEsAB9BAEgEQCABKAIcGiABKAIUECoLIAAoAuADIQIgASgCNCEFIAFBADYCNCABKAIkIQQgAUEANgIkIAEoAiAhAyABQQA2AiAgASgCLCEGIAEoAjAhByABQgA3AiwgASgCOCEIIAEtACghCSACIAM2AgQgAigCCCEDIAIgBDYCCAJAIANFDQAgAyADKAIEIgRBAWs2AgQgBA0AIAMgAygCACgCCBEAACADECsLIAIgCToADCACKAIQIgMEQCACIAM2AhQgAigCGBogAxAqCyACIAg2AhwgAiAFNgIYIAIgBzYCFCACIAY2AhAgACgC4AMiACAAKAIAKAIMEQEAIQogASgCLCIABEAgASAANgIwIAEoAjQaIAAQKgsCQCABKAIkIgBFDQAgACAAKAIEIgNBAWs2AgQgAw0AIAAgACgCACgCCBEAACAAECsLIAFBQGskACAKC78GAQl/IwBB4ABrIgQkACAEQTBqIAFBAEEAEKEGAkAgBCgCTARAIAAgBCkCTDcCACAAQQhqIQAgBCwAX0EATgRAIAAgBCkCVDcCACAAIAQoAlw2AggMAgsgACAEKAJUIAQoAlgQLgwBCyABKALgAyEFIAQoAkQhCCAEQQA2AkQgBCgCNCEHIARBADYCNCAEKAIwIQYgBEEANgIwIAQoAjwhCSAEKAJAIQogBEIANwI8IAQoAkghCyAELQA4IQwgBSAGNgIEIAUoAgghBiAFIAc2AggCQCAGRQ0AIAYgBigCBCIHQQFrNgIEIAcNACAGIAYoAgAoAggRAAAgBhArCyAFIAw6AAwgBSgCECIGBEAgBSAGNgIUIAUoAhgaIAYQKgsgBSALNgIcIAUgCDYCGCAFIAo2AhQgBSAJNgIQIARBGGogASgC4AMiBSACIAMgBSgCACgCFBEGAAJAIAQoAhgEQCAAIAQpAxg3AgAgACAEKAIoNgIQIAAgBCkDIDcCCCAEQQA2AiggBEIANwMgDAELIARBBGohBQJAIAIoAgANACABKALAASEGIAEoAsQBIgEEQCABIAEoAgRBAWo2AgQLAkAgBkUNACAGLwEIDQAgAkEBNgIAIANBAzYCAAsgAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQKwsgBUGQpQUpAgA3AgAgBUEIaiEBAkBBo6UFLAAAQQBOBEAgAUGYpQUpAgA3AgAgAUGgpQUoAgA2AggMAQsgAUGYpQUoAgBBnKUFKAIAEC4LIAQsABdBAEgEQCAEKAIUGiAEKAIMECoLIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgCADYCCAwBCyAAQZilBSgCAEGcpQUoAgAQLgsgBCwAK0EATg0AIAQoAigaIAQoAiAQKgsgBCwAX0EASARAIAQoAlwaIAQoAlQQKgsgBCgCPCIABEAgBCAANgJAIAQoAkQaIAAQKgsCQCAEKAI0IgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLIARB4ABqJAALGAAgASAAKAKAAzYCACACIAAoAoQDNgIAC5ABAQR/IABBAEHIABA0IgAgASgC+AIiBCABKAKAAyIDakEBayADbjYCBCABKAKEAyECIAAgASgC/AIiBTYCGCAAIAQ2AhQgACACNgIQIAAgAzYCDCAAIAIgBWpBAWsgAm42AgggACABLQCOAyICOgAkIAIEQCAAQShqIAFBkANqQQggAiACQQhPG0ECdBAyGgsL0AUBB38jAEEwayIGJAACQCADBEAjAEEwayIDJAAgAyABIAQgBRChBgJAIAMoAhwEQCAAQgA3AgAgACADKQIcNwIIIABBEGohACADLAAvQQBOBEAgACADKQIkNwIAIAAgAygCLDYCCAwCCyAAIAMoAiQgAygCKBAuDAELIAEoAuADIQQgAygCFCEIIANBADYCFCADKAIEIQcgA0EANgIEIAMoAgAhBSADQQA2AgAgAygCDCEJIAMoAhAhCiADQgA3AgwgAygCGCELIAMtAAghDCAEIAU2AgQgBCgCCCEFIAQgBzYCCAJAIAVFDQAgBSAFKAIEIgdBAWs2AgQgBw0AIAUgBSgCACgCCBEAACAFECsLIAQgDDoADCAEKAIQIgUEQCAEIAU2AhQgBCgCGBogBRAqCyAEIAs2AhwgBCAINgIYIAQgCjYCFCAEIAk2AhAgACABKALgAyIAIAIgACgCACgCHBEDAAsgAywAL0EASARAIAMoAiwaIAMoAiQQKgsgAygCDCIABEAgAyAANgIQIAMoAhQaIAAQKgsCQCADKAIEIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLIANBMGokAAwBCyAGQTAQLCIBNgIMIAZCqYCAgICGgICAfzcCECABQd3TAC0AADoAKCABQdXTACkAADcAICABQc3TACkAADcAGCABQcXTACkAADcAECABQb3TACkAADcACCABQbXTACkAADcAACABQQA6ACkgBkEYakEEQQAgBkEMahAvIQEgAEIANwIAIAAgASkDADcCCCAAQRBqIQACQCABLAATQQBOBEAgACABKQIINwIAIAAgASgCEDYCCAwBCyAAIAEoAgggASgCDBAuIAEsABNBAE4N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gH83AiwgAEG9lQEpAAA3AAAgAEEAOgAxIABB7ZUBLQAAOgAwIABB5ZUBKQAANwAoIABB3ZUBKQAANwAgIABB1ZUBKQAANwAYIABBzZUBKQAANwAQIABBxZUBKQAANwAIIAhBBEG4FyAEQShqEC8aIAQsADNBAE4NASAEKAIwGiAEKAIoECoMAQsCQCABLQDUA0EBRw0AIARBiAFqIQIgASgCJCEBIwBBEGsiAyQAQfDnBCkDACEWAn4gBygCECIAIAcoAghqQQFrIABurSAHKAIMIgAgBygCBGpBAWsgAG6tfiIVIActABoiAEUNABogFSAHNQIcfiIVIABBAWsiAEUNABogFSAHNQIgfiIVIABBAUYNABogFSAHNQIkfiIVIABBAkYNABogFSAHNQIofiIVIABBA0YNABogFSAHNQIsfiIVIABBBEYNABogFSAHNQIwfiIVIABBBUYNABogFSAHNQI0fiIVIABBBkYNABogFSAHNQI4fgshFQJAAkAgFlANACAVIBZYDQAgA0EoECwiADYCBCADQqeAgICAhYCAgH83AgggAEHElAEpAAA3AAAgAEEAOgAnIABB45QBKQAANwAfIABB3JQBKQAANwAYIABB1JQBKQAANwAQIABBzJQBKQAANwAIIAhBAkHoByADQQRqEC8aIAMsAA9BAE4NASADKAIMGiADKAIEECoMAQsgCCAHIAIgAUIAIBUQogYLIANBEGokACAIKAIADQEgCCwAE0EATg0AIAgoAhAaIAgoAggQKgsgCBDoAQsgD0UNACAPIA8oAgQiAEEBazYCBCAADQAgDyAPKAIAKAIIEQAAIA8QKwsgDkUNBSAOIA4oAgQiAEEBazYCBCAADQUgDiAOKAIAKAIIEQAAIA4QKwwFCxA2AAsQNgALIAVBCGoiBSADRw0ACwsgBEEwECwiATYCSCAEQqiAgICAhoCAgH83AkwgAUHKkAEpAAA3AAAgAUEAOgAoIAFB6pABKQAANwAgIAFB4pABKQAANwAYIAFB2pABKQAANwAQIAFB0pABKQAANwAIIABBAkEAIARByABqEC8aIAQsAFNBAE4NACAEKAJQGiAEKAJIECoLAkAgBCgCjAEiAUUNACABIAEoAgQiAEEBazYCBCAADQAgASABKAIAKAIIEQAAIAEQKwsgBEGQAWokAAsLACAAKAKIAxDo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AhAgBigCDCIIa0EERwRAIAZBMBAsIgE2AgAgBkKvgICAgIaAgIB/NwIEIAFBkt4AKQAANwAnIAFBi94AKQAANwAgIAFBg94AKQAANwAYIAFB+90AKQAANwAQIAFB890AKQAANwAIIAFB690AKQAANwAAIAFBADoALyAGQRhqQQJBACAGEC8hASAAQgA3AgAgACABKQMANwIIIABBEGohAAJAIAEsABNBAE4EQCAAIAEpAgg3AgAgACABKAIQNgIIDAELIAAgASgCCCABKAIMEC4gASwAE0EATg0AIAEoAhAaIAEoAggQKgsgBiwAC0EATg0BIAYoAggaIAYoAgAQKgwBCyAIKAIAIgggASgCJEYEQCAGQSgQLCIBNgIAIAZCoICAgICFgICAfzcCBCABQfLIACkAADcAGCABQerIACkAADcAECABQeLIACkAADcACCABQdrIACkAADcAACABQQA6ACAgBkEYakECQQAgBhAvIQEgAEIANwIAIAAgASkDADcCCCAAQRBqIQACQCABLAATQQBOBEAgACABKQIINwIAIAAgASgCEDYCCAwBCyAAIAEoAgggASgCDBAuIAEsABNBAE4NACABKAIQGiABKAIIECoLIAYsAAtBAE4NASAGKAIIGiAGKAIAECoMAQsgBkEYaiIJIAEoAhQgCEEBEI0BIAYoAhwhCAJAIAYoAhgiAUUEQCAGQTAQLCIBNgIAIAZCqYCAgICGgICAfzcCBCABQendAC0AADoAKCABQeHdACkAADcAICABQdndACkAADcAGCABQdHdACkAADcAECABQcndACkAADcACCABQcHdACkAADcAACABQQA6ACkgCUECQQAgBhAvIQEgAEIANwIAIAAgASkDADcCCCAAQRBqIQACQCABLAATQQBOBEAgACABKQIINwIAIAAgASgCEDYCCAwBCyAAIAEoAgggASgCDBAuIAEsABNBAE4NACABKAIQGiABKAIIECoLIAYsAAtBAE4NASAGKAIIGiAGKAIAECoMAQsgBkEYaiABIAEoAgAoAhQRAgAgBigCGARAIABCADcCACAAIAYpAxg3AgggAEEQaiEAIAYsACtBAE4EQCAAIAYpAiA3AgAgACAGKAIoNgIIDAILIAAgBigCICAGKAIkEC4gBiwAK0EATg0BIAYoAigaIAYoAiAQKgwBCyAGLAArQQBIBEAgBigCKBogBigCIBAqCyAAIAEgAiADIAQgBRCnAgsgCEUNACAIIAgoAgQiAEEBazYCBCAADQAgCCAIKAIAKAIIEQAAIAgQKwsgBigCDCIARQ0AIAYgADYCECAGKAIUGiAAECoLAkAgB0UNACAHIAcoAgQiAEEBazYCBCAADQAgByAHKAIAKAIIEQAAIAcQKwsgBkEwaiQAC4QCACMAQTBrIgEkACABQSAQLCICNgIMIAFCnYCAgICEgICAfzcCECACQcikASkAADcAFSACQcOkASkAADcAECACQbukASkAADcACCACQbOkASkAADcAACACQQA6AB0gAUEYakEEQQAgAUEMahAvIQIgAEIANwIYIABCADcCECAAQgA3AgggAEIANwIAIAAgAikDADcCICAAQShqIQACQCACLAATQQBOBEAgACACKQIINwIAIAAgAigCEDYCCAwBCyAAIAIoAgggAigCDBAuIAIsABNBAE4NACACKAIQGiACKAIIECoLIAEsABdBAEgEQCABKAIUGiABKAIMECoLIAFBMGokAAsIAEHs7L3LBgtPAQF/IABBtIoFNgIAIAAoApQDIgEEQCAAIAE2ApgDIAAoApwDGiABECoLIAAoAogDIgEEQCAAIAE2AowDIAAoApADGiABECoLIAAQdBAqC00BAX8gAEG0igU2AgAgACgClAMiAQRAIAAgATYCmAMgACgCnAMaIAEQKgsgACgCiAMiAQRAIAAgATYCjAMgACgCkAMaIAEQKgsgABB0C/UBAQF/IwBBIGsiAyQAIAMgASACEHsgAywAE0EASARAIAMoAhAaIAMoAggQKgsCQCABLQBhIgRBAk8EQCAAIAFBrTsQkQEMAQsgAQJ/IARFBEAgAhBODAELIAIQSQs2AmggAi0AFEEBRgRAIANBADoAFCADQQA6AB8gAEECQeQAIANBFGoQLxogAywAH0EATg0BIAMoAhwaIAMoAhQQKgwBCyAAQZClBSkCADcCACAAQQhqIQBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIANBIGokAAtbACACQQE2AgAgA0EDNgIAIABBkKUFKQIANwIAIABBCGohAEGjpQUsAABBAE4EQCAAQZilBSkCADcCACAAQaClBSgC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ahAvGiAKLAAPQQBODQEgCigCDBogCigCBBAqDAELIApBADoABCAKQQA6AA8gDEEFQdIPIApBBGoQLxogCiwAD0EATg0AIAooAgwaIAooAgQQKgsgCkEQaiQAIAMgAykDOCIpNwNYIAMsAGtBAE4EfyAppwUgAygCaBogAygCYBAqIAMoAlgLIQUgAyADKQNANwNgIAMgAygCSDYCaAJAAkAgBUUEQCABKAKUAyIFIAEoApgDRg0CIAJBHGohISAAQRBqIQ0gA0FAayEZDAELIABCADcCACAAIAMpA1g3AgggAEEQaiEAIAMsAGtBAE4EQCAAIAMpAmA3AgAgACADKAJoNgIIDAMLIAAgAygCYCADKAJkEC4MAgsDQCAFIBtBAnRqKAIAIgUgASgCJEYEQCADQThqQQJBACADQRBqQZ+YARCAASICEC8hASAAQgA3AgAgACABKQMANwIIAkAgASwAE0EATgRAIA0gASkCCDcCACANIAEoAhA2AggMAQsgDSABKAIIIAEoAgwQLiABLAATQQBODQAgASgCEBogASgCCBAqCyACLAALQQBODQMgAigCCBogAigCABAqDAMLIANBOGoiBiABKAIUIAVBARCNASADKAI8IRcCQCADKAI4IgVFBEAgA0EwECwiBTYCECADQqyAgICAhoCAgH83AhQgBUGamAEoAAA2ACggBUGSmAEpAAA3ACAgBUGKmAEpAAA3ABggBUGCmAEpAAA3ABAgBUH6lwEpAAA3AAggBUHylwEpAAA3AAAgBUEAOgAsIAZBAkHQDyADQRBqEC8hBSAAQgA3AgAgACAFKQMANwIIAkAgAywAS0EATgRAIA0gGSkCADcCACANIBkoAgg2AggMAQsgDSADKAJAIAMoAkQQLiADLABLQQBODQAgAygCSBogAygCQBAqCyADLAAbQQBIBEAgAygCGBogAygCEBAqC0EBIQUMAQsgA0E4aiAFIAUoAgAoAhQRAgAgAygCOARAIABCADcCACAAIAMpAzg3AgggAywAS0EATgRAIA0gGSkCADcCACANIBkoAgg2AghBASEFDAILIA0gAygCQCADKAJEEC4gAywAS0EASARAIAMoAkgaIAMoAkAQKgtBASEFDAELIAMsAEtBAEgEQCADKAJIGiADKAJAECoLIANBOGogBSACQQBBAEEAEKcCAkACQCAD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QCABQZilBSkCADcCACABQaClBSgCADYCCAwBCyABQZilBSgCAEGcpQUoAgAQLgsgDSwAG0EASARAIA0oAhgaIA0oAhAQKgsgDUEgaiQAC4QCACMAQTBrIgEkACABQSAQLCICNgIMIAFCnYCAgICEgICAfzcCECACQYSlASkAADcAFSACQf+kASkAADcAECACQfekASkAADcACCACQe+kASkAADcAACACQQA6AB0gAUEYakEEQQAgAUEMahAvIQIgAEIANwIYIABCADcCECAAQgA3AgggAEIANwIAIAAgAikDADcCICAAQShqIQACQCACLAATQQBOBEAgACACKQIINwIAIAAgAigCEDYCCAwBCyAAIAIoAgggAigCDBAuIAIsABNBAE4NACACKAIQGiACKAIIECoLIAEsABdBAEgEQCABKAIUGiABKAIMECoLIAFBMGokAAsIAEHk0sm7BgsxAQF/IABBzIkFNgIAIAAoAoADIgEEQCAAIAE2AoQDIAAoAogDGiABECoLIAAQdBAqCy8BAX8gAEHMiQU2AgAgACgCgAMiAQRAIAAgATYChAMgACgCiAMaIAEQKgsgABB0C6QEAQN/IwBBQGoiAiQAIAJBKGogASgCFCABKAIkIAJBPGoQ1QECQCACKAIoBEAgAEIANwIAIAAgAikDKDcCCCAAQRBqIQAgAiwAO0EATgRAIAAgAikCMDcCACAAIAIoAjg2AggMAgsgACACKAIwIAIoAjQQLgwBCyACQRBqIgQgASgCFCACKAI8QQEQjQEgAigCFCEDAkAgAigCECIBRQRAIAJBADoABCACQQA6AA8gBEECQdAPIAJBBGoQLyEBIABCADcCACAAIAEpAwA3AgggAEEQaiEAAkAgASwAE0EATgRAIAAgASkCCDcCACAAIAEoAhA2AggMAQsgACABKAIIIAEoAgwQLiABLAATQQBODQAgASgCEBogASgCCBAqCyACLAAPQQBODQEgAigCDBogAigCBBAqDAELIAJBEGogASABKAIAKAIUEQIAIAIoAhAEQCAAQgA3AgAgACACKQMQNwIIIABBEGohACACLAAjQQBOBEAgACACKQIYNwIAIAAgAigCIDYCCAwCCyAAIAIoAhggAigCHBAuIAIsACNBAE4NASACKAIgGiACKAIYECoMAQsgAiwAI0EASARAIAIoAiAaIAIoAhgQKgsgACABIAEoAgAoAkwRAgALIANFDQAgAyADKAIEIgBBAWs2AgQgAA0AIAMgAygCACgCCBEAACADECsLIAIsADtBAEgEQCACKAI4GiACKAIwECoLIAJBQGskAAuBAgECfyMAQSBrIgMkACABIAJBACABKAIAKAIsEQQAIQQgAiABKAJoEEogAiABKAJsEEogAiABKAJwEEogAiABKAJ0EEogAiABKAJ4EEogAiABQfwAahCgASACIAQ2AgwgA0EMaiABIAIgAigCBCAEIAIoAgBqa0EAIAEoAgAoAjARBwAgAiACKAIEIAIoAgBrNgIMIAMsAB9BAEgEQCADKAIcGiADKAIUECoLIABBkKUFKQIANwIAIABBCGohAAJAQaOlBSwAAEEATgRAIABBmKUFKQIANwIAIABBoKUFKAIANgIIDAELIABBmKUFKAIAQZylBSgCABAuCyADQSBqJAALuwEBBH8jAEEgayIDJAAgA0EMaiIEIAAoAhQgACgCgAMoAgBBARCNASADKAIQIQAgBCADKAIMIgQgBCgCACgCFBECACADKAIMIQYgAywAH0EASARAIAMoAhwaIAMoAhQQKgsgBgRAIAJBADYCACABQQA2AgALIAEgBCgCKDYCACACIAQoAiw2AgACQCAARQ0AIAAgACgCBCIBQQFrNgIEIAENACAAIAAoAgAoAggRAAAgABArCyADQSBqJAAL6wIBCH8jAEEgayICJAAgAEEAQcgAEDQiACABLwH2AjYCBCAAIAEvAfQCNgIIIAAgASgC+AI2AhQgACABKAL8AjYCGCACQQA2AhwgAkIANwIUAkACQAJAAkAgASgChAMiAyABKAKAAyIERiIGDQAgAyAEayIDQQBIDQMgAiADECwiBTYCFCACIAMgBWoiBzYCHCAFIAQgAxAyIQggAiAHNgIYIAYNACAIKAIAIgNFDQAgAiABKAIUIANBARCNASACKAIEIQEgAigCACIDRQ0BIAIgAyADKAIAKAIUEQIAIAIoAgAhCSACLAATQQBIBEAgAigCEBogAigCCBAqCyAJDQEgACADKAIoNgIMIAAgAygCLDYCEAwBCyAAQgA3AgwMAQsgAUUNACABIAEoAgQiAEEBazYCBCAADQAgASABKAIAKAIIEQAAIAEQKwsgAigCFCIABEAgAigCHBogABAqCyAC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Tg0AIAEoAhAaIAEoAggQKgsgBiwAD0EASARAIAYoAgwaIAYoAgQQKgsgBkG80wMoAgAiADYCKCAAQQxrKAIAIAZBKGpqQdzTAygCADYCACAGQeDTAygCADYCMCACQfDLAzYCACAGLABfQQBIBEAgBigCXBogBigCVBAqCyACED0aIAZB6ABqEDsaCwJAIAYoArwBIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLIAZBwAFqJAALnw0CCn8BfiMAQSBrIgYkACMAQcABayICJAAgASgCFCIFKAIwIQMgBSgCNCIIBEAgCCAIKAIEQQFqNgIECyAGQQhqIQUgAkEANgK8ASACQgA3ArQBIAJBoAFqIAMgASgCJCACQbQBahCBAgJAIAIoAqABBEAgBSACKQOgATcCACAFIAIoArABNgIQIAUgAikDqAE3AgggAkEANgKwASACQgA3A6gBDAELIAJBEGogAUH0AmogAkG0AWoQpQYgAiACKQMQIgw3A6ABIAIsALMBQQBOBH8gDKcFIAIoArABGiACKAKoARAqIAIoAqABCyELIAIgAikDGDcDqAEgAiACKAIgNgKwASALBEAgBSACKQOgATcCACAFIAIoArABNgIQIAUgAikCqAE3AgggAkIANwOoASACQQA2ArABDAELIAMoAlQhBCADKAJYIgcEQCAHIAcoAgRBAWo2AgQLAkAgBEUEQCACQTgQLCIBNgIQIAJCsICAgICHgICAfzcCFCABQZveACkAADcAACABQQA6ADAgAUHD3gApAAA3ACggAUG73gApAAA3ACAgAUGz3gApAAA3ABggAUGr3gApAAA3ABAgAUGj3gApAAA3AAggBUECQfEAIAJBEGoQLxogAiwAG0EATg0BIAIoAhgaIAIoAhAQKgwBCyACQRBqIAQgASgCJEHn2qWjBhC6ASABKAKAAyIDBEAgASADNgKEAyABKAKIAxogAxAqCyABIAIoAhAiAzYCgAMgASACKAIUIgQ2AoQDIAEgAigCGDYCiAMCQAJAAkAgAS8B9gIgAS8B9AJsIAQgA2tBAnVHBEAgAkGg0wM2AhggAkG00wM2AlAgAkHE0wMoAgAiBDYCECACQRBqIgMgBEEMaygCAGpByNMDKAIANgIAIAJBADYCFCADIAIoAhBBDGsoAgBqIgQg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AUH4////B0kEQCABQQtPBEAgAUEHckEBaiIFECwhAiAAIAVBgICAgHhyNgIIIAAgAjYCACAAIAE2AgQgAiEADAILIAAgAToACyABDQFBACEBDAILEDgACyAAIAQgARA3GgsgACABakEAOgAAIANB7NUDKAIAIgA2AgwgAEEMaygCACADQQxqakH41QMoAgA2AgAgBkHwywM2AgAgAywAO0EASARAIAMoAjgaIAMoAjAQKgsgBhA9GiADQcQAahA7GiADQaABaiQACw8AIABB1IgFNgIAIAAQKgsNACAAQdSIBTYCACAACw8AIABBrIgFNgIAIAAQKgsNACAAQayIBTYCACAACw8AIABBhIgFNgIAIAAQKgsNACAAQYSIBTYCACAACw8AIABB3IcFNgIAIAAQKgsNACAAQdyHBTYCACAAC0sAIAAgASkD+AI3AgAgAEEIaiEAIAEsAIsDQQBOBEAgACABQYADaiIBKQIANwIAIAAgASgCCDYCCA8LIAAgASgCgAMgASgChAMQLgu8AgAjAEEgayIDJAAgAyABIAIQeyADLAATQQBIBEAgAygCEBogAygCCBAqCwJAIAEtAGEEQCAAIAFB2y0QkQEMAQsgASACEEk2AmggASACEEk2AmwgASACEEk2AnAgASACEEk2AnQgASACEEk2AnggA0EUaiACEJYBIAEsAIcBQQBIBEAgASgChAEaIAEoAnwQKgsgASADKQIUNwJ8IAEgAygCHDYChAEgAi0AFEEBRgRAIANBADoAFCADQQA6AB8gAEECQeQAIANBFGoQLxogAywAH0EATg0BIAMoAhwaIAMoAhQQKgwBCyAAQZClBSkCADcCACAAQQhqIQBBo6UFLAAAQQBOBEAgAEGYpQUpAgA3AgAgAEGgpQUoAgA2AggMAQsgAEGYpQUoAgBBnKUFKAIAEC4LIANBIGokAAsIACAAKAL0AgssACAAQYCHBTYCACAALACLA0EASARAIAAoAogDGiAAKAKAAxAqCyAAEHQQKgsqACAAQYCHBTYCACAALACLA0EASARAIAAoAogDGiAAKAKAAxAqCyAAEHQLDwAgAEHYhgU2AgAgABAqCw0AIABB2IYFNgIAIAALDwAgAEGwhgU2AgAgABAqCw0AIABBsIYFNgIAIAALDwAgAEGIhgU2AgAgABAqCw0AIABBiIYFNgIAIAALDwAgAEHghQU2AgAgABAqCw0AIABB4IUFNgIAIAALDwAgAEG4hQU2AgAgABAqCw0AIABBuIUFNgIAIAALDwAgAEGQhQU2AgAgABAqCw0AIABBkIUFNgIAIAALcgEBfyAAQQE2AgggAEKBgICAEDcCACAAQQA2AiQgACABKAIoIgI2AgwgASgCLCEBIABCADcCKCAAIAE2AhggACACNgIUIAAgATYCECAAQgA3AjAgAEIANwI4IABBQGtCADcCACAAQgA3AhwgAEEAOgAkC5QFAQZ/IwBB0ABrIgMkACADQQA6ADggA0IANwJEIANCADcDMCADQgA3AjwgAyABKAIUIgQoAjA2AiggAyAEKAI0IgQ2AiwgBARAIAQgBCgCBEEBajYCBAsgASgCJCEEIAMgAykCKDcDACADQTBqIAMgBBDSASADQQxqIAEgASgCACgCTBECAAJAIAMoAhQEQCAAQgA3AgAgACADKQIUNwIIIABBEGohACADLAAnQQBOBEAgACADKQIcNwIAIAAgAygCJDYCCAwCCyAAIAMoAhwgAygCIBAuDAELIAMoAgwhASADKAIQIgQEQCAEIAQoAgRBAWo2AgQLIAMoAkQhByADQQA2AkQgAygCNCEGIAMoAjAhBSADQgA3AzAgAygCPCEIIAMoAkAhCSADQgA3AjwgAygCSCEKIAMtADghCyABIAU2AgQgASgCCCEFIAEgBjYCCAJAIAVFDQAgBSAFKAIEIgZBAWs2AgQgBg0AIAUgBSgCACgCCBEAACAFECsLIAEgCzoADCABKAIQIgUEQCABIAU2AhQgASgCGBogBRAqCyABIAo2AhwgASAHNgIYIAEgCTYCFCABIAg2AhAgACABIAIgASgCACgCHBEDACAERQ0AIAQgBCgCBCIAQQFrNgIEIAANACAEIAQoAgAoAggRAAAgBBArCyADLAAnQQBIBEAgAygCJBogAygCHBAqCwJAIAMoAhAiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQKwsgAygCPCIABEAgAyAANgJAIAMoAkQaIAAQKgsCQCADKAI0IgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECsLIANB0ABqJAALtQUBBX8jAEFAaiICJAAgAkEgaiABIAEoAgAoAiAR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C1wBAX8jAEEgayIEJAAgBEEMaiABIAIQeyAELAAfQQBIBEAgBCgCHBogBCgCFBAqCwJAIAEtAGEEQCAAIAFBsfYAEJEBDAELIAAgASACQX8gAxCpAgsgBEEgaiQACx0BAX4gASAAKQMgIgJYBEAgACABNwMoCyABIAJYCykCAX8CfiMAQRBrIgEkACABIAAoAhgQywUgASkDCCEDIAFBEGokACADCwuPgAVgAEGACAuIqwIxN1N0cmVhbVJlYWRlcl9DQXBpADEyU3RyZWFtUmVhZGVyADIwU3RyZWFtUmVhZGVyX2lzdHJlYW0AMTlTdHJlYW1SZWFkZXJfbWVtb3J5AGhlaWZfc3ViZXJyb3JfVW5zdXBwb3J0ZWRfZXNzZW50aWFsX3Byb3BlcnR5AGhlaWZfc3ViZXJyb3JfSXBtYV9ib3hfcmVmZXJlbmNlc19ub25leGlzdGluZ19wcm9wZXJ0eQBoZWlmX3N1YmVycm9yX05vX2lzcGVfcHJvcGVydHkAaGVpZl9zdWJlcnJvcl9JbnZhbGlkX3Byb3BlcnR5AFVuc3VwcG9ydGVkIGVzc2VudGlhbCBpdGVtIHByb3BlcnR5ACdpcG1hJyBib3ggcmVmZXJlbmNlcyBhIG5vbi1leGlzdGluZyBwcm9wZXJ0eQBJbnZhbGlkIHByb3BlcnR5AEltYWdlIGhhcyBubyAnaXNwZScgcHJvcGVydHkAaGVpZl9jaGFubmVsX2Rpc3Bhcml0eQBpbmZpbml0eQBoZWlmX3N1YmVycm9yX0Nhbm5vdF9yZWFkX3BsdWdpbl9kaXJlY3RvcnkAaGVpZl9jb250ZXh0X3JlYWRfZnJvbV9tZW1vcnkARmVicnVhcnkASmFudWFyeQBKdWx5AFRtcCBkYXRhIGNvdWxkIG5vdCBiZSByZWFkIGNvbXBsZXRlbHkAaGVpZl9jaGFubmVsX2ZpbHRlcl9hcnJheQBUaHVyc2RheQBUdWVzZGF5AFdlZG5lc2RheQBTYXR1cmRheQBTdW5kYXkATW9uZGF5AEZyaWRheQBNYXkAaGV2eABoZWlmX3N1YmVycm9yX05vX2lkYXRfYm94AGhlaWZfc3ViZXJyb3JfTm9faGRscl9ib3gAaGVpZl9zdWJlcnJvcl9Ob19pY2JyX2JveABoZWlmX3N1YmVycm9yX05vX2Z0eXBfYm94AGhlaWZfc3ViZXJyb3JfTm9faXBycF9ib3gAaGVpZl9zdWJlcnJvcl9Ob19pcGNvX2JveABoZWlmX3N1YmVycm9yX05vX3BpdG1fYm94AGhlaWZfc3ViZXJyb3JfSW52YWxpZF9waXhpX2JveABoZWlmX3N1YmVycm9yX0ludmFsaWRfbWluaV9ib3gAaGVpZl9zdWJlcnJvcl9Ob19paW5mX2JveABoZWlmX3N1YmVycm9yX05vX2lyZWZfYm94AGhlaWZfc3ViZXJyb3JfTm9faW5mZV9ib3gAaGVpZl9zdWJlcnJvcl9Ob19pbG9jX2JveABoZWlmX3N1YmVycm9yX05vX21ldGFfYm94AGhlaWZfc3ViZXJyb3JfTm9faXBtYV9ib3gAaGVpZl9zdWJlcnJvcl9Ob192dmNDX2JveABoZWlmX3N1YmVycm9yX05vX2h2Y0NfYm94AGhlaWZfc3ViZXJyb3JfTm9fYXZjQ19ib3gAaGVpZl9zdWJlcnJvcl9Ob19hdjFDX2JveAB0aGlzIHByb3BlcnR5IGlzIG5vdCByZWFkIGFzIGEgcmF3IGJveABlcnJvciByZWFkaW5nIGZ0eXAgYm94AGlucHV0IGlzIG5vdCBhIGZ0eXAgYm94AEludmFsaWQgcGl4aSBib3gAQ2Fubm90IHJlYWQgZnVsbCBtZXRhIGJveAApIGhhcyBubyBwcm9wZXJ0aWVzIGFzc2lnbmVkIHRvIGl0IGluIGlwbWEgYm94ACByZWZlcmVuY2VkIGluIGlwbWEgYm94AGVycm9yIHdoaWxlIHJlYWRpbmcgaHZjQyBib3gATm8gJ2lkYXQnIGJveABObyAnaGRscicgYm94AE5vICdpY2JyJyBib3gATm8gJ2Z0eXAnIGJveABObyAnaXBycCcgYm94AE5vICdpcGNvJyBib3gATm8gJ3BpdG0nIGJveABVbnN1cHBvcnRlZCBvciBpbnZhbGlkICdtaW5pJyBib3gATm8gJ2lpbmYnIGJveABObyAnaXJlZicgYm94AE5vICdpbmZlJyBib3gATm8gJ2lsb2MnIGJveABObyAnbWV0YScgYm94AE5vICdpcG1hJyBib3gATm8gJ3Z2Y0MnIGJveABObyAnaHZjQycgYm94AE5vICdhdmNDJyBib3gATm8gJ2F2MUMnIGJveABJbnZhbGlkIHF1YXRlcm5pb24gaW4gZXh0cmluc2ljIHJvdGF0aW9uIG1hdHJpeABoZWl4AGNtZXgALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABfX25leHRfcHJpbWUgb3ZlcmZsb3cAaGVpZl9jaHJvbWFfZG93bnNhbXBsaW5nX3NoYXJwX3l1dgBOb3YAVGh1AGhlaWZfY29udGV4dABnZXRfdGhyZWFkX2NvbnRleHQAaGVpZl93cml0ZXIgY2FsbGJhY2sgcmV0dXJuZWQgYSBudWxsIGVycm9yIHRleHQAaGVpZl9lcnJvcl9JbnZhbGlkX2lucHV0AGludmFsaWQgZGlzcGFyaXR5X3JlZmVyZW5jZV92aWV3IGluIGlucHV0AGludmFsaWQgZGVwdGggcmVwcmVzZW50YXRpb24gdHlwZSBpbiBpbnB1dAB1bnN1cHBvcnRlZCBsb2NhbGUgZm9yIHN0YW5kYXJkIGlucHV0AEludmFsaWQgaW5wdXQAQXVndXN0AGhlaWZfZXJyb3JfSW5wdXRfZG9lc19ub3RfZXhpc3QAaGVpZl9lcnJvcl9Db2xvcl9wcm9maWxlX2RvZXNfbm90X2V4aXN0AFJlZ2lvbiBpdGVtIGRvZXMgbm90IGV4aXN0AEl0ZW0gZG9lcyBub3QgZXhpc3QAQ29sb3IgcHJvZmlsZSBkb2VzIG5vdCBleGlzdABJbnB1dCBmaWxlIGRvZXMgbm90IGV4aXN0AHJlYWRfc2NhbGluZ19saXN0AE1hc2sgaW1hZ2UgZGF0YSBpcyB0b28gc2hvcnQASEVWQyBTRUkgTkFMIHRvbyBzaG9ydAB1bnNpZ25lZCBzaG9ydAB1bnNpZ25lZCBpbnQAY29tcG9uZW50AGhlaWZfc3ViZXJyb3JfTnVsbF9wb2ludGVyX2FyZ3VtZW50AE5VTEwgYXJndW1lbnQAcmVmY250AGNvbnN0YW50AEhpZ2ggdmFyaWFudABoZWlmX2ZpbGV0eXBlX3Jlc3VsdAByZWFkX3RyYW5zZm9ybV91bml0AHJlYWRfY29kaW5nX3VuaXQAaW5pdABOdW1iZXIgb2YgdGlsZXMgZXhjZWVkcyBzZWN1cml0eSBsaW1pdABoZWlmX2Nocm9tYV9pbnRlcmxlYXZlZF8yNGJpdABoZWlmX2Nocm9tYV9pbnRlcmxlYXZlZF8zMmJpdABoZWlmX2ltYWdlX2hhbmRsZV9nZXRfaGVpZ2h0AHplcm8gd2lkdGggb3IgaGVpZ2h0AExheWVyZWQgSEVWQyBpbWFnZXMgKGxodjEpIGFyZSBub3Qgc3VwcG9ydGVkIHlldAAgaXMgbm90IGltcGxlbWVudGVkIHlldAByZWFkX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXQAZ2V0AE9jdABmbG9hdABoZWlmX2NvbXByZXNzaW9uX2Zvcm1hdABoZWlmX3N1YmVycm9yX1dyb25nX3RpbGVfaW1hZ2VfY2hyb21hX2Zvcm1hdABObyBkZWNvZGVyIGZvciB0aGlzIGltYWdlIGZvcm1hdABXcm9uZyB0aWxlIGltYWdlIGNocm9tYSBmb3JtYXQAU2F0AHVpbnQ2NF90AGhldnMAYWxsb2NhdGVfdGhyZWFkX2NvbnRleHRzAG4gPCBuVGhyZWFkQ29udGV4dHMAY29uc3RydWN0X3JlZmVyZW5jZV9waWN0dXJlX2xpc3RzACBjb21wb25lbnRzAGhlaWZfc3ViZXJyb3JfVW5rbm93bl9OQ0xYX21hdHJpeF9jb2VmZmljaWVudHMAVW5rbm93biBOQ0xYIG1hdHJpeCBjb2VmZmljaWVudHMAdW5pdFkgPj0gMCAmJiB1bml0WSA8IGhlaWdodF9pbl91bml0cwB1bml0WCA+PSAwICYmIHVuaXRYIDwgd2lkdGhfaW5fdW5pdHMAU3VjY2VzcwBmaWxsX2x1bWFfbW90aW9uX3ZlY3Rvcl9wcmVkaWN0b3JzAGRlcml2ZV9jb2xsb2NhdGVkX21vdGlvbl92ZWN0b3JzAHNwcwBwcHMARm9ybWF0UmFuZ2VFeHRlbnNpb25zAGhlaWZfc3ViZXJyb3JfVG9vX21hbnlfcmVnaW9ucwBFcnJvciB3aGlsZSBzY2FubmluZyB0aGUgZGlyZWN0b3J5IGZvciBwbHVnaW5zAERlcml2ZWQgaW1hZ2UgZG9lcyBub3QgcmVmZXJlbmNlIGFueSBvdGhlciBpbWFnZSBpdGVtcwBjaGFubmVscwBpbml0aWFsaXplX0NBQkFDX21vZGVscwBhdmlzAGhlaXMAaW1hZ2UvajJpcwBHcmlkIHRpbGVzIGhhdmUgZGlmZmVyZW50IHNpemVzAHNldF9kZXJpdmVkX3ZhbHVlcwAgYnl0ZXMAZGVyaXZlX2NvbWJpbmVkX2JpcHJlZGljdGl2ZV9tZXJnaW5nX2NhbmRpZGF0ZXMAWUNiQ3IgaW1hZ2Ugd2l0aG91dCBZLENiLENyIHBsYW5lcwBSR0IgaW5wdXQgd2l0aG91dCBSLEcsQiwgcGxhbmVzAGdlbmVyYXRlX2ludGVyX3ByZWRpY3Rpb25fc2FtcGxlcwBkZWNvZGVfc2xpY2VfdW5pdF90aWxlcwAgbGF5ZXJzIGVudHJpZXMAaGVpZl9zdWJlcnJvcl9Vbmtub3duX05DTFhfY29sb3JfcHJpbWFyaWVzAFVua25vd24gTkNMWCBjb2xvciBwcmltYXJpZXMAdGhyZWFkX2ZpbmlzaGVzAGhlaWZfY29udGV4dF9nZXRfbnVtYmVyX29mX3RvcF9sZXZlbF9pbWFnZXMAaGVpZl9zdWJlcnJvcl9NaXNzaW5nX2dyaWRfaW1hZ2VzACdzdGVyJyBlbnRpdHkgZ3JvdXAgZG9lcyBub3QgZXhpc3RzIG9mIGV4YWN0bHkgdHdvIGltYWdlcwBNaXNzaW5nIGdyaWQgaW1hZ2VzAHVkZXMAJ2lyZWYnIGhhcyBkb3VibGUgcmVmZXJlbmNlcwBOdW1iZXIgb2YgaW1hZ2Ugb2Zmc2V0cyBkb2VzIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIGltYWdlIHJlZmVyZW5jZXMAaGVpZl9zdWJlcnJvcl9Vbmtub3duX05DTFhfdHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzAFVua25vd24gTkNMWCB0cmFuc2ZlciBjaGFyYWN0ZXJpc3RpY3MAaGVpZl9zdWJlcnJvcl9PdmVybGF5X2ltYWdlX291dHNpZGVfb2ZfY2FudmFzAHk8c3BzLT5QaWNIZWlnaHRJbk1pblBVcwB4PHNwcy0+UGljV2lkdGhJbk1pblBVcwBoZWlmX2pzX2NvbnRleHRfZ2V0X2xpc3Rfb2ZfdG9wX2xldmVsX2ltYWdlX0lEcwBiYWRfd2Vha19wdHIAQXByAHZlY3RvcgBmaWxsX3NjYWxpbmdfZmFjdG9yAGhlaWZfc3ViZXJyb3JfQ29tcHJlc3Npb25faW5pdGlhbGlzYXRpb25fZXJyb3IAaGVpZl9lcnJvcl9NZW1vcnlfYWxsb2NhdGlvbl9lcnJvcgBoZWlmX2Vycm9yX0VuY29kZXJfcGx1Z2luX2Vycm9yAGhlaWZfZXJyb3JfRGVjb2Rlcl9wbHVnaW5fZXJyb3IAaGVpZl9lcnJvcl9FbmNvZGluZ19lcnJvcgBoZWlmX3N1YmVycm9yX1BsdWdpbl9sb2FkaW5nX2Vycm9yAGhlaWZfZXJyb3JfUGx1Z2luX2xvYWRpbmdfZXJyb3IAaGVpZl9lcnJvcgBoZWlmX2Vycm9yX1VzYWdlX2Vycm9yAG1vbmV5X2dldCBlcnJvcgBVbmtub3duIGVycm9yAE1lbW9yeSBhbGxvY2F0aW9uIGVycm9yAEVuY29kZXIgcGx1Z2luIGdlbmVyYXRlZCBhbiBlcnJvcgBEZWNvZGVyIHBsdWdpbiBnZW5lcmF0ZWQgYW4gZXJyb3IASW50ZXJuYWwgZXJyb3IAVXNhZ2UgZXJyb3IAQ29tcHJlc3Npb24gaW5pdGlhbGlzYXRpb24gbWV0aG9kIGVycm9yAGhlaWZfY2hyb21hX3Vwc2FtcGxpbmdfbmVhcmVzdF9uZWlnaGJvcgBoZWlmX2Nocm9tYV9kb3duc2FtcGxpbmdfbmVhcmVzdF9uZWlnaGJvcgBoZGxyAHN1Yl9sYXllcgBtdWx0aS1sYXllcgBoZWlmX3N1YmVycm9yX1Vuc3VwcG9ydGVkX3BhcmFtZXRlcgBVbnN1cHBvcnRlZCBlbmNvZGVyIHBhcmFtZXRlcgBVbnN1cHBvcnRlZCBwYXJhbWV0ZXIAQ2FuY2VsZWQgYnkgdXNlcgBoZWlmX3N1YmVycm9yX05vX3BpY3RfaGFuZGxlcgBOb3QgYSAncGljdCcgaGFuZGxlcgBNaXNzaW5nIHJlcXVpcmVkIFNJWiBNYXJrZXIATWlzc2luZyByZXF1aXJlZCBTT0MgTWFya2VyAGRlMjY1X2ltYWdlX2dldF9idWZmZXIAb3V0cHV0X25leHRfcGljdHVyZV9pbl9yZW9yZGVyX2J1ZmZlcgBpbml0X0NBQkFDX2RlY29kZXIAbGliZGUyNjUgSEVWQyBkZWNvZGVyAGR1bXBfc2xpY2Vfc2VnbWVudF9oZWFkZXIASW52YWxpZCBKUEVHIFNPRiBoZWFkZXIAT2N0b2JlcgBoZWlmX2dldF92ZXJzaW9uX251bWJlcgBoZWlmX3N1YmVycm9yX0ludmFsaWRfZnJhY3Rpb25hbF9udW1iZXIASW52YWxpZCBmcmFjdGlvbmFsIG51bWJlcgBOb3ZlbWJlcgBTZXB0ZW1iZXIARGVjZW1iZXIAYnIAcGxhbmFyAGludHJhX3ByZWRpY3Rpb25fYW5ndWxhcgB1bnNpZ25lZCBjaGFyAGhlaWZfY2hyb21hX3Vwc2FtcGxpbmdfYmlsaW5lYXIAaW9zX2Jhc2U6OmNsZWFyAE1hcgBoZWlmX2NvbG9yc3BhY2VfWUNiQ3IAaGVpZl9jaGFubmVsX0NyAGhlaWZfc3ViZXJyb3JfRW5jb2Rlcl9jbGVhbnVwAFNlcAAlSTolTTolUyAlcABtb25vAGhlaWZfZmlsZXR5cGVfbm8AdW5rbm93bgBVbmtub3duAFN1bgBKdW4Ac3RkOjpleGNlcHRpb24ARXJyb3Igc2V0dGluZyBpbnB1dCBmaWxlIHBvc2l0aW9uAGRlcml2ZV9zcGF0aWFsX2x1bWFfdmVjdG9yX3ByZWRpY3Rpb24AaGVpZl9zdWJlcnJvcl9FbmNvZGVyX2luaXRpYWxpemF0aW9uAHVua25vd24gY29sb3IgY29uZmlndXJhdGlvbgBJbnZhbGlkIGRhdGEgaW4gZ2VuZXJpYyBjb21wcmVzc2lvbiBpbmZsYXRpb24ASW52YWxpZCBjbGVhbi1hcGVydHVyZSBzcGVjaWZpY2F0aW9uAGhlaWZfc3ViZXJyb3JfVW5zdXBwb3J0ZWRfY29sb3JfY29udmVyc2lvbgBVbnN1cHBvcnRlZCBjb2xvciBjb252ZXJzaW9uAGhlaWZfZ2V0X3ZlcnNpb24AaGVpZl9zdWJlcnJvcl9VbnN1cHBvcnRlZF93cml0ZXJfdmVyc2lvbgBoZWlmX3N1YmVycm9yX1Vuc3VwcG9ydGVkX3BsdWdpbl92ZXJzaW9uAGhlaWZfc3ViZXJyb3JfVW5zdXBwb3J0ZWRfZGF0YV92ZXJzaW9uAFVuc3VwcG9ydGVkIHBsdWdpbiB2ZXJzaW9uAFVuc3VwcG9ydGVkIGRhdGEgdmVyc2lvbgBJbnN1ZmZpY2llbnQgZGF0YSByZW1haW5pbmcgZm9yIHBvaW50IHJlZ2lvbgBVbnN1cHBvcnRlZCBiaXQgZGVwdGggZm9yIG1hc2sgcmVnaW9uAFVuc3VwcG9ydGVkIGNvbG91cnNwYWNlIGZvciBtYXNrIHJlZ2lvbgBJbnN1ZmZpY2llbnQgZGF0YSByZW1haW5pbmcgZm9yIGlubGluZSBtYXNrIHJlZ2lvbgBJbnN1ZmZpY2llbnQgZGF0YSByZW1haW5pbmcgZm9yIHJlZmVyZW5jZWQgbWFzayByZWdpb24ASW5zdWZmaWNpZW50IGRhdGEgcmVtYWluaW5nIGZvciBlbGxpcHNlIHJlZ2lvbgBJbnN1ZmZpY2llbnQgZGF0YSByZW1haW5pbmcgZm9yIHJlY3RhbmdsZSByZWdpb24ASW5zdWZmaWNpZW50IGRhdGEgcmVtYWluaW5nIGZvciBwb2x5Z29uAE1vbgBjbWluAEVycm9yIHdoaWxlIGxvYWRpbmcgcGx1Z2luAE1haW4AU3VwcG9ydCBmb3IgdGhpcyBjb21wcmVzc2lvbiBmb3JtYXQgaGFzIG5vdCBiZWVuIGJ1aWx0IGluAE5VTEwgYXJndW1lbnQgcGFzc2VkIGluAG5hbgBKYW4AaGV2bQBwaXRtAGNvcHlfbGluZXNfZnJvbQBoZWltAGhlaWZfY2hyb21hX3Vwc2FtcGxpbmdfYWxnb3JpdGhtAGhlaWZfY2hyb21hX2Rvd25zYW1wbGluZ19hbGdvcml0aG0AaGVpZl9zdWJlcnJvcl9Ob19vcl9pbnZhbGlkX3ByaW1hcnlfaXRlbQBoZWlmX3N1YmVycm9yX05vX3Byb3BlcnRpZXNfYXNzaWduZWRfdG9faXRlbQBObyBvciBpbnZhbGlkIHByaW1hcnkgaXRlbQBObyBwcm9wZXJ0aWVzIGFzc2lnbmVkIHRvIGl0ZW0AVW5zdXBwb3J0ZWQgYml0IGRlcHRoIGZvciBtYXNrIGl0ZW0AQ2xlYW51cCBwcm9ibGVtAEluaXRpYWxpemF0aW9uIHByb2JsZW0ARW5jb2RpbmcgcHJvYmxlbQBoZWlmX3N1YmVycm9yX0ludmFsaWRfSjJLX2NvZGVzdHJlYW0ASW52YWxpZCBKUEVHIDIwMDAgY29kZXN0cmVhbQBKdWwAdXJsAGRlMjY1X3NldF9wYXJhbWV0ZXJfYm9vbABhcHBsaWNhdGlvbi9yZGYreG1sAGxsAEFwcmlsAFRodW1ibmFpbCByZWZlcmVuY2VzIGFub3RoZXIgdGh1bWJuYWlsAGJpdHNfcGVyX3BpeGVsAENhbiBjdXJyZW50bHkgb25seSBjcm9wIGltYWdlcyB3aXRoIDggYml0cyBwZXIgcGl4ZWwAQ2FuIGN1cnJlbnRseSBvbmx5IGZpbGwgaW1hZ2VzIHdpdGggOCBiaXRzIHBlciBwaXhlbABoZWlmX2NoYW5uZWwASW5saW5lIG1hc2sgaW1hZ2UgbXVzdCBoYXZlIGEgWSBjaGFubmVsAGRlY29kZV9zbGljZV91bml0X3BhcmFsbGVsAGhlaWZfY29sb3JzcGFjZV9ub252aXN1YWwAZ2VuZXJhbABzY2FsZV9jb2VmZmljaWVudHNfaW50ZXJuYWwAaGVpZl9jb21wcmVzc2lvbl9tYXNrAHRyYW5zZm9ybV9za2lwXzhfZmFsbGJhY2sAcHV0X3dlaWdodGVkX3ByZWRfYXZnXzhfZmFsbGJhY2sAcHV0X3dlaWdodGVkX2JpcHJlZF84X2ZhbGxiYWNrAHB1dF91bndlaWdodGVkX3ByZWRfOF9mYWxsYmFjawBwdXRfd2VpZ2h0ZWRfcHJlZF84X2ZhbGxiYWNrAHRyYW5zZm9ybV9za2lwXzE2X2ZhbGxiYWNrAHB1dF93ZWlnaHRlZF9wcmVkX2F2Z18xNl9mYWxsYmFjawBwdXRfd2VpZ2h0ZWRfYmlwcmVkXzE2X2ZhbGxiYWNrAHB1dF91bndlaWdodGVkX3ByZWRfMTZfZmFsbGJhY2sAcHV0X3dlaWdodGVkX3ByZWRfMTZfZmFsbGJhY2sAaGVpZl9lcnJvcl9PawBpbWFnZS9oZWoyawBwaXhpAEZyaQBqMmtpAGhlaWZfc3ViZXJyb3JfVW5zdXBwb3J0ZWRfYml0X2RlcHRoAGhlaWZfc3ViZXJyb3JfV3JvbmdfdGlsZV9pbWFnZV9waXhlbF9kZXB0aABoZWlmX2NoYW5uZWxfZGVwdGgAdXJuOm1wZWc6bXBlZ0I6Y2ljcDpzeXN0ZW1zOmF1eGlsaWFyeTpkZXB0aABVbnN1cHBvcnRlZCBiaXQgZGVwdGgAV3JvbmcgdGlsZSBpbWFnZSBwaXhlbCBkZXB0aABkZXJpdmVfYm91bmRhcnlTdHJlbmd0aABiYWRfYXJyYXlfbmV3X2xlbmd0aABoZWlmX2ltYWdlX2hhbmRsZV9nZXRfd2lkdGgAcHVzaABNYXJjaAAuL2RlY2N0eC5oAC4uL2xpYmRlMjY1L2ltYWdlLmgALi9pbWFnZS5oAC4vaW50cmFwcmVkLmgAQXVnAGltYWdlL3BuZwB1bnNpZ25lZCBsb25nAHN0ZDo6d3N0cmluZwBiYXNpY19zdHJpbmcAc3RkOjpzdHJpbmcAc3RkOjp1MTZzdHJpbmcAc3RkOjp1MzJzdHJpbmcARmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHR5cGUgc3RyaW5nAGludHJhX3ByZWRpY3Rpb25fc2FtcGxlX2ZpbHRlcmluZwBoZWlmX3N1YmVycm9yX0VuY29kZXJfZW5jb2RpbmcAaW1hZ2UvanBlZwBkZWNvZGVfc3BsaXRfdHJhbnNmb3JtX2ZsYWcAaW5mACdpZGVuJyBpbWFnZSByZWZlcnJpbmcgdG8gaXRzZWxmAGltYWdlL2F2aWYAaW1hZ2UvaGVpZgBvZmYAaXJlZgBkcmVmACUuMExmACVMZgBoZWlmX3N1YmVycm9yX0ludmFsaWRfYm94X3NpemUAaGVpZl9zdWJlcnJvcl9JbnZhbGlkX2ltYWdlX3NpemUAaWR4PGludHJhUHJlZE1vZGVDLmRhdGFfc2l6ZQBJbnZhbGlkIGJveCBzaXplAGF2MUMgd2l0aCB1bnNwZWNpZmllZCBib3ggc2l6ZQBqcGdDIGJsb2NrIGV4Y2VlZHMgbWF4aW11bSBzaXplAFJlYWQgYmV5b25kIGZpbGUgc2l6ZQBJbnZhbGlkIGltYWdlIHNpemUASW1hZ2Ugc2l6ZSBleGNlZWRzIG1heGltdW0gc3VwcG9ydGVkIHNpemUAQ29sb3IgcHJvZmlsZSBleGNlZWRzIG1heGltdW0gc3VwcG9ydGVkIHNpemUAQ2Fubm90IHJlYWQgbWV0YSBib3ggd2l0aCB1bnNwZWNpZmllZCBzaXplAGRhdGEgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUAaW50ZXJsZWF2ZQB0cnVlAGhlaWZfc3ViZXJyb3JfSW52YWxpZF9wYXJhbWV0ZXJfdmFsdWUAT3V0IG9mIHJhbmdlIExzaXogdmFsdWUAT3V0IG9mIHJhbmdlIENzaXogdmFsdWUASW52YWxpZCBwYXJhbWV0ZXIgdmFsdWUAT3V0IG9mIHJhbmdlIExjYXAgdmFsdWUASW52YWxpZCBpbnB1dCByZWFkZXIgcmV0dXJuIHZhbHVlAHNldF9pbml0VmFsdWUAVHVlAFRpbGkgaGVhZGVyIGRhdGEgaW5jb21wbGV0ZQBSZWdpb24gZGF0YSBpbmNvbXBsZXRlAE92ZXJsYXkgaW1hZ2UgZGF0YSBpbmNvbXBsZXRlAEdyaWQgaW1hZ2UgZGF0YSBpbmNvbXBsZXRlAGRlZmxhdGUAZmFsc2UAaGVpZl9pbWFnZV9oYW5kbGVfcmVsZWFzZQBoZWlmX2ltYWdlX3JlbGVhc2UAaGVpZl9zdWJlcnJvcl9JbnZhbGlkX2NsZWFuX2FwZXJ0dXJlAGdlbmVyYXRlX3VuYXZhaWxhYmxlX3JlZmVyZW5jZV9waWN0dXJlAE1haW5TdGlsbFBpY3R1cmUAaGVpZl9lcnJvcl9VbnN1cHBvcnRlZF9mZWF0dXJlAFVuc3VwcG9ydGVkIGZlYXR1cmUAaGVpZl9qc19jaGVja19maWxldHlwZQBoZWlmX2Vycm9yX1Vuc3VwcG9ydGVkX2ZpbGV0eXBlAGhlaWZfc3ViZXJyb3JfVW5rbm93bl9jb2xvcl9wcm9maWxlX3R5cGUAaGVpZl9zdWJlcnJvcl9VbnN1cHBvcnRlZF9pbWFnZV90eXBlAFVuc3VwcG9ydGVkIGZpbGUtdHlwZQB3cm9uZyBwcm9wZXJ0eSB0eXBlAFVua25vd24gY29sb3IgcHJvZmlsZSB0eXBlAFVuc3VwcG9ydGVkIGltYWdlIHR5cGUAaXNwZQBKdW5lAENvbnN0cmFpbmVkIEJhc2VsaW5lAGRlMjY1X2dldF9pbWFnZV9wbGFuZQBzY2FsaW5nIGlucHV0IGhhcyBleHRyYSBjb2xvciBwbGFuZQBtb25vY2hyb21lIGlucHV0IHdpdGggbm8gWSBwbGFuZQBoZWlmX2NvbG9yc3BhY2VfbW9ub2Nocm9tZQBoZWlmX2Nocm9tYV9tb25vY2hyb21lAGRlY291cGxlACd0aWxpJyBpbWFnZXMgY2FuIG9ubHkgYmUgYWNjZXNzIHBlciB0aWxlAEVycm9yIGR1cmluZyBlbmNvZGluZyBvciB3cml0aW5nIG91dHB1dCBmaWxlAEVycm9yIHJlYWRpbmcgaW5wdXQgZmlsZQBpZGF0IGJveCByZWZlcmVuY2VkIGluIGlyZWYgYm94IGlzIG5vdCBwcmVzZW50IGluIGZpbGUAIHRpbGUgaW1hZ2VzIGluIGZpbGUAVW5leHBlY3RlZCBlbmQgb2YgZmlsZQBmdHlwIGJveCBzaGFsbCBub3QgYmUgdGhlIG9ubHkgYm94IGluIHRoZSBmaWxlAGhlaWZfanNfY29udGV4dF9nZXRfcHJpbWFyeV9pbWFnZV9oYW5kbGUAaGVpZl9qc19jb250ZXh0X2dldF9pbWFnZV9oYW5kbGUAaGVpZl9pbWFnZV9oYW5kbGUAaGVpZl9zdWJlcnJvcl9JdGVtX3JlZmVyZW5jZV9jeWNsZQBJbWFnZSByZWZlcmVuY2UgY3ljbGUAZG91YmxlAHJlYWRfcHJlZF93ZWlnaHRfdGFibGUAYWxsb2NfYW5kX2luaXRfc2lnbmlmaWNhbnRfY29lZmZfY3R4SWR4X2xvb2t1cFRhYmxlAEJveCBzaXplIHRvbyBsYXJnZQBwcm9wZXJ0eSBpbmRleCBvdXQgb2YgcmFuZ2UAR3JpZCB0aWxlIGluZGV4IG91dCBvZiByYW5nZQBpbnB1dCBkZXB0aCByZXByZXNlbnRhdGlvbiB0eXBlIG91dCBvZiByYW5nZQBpbG9jIGRhdGEgcG9pbnRlcnMgb3V0IG9mIGFsbG93ZWQgcmFuZ2UAZnR5cCBib3ggbGFyZ2VyIHRoYW4gaW5pdGlhbCByZWFkIHJhbmdlAG1lc3NhZ2UAaGVpZl9jaHJvbWFfZG93bnNhbXBsaW5nX2F2ZXJhZ2UAaGVpZl9pbWFnZV9oYW5kbGVfaXNfcHJpbWFyeV9pbWFnZQBuZXdfaW1hZ2UAZmlsbF9mcm9tX2ltYWdlAGhlaWZfaW1hZ2UAYWxsb2NfaW1hZ2UATm8gaXJlZiBib3ggYXZhaWxhYmxlLCBidXQgbmVlZGVkIGZvciBpZGVuIGltYWdlAFJlZ2lvbiBtYXNrIHJlZmVyZW5jZWQgaXRlbSBpcyBub3QgYW4gaW1hZ2UATm8gaXJlZiBib3ggYXZhaWxhYmxlLCBidXQgbmVlZGVkIGZvciBpb3ZsIGltYWdlACdwaXRtJyBib3ggcmVmZXJlbmNlcyBhbiB1bnN1cHBvcnRlZCBvciBub24tZXhpc3RpbmcgaW1hZ2UAUmVnaW9uIGl0ZW0gYXNzaWduZWQgdG8gbm9uLWV4aXN0aW5nIGltYWdlAGBwcmVtYCBsaW5rIGFzc2lnbmVkIHRvIG5vbi1leGlzdGluZyBpbWFnZQBNZXRhZGF0YSBhc3NpZ25lZCB0byBub24tZXhpc3RpbmcgaW1hZ2UAVGh1bWJuYWlsIHJlZmVyZW5jZXMgYSBub24tZXhpc3RpbmcgaW1hZ2UATm8gdnZjQyBwcm9wZXJ0eSBpbiB2dmMxIHR5cGUgaW1hZ2UATm8gaHZjQyBwcm9wZXJ0eSBpbiBodmMxIHR5cGUgaW1hZ2UAR3JpZCB0aWxlcyBkbyBub3QgY292ZXIgd2hvbGUgaW1hZ2UAJ2lkZW4nIGltYWdlIHJlZmVyZW5jZXMgdW5hdmFpbGFibGUgaW1hZ2UAJ2lkZW4nIGltYWdlIHdpdGggbW9yZSB0aGFuIG9uZSByZWZlcmVuY2UgaW1hZ2UATm8gaXJlZiBib3ggYXZhaWxhYmxlLCBidXQgbmVlZGVkIGZvciBncmlkIGltYWdlAEltYWdlIGlzIG5vIGdyaWQgaW1hZ2UASW1hZ2UgdGlsZSBoYXMgZGlmZmVyZW50IGNocm9tYSBmb3JtYXQgdGhhbiBjb21iaW5lZCBpbWFnZQBDYW5ub3QgYWRkIHRpbGUgdG8gYSBub24tdGlsZWQgaW1hZ2UAaW5mZQByZWFkX3RyYW5zZm9ybV90cmVlAGhlaWZfY29udGV4dF9mcmVlAGRlY29kZV9wYXJ0X21vZGUAZGVjb2RlAHN1YmNvZGUAaGVpZl9zdWJlcnJvcl9jb2RlAGhlaWZfZXJyb3JfY29kZQBQcmVkTW9kZSA9PSBjdVByZWRNb2RlAHN0cmlkZQBpbWFnZS9hdmlmLXNlcXVlbmNlAGltYWdlL2hlaWYtc2VxdWVuY2UAaW1hZ2UvaGVpYy1zZXF1ZW5jZQBSZWdpb24gbWFzayByZWZlcmVuY2Ugd2l0aCBub24tZXhpc3RpbmcgbWFzayBpbWFnZSByZWZlcmVuY2UAaGVpZl9jb2xvcnNwYWNlAGhlaWZfZmlsZXR5cGVfbWF5YmUAaGVpZl9zdWJlcnJvcl9VbnN1cHBvcnRlZF9pdGVtX2NvbnN0cnVjdGlvbl9tZXRob2QAaGVpZl9zdWJlcnJvcl9VbnN1cHBvcnRlZF9oZWFkZXJfY29tcHJlc3Npb25fbWV0aG9kAGhlaWZfc3ViZXJyb3JfVW5zdXBwb3J0ZWRfZ2VuZXJpY19jb21wcmVzc2lvbl9tZXRob2QAVW5zdXBwb3J0ZWQgaXRlbSBjb25zdHJ1Y3Rpb24gbWV0aG9kAFVuc3VwcG9ydGVkIGhlYWRlciBjb21wcmVzc2lvbiBtZXRob2QAVW5zdXBwb3J0ZWQgZ2VuZXJpYyBjb21wcmVzc2lvbiBtZXRob2QATm8gbWV0YSBib3ggZm91bmQAdm9pZABOVUxMIGFyZ3VtZW50IHJlY2VpdmVkAGhlaWZfY2hhbm5lbF9pbnRlcmxlYXZlZABoZWlmX2ZpbGV0eXBlX3llc191bnN1cHBvcnRlZABoZWlmX2ZpbGV0eXBlX3llc19zdXBwb3J0ZWQAVGhlIHZlcnNpb24gb2YgdGhlIHBhc3NlZCB3cml0ZXIgaXMgbm90IHN1cHBvcnRlZABUaGUgdmVyc2lvbiBvZiB0aGUgcGFzc2VkIHBsdWdpbiBpcyBub3Qgc3VwcG9ydGVkAHBjbHIgbW9yZSB0aGFuIDE2IGJpdHMgcGVyIGNoYW5uZWwgaXMgbm90IHN1cHBvcnRlZABwY2xyIHdpdGggc2lnbmVkIGRhdGEgaXMgbm90IHN1cHBvcnRlZABQbHVnaW5zIGFyZSBub3Qgc3VwcG9ydGVkAENoYW5uZWxzIHdpdGggZGlmZmVyZW50IG51bWJlciBvZiBiaXRzIHBlciBwaXhlbCBhcmUgbm90IHN1cHBvcnRlZABjb2xyIGJveGVzIHdpdGggdW5kZWZpbmVkIGJveCBzaXplIGFyZSBub3Qgc3VwcG9ydGVkAGpwZ0Mgd2l0aCB1bnNwZWNpZmllZCBzaXplIGFyZSBub3Qgc3VwcG9ydGVkAGxvY2FsZSBub3Qgc3VwcG9ydGVkAERlZmxhdGUgY29tcHJlc3NlZCBpbmxpbmUgbWFzayBpcyBub3QgeWV0IHN1cHBvcnRlZABzY2FsaW5nIGxpc3QgbG9nZ2luZyBvdXRwdXQgbm90IGltcGxlbWVudGVkAFJlY3Vyc2l2ZSBhdXggaW1hZ2UgZGV0ZWN0ZWQAUmVjdXJzaXZlIHRodW1ibmFpbCBpbWFnZSBkZXRlY3RlZABSZWN1cnNpdmUgZGVwdGggaW1hZ2UgZGV0ZWN0ZWQAUmVjdXJzaXZlIGFscGhhIGltYWdlIGRldGVjdGVkAGhlaWZfY29tcHJlc3Npb25fdW5jb21wcmVzc2VkAE5VTEwgcGFzc2VkAGhlaWZfc3ViZXJyb3JfQ2FtZXJhX2V4dHJpbnNpY19tYXRyaXhfdW5kZWZpbmVkAGhlaWZfc3ViZXJyb3JfQ2FtZXJhX2ludHJpbnNpY19tYXRyaXhfdW5kZWZpbmVkAGhlaWZfY29tcHJlc3Npb25fdW5kZWZpbmVkAGhlaWZfY29sb3JzcGFjZV91bmRlZmluZWQAaGVpZl9jaHJvbWFfdW5kZWZpbmVkAENhbWVyYSBleHRyaW5zaWMgbWF0cml4IHVuZGVmaW5lZABDYW1lcmEgaW50cmluc2ljIG1hdHJpeCB1bmRlZmluZWQAaGVpZl9zdWJlcnJvcl9Ob19tYXRjaGluZ19kZWNvZGVyX2luc3RhbGxlZABtdXRleCBsb2NrIGZhaWxlZABEZWNvZGluZyB0aGUgaW1hZ2Ugd2FzIGNhbmNlbGVkAGhlaWZfZXJyb3JfQ2FuY2VsZWQAaGVpZl9zdWJlcnJvcl9BdXhpbGlhcnlfaW1hZ2VfdHlwZV91bnNwZWNpZmllZABUeXBlIG9mIGF1eGlsaWFyeSBpbWFnZSB1bnNwZWNpZmllZABoZWlmX3N1YmVycm9yX1Vuc3BlY2lmaWVkAGhlaWZfc3ViZXJyb3JfU2VjdXJpdHlfbGltaXRfZXhjZWVkZWQAU2VjdXJpdHkgbGltaXQgZXhjZWVkZWQAU2VjdXJpdHkgbGltaXQgZm9yIG1heGltdW0gbmVzdGluZyBvZiBib3hlcyBoYXMgYmVlbiBleGNlZWRlZABoZWlmX3N1YmVycm9yX1BsdWdpbl9pc19ub3RfbG9hZGVkAFRyeWluZyB0byByZW1vdmUgYSBwbHVnaW4gdGhhdCBpcyBub3QgbG9hZGVkAFBsdWdpbiBmaWxlIGNhbm5vdCBiZSBsb2FkZWQAaGVpZl9zdWJlcnJvcl9Ob25leGlzdGluZ19pdGVtX3JlZmVyZW5jZWQAaGVpZl9zdWJlcnJvcl9Ob25leGlzdGluZ19pbWFnZV9jaGFubmVsX3JlZmVyZW5jZWQATm9uLWV4aXN0aW5nIGltYWdlIGNoYW5uZWwgcmVmZXJlbmNlZABOb24tZXhpc3RpbmcgYXV4IGltYWdlIHJlZmVyZW5jZWQATm9uLWV4aXN0aW5nIGRlcHRoIGltYWdlIHJlZmVyZW5jZWQATm9uZXhpc3RlbnQgZ3JpZCBpbWFnZSByZWZlcmVuY2VkAE5vbi1leGlzdGluZyBhbHBoYSBpbWFnZSByZWZlcmVuY2VkAE5vbi1leGlzdGluZyBpdGVtIElEIHJlZmVyZW5jZWQAV2VkAHNwcy0+c3BzX3JlYWQAcHBzLT5wcHNfcmVhZABzbGljZS1zZWdtZW50LSVkOyVkAGN0Yi1yb3ctJWQAc2FvLSVkAGRlYmxvY2stJWQAKiVkAGhldmMAaGVpZl9jb250ZXh0X2FsbG9jAHN0ZDo6YmFkX2FsbG9jAGlsb2MAY3R4SWR4TG9va3VwW2xvZzJ3LTJdW2NJZHhdW3NjYW5JZHhdW3ByZXZDc2JmXVt4QysoeUM8PGxvZzJ3KV0gPT0gY3R4SWR4SW5jAGdldF91dmxjAHZ2aWMAaW1hZ2UvaGVpYwBoZWlmX3N1YmVycm9yX1Vuc3VwcG9ydGVkX2NvZGVjAE1pc3NpbmcgcmVxdWlyZWQgYm94IGZvciBtYXNrIGNvZGVjAFVuc3VwcG9ydGVkIGNvZGVjAERlYwBkZWNjdHguY2MAZmFsbGJhY2stZGN0LmNjAHZwcy5jYwBzcHMuY2MAcHBzLmNjAG5hbC1wYXJzZXIuY2MAZmFsbGJhY2stbW90aW9uLmNjAHRyYW5zZm9ybS5jYwBiaXRzdHJlYW0uY2MAY29udGV4dG1vZGVsLmNjAGRlYmxvY2suY2MAaW1hZ2UuY2MAc2xpY2UuY2MAcmVmcGljLmNjAGNhYmFjLmNjAGRwYi5jYwBkZTI2NS5jYwB3YgByYgBjb21wcmVzc196bGliAEZlYgBhYgBoZWlmX2NoYW5uZWxfQ2IAdytiAHIrYgBhK2IAcndhAG1ldGEAZGVjb3VwbGVfb3JfYWxsb2Nfd2l0aF9lbXB0eV9kYXRhAGhlaWZfc3ViZXJyb3JfSW52YWxpZF9vdmVybGF5X2RhdGEAaGVpZl9zdWJlcnJvcl9DYW5ub3Rfd3JpdGVfb3V0cHV0X2RhdGEAaGVpZl9zdWJlcnJvcl9JbnZhbGlkX3JlZ2lvbl9kYXRhAGhlaWZfc3ViZXJyb3JfTm9faXRlbV9kYXRhAGhlaWZfc3ViZXJyb3JfRW5kX29mX2RhdGEAaGVpZl9zdWJlcnJvcl9JbnZhbGlkX2dyaWRfZGF0YQBoZWlmX3N1YmVycm9yX0RlY29tcHJlc3Npb25faW52YWxpZF9kYXRhAEludmFsaWQgb3ZlcmxheSBkYXRhAENhbm5vdCB3cml0ZSBvdXRwdXQgZGF0YQBpbnN1ZmZpY2llbnQgaW5wdXQgZGF0YQBJbnN1ZmZpY2llbnQgaW5wdXQgZGF0YQBJdGVtIGhhcyBubyBkYXRhAEludmFsaWQgcmVnaW9uIGl0ZW0gZGF0YQBMZXNzIHRoYW4gOCBieXRlcyBvZiBkYXRhAEludmFsaWQgZ3JpZCBkYXRhACBoYXMgbm8gY29tcHJlc3NlZCBkYXRhAGlwbWEAaGVpZl9jaHJvbWEAbWNfY2hyb21hAHVybjptcGVnOm1wZWdCOmNpY3A6c3lzdGVtczphdXhpbGlhcnk6YWxwaGEAaGVpZl9jaGFubmVsX0FscGhhAE92ZXJsYXkgaW1hZ2Ugb3V0c2lkZSBvZiBjYW52YXMgYXJlYQBJbnN1ZmZpY2llbnQgZGF0YSByZW1haW5pbmcgZm9yIGlubGluZSBtYXNrIHJlZ2lvbiBkYXRhW10AICBxID0gWwBsYXllci1zaXplczogWwBoZWlmX2NoYW5uZWxfWQAlYSAlYiAlZCAlSDolTTolUyAlWQBQT1NJWABMSUJIRUlGX1NFQ1VSSVRZX0xJTUlUUwBmaXJzdExheWVyUmVhZCA8IE1BWF9URU1QT1JBTF9TVUJMQVlFUlMAVlBTAFNQUwBQUFMAU1VGRklYX0FQUwBQUkVGSVhfQVBTAGo+PTAgJiYgaiA8IE1BWF9OVU1fUkVGX1BJQ1MAaGVpZl9jaGFubmVsX1IAZGVjb2RlX3NsaWNlX3VuaXRfV1BQAE5BTgBQTQBTRUNBTQB0aHJlYWRfY29udGV4dHM9PU5VTEwAY2Fubm90IHJldHVybiBkYXRhIHdpdGggb3V0X2RhdGFfc2l6ZT09TlVMTABwZW5kaW5nX2lucHV0X05BTCA9PSBOVUxMAExDX0FMTABQQUwAcHVzaF9OQUwAaGVpZl9jb21wcmVzc2lvbl9IVEoySwBPUEkARENJAFBIAGhlaWZfY2hhbm5lbF9HAExBTkcAaGVpZl9jb21wcmVzc2lvbl9KUEVHAElORgBPRkYAblQgPD0gTUFYX0lOVFJBX1BSRURfQkxPQ0tfU0laRQBoZWlmX2Nocm9tYV9pbnRlcmxlYXZlZF9SUkdHQkJfTEUAaGVpZl9jaHJvbWFfaW50ZXJsZWF2ZWRfUlJHR0JCQUFfTEUAaGVpZl9jaHJvbWFfaW50ZXJsZWF2ZWRfUlJHR0JCX0JFAGhlaWZfY2hyb21hX2ludGVybGVhdmVkX1JSR0dCQkFBX0JFAGF1eEMAc3BzLT5TdWJIZWlnaHRDID09IFN1YkhlaWdodEMAc3BzLT5TdWJXaWR0aEMgPT0gU3ViV2lkdGhDAHNldF9JbnRyYVByZWRNb2RlQwBoZWlmX2NvbXByZXNzaW9uX1ZWQwBoZWlmX2NvbXByZXNzaW9uX0VWQwBoZWlmX2NvbXByZXNzaW9uX0hFVkMAaGVpZl9jb21wcmVzc2lvbl9BVkMATlRTQwBNQUMAaGVpZl9jaGFubmVsX0IAc2hkci0+c2xpY2VfdHlwZSA9PSBTTElDRV9UWVBFX0IAaGVpZl9jb2xvcnNwYWNlX1JHQgBoZWlmX2Nocm9tYV9pbnRlcmxlYXZlZF9SR0IAaGVpZl9jaHJvbWFfaW50ZXJsZWF2ZWRfUkdCQQA/AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50NjRfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50NjRfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGNoYXI+AHN0ZDo6YmFzaWNfc3RyaW5nPHVuc2lnbmVkIGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+ADtpbmRleD0ATm9uZXhpc3RpbmcgcHJvcGVydHkgKGluZGV4PQBJdGVtIChJRD0AVGlsZSBpbWFnZSBJRD0AOwBjb25maWcgT0JVczoAZ2VuZXJhbCBsZXZlbDoAMDEyMzQ1Njc4OQAxLjE5LjgAQy5VVEYtOAByZWY8NwBoZHItPm51bV9yZWZfaWR4X2wxX2FjdGl2ZSA8PSAxNgBoZHItPm51bV9yZWZfaWR4X2wwX2FjdGl2ZSA8PSAxNgBpbWctPkJpdERlcHRoX1kgPj0gOCAmJiBpbWctPkJpdERlcHRoX1kgPD0gMTYAaW1nLT5CaXREZXB0aF9DID49IDggJiYgaW1nLT5CaXREZXB0aF9DIDw9IDE2AGxpYmRlMjY1AGludHJhUHJlZE1vZGU8MzUATnVtYmVyIG9mIHRpbGUgcm93cy9jb2x1bW5zIG1heSBub3QgZXhjZWVkIDY1NTM1ADEuMC4xNQBIaWdoIDQ6NDo0AENBTFZDIDQ6NDo0AGhlaWZfY2hyb21hXzQ0NABzY2FsaW5nX2xpc3RfcHJlZF9tYXRyaXhfaWRfZGVsdGE9PTMAaGVpZl9qc19kZWNvZGVfaW1hZ2UyAGludHJhUHJlZE1vZGU+PTIAbnVtTVZQQ2FuZExYPT0yAHVybjptcGVnOmhldmM6MjAxNTphdXhpZDoyAEhpZ2ggNDoyOjIAbW9kZWxbaV0uc3RhdGUgPD0gNjIAblQ8PTMyAGhlaWZfY2hyb21hXzQyMgBjb250ZXh0ID49IDAgJiYgY29udGV4dCA8PSAyAGNoYW5uZWw+PTAgJiYgY2hhbm5lbCA8PSAyAGluaXRUeXBlID49IDAgJiYgaW5pdFR5cGUgPD0gMgBtc2YxAG1pZjEAaGVpZl9jb21wcmVzc2lvbl9BVjEAcmVmUGljUTA9PXJlZlBpY1ExACpyZWZjbnQ+MQBsb2cyV0Q+PTEAdXJuOm1wZWc6aGV2YzoyMDE1OmF1eGlkOjEAdXJuOm1wZWc6YXZjOjIwMTU6YXV4aWQ6MQBjYmZfY3IgIT0gLTEAY2JmX2NiICE9IC0xAGNiZl9sdW1hICE9IC0xAHZhbHVlPjAAUklkeD49MAByZWZQaWNMaXN0Pj0wAHRpbGVYPj0wICYmIHRpbGVZPj0wAHJkcGNtTW9kZT09MAAod2lkdGgmMSk9PTAANDoyOjAAaGVpZl9jaHJvbWFfNDIwAE1haW4xMABIaWdoIDEwAGhlaWZfY29tcHJlc3Npb25fSlBFRzIwMDAAbGVuZ3RoID49IDAAblRocmVhZHNSdW5uaW5nID49IDAAZmlyc3QgJSAyID09IDAAZW5kICUgMiA9PSAwAGltZy0+bnVtX3RocmVhZHNfYWN0aXZlKCkgPT0gMAAvAFRpbGVkIGltYWdlIHdpdGhvdXQgJ2lzcGUnIHByb3BlcnR5IGJveC4AVGlsZWQgaW1hZ2Ugd2l0aG91dCAndGlsQycgcHJvcGVydHkgYm94LgBDYW5ub3Qgd3JpdGUgZHVtbXkgZXJyb3IgYm94LgBUb28gbWFueSBlbnRpdGllcyBpbiBkcmVmIGJveC4AQ2Fubm90IHdyaXRlIG1vcmUgdGhhbiAyNTUgU1BTLUV4dCBpbnRvIGF2Y0MgYm94LgBDYW5ub3Qgd3JpdGUgU1BTLUV4dCBsYXJnZXIgdGhhbiA2NTUzNSBieXRlcyBpbnRvIGF2Y0MgYm94LgBDYW5ub3Qgd3JpdGUgU1BTIGxhcmdlciB0aGFuIDY1NTM1IGJ5dGVzIGludG8gYXZjQyBib3guAENhbm5vdCB3cml0ZSBQUFMgbGFyZ2VyIHRoYW4gNjU1MzUgYnl0ZXMgaW50byBhdmNDIGJveC4AQ2Fubm90IHdyaXRlIG1vcmUgdGhhbiAyNTUgUFBTIGludG8gYXZjQyBib3guAENhbm5vdCB3cml0ZSBtb3JlIHRoYW4gMzEgUFBTIGludG8gYXZjQyBib3guAEZpbGUgZG9lcyBub3Qgc3RhcnQgd2l0aCAnZnR5cCcgYm94LgBOb3QgZW5vdWdoIGRhdGEgcHJlc2VudCBpbiAnaWxvYycgdG8gc2F0aXNmeSByZXF1ZXN0LgBOdW1iZXIgb2YgdGlsZXMgZXhjZWVkcyBzZWN1cml0eSBsaW1pdC4AT3ZlcmxheSBpbWFnZSB3aXRoIHplcm8gd2lkdGggb3IgaGVpZ2h0LgAndGlsaScgaW1hZ2Ugd2l0aCB6ZXJvIHdpZHRoIG9yIGhlaWdodC4AJ3RpbGknIGltYWdlIHdpdGggdW5zdXBwb3J0ZWQgY29tcHJlc3Npb24gZm9ybWF0LgBUb28gbWFueSBWVkMgTkFMIGFycmF5cy4AIGV4dGVudHMuAFRvbyBtYW55IFZWQyBOQUwgdW5pdHMuAENhbm5vdCBkZWNvZGUgd2l0aCBhIGR1bW15IGRlY29kZXIgcGx1Z2lucy4AIGl0ZW1zLgAgZW50aXRpZXMuAElucHV0IGZpbGUgaGFzIGFuICdpcmVmJyBib3ggd2l0aCBubyByZWZlcmVuY2VzLgBoZWlmX2ltYWdlX2NyZWF0ZTogTlVMTCBwYXNzZWQgYXMgaW1hZ2UgcG9pbnRlci4ASW52YWxpZCBjb2xvcnNwYWNlL2Nocm9tYSBjb21iaW5hdGlvbi4AJ2lvdmwnIGltYWdlIHJlZmVyZW5jZXMgYSBub24tZXhpc3RpbmcgaXRlbS4AU2VsZi1yZWZlcmVuY2UgaW4gJ2lvdmwnIGltYWdlIGl0ZW0uAFRvbyBtYW55IHJlZ2lvbnMgKD4yNTUpIGluIGFuICdyZ2FuJyBpdGVtLgBGaWxlIHNpemUgdG9vIHNtYWxsLgBUaWxlIGltYWdlIHNpemUgZG9lcyBub3QgbWF0Y2ggdGhlIHNwZWNpZmllZCB0aWxlIHNpemUuAFZWQyBOQUwgdG9vIGxhcmdlLgBWQ0MgYml0IGRlcHRoIG91dCBvZiByYW5nZS4ARXhjZWVkZWQgc3VwcG9ydGVkIHZhbHVlIHJhbmdlLgAgaXMgbm90IGEgcHJvcGVyIGltYWdlLgBUaHVtYm5haWwgaW1hZ2VzIG11c3QgYmUgc21hbGxlciB0aGFuIHRoZSBvcmlnaW5hbCBpbWFnZS4ATm8gajJrSCBib3ggZm91bmQuAE5vIHN1cHBvcnRlZCBicmFuZHMgZm91bmQuAHZ2Y0Mgd2l0aCBudW1fYnl0ZXNfY29uc3RyYWludF9pbmZvPT0wIGlzIG5vdCBhbGxvd2VkLgAnIGlzIG5vdCBzdXBwb3J0ZWQuACcgYm94IGV4Y2VlZGVkLgBDb3VsZCBub3QgZmluZCBsb2NhdGlvbiBvZiBUSUZGIGhlYWRlciBpbiBFeGlmIG1ldGFkYXRhLgBjYWxsZWQgaGVpZl9jb250ZXh0X2FkZF9pdGVtKCkgd2l0aCBpbnZhbGlkICdpdGVtX3R5cGUnLgBjYWxsZWQgaGVpZl9jb250ZXh0X2FkZF9nZW5lcmljX21ldGFkYXRhKCkgd2l0aCBpbnZhbGlkICdpdGVtX3R5cGUnLgAqLAB3KwByKwBhKwBJbnZhbGlkIGNvbG9yX3Byb2ZpbGVfdHlwZSAobXVzdCBiZSA0IGNoYXJhY3RlcnMpAChmcm9tIHBwcykAZnR5cCBib3ggdG9vIHNtYWxsIChsZXNzIHRoYW4gOCBieXRlcykATWlzc2luZyByZXF1aXJlZCBoZWFkZXIgbWFya2VyKHMpACh1bmtub3duKQAobnVsbCkAZHBiLmhhc19mcmVlX2RwYl9waWN0dXJlKHRydWUpAChvdmVycmlkZSkAY3R4LT5oYXNfaW1hZ2UoY29sUGljKQAoZnJvbSBQUFMpAENvdWxkIG5vdCB3cml0ZSB0byB0bXAgZmlsZSAoc3RvcmFnZSBmdWxsPykAU1BTIG1heCBwaWN0dXJlIHdpZHRoIG9yIGhlaWdodCBleGNlZWRzIG1heGltdW0gKDY1NTM1KQBUb28gbWFueSB0aWxlcyAobWF4aW11bTogNjU1MzUpAFRvbyBtYW55IG92ZXJsYXkgaW1hZ2VzIChtYXhpbXVtOiA2NTUzNSkAISh0cmFmb0RlcHRoPT0wICYmIGxvZzJUcmFmb1NpemU9PTIpACFyZW9yZGVyX291dHB1dF9xdWV1ZS5lbXB0eSgpAE5VTEwgcGFzc2VkIHRvIGhlaWZfaW1hZ2VfaGFuZGxlX2dldF9pbWFnZV90aWxpbmcoKQBSSWR4ID49IDAgJiYgUklkeCA8IHNldHMuc2l6ZSgpAE5VTEwgb3V0X2RlcHRoX2hhbmRsZSBwYXNzZWQgdG8gaGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2RlcHRoX2ltYWdlX2hhbmRsZSgpAE5VTEwgb3V0X2ltZyBwYXNzZWQgdG8gaGVpZl9kZWNvZGVfaW1hZ2UoKQBOdW1iZXIgb2YgcmVmZXJlbmNlcyBpbiBpcmVmIGJveCAoAE51bWJlciBvZiBleHRlbnRzIGluIGlsb2MgYm94ICgAKSBleGNlZWRzIHNlY3VyaXR5IGxpbWl0ICgATWF4aW11bSBudW1iZXIgb2YgY2hpbGQgYm94ZXMgKABJbnB1dCBlcnJvciAoAEJveCBzaXplICgAIGJ5dGVzKSBzbWFsbGVyIHRoYW4gaGVhZGVyIHNpemUgKAB3aGl0ZSBwb2ludCAoeCx5KTogKABDYW5ub3QgZW5jb2RlIGltYWdlIHRvICdpZGVuJwBDYW5ub3QgZW5jb2RlIGltYWdlIHRvICdpb3ZsJwBDYW5ub3QgZW5jb2RlIGltYWdlIHRvICd0aWxkJwBDYW5ub3QgZW5jb2RlIGltYWdlIHRvICdncmlkJwBjb3VsZCBub3QgcGFyc2UgaXRlbSBwcm9wZXJ0eSAnACkgaW4gJwByZWZlcmVuY2Ugd2l0aCB0eXBlICcASW1hZ2UgaXRlbSBvZiB0eXBlICcAUHVyZSB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxlZCEAfCAAIHRpbGVzLCBidXQgb25seSAAIHggAEpQRUctMjAwMCBsYXllcnMsIGJ1dCB0aGUgYm94IG9ubHkgY29udGFpbnMgACBKUEVHLTIwMDAgY2hhbm5lbHMsIGJ1dCBmaWxlIG9ubHkgY29udGFpbnMgAGVudGl0eSBncm91cCBib3ggY29udGFpbnMgAGlsb2MgYm94IGNvbnRhaW5zIABFeHRlbnQgaW4gaWxvYyBib3ggcmVmZXJlbmNlcyBkYXRhIG91dHNpZGUgb2YgZmlsZSBib3VuZHMgAENvdWxkIG5vdCB3cml0ZSB0byB0bXAgZmlsZTogZXJyb3IgAENhbm5vdCByZWFkIHRtcCBkYXRhIGZpbGUsIGVycm9yIABpcG1hIGJveCB3YW50cyB0byBkZWZpbmUgcHJvcGVydGllcyBmb3IgAGxheWVyIAAgSlBFRy0yMDAwIGNoYW5uZWxzLCBidXQgdGhlIHNlY3VyaXR5IGxpbWl0IGlzIHNldCB0byAAIGVudGl0aWVzLCBidXQgdGhlIHNlY3VyaXR5IGxpbWl0IGlzIHNldCB0byAAIGl0ZW1zLCBidXQgdGhlIHNlY3VyaXR5IGxpbWl0IGhhcyBiZWVuIHNldCB0byAAKHBvaW50cyB0byBmaWxlIHBvc2l0aW9uIABvcmllbnRhdGlvbiAAR3JpZCBpbWFnZSB2ZXJzaW9uIAAgYm94IGRhdGEgdmVyc2lvbiAAT3ZlcmxheSBpbWFnZSBkYXRhIHZlcnNpb24gACwgdmVyc2lvbiAAZW50aXR5IGdyb3VwIGJveCBzaG91bGQgY29udGFpbiAAaXJlZiBib3ggc2hvdWxkIGNvbnRhaW4gAGlsb2MgYm94IHNob3VsZCBjb250YWluIABpbG9jIGl0ZW0gc2hvdWxkIGNvbnRhaW4gACkgZm9yIGl0ZW0gAEltYWdlIGl0ZW0gAENhbm5vdCBtaXJyb3IgaW1hZ2VzIHdpdGggAFRpbGVkIGltYWdlIHdpdGggAEFsbG9jYXRpbmcgACBieXRlcyBleGNlZWRzIHRoZSBzZWN1cml0eSBsaW1pdCBvZiAAIGl0ZW1zLCB3aGljaCBleGNlZWRzIHRoZSBzZWN1cml0eSBsaW1pdCBvZiAAIGJ5dGVzLCBleGNlZWRpbmcgdGhlIHNlY3VyaXR5IGxpbWl0IG9mIAApIGV4Y2VlZHMgdGhlIHNlY3VyaXR5IGxpbWl0cyBvZiAAaW52YWxpZCBib3ggc2l6ZSAAQm94IHNpemUgACBleGNlZWRzIHRoZSBtYXhpbXVtIGltYWdlIHNpemUgAEltYWdlIHNpemUgAGNkZWYgYm94IHdhbnRzIHRvIGRlZmluZSAAajJrTCBib3ggd2FudHMgdG8gZGVmaW5lIABObyBhdXhDIHByb3BlcnR5IGZvciBpbWFnZSAAIGJ5dGVzLCB0b3RhbCBtZW1vcnkgc2l6ZSB3b3VsZCBiZSAASXRlbSBjb25zdHJ1Y3Rpb24gbWV0aG9kIABpZGF0IGJveCBjb250YWluZWQgAGlsb2MgYm94IGNvbnRhaW5lZCAAIGV4dGVudHMsIGJ1dCB3ZSBjYW4gb25seSByZWFkIAAgaXRlbXMsIGJ1dCB3ZSBjYW4gb25seSByZWFkIAAgZW50aXRpZXMsIGJ1dCB3ZSBjYW4gb25seSByZWFkIAAgcmVmZXJlbmNlcywgYnV0IHdlIGNhbiBvbmx5IHJlYWQgAColZCAAKiVkJWMgAEl0ZW0gd2l0aCBJRCAAIDsgAHByb2ZpbGVfY29tcGF0aWJpbGl0eTogAGZhdGFsaXR5OiAAaW5pdGlhbF9wcmVzZW50YXRpb25fZGVsYXk6IABhbWJpZW50X2xpZ2h0X3k6IABjaHJvbWFfc3Vic2FtcGxpbmdfeTogAEJveDogAGNvbXBvbmVudF9pbmRleDogAGl0ZW1fcHJvdGVjdGlvbl9pbmRleDogAGNoYW5uZWxfaW5kZXg6IAAgIGRhdGFfcmVmZXJlbmNlX2luZGV4OiAAb2xzLWluZGV4OiAAb3AtaW5kZXg6IABwcm9wZXJ0eSBpbmRleDogAGFtYmllbnRfbGlnaHRfeDogAGNocm9tYV9zdWJzYW1wbGluZ194OiAAc2tldzogAHByaW5jaXBhbC1wb2ludDogAHR3ZWx2ZV9iaXQ6IABtYXggcGljdHVyZSBoZWlnaHQ6IABpbWFnZSBoZWlnaHQ6IAAgIGJhc2Vfb2Zmc2V0OiAAY2hyb21hX2Zvcm1hdDogAGNocm9tYS1mb3JtYXQ6IABDaHJvbWEgZm9ybWF0OiAAbnVtIG9mIGFycmF5czogACAgZXh0ZW50czogAG1hdHJpeF9jb2VmZmljaWVudHM6IABhcnJheV9jb21wbGV0ZW5lc3M6IABhcnJheSBjb21wbGV0ZW5lc3M6IABudW0gc3VibGF5ZXJzOiAAbnVtX3RlbXBvcmFsX2xheWVyczogACwgZGVjb2RlX2xheWVyczogACwgZGlzY2FyZF9sZXZlbHM6IAB0YWdzOiAAICAlc19wcm9maWxlX2NvbXBhdGliaWxpdHlfZmxhZ3M6IABnZW5lcmFsX3Byb2ZpbGVfY29tcGF0aWJpbGl0eV9mbGFnczogAGdlbmVyYWxfY29uc3RyYWludF9pbmRpY2F0b3JfZmxhZ3M6IABudW0gYnl0ZXM6IABudW1iZXIgb2YgZGF0YSBieXRlczogAGF1eCBzdWJ0eXBlczogAHwgdGlsZXM6IABjb2xvdXJfcHJpbWFyaWVzOiAAdGlsZSByb3cgYm91bmRhcmllczogAHRpbGUgY29sdW1uIGJvdW5kYXJpZXM6IABjb21wYXRpYmxlIGJyYW5kczogAHRyYW5zZmVyX2NoYXJhY3RlcmlzdGljczogAGVudGl0eSBJRHM6IAAgdG8gSURzOiAALCBwYWxldHRlX2NvbG91cjogACcgcGFyc2UgZXJyb3I6IABkZXNjcmlwdGlvbjogAGNocm9tYV9zYW1wbGVfcG9zaXRpb246IABtaXJyb3IgZGlyZWN0aW9uOiAAcm90YXRpb246IABhbWJpZW50X2lsbHVtaW5hdGlvbjogACwgY2hhbm5lbF9hc3NvY2lhdGlvbjogAGxvY2F0aW9uOiAAQVZDTGV2ZWxJbmRpY2F0aW9uOiAAQVZDUHJvZmlsZUluZGljYXRpb246IABjb25maWd1cmF0aW9uX3ZlcnNpb246IABtaW5vciB2ZXJzaW9uOiAAaGlkZGVuIGl0ZW06IABiaXRzX3Blcl9waXhlbDogAG1heF9jb250ZW50X2xpZ2h0X2xldmVsOiAAbWF4X3BpY19hdmVyYWdlX2xpZ2h0X2xldmVsOiAAYml0c19wZXJfY2hhbm5lbDogACAoZXNzZW50aWFsOiAAaGlnaF9iaXRkZXB0aDogAGJpdC1kZXB0aDogAGZvY2FsLWxlbmd0aDogAGltYWdlIHdpZHRoOiAAICBwaXRjaDogAHwgYmlubmluZzogAGNvbnRlbnRfZW5jb2Rpbmc6IAB2U3BhY2luZzogAGhTcGFjaW5nOiAAbGFuZzogAGdlbmVyYWxfdGllcl9mbGFnOiAAZnVsbF9yYW5nZV9mbGFnOiAAcHRsIGZyYW1lIG9ubHkgY29uc3RyYWludCBmbGFnOiAAdGllciBmbGFnOiAAcHRsIG11bHRpIGxheWVyIGVuYWJsZWQgZmxhZzogAGxlbmd0aF9zaXplOiAAICAgKGhlYWRlciBzaXplOiAATkFMIGxlbmd0aCBzaXplOiAAdGlsZSBzaXplOiAAcHJvZmlsZSBzaXplOiAAdW5oYW5kbGVkIGV4dGVuZGVkIGNhcGFiaWxpdGllcyB2YWx1ZTogAGNvbnN0YW50X2ZyYW1lX3JhdGU6IABhdmdfZnJhbWVfcmF0ZTogAGNvbnN0YW50IGZyYW1lIHJhdGU6IABjbGVhbl9hcGVydHVyZTogAGNvbnRlbnRfdHlwZTogAE5BTF91bml0X3R5cGU6IABjb2xvdXJfdHlwZTogAGhhbmRsZXJfdHlwZTogAHBhcmFsbGVsaXNtX3R5cGU6IABpdGVtX3R5cGU6IAAsIGNoYW5uZWxfdHlwZTogACwgbWFwcGluZ190eXBlOiAAYXV4IHR5cGU6IABpdGVtIHVyaSB0eXBlOiAATkFMIHR5cGU6IABtb25vY2hyb21lOiAAaXRlbV9uYW1lOiAAc2VxX3Byb2ZpbGU6IABnZW5lcmFsIHByb2ZpbGU6IABFcnJvciBvcGVuaW5nIGZpbGU6IABtYXggZGlzcGxheSBtYXN0ZXJpbmcgbHVtaW5hbmNlOiAAbWluIGRpc3BsYXkgbWFzdGVyaW5nIGx1bWluYW5jZTogAGdlbmVyYWxfcHJvZmlsZV9zcGFjZTogACAgY29uc3RydWN0aW9uIG1ldGhvZDogAG1ham9yIGJyYW5kOiAAbGF5ZXJfaWQ6IABncm91cCBpZDogAHdvcmxkIGNvb3JkaW5hdGUgc3lzdGVtIGlkOiAAdGVtcG9yYWxfaWRfbmVzdGVkOiAAcHJlX2RlZmluZWQ6IABtaW5fc3BhdGlhbF9zZWdtZW50YXRpb25faWRjOiAAZ2VuZXJhbF9sZXZlbF9pZGM6IABnZW5lcmFsX3Byb2ZpbGVfaWRjOiAAZGF0YTogAGJpdF9kZXB0aF9sdW1hOiAAQml0IGRlcHRoIGx1bWE6IABiaXRfZGVwdGhfY2hyb21hOiAAQml0IGRlcHRoIGNocm9tYTogAHJlZl9waWNfc2V0WyAlMmQgXTogAFNQUy1FWFQ6IABTUFM6IABQUFM6IABFUlI6IABJTkZPOiAATkU6IABpdGVtX0lEOiAAIGZyb20gSUQ6IABhc3NvY2lhdGlvbnMgZm9yIGl0ZW0gSUQ6IAByaWdodCBpbWFnZSBJRDogAGxlZnQgaW1hZ2UgSUQ6IAAsIE5QQzogACwgQjogAHNlcV9sZXZlbF9pZHhfMDogAGRpc3BsYXlfcHJpbWFyaWVzICh4LHkpOiAAY2FtZXJhIHBvc2l0aW9uICh1bSk6IAApIDogACksIAAgIHJvbGw6ICAAbWF4IHBpY3R1cmUgd2lkdGg6ICAAICB5YXc6ICAgACAgICAgIABubyBza2V3CgAgcmVmZXJlbmNlZCwgYnV0IGl0IGRvZXMgbm90IGV4aXN0CgBub3QgcHJlc2VudAoAU1BTIGVycm9yOiBDQiBhbGlnbm1lbnQKACVwIGluaXQKAColcwoAc2xpY2VfZGVibG9ja2luZ19maWx0ZXJfZGlzYWJsZWRfZmxhZyA6ICVkICVzCgBudW1fcmVmX2lkeF9sMV9hY3RpdmUgICAgICAgICAgOiAlZCAlcwoAbnVtX3JlZl9pZHhfbDBfYWN0aXZlICAgICAgICAgIDogJWQgJXMKACAgJXNfcHJvZmlsZV9pZGMgICAgICAgOiAlcwoAICB2aWRlb19mb3JtYXQgICAgICAgICAgICAgICAgOiAlcwoAJXAgZGVzdHJ1Y3RvcgoAJXAgcmVsZWFzZSAlcAoAbWZyZWUgJXAKACVwIGMndG9yID0gJXAKACVwIGFzc2lnbiA9ICVwCgBob3Jpem9udGFsCgBmYXRhbAoAb3B0aW9uYWwKAHZlcnRpY2FsCgBTUFMgZXJyb3I6IHRyYW5zZm9ybSBoaWVyYXJjaHkgZGVwdGggKGludGVyKSA+IENUQiBzaXplIC0gbWluIFRCIHNpemUKAFNQUyBlcnJvcjogdHJhbnNmb3JtIGhpZXJhcmNoeSBkZXB0aCAoaW50cmEpID4gQ1RCIHNpemUgLSBtaW4gVEIgc2l6ZQoAbm8gY29sb3IgcHJvZmlsZQoAaWdub3JhYmxlCgBudW1iZXIgb2YgZGF0YSBieXRlcyBpcyBpbnZhbGlkCgB1bnN1cHBvcnRlZAoAaW52YWxpZCBTUFMgcmVmZXJlbmNlZAoAaW52YWxpZCBQUFMgcmVmZXJlbmNlZAoAUFBTICVkIGhhcyBub3QgYmVlbiByZWFkCgBzYW1wbGUgYXNwZWN0IHJhdGlvICAgICAgICA6ICVkOiVkCgBMYXllciAlZAoAdnBzX251bV9sYXllcl9zZXRzID0gJWQKAHZwc19udW1fdW5pdHNfaW5fdGljayA9ICVkCgBsYXllciAlZDogdnBzX21heF9kZWNfcGljX2J1ZmZlcmluZyA9ICVkCgBsYXllciAoYWxsKTogdnBzX21heF9kZWNfcGljX2J1ZmZlcmluZyA9ICVkCgB2cHNfdGltaW5nX2luZm9fcHJlc2VudF9mbGFnID0gJWQKAHZwc19leHRlbnNpb25fZmxhZyA9ICVkCgB2cHNfcG9jX3Byb3BvcnRpb25hbF90b190aW1pbmdfZmxhZyA9ICVkCgB2cHNfbnVtX3RpY2tzX3BvY19kaWZmX29uZSA9ICVkCgBocmRfbGF5ZXJfc2V0X2lkeFslZF0gPSAlZAoAbGF5ZXJfaWRfaW5jbHVkZWRfZmxhZ1slZF1bJWRdID0gJWQKACAgICAgICAgICAgICB2cHNfbWF4X251bV9yZW9yZGVyX3BpY3MgID0gJWQKACAgICAgICAgICAgICB2cHNfbWF4X2xhdGVuY3lfaW5jcmVhc2UgID0gJWQKAHZwc19tYXhfbGF5ZXJfaWQgICA9ICVkCgB2cHNfbnVtX2hyZF9wYXJhbWV0ZXJzICAgICA9ICVkCgB2cHNfdGltZV9zY2FsZSAgICAgICAgPSAlZAoAY29uZl93aW5fYm90dG9tX29mZnNldDogJWQKAGNocm9tYV9sb2NfaW5mb19wcmVzZW50X2ZsYWc6ICVkCgBsaXN0c19tb2RpZmljYXRpb25fcHJlc2VudF9mbGFnOiAlZAoAZGVibG9ja2luZ19maWx0ZXJfY29udHJvbF9wcmVzZW50X2ZsYWc6ICVkCgB2aWRlb19zaWduYWxfdHlwZV9wcmVzZW50X2ZsYWc6ICVkCgBwaWNfc2NhbGluZ19saXN0X2RhdGFfcHJlc2VudF9mbGFnOiAlZAoAcGljX2Rpc2FibGVfZGVibG9ja2luZ19maWx0ZXJfZmxhZzogJWQKAG5ldXRyYWxfY2hyb21hX2luZGljYXRpb25fZmxhZzogJWQKAHVuaWZvcm1fc3BhY2luZ19mbGFnOiAlZAoAdHJhbnNxdWFudF9ieXBhc3NfZW5hYmxlX2ZsYWc6ICVkCgBjb25zdHJhaW5lZF9pbnRyYV9wcmVkX2ZsYWc6ICVkCgBwcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWc6ICVkCgB0cmFuc2Zvcm1fc2tpcF9lbmFibGVkX2ZsYWc6ICVkCgBkZWJsb2NraW5nX2ZpbHRlcl9vdmVycmlkZV9lbmFibGVkX2ZsYWc6ICVkCgBlbnRyb3B5X2NvZGluZ19zeW5jX2VuYWJsZWRfZmxhZzogJWQKACAgY2hyb21hX3NhbXBsZV9sb2NfdHlwZV9ib3R0b21fZmllbGQ6ICVkCgAgICVkOiAlZAoAY29uZl93aW5fcmlnaHRfb2Zmc2V0IDogJWQKAG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cyA6ICVkCgBudW1fbG9uZ190ZXJtX3JlZl9waWNzX3NwcyA6ICVkCgBwaWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlcyA6ICVkCgBtYXhfdHJhbnNmb3JtX2hpZXJhcmNoeV9kZXB0aF9pbnRlciA6ICVkCgAgICAgJXNfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWcgOiAlZAoAICAgICVzX25vbl9wYWNrZWRfY29uc3RyYWludF9mbGFnIDogJWQKAHBwc19zbGljZV9jaHJvbWFfcXBfb2Zmc2V0c19wcmVzZW50X2ZsYWcgOiAlZAoAdnVpX2hyZF9wYXJhbWV0ZXJzX3ByZXNlbnRfZmxhZyA6ICVkCgBsb25nX3Rlcm1fcmVmX3BpY3NfcHJlc2VudF9mbGFnIDogJWQKAG92ZXJzY2FuX2luZm9fcHJlc2VudF9mbGFnIDogJWQKAHZwc19zdWJfbGF5ZXJfb3JkZXJpbmdfaW5mb19wcmVzZW50X2ZsYWcgOiAlZAoAc3BzX3N1Yl9sYXllcl9vcmRlcmluZ19pbmZvX3ByZXNlbnRfZmxhZyA6ICVkCgBmcmFtZV9maWVsZF9pbmZvX3ByZXNlbnRfZmxhZyA6ICVkCgAgIGNvbG91cl9kZXNjcmlwdGlvbl9wcmVzZW50X2ZsYWcgOiAlZAoAc2xpY2Vfc2VnbWVudF9oZWFkZXJfZXh0ZW5zaW9uX3ByZXNlbnRfZmxhZyA6ICVkCgBzcHNfc2NhbGluZ19saXN0X2RhdGFfcHJlc2VudF9mbGFnIDogJWQKACAgbW90aW9uX3ZlY3RvcnNfb3Zlcl9waWNfYm91bmRhcmllc19mbGFnIDogJWQKAHNwc19tdWx0aWxheWVyX2V4dGVuc2lvbl9mbGFnIDogJWQKAHBwc19tdWx0aWxheWVyX2V4dGVuc2lvbl9mbGFnIDogJWQKAHNwc190ZW1wb3JhbF9pZF9uZXN0aW5nX2ZsYWcgOiAlZAoAdnVpX3BvY19wcm9wb3J0aW9uYWxfdG9fdGltaW5nX2ZsYWcgOiAlZAoAc2VwYXJhdGVfY29sb3VyX3BsYW5lX2ZsYWcgOiAlZAoAc2NhbGluZ19saXN0X2VuYWJsZV9mbGFnIDogJWQKAHN0cm9uZ19pbnRyYV9zbW9vdGhpbmdfZW5hYmxlX2ZsYWcgOiAlZAoAZGVibG9ja2luZ19maWx0ZXJfb3ZlcnJpZGVfZmxhZyA6ICVkCgBudW1fcmVmX2lkeF9hY3RpdmVfb3ZlcnJpZGVfZmxhZyA6ICVkCgAgICAgJXNfcHJvZ3Jlc3NpdmVfc291cmNlX2ZsYWcgOiAlZAoAICAgICVzX2ludGVybGFjZWRfc291cmNlX2ZsYWcgOiAlZAoAc2FtcGxlX2FkYXB0aXZlX29mZnNldF9lbmFibGVkX2ZsYWcgOiAlZAoAZGVwZW5kZW50X3NsaWNlX3NlZ21lbnRzX2VuYWJsZWRfZmxhZyA6ICVkCgBsb29wX2ZpbHRlcl9hY3Jvc3NfdGlsZXNfZW5hYmxlZF9mbGFnIDogJWQKAHNsaWNlX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnIDogJWQKAHNsaWNlX3RlbXBvcmFsX212cF9lbmFibGVkX2ZsYWcgOiAlZAoAY3Jvc3NfY29tcG9uZW50X3ByZWRpY3Rpb25fZW5hYmxlZF9mbGFnIDogJWQKAHBlcnNpc3RlbnRfcmljZV9hZGFwdGF0aW9uX2VuYWJsZWRfZmxhZyA6ICVkCgBsb2cyX2RpZmZfbWF4X21pbl90cmFuc2Zvcm1fYmxvY2tfc2l6ZSA6ICVkCgBsb2cyX2RpZmZfbWF4X21pbl9sdW1hX2NvZGluZ19ibG9ja19zaXplIDogJWQKAGxvZzJfbWluX2x1bWFfY29kaW5nX2Jsb2NrX3NpemUgOiAlZAoAbG9nMl9kaWZmX21heF9taW5fcGNtX2x1bWFfY29kaW5nX2Jsb2NrX3NpemUgOiAlZAoAbG9nMl9taW5fcGNtX2x1bWFfY29kaW5nX2Jsb2NrX3NpemUgOiAlZAoAbnVtX3JlZl9pZHhfbDFfZGVmYXVsdF9hY3RpdmUgOiAlZAoAbnVtX3JlZl9pZHhfbDBfZGVmYXVsdF9hY3RpdmUgOiAlZAoAbG9nMl9tYXhfcGljX29yZGVyX2NudF9sc2IgOiAlZAoAbWF4X3RyYW5zZm9ybV9oaWVyYXJjaHlfZGVwdGhfaW50cmEgOiAlZAoAYml0X2RlcHRoX2Nocm9tYSA6ICVkCgBlbnRyeSBwb2ludCBbJWldIDogJWQKACAgc3BzX21heF9sYXRlbmN5X2luY3JlYXNlX3BsdXMxIDogJWQKAHJlZl9waWNfbGlzdF9tb2RpZmljYXRpb25fZmxhZ19sMSA6ICVkCgByZWZfcGljX2xpc3RfbW9kaWZpY2F0aW9uX2ZsYWdfbDAgOiAlZAoATG9nMk1pbkN1Q2hyb21hUXBPZmZzZXRTaXplIChSRXh0KSA6ICVkCgBMb2cyTWF4VHJhbnNmb3JtU2tpcFNpemUgICAgKFJFeHQpIDogJWQKAGNvbmZfd2luX2xlZnRfb2Zmc2V0ICA6ICVkCgAgIGRlZl9kaXNwX3dpbl9ib3R0b21fb2Zmc2V0ICA6ICVkCgBzbGljZV9iZXRhX29mZnNldCAgOiAlZAoAcGljX3dpZHRoX2luX2x1bWFfc2FtcGxlcyAgOiAlZAoAdnVpX3RpbWluZ19pbmZvX3ByZXNlbnRfZmxhZyAgOiAlZAoAb3ZlcnNjYW5fYXBwcm9wcmlhdGVfZmxhZyAgOiAlZAoAcGNtX2xvb3BfZmlsdGVyX2Rpc2FibGVfZmxhZyAgOiAlZAoAZml2ZV9taW51c19tYXhfbnVtX21lcmdlX2NhbmQgIDogJWQKAHZpZGVvX3BhcmFtZXRlcl9zZXRfaWQgIDogJWQKACAgZGVmX2Rpc3Bfd2luX3JpZ2h0X29mZnNldCAgIDogJWQKAGNvbmZfd2luX3RvcF9vZmZzZXQgICA6ICVkCgBkZWZhdWx0X2Rpc3BsYXlfd2luZG93X2ZsYWcgICA6ICVkCgBjdV9xcF9kZWx0YV9lbmFibGVkX2ZsYWcgICA6ICVkCgBsb2cyX21pbl90cmFuc2Zvcm1fYmxvY2tfc2l6ZSAgIDogJWQKACAgY2hyb21hX3NhbXBsZV9sb2NfdHlwZV90b3BfZmllbGQgICA6ICVkCgBiaXRfZGVwdGhfbHVtYSAgIDogJWQKAHBjbV9zYW1wbGVfYml0X2RlcHRoX2Nocm9tYSAgIDogJWQKAE1heENiU2l6ZVkgICA6ICVkCgBNaW5DYlNpemVZICAgOiAlZAoATWF4VEJTaXplWSAgIDogJWQKAE1pblRCU2l6ZVkgICA6ICVkCgAgIGRlZl9kaXNwX3dpbl9sZWZ0X29mZnNldCAgICA6ICVkCgBzbGljZV90Y19vZmZzZXQgICAgOiAlZAoAbnVtX2V4dHJhX3NsaWNlX2hlYWRlcl9iaXRzICAgIDogJWQKAG51bV9lbnRyeV9wb2ludF9vZmZzZXRzICAgIDogJWQKAG51bV90aWxlX2NvbHVtbnMgICAgOiAlZAoAICB0cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MgICAgOiAlZAoAICBsb2cyX21heF9tdl9sZW5ndGhfaG9yaXpvbnRhbCAgICA6ICVkCgBjb25mb3JtYW5jZV93aW5kb3dfZmxhZyAgICA6ICVkCgBjYWJhY19pbml0X3ByZXNlbnRfZmxhZyAgICA6ICVkCgBzcHNfZXh0ZW5zaW9uX3ByZXNlbnRfZmxhZyAgICA6ICVkCgAgIHJlc3RyaWN0ZWRfcmVmX3BpY19saXN0c19mbGFnICAgIDogJWQKAHRyYW5zZm9ybV9za2lwX3JvdGF0aW9uX2VuYWJsZWRfZmxhZyAgICA6ICVkCgBzZXFfcGFyYW1ldGVyX3NldF9pZCAgICA6ICVkCgBzbGljZV9jcl9xcF9vZmZzZXQgICAgIDogJWQKAHNsaWNlX2NiX3FwX29mZnNldCAgICAgOiAlZAoAICBkZWZfZGlzcF93aW5fdG9wX29mZnNldCAgICAgOiAlZAoAZGlmZl9jdV9xcF9kZWx0YV9kZXB0aCAgICAgOiAlZAoAb3V0cHV0X2ZsYWdfcHJlc2VudF9mbGFnICAgICA6ICVkCgB0cmFuc2Zvcm1fc2tpcF9jb250ZXh0X2VuYWJsZWRfZmxhZyAgICAgOiAlZAoAY2FiYWNfYnlwYXNzX2FsaWdubWVudF9lbmFibGVkX2ZsYWcgICAgIDogJWQKAGhpZ2hfcHJlY2lzaW9uX29mZnNldHNfZW5hYmxlZF9mbGFnICAgICA6ICVkCgAgICVzX3Byb2ZpbGVfc3BhY2UgICAgIDogJWQKACAgbWluX3NwYXRpYWxfc2VnbWVudGF0aW9uX2lkYyAgICAgOiAlZAoAcGNtX3NhbXBsZV9iaXRfZGVwdGhfbHVtYSAgICAgOiAlZAoAQ3RiU2l6ZVkgICAgIDogJWQKAHNwc19tYXhfc3ViX2xheWVycyAgICAgIDogJWQKAGxvZzJfcGFyYWxsZWxfbWVyZ2VfbGV2ZWwgICAgICA6ICVkCgAgIGxvZzJfbWF4X212X2xlbmd0aF92ZXJ0aWNhbCAgICAgIDogJWQKACAgc3BzX21heF9kZWNfcGljX2J1ZmZlcmluZyAgICAgIDogJWQKAHNob3J0X3Rlcm1fcmVmX3BpY19zZXRfc3BzX2ZsYWcgICAgICA6ICVkCgBzcHNfcmFuZ2VfZXh0ZW5zaW9uX2ZsYWcgICAgICA6ICVkCgBwcHNfcmFuZ2VfZXh0ZW5zaW9uX2ZsYWcgICAgICA6ICVkCgBleHRlbmRlZF9wcmVjaXNpb25fcHJvY2Vzc2luZ19mbGFnICAgICAgOiAlZAoAc2lnbl9kYXRhX2hpZGluZ19mbGFnICAgICAgOiAlZAoAY2hyb21hX3FwX29mZnNldF9saXN0X2VuYWJsZWRfZmxhZyAgICAgIDogJWQKAHNwc190ZW1wb3JhbF9tdnBfZW5hYmxlZF9mbGFnICAgICAgOiAlZAoAZmlyc3Rfc2xpY2Vfc2VnbWVudF9pbl9waWNfZmxhZyAgICAgIDogJWQKAGxvZzJfbWF4X3RyYW5zZm9ybV9za2lwX2Jsb2NrX3NpemUgICAgICA6ICVkCgBudW1fdGlsZV9yb3dzICAgICAgIDogJWQKACAgc3BzX21heF9udW1fcmVvcmRlcl9waWNzICAgICAgIDogJWQKACAgdnVpX251bV91bml0c19pbl90aWNrICAgICAgIDogJWQKACAgdGlsZXNfZml4ZWRfc3RydWN0dXJlX2ZsYWcgICAgICAgOiAlZAoAICB2aWRlb19mdWxsX3JhbmdlX2ZsYWcgICAgICAgOiAlZAoAc2VxX3BhcmFtZXRlcl9zZXRfaWQgICAgICAgOiAlZAoAcGljX3BhcmFtZXRlcl9zZXRfaWQgICAgICAgOiAlZAoAICBtYXhfYml0c19wZXJfbWluX2N1X2Rlbm9tICAgICAgICA6ICVkCgB2dWlfcGFyYW1ldGVyc19wcmVzZW50X2ZsYWcgICAgICAgIDogJWQKAGNvbGxvY2F0ZWRfZnJvbV9sMF9mbGFnICAgICAgICA6ICVkCgBDaHJvbWFXZWlnaHRfTCVkWyVkXVslZF0gICAgICAgIDogJWQKAENocm9tYU9mZnNldF9MJWRbJWRdWyVkXSAgICAgICAgOiAlZAoAUGljSGVpZ2h0SW5DdGJzWSAgICAgICAgOiAlZAoAbHVtYV9sb2cyX3dlaWdodF9kZW5vbSAgICAgICAgIDogJWQKAGRlcGVuZGVudF9zbGljZV9zZWdtZW50X2ZsYWcgICAgICAgICA6ICVkCgBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnICAgICAgICAgOiAlZAoAICAlc190aWVyX2ZsYWcgICAgICAgICA6ICVkCgBiaXRzdHJlYW1fcmVzdHJpY3Rpb25fZmxhZyAgICAgICAgIDogJWQKAHdlaWdodGVkX2JpcHJlZF9mbGFnICAgICAgICAgOiAlZAoAc2xpY2VfcXBfZGVsdGEgICAgICAgICA6ICVkCgBQaWNXaWR0aEluQ3Ric1kgICAgICAgICA6ICVkCgAgIG1heF9ieXRlc19wZXJfcGljX2Rlbm9tICAgICAgICAgIDogJWQKAENocm9tYUxvZzJXZWlnaHREZW5vbSAgICAgICAgICA6ICVkCgBkaWZmX2N1X2Nocm9tYV9xcF9vZmZzZXRfZGVwdGggICAgICAgICAgOiAlZAoAdnBzX3RlbXBvcmFsX2lkX25lc3RpbmdfZmxhZyAgICAgICAgICA6ICVkCgBMb2cyTWluQ3VRcERlbHRhU2l6ZSAgICAgICAgICA6ICVkCgB2dWlfbnVtX3RpY2tzX3BvY19kaWZmX29uZSAgICAgICAgICA6ICVkCgBzaG9ydF90ZXJtX3JlZl9waWNfc2V0X2lkeCAgICAgICAgICAgOiAlZAoAc3BzX2V4dGVuc2lvbl82Yml0cyAgICAgICAgICAgOiAlZAoAcHBzX2V4dGVuc2lvbl82Yml0cyAgICAgICAgICAgOiAlZAoAd2VpZ2h0ZWRfcHJlZF9mbGFnICAgICAgICAgICA6ICVkCgBpbnRyYV9zbW9vdGhpbmdfZGlzYWJsZWRfZmxhZyAgICAgICAgICAgOiAlZAoAdGlsZXNfZW5hYmxlZF9mbGFnICAgICAgICAgICA6ICVkCgBzbGljZV9zYW9fY2hyb21hX2ZsYWcgICAgICAgICAgIDogJWQKAHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkICAgICAgICAgICA6ICVkCgAgIGNvbG91cl9wcmltYXJpZXMgICAgICAgICAgICA6ICVkCgBwcHNfZXh0ZW5zaW9uX2ZsYWcgICAgICAgICAgICA6ICVkCgBsb2cyX3Nhb19vZmZzZXRfc2NhbGVfY2hyb21hICAgICAgICAgICAgOiAlZAoAbHVtYV9vZmZzZXRfbCVkWyVkXSAgICAgICAgICAgIDogJWQKAGNvbGxvY2F0ZWRfcmVmX2lkeCAgICAgICAgICAgICA6ICVkCgBwaWNfY3JfcXBfb2Zmc2V0ICAgICAgICAgICAgIDogJWQKAHBpY19jYl9xcF9vZmZzZXQgICAgICAgICAgICAgOiAlZAoAZXhwbGljaXRfcmRwY21fZW5hYmxlZF9mbGFnICAgICAgICAgICAgIDogJWQKAGltcGxpY2l0X3JkcGNtX2VuYWJsZWRfZmxhZyAgICAgICAgICAgICA6ICVkCgBzbGljZV9zYW9fbHVtYV9mbGFnICAgICAgICAgICAgIDogJWQKAEx1bWFXZWlnaHRfTCVkWyVkXSAgICAgICAgICAgICA6ICVkCgAgIHZ1aV90aW1lX3NjYWxlICAgICAgICAgICAgICA6ICVkCgBzbGljZV9waWNfb3JkZXJfY250X2xzYiAgICAgICAgICAgICAgOiAlZAoAbG9nMl9zYW9fb2Zmc2V0X3NjYWxlX2x1bWEgICAgICAgICAgICAgIDogJWQKAFN1YkhlaWdodEMgICAgICAgICAgICAgIDogJWQKACAgbWF0cml4X2NvZWZmcyAgICAgICAgICAgICAgIDogJWQKAGNocm9tYV9xcF9vZmZzZXRfbGlzdF9sZW4gICAgICAgICAgICAgICA6ICVkCgBtdmRfbDFfemVyb19mbGFnICAgICAgICAgICAgICAgOiAlZAoAU3ViV2lkdGhDICAgICAgICAgICAgICAgOiAlZAoAc2xpY2Vfc2VnbWVudF9hZGRyZXNzICAgICAgICAgICAgICAgIDogJWQKAHBpY19pbml0X3FwICAgICAgICAgICAgICAgIDogJWQKAGNhYmFjX2luaXRfZmxhZyAgICAgICAgICAgICAgICA6ICVkCgBmaWVsZF9zZXFfZmxhZyAgICAgICAgICAgICAgICA6ICVkCgB2aWRlb19wYXJhbWV0ZXJfc2V0X2lkICAgICAgICAgICAgICAgIDogJWQKAG9mZnNldF9sZW4gICAgICAgICAgICAgICAgIDogJWQKAHZwc19tYXhfc3ViX2xheWVycyAgICAgICAgICAgICAgICAgICAgOiAlZAoAYW1wX2VuYWJsZWRfZmxhZyAgICAgICAgICAgICAgICAgICAgOiAlZAoAcGNtX2VuYWJsZWRfZmxhZyAgICAgICAgICAgICAgICAgICAgOiAlZAoAY3JfcXBfb2Zmc2V0X2xpc3RbJWRdICAgICAgICAgICAgICAgICAgICA6ICVkCgBjYl9xcF9vZmZzZXRfbGlzdFslZF0gICAgICAgICAgICAgICAgICAgIDogJWQKAHBpY19vdXRwdXRfZmxhZyAgICAgICAgICAgICAgICAgICAgICA6ICVkCgBjb2xvdXJfcGxhbmVfaWQgICAgICAgICAgICAgICAgICAgICAgOiAlZAoAbnVtX2xvbmdfdGVybV9waWNzICAgICAgICAgICAgICAgICAgICAgICA6ICVkCgB2cHNfbWF4X2xheWVycyAgICAgICAgICAgICAgICAgICAgICAgIDogJWQKAG51bV9sb25nX3Rlcm1fc3BzICAgICAgICAgICAgICAgICAgICAgICAgOiAlZAoAYmV0YV9vZmZzZXQ6ICAlZAoAdGNfb2Zmc2V0OiAgICAlZAoAc2xpY2VfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJWMKACAgUHJvZmlsZS9UaWVyL0xldmVsIFtMYXllciAlZF0KAFNQUyBlcnJvcjogYml0ZGVwdGggWSBub3QgaW4gWzg7MTZdCgBTUFMgZXJyb3I6IGJpdGRlcHRoIEMgbm90IGluIFs4OzE2XQoAU1BTIGVycm9yOiBUQl9tYXggPiAzMiBvciBDVEIKAFNQUyBlcnJvcjogVEIgPiBDQgoAPGFycmF5PgoAY29uZmlnIE5BTHM6CgA0OjQ6NAoANDoyOjIKADQ6MjowCgA0OjA6MAoARmlsZSBkb2VzIG5vdCBpbmNsdWRlIGFueSBzdXBwb3J0ZWQgYnJhbmRzLgoAbGliaGVpZiB3YXJuaW5nOiBoZWlmX2ltYWdlX2NyZWF0ZSgpIHVzZWQgd2l0aCBhbiBpbGxlZ2FsIGNvbG9yc3BhY2UvY2hyb21hIGNvbWJpbmF0aW9uLiBUaGlzIHdpbGwgcmV0dXJuIGFuIGVycm9yIGluIGEgZnV0dXJlIHZlcnNpb24uCgAtLS0tLS0tLS0tLS0tLS0tLSBTUFMtcmFuZ2UtZXh0ZW5zaW9uIC0tLS0tLS0tLS0tLS0tLS0tCgAtLS0tLS0tLS0tLS0tLS0tLSBWUFMgLS0tLS0tLS0tLS0tLS0tLS0KAC0tLS0tLS0tLS0tLS0tLS0tIFNQUyAtLS0tLS0tLS0tLS0tLS0tLQoALS0tLS0tLS0tLS0tLS0tLS0gUFBTIC0tLS0tLS0tLS0tLS0tLS0tCgAtLS0tLS0tLS0tLS0tLS0tLSBWVUkgLS0tLS0tLS0tLS0tLS0tLS0KAC0tLS0tLS0tLS0tLS0tLS0tIFNMSUNFIC0tLS0tLS0tLS0tLS0tLS0tCgAtLS0tLS0tLS0tIFBQUyByYW5nZS1leHRlbnNpb24gLS0tLS0tLS0tLQoAIC0tLS0tCgBjb2xvdXJfdHlwZTogLS0tCgAqCgAoYW5nbGVzKQoAY2hyb21hX2Zvcm1hdF9pZGMgICAgICAgOiAlZCAoJXMpCgAgKHNtYWxsZXIgdGhhbiBoZWFkZXIpCgAlcCBkZWNvdXBsZSAoJXApCgAocXVhdGVyaW9uKQoAICAlc19sZXZlbF9pZGMgICAgICAgICA6ICVkICglNC4yZikKAGx0X3JlZl9waWNfcG9jX2xzYl9zcHNbJWRdIDogJWQgICAodXNlZF9ieV9jdXJyX3BpY19sdF9zcHNfZmxhZz0lZCkKACVwIChhbGxvYykKACBkZWdyZWVzIChDQ1cpCgAzQm94ADlCb3hIZWFkZXIAOEJveF9pc3BlADdGdWxsQm94ADlCb3hfb3RoZXIAOUJveF9FcnJvcgA4Qm94X2Z0eXAAOEJveF9mcmVlADhCb3hfbWV0YQA4Qm94X2hkbHIAOEJveF9waXRtADhCb3hfaW5mZQA4Qm94X2lpbmYAOEJveF9pcHJwADhCb3hfaXBjbwA4Qm94X2lwbWEAOEJveF9hdXhDADhCb3hfaXJvdAA4Qm94X2ltaXIAOEJveF9jbGFwADhCb3hfaXJlZgA4Qm94X2lkYXQAOEJveF9ncnBsADE3Qm94X0VudGl0eVRvR3JvdXAAOEJveF9zdGVyADhCb3hfcHltZAA4Qm94X2RpbmYAOEJveF9kcmVmADdCb3hfdXJsADhCb3hfcGl4aQA4Qm94X3Bhc3AAOEJveF9sc2VsADhCb3hfY2xsaQA4Qm94X21kY3YAOEJveF9hbXZlADhCb3hfY21pbgA4Qm94X2NtZXgAOEJveF91ZGVzADhCb3hfaWxvYwBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X21ldGFOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9mdHlwTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfZnJlZU5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2hkbHJOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9waXRtTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfaWxvY05TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2lpbmZOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9pbmZlTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfaXBycE5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2lwY29OU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9pcG1hTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfaXNwZU5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2F1eENOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9pcm90TlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfaW1pck5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2NsYXBOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9pcmVmTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfaHZjQ05TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2F2MUNOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF92dmNDTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfaWRhdE5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2dycGxOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9weW1kTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE3Qm94X0VudGl0eVRvR3JvdXBOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9zdGVyTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfZGluZk5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2RyZWZOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJN0JveF91cmxOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9jb2xyTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfcGl4aU5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X3Bhc3BOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9sc2VsTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfYTFvcE5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2ExbHhOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9jbGxpTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfbWRjdk5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2FtdmVOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9jbWluTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfY21leE5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X3VkZXNOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9qcGdDTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfajJrSE5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2NkZWZOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9jbWFwTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfcGNsck5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUk4Qm94X2oya0xOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOEJveF9tc2tDTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThCb3hfYXZjQ05TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkzQm94TlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTlCb3hfb3RoZXJOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJOUJveF9FcnJvck5TXzlhbGxvY2F0b3JJUzFfRUVFRQBTdWNjZXNzADEzY29sb3JfcHJvZmlsZQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNEhlaWZQaXhlbEltYWdlTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE4Y29sb3JfcHJvZmlsZV9uY2x4TlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSThIZWlmRmlsZU5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxMFJlZ2lvbkl0ZW1OU185YWxsb2NhdG9ySVMxX0VFRUUAMTBTRUlNZXNzYWdlADM2U0VJTWVzc2FnZV9kZXB0aF9yZXByZXNlbnRhdGlvbl9pbmZvADMwaGVpZl9kZXB0aF9yZXByZXNlbnRhdGlvbl9pbmZvAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEzSW1hZ2VNZXRhZGF0YU5TXzlhbGxvY2F0b3JJUzFfRUVFRQAxNFJlZ2lvbkdlb21ldHJ5AE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEwRmlsZUxheW91dE5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkyMFN0cmVhbVJlYWRlcl9pc3RyZWFtTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE5U3RyZWFtUmVhZGVyX21lbW9yeU5TXzlhbGxvY2F0b3JJUzFfRUVFRQAAAwAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAAAMAAAAEAAAABgAAAAgAAAAGAAAACAAAADE3Y29sb3JfcHJvZmlsZV9yYXcAMThjb2xvcl9wcm9maWxlX25jbHgAOEJveF9jb2xyAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE3Y29sb3JfcHJvZmlsZV9yYXdOU185YWxsb2NhdG9ySVMxX0VFRUUAAACamZk+AAAAAAAAAAA9Clc+4XqUPlK4nj5SuJ4+/tR4PnsULj4AAAAAFK6HPhSuhz4AQayzAgs0PQqXPpqZGT8AAAAAAAAAAI/CNT+amRk/7FEYP+xRGD/pJjE/MQhMPwAAgD/XozA/16MwPwBBhLQCCzRI4Ro/mpkZPgAAAAAAAAAAKVwPPpqZGT5SuB4+UrgePuF6FD7dJAY+AAAAAJqZGT6amRk+AEHctAILNFK4Hj6PwnU9AAAAAAAAAAAK16M9j8J1PSlcjz0pXI89ObRIPX9qPD0AAAAAj8J1PY/CdT0AQbS1Ags0LbKdPQrXIz8AAAAAAAAAAB+FKz8K1yM/rkchP65HIT8EVi4/fT81PwAAgD97FC4/exQuPwBBjLYCCzSuRyE/w/WoPgAAAAAAAAAAw/WoPsP1qD57FK4+exSuPvhToz4GgZU+AAAAAArXoz4K16M+AEHktgILNHsUrj43GqA+AAAAAAAAAABSuJ4+NxqgPjcaoD43GqA+UriePjcaoD6fqqo+nMSgPjcaoD4AQby3Ags0NxqgPrByqD4AAAAAAAAAAMHKoT6wcqg+sHKoPrByqD7ByqE+sHKoPjuqqj5GtrM+sHKoPgBBlLgCC8IRsHKoPgEAAAACAAAAAgAAAAEAAAABAAAAAgAAAAEAAAABAAAAMjBSZWdpb25HZW9tZXRyeV9Qb2ludAAyNFJlZ2lvbkdlb21ldHJ5X1JlY3RhbmdsZQAyMlJlZ2lvbkdlb21ldHJ5X0VsbGlwc2UAMjJSZWdpb25HZW9tZXRyeV9Qb2x5Z29uADI5UmVnaW9uR2VvbWV0cnlfUmVmZXJlbmNlZE1hc2sAMjVSZWdpb25HZW9tZXRyeV9JbmxpbmVNYXNrAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTIwUmVnaW9uR2VvbWV0cnlfUG9pbnROU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjRSZWdpb25HZW9tZXRyeV9SZWN0YW5nbGVOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjJSZWdpb25HZW9tZXRyeV9FbGxpcHNlTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTIyUmVnaW9uR2VvbWV0cnlfUG9seWdvbk5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkyOVJlZ2lvbkdlb21ldHJ5X1JlZmVyZW5jZWRNYXNrTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTI1UmVnaW9uR2VvbWV0cnlfSW5saW5lTWFza05TXzlhbGxvY2F0b3JJUzFfRUVFRQAAAGZpdmFjaWVoeGllaGlrMmpnZXBqZmFpbTFmaW0yZmltAQAAAAIAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAAWAAAAAQAAAAIAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAAAAAAAAQAAAAIAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAAEAAAAEAAAAAwAAAAcAAAAKAAAABQAAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAHBwAGlwAFAxMmhlaWZfY29udGV4dAAxMmhlaWZfY29udGV4dAB2cHAAMTBoZWlmX2Vycm9yAHBwcHAAMjBoZWlmX2ZpbGV0eXBlX3Jlc3VsdABpcHAATjEwZW1zY3JpcHRlbjN2YWxFAHBwcABwcHBpAFAxN2hlaWZfaW1hZ2VfaGFuZGxlADE3aGVpZl9pbWFnZV9oYW5kbGUAMTVoZWlmX2NvbG9yc3BhY2UAMTFoZWlmX2Nocm9tYQBwcHBpaQAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAACgAAAFAxMGhlaWZfaW1hZ2UAMTBoZWlmX2ltYWdlADEyaGVpZl9jaGFubmVsAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWhFRQBQSzE3aGVpZl9pbWFnZV9oYW5kbGUAUEsxMGhlaWZfaW1hZ2UAMTVoZWlmX2Vycm9yX2NvZGUAMThoZWlmX3N1YmVycm9yX2NvZGUAMjNoZWlmX2NvbXByZXNzaW9uX2Zvcm1hdAAzNGhlaWZfY2hyb21hX2Rvd25zYW1wbGluZ19hbGdvcml0aG0AMzJoZWlmX2Nocm9tYV91cHNhbXBsaW5nX2FsZ29yaXRobQBQSzEyaGVpZl9jb250ZXh0AHYAdnAAcAB2cHBpAHZwcHAATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTFIZWlmQ29udGV4dE5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxN1N0cmVhbVJlYWRlcl9DQXBpTlNfOWFsbG9jYXRvcklTMV9FRUVFADE1SW1hZ2VJdGVtX0Vycm9yADdEZWNvZGVyAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEyRGVjb2Rlcl9IRVZDTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEyRGVjb2Rlcl9BVklGTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTExRGVjb2Rlcl9BVkNOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTZEZWNvZGVyX0pQRUcyMDAwTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTExRGVjb2Rlcl9WVkNOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTJEZWNvZGVyX0pQRUdOU185YWxsb2NhdG9ySVMxX0VFRUUAMTRJbWFnZUl0ZW1fSEVWQwA4Qm94X2h2Y0MATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMzZTRUlNZXNzYWdlX2RlcHRoX3JlcHJlc2VudGF0aW9uX2luZm9OU185YWxsb2NhdG9ySVMxX0VFRUUAMTJEZWNvZGVyX0hFVkMAMTRJbWFnZUl0ZW1fQVZJRgAxMkRlY29kZXJfQVZJRgA4Qm94X2F2MUMAOEJveF9hMW9wADhCb3hfYTFseAAxNEltYWdlSXRlbV9KUEVHADhCb3hfanBnQwBB4MkCC9MiAQEBAQABAQEAAQEBAAEBATEyRGVjb2Rlcl9KUEVHADE4SW1hZ2VJdGVtX0pQRUcyMDAwADE2RGVjb2Rlcl9KUEVHMjAwMAA4Qm94X2NkZWYAOEJveF9jbWFwADhCb3hfcGNscgA4Qm94X2oya0wAOEJveF9qMmtIADEzSW1hZ2VJdGVtX1ZWQwAxMURlY29kZXJfVlZDADhCb3hfdnZjQwAxM0ltYWdlSXRlbV9BVkMAOEJveF9hdmNDADExRGVjb2Rlcl9BVkMAOEJveF9tc2tDADE0SW1hZ2VJdGVtX21hc2sAOUltYWdlSXRlbQAxMUVycm9yQnVmZmVyAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE0SW1hZ2VJdGVtX0pQRUdOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTRJbWFnZUl0ZW1fSEVWQ05TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNEltYWdlSXRlbV9BVklGTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTEzSW1hZ2VJdGVtX1ZWQ05TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxM0ltYWdlSXRlbV9BVkNOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTVJbWFnZUl0ZW1fRXJyb3JOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMThJbWFnZUl0ZW1fSlBFRzIwMDBOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTRJbWFnZUl0ZW1fbWFza05TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNEltYWdlSXRlbV9HcmlkTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE3SW1hZ2VJdGVtX092ZXJsYXlOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTRJbWFnZUl0ZW1faWRlbk5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNUltYWdlSXRlbV9UaWxlZE5TXzlhbGxvY2F0b3JJUzFfRUVFRQAAAAAAAwAAAAAAAAAxNEltYWdlSXRlbV9HcmlkADE3SW1hZ2VJdGVtX092ZXJsYXkAMTRJbWFnZUl0ZW1faWRlbgA4Qm94X3RpbEMAMTVJbWFnZUl0ZW1fVGlsZWQATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMThPcF9SR0JfdG9fUkdCMjRfMzJOU185YWxsb2NhdG9ySVMxX0VFRUUAMjRDb2xvckNvbnZlcnNpb25PcGVyYXRpb24ATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMThPcF9SR0IyNF8zMl90b19SR0JOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTVPcF9ZQ2JDcl90b19SR0JJdEVOU185YWxsb2NhdG9ySVMyX0VFRUUAMTVPcF9ZQ2JDcl90b19SR0JJdEUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTVPcF9ZQ2JDcl90b19SR0JJaEVOU185YWxsb2NhdG9ySVMyX0VFRUUAMTVPcF9ZQ2JDcl90b19SR0JJaEUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjBPcF9ZQ2JDcjQyMF90b19SR0IyNE5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkyME9wX1lDYkNyNDIwX3RvX1JHQjMyTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTIzT3BfWUNiQ3I0MjBfdG9fUlJHR0JCYWFOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjVPcF9SR0JfSERSX3RvX1JSR0dCQmFhX0JFTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTIxT3BfUkdCX3RvX1JSR0dCQmFhX0JFTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE5T3BfbW9ub190b19ZQ2JDcjQyME5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxOU9wX21vbm9fdG9fUkdCMjRfMzJOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjdPcF9SUkdHQkJhYV9zd2FwX2VuZGlhbm5lc3NOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjVPcF9SUkdHQkJhYV9CRV90b19SR0JfSERSTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTIwT3BfUkdCMjRfMzJfdG9fWUNiQ3JOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTVPcF9SR0JfdG9fWUNiQ3JJaEVOU185YWxsb2NhdG9ySVMyX0VFRUUAMTVPcF9SR0JfdG9fWUNiQ3JJaEUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTVPcF9SR0JfdG9fWUNiQ3JJdEVOU185YWxsb2NhdG9ySVMyX0VFRUUAMTVPcF9SR0JfdG9fWUNiQ3JJdEUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjdPcF9SUkdHQkJ4eF9IRFJfdG9fWUNiQ3I0MjBOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjdPcF9SR0IyNF8zMl90b19ZQ2JDcjQ0NF9HQlJOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTlPcF9kcm9wX2FscGhhX3BsYW5lTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE2T3BfdG9faGRyX3BsYW5lc05TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNk9wX3RvX3Nkcl9wbGFuZXNOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMzJPcF9ZQ2JDcjQyMF9iaWxpbmVhcl90b19ZQ2JDcjQ0NEloRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQAzMk9wX1lDYkNyNDIwX2JpbGluZWFyX3RvX1lDYkNyNDQ0SWhFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTMyT3BfWUNiQ3I0MjBfYmlsaW5lYXJfdG9fWUNiQ3I0NDRJdEVOU185YWxsb2NhdG9ySVMyX0VFRUUAMzJPcF9ZQ2JDcjQyMF9iaWxpbmVhcl90b19ZQ2JDcjQ0NEl0RQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkzMk9wX1lDYkNyNDIyX2JpbGluZWFyX3RvX1lDYkNyNDQ0SWhFTlNfOWFsbG9jYXRvcklTMl9FRUVFADMyT3BfWUNiQ3I0MjJfYmlsaW5lYXJfdG9fWUNiQ3I0NDRJaEUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMzJPcF9ZQ2JDcjQyMl9iaWxpbmVhcl90b19ZQ2JDcjQ0NEl0RU5TXzlhbGxvY2F0b3JJUzJfRUVFRQAzMk9wX1lDYkNyNDIyX2JpbGluZWFyX3RvX1lDYkNyNDQ0SXRFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTMxT3BfWUNiQ3I0NDRfdG9fWUNiQ3I0MjBfYXZlcmFnZUloRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQAzMU9wX1lDYkNyNDQ0X3RvX1lDYkNyNDIwX2F2ZXJhZ2VJaEUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMzFPcF9ZQ2JDcjQ0NF90b19ZQ2JDcjQyMF9hdmVyYWdlSXRFTlNfOWFsbG9jYXRvcklTMl9FRUVFADMxT3BfWUNiQ3I0NDRfdG9fWUNiQ3I0MjBfYXZlcmFnZUl0RQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkzMU9wX1lDYkNyNDQ0X3RvX1lDYkNyNDIyX2F2ZXJhZ2VJaEVOU185YWxsb2NhdG9ySVMyX0VFRUUAMzFPcF9ZQ2JDcjQ0NF90b19ZQ2JDcjQyMl9hdmVyYWdlSWhFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTMxT3BfWUNiQ3I0NDRfdG9fWUNiQ3I0MjJfYXZlcmFnZUl0RU5TXzlhbGxvY2F0b3JJUzJfRUVFRQAzMU9wX1lDYkNyNDQ0X3RvX1lDYkNyNDIyX2F2ZXJhZ2VJdEUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjlPcF9BbnlfUkdCX3RvX1lDYkNyXzQyMF9TaGFycE5TXzlhbGxvY2F0b3JJUzFfRUVFRQAyN09wX1JSR0dCQnh4X0hEUl90b19ZQ2JDcjQyMAAyME9wX1JHQjI0XzMyX3RvX1lDYkNyADI3T3BfUkdCMjRfMzJfdG9fWUNiQ3I0NDRfR0JSADI5T3BfQW55X1JHQl90b19ZQ2JDcl80MjBfU2hhcnAAMjBPcF9ZQ2JDcjQyMF90b19SR0IyNAAyME9wX1lDYkNyNDIwX3RvX1JHQjMyADIzT3BfWUNiQ3I0MjBfdG9fUlJHR0JCYWEAMThPcF9SR0JfdG9fUkdCMjRfMzIAMjVPcF9SR0JfSERSX3RvX1JSR0dCQmFhX0JFADIxT3BfUkdCX3RvX1JSR0dCQmFhX0JFADI1T3BfUlJHR0JCYWFfQkVfdG9fUkdCX0hEUgAxOE9wX1JHQjI0XzMyX3RvX1JHQgAyN09wX1JSR0dCQmFhX3N3YXBfZW5kaWFubmVzcwAAAAAOAAAADwAAAAwAAAANAAAAMTlPcF9tb25vX3RvX1lDYkNyNDIwADE5T3BfbW9ub190b19SR0IyNF8zMgAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAAMTZPcF90b19oZHJfcGxhbmVzADE2T3BfdG9fc2RyX3BsYW5lcwAxOU9wX2Ryb3BfYWxwaGFfcGxhbmUAU3VjY2VzcwBBvOwCCyoBAAAAAgAAAEwAAABUAAAAVAAAAFAAAABYAAAAWAAAAMBBAADIQQAAyEEAQfDsAgthxQAAALkAAADJAAAAxQAAALkAAADJAAAAlQAAAIYAAABuAAAAmgAAAHoAAACJAAAAjAAAAMYAAACpAAAAxgAAAIsAAACNAAAAnQAAAGsAAACLAAAAfgAAAGsAAACLAAAAfgBB4O0CC6EBuAAAAJoAAACLAAAAmgAAAJoAAACaAAAAiwAAAJoAAACaAAAAuAAAAJoAAAC3AAAAPwAAAJgAAACYAAAAAAAAAG8AAACNAAAAmQAAAG8AAABeAAAAigAAALYAAACaAAAAlQAAAGsAAACnAAAAmgAAAJUAAABcAAAApwAAAJoAAACZAAAAigAAAIoAAAB8AAAAigAAAF4AAADgAAAApwAAAHoAQZDvAgvVAW4AAABu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AyAAAAAaAAAAFQAAABEAAAANAAAACQAAAAUAAAACAAAAAAAAAP7////7////9/////P////v////6////+b////g////5v///+v////v////8/////f////7/////v///wAAAAACAAAABQAAAAkAAAANAAAAEQAAABUAAAAaAAAAIAAAAAAAAAAA8P//mvn//3L8//+K/f//Hv7//3r+///F/v//AP///8X+//96/v//Hv7//4r9//9y/P//mvn//wDw//8AAAAAAAAAAAEAAAAAAAAAAgAAAAEAAAACAAAAAAAAAAMAAAABAAAAAwAAAAIAAAADAAAAAQAAAAAAAAACAAAAAAAAAAIAAAABAAAAAwAAAAAAAAADAAAAAQAAAAMAAAACAAAAAAAAAHDHAAABBQAAAgUAADMwTW90aW9uVmVjdG9yQWNjZXNzX2RlMjY1X2ltYWdlADE4TW90aW9uVmVjdG9yQWNjZXNzAAAA3BsBAFHHAAAEHAEAMMcAAGjHAEGEjwMLvQIDAAAAAwAAAAIAAAAAAAAAAwAAAAQAAAAEAAAAAAEEBQIDBAUGBggIBwcIYwAAAAAaAAAACgAAAAEAAAAAAQICAgIDBQcICgwNDxESExQVFhcXGBgZGRobGxwcHR0eHwAAAAAAGMgAAJUEAAADBQAABAUAAAUFAAAyNXRocmVhZF90YXNrX3NsaWNlX3NlZ21lbnQABBwBAPzHAAB4vAAAAAAAAFTIAACVBAAABgUAAAcFAAAIBQAAMTl0aHJlYWRfdGFza19jdGJfcm93AAAABBwBADzIAAB4vAAAAQAAAAIAAAACAAAAAQAAAAEAAAACAAAAAQAAAAEAAAChKQAAhEcAAApGAAAAAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAhAAAAIgAAACIAAAAjAAAAIwAAACQAAAAkAAAAJQBB0JEDCyYoAAAALQAAADMAAAA5AAAAQAAAAEgAAABJHQAAmkcAANsnAACCEABBhJIDC94GAQABAAwACwAKAAsAEAALACgAIQAYAAsAFAALACAACwBQACEAEgALAA8ACwBAACEAoABjAAQAAwADAAIAAgABAAAAAAABDQAAHD8AANBAAACzPgAA1UAAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0loTlNfMTFjaGFyX3RyYWl0c0loRUVOU185YWxsb2NhdG9ySWhFRUVFAADcGwEAXMkAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0l3TlNfMTFjaGFyX3RyYWl0c0l3RUVOU185YWxsb2NhdG9ySXdFRUVFAADcGwEApMkAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0lEc05TXzExY2hhcl90cmFpdHNJRHNFRU5TXzlhbGxvY2F0b3JJRHNFRUVFAAAA3BsBAOzJAABOU3QzX18yMTJiYXNpY19zdHJpbmdJRGlOU18xMWNoYXJfdHJhaXRzSURpRUVOU185YWxsb2NhdG9ySURpRUVFRQAAANwbAQA4ygAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJY0VFAADcGwEAhMoAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQAA3BsBAKzKAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lzRUUAANwbAQDUygAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJdEVFAADcGwEA/MoAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQAA3BsBACTLAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lqRUUAANwbAQBMywAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJbEVFAADcGwEAdMsAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQAA3BsBAJzLAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l4RUUAANwbAQDEywAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJeUVFAADcGwEA7MsAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWZFRQAA3BsBABTMAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lkRUUAANwbAQA8zABB8JgDC9cVAwAAAAQAAAAEAAAABgAAAIP5ogBETm4A/CkVANFXJwDdNPUAYtvAADyZlQBBkEMAY1H+ALveqwC3YcUAOm4kANJNQgBJBuAACeouAByS0QDrHf4AKbEcAOg+pwD1NYIARLsuAJzphAC0JnAAQX5fANaROQBTgzkAnPQ5AItfhAAo+b0A+B87AN7/lwAPmAUAES/vAApaiwBtH20Az342AAnLJwBG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cm1hdGlvbgBJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBNdWx0aWhvcCBhdHRlbXB0ZWQAUmVxdWlyZWQga2V5IG5vdCBhdmFpbGFibGUAS2V5IGhhcyBleHBpcmVkAEtleSBoYXMgYmVlbiByZXZva2VkAEtleSB3YXMgcmVqZWN0ZWQgYnkgc2VydmljZQBBor4DC5YBpQJbAPABtQWMBSUBgwYdA5QE/wDHAzEDCwa8AY8BfwPKBCsA2gavAEIDTgPcAQ4EFQChBg0BlAILAjgGZAK8Av8CXQPnBAsHzwLLBe8F2wXhAh4GRQKFAIICbANvBPEA8wMYBdkA2gNMBlQCewGdA70EAABRABUCuwCzA20A/wGFBC8F+QQ4AGUBRgGfALcGqAFzAlMBAEHovwMLDCEEAAAAAAAAAAAvAgBBiMADCwY1BEcEVgQAQZ7AAwsCoAQAQbLAAwsiRgVgBW4FYQYAAM8BAAAAAAAAAADJBukG+QYeBzkHSQdeBwBB4MADC0EZAAsAGRkZAAAAAAUAAAAAAAAJAAAAAAsAAAAAAAAAABkACgoZGRkDCgcAAQAJCxgAAAkGCwAACwAGGQAAABkZGQBBscEDCyEOAAAAAAAAAAAZAAsNGRkZAA0AAAIACQ4AAAAJAA4AAA4AQevBAwsBDABB98EDCxUTAAAAABMAAAAACQwAAAAAAAwAAAwAQaXCAwsBEABBscIDCxUPAAAABA8AAAAACRAAAAAAABAAABAAQd/CAwsBEgBB68IDCx4RAAAAABEAAAAACRIAAAAAABIAABIAABoAAAAaGhoAQaLDAwsOGgAAABoaGgAAAAAAAAkAQdPDAwsBFABB38MDCxUXAAAAABcAAAAACRQAAAAAABQAABQAQY3EAwsBFgBBmcQDCycVAAAAABUAAAAACRYAAAAAABYAABYAADAxMjM0NTY3ODlBQkNERUYAQeTEAwsCEQUAQYzFAwsI//////////8AQdTFAwvvFAIAAAADAAAABQAAAAcAAAALAAAADQAAABEAAAATAAAAFwAAAB0AAAAfAAAAJQAAACkAAAArAAAALwAAADUAAAA7AAAAPQAAAEMAAABHAAAASQAAAE8AAABTAAAAWQAAAGEAAABlAAAAZwAAAGsAAABtAAAAcQAAAH8AAACDAAAAiQAAAIsAAACVAAAAlwAAAJ0AAACjAAAApwAAAK0AAACzAAAAtQAAAL8AAADBAAAAxQAAAMcAAADTAAAAAQAAAAsAAAANAAAAEQAAABMAAAAXAAAAHQAAAB8AAAAlAAAAKQAAACsAAAAvAAAANQAAADsAAAA9AAAAQwAAAEcAAABJAAAATwAAAFMAAABZAAAAYQAAAGUAAABnAAAAawAAAG0AAABxAAAAeQAAAH8AAACDAAAAiQAAAIsAAACPAAAAlQAAAJcAAACdAAAAowAAAKcAAACpAAAArQAAALMAAAC1AAAAuwAAAL8AAADBAAAAxQAAAMcAAADRAAAAAAAAAOTmAAAUBQAAFQUAABYFAAAXBQAAGAUAABkFAAAaBQAAGwUAABwFAAAdBQAAHgUAAB8FAAAgBQAAIQUAAAgAAAAAAAAAHOcAACIFAAAjBQAA+P////j///8c5wAAJAUAACUFAACc5AAAsOQAAAQAAAAAAAAAZOcAACYFAAAnBQAA/P////z///9k5wAAKAUAACkFAADM5AAA4OQAAAwAAAAAAAAA/OcAACoFAAArBQAABAAAAPj////85wAALAUAAC0FAAD0////9P////znAAAuBQAALwUAAPzkAACI5wAAnOcAALDnAADE5wAAJOUAABDlAAAAAAAAmOgAADAFAAAxBQAAMgUAADMFAAA0BQAANQUAADYFAAA3BQAAOAUAADkFAAA6BQAAOwUAADwFAAA9BQAACAAAAAAAAADQ6AAAPgUAAD8FAAD4////+P///9DoAABABQAAQQUAAJTlAACo5QAABAAAAAAAAAAY6QAAQgUAAEMFAAD8/////P///xjpAABEBQAARQUAAMTlAADY5QAAAAAAAHTpAABGBQAARwUAABYFAAAXBQAASAUAAEkFAAAaBQAAGwUAABwFAABKBQAAHgUAAEsFAAAgBQAATAUAAAAAAADg7AAATQUAAE4FAABPBQAAUAUAAFEFAABSBQAAUwUAABsFAAAcBQAAVAUAAB4FAABVBQAAIAUAAFYFAAAAAAAApOYAAFcFAABYBQAATlN0M19fMjliYXNpY19pb3NJY05TXzExY2hhcl90cmFpdHNJY0VFRUUAAAAEHAEAeOYAABDtAABOU3QzX18yMTViYXNpY19zdHJlYW1idWZJY05TXzExY2hhcl90cmFpdHNJY0VFRUUAAAAA3BsBALDmAABOU3QzX18yMTNiYXNpY19pc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAABgHAEA7OYAAAAAAAABAAAApOYAAAP0//9OU3QzX18yMTNiYXNpY19vc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAABgHAEANOcAAAAAAAABAAAApOYAAAP0//8MAAAAAAAAABznAAAiBQAAIwUAAPT////0////HOcAACQFAAAlBQAABAAAAAAAAABk5wAAJgUAACcFAAD8/////P///2TnAAAoBQAAKQUAAE5TdDNfXzIxNGJhc2ljX2lvc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAGAcAQDM5wAAAwAAAAIAAAAc5wAAAgAAAGTnAAACCAAAAAAAAFjoAABZBQAAWgUAAE5TdDNfXzI5YmFzaWNfaW9zSXdOU18xMWNoYXJfdHJhaXRzSXdFRUVFAAAABBwBACzoAAAQ7QAATlN0M19fMjE1YmFzaWNfc3RyZWFtYnVmSXdOU18xMWNoYXJfdHJhaXRzSXdFRUVFAAAAANwbAQBk6AAATlN0M19fMjEzYmFzaWNfaXN0cmVhbUl3TlNfMTFjaGFyX3RyYWl0c0l3RUVFRQAAYBwBAKDoAAAAAAAAAQAAAFjoAAAD9P//TlN0M19fMjEzYmFzaWNfb3N0cmVhbUl3TlNfMTFjaGFyX3RyYWl0c0l3RUVFRQAAYBwBAOjoAAAAAAAAAQAAAFjoAAAD9P//TlN0M19fMjE1YmFzaWNfc3RyaW5nYnVmSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAAAAEHAEAMOkAAOTmAABAAAAAAAAAALjqAABbBQAAXAUAADgAAAD4////uOoAAF0FAABeBQAAwP///8D///+46gAAXwUAAGAFAACM6QAA8OkAACzqAABA6gAAVOoAAGjqAAAY6gAABOoAALTpAACg6QAAQAAAAAAAAAD85wAAKgUAACsFAAA4AAAA+P////znAAAsBQAALQUAAMD////A/////OcAAC4FAAAvBQAAQAAAAAAAAAAc5wAAIgUAACMFAADA////wP///xznAAAkBQAAJQUAADgAAAAAAAAAZOcAACYFAAAnBQAAyP///8j///9k5wAAKAUAACkFAABOU3QzX18yMThiYXNpY19zdHJpbmdzdHJlYW1JY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRQAAAAAEHAEAcOoAAPznAAA4AAAAAAAAAGzrAABhBQAAYgUAAMj////I////bOsAAGMFAABkBQAA0OoAAAjrAAAc6wAA5OoAADgAAAAAAAAAZOcAACYFAAAnBQAAyP///8j///9k5wAAKAUAACkFAABOU3QzX18yMTliYXNpY19vc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAAAAEHAEAJOsAAGTnAABsAAAAAAAAAAjsAABlBQAAZgUAAJT///+U////COwAAGcFAABoBQAAhOsAALzrAADQ6wAAmOsAAGwAAAAAAAAAHOcAACIFAAAjBQAAlP///5T///8c5wAAJAUAACUFAABOU3QzX18yMTRiYXNpY19pZnN0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRQAEHAEA2OsAABznAABoAAAAAAAAAKTsAABpBQAAagUAAJj///+Y////pOwAAGsFAABsBQAAIOwAAFjsAABs7AAANOwAAGgAAAAAAAAAZOcAACYFAAAnBQAAmP///5j///9k5wAAKAUAACkFAABOU3QzX18yMTRiYXNpY19vZnN0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRQAEHAEAdOwAAGTnAABOU3QzX18yMTNiYXNpY19maWxlYnVmSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAAAEHAEAsOwAAOTmAAAAAAAAEO0AAG0FAABuBQAATlN0M19fMjhpb3NfYmFzZUUAAADcGwEA/OwAAOBRAQAAAAAA3hIElQAAAAD///////////////8g7QAAFAAAAEMuVVRGLTgAQfDaAwsCNO0AQZDbAwviBAIAAMADAADABAAAwAUAAMAGAADABwAAwAgAAMAJAADACgAAwAsAAMAMAADADQAAwA4AAMAPAADAEAAAwBEAAMASAADAEwAAwBQAAMAVAADAFgAAwBcAAMAYAADAGQAAwBoAAMAbAADAHAAAwB0AAMAeAADAHwAAwAAAALMBAADDAgAAwwMAAMMEAADDBQAAwwYAAMMHAADDCAAAwwkAAMMKAADDCwAAwwwAAMMNAADTDgAAww8AAMMAAAy7AQAMwwIADMMDAAzDBAAM2wAAAAC07gAAFAUAAHAFAABxBQAAFwUAABgFAAAZBQAAGgUAABsFAAAcBQAAcgUAAHMFAAB0BQAAIAUAACEFAABOU3QzX18yMTBfX3N0ZGluYnVmSWNFRQAEHAEAnO4AAOTmAAAAAAAAHO8AABQFAAB1BQAAdgUAABcFAAAYBQAAGQUAAHcFAAAbBQAAHAUAAB0FAAAeBQAAHwUAAHgFAAB5BQAATlN0M19fMjExX19zdGRvdXRidWZJY0VFAAAAAAQcAQAA7wAA5OYAAAAAAACA7wAAMAUAAHoFAAB7BQAAMwUAADQFAAA1BQAANgUAADcFAAA4BQAAfAUAAH0FAAB+BQAAPAUAAD0FAABOU3QzX18yMTBfX3N0ZGluYnVmSXdFRQAEHAEAaO8AAJjoAAAAAAAA6O8AADAFAAB/BQAAgAUAADMFAAA0BQAANQUAAIEFAAA3BQAAOAUAADkFAAA6BQAAOwUAAIIFAACDBQAATlN0M19fMjExX19zdGRvdXRidWZJd0VFAAAAAAQcAQDM7wAAmOgAQYDgAwuqA9F0ngBXnb0qgHBSD///PicKAAAAZAAAAOgDAAAQJwAAoIYBAEBCDwCAlpgAAOH1BRgAAAA1AAAAcQAAAGv////O+///kr///wAAAAAAAAAA/////////////////////////////////////////////////////////////////wABAgMEBQYHCAn/////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP///////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAQIEBwMGBQAAAAAAAABMQ19DVFlQRQAAAABMQ19OVU1FUklDAABMQ19USU1FAAAAAABMQ19DT0xMQVRFAABMQ19NT05FVEFSWQBMQ19NRVNTQUdFUwCw8wBBtOcDC/kDAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAA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\");var Pe=(f={})=>(0,_6.default)({...f,wasmBinary:B6});return Ce(Me);})();\n\nlibheif = libheif.default;\nif (typeof exports === 'object' && typeof module === 'object') {\n  module.exports = libheif;\n}\n","module.exports = require('./libheif-wasm/libheif-bundle.js')();\n","const uint8ArrayUtf8ByteString = (array, start, end) => {\n  return String.fromCharCode(...array.slice(start, end));\n};\n\n// brands explained: https://github.com/strukturag/libheif/issues/83\n// code adapted from: https://github.com/sindresorhus/file-type/blob/6f901bd82b849a85ca4ddba9c9a4baacece63d31/core.js#L428-L438\nconst isHeic = (buffer) => {\n  const brandMajor = uint8ArrayUtf8ByteString(buffer, 8, 12).replace('\\0', ' ').trim();\n\n  switch (brandMajor) {\n    case 'mif1':\n      return true; // {ext: 'heic', mime: 'image/heif'};\n    case 'msf1':\n      return true; // {ext: 'heic', mime: 'image/heif-sequence'};\n    case 'heic':\n    case 'heix':\n      return true; // {ext: 'heic', mime: 'image/heic'};\n    case 'hevc':\n    case 'hevx':\n      return true; // {ext: 'heic', mime: 'image/heic-sequence'};\n  }\n\n  return false;\n};\n\nconst decodeImage = async (image) => {\n  const width = image.get_width();\n  const height = image.get_height();\n\n  const { data } = await new Promise((resolve, reject) => {\n    image.display({ data: new Uint8ClampedArray(width*height*4), width, height }, (displayData) => {\n      if (!displayData) {\n        return reject(new Error('HEIF processing error'));\n      }\n\n      resolve(displayData);\n    });\n  });\n\n  return { width, height, data };\n};\n\nmodule.exports = libheif => {\n  const decodeBuffer = async ({ buffer, all }) => {\n    if (!isHeic(buffer)) {\n      throw new TypeError('input buffer is not a HEIC image');\n    }\n\n    // wait for module to be initialized\n    // currently it is synchronous but it might be async in the future\n    await libheif.ready;\n\n    const decoder = new libheif.HeifDecoder();\n    const data = decoder.decode(buffer);\n\n    const dispose = () => {\n      for (const image of data) {\n        image.free();\n      }\n\n      decoder.decoder.delete();\n    };\n\n    if (!data.length) {\n      throw new Error('HEIF image not found');\n    }\n\n    if (!all) {\n      try {\n        return await decodeImage(data[0]);\n      } finally {\n        dispose();\n      }\n    }\n\n    return Object.defineProperty(data.map(image => {\n      return {\n        width: image.get_width(),\n        height: image.get_height(),\n        decode: async () => await decodeImage(image)\n      };\n    }), 'dispose', {\n      enumerable: false,\n      configurable: false,\n      writable: false,\n      value: dispose\n    });\n  };\n\n  return {\n    one: async ({ buffer }) => await decodeBuffer({ buffer, all: false }),\n    all: async ({ buffer }) => await decodeBuffer({ buffer, all: true })\n  };\n};\n","const libheif = require('libheif-js/wasm-bundle');\n\nconst { one, all } = require('./lib.js')(libheif);\n\nmodule.exports = one;\nmodule.exports.all = all;\n","/*\n  Copyright (c) 2008, Adobe Systems Incorporated\n  All rights reserved.\n\n  Redistribution and use in source and binary forms, with or without \n  modification, are permitted provided that the following conditions are\n  met:\n\n  * Redistributions of source code must retain the above copyright notice, \n    this list of conditions and the following disclaimer.\n  \n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in the \n    documentation and/or other materials provided with the distribution.\n  \n  * Neither the name of Adobe Systems Incorporated nor the names of its \n    contributors may be used to endorse or promote products derived from \n    this software without specific prior written permission.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n  IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR \n  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n/*\nJPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n\nBasic GUI blocking jpeg encoder\n*/\n\nvar btoa = btoa || function(buf) {\n  return Buffer.from(buf).toString('base64');\n};\n\nfunction JPEGEncoder(quality) {\n  var self = this;\n\tvar fround = Math.round;\n\tvar ffloor = Math.floor;\n\tvar YTable = new Array(64);\n\tvar UVTable = new Array(64);\n\tvar fdtbl_Y = new Array(64);\n\tvar fdtbl_UV = new Array(64);\n\tvar YDC_HT;\n\tvar UVDC_HT;\n\tvar YAC_HT;\n\tvar UVAC_HT;\n\t\n\tvar bitcode = new Array(65535);\n\tvar category = new Array(65535);\n\tvar outputfDCTQuant = new Array(64);\n\tvar DU = new Array(64);\n\tvar byteout = [];\n\tvar bytenew = 0;\n\tvar bytepos = 7;\n\t\n\tvar YDU = new Array(64);\n\tvar UDU = new Array(64);\n\tvar VDU = new Array(64);\n\tvar clt = new Array(256);\n\tvar RGB_YUV_TABLE = new Array(2048);\n\tvar currentQuality;\n\t\n\tvar ZigZag = [\n\t\t\t 0, 1, 5, 6,14,15,27,28,\n\t\t\t 2, 4, 7,13,16,26,29,42,\n\t\t\t 3, 8,12,17,25,30,41,43,\n\t\t\t 9,11,18,24,31,40,44,53,\n\t\t\t10,19,23,32,39,45,52,54,\n\t\t\t20,22,33,38,46,51,55,60,\n\t\t\t21,34,37,47,50,56,59,61,\n\t\t\t35,36,48,49,57,58,62,63\n\t\t];\n\t\n\tvar std_dc_luminance_nrcodes = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0];\n\tvar std_dc_luminance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n\tvar std_ac_luminance_nrcodes = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d];\n\tvar std_ac_luminance_values = [\n\t\t\t0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,\n\t\t\t0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,\n\t\t\t0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,\n\t\t\t0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,\n\t\t\t0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,\n\t\t\t0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,\n\t\t\t0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,\n\t\t\t0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,\n\t\t\t0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,\n\t\t\t0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,\n\t\t\t0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,\n\t\t\t0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,\n\t\t\t0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,\n\t\t\t0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,\n\t\t\t0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,\n\t\t\t0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,\n\t\t\t0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,\n\t\t\t0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,\n\t\t\t0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,\n\t\t\t0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n\t\t\t0xf9,0xfa\n\t\t];\n\t\n\tvar std_dc_chrominance_nrcodes = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0];\n\tvar std_dc_chrominance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n\tvar std_ac_chrominance_nrcodes = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77];\n\tvar std_ac_chrominance_values = [\n\t\t\t0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,\n\t\t\t0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,\n\t\t\t0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,\n\t\t\t0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,\n\t\t\t0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,\n\t\t\t0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,\n\t\t\t0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,\n\t\t\t0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,\n\t\t\t0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,\n\t\t\t0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,\n\t\t\t0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,\n\t\t\t0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,\n\t\t\t0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,\n\t\t\t0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,\n\t\t\t0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,\n\t\t\t0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,\n\t\t\t0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,\n\t\t\t0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,\n\t\t\t0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,\n\t\t\t0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n\t\t\t0xf9,0xfa\n\t\t];\n\t\n\tfunction initQuantTables(sf){\n\t\t\tvar YQT = [\n\t\t\t\t16, 11, 10, 16, 24, 40, 51, 61,\n\t\t\t\t12, 12, 14, 19, 26, 58, 60, 55,\n\t\t\t\t14, 13, 16, 24, 40, 57, 69, 56,\n\t\t\t\t14, 17, 22, 29, 51, 87, 80, 62,\n\t\t\t\t18, 22, 37, 56, 68,109,103, 77,\n\t\t\t\t24, 35, 55, 64, 81,104,113, 92,\n\t\t\t\t49, 64, 78, 87,103,121,120,101,\n\t\t\t\t72, 92, 95, 98,112,100,103, 99\n\t\t\t];\n\t\t\t\n\t\t\tfor (var i = 0; i < 64; i++) {\n\t\t\t\tvar t = ffloor((YQT[i]*sf+50)/100);\n\t\t\t\tif (t < 1) {\n\t\t\t\t\tt = 1;\n\t\t\t\t} else if (t > 255) {\n\t\t\t\t\tt = 255;\n\t\t\t\t}\n\t\t\t\tYTable[ZigZag[i]] = t;\n\t\t\t}\n\t\t\tvar UVQT = [\n\t\t\t\t17, 18, 24, 47, 99, 99, 99, 99,\n\t\t\t\t18, 21, 26, 66, 99, 99, 99, 99,\n\t\t\t\t24, 26, 56, 99, 99, 99, 99, 99,\n\t\t\t\t47, 66, 99, 99, 99, 99, 99, 99,\n\t\t\t\t99, 99, 99, 99, 99, 99, 99, 99,\n\t\t\t\t99, 99, 99, 99, 99, 99, 99, 99,\n\t\t\t\t99, 99, 99, 99, 99, 99, 99, 99,\n\t\t\t\t99, 99, 99, 99, 99, 99, 99, 99\n\t\t\t];\n\t\t\tfor (var j = 0; j < 64; j++) {\n\t\t\t\tvar u = ffloor((UVQT[j]*sf+50)/100);\n\t\t\t\tif (u < 1) {\n\t\t\t\t\tu = 1;\n\t\t\t\t} else if (u > 255) {\n\t\t\t\t\tu = 255;\n\t\t\t\t}\n\t\t\t\tUVTable[ZigZag[j]] = u;\n\t\t\t}\n\t\t\tvar aasf = [\n\t\t\t\t1.0, 1.387039845, 1.306562965, 1.175875602,\n\t\t\t\t1.0, 0.785694958, 0.541196100, 0.275899379\n\t\t\t];\n\t\t\tvar k = 0;\n\t\t\tfor (var row = 0; row < 8; row++)\n\t\t\t{\n\t\t\t\tfor (var col = 0; col < 8; col++)\n\t\t\t\t{\n\t\t\t\t\tfdtbl_Y[k]  = (1.0 / (YTable [ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n\t\t\t\t\tfdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n\t\t\t\t\tk++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction computeHuffmanTbl(nrcodes, std_table){\n\t\t\tvar codevalue = 0;\n\t\t\tvar pos_in_table = 0;\n\t\t\tvar HT = new Array();\n\t\t\tfor (var k = 1; k <= 16; k++) {\n\t\t\t\tfor (var j = 1; j <= nrcodes[k]; j++) {\n\t\t\t\t\tHT[std_table[pos_in_table]] = [];\n\t\t\t\t\tHT[std_table[pos_in_table]][0] = codevalue;\n\t\t\t\t\tHT[std_table[pos_in_table]][1] = k;\n\t\t\t\t\tpos_in_table++;\n\t\t\t\t\tcodevalue++;\n\t\t\t\t}\n\t\t\t\tcodevalue*=2;\n\t\t\t}\n\t\t\treturn HT;\n\t\t}\n\t\t\n\t\tfunction initHuffmanTbl()\n\t\t{\n\t\t\tYDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values);\n\t\t\tUVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values);\n\t\t\tYAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values);\n\t\t\tUVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values);\n\t\t}\n\t\n\t\tfunction initCategoryNumber()\n\t\t{\n\t\t\tvar nrlower = 1;\n\t\t\tvar nrupper = 2;\n\t\t\tfor (var cat = 1; cat <= 15; cat++) {\n\t\t\t\t//Positive numbers\n\t\t\t\tfor (var nr = nrlower; nr<nrupper; nr++) {\n\t\t\t\t\tcategory[32767+nr] = cat;\n\t\t\t\t\tbitcode[32767+nr] = [];\n\t\t\t\t\tbitcode[32767+nr][1] = cat;\n\t\t\t\t\tbitcode[32767+nr][0] = nr;\n\t\t\t\t}\n\t\t\t\t//Negative numbers\n\t\t\t\tfor (var nrneg =-(nrupper-1); nrneg<=-nrlower; nrneg++) {\n\t\t\t\t\tcategory[32767+nrneg] = cat;\n\t\t\t\t\tbitcode[32767+nrneg] = [];\n\t\t\t\t\tbitcode[32767+nrneg][1] = cat;\n\t\t\t\t\tbitcode[32767+nrneg][0] = nrupper-1+nrneg;\n\t\t\t\t}\n\t\t\t\tnrlower <<= 1;\n\t\t\t\tnrupper <<= 1;\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction initRGBYUVTable() {\n\t\t\tfor(var i = 0; i < 256;i++) {\n\t\t\t\tRGB_YUV_TABLE[i]      \t\t=  19595 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+ 256)>>0] \t=  38470 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+ 512)>>0] \t=   7471 * i + 0x8000;\n\t\t\t\tRGB_YUV_TABLE[(i+ 768)>>0] \t= -11059 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+1024)>>0] \t= -21709 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+1280)>>0] \t=  32768 * i + 0x807FFF;\n\t\t\t\tRGB_YUV_TABLE[(i+1536)>>0] \t= -27439 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+1792)>>0] \t= - 5329 * i;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// IO functions\n\t\tfunction writeBits(bs)\n\t\t{\n\t\t\tvar value = bs[0];\n\t\t\tvar posval = bs[1]-1;\n\t\t\twhile ( posval >= 0 ) {\n\t\t\t\tif (value & (1 << posval) ) {\n\t\t\t\t\tbytenew |= (1 << bytepos);\n\t\t\t\t}\n\t\t\t\tposval--;\n\t\t\t\tbytepos--;\n\t\t\t\tif (bytepos < 0) {\n\t\t\t\t\tif (bytenew == 0xFF) {\n\t\t\t\t\t\twriteByte(0xFF);\n\t\t\t\t\t\twriteByte(0);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\twriteByte(bytenew);\n\t\t\t\t\t}\n\t\t\t\t\tbytepos=7;\n\t\t\t\t\tbytenew=0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\tfunction writeByte(value)\n\t\t{\n\t\t\t//byteout.push(clt[value]); // write char directly instead of converting later\n      byteout.push(value);\n\t\t}\n\t\n\t\tfunction writeWord(value)\n\t\t{\n\t\t\twriteByte((value>>8)&0xFF);\n\t\t\twriteByte((value   )&0xFF);\n\t\t}\n\t\t\n\t\t// DCT & quantization core\n\t\tfunction fDCTQuant(data, fdtbl)\n\t\t{\n\t\t\tvar d0, d1, d2, d3, d4, d5, d6, d7;\n\t\t\t/* Pass 1: process rows. */\n\t\t\tvar dataOff=0;\n\t\t\tvar i;\n\t\t\tvar I8 = 8;\n\t\t\tvar I64 = 64;\n\t\t\tfor (i=0; i<I8; ++i)\n\t\t\t{\n\t\t\t\td0 = data[dataOff];\n\t\t\t\td1 = data[dataOff+1];\n\t\t\t\td2 = data[dataOff+2];\n\t\t\t\td3 = data[dataOff+3];\n\t\t\t\td4 = data[dataOff+4];\n\t\t\t\td5 = data[dataOff+5];\n\t\t\t\td6 = data[dataOff+6];\n\t\t\t\td7 = data[dataOff+7];\n\t\t\t\t\n\t\t\t\tvar tmp0 = d0 + d7;\n\t\t\t\tvar tmp7 = d0 - d7;\n\t\t\t\tvar tmp1 = d1 + d6;\n\t\t\t\tvar tmp6 = d1 - d6;\n\t\t\t\tvar tmp2 = d2 + d5;\n\t\t\t\tvar tmp5 = d2 - d5;\n\t\t\t\tvar tmp3 = d3 + d4;\n\t\t\t\tvar tmp4 = d3 - d4;\n\t\n\t\t\t\t/* Even part */\n\t\t\t\tvar tmp10 = tmp0 + tmp3;\t/* phase 2 */\n\t\t\t\tvar tmp13 = tmp0 - tmp3;\n\t\t\t\tvar tmp11 = tmp1 + tmp2;\n\t\t\t\tvar tmp12 = tmp1 - tmp2;\n\t\n\t\t\t\tdata[dataOff] = tmp10 + tmp11; /* phase 3 */\n\t\t\t\tdata[dataOff+4] = tmp10 - tmp11;\n\t\n\t\t\t\tvar z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n\t\t\t\tdata[dataOff+2] = tmp13 + z1; /* phase 5 */\n\t\t\t\tdata[dataOff+6] = tmp13 - z1;\n\t\n\t\t\t\t/* Odd part */\n\t\t\t\ttmp10 = tmp4 + tmp5; /* phase 2 */\n\t\t\t\ttmp11 = tmp5 + tmp6;\n\t\t\t\ttmp12 = tmp6 + tmp7;\n\t\n\t\t\t\t/* The rotator is modified from fig 4-8 to avoid extra negations. */\n\t\t\t\tvar z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n\t\t\t\tvar z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */\n\t\t\t\tvar z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n\t\t\t\tvar z3 = tmp11 * 0.707106781; /* c4 */\n\t\n\t\t\t\tvar z11 = tmp7 + z3;\t/* phase 5 */\n\t\t\t\tvar z13 = tmp7 - z3;\n\t\n\t\t\t\tdata[dataOff+5] = z13 + z2;\t/* phase 6 */\n\t\t\t\tdata[dataOff+3] = z13 - z2;\n\t\t\t\tdata[dataOff+1] = z11 + z4;\n\t\t\t\tdata[dataOff+7] = z11 - z4;\n\t\n\t\t\t\tdataOff += 8; /* advance pointer to next row */\n\t\t\t}\n\t\n\t\t\t/* Pass 2: process columns. */\n\t\t\tdataOff = 0;\n\t\t\tfor (i=0; i<I8; ++i)\n\t\t\t{\n\t\t\t\td0 = data[dataOff];\n\t\t\t\td1 = data[dataOff + 8];\n\t\t\t\td2 = data[dataOff + 16];\n\t\t\t\td3 = data[dataOff + 24];\n\t\t\t\td4 = data[dataOff + 32];\n\t\t\t\td5 = data[dataOff + 40];\n\t\t\t\td6 = data[dataOff + 48];\n\t\t\t\td7 = data[dataOff + 56];\n\t\t\t\t\n\t\t\t\tvar tmp0p2 = d0 + d7;\n\t\t\t\tvar tmp7p2 = d0 - d7;\n\t\t\t\tvar tmp1p2 = d1 + d6;\n\t\t\t\tvar tmp6p2 = d1 - d6;\n\t\t\t\tvar tmp2p2 = d2 + d5;\n\t\t\t\tvar tmp5p2 = d2 - d5;\n\t\t\t\tvar tmp3p2 = d3 + d4;\n\t\t\t\tvar tmp4p2 = d3 - d4;\n\t\n\t\t\t\t/* Even part */\n\t\t\t\tvar tmp10p2 = tmp0p2 + tmp3p2;\t/* phase 2 */\n\t\t\t\tvar tmp13p2 = tmp0p2 - tmp3p2;\n\t\t\t\tvar tmp11p2 = tmp1p2 + tmp2p2;\n\t\t\t\tvar tmp12p2 = tmp1p2 - tmp2p2;\n\t\n\t\t\t\tdata[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n\t\t\t\tdata[dataOff+32] = tmp10p2 - tmp11p2;\n\t\n\t\t\t\tvar z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n\t\t\t\tdata[dataOff+16] = tmp13p2 + z1p2; /* phase 5 */\n\t\t\t\tdata[dataOff+48] = tmp13p2 - z1p2;\n\t\n\t\t\t\t/* Odd part */\n\t\t\t\ttmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n\t\t\t\ttmp11p2 = tmp5p2 + tmp6p2;\n\t\t\t\ttmp12p2 = tmp6p2 + tmp7p2;\n\t\n\t\t\t\t/* The rotator is modified from fig 4-8 to avoid extra negations. */\n\t\t\t\tvar z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n\t\t\t\tvar z2p2 = 0.541196100 * tmp10p2 + z5p2; /* c2-c6 */\n\t\t\t\tvar z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n\t\t\t\tvar z3p2 = tmp11p2 * 0.707106781; /* c4 */\n\t\n\t\t\t\tvar z11p2 = tmp7p2 + z3p2;\t/* phase 5 */\n\t\t\t\tvar z13p2 = tmp7p2 - z3p2;\n\t\n\t\t\t\tdata[dataOff+40] = z13p2 + z2p2; /* phase 6 */\n\t\t\t\tdata[dataOff+24] = z13p2 - z2p2;\n\t\t\t\tdata[dataOff+ 8] = z11p2 + z4p2;\n\t\t\t\tdata[dataOff+56] = z11p2 - z4p2;\n\t\n\t\t\t\tdataOff++; /* advance pointer to next column */\n\t\t\t}\n\t\n\t\t\t// Quantize/descale the coefficients\n\t\t\tvar fDCTQuant;\n\t\t\tfor (i=0; i<I64; ++i)\n\t\t\t{\n\t\t\t\t// Apply the quantization and scaling factor & Round to nearest integer\n\t\t\t\tfDCTQuant = data[i]*fdtbl[i];\n\t\t\t\toutputfDCTQuant[i] = (fDCTQuant > 0.0) ? ((fDCTQuant + 0.5)|0) : ((fDCTQuant - 0.5)|0);\n\t\t\t\t//outputfDCTQuant[i] = fround(fDCTQuant);\n\n\t\t\t}\n\t\t\treturn outputfDCTQuant;\n\t\t}\n\t\t\n\t\tfunction writeAPP0()\n\t\t{\n\t\t\twriteWord(0xFFE0); // marker\n\t\t\twriteWord(16); // length\n\t\t\twriteByte(0x4A); // J\n\t\t\twriteByte(0x46); // F\n\t\t\twriteByte(0x49); // I\n\t\t\twriteByte(0x46); // F\n\t\t\twriteByte(0); // = \"JFIF\",'\\0'\n\t\t\twriteByte(1); // versionhi\n\t\t\twriteByte(1); // versionlo\n\t\t\twriteByte(0); // xyunits\n\t\t\twriteWord(1); // xdensity\n\t\t\twriteWord(1); // ydensity\n\t\t\twriteByte(0); // thumbnwidth\n\t\t\twriteByte(0); // thumbnheight\n\t\t}\n\n\t\tfunction writeAPP1(exifBuffer) {\n\t\t\tif (!exifBuffer) return;\n\n\t\t\twriteWord(0xFFE1); // APP1 marker\n\n\t\t\tif (exifBuffer[0] === 0x45 &&\n\t\t\t\t\texifBuffer[1] === 0x78 &&\n\t\t\t\t\texifBuffer[2] === 0x69 &&\n\t\t\t\t\texifBuffer[3] === 0x66) {\n\t\t\t\t// Buffer already starts with EXIF, just use it directly\n\t\t\t\twriteWord(exifBuffer.length + 2); // length is buffer + length itself!\n\t\t\t} else {\n\t\t\t\t// Buffer doesn't start with EXIF, write it for them\n\t\t\t\twriteWord(exifBuffer.length + 5 + 2); // length is buffer + EXIF\\0 + length itself!\n\t\t\t\twriteByte(0x45); // E\n\t\t\t\twriteByte(0x78); // X\n\t\t\t\twriteByte(0x69); // I\n\t\t\t\twriteByte(0x66); // F\n\t\t\t\twriteByte(0); // = \"EXIF\",'\\0'\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < exifBuffer.length; i++) {\n\t\t\t\twriteByte(exifBuffer[i]);\n\t\t\t}\n\t\t}\n\n\t\tfunction writeSOF0(width, height)\n\t\t{\n\t\t\twriteWord(0xFFC0); // marker\n\t\t\twriteWord(17);   // length, truecolor YUV JPG\n\t\t\twriteByte(8);    // precision\n\t\t\twriteWord(height);\n\t\t\twriteWord(width);\n\t\t\twriteByte(3);    // nrofcomponents\n\t\t\twriteByte(1);    // IdY\n\t\t\twriteByte(0x11); // HVY\n\t\t\twriteByte(0);    // QTY\n\t\t\twriteByte(2);    // IdU\n\t\t\twriteByte(0x11); // HVU\n\t\t\twriteByte(1);    // QTU\n\t\t\twriteByte(3);    // IdV\n\t\t\twriteByte(0x11); // HVV\n\t\t\twriteByte(1);    // QTV\n\t\t}\n\t\n\t\tfunction writeDQT()\n\t\t{\n\t\t\twriteWord(0xFFDB); // marker\n\t\t\twriteWord(132);\t   // length\n\t\t\twriteByte(0);\n\t\t\tfor (var i=0; i<64; i++) {\n\t\t\t\twriteByte(YTable[i]);\n\t\t\t}\n\t\t\twriteByte(1);\n\t\t\tfor (var j=0; j<64; j++) {\n\t\t\t\twriteByte(UVTable[j]);\n\t\t\t}\n\t\t}\n\t\n\t\tfunction writeDHT()\n\t\t{\n\t\t\twriteWord(0xFFC4); // marker\n\t\t\twriteWord(0x01A2); // length\n\t\n\t\t\twriteByte(0); // HTYDCinfo\n\t\t\tfor (var i=0; i<16; i++) {\n\t\t\t\twriteByte(std_dc_luminance_nrcodes[i+1]);\n\t\t\t}\n\t\t\tfor (var j=0; j<=11; j++) {\n\t\t\t\twriteByte(std_dc_luminance_values[j]);\n\t\t\t}\n\t\n\t\t\twriteByte(0x10); // HTYACinfo\n\t\t\tfor (var k=0; k<16; k++) {\n\t\t\t\twriteByte(std_ac_luminance_nrcodes[k+1]);\n\t\t\t}\n\t\t\tfor (var l=0; l<=161; l++) {\n\t\t\t\twriteByte(std_ac_luminance_values[l]);\n\t\t\t}\n\t\n\t\t\twriteByte(1); // HTUDCinfo\n\t\t\tfor (var m=0; m<16; m++) {\n\t\t\t\twriteByte(std_dc_chrominance_nrcodes[m+1]);\n\t\t\t}\n\t\t\tfor (var n=0; n<=11; n++) {\n\t\t\t\twriteByte(std_dc_chrominance_values[n]);\n\t\t\t}\n\t\n\t\t\twriteByte(0x11); // HTUACinfo\n\t\t\tfor (var o=0; o<16; o++) {\n\t\t\t\twriteByte(std_ac_chrominance_nrcodes[o+1]);\n\t\t\t}\n\t\t\tfor (var p=0; p<=161; p++) {\n\t\t\t\twriteByte(std_ac_chrominance_values[p]);\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction writeCOM(comments)\n\t\t{\n\t\t\tif (typeof comments === \"undefined\" || comments.constructor !== Array) return;\n\t\t\tcomments.forEach(e => {\n\t\t\t\tif (typeof e !== \"string\") return;\n\t\t\t\twriteWord(0xFFFE); // marker\n\t\t\t\tvar l = e.length;\n\t\t\t\twriteWord(l + 2); // length itself as well\n\t\t\t\tvar i;\n\t\t\t\tfor (i = 0; i < l; i++)\n\t\t\t\t\twriteByte(e.charCodeAt(i));\n\t\t\t});\n\t\t}\n\t\n\t\tfunction writeSOS()\n\t\t{\n\t\t\twriteWord(0xFFDA); // marker\n\t\t\twriteWord(12); // length\n\t\t\twriteByte(3); // nrofcomponents\n\t\t\twriteByte(1); // IdY\n\t\t\twriteByte(0); // HTY\n\t\t\twriteByte(2); // IdU\n\t\t\twriteByte(0x11); // HTU\n\t\t\twriteByte(3); // IdV\n\t\t\twriteByte(0x11); // HTV\n\t\t\twriteByte(0); // Ss\n\t\t\twriteByte(0x3f); // Se\n\t\t\twriteByte(0); // Bf\n\t\t}\n\t\t\n\t\tfunction processDU(CDU, fdtbl, DC, HTDC, HTAC){\n\t\t\tvar EOB = HTAC[0x00];\n\t\t\tvar M16zeroes = HTAC[0xF0];\n\t\t\tvar pos;\n\t\t\tvar I16 = 16;\n\t\t\tvar I63 = 63;\n\t\t\tvar I64 = 64;\n\t\t\tvar DU_DCT = fDCTQuant(CDU, fdtbl);\n\t\t\t//ZigZag reorder\n\t\t\tfor (var j=0;j<I64;++j) {\n\t\t\t\tDU[ZigZag[j]]=DU_DCT[j];\n\t\t\t}\n\t\t\tvar Diff = DU[0] - DC; DC = DU[0];\n\t\t\t//Encode DC\n\t\t\tif (Diff==0) {\n\t\t\t\twriteBits(HTDC[0]); // Diff might be 0\n\t\t\t} else {\n\t\t\t\tpos = 32767+Diff;\n\t\t\t\twriteBits(HTDC[category[pos]]);\n\t\t\t\twriteBits(bitcode[pos]);\n\t\t\t}\n\t\t\t//Encode ACs\n\t\t\tvar end0pos = 63; // was const... which is crazy\n\t\t\tfor (; (end0pos>0)&&(DU[end0pos]==0); end0pos--) {};\n\t\t\t//end0pos = first element in reverse order !=0\n\t\t\tif ( end0pos == 0) {\n\t\t\t\twriteBits(EOB);\n\t\t\t\treturn DC;\n\t\t\t}\n\t\t\tvar i = 1;\n\t\t\tvar lng;\n\t\t\twhile ( i <= end0pos ) {\n\t\t\t\tvar startpos = i;\n\t\t\t\tfor (; (DU[i]==0) && (i<=end0pos); ++i) {}\n\t\t\t\tvar nrzeroes = i-startpos;\n\t\t\t\tif ( nrzeroes >= I16 ) {\n\t\t\t\t\tlng = nrzeroes>>4;\n\t\t\t\t\tfor (var nrmarker=1; nrmarker <= lng; ++nrmarker)\n\t\t\t\t\t\twriteBits(M16zeroes);\n\t\t\t\t\tnrzeroes = nrzeroes&0xF;\n\t\t\t\t}\n\t\t\t\tpos = 32767+DU[i];\n\t\t\t\twriteBits(HTAC[(nrzeroes<<4)+category[pos]]);\n\t\t\t\twriteBits(bitcode[pos]);\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif ( end0pos != I63 ) {\n\t\t\t\twriteBits(EOB);\n\t\t\t}\n\t\t\treturn DC;\n\t\t}\n\n\t\tfunction initCharLookupTable(){\n\t\t\tvar sfcc = String.fromCharCode;\n\t\t\tfor(var i=0; i < 256; i++){ ///// ACHTUNG // 255\n\t\t\t\tclt[i] = sfcc(i);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.encode = function(image,quality) // image data object\n\t\t{\n\t\t\tvar time_start = new Date().getTime();\n\t\t\t\n\t\t\tif(quality) setQuality(quality);\n\t\t\t\n\t\t\t// Initialize bit writer\n\t\t\tbyteout = new Array();\n\t\t\tbytenew=0;\n\t\t\tbytepos=7;\n\t\n\t\t\t// Add JPEG headers\n\t\t\twriteWord(0xFFD8); // SOI\n\t\t\twriteAPP0();\n\t\t\twriteCOM(image.comments);\n\t\t\twriteAPP1(image.exifBuffer);\n\t\t\twriteDQT();\n\t\t\twriteSOF0(image.width,image.height);\n\t\t\twriteDHT();\n\t\t\twriteSOS();\n\n\t\n\t\t\t// Encode 8x8 macroblocks\n\t\t\tvar DCY=0;\n\t\t\tvar DCU=0;\n\t\t\tvar DCV=0;\n\t\t\t\n\t\t\tbytenew=0;\n\t\t\tbytepos=7;\n\t\t\t\n\t\t\t\n\t\t\tthis.encode.displayName = \"_encode_\";\n\n\t\t\tvar imageData = image.data;\n\t\t\tvar width = image.width;\n\t\t\tvar height = image.height;\n\n\t\t\tvar quadWidth = width*4;\n\t\t\tvar tripleWidth = width*3;\n\t\t\t\n\t\t\tvar x, y = 0;\n\t\t\tvar r, g, b;\n\t\t\tvar start,p, col,row,pos;\n\t\t\twhile(y < height){\n\t\t\t\tx = 0;\n\t\t\t\twhile(x < quadWidth){\n\t\t\t\tstart = quadWidth * y + x;\n\t\t\t\tp = start;\n\t\t\t\tcol = -1;\n\t\t\t\trow = 0;\n\t\t\t\t\n\t\t\t\tfor(pos=0; pos < 64; pos++){\n\t\t\t\t\trow = pos >> 3;// /8\n\t\t\t\t\tcol = ( pos & 7 ) * 4; // %8\n\t\t\t\t\tp = start + ( row * quadWidth ) + col;\t\t\n\t\t\t\t\t\n\t\t\t\t\tif(y+row >= height){ // padding bottom\n\t\t\t\t\t\tp-= (quadWidth*(y+1+row-height));\n\t\t\t\t\t}\n\n\t\t\t\t\tif(x+col >= quadWidth){ // padding right\t\n\t\t\t\t\t\tp-= ((x+col) - quadWidth +4)\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tr = imageData[ p++ ];\n\t\t\t\t\tg = imageData[ p++ ];\n\t\t\t\t\tb = imageData[ p++ ];\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t/* // calculate YUV values dynamically\n\t\t\t\t\tYDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n\t\t\t\t\tUDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n\t\t\t\t\tVDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n\t\t\t\t\t*/\n\t\t\t\t\t\n\t\t\t\t\t// use lookup table (slightly faster)\n\t\t\t\t\tYDU[pos] = ((RGB_YUV_TABLE[r]             + RGB_YUV_TABLE[(g +  256)>>0] + RGB_YUV_TABLE[(b +  512)>>0]) >> 16)-128;\n\t\t\t\t\tUDU[pos] = ((RGB_YUV_TABLE[(r +  768)>>0] + RGB_YUV_TABLE[(g + 1024)>>0] + RGB_YUV_TABLE[(b + 1280)>>0]) >> 16)-128;\n\t\t\t\t\tVDU[pos] = ((RGB_YUV_TABLE[(r + 1280)>>0] + RGB_YUV_TABLE[(g + 1536)>>0] + RGB_YUV_TABLE[(b + 1792)>>0]) >> 16)-128;\n\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tDCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n\t\t\t\tDCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n\t\t\t\tDCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n\t\t\t\tx+=32;\n\t\t\t\t}\n\t\t\t\ty+=8;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t////////////////////////////////////////////////////////////////\n\t\n\t\t\t// Do the bit alignment of the EOI marker\n\t\t\tif ( bytepos >= 0 ) {\n\t\t\t\tvar fillbits = [];\n\t\t\t\tfillbits[1] = bytepos+1;\n\t\t\t\tfillbits[0] = (1<<(bytepos+1))-1;\n\t\t\t\twriteBits(fillbits);\n\t\t\t}\n\t\n\t\t\twriteWord(0xFFD9); //EOI\n\n\t\t\tif (typeof module === 'undefined') return new Uint8Array(byteout);\n      return Buffer.from(byteout);\n\n\t\t\tvar jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join(''));\n\t\t\t\n\t\t\tbyteout = [];\n\t\t\t\n\t\t\t// benchmarking\n\t\t\tvar duration = new Date().getTime() - time_start;\n    \t\t//console.log('Encoding time: '+ duration + 'ms');\n    \t\t//\n\t\t\t\n\t\t\treturn jpegDataUri\t\t\t\n\t}\n\t\n\tfunction setQuality(quality){\n\t\tif (quality <= 0) {\n\t\t\tquality = 1;\n\t\t}\n\t\tif (quality > 100) {\n\t\t\tquality = 100;\n\t\t}\n\t\t\n\t\tif(currentQuality == quality) return // don't recalc if unchanged\n\t\t\n\t\tvar sf = 0;\n\t\tif (quality < 50) {\n\t\t\tsf = Math.floor(5000 / quality);\n\t\t} else {\n\t\t\tsf = Math.floor(200 - quality*2);\n\t\t}\n\t\t\n\t\tinitQuantTables(sf);\n\t\tcurrentQuality = quality;\n\t\t//console.log('Quality set to: '+quality +'%');\n\t}\n\t\n\tfunction init(){\n\t\tvar time_start = new Date().getTime();\n\t\tif(!quality) quality = 50;\n\t\t// Create tables\n\t\tinitCharLookupTable()\n\t\tinitHuffmanTbl();\n\t\tinitCategoryNumber();\n\t\tinitRGBYUVTable();\n\t\t\n\t\tsetQuality(quality);\n\t\tvar duration = new Date().getTime() - time_start;\n    \t//console.log('Initialization '+ duration + 'ms');\n\t}\n\t\n\tinit();\n\t\n};\n\nif (typeof module !== 'undefined') {\n\tmodule.exports = encode;\n} else if (typeof window !== 'undefined') {\n\twindow['jpeg-js'] = window['jpeg-js'] || {};\n\twindow['jpeg-js'].encode = encode;\n}\n\nfunction encode(imgData, qu) {\n  if (typeof qu === 'undefined') qu = 50;\n  var encoder = new JPEGEncoder(qu);\n\tvar data = encoder.encode(imgData, qu);\n  return {\n    data: data,\n    width: imgData.width,\n    height: imgData.height,\n  };\n}\n\n// helper function to get the imageData of an existing image on the current page.\nfunction getImageDataFromImage(idOrElement){\n\tvar theImg = (typeof(idOrElement)=='string')? document.getElementById(idOrElement):idOrElement;\n\tvar cvs = document.createElement('canvas');\n\tcvs.width = theImg.width;\n\tcvs.height = theImg.height;\n\tvar ctx = cvs.getContext(\"2d\");\n\tctx.drawImage(theImg,0,0);\n\t\n\treturn (ctx.getImageData(0, 0, cvs.width, cvs.height));\n}\n","/* -*- tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\n/*\n   Copyright 2011 notmasteryet\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\n// - The JPEG specification can be found in the ITU CCITT Recommendation T.81\n//   (www.w3.org/Graphics/JPEG/itu-t81.pdf)\n// - The JFIF specification can be found in the JPEG File Interchange Format\n//   (www.w3.org/Graphics/JPEG/jfif3.pdf)\n// - The Adobe Application-Specific JPEG markers in the Supporting the DCT Filters\n//   in PostScript Level 2, Technical Note #5116\n//   (partners.adobe.com/public/developer/en/ps/sdk/5116.DCT_Filter.pdf)\n\nvar JpegImage = (function jpegImage() {\n  \"use strict\";\n  var dctZigZag = new Int32Array([\n     0,\n     1,  8,\n    16,  9,  2,\n     3, 10, 17, 24,\n    32, 25, 18, 11, 4,\n     5, 12, 19, 26, 33, 40,\n    48, 41, 34, 27, 20, 13,  6,\n     7, 14, 21, 28, 35, 42, 49, 56,\n    57, 50, 43, 36, 29, 22, 15,\n    23, 30, 37, 44, 51, 58,\n    59, 52, 45, 38, 31,\n    39, 46, 53, 60,\n    61, 54, 47,\n    55, 62,\n    63\n  ]);\n\n  var dctCos1  =  4017   // cos(pi/16)\n  var dctSin1  =   799   // sin(pi/16)\n  var dctCos3  =  3406   // cos(3*pi/16)\n  var dctSin3  =  2276   // sin(3*pi/16)\n  var dctCos6  =  1567   // cos(6*pi/16)\n  var dctSin6  =  3784   // sin(6*pi/16)\n  var dctSqrt2 =  5793   // sqrt(2)\n  var dctSqrt1d2 = 2896  // sqrt(2) / 2\n\n  function constructor() {\n  }\n\n  function buildHuffmanTable(codeLengths, values) {\n    var k = 0, code = [], i, j, length = 16;\n    while (length > 0 && !codeLengths[length - 1])\n      length--;\n    code.push({children: [], index: 0});\n    var p = code[0], q;\n    for (i = 0; i < length; i++) {\n      for (j = 0; j < codeLengths[i]; j++) {\n        p = code.pop();\n        p.children[p.index] = values[k];\n        while (p.index > 0) {\n          if (code.length === 0)\n            throw new Error('Could not recreate Huffman Table');\n          p = code.pop();\n        }\n        p.index++;\n        code.push(p);\n        while (code.length <= i) {\n          code.push(q = {children: [], index: 0});\n          p.children[p.index] = q.children;\n          p = q;\n        }\n        k++;\n      }\n      if (i + 1 < length) {\n        // p here points to last code\n        code.push(q = {children: [], index: 0});\n        p.children[p.index] = q.children;\n        p = q;\n      }\n    }\n    return code[0].children;\n  }\n\n  function decodeScan(data, offset,\n                      frame, components, resetInterval,\n                      spectralStart, spectralEnd,\n                      successivePrev, successive, opts) {\n    var precision = frame.precision;\n    var samplesPerLine = frame.samplesPerLine;\n    var scanLines = frame.scanLines;\n    var mcusPerLine = frame.mcusPerLine;\n    var progressive = frame.progressive;\n    var maxH = frame.maxH, maxV = frame.maxV;\n\n    var startOffset = offset, bitsData = 0, bitsCount = 0;\n    function readBit() {\n      if (bitsCount > 0) {\n        bitsCount--;\n        return (bitsData >> bitsCount) & 1;\n      }\n      bitsData = data[offset++];\n      if (bitsData == 0xFF) {\n        var nextByte = data[offset++];\n        if (nextByte) {\n          throw new Error(\"unexpected marker: \" + ((bitsData << 8) | nextByte).toString(16));\n        }\n        // unstuff 0\n      }\n      bitsCount = 7;\n      return bitsData >>> 7;\n    }\n    function decodeHuffman(tree) {\n      var node = tree, bit;\n      while ((bit = readBit()) !== null) {\n        node = node[bit];\n        if (typeof node === 'number')\n          return node;\n        if (typeof node !== 'object')\n          throw new Error(\"invalid huffman sequence\");\n      }\n      return null;\n    }\n    function receive(length) {\n      var n = 0;\n      while (length > 0) {\n        var bit = readBit();\n        if (bit === null) return;\n        n = (n << 1) | bit;\n        length--;\n      }\n      return n;\n    }\n    function receiveAndExtend(length) {\n      var n = receive(length);\n      if (n >= 1 << (length - 1))\n        return n;\n      return n + (-1 << length) + 1;\n    }\n    function decodeBaseline(component, zz) {\n      var t = decodeHuffman(component.huffmanTableDC);\n      var diff = t === 0 ? 0 : receiveAndExtend(t);\n      zz[0]= (component.pred += diff);\n      var k = 1;\n      while (k < 64) {\n        var rs = decodeHuffman(component.huffmanTableAC);\n        var s = rs & 15, r = rs >> 4;\n        if (s === 0) {\n          if (r < 15)\n            break;\n          k += 16;\n          continue;\n        }\n        k += r;\n        var z = dctZigZag[k];\n        zz[z] = receiveAndExtend(s);\n        k++;\n      }\n    }\n    function decodeDCFirst(component, zz) {\n      var t = decodeHuffman(component.huffmanTableDC);\n      var diff = t === 0 ? 0 : (receiveAndExtend(t) << successive);\n      zz[0] = (component.pred += diff);\n    }\n    function decodeDCSuccessive(component, zz) {\n      zz[0] |= readBit() << successive;\n    }\n    var eobrun = 0;\n    function decodeACFirst(component, zz) {\n      if (eobrun > 0) {\n        eobrun--;\n        return;\n      }\n      var k = spectralStart, e = spectralEnd;\n      while (k <= e) {\n        var rs = decodeHuffman(component.huffmanTableAC);\n        var s = rs & 15, r = rs >> 4;\n        if (s === 0) {\n          if (r < 15) {\n            eobrun = receive(r) + (1 << r) - 1;\n            break;\n          }\n          k += 16;\n          continue;\n        }\n        k += r;\n        var z = dctZigZag[k];\n        zz[z] = receiveAndExtend(s) * (1 << successive);\n        k++;\n      }\n    }\n    var successiveACState = 0, successiveACNextValue;\n    function decodeACSuccessive(component, zz) {\n      var k = spectralStart, e = spectralEnd, r = 0;\n      while (k <= e) {\n        var z = dctZigZag[k];\n        var direction = zz[z] < 0 ? -1 : 1;\n        switch (successiveACState) {\n        case 0: // initial state\n          var rs = decodeHuffman(component.huffmanTableAC);\n          var s = rs & 15, r = rs >> 4;\n          if (s === 0) {\n            if (r < 15) {\n              eobrun = receive(r) + (1 << r);\n              successiveACState = 4;\n            } else {\n              r = 16;\n              successiveACState = 1;\n            }\n          } else {\n            if (s !== 1)\n              throw new Error(\"invalid ACn encoding\");\n            successiveACNextValue = receiveAndExtend(s);\n            successiveACState = r ? 2 : 3;\n          }\n          continue;\n        case 1: // skipping r zero items\n        case 2:\n          if (zz[z])\n            zz[z] += (readBit() << successive) * direction;\n          else {\n            r--;\n            if (r === 0)\n              successiveACState = successiveACState == 2 ? 3 : 0;\n          }\n          break;\n        case 3: // set value for a zero item\n          if (zz[z])\n            zz[z] += (readBit() << successive) * direction;\n          else {\n            zz[z] = successiveACNextValue << successive;\n            successiveACState = 0;\n          }\n          break;\n        case 4: // eob\n          if (zz[z])\n            zz[z] += (readBit() << successive) * direction;\n          break;\n        }\n        k++;\n      }\n      if (successiveACState === 4) {\n        eobrun--;\n        if (eobrun === 0)\n          successiveACState = 0;\n      }\n    }\n    function decodeMcu(component, decode, mcu, row, col) {\n      var mcuRow = (mcu / mcusPerLine) | 0;\n      var mcuCol = mcu % mcusPerLine;\n      var blockRow = mcuRow * component.v + row;\n      var blockCol = mcuCol * component.h + col;\n      // If the block is missing and we're in tolerant mode, just skip it.\n      if (component.blocks[blockRow] === undefined && opts.tolerantDecoding)\n        return;\n      decode(component, component.blocks[blockRow][blockCol]);\n    }\n    function decodeBlock(component, decode, mcu) {\n      var blockRow = (mcu / component.blocksPerLine) | 0;\n      var blockCol = mcu % component.blocksPerLine;\n      // If the block is missing and we're in tolerant mode, just skip it.\n      if (component.blocks[blockRow] === undefined && opts.tolerantDecoding)\n        return;\n      decode(component, component.blocks[blockRow][blockCol]);\n    }\n\n    var componentsLength = components.length;\n    var component, i, j, k, n;\n    var decodeFn;\n    if (progressive) {\n      if (spectralStart === 0)\n        decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;\n      else\n        decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;\n    } else {\n      decodeFn = decodeBaseline;\n    }\n\n    var mcu = 0, marker;\n    var mcuExpected;\n    if (componentsLength == 1) {\n      mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;\n    } else {\n      mcuExpected = mcusPerLine * frame.mcusPerColumn;\n    }\n    if (!resetInterval) resetInterval = mcuExpected;\n\n    var h, v;\n    while (mcu < mcuExpected) {\n      // reset interval stuff\n      for (i = 0; i < componentsLength; i++)\n        components[i].pred = 0;\n      eobrun = 0;\n\n      if (componentsLength == 1) {\n        component = components[0];\n        for (n = 0; n < resetInterval; n++) {\n          decodeBlock(component, decodeFn, mcu);\n          mcu++;\n        }\n      } else {\n        for (n = 0; n < resetInterval; n++) {\n          for (i = 0; i < componentsLength; i++) {\n            component = components[i];\n            h = component.h;\n            v = component.v;\n            for (j = 0; j < v; j++) {\n              for (k = 0; k < h; k++) {\n                decodeMcu(component, decodeFn, mcu, j, k);\n              }\n            }\n          }\n          mcu++;\n\n          // If we've reached our expected MCU's, stop decoding\n          if (mcu === mcuExpected) break;\n        }\n      }\n\n      if (mcu === mcuExpected) {\n        // Skip trailing bytes at the end of the scan - until we reach the next marker\n        do {\n          if (data[offset] === 0xFF) {\n            if (data[offset + 1] !== 0x00) {\n              break;\n            }\n          }\n          offset += 1;\n        } while (offset < data.length - 2);\n      }\n\n      // find marker\n      bitsCount = 0;\n      marker = (data[offset] << 8) | data[offset + 1];\n      if (marker < 0xFF00) {\n        throw new Error(\"marker was not found\");\n      }\n\n      if (marker >= 0xFFD0 && marker <= 0xFFD7) { // RSTx\n        offset += 2;\n      }\n      else\n        break;\n    }\n\n    return offset - startOffset;\n  }\n\n  function buildComponentData(frame, component) {\n    var lines = [];\n    var blocksPerLine = component.blocksPerLine;\n    var blocksPerColumn = component.blocksPerColumn;\n    var samplesPerLine = blocksPerLine << 3;\n    // Only 1 used per invocation of this function and garbage collected after invocation, so no need to account for its memory footprint.\n    var R = new Int32Array(64), r = new Uint8Array(64);\n\n    // A port of poppler's IDCT method which in turn is taken from:\n    //   Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,\n    //   \"Practical Fast 1-D DCT Algorithms with 11 Multiplications\",\n    //   IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989,\n    //   988-991.\n    function quantizeAndInverse(zz, dataOut, dataIn) {\n      var qt = component.quantizationTable;\n      var v0, v1, v2, v3, v4, v5, v6, v7, t;\n      var p = dataIn;\n      var i;\n\n      // dequant\n      for (i = 0; i < 64; i++)\n        p[i] = zz[i] * qt[i];\n\n      // inverse DCT on rows\n      for (i = 0; i < 8; ++i) {\n        var row = 8 * i;\n\n        // check for all-zero AC coefficients\n        if (p[1 + row] == 0 && p[2 + row] == 0 && p[3 + row] == 0 &&\n            p[4 + row] == 0 && p[5 + row] == 0 && p[6 + row] == 0 &&\n            p[7 + row] == 0) {\n          t = (dctSqrt2 * p[0 + row] + 512) >> 10;\n          p[0 + row] = t;\n          p[1 + row] = t;\n          p[2 + row] = t;\n          p[3 + row] = t;\n          p[4 + row] = t;\n          p[5 + row] = t;\n          p[6 + row] = t;\n          p[7 + row] = t;\n          continue;\n        }\n\n        // stage 4\n        v0 = (dctSqrt2 * p[0 + row] + 128) >> 8;\n        v1 = (dctSqrt2 * p[4 + row] + 128) >> 8;\n        v2 = p[2 + row];\n        v3 = p[6 + row];\n        v4 = (dctSqrt1d2 * (p[1 + row] - p[7 + row]) + 128) >> 8;\n        v7 = (dctSqrt1d2 * (p[1 + row] + p[7 + row]) + 128) >> 8;\n        v5 = p[3 + row] << 4;\n        v6 = p[5 + row] << 4;\n\n        // stage 3\n        t = (v0 - v1+ 1) >> 1;\n        v0 = (v0 + v1 + 1) >> 1;\n        v1 = t;\n        t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8;\n        v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8;\n        v3 = t;\n        t = (v4 - v6 + 1) >> 1;\n        v4 = (v4 + v6 + 1) >> 1;\n        v6 = t;\n        t = (v7 + v5 + 1) >> 1;\n        v5 = (v7 - v5 + 1) >> 1;\n        v7 = t;\n\n        // stage 2\n        t = (v0 - v3 + 1) >> 1;\n        v0 = (v0 + v3 + 1) >> 1;\n        v3 = t;\n        t = (v1 - v2 + 1) >> 1;\n        v1 = (v1 + v2 + 1) >> 1;\n        v2 = t;\n        t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n        v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n        v7 = t;\n        t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n        v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n        v6 = t;\n\n        // stage 1\n        p[0 + row] = v0 + v7;\n        p[7 + row] = v0 - v7;\n        p[1 + row] = v1 + v6;\n        p[6 + row] = v1 - v6;\n        p[2 + row] = v2 + v5;\n        p[5 + row] = v2 - v5;\n        p[3 + row] = v3 + v4;\n        p[4 + row] = v3 - v4;\n      }\n\n      // inverse DCT on columns\n      for (i = 0; i < 8; ++i) {\n        var col = i;\n\n        // check for all-zero AC coefficients\n        if (p[1*8 + col] == 0 && p[2*8 + col] == 0 && p[3*8 + col] == 0 &&\n            p[4*8 + col] == 0 && p[5*8 + col] == 0 && p[6*8 + col] == 0 &&\n            p[7*8 + col] == 0) {\n          t = (dctSqrt2 * dataIn[i+0] + 8192) >> 14;\n          p[0*8 + col] = t;\n          p[1*8 + col] = t;\n          p[2*8 + col] = t;\n          p[3*8 + col] = t;\n          p[4*8 + col] = t;\n          p[5*8 + col] = t;\n          p[6*8 + col] = t;\n          p[7*8 + col] = t;\n          continue;\n        }\n\n        // stage 4\n        v0 = (dctSqrt2 * p[0*8 + col] + 2048) >> 12;\n        v1 = (dctSqrt2 * p[4*8 + col] + 2048) >> 12;\n        v2 = p[2*8 + col];\n        v3 = p[6*8 + col];\n        v4 = (dctSqrt1d2 * (p[1*8 + col] - p[7*8 + col]) + 2048) >> 12;\n        v7 = (dctSqrt1d2 * (p[1*8 + col] + p[7*8 + col]) + 2048) >> 12;\n        v5 = p[3*8 + col];\n        v6 = p[5*8 + col];\n\n        // stage 3\n        t = (v0 - v1 + 1) >> 1;\n        v0 = (v0 + v1 + 1) >> 1;\n        v1 = t;\n        t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12;\n        v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12;\n        v3 = t;\n        t = (v4 - v6 + 1) >> 1;\n        v4 = (v4 + v6 + 1) >> 1;\n        v6 = t;\n        t = (v7 + v5 + 1) >> 1;\n        v5 = (v7 - v5 + 1) >> 1;\n        v7 = t;\n\n        // stage 2\n        t = (v0 - v3 + 1) >> 1;\n        v0 = (v0 + v3 + 1) >> 1;\n        v3 = t;\n        t = (v1 - v2 + 1) >> 1;\n        v1 = (v1 + v2 + 1) >> 1;\n        v2 = t;\n        t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n        v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n        v7 = t;\n        t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n        v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n        v6 = t;\n\n        // stage 1\n        p[0*8 + col] = v0 + v7;\n        p[7*8 + col] = v0 - v7;\n        p[1*8 + col] = v1 + v6;\n        p[6*8 + col] = v1 - v6;\n        p[2*8 + col] = v2 + v5;\n        p[5*8 + col] = v2 - v5;\n        p[3*8 + col] = v3 + v4;\n        p[4*8 + col] = v3 - v4;\n      }\n\n      // convert to 8-bit integers\n      for (i = 0; i < 64; ++i) {\n        var sample = 128 + ((p[i] + 8) >> 4);\n        dataOut[i] = sample < 0 ? 0 : sample > 0xFF ? 0xFF : sample;\n      }\n    }\n\n    requestMemoryAllocation(samplesPerLine * blocksPerColumn * 8);\n\n    var i, j;\n    for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n      var scanLine = blockRow << 3;\n      for (i = 0; i < 8; i++)\n        lines.push(new Uint8Array(samplesPerLine));\n      for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n        quantizeAndInverse(component.blocks[blockRow][blockCol], r, R);\n\n        var offset = 0, sample = blockCol << 3;\n        for (j = 0; j < 8; j++) {\n          var line = lines[scanLine + j];\n          for (i = 0; i < 8; i++)\n            line[sample + i] = r[offset++];\n        }\n      }\n    }\n    return lines;\n  }\n\n  function clampTo8bit(a) {\n    return a < 0 ? 0 : a > 255 ? 255 : a;\n  }\n\n  constructor.prototype = {\n    load: function load(path) {\n      var xhr = new XMLHttpRequest();\n      xhr.open(\"GET\", path, true);\n      xhr.responseType = \"arraybuffer\";\n      xhr.onload = (function() {\n        // TODO catch parse error\n        var data = new Uint8Array(xhr.response || xhr.mozResponseArrayBuffer);\n        this.parse(data);\n        if (this.onload)\n          this.onload();\n      }).bind(this);\n      xhr.send(null);\n    },\n    parse: function parse(data) {\n      var maxResolutionInPixels = this.opts.maxResolutionInMP * 1000 * 1000;\n      var offset = 0, length = data.length;\n      function readUint16() {\n        var value = (data[offset] << 8) | data[offset + 1];\n        offset += 2;\n        return value;\n      }\n      function readDataBlock() {\n        var length = readUint16();\n        var array = data.subarray(offset, offset + length - 2);\n        offset += array.length;\n        return array;\n      }\n      function prepareComponents(frame) {\n        // According to the JPEG standard, the sampling factor must be between 1 and 4\n        // See https://github.com/libjpeg-turbo/libjpeg-turbo/blob/9abeff46d87bd201a952e276f3e4339556a403a3/libjpeg.txt#L1138-L1146\n        var maxH = 1, maxV = 1;\n        var component, componentId;\n        for (componentId in frame.components) {\n          if (frame.components.hasOwnProperty(componentId)) {\n            component = frame.components[componentId];\n            if (maxH < component.h) maxH = component.h;\n            if (maxV < component.v) maxV = component.v;\n          }\n        }\n        var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / maxH);\n        var mcusPerColumn = Math.ceil(frame.scanLines / 8 / maxV);\n        for (componentId in frame.components) {\n          if (frame.components.hasOwnProperty(componentId)) {\n            component = frame.components[componentId];\n            var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / maxH);\n            var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines  / 8) * component.v / maxV);\n            var blocksPerLineForMcu = mcusPerLine * component.h;\n            var blocksPerColumnForMcu = mcusPerColumn * component.v;\n            var blocksToAllocate = blocksPerColumnForMcu * blocksPerLineForMcu;\n            var blocks = [];\n\n            // Each block is a Int32Array of length 64 (4 x 64 = 256 bytes)\n            requestMemoryAllocation(blocksToAllocate * 256);\n\n            for (var i = 0; i < blocksPerColumnForMcu; i++) {\n              var row = [];\n              for (var j = 0; j < blocksPerLineForMcu; j++)\n                row.push(new Int32Array(64));\n              blocks.push(row);\n            }\n            component.blocksPerLine = blocksPerLine;\n            component.blocksPerColumn = blocksPerColumn;\n            component.blocks = blocks;\n          }\n        }\n        frame.maxH = maxH;\n        frame.maxV = maxV;\n        frame.mcusPerLine = mcusPerLine;\n        frame.mcusPerColumn = mcusPerColumn;\n      }\n      var jfif = null;\n      var adobe = null;\n      var pixels = null;\n      var frame, resetInterval;\n      var quantizationTables = [], frames = [];\n      var huffmanTablesAC = [], huffmanTablesDC = [];\n      var fileMarker = readUint16();\n      var malformedDataOffset = -1;\n      this.comments = [];\n      if (fileMarker != 0xFFD8) { // SOI (Start of Image)\n        throw new Error(\"SOI not found\");\n      }\n\n      fileMarker = readUint16();\n      while (fileMarker != 0xFFD9) { // EOI (End of image)\n        var i, j, l;\n        switch(fileMarker) {\n          case 0xFF00: break;\n          case 0xFFE0: // APP0 (Application Specific)\n          case 0xFFE1: // APP1\n          case 0xFFE2: // APP2\n          case 0xFFE3: // APP3\n          case 0xFFE4: // APP4\n          case 0xFFE5: // APP5\n          case 0xFFE6: // APP6\n          case 0xFFE7: // APP7\n          case 0xFFE8: // APP8\n          case 0xFFE9: // APP9\n          case 0xFFEA: // APP10\n          case 0xFFEB: // APP11\n          case 0xFFEC: // APP12\n          case 0xFFED: // APP13\n          case 0xFFEE: // APP14\n          case 0xFFEF: // APP15\n          case 0xFFFE: // COM (Comment)\n            var appData = readDataBlock();\n\n            if (fileMarker === 0xFFFE) {\n              var comment = String.fromCharCode.apply(null, appData);\n              this.comments.push(comment);\n            }\n\n            if (fileMarker === 0xFFE0) {\n              if (appData[0] === 0x4A && appData[1] === 0x46 && appData[2] === 0x49 &&\n                appData[3] === 0x46 && appData[4] === 0) { // 'JFIF\\x00'\n                jfif = {\n                  version: { major: appData[5], minor: appData[6] },\n                  densityUnits: appData[7],\n                  xDensity: (appData[8] << 8) | appData[9],\n                  yDensity: (appData[10] << 8) | appData[11],\n                  thumbWidth: appData[12],\n                  thumbHeight: appData[13],\n                  thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13])\n                };\n              }\n            }\n            // TODO APP1 - Exif\n            if (fileMarker === 0xFFE1) {\n              if (appData[0] === 0x45 &&\n                appData[1] === 0x78 &&\n                appData[2] === 0x69 &&\n                appData[3] === 0x66 &&\n                appData[4] === 0) { // 'EXIF\\x00'\n                this.exifBuffer = appData.subarray(5, appData.length);\n              }\n            }\n\n            if (fileMarker === 0xFFEE) {\n              if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6F &&\n                appData[3] === 0x62 && appData[4] === 0x65 && appData[5] === 0) { // 'Adobe\\x00'\n                adobe = {\n                  version: appData[6],\n                  flags0: (appData[7] << 8) | appData[8],\n                  flags1: (appData[9] << 8) | appData[10],\n                  transformCode: appData[11]\n                };\n              }\n            }\n            break;\n\n          case 0xFFDB: // DQT (Define Quantization Tables)\n            var quantizationTablesLength = readUint16();\n            var quantizationTablesEnd = quantizationTablesLength + offset - 2;\n            while (offset < quantizationTablesEnd) {\n              var quantizationTableSpec = data[offset++];\n              requestMemoryAllocation(64 * 4);\n              var tableData = new Int32Array(64);\n              if ((quantizationTableSpec >> 4) === 0) { // 8 bit values\n                for (j = 0; j < 64; j++) {\n                  var z = dctZigZag[j];\n                  tableData[z] = data[offset++];\n                }\n              } else if ((quantizationTableSpec >> 4) === 1) { //16 bit\n                for (j = 0; j < 64; j++) {\n                  var z = dctZigZag[j];\n                  tableData[z] = readUint16();\n                }\n              } else\n                throw new Error(\"DQT: invalid table spec\");\n              quantizationTables[quantizationTableSpec & 15] = tableData;\n            }\n            break;\n\n          case 0xFFC0: // SOF0 (Start of Frame, Baseline DCT)\n          case 0xFFC1: // SOF1 (Start of Frame, Extended DCT)\n          case 0xFFC2: // SOF2 (Start of Frame, Progressive DCT)\n            readUint16(); // skip data length\n            frame = {};\n            frame.extended = (fileMarker === 0xFFC1);\n            frame.progressive = (fileMarker === 0xFFC2);\n            frame.precision = data[offset++];\n            frame.scanLines = readUint16();\n            frame.samplesPerLine = readUint16();\n            frame.components = {};\n            frame.componentsOrder = [];\n\n            var pixelsInFrame = frame.scanLines * frame.samplesPerLine;\n            if (pixelsInFrame > maxResolutionInPixels) {\n              var exceededAmount = Math.ceil((pixelsInFrame - maxResolutionInPixels) / 1e6);\n              throw new Error(`maxResolutionInMP limit exceeded by ${exceededAmount}MP`);\n            }\n\n            var componentsCount = data[offset++], componentId;\n            var maxH = 0, maxV = 0;\n            for (i = 0; i < componentsCount; i++) {\n              componentId = data[offset];\n              var h = data[offset + 1] >> 4;\n              var v = data[offset + 1] & 15;\n              var qId = data[offset + 2];\n\n              if ( h <= 0 || v <= 0 ) {\n                throw new Error('Invalid sampling factor, expected values above 0');\n              }\n\n              frame.componentsOrder.push(componentId);\n              frame.components[componentId] = {\n                h: h,\n                v: v,\n                quantizationIdx: qId\n              };\n              offset += 3;\n            }\n            prepareComponents(frame);\n            frames.push(frame);\n            break;\n\n          case 0xFFC4: // DHT (Define Huffman Tables)\n            var huffmanLength = readUint16();\n            for (i = 2; i < huffmanLength;) {\n              var huffmanTableSpec = data[offset++];\n              var codeLengths = new Uint8Array(16);\n              var codeLengthSum = 0;\n              for (j = 0; j < 16; j++, offset++) {\n                codeLengthSum += (codeLengths[j] = data[offset]);\n              }\n              requestMemoryAllocation(16 + codeLengthSum);\n              var huffmanValues = new Uint8Array(codeLengthSum);\n              for (j = 0; j < codeLengthSum; j++, offset++)\n                huffmanValues[j] = data[offset];\n              i += 17 + codeLengthSum;\n\n              ((huffmanTableSpec >> 4) === 0 ?\n                huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] =\n                buildHuffmanTable(codeLengths, huffmanValues);\n            }\n            break;\n\n          case 0xFFDD: // DRI (Define Restart Interval)\n            readUint16(); // skip data length\n            resetInterval = readUint16();\n            break;\n\n          case 0xFFDC: // Number of Lines marker\n            readUint16() // skip data length\n            readUint16() // Ignore this data since it represents the image height\n            break;\n            \n          case 0xFFDA: // SOS (Start of Scan)\n            var scanLength = readUint16();\n            var selectorsCount = data[offset++];\n            var components = [], component;\n            for (i = 0; i < selectorsCount; i++) {\n              component = frame.components[data[offset++]];\n              var tableSpec = data[offset++];\n              component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];\n              component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];\n              components.push(component);\n            }\n            var spectralStart = data[offset++];\n            var spectralEnd = data[offset++];\n            var successiveApproximation = data[offset++];\n            var processed = decodeScan(data, offset,\n              frame, components, resetInterval,\n              spectralStart, spectralEnd,\n              successiveApproximation >> 4, successiveApproximation & 15, this.opts);\n            offset += processed;\n            break;\n\n          case 0xFFFF: // Fill bytes\n            if (data[offset] !== 0xFF) { // Avoid skipping a valid marker.\n              offset--;\n            }\n            break;\n          default:\n            if (data[offset - 3] == 0xFF &&\n                data[offset - 2] >= 0xC0 && data[offset - 2] <= 0xFE) {\n              // could be incorrect encoding -- last 0xFF byte of the previous\n              // block was eaten by the encoder\n              offset -= 3;\n              break;\n            }\n            else if (fileMarker === 0xE0 || fileMarker == 0xE1) {\n              // Recover from malformed APP1 markers popular in some phone models.\n              // See https://github.com/eugeneware/jpeg-js/issues/82\n              if (malformedDataOffset !== -1) {\n                throw new Error(`first unknown JPEG marker at offset ${malformedDataOffset.toString(16)}, second unknown JPEG marker ${fileMarker.toString(16)} at offset ${(offset - 1).toString(16)}`);\n              }\n              malformedDataOffset = offset - 1;\n              const nextOffset = readUint16();\n              if (data[offset + nextOffset - 2] === 0xFF) {\n                offset += nextOffset - 2;\n                break;\n              }\n            }\n            throw new Error(\"unknown JPEG marker \" + fileMarker.toString(16));\n        }\n        fileMarker = readUint16();\n      }\n      if (frames.length != 1)\n        throw new Error(\"only single frame JPEGs supported\");\n\n      // set each frame's components quantization table\n      for (var i = 0; i < frames.length; i++) {\n        var cp = frames[i].components;\n        for (var j in cp) {\n          cp[j].quantizationTable = quantizationTables[cp[j].quantizationIdx];\n          delete cp[j].quantizationIdx;\n        }\n      }\n\n      this.width = frame.samplesPerLine;\n      this.height = frame.scanLines;\n      this.jfif = jfif;\n      this.adobe = adobe;\n      this.components = [];\n      for (var i = 0; i < frame.componentsOrder.length; i++) {\n        var component = frame.components[frame.componentsOrder[i]];\n        this.components.push({\n          lines: buildComponentData(frame, component),\n          scaleX: component.h / frame.maxH,\n          scaleY: component.v / frame.maxV\n        });\n      }\n    },\n    getData: function getData(width, height) {\n      var scaleX = this.width / width, scaleY = this.height / height;\n\n      var component1, component2, component3, component4;\n      var component1Line, component2Line, component3Line, component4Line;\n      var x, y;\n      var offset = 0;\n      var Y, Cb, Cr, K, C, M, Ye, R, G, B;\n      var colorTransform;\n      var dataLength = width * height * this.components.length;\n      requestMemoryAllocation(dataLength);\n      var data = new Uint8Array(dataLength);\n      switch (this.components.length) {\n        case 1:\n          component1 = this.components[0];\n          for (y = 0; y < height; y++) {\n            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];\n            for (x = 0; x < width; x++) {\n              Y = component1Line[0 | (x * component1.scaleX * scaleX)];\n\n              data[offset++] = Y;\n            }\n          }\n          break;\n        case 2:\n          // PDF might compress two component data in custom colorspace\n          component1 = this.components[0];\n          component2 = this.components[1];\n          for (y = 0; y < height; y++) {\n            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];\n            component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)];\n            for (x = 0; x < width; x++) {\n              Y = component1Line[0 | (x * component1.scaleX * scaleX)];\n              data[offset++] = Y;\n              Y = component2Line[0 | (x * component2.scaleX * scaleX)];\n              data[offset++] = Y;\n            }\n          }\n          break;\n        case 3:\n          // The default transform for three components is true\n          colorTransform = true;\n          // The adobe transform marker overrides any previous setting\n          if (this.adobe && this.adobe.transformCode)\n            colorTransform = true;\n          else if (typeof this.opts.colorTransform !== 'undefined')\n            colorTransform = !!this.opts.colorTransform;\n\n          component1 = this.components[0];\n          component2 = this.components[1];\n          component3 = this.components[2];\n          for (y = 0; y < height; y++) {\n            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];\n            component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)];\n            component3Line = component3.lines[0 | (y * component3.scaleY * scaleY)];\n            for (x = 0; x < width; x++) {\n              if (!colorTransform) {\n                R = component1Line[0 | (x * component1.scaleX * scaleX)];\n                G = component2Line[0 | (x * component2.scaleX * scaleX)];\n                B = component3Line[0 | (x * component3.scaleX * scaleX)];\n              } else {\n                Y = component1Line[0 | (x * component1.scaleX * scaleX)];\n                Cb = component2Line[0 | (x * component2.scaleX * scaleX)];\n                Cr = component3Line[0 | (x * component3.scaleX * scaleX)];\n\n                R = clampTo8bit(Y + 1.402 * (Cr - 128));\n                G = clampTo8bit(Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128));\n                B = clampTo8bit(Y + 1.772 * (Cb - 128));\n              }\n\n              data[offset++] = R;\n              data[offset++] = G;\n              data[offset++] = B;\n            }\n          }\n          break;\n        case 4:\n          if (!this.adobe)\n            throw new Error('Unsupported color mode (4 components)');\n          // The default transform for four components is false\n          colorTransform = false;\n          // The adobe transform marker overrides any previous setting\n          if (this.adobe && this.adobe.transformCode)\n            colorTransform = true;\n          else if (typeof this.opts.colorTransform !== 'undefined')\n            colorTransform = !!this.opts.colorTransform;\n\n          component1 = this.components[0];\n          component2 = this.components[1];\n          component3 = this.components[2];\n          component4 = this.components[3];\n          for (y = 0; y < height; y++) {\n            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];\n            component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)];\n            component3Line = component3.lines[0 | (y * component3.scaleY * scaleY)];\n            component4Line = component4.lines[0 | (y * component4.scaleY * scaleY)];\n            for (x = 0; x < width; x++) {\n              if (!colorTransform) {\n                C = component1Line[0 | (x * component1.scaleX * scaleX)];\n                M = component2Line[0 | (x * component2.scaleX * scaleX)];\n                Ye = component3Line[0 | (x * component3.scaleX * scaleX)];\n                K = component4Line[0 | (x * component4.scaleX * scaleX)];\n              } else {\n                Y = component1Line[0 | (x * component1.scaleX * scaleX)];\n                Cb = component2Line[0 | (x * component2.scaleX * scaleX)];\n                Cr = component3Line[0 | (x * component3.scaleX * scaleX)];\n                K = component4Line[0 | (x * component4.scaleX * scaleX)];\n\n                C = 255 - clampTo8bit(Y + 1.402 * (Cr - 128));\n                M = 255 - clampTo8bit(Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128));\n                Ye = 255 - clampTo8bit(Y + 1.772 * (Cb - 128));\n              }\n              data[offset++] = 255-C;\n              data[offset++] = 255-M;\n              data[offset++] = 255-Ye;\n              data[offset++] = 255-K;\n            }\n          }\n          break;\n        default:\n          throw new Error('Unsupported color mode');\n      }\n      return data;\n    },\n    copyToImageData: function copyToImageData(imageData, formatAsRGBA) {\n      var width = imageData.width, height = imageData.height;\n      var imageDataArray = imageData.data;\n      var data = this.getData(width, height);\n      var i = 0, j = 0, x, y;\n      var Y, K, C, M, R, G, B;\n      switch (this.components.length) {\n        case 1:\n          for (y = 0; y < height; y++) {\n            for (x = 0; x < width; x++) {\n              Y = data[i++];\n\n              imageDataArray[j++] = Y;\n              imageDataArray[j++] = Y;\n              imageDataArray[j++] = Y;\n              if (formatAsRGBA) {\n                imageDataArray[j++] = 255;\n              }\n            }\n          }\n          break;\n        case 3:\n          for (y = 0; y < height; y++) {\n            for (x = 0; x < width; x++) {\n              R = data[i++];\n              G = data[i++];\n              B = data[i++];\n\n              imageDataArray[j++] = R;\n              imageDataArray[j++] = G;\n              imageDataArray[j++] = B;\n              if (formatAsRGBA) {\n                imageDataArray[j++] = 255;\n              }\n            }\n          }\n          break;\n        case 4:\n          for (y = 0; y < height; y++) {\n            for (x = 0; x < width; x++) {\n              C = data[i++];\n              M = data[i++];\n              Y = data[i++];\n              K = data[i++];\n\n              R = 255 - clampTo8bit(C * (1 - K / 255) + K);\n              G = 255 - clampTo8bit(M * (1 - K / 255) + K);\n              B = 255 - clampTo8bit(Y * (1 - K / 255) + K);\n\n              imageDataArray[j++] = R;\n              imageDataArray[j++] = G;\n              imageDataArray[j++] = B;\n              if (formatAsRGBA) {\n                imageDataArray[j++] = 255;\n              }\n            }\n          }\n          break;\n        default:\n          throw new Error('Unsupported color mode');\n      }\n    }\n  };\n\n\n  // We cap the amount of memory used by jpeg-js to avoid unexpected OOMs from untrusted content.\n  var totalBytesAllocated = 0;\n  var maxMemoryUsageBytes = 0;\n  function requestMemoryAllocation(increaseAmount = 0) {\n    var totalMemoryImpactBytes = totalBytesAllocated + increaseAmount;\n    if (totalMemoryImpactBytes > maxMemoryUsageBytes) {\n      var exceededAmount = Math.ceil((totalMemoryImpactBytes - maxMemoryUsageBytes) / 1024 / 1024);\n      throw new Error(`maxMemoryUsageInMB limit exceeded by at least ${exceededAmount}MB`);\n    }\n\n    totalBytesAllocated = totalMemoryImpactBytes;\n  }\n\n  constructor.resetMaxMemoryUsage = function (maxMemoryUsageBytes_) {\n    totalBytesAllocated = 0;\n    maxMemoryUsageBytes = maxMemoryUsageBytes_;\n  };\n\n  constructor.getBytesAllocated = function () {\n    return totalBytesAllocated;\n  };\n\n  constructor.requestMemoryAllocation = requestMemoryAllocation;\n\n  return constructor;\n})();\n\nif (typeof module !== 'undefined') {\n\tmodule.exports = decode;\n} else if (typeof window !== 'undefined') {\n\twindow['jpeg-js'] = window['jpeg-js'] || {};\n\twindow['jpeg-js'].decode = decode;\n}\n\nfunction decode(jpegData, userOpts = {}) {\n  var defaultOpts = {\n    // \"undefined\" means \"Choose whether to transform colors based on the image’s color model.\"\n    colorTransform: undefined,\n    useTArray: false,\n    formatAsRGBA: true,\n    tolerantDecoding: true,\n    maxResolutionInMP: 100, // Don't decode more than 100 megapixels\n    maxMemoryUsageInMB: 512, // Don't decode if memory footprint is more than 512MB\n  };\n\n  var opts = {...defaultOpts, ...userOpts};\n  var arr = new Uint8Array(jpegData);\n  var decoder = new JpegImage();\n  decoder.opts = opts;\n  // If this constructor ever supports async decoding this will need to be done differently.\n  // Until then, treating as singleton limit is fine.\n  JpegImage.resetMaxMemoryUsage(opts.maxMemoryUsageInMB * 1024 * 1024);\n  decoder.parse(arr);\n\n  var channels = (opts.formatAsRGBA) ? 4 : 3;\n  var bytesNeeded = decoder.width * decoder.height * channels;\n  try {\n    JpegImage.requestMemoryAllocation(bytesNeeded);\n    var image = {\n      width: decoder.width,\n      height: decoder.height,\n      exifBuffer: decoder.exifBuffer,\n      data: opts.useTArray ?\n        new Uint8Array(bytesNeeded) :\n        Buffer.alloc(bytesNeeded)\n    };\n    if(decoder.comments.length > 0) {\n      image[\"comments\"] = decoder.comments;\n    }\n  } catch (err) {\n    if (err instanceof RangeError) {\n      throw new Error(\"Could not allocate enough memory for the image. \" +\n                      \"Required: \" + bytesNeeded);\n    } \n    \n    if (err instanceof ReferenceError) {\n      if (err.message === \"Buffer is not defined\") {\n        throw new Error(\"Buffer is not globally defined in this environment. \" +\n                        \"Consider setting useTArray to true\");\n      }\n    }\n    throw err;\n  }\n\n  decoder.copyToImageData(image, opts.formatAsRGBA);\n\n  return image;\n}\n","var encode = require('./lib/encoder'),\n    decode = require('./lib/decoder');\n\nmodule.exports = {\n  encode: encode,\n  decode: decode\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\n\nlet ChunkStream = (module.exports = function () {\n  Stream.call(this);\n\n  this._buffers = [];\n  this._buffered = 0;\n\n  this._reads = [];\n  this._paused = false;\n\n  this._encoding = \"utf8\";\n  this.writable = true;\n});\nutil.inherits(ChunkStream, Stream);\n\nChunkStream.prototype.read = function (length, callback) {\n  this._reads.push({\n    length: Math.abs(length), // if length < 0 then at most this length\n    allowLess: length < 0,\n    func: callback,\n  });\n\n  process.nextTick(\n    function () {\n      this._process();\n\n      // its paused and there is not enought data then ask for more\n      if (this._paused && this._reads && this._reads.length > 0) {\n        this._paused = false;\n\n        this.emit(\"drain\");\n      }\n    }.bind(this)\n  );\n};\n\nChunkStream.prototype.write = function (data, encoding) {\n  if (!this.writable) {\n    this.emit(\"error\", new Error(\"Stream not writable\"));\n    return false;\n  }\n\n  let dataBuffer;\n  if (Buffer.isBuffer(data)) {\n    dataBuffer = data;\n  } else {\n    dataBuffer = Buffer.from(data, encoding || this._encoding);\n  }\n\n  this._buffers.push(dataBuffer);\n  this._buffered += dataBuffer.length;\n\n  this._process();\n\n  // ok if there are no more read requests\n  if (this._reads && this._reads.length === 0) {\n    this._paused = true;\n  }\n\n  return this.writable && !this._paused;\n};\n\nChunkStream.prototype.end = function (data, encoding) {\n  if (data) {\n    this.write(data, encoding);\n  }\n\n  this.writable = false;\n\n  // already destroyed\n  if (!this._buffers) {\n    return;\n  }\n\n  // enqueue or handle end\n  if (this._buffers.length === 0) {\n    this._end();\n  } else {\n    this._buffers.push(null);\n    this._process();\n  }\n};\n\nChunkStream.prototype.destroySoon = ChunkStream.prototype.end;\n\nChunkStream.prototype._end = function () {\n  if (this._reads.length > 0) {\n    this.emit(\"error\", new Error(\"Unexpected end of input\"));\n  }\n\n  this.destroy();\n};\n\nChunkStream.prototype.destroy = function () {\n  if (!this._buffers) {\n    return;\n  }\n\n  this.writable = false;\n  this._reads = null;\n  this._buffers = null;\n\n  this.emit(\"close\");\n};\n\nChunkStream.prototype._processReadAllowingLess = function (read) {\n  // ok there is any data so that we can satisfy this request\n  this._reads.shift(); // == read\n\n  // first we need to peek into first buffer\n  let smallerBuf = this._buffers[0];\n\n  // ok there is more data than we need\n  if (smallerBuf.length > read.length) {\n    this._buffered -= read.length;\n    this._buffers[0] = smallerBuf.slice(read.length);\n\n    read.func.call(this, smallerBuf.slice(0, read.length));\n  } else {\n    // ok this is less than maximum length so use it all\n    this._buffered -= smallerBuf.length;\n    this._buffers.shift(); // == smallerBuf\n\n    read.func.call(this, smallerBuf);\n  }\n};\n\nChunkStream.prototype._processRead = function (read) {\n  this._reads.shift(); // == read\n\n  let pos = 0;\n  let count = 0;\n  let data = Buffer.alloc(read.length);\n\n  // create buffer for all data\n  while (pos < read.length) {\n    let buf = this._buffers[count++];\n    let len = Math.min(buf.length, read.length - pos);\n\n    buf.copy(data, pos, 0, len);\n    pos += len;\n\n    // last buffer wasn't used all so just slice it and leave\n    if (len !== buf.length) {\n      this._buffers[--count] = buf.slice(len);\n    }\n  }\n\n  // remove all used buffers\n  if (count > 0) {\n    this._buffers.splice(0, count);\n  }\n\n  this._buffered -= read.length;\n\n  read.func.call(this, data);\n};\n\nChunkStream.prototype._process = function () {\n  try {\n    // as long as there is any data and read requests\n    while (this._buffered > 0 && this._reads && this._reads.length > 0) {\n      let read = this._reads[0];\n\n      // read any data (but no more than length)\n      if (read.allowLess) {\n        this._processReadAllowingLess(read);\n      } else if (this._buffered >= read.length) {\n        // ok we can meet some expectations\n\n        this._processRead(read);\n      } else {\n        // not enought data to satisfy first request in queue\n        // so we need to wait for more\n        break;\n      }\n    }\n\n    if (this._buffers && !this.writable) {\n      this._end();\n    }\n  } catch (ex) {\n    this.emit(\"error\", ex);\n  }\n};\n","\"use strict\";\n\n// Adam 7\n//   0 1 2 3 4 5 6 7\n// 0 x 6 4 6 x 6 4 6\n// 1 7 7 7 7 7 7 7 7\n// 2 5 6 5 6 5 6 5 6\n// 3 7 7 7 7 7 7 7 7\n// 4 3 6 4 6 3 6 4 6\n// 5 7 7 7 7 7 7 7 7\n// 6 5 6 5 6 5 6 5 6\n// 7 7 7 7 7 7 7 7 7\n\nlet imagePasses = [\n  {\n    // pass 1 - 1px\n    x: [0],\n    y: [0],\n  },\n  {\n    // pass 2 - 1px\n    x: [4],\n    y: [0],\n  },\n  {\n    // pass 3 - 2px\n    x: [0, 4],\n    y: [4],\n  },\n  {\n    // pass 4 - 4px\n    x: [2, 6],\n    y: [0, 4],\n  },\n  {\n    // pass 5 - 8px\n    x: [0, 2, 4, 6],\n    y: [2, 6],\n  },\n  {\n    // pass 6 - 16px\n    x: [1, 3, 5, 7],\n    y: [0, 2, 4, 6],\n  },\n  {\n    // pass 7 - 32px\n    x: [0, 1, 2, 3, 4, 5, 6, 7],\n    y: [1, 3, 5, 7],\n  },\n];\n\nexports.getImagePasses = function (width, height) {\n  let images = [];\n  let xLeftOver = width % 8;\n  let yLeftOver = height % 8;\n  let xRepeats = (width - xLeftOver) / 8;\n  let yRepeats = (height - yLeftOver) / 8;\n  for (let i = 0; i < imagePasses.length; i++) {\n    let pass = imagePasses[i];\n    let passWidth = xRepeats * pass.x.length;\n    let passHeight = yRepeats * pass.y.length;\n    for (let j = 0; j < pass.x.length; j++) {\n      if (pass.x[j] < xLeftOver) {\n        passWidth++;\n      } else {\n        break;\n      }\n    }\n    for (let j = 0; j < pass.y.length; j++) {\n      if (pass.y[j] < yLeftOver) {\n        passHeight++;\n      } else {\n        break;\n      }\n    }\n    if (passWidth > 0 && passHeight > 0) {\n      images.push({ width: passWidth, height: passHeight, index: i });\n    }\n  }\n  return images;\n};\n\nexports.getInterlaceIterator = function (width) {\n  return function (x, y, pass) {\n    let outerXLeftOver = x % imagePasses[pass].x.length;\n    let outerX =\n      ((x - outerXLeftOver) / imagePasses[pass].x.length) * 8 +\n      imagePasses[pass].x[outerXLeftOver];\n    let outerYLeftOver = y % imagePasses[pass].y.length;\n    let outerY =\n      ((y - outerYLeftOver) / imagePasses[pass].y.length) * 8 +\n      imagePasses[pass].y[outerYLeftOver];\n    return outerX * 4 + outerY * width * 4;\n  };\n};\n","\"use strict\";\n\nmodule.exports = function paethPredictor(left, above, upLeft) {\n  let paeth = left + above - upLeft;\n  let pLeft = Math.abs(paeth - left);\n  let pAbove = Math.abs(paeth - above);\n  let pUpLeft = Math.abs(paeth - upLeft);\n\n  if (pLeft <= pAbove && pLeft <= pUpLeft) {\n    return left;\n  }\n  if (pAbove <= pUpLeft) {\n    return above;\n  }\n  return upLeft;\n};\n","\"use strict\";\n\nlet interlaceUtils = require(\"./interlace\");\nlet paethPredictor = require(\"./paeth-predictor\");\n\nfunction getByteWidth(width, bpp, depth) {\n  let byteWidth = width * bpp;\n  if (depth !== 8) {\n    byteWidth = Math.ceil(byteWidth / (8 / depth));\n  }\n  return byteWidth;\n}\n\nlet Filter = (module.exports = function (bitmapInfo, dependencies) {\n  let width = bitmapInfo.width;\n  let height = bitmapInfo.height;\n  let interlace = bitmapInfo.interlace;\n  let bpp = bitmapInfo.bpp;\n  let depth = bitmapInfo.depth;\n\n  this.read = dependencies.read;\n  this.write = dependencies.write;\n  this.complete = dependencies.complete;\n\n  this._imageIndex = 0;\n  this._images = [];\n  if (interlace) {\n    let passes = interlaceUtils.getImagePasses(width, height);\n    for (let i = 0; i < passes.length; i++) {\n      this._images.push({\n        byteWidth: getByteWidth(passes[i].width, bpp, depth),\n        height: passes[i].height,\n        lineIndex: 0,\n      });\n    }\n  } else {\n    this._images.push({\n      byteWidth: getByteWidth(width, bpp, depth),\n      height: height,\n      lineIndex: 0,\n    });\n  }\n\n  // when filtering the line we look at the pixel to the left\n  // the spec also says it is done on a byte level regardless of the number of pixels\n  // so if the depth is byte compatible (8 or 16) we subtract the bpp in order to compare back\n  // a pixel rather than just a different byte part. However if we are sub byte, we ignore.\n  if (depth === 8) {\n    this._xComparison = bpp;\n  } else if (depth === 16) {\n    this._xComparison = bpp * 2;\n  } else {\n    this._xComparison = 1;\n  }\n});\n\nFilter.prototype.start = function () {\n  this.read(\n    this._images[this._imageIndex].byteWidth + 1,\n    this._reverseFilterLine.bind(this)\n  );\n};\n\nFilter.prototype._unFilterType1 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let xComparison = this._xComparison;\n  let xBiggerThan = xComparison - 1;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f1Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n    unfilteredLine[x] = rawByte + f1Left;\n  }\n};\n\nFilter.prototype._unFilterType2 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let lastLine = this._lastLine;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f2Up = lastLine ? lastLine[x] : 0;\n    unfilteredLine[x] = rawByte + f2Up;\n  }\n};\n\nFilter.prototype._unFilterType3 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let xComparison = this._xComparison;\n  let xBiggerThan = xComparison - 1;\n  let lastLine = this._lastLine;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f3Up = lastLine ? lastLine[x] : 0;\n    let f3Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n    let f3Add = Math.floor((f3Left + f3Up) / 2);\n    unfilteredLine[x] = rawByte + f3Add;\n  }\n};\n\nFilter.prototype._unFilterType4 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let xComparison = this._xComparison;\n  let xBiggerThan = xComparison - 1;\n  let lastLine = this._lastLine;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f4Up = lastLine ? lastLine[x] : 0;\n    let f4Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n    let f4UpLeft = x > xBiggerThan && lastLine ? lastLine[x - xComparison] : 0;\n    let f4Add = paethPredictor(f4Left, f4Up, f4UpLeft);\n    unfilteredLine[x] = rawByte + f4Add;\n  }\n};\n\nFilter.prototype._reverseFilterLine = function (rawData) {\n  let filter = rawData[0];\n  let unfilteredLine;\n  let currentImage = this._images[this._imageIndex];\n  let byteWidth = currentImage.byteWidth;\n\n  if (filter === 0) {\n    unfilteredLine = rawData.slice(1, byteWidth + 1);\n  } else {\n    unfilteredLine = Buffer.alloc(byteWidth);\n\n    switch (filter) {\n      case 1:\n        this._unFilterType1(rawData, unfilteredLine, byteWidth);\n        break;\n      case 2:\n        this._unFilterType2(rawData, unfilteredLine, byteWidth);\n        break;\n      case 3:\n        this._unFilterType3(rawData, unfilteredLine, byteWidth);\n        break;\n      case 4:\n        this._unFilterType4(rawData, unfilteredLine, byteWidth);\n        break;\n      default:\n        throw new Error(\"Unrecognised filter type - \" + filter);\n    }\n  }\n\n  this.write(unfilteredLine);\n\n  currentImage.lineIndex++;\n  if (currentImage.lineIndex >= currentImage.height) {\n    this._lastLine = null;\n    this._imageIndex++;\n    currentImage = this._images[this._imageIndex];\n  } else {\n    this._lastLine = unfilteredLine;\n  }\n\n  if (currentImage) {\n    // read, using the byte width that may be from the new current image\n    this.read(currentImage.byteWidth + 1, this._reverseFilterLine.bind(this));\n  } else {\n    this._lastLine = null;\n    this.complete();\n  }\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet ChunkStream = require(\"./chunkstream\");\nlet Filter = require(\"./filter-parse\");\n\nlet FilterAsync = (module.exports = function (bitmapInfo) {\n  ChunkStream.call(this);\n\n  let buffers = [];\n  let that = this;\n  this._filter = new Filter(bitmapInfo, {\n    read: this.read.bind(this),\n    write: function (buffer) {\n      buffers.push(buffer);\n    },\n    complete: function () {\n      that.emit(\"complete\", Buffer.concat(buffers));\n    },\n  });\n\n  this._filter.start();\n});\nutil.inherits(FilterAsync, ChunkStream);\n","\"use strict\";\n\nmodule.exports = {\n  PNG_SIGNATURE: [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a],\n\n  TYPE_IHDR: 0x49484452,\n  TYPE_IEND: 0x49454e44,\n  TYPE_IDAT: 0x49444154,\n  TYPE_PLTE: 0x504c5445,\n  TYPE_tRNS: 0x74524e53, // eslint-disable-line camelcase\n  TYPE_gAMA: 0x67414d41, // eslint-disable-line camelcase\n\n  // color-type bits\n  COLORTYPE_GRAYSCALE: 0,\n  COLORTYPE_PALETTE: 1,\n  COLORTYPE_COLOR: 2,\n  COLORTYPE_ALPHA: 4, // e.g. grayscale and alpha\n\n  // color-type combinations\n  COLORTYPE_PALETTE_COLOR: 3,\n  COLORTYPE_COLOR_ALPHA: 6,\n\n  COLORTYPE_TO_BPP_MAP: {\n    0: 1,\n    2: 3,\n    3: 1,\n    4: 2,\n    6: 4,\n  },\n\n  GAMMA_DIVISION: 100000,\n};\n","\"use strict\";\n\nlet crcTable = [];\n\n(function () {\n  for (let i = 0; i < 256; i++) {\n    let currentCrc = i;\n    for (let j = 0; j < 8; j++) {\n      if (currentCrc & 1) {\n        currentCrc = 0xedb88320 ^ (currentCrc >>> 1);\n      } else {\n        currentCrc = currentCrc >>> 1;\n      }\n    }\n    crcTable[i] = currentCrc;\n  }\n})();\n\nlet CrcCalculator = (module.exports = function () {\n  this._crc = -1;\n});\n\nCrcCalculator.prototype.write = function (data) {\n  for (let i = 0; i < data.length; i++) {\n    this._crc = crcTable[(this._crc ^ data[i]) & 0xff] ^ (this._crc >>> 8);\n  }\n  return true;\n};\n\nCrcCalculator.prototype.crc32 = function () {\n  return this._crc ^ -1;\n};\n\nCrcCalculator.crc32 = function (buf) {\n  let crc = -1;\n  for (let i = 0; i < buf.length; i++) {\n    crc = crcTable[(crc ^ buf[i]) & 0xff] ^ (crc >>> 8);\n  }\n  return crc ^ -1;\n};\n","\"use strict\";\n\nlet constants = require(\"./constants\");\nlet CrcCalculator = require(\"./crc\");\n\nlet Parser = (module.exports = function (options, dependencies) {\n  this._options = options;\n  options.checkCRC = options.checkCRC !== false;\n\n  this._hasIHDR = false;\n  this._hasIEND = false;\n  this._emittedHeadersFinished = false;\n\n  // input flags/metadata\n  this._palette = [];\n  this._colorType = 0;\n\n  this._chunks = {};\n  this._chunks[constants.TYPE_IHDR] = this._handleIHDR.bind(this);\n  this._chunks[constants.TYPE_IEND] = this._handleIEND.bind(this);\n  this._chunks[constants.TYPE_IDAT] = this._handleIDAT.bind(this);\n  this._chunks[constants.TYPE_PLTE] = this._handlePLTE.bind(this);\n  this._chunks[constants.TYPE_tRNS] = this._handleTRNS.bind(this);\n  this._chunks[constants.TYPE_gAMA] = this._handleGAMA.bind(this);\n\n  this.read = dependencies.read;\n  this.error = dependencies.error;\n  this.metadata = dependencies.metadata;\n  this.gamma = dependencies.gamma;\n  this.transColor = dependencies.transColor;\n  this.palette = dependencies.palette;\n  this.parsed = dependencies.parsed;\n  this.inflateData = dependencies.inflateData;\n  this.finished = dependencies.finished;\n  this.simpleTransparency = dependencies.simpleTransparency;\n  this.headersFinished = dependencies.headersFinished || function () {};\n});\n\nParser.prototype.start = function () {\n  this.read(constants.PNG_SIGNATURE.length, this._parseSignature.bind(this));\n};\n\nParser.prototype._parseSignature = function (data) {\n  let signature = constants.PNG_SIGNATURE;\n\n  for (let i = 0; i < signature.length; i++) {\n    if (data[i] !== signature[i]) {\n      this.error(new Error(\"Invalid file signature\"));\n      return;\n    }\n  }\n  this.read(8, this._parseChunkBegin.bind(this));\n};\n\nParser.prototype._parseChunkBegin = function (data) {\n  // chunk content length\n  let length = data.readUInt32BE(0);\n\n  // chunk type\n  let type = data.readUInt32BE(4);\n  let name = \"\";\n  for (let i = 4; i < 8; i++) {\n    name += String.fromCharCode(data[i]);\n  }\n\n  //console.log('chunk ', name, length);\n\n  // chunk flags\n  let ancillary = Boolean(data[4] & 0x20); // or critical\n  //    priv = Boolean(data[5] & 0x20), // or public\n  //    safeToCopy = Boolean(data[7] & 0x20); // or unsafe\n\n  if (!this._hasIHDR && type !== constants.TYPE_IHDR) {\n    this.error(new Error(\"Expected IHDR on beggining\"));\n    return;\n  }\n\n  this._crc = new CrcCalculator();\n  this._crc.write(Buffer.from(name));\n\n  if (this._chunks[type]) {\n    return this._chunks[type](length);\n  }\n\n  if (!ancillary) {\n    this.error(new Error(\"Unsupported critical chunk type \" + name));\n    return;\n  }\n\n  this.read(length + 4, this._skipChunk.bind(this));\n};\n\nParser.prototype._skipChunk = function (/*data*/) {\n  this.read(8, this._parseChunkBegin.bind(this));\n};\n\nParser.prototype._handleChunkEnd = function () {\n  this.read(4, this._parseChunkEnd.bind(this));\n};\n\nParser.prototype._parseChunkEnd = function (data) {\n  let fileCrc = data.readInt32BE(0);\n  let calcCrc = this._crc.crc32();\n\n  // check CRC\n  if (this._options.checkCRC && calcCrc !== fileCrc) {\n    this.error(new Error(\"Crc error - \" + fileCrc + \" - \" + calcCrc));\n    return;\n  }\n\n  if (!this._hasIEND) {\n    this.read(8, this._parseChunkBegin.bind(this));\n  }\n};\n\nParser.prototype._handleIHDR = function (length) {\n  this.read(length, this._parseIHDR.bind(this));\n};\nParser.prototype._parseIHDR = function (data) {\n  this._crc.write(data);\n\n  let width = data.readUInt32BE(0);\n  let height = data.readUInt32BE(4);\n  let depth = data[8];\n  let colorType = data[9]; // bits: 1 palette, 2 color, 4 alpha\n  let compr = data[10];\n  let filter = data[11];\n  let interlace = data[12];\n\n  // console.log('    width', width, 'height', height,\n  //     'depth', depth, 'colorType', colorType,\n  //     'compr', compr, 'filter', filter, 'interlace', interlace\n  // );\n\n  if (\n    depth !== 8 &&\n    depth !== 4 &&\n    depth !== 2 &&\n    depth !== 1 &&\n    depth !== 16\n  ) {\n    this.error(new Error(\"Unsupported bit depth \" + depth));\n    return;\n  }\n  if (!(colorType in constants.COLORTYPE_TO_BPP_MAP)) {\n    this.error(new Error(\"Unsupported color type\"));\n    return;\n  }\n  if (compr !== 0) {\n    this.error(new Error(\"Unsupported compression method\"));\n    return;\n  }\n  if (filter !== 0) {\n    this.error(new Error(\"Unsupported filter method\"));\n    return;\n  }\n  if (interlace !== 0 && interlace !== 1) {\n    this.error(new Error(\"Unsupported interlace method\"));\n    return;\n  }\n\n  this._colorType = colorType;\n\n  let bpp = constants.COLORTYPE_TO_BPP_MAP[this._colorType];\n\n  this._hasIHDR = true;\n\n  this.metadata({\n    width: width,\n    height: height,\n    depth: depth,\n    interlace: Boolean(interlace),\n    palette: Boolean(colorType & constants.COLORTYPE_PALETTE),\n    color: Boolean(colorType & constants.COLORTYPE_COLOR),\n    alpha: Boolean(colorType & constants.COLORTYPE_ALPHA),\n    bpp: bpp,\n    colorType: colorType,\n  });\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handlePLTE = function (length) {\n  this.read(length, this._parsePLTE.bind(this));\n};\nParser.prototype._parsePLTE = function (data) {\n  this._crc.write(data);\n\n  let entries = Math.floor(data.length / 3);\n  // console.log('Palette:', entries);\n\n  for (let i = 0; i < entries; i++) {\n    this._palette.push([data[i * 3], data[i * 3 + 1], data[i * 3 + 2], 0xff]);\n  }\n\n  this.palette(this._palette);\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handleTRNS = function (length) {\n  this.simpleTransparency();\n  this.read(length, this._parseTRNS.bind(this));\n};\nParser.prototype._parseTRNS = function (data) {\n  this._crc.write(data);\n\n  // palette\n  if (this._colorType === constants.COLORTYPE_PALETTE_COLOR) {\n    if (this._palette.length === 0) {\n      this.error(new Error(\"Transparency chunk must be after palette\"));\n      return;\n    }\n    if (data.length > this._palette.length) {\n      this.error(new Error(\"More transparent colors than palette size\"));\n      return;\n    }\n    for (let i = 0; i < data.length; i++) {\n      this._palette[i][3] = data[i];\n    }\n    this.palette(this._palette);\n  }\n\n  // for colorType 0 (grayscale) and 2 (rgb)\n  // there might be one gray/color defined as transparent\n  if (this._colorType === constants.COLORTYPE_GRAYSCALE) {\n    // grey, 2 bytes\n    this.transColor([data.readUInt16BE(0)]);\n  }\n  if (this._colorType === constants.COLORTYPE_COLOR) {\n    this.transColor([\n      data.readUInt16BE(0),\n      data.readUInt16BE(2),\n      data.readUInt16BE(4),\n    ]);\n  }\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handleGAMA = function (length) {\n  this.read(length, this._parseGAMA.bind(this));\n};\nParser.prototype._parseGAMA = function (data) {\n  this._crc.write(data);\n  this.gamma(data.readUInt32BE(0) / constants.GAMMA_DIVISION);\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handleIDAT = function (length) {\n  if (!this._emittedHeadersFinished) {\n    this._emittedHeadersFinished = true;\n    this.headersFinished();\n  }\n  this.read(-length, this._parseIDAT.bind(this, length));\n};\nParser.prototype._parseIDAT = function (length, data) {\n  this._crc.write(data);\n\n  if (\n    this._colorType === constants.COLORTYPE_PALETTE_COLOR &&\n    this._palette.length === 0\n  ) {\n    throw new Error(\"Expected palette not found\");\n  }\n\n  this.inflateData(data);\n  let leftOverLength = length - data.length;\n\n  if (leftOverLength > 0) {\n    this._handleIDAT(leftOverLength);\n  } else {\n    this._handleChunkEnd();\n  }\n};\n\nParser.prototype._handleIEND = function (length) {\n  this.read(length, this._parseIEND.bind(this));\n};\nParser.prototype._parseIEND = function (data) {\n  this._crc.write(data);\n\n  this._hasIEND = true;\n  this._handleChunkEnd();\n\n  if (this.finished) {\n    this.finished();\n  }\n};\n","\"use strict\";\n\nlet interlaceUtils = require(\"./interlace\");\n\nlet pixelBppMapper = [\n  // 0 - dummy entry\n  function () {},\n\n  // 1 - L\n  // 0: 0, 1: 0, 2: 0, 3: 0xff\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos === data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    let pixel = data[rawPos];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = 0xff;\n  },\n\n  // 2 - LA\n  // 0: 0, 1: 0, 2: 0, 3: 1\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos + 1 >= data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    let pixel = data[rawPos];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = data[rawPos + 1];\n  },\n\n  // 3 - RGB\n  // 0: 0, 1: 1, 2: 2, 3: 0xff\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos + 2 >= data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    pxData[pxPos] = data[rawPos];\n    pxData[pxPos + 1] = data[rawPos + 1];\n    pxData[pxPos + 2] = data[rawPos + 2];\n    pxData[pxPos + 3] = 0xff;\n  },\n\n  // 4 - RGBA\n  // 0: 0, 1: 1, 2: 2, 3: 3\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos + 3 >= data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    pxData[pxPos] = data[rawPos];\n    pxData[pxPos + 1] = data[rawPos + 1];\n    pxData[pxPos + 2] = data[rawPos + 2];\n    pxData[pxPos + 3] = data[rawPos + 3];\n  },\n];\n\nlet pixelBppCustomMapper = [\n  // 0 - dummy entry\n  function () {},\n\n  // 1 - L\n  // 0: 0, 1: 0, 2: 0, 3: 0xff\n  function (pxData, pixelData, pxPos, maxBit) {\n    let pixel = pixelData[0];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = maxBit;\n  },\n\n  // 2 - LA\n  // 0: 0, 1: 0, 2: 0, 3: 1\n  function (pxData, pixelData, pxPos) {\n    let pixel = pixelData[0];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = pixelData[1];\n  },\n\n  // 3 - RGB\n  // 0: 0, 1: 1, 2: 2, 3: 0xff\n  function (pxData, pixelData, pxPos, maxBit) {\n    pxData[pxPos] = pixelData[0];\n    pxData[pxPos + 1] = pixelData[1];\n    pxData[pxPos + 2] = pixelData[2];\n    pxData[pxPos + 3] = maxBit;\n  },\n\n  // 4 - RGBA\n  // 0: 0, 1: 1, 2: 2, 3: 3\n  function (pxData, pixelData, pxPos) {\n    pxData[pxPos] = pixelData[0];\n    pxData[pxPos + 1] = pixelData[1];\n    pxData[pxPos + 2] = pixelData[2];\n    pxData[pxPos + 3] = pixelData[3];\n  },\n];\n\nfunction bitRetriever(data, depth) {\n  let leftOver = [];\n  let i = 0;\n\n  function split() {\n    if (i === data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n    let byte = data[i];\n    i++;\n    let byte8, byte7, byte6, byte5, byte4, byte3, byte2, byte1;\n    switch (depth) {\n      default:\n        throw new Error(\"unrecognised depth\");\n      case 16:\n        byte2 = data[i];\n        i++;\n        leftOver.push((byte << 8) + byte2);\n        break;\n      case 4:\n        byte2 = byte & 0x0f;\n        byte1 = byte >> 4;\n        leftOver.push(byte1, byte2);\n        break;\n      case 2:\n        byte4 = byte & 3;\n        byte3 = (byte >> 2) & 3;\n        byte2 = (byte >> 4) & 3;\n        byte1 = (byte >> 6) & 3;\n        leftOver.push(byte1, byte2, byte3, byte4);\n        break;\n      case 1:\n        byte8 = byte & 1;\n        byte7 = (byte >> 1) & 1;\n        byte6 = (byte >> 2) & 1;\n        byte5 = (byte >> 3) & 1;\n        byte4 = (byte >> 4) & 1;\n        byte3 = (byte >> 5) & 1;\n        byte2 = (byte >> 6) & 1;\n        byte1 = (byte >> 7) & 1;\n        leftOver.push(byte1, byte2, byte3, byte4, byte5, byte6, byte7, byte8);\n        break;\n    }\n  }\n\n  return {\n    get: function (count) {\n      while (leftOver.length < count) {\n        split();\n      }\n      let returner = leftOver.slice(0, count);\n      leftOver = leftOver.slice(count);\n      return returner;\n    },\n    resetAfterLine: function () {\n      leftOver.length = 0;\n    },\n    end: function () {\n      if (i !== data.length) {\n        throw new Error(\"extra data found\");\n      }\n    },\n  };\n}\n\nfunction mapImage8Bit(image, pxData, getPxPos, bpp, data, rawPos) {\n  // eslint-disable-line max-params\n  let imageWidth = image.width;\n  let imageHeight = image.height;\n  let imagePass = image.index;\n  for (let y = 0; y < imageHeight; y++) {\n    for (let x = 0; x < imageWidth; x++) {\n      let pxPos = getPxPos(x, y, imagePass);\n      pixelBppMapper[bpp](pxData, data, pxPos, rawPos);\n      rawPos += bpp; //eslint-disable-line no-param-reassign\n    }\n  }\n  return rawPos;\n}\n\nfunction mapImageCustomBit(image, pxData, getPxPos, bpp, bits, maxBit) {\n  // eslint-disable-line max-params\n  let imageWidth = image.width;\n  let imageHeight = image.height;\n  let imagePass = image.index;\n  for (let y = 0; y < imageHeight; y++) {\n    for (let x = 0; x < imageWidth; x++) {\n      let pixelData = bits.get(bpp);\n      let pxPos = getPxPos(x, y, imagePass);\n      pixelBppCustomMapper[bpp](pxData, pixelData, pxPos, maxBit);\n    }\n    bits.resetAfterLine();\n  }\n}\n\nexports.dataToBitMap = function (data, bitmapInfo) {\n  let width = bitmapInfo.width;\n  let height = bitmapInfo.height;\n  let depth = bitmapInfo.depth;\n  let bpp = bitmapInfo.bpp;\n  let interlace = bitmapInfo.interlace;\n  let bits;\n\n  if (depth !== 8) {\n    bits = bitRetriever(data, depth);\n  }\n  let pxData;\n  if (depth <= 8) {\n    pxData = Buffer.alloc(width * height * 4);\n  } else {\n    pxData = new Uint16Array(width * height * 4);\n  }\n  let maxBit = Math.pow(2, depth) - 1;\n  let rawPos = 0;\n  let images;\n  let getPxPos;\n\n  if (interlace) {\n    images = interlaceUtils.getImagePasses(width, height);\n    getPxPos = interlaceUtils.getInterlaceIterator(width, height);\n  } else {\n    let nonInterlacedPxPos = 0;\n    getPxPos = function () {\n      let returner = nonInterlacedPxPos;\n      nonInterlacedPxPos += 4;\n      return returner;\n    };\n    images = [{ width: width, height: height }];\n  }\n\n  for (let imageIndex = 0; imageIndex < images.length; imageIndex++) {\n    if (depth === 8) {\n      rawPos = mapImage8Bit(\n        images[imageIndex],\n        pxData,\n        getPxPos,\n        bpp,\n        data,\n        rawPos\n      );\n    } else {\n      mapImageCustomBit(\n        images[imageIndex],\n        pxData,\n        getPxPos,\n        bpp,\n        bits,\n        maxBit\n      );\n    }\n  }\n  if (depth === 8) {\n    if (rawPos !== data.length) {\n      throw new Error(\"extra data found\");\n    }\n  } else {\n    bits.end();\n  }\n\n  return pxData;\n};\n","\"use strict\";\n\nfunction dePalette(indata, outdata, width, height, palette) {\n  let pxPos = 0;\n  // use values from palette\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      let color = palette[indata[pxPos]];\n\n      if (!color) {\n        throw new Error(\"index \" + indata[pxPos] + \" not in palette\");\n      }\n\n      for (let i = 0; i < 4; i++) {\n        outdata[pxPos + i] = color[i];\n      }\n      pxPos += 4;\n    }\n  }\n}\n\nfunction replaceTransparentColor(indata, outdata, width, height, transColor) {\n  let pxPos = 0;\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      let makeTrans = false;\n\n      if (transColor.length === 1) {\n        if (transColor[0] === indata[pxPos]) {\n          makeTrans = true;\n        }\n      } else if (\n        transColor[0] === indata[pxPos] &&\n        transColor[1] === indata[pxPos + 1] &&\n        transColor[2] === indata[pxPos + 2]\n      ) {\n        makeTrans = true;\n      }\n      if (makeTrans) {\n        for (let i = 0; i < 4; i++) {\n          outdata[pxPos + i] = 0;\n        }\n      }\n      pxPos += 4;\n    }\n  }\n}\n\nfunction scaleDepth(indata, outdata, width, height, depth) {\n  let maxOutSample = 255;\n  let maxInSample = Math.pow(2, depth) - 1;\n  let pxPos = 0;\n\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      for (let i = 0; i < 4; i++) {\n        outdata[pxPos + i] = Math.floor(\n          (indata[pxPos + i] * maxOutSample) / maxInSample + 0.5\n        );\n      }\n      pxPos += 4;\n    }\n  }\n}\n\nmodule.exports = function (indata, imageData, skipRescale = false) {\n  let depth = imageData.depth;\n  let width = imageData.width;\n  let height = imageData.height;\n  let colorType = imageData.colorType;\n  let transColor = imageData.transColor;\n  let palette = imageData.palette;\n\n  let outdata = indata; // only different for 16 bits\n\n  if (colorType === 3) {\n    // paletted\n    dePalette(indata, outdata, width, height, palette);\n  } else {\n    if (transColor) {\n      replaceTransparentColor(indata, outdata, width, height, transColor);\n    }\n    // if it needs scaling\n    if (depth !== 8 && !skipRescale) {\n      // if we need to change the buffer size\n      if (depth === 16) {\n        outdata = Buffer.alloc(width * height * 4);\n      }\n      scaleDepth(indata, outdata, width, height, depth);\n    }\n  }\n  return outdata;\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet zlib = require(\"zlib\");\nlet ChunkStream = require(\"./chunkstream\");\nlet FilterAsync = require(\"./filter-parse-async\");\nlet Parser = require(\"./parser\");\nlet bitmapper = require(\"./bitmapper\");\nlet formatNormaliser = require(\"./format-normaliser\");\n\nlet ParserAsync = (module.exports = function (options) {\n  ChunkStream.call(this);\n\n  this._parser = new Parser(options, {\n    read: this.read.bind(this),\n    error: this._handleError.bind(this),\n    metadata: this._handleMetaData.bind(this),\n    gamma: this.emit.bind(this, \"gamma\"),\n    palette: this._handlePalette.bind(this),\n    transColor: this._handleTransColor.bind(this),\n    finished: this._finished.bind(this),\n    inflateData: this._inflateData.bind(this),\n    simpleTransparency: this._simpleTransparency.bind(this),\n    headersFinished: this._headersFinished.bind(this),\n  });\n  this._options = options;\n  this.writable = true;\n\n  this._parser.start();\n});\nutil.inherits(ParserAsync, ChunkStream);\n\nParserAsync.prototype._handleError = function (err) {\n  this.emit(\"error\", err);\n\n  this.writable = false;\n\n  this.destroy();\n\n  if (this._inflate && this._inflate.destroy) {\n    this._inflate.destroy();\n  }\n\n  if (this._filter) {\n    this._filter.destroy();\n    // For backward compatibility with Node 7 and below.\n    // Suppress errors due to _inflate calling write() even after\n    // it's destroy()'ed.\n    this._filter.on(\"error\", function () {});\n  }\n\n  this.errord = true;\n};\n\nParserAsync.prototype._inflateData = function (data) {\n  if (!this._inflate) {\n    if (this._bitmapInfo.interlace) {\n      this._inflate = zlib.createInflate();\n\n      this._inflate.on(\"error\", this.emit.bind(this, \"error\"));\n      this._filter.on(\"complete\", this._complete.bind(this));\n\n      this._inflate.pipe(this._filter);\n    } else {\n      let rowSize =\n        ((this._bitmapInfo.width *\n          this._bitmapInfo.bpp *\n          this._bitmapInfo.depth +\n          7) >>\n          3) +\n        1;\n      let imageSize = rowSize * this._bitmapInfo.height;\n      let chunkSize = Math.max(imageSize, zlib.Z_MIN_CHUNK);\n\n      this._inflate = zlib.createInflate({ chunkSize: chunkSize });\n      let leftToInflate = imageSize;\n\n      let emitError = this.emit.bind(this, \"error\");\n      this._inflate.on(\"error\", function (err) {\n        if (!leftToInflate) {\n          return;\n        }\n\n        emitError(err);\n      });\n      this._filter.on(\"complete\", this._complete.bind(this));\n\n      let filterWrite = this._filter.write.bind(this._filter);\n      this._inflate.on(\"data\", function (chunk) {\n        if (!leftToInflate) {\n          return;\n        }\n\n        if (chunk.length > leftToInflate) {\n          chunk = chunk.slice(0, leftToInflate);\n        }\n\n        leftToInflate -= chunk.length;\n\n        filterWrite(chunk);\n      });\n\n      this._inflate.on(\"end\", this._filter.end.bind(this._filter));\n    }\n  }\n  this._inflate.write(data);\n};\n\nParserAsync.prototype._handleMetaData = function (metaData) {\n  this._metaData = metaData;\n  this._bitmapInfo = Object.create(metaData);\n\n  this._filter = new FilterAsync(this._bitmapInfo);\n};\n\nParserAsync.prototype._handleTransColor = function (transColor) {\n  this._bitmapInfo.transColor = transColor;\n};\n\nParserAsync.prototype._handlePalette = function (palette) {\n  this._bitmapInfo.palette = palette;\n};\n\nParserAsync.prototype._simpleTransparency = function () {\n  this._metaData.alpha = true;\n};\n\nParserAsync.prototype._headersFinished = function () {\n  // Up until this point, we don't know if we have a tRNS chunk (alpha)\n  // so we can't emit metadata any earlier\n  this.emit(\"metadata\", this._metaData);\n};\n\nParserAsync.prototype._finished = function () {\n  if (this.errord) {\n    return;\n  }\n\n  if (!this._inflate) {\n    this.emit(\"error\", \"No Inflate block\");\n  } else {\n    // no more data to inflate\n    this._inflate.end();\n  }\n};\n\nParserAsync.prototype._complete = function (filteredData) {\n  if (this.errord) {\n    return;\n  }\n\n  let normalisedBitmapData;\n\n  try {\n    let bitmapData = bitmapper.dataToBitMap(filteredData, this._bitmapInfo);\n\n    normalisedBitmapData = formatNormaliser(\n      bitmapData,\n      this._bitmapInfo,\n      this._options.skipRescale\n    );\n    bitmapData = null;\n  } catch (ex) {\n    this._handleError(ex);\n    return;\n  }\n\n  this.emit(\"parsed\", normalisedBitmapData);\n};\n","\"use strict\";\n\nlet constants = require(\"./constants\");\n\nmodule.exports = function (dataIn, width, height, options) {\n  let outHasAlpha =\n    [constants.COLORTYPE_COLOR_ALPHA, constants.COLORTYPE_ALPHA].indexOf(\n      options.colorType\n    ) !== -1;\n  if (options.colorType === options.inputColorType) {\n    let bigEndian = (function () {\n      let buffer = new ArrayBuffer(2);\n      new DataView(buffer).setInt16(0, 256, true /* littleEndian */);\n      // Int16Array uses the platform's endianness.\n      return new Int16Array(buffer)[0] !== 256;\n    })();\n    // If no need to convert to grayscale and alpha is present/absent in both, take a fast route\n    if (options.bitDepth === 8 || (options.bitDepth === 16 && bigEndian)) {\n      return dataIn;\n    }\n  }\n\n  // map to a UInt16 array if data is 16bit, fix endianness below\n  let data = options.bitDepth !== 16 ? dataIn : new Uint16Array(dataIn.buffer);\n\n  let maxValue = 255;\n  let inBpp = constants.COLORTYPE_TO_BPP_MAP[options.inputColorType];\n  if (inBpp === 4 && !options.inputHasAlpha) {\n    inBpp = 3;\n  }\n  let outBpp = constants.COLORTYPE_TO_BPP_MAP[options.colorType];\n  if (options.bitDepth === 16) {\n    maxValue = 65535;\n    outBpp *= 2;\n  }\n  let outData = Buffer.alloc(width * height * outBpp);\n\n  let inIndex = 0;\n  let outIndex = 0;\n\n  let bgColor = options.bgColor || {};\n  if (bgColor.red === undefined) {\n    bgColor.red = maxValue;\n  }\n  if (bgColor.green === undefined) {\n    bgColor.green = maxValue;\n  }\n  if (bgColor.blue === undefined) {\n    bgColor.blue = maxValue;\n  }\n\n  function getRGBA() {\n    let red;\n    let green;\n    let blue;\n    let alpha = maxValue;\n    switch (options.inputColorType) {\n      case constants.COLORTYPE_COLOR_ALPHA:\n        alpha = data[inIndex + 3];\n        red = data[inIndex];\n        green = data[inIndex + 1];\n        blue = data[inIndex + 2];\n        break;\n      case constants.COLORTYPE_COLOR:\n        red = data[inIndex];\n        green = data[inIndex + 1];\n        blue = data[inIndex + 2];\n        break;\n      case constants.COLORTYPE_ALPHA:\n        alpha = data[inIndex + 1];\n        red = data[inIndex];\n        green = red;\n        blue = red;\n        break;\n      case constants.COLORTYPE_GRAYSCALE:\n        red = data[inIndex];\n        green = red;\n        blue = red;\n        break;\n      default:\n        throw new Error(\n          \"input color type:\" +\n            options.inputColorType +\n            \" is not supported at present\"\n        );\n    }\n\n    if (options.inputHasAlpha) {\n      if (!outHasAlpha) {\n        alpha /= maxValue;\n        red = Math.min(\n          Math.max(Math.round((1 - alpha) * bgColor.red + alpha * red), 0),\n          maxValue\n        );\n        green = Math.min(\n          Math.max(Math.round((1 - alpha) * bgColor.green + alpha * green), 0),\n          maxValue\n        );\n        blue = Math.min(\n          Math.max(Math.round((1 - alpha) * bgColor.blue + alpha * blue), 0),\n          maxValue\n        );\n      }\n    }\n    return { red: red, green: green, blue: blue, alpha: alpha };\n  }\n\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      let rgba = getRGBA(data, inIndex);\n\n      switch (options.colorType) {\n        case constants.COLORTYPE_COLOR_ALPHA:\n        case constants.COLORTYPE_COLOR:\n          if (options.bitDepth === 8) {\n            outData[outIndex] = rgba.red;\n            outData[outIndex + 1] = rgba.green;\n            outData[outIndex + 2] = rgba.blue;\n            if (outHasAlpha) {\n              outData[outIndex + 3] = rgba.alpha;\n            }\n          } else {\n            outData.writeUInt16BE(rgba.red, outIndex);\n            outData.writeUInt16BE(rgba.green, outIndex + 2);\n            outData.writeUInt16BE(rgba.blue, outIndex + 4);\n            if (outHasAlpha) {\n              outData.writeUInt16BE(rgba.alpha, outIndex + 6);\n            }\n          }\n          break;\n        case constants.COLORTYPE_ALPHA:\n        case constants.COLORTYPE_GRAYSCALE: {\n          // Convert to grayscale and alpha\n          let grayscale = (rgba.red + rgba.green + rgba.blue) / 3;\n          if (options.bitDepth === 8) {\n            outData[outIndex] = grayscale;\n            if (outHasAlpha) {\n              outData[outIndex + 1] = rgba.alpha;\n            }\n          } else {\n            outData.writeUInt16BE(grayscale, outIndex);\n            if (outHasAlpha) {\n              outData.writeUInt16BE(rgba.alpha, outIndex + 2);\n            }\n          }\n          break;\n        }\n        default:\n          throw new Error(\"unrecognised color Type \" + options.colorType);\n      }\n\n      inIndex += inBpp;\n      outIndex += outBpp;\n    }\n  }\n\n  return outData;\n};\n","\"use strict\";\n\nlet paethPredictor = require(\"./paeth-predictor\");\n\nfunction filterNone(pxData, pxPos, byteWidth, rawData, rawPos) {\n  for (let x = 0; x < byteWidth; x++) {\n    rawData[rawPos + x] = pxData[pxPos + x];\n  }\n}\n\nfunction filterSumNone(pxData, pxPos, byteWidth) {\n  let sum = 0;\n  let length = pxPos + byteWidth;\n\n  for (let i = pxPos; i < length; i++) {\n    sum += Math.abs(pxData[i]);\n  }\n  return sum;\n}\n\nfunction filterSub(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let val = pxData[pxPos + x] - left;\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumSub(pxData, pxPos, byteWidth, bpp) {\n  let sum = 0;\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let val = pxData[pxPos + x] - left;\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nfunction filterUp(pxData, pxPos, byteWidth, rawData, rawPos) {\n  for (let x = 0; x < byteWidth; x++) {\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let val = pxData[pxPos + x] - up;\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumUp(pxData, pxPos, byteWidth) {\n  let sum = 0;\n  let length = pxPos + byteWidth;\n  for (let x = pxPos; x < length; x++) {\n    let up = pxPos > 0 ? pxData[x - byteWidth] : 0;\n    let val = pxData[x] - up;\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nfunction filterAvg(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let val = pxData[pxPos + x] - ((left + up) >> 1);\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumAvg(pxData, pxPos, byteWidth, bpp) {\n  let sum = 0;\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let val = pxData[pxPos + x] - ((left + up) >> 1);\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nfunction filterPaeth(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let upleft =\n      pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;\n    let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumPaeth(pxData, pxPos, byteWidth, bpp) {\n  let sum = 0;\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let upleft =\n      pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;\n    let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nlet filters = {\n  0: filterNone,\n  1: filterSub,\n  2: filterUp,\n  3: filterAvg,\n  4: filterPaeth,\n};\n\nlet filterSums = {\n  0: filterSumNone,\n  1: filterSumSub,\n  2: filterSumUp,\n  3: filterSumAvg,\n  4: filterSumPaeth,\n};\n\nmodule.exports = function (pxData, width, height, options, bpp) {\n  let filterTypes;\n  if (!(\"filterType\" in options) || options.filterType === -1) {\n    filterTypes = [0, 1, 2, 3, 4];\n  } else if (typeof options.filterType === \"number\") {\n    filterTypes = [options.filterType];\n  } else {\n    throw new Error(\"unrecognised filter types\");\n  }\n\n  if (options.bitDepth === 16) {\n    bpp *= 2;\n  }\n  let byteWidth = width * bpp;\n  let rawPos = 0;\n  let pxPos = 0;\n  let rawData = Buffer.alloc((byteWidth + 1) * height);\n\n  let sel = filterTypes[0];\n\n  for (let y = 0; y < height; y++) {\n    if (filterTypes.length > 1) {\n      // find best filter for this line (with lowest sum of values)\n      let min = Infinity;\n\n      for (let i = 0; i < filterTypes.length; i++) {\n        let sum = filterSums[filterTypes[i]](pxData, pxPos, byteWidth, bpp);\n        if (sum < min) {\n          sel = filterTypes[i];\n          min = sum;\n        }\n      }\n    }\n\n    rawData[rawPos] = sel;\n    rawPos++;\n    filters[sel](pxData, pxPos, byteWidth, rawData, rawPos, bpp);\n    rawPos += byteWidth;\n    pxPos += byteWidth;\n  }\n  return rawData;\n};\n","\"use strict\";\n\nlet constants = require(\"./constants\");\nlet CrcStream = require(\"./crc\");\nlet bitPacker = require(\"./bitpacker\");\nlet filter = require(\"./filter-pack\");\nlet zlib = require(\"zlib\");\n\nlet Packer = (module.exports = function (options) {\n  this._options = options;\n\n  options.deflateChunkSize = options.deflateChunkSize || 32 * 1024;\n  options.deflateLevel =\n    options.deflateLevel != null ? options.deflateLevel : 9;\n  options.deflateStrategy =\n    options.deflateStrategy != null ? options.deflateStrategy : 3;\n  options.inputHasAlpha =\n    options.inputHasAlpha != null ? options.inputHasAlpha : true;\n  options.deflateFactory = options.deflateFactory || zlib.createDeflate;\n  options.bitDepth = options.bitDepth || 8;\n  // This is outputColorType\n  options.colorType =\n    typeof options.colorType === \"number\"\n      ? options.colorType\n      : constants.COLORTYPE_COLOR_ALPHA;\n  options.inputColorType =\n    typeof options.inputColorType === \"number\"\n      ? options.inputColorType\n      : constants.COLORTYPE_COLOR_ALPHA;\n\n  if (\n    [\n      constants.COLORTYPE_GRAYSCALE,\n      constants.COLORTYPE_COLOR,\n      constants.COLORTYPE_COLOR_ALPHA,\n      constants.COLORTYPE_ALPHA,\n    ].indexOf(options.colorType) === -1\n  ) {\n    throw new Error(\n      \"option color type:\" + options.colorType + \" is not supported at present\"\n    );\n  }\n  if (\n    [\n      constants.COLORTYPE_GRAYSCALE,\n      constants.COLORTYPE_COLOR,\n      constants.COLORTYPE_COLOR_ALPHA,\n      constants.COLORTYPE_ALPHA,\n    ].indexOf(options.inputColorType) === -1\n  ) {\n    throw new Error(\n      \"option input color type:\" +\n        options.inputColorType +\n        \" is not supported at present\"\n    );\n  }\n  if (options.bitDepth !== 8 && options.bitDepth !== 16) {\n    throw new Error(\n      \"option bit depth:\" + options.bitDepth + \" is not supported at present\"\n    );\n  }\n});\n\nPacker.prototype.getDeflateOptions = function () {\n  return {\n    chunkSize: this._options.deflateChunkSize,\n    level: this._options.deflateLevel,\n    strategy: this._options.deflateStrategy,\n  };\n};\n\nPacker.prototype.createDeflate = function () {\n  return this._options.deflateFactory(this.getDeflateOptions());\n};\n\nPacker.prototype.filterData = function (data, width, height) {\n  // convert to correct format for filtering (e.g. right bpp and bit depth)\n  let packedData = bitPacker(data, width, height, this._options);\n\n  // filter pixel data\n  let bpp = constants.COLORTYPE_TO_BPP_MAP[this._options.colorType];\n  let filteredData = filter(packedData, width, height, this._options, bpp);\n  return filteredData;\n};\n\nPacker.prototype._packChunk = function (type, data) {\n  let len = data ? data.length : 0;\n  let buf = Buffer.alloc(len + 12);\n\n  buf.writeUInt32BE(len, 0);\n  buf.writeUInt32BE(type, 4);\n\n  if (data) {\n    data.copy(buf, 8);\n  }\n\n  buf.writeInt32BE(\n    CrcStream.crc32(buf.slice(4, buf.length - 4)),\n    buf.length - 4\n  );\n  return buf;\n};\n\nPacker.prototype.packGAMA = function (gamma) {\n  let buf = Buffer.alloc(4);\n  buf.writeUInt32BE(Math.floor(gamma * constants.GAMMA_DIVISION), 0);\n  return this._packChunk(constants.TYPE_gAMA, buf);\n};\n\nPacker.prototype.packIHDR = function (width, height) {\n  let buf = Buffer.alloc(13);\n  buf.writeUInt32BE(width, 0);\n  buf.writeUInt32BE(height, 4);\n  buf[8] = this._options.bitDepth; // Bit depth\n  buf[9] = this._options.colorType; // colorType\n  buf[10] = 0; // compression\n  buf[11] = 0; // filter\n  buf[12] = 0; // interlace\n\n  return this._packChunk(constants.TYPE_IHDR, buf);\n};\n\nPacker.prototype.packIDAT = function (data) {\n  return this._packChunk(constants.TYPE_IDAT, data);\n};\n\nPacker.prototype.packIEND = function () {\n  return this._packChunk(constants.TYPE_IEND, null);\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\nlet constants = require(\"./constants\");\nlet Packer = require(\"./packer\");\n\nlet PackerAsync = (module.exports = function (opt) {\n  Stream.call(this);\n\n  let options = opt || {};\n\n  this._packer = new Packer(options);\n  this._deflate = this._packer.createDeflate();\n\n  this.readable = true;\n});\nutil.inherits(PackerAsync, Stream);\n\nPackerAsync.prototype.pack = function (data, width, height, gamma) {\n  // Signature\n  this.emit(\"data\", Buffer.from(constants.PNG_SIGNATURE));\n  this.emit(\"data\", this._packer.packIHDR(width, height));\n\n  if (gamma) {\n    this.emit(\"data\", this._packer.packGAMA(gamma));\n  }\n\n  let filteredData = this._packer.filterData(data, width, height);\n\n  // compress it\n  this._deflate.on(\"error\", this.emit.bind(this, \"error\"));\n\n  this._deflate.on(\n    \"data\",\n    function (compressedData) {\n      this.emit(\"data\", this._packer.packIDAT(compressedData));\n    }.bind(this)\n  );\n\n  this._deflate.on(\n    \"end\",\n    function () {\n      this.emit(\"data\", this._packer.packIEND());\n      this.emit(\"end\");\n    }.bind(this)\n  );\n\n  this._deflate.end(filteredData);\n};\n","\"use strict\";\n\nlet assert = require(\"assert\").ok;\nlet zlib = require(\"zlib\");\nlet util = require(\"util\");\n\nlet kMaxLength = require(\"buffer\").kMaxLength;\n\nfunction Inflate(opts) {\n  if (!(this instanceof Inflate)) {\n    return new Inflate(opts);\n  }\n\n  if (opts && opts.chunkSize < zlib.Z_MIN_CHUNK) {\n    opts.chunkSize = zlib.Z_MIN_CHUNK;\n  }\n\n  zlib.Inflate.call(this, opts);\n\n  // Node 8 --> 9 compatibility check\n  this._offset = this._offset === undefined ? this._outOffset : this._offset;\n  this._buffer = this._buffer || this._outBuffer;\n\n  if (opts && opts.maxLength != null) {\n    this._maxLength = opts.maxLength;\n  }\n}\n\nfunction createInflate(opts) {\n  return new Inflate(opts);\n}\n\nfunction _close(engine, callback) {\n  if (callback) {\n    process.nextTick(callback);\n  }\n\n  // Caller may invoke .close after a zlib error (which will null _handle).\n  if (!engine._handle) {\n    return;\n  }\n\n  engine._handle.close();\n  engine._handle = null;\n}\n\nInflate.prototype._processChunk = function (chunk, flushFlag, asyncCb) {\n  if (typeof asyncCb === \"function\") {\n    return zlib.Inflate._processChunk.call(this, chunk, flushFlag, asyncCb);\n  }\n\n  let self = this;\n\n  let availInBefore = chunk && chunk.length;\n  let availOutBefore = this._chunkSize - this._offset;\n  let leftToInflate = this._maxLength;\n  let inOff = 0;\n\n  let buffers = [];\n  let nread = 0;\n\n  let error;\n  this.on(\"error\", function (err) {\n    error = err;\n  });\n\n  function handleChunk(availInAfter, availOutAfter) {\n    if (self._hadError) {\n      return;\n    }\n\n    let have = availOutBefore - availOutAfter;\n    assert(have >= 0, \"have should not go down\");\n\n    if (have > 0) {\n      let out = self._buffer.slice(self._offset, self._offset + have);\n      self._offset += have;\n\n      if (out.length > leftToInflate) {\n        out = out.slice(0, leftToInflate);\n      }\n\n      buffers.push(out);\n      nread += out.length;\n      leftToInflate -= out.length;\n\n      if (leftToInflate === 0) {\n        return false;\n      }\n    }\n\n    if (availOutAfter === 0 || self._offset >= self._chunkSize) {\n      availOutBefore = self._chunkSize;\n      self._offset = 0;\n      self._buffer = Buffer.allocUnsafe(self._chunkSize);\n    }\n\n    if (availOutAfter === 0) {\n      inOff += availInBefore - availInAfter;\n      availInBefore = availInAfter;\n\n      return true;\n    }\n\n    return false;\n  }\n\n  assert(this._handle, \"zlib binding closed\");\n  let res;\n  do {\n    res = this._handle.writeSync(\n      flushFlag,\n      chunk, // in\n      inOff, // in_off\n      availInBefore, // in_len\n      this._buffer, // out\n      this._offset, //out_off\n      availOutBefore\n    ); // out_len\n    // Node 8 --> 9 compatibility check\n    res = res || this._writeState;\n  } while (!this._hadError && handleChunk(res[0], res[1]));\n\n  if (this._hadError) {\n    throw error;\n  }\n\n  if (nread >= kMaxLength) {\n    _close(this);\n    throw new RangeError(\n      \"Cannot create final Buffer. It would be larger than 0x\" +\n        kMaxLength.toString(16) +\n        \" bytes\"\n    );\n  }\n\n  let buf = Buffer.concat(buffers, nread);\n  _close(this);\n\n  return buf;\n};\n\nutil.inherits(Inflate, zlib.Inflate);\n\nfunction zlibBufferSync(engine, buffer) {\n  if (typeof buffer === \"string\") {\n    buffer = Buffer.from(buffer);\n  }\n  if (!(buffer instanceof Buffer)) {\n    throw new TypeError(\"Not a string or buffer\");\n  }\n\n  let flushFlag = engine._finishFlushFlag;\n  if (flushFlag == null) {\n    flushFlag = zlib.Z_FINISH;\n  }\n\n  return engine._processChunk(buffer, flushFlag);\n}\n\nfunction inflateSync(buffer, opts) {\n  return zlibBufferSync(new Inflate(opts), buffer);\n}\n\nmodule.exports = exports = inflateSync;\nexports.Inflate = Inflate;\nexports.createInflate = createInflate;\nexports.inflateSync = inflateSync;\n","\"use strict\";\n\nlet SyncReader = (module.exports = function (buffer) {\n  this._buffer = buffer;\n  this._reads = [];\n});\n\nSyncReader.prototype.read = function (length, callback) {\n  this._reads.push({\n    length: Math.abs(length), // if length < 0 then at most this length\n    allowLess: length < 0,\n    func: callback,\n  });\n};\n\nSyncReader.prototype.process = function () {\n  // as long as there is any data and read requests\n  while (this._reads.length > 0 && this._buffer.length) {\n    let read = this._reads[0];\n\n    if (\n      this._buffer.length &&\n      (this._buffer.length >= read.length || read.allowLess)\n    ) {\n      // ok there is any data so that we can satisfy this request\n      this._reads.shift(); // == read\n\n      let buf = this._buffer;\n\n      this._buffer = buf.slice(read.length);\n\n      read.func.call(this, buf.slice(0, read.length));\n    } else {\n      break;\n    }\n  }\n\n  if (this._reads.length > 0) {\n    throw new Error(\"There are some read requests waitng on finished stream\");\n  }\n\n  if (this._buffer.length > 0) {\n    throw new Error(\"unrecognised content at end of stream\");\n  }\n};\n","\"use strict\";\n\nlet SyncReader = require(\"./sync-reader\");\nlet Filter = require(\"./filter-parse\");\n\nexports.process = function (inBuffer, bitmapInfo) {\n  let outBuffers = [];\n  let reader = new SyncReader(inBuffer);\n  let filter = new Filter(bitmapInfo, {\n    read: reader.read.bind(reader),\n    write: function (bufferPart) {\n      outBuffers.push(bufferPart);\n    },\n    complete: function () {},\n  });\n\n  filter.start();\n  reader.process();\n\n  return Buffer.concat(outBuffers);\n};\n","\"use strict\";\n\nlet hasSyncZlib = true;\nlet zlib = require(\"zlib\");\nlet inflateSync = require(\"./sync-inflate\");\nif (!zlib.deflateSync) {\n  hasSyncZlib = false;\n}\nlet SyncReader = require(\"./sync-reader\");\nlet FilterSync = require(\"./filter-parse-sync\");\nlet Parser = require(\"./parser\");\nlet bitmapper = require(\"./bitmapper\");\nlet formatNormaliser = require(\"./format-normaliser\");\n\nmodule.exports = function (buffer, options) {\n  if (!hasSyncZlib) {\n    throw new Error(\n      \"To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0\"\n    );\n  }\n\n  let err;\n  function handleError(_err_) {\n    err = _err_;\n  }\n\n  let metaData;\n  function handleMetaData(_metaData_) {\n    metaData = _metaData_;\n  }\n\n  function handleTransColor(transColor) {\n    metaData.transColor = transColor;\n  }\n\n  function handlePalette(palette) {\n    metaData.palette = palette;\n  }\n\n  function handleSimpleTransparency() {\n    metaData.alpha = true;\n  }\n\n  let gamma;\n  function handleGamma(_gamma_) {\n    gamma = _gamma_;\n  }\n\n  let inflateDataList = [];\n  function handleInflateData(inflatedData) {\n    inflateDataList.push(inflatedData);\n  }\n\n  let reader = new SyncReader(buffer);\n\n  let parser = new Parser(options, {\n    read: reader.read.bind(reader),\n    error: handleError,\n    metadata: handleMetaData,\n    gamma: handleGamma,\n    palette: handlePalette,\n    transColor: handleTransColor,\n    inflateData: handleInflateData,\n    simpleTransparency: handleSimpleTransparency,\n  });\n\n  parser.start();\n  reader.process();\n\n  if (err) {\n    throw err;\n  }\n\n  //join together the inflate datas\n  let inflateData = Buffer.concat(inflateDataList);\n  inflateDataList.length = 0;\n\n  let inflatedData;\n  if (metaData.interlace) {\n    inflatedData = zlib.inflateSync(inflateData);\n  } else {\n    let rowSize =\n      ((metaData.width * metaData.bpp * metaData.depth + 7) >> 3) + 1;\n    let imageSize = rowSize * metaData.height;\n    inflatedData = inflateSync(inflateData, {\n      chunkSize: imageSize,\n      maxLength: imageSize,\n    });\n  }\n  inflateData = null;\n\n  if (!inflatedData || !inflatedData.length) {\n    throw new Error(\"bad png - invalid inflate data response\");\n  }\n\n  let unfilteredData = FilterSync.process(inflatedData, metaData);\n  inflateData = null;\n\n  let bitmapData = bitmapper.dataToBitMap(unfilteredData, metaData);\n  unfilteredData = null;\n\n  let normalisedBitmapData = formatNormaliser(\n    bitmapData,\n    metaData,\n    options.skipRescale\n  );\n\n  metaData.data = normalisedBitmapData;\n  metaData.gamma = gamma || 0;\n\n  return metaData;\n};\n","\"use strict\";\n\nlet hasSyncZlib = true;\nlet zlib = require(\"zlib\");\nif (!zlib.deflateSync) {\n  hasSyncZlib = false;\n}\nlet constants = require(\"./constants\");\nlet Packer = require(\"./packer\");\n\nmodule.exports = function (metaData, opt) {\n  if (!hasSyncZlib) {\n    throw new Error(\n      \"To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0\"\n    );\n  }\n\n  let options = opt || {};\n\n  let packer = new Packer(options);\n\n  let chunks = [];\n\n  // Signature\n  chunks.push(Buffer.from(constants.PNG_SIGNATURE));\n\n  // Header\n  chunks.push(packer.packIHDR(metaData.width, metaData.height));\n\n  if (metaData.gamma) {\n    chunks.push(packer.packGAMA(metaData.gamma));\n  }\n\n  let filteredData = packer.filterData(\n    metaData.data,\n    metaData.width,\n    metaData.height\n  );\n\n  // compress it\n  let compressedData = zlib.deflateSync(\n    filteredData,\n    packer.getDeflateOptions()\n  );\n  filteredData = null;\n\n  if (!compressedData || !compressedData.length) {\n    throw new Error(\"bad png - invalid compressed data response\");\n  }\n  chunks.push(packer.packIDAT(compressedData));\n\n  // End\n  chunks.push(packer.packIEND());\n\n  return Buffer.concat(chunks);\n};\n","\"use strict\";\n\nlet parse = require(\"./parser-sync\");\nlet pack = require(\"./packer-sync\");\n\nexports.read = function (buffer, options) {\n  return parse(buffer, options || {});\n};\n\nexports.write = function (png, options) {\n  return pack(png, options);\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\nlet Parser = require(\"./parser-async\");\nlet Packer = require(\"./packer-async\");\nlet PNGSync = require(\"./png-sync\");\n\nlet PNG = (exports.PNG = function (options) {\n  Stream.call(this);\n\n  options = options || {}; // eslint-disable-line no-param-reassign\n\n  // coerce pixel dimensions to integers (also coerces undefined -> 0):\n  this.width = options.width | 0;\n  this.height = options.height | 0;\n\n  this.data =\n    this.width > 0 && this.height > 0\n      ? Buffer.alloc(4 * this.width * this.height)\n      : null;\n\n  if (options.fill && this.data) {\n    this.data.fill(0);\n  }\n\n  this.gamma = 0;\n  this.readable = this.writable = true;\n\n  this._parser = new Parser(options);\n\n  this._parser.on(\"error\", this.emit.bind(this, \"error\"));\n  this._parser.on(\"close\", this._handleClose.bind(this));\n  this._parser.on(\"metadata\", this._metadata.bind(this));\n  this._parser.on(\"gamma\", this._gamma.bind(this));\n  this._parser.on(\n    \"parsed\",\n    function (data) {\n      this.data = data;\n      this.emit(\"parsed\", data);\n    }.bind(this)\n  );\n\n  this._packer = new Packer(options);\n  this._packer.on(\"data\", this.emit.bind(this, \"data\"));\n  this._packer.on(\"end\", this.emit.bind(this, \"end\"));\n  this._parser.on(\"close\", this._handleClose.bind(this));\n  this._packer.on(\"error\", this.emit.bind(this, \"error\"));\n});\nutil.inherits(PNG, Stream);\n\nPNG.sync = PNGSync;\n\nPNG.prototype.pack = function () {\n  if (!this.data || !this.data.length) {\n    this.emit(\"error\", \"No data provided\");\n    return this;\n  }\n\n  process.nextTick(\n    function () {\n      this._packer.pack(this.data, this.width, this.height, this.gamma);\n    }.bind(this)\n  );\n\n  return this;\n};\n\nPNG.prototype.parse = function (data, callback) {\n  if (callback) {\n    let onParsed, onError;\n\n    onParsed = function (parsedData) {\n      this.removeListener(\"error\", onError);\n\n      this.data = parsedData;\n      callback(null, this);\n    }.bind(this);\n\n    onError = function (err) {\n      this.removeListener(\"parsed\", onParsed);\n\n      callback(err, null);\n    }.bind(this);\n\n    this.once(\"parsed\", onParsed);\n    this.once(\"error\", onError);\n  }\n\n  this.end(data);\n  return this;\n};\n\nPNG.prototype.write = function (data) {\n  this._parser.write(data);\n  return true;\n};\n\nPNG.prototype.end = function (data) {\n  this._parser.end(data);\n};\n\nPNG.prototype._metadata = function (metadata) {\n  this.width = metadata.width;\n  this.height = metadata.height;\n\n  this.emit(\"metadata\", metadata);\n};\n\nPNG.prototype._gamma = function (gamma) {\n  this.gamma = gamma;\n};\n\nPNG.prototype._handleClose = function () {\n  if (!this._parser.writable && !this._packer.readable) {\n    this.emit(\"close\");\n  }\n};\n\nPNG.bitblt = function (src, dst, srcX, srcY, width, height, deltaX, deltaY) {\n  // eslint-disable-line max-params\n  // coerce pixel dimensions to integers (also coerces undefined -> 0):\n  /* eslint-disable no-param-reassign */\n  srcX |= 0;\n  srcY |= 0;\n  width |= 0;\n  height |= 0;\n  deltaX |= 0;\n  deltaY |= 0;\n  /* eslint-enable no-param-reassign */\n\n  if (\n    srcX > src.width ||\n    srcY > src.height ||\n    srcX + width > src.width ||\n    srcY + height > src.height\n  ) {\n    throw new Error(\"bitblt reading outside image\");\n  }\n\n  if (\n    deltaX > dst.width ||\n    deltaY > dst.height ||\n    deltaX + width > dst.width ||\n    deltaY + height > dst.height\n  ) {\n    throw new Error(\"bitblt writing outside image\");\n  }\n\n  for (let y = 0; y < height; y++) {\n    src.data.copy(\n      dst.data,\n      ((deltaY + y) * dst.width + deltaX) << 2,\n      ((srcY + y) * src.width + srcX) << 2,\n      ((srcY + y) * src.width + srcX + width) << 2\n    );\n  }\n};\n\nPNG.prototype.bitblt = function (\n  dst,\n  srcX,\n  srcY,\n  width,\n  height,\n  deltaX,\n  deltaY\n) {\n  // eslint-disable-line max-params\n\n  PNG.bitblt(this, dst, srcX, srcY, width, height, deltaX, deltaY);\n  return this;\n};\n\nPNG.adjustGamma = function (src) {\n  if (src.gamma) {\n    for (let y = 0; y < src.height; y++) {\n      for (let x = 0; x < src.width; x++) {\n        let idx = (src.width * y + x) << 2;\n\n        for (let i = 0; i < 3; i++) {\n          let sample = src.data[idx + i] / 255;\n          sample = Math.pow(sample, 1 / 2.2 / src.gamma);\n          src.data[idx + i] = Math.round(sample * 255);\n        }\n      }\n    }\n    src.gamma = 0;\n  }\n};\n\nPNG.prototype.adjustGamma = function () {\n  PNG.adjustGamma(this);\n};\n","const jpegJs = require('jpeg-js');\nconst { PNG } = require('pngjs');\n\nmodule.exports = {};\n\nmodule.exports.JPEG = ({ data, width, height, quality }) => jpegJs.encode({ data, width, height }, Math.floor(quality * 100)).data;\n\nmodule.exports.PNG = ({ data, width, height }) => {\n  const png = new PNG({ width, height });\n  png.data = data;\n\n  return PNG.sync.write(png, {\n    width: width,\n    height: height,\n    deflateLevel: 9,\n    deflateStrategy: 3,\n    filterType: -1,\n    colorType: 6,\n    inputHasAlpha: true\n  });\n};\n","module.exports = (decode, encode) => {\n  const convertImage = async ({ image, format, quality }) => {\n    return await encode[format]({\n      width: image.width,\n      height: image.height,\n      data: image.data,\n      quality\n    });\n  };\n\n  const convert = async ({ buffer, format, quality, all }) => {\n    if (!encode[format]) {\n      throw new Error(`output format needs to be one of [${Object.keys(encode)}]`);\n    }\n\n    if (!all) {\n      const image = await decode({ buffer });\n      return await convertImage({ image, format, quality });\n    }\n\n    const images = await decode.all({ buffer });\n\n    return images.map(image => {\n      return {\n        convert: async () => await convertImage({\n          image: await image.decode(),\n          format,\n          quality\n        })\n      };\n    });\n  };\n\n  return {\n    one: async ({ buffer, format, quality = 0.92 }) => await convert({ buffer, format, quality, all: false }),\n    all: async ({ buffer, format, quality = 0.92 }) => await convert({ buffer, format, quality, all: true })\n  };\n};\n","const decode = require('heic-decode');\nconst formats = require('./formats-node.js');\nconst { one, all } = require('./lib.js')(decode, formats);\n\nmodule.exports = one;\nmodule.exports.all = all;\n","'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n  'major',\n  'premajor',\n  'minor',\n  'preminor',\n  'patch',\n  'prepatch',\n  'prerelease',\n]\n\nmodule.exports = {\n  MAX_LENGTH,\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_SAFE_INTEGER,\n  RELEASE_TYPES,\n  SEMVER_SPEC_VERSION,\n  FLAG_INCLUDE_PRERELEASE: 0b001,\n  FLAG_LOOSE: 0b010,\n}\n","'use strict'\n\nconst debug = (\n  typeof process === 'object' &&\n  process.env &&\n  process.env.NODE_DEBUG &&\n  /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n  : () => {}\n\nmodule.exports = debug\n","'use strict'\n\nconst {\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n  ['\\\\s', 1],\n  ['\\\\d', MAX_LENGTH],\n  [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n  for (const [token, max] of safeRegexReplacements) {\n    value = value\n      .split(`${token}*`).join(`${token}{0,${max}}`)\n      .split(`${token}+`).join(`${token}{1,${max}}`)\n  }\n  return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n  const safe = makeSafeRegex(value)\n  const index = R++\n  debug(name, index, value)\n  t[name] = index\n  src[index] = value\n  safeSrc[index] = safe\n  re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n  safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numeric identifiers include numeric identifiers but can be longer.\n// Therefore non-numeric identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups.  The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifier, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:${src[t.PRERELEASE]})?${\n                     src[t.BUILD]}?` +\n                   `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:${src[t.PRERELEASELOOSE]})?${\n                          src[t.BUILD]}?` +\n                        `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n              '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n              `(?:${src[t.PRERELEASE]})?` +\n              `(?:${src[t.BUILD]})?` +\n              `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s+-\\\\s+` +\n                   `(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s+-\\\\s+` +\n                        `(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n  if (!options) {\n    return emptyOpts\n  }\n\n  if (typeof options !== 'object') {\n    return looseOption\n  }\n\n  return options\n}\nmodule.exports = parseOptions\n","'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n  if (typeof a === 'number' && typeof b === 'number') {\n    return a === b ? 0 : a < b ? -1 : 1\n  }\n\n  const anum = numeric.test(a)\n  const bnum = numeric.test(b)\n\n  if (anum && bnum) {\n    a = +a\n    b = +b\n  }\n\n  return a === b ? 0\n    : (anum && !bnum) ? -1\n    : (bnum && !anum) ? 1\n    : a < b ? -1\n    : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n  compareIdentifiers,\n  rcompareIdentifiers,\n}\n","'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\n\nconst isPrereleaseIdentifier = (prerelease, identifier) => {\n  const identifiers = identifier.split('.')\n  if (identifiers.length > prerelease.length) {\n    return false\n  }\n\n  for (let i = 0; i < identifiers.length; i++) {\n    if (compareIdentifiers(prerelease[i], identifiers[i]) !== 0) {\n      return false\n    }\n  }\n\n  return true\n}\n\nclass SemVer {\n  constructor (version, options) {\n    options = parseOptions(options)\n\n    if (version instanceof SemVer) {\n      if (version.loose === !!options.loose &&\n        version.includePrerelease === !!options.includePrerelease) {\n        return version\n      } else {\n        version = version.version\n      }\n    } else if (typeof version !== 'string') {\n      throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n    }\n\n    if (version.length > MAX_LENGTH) {\n      throw new TypeError(\n        `version is longer than ${MAX_LENGTH} characters`\n      )\n    }\n\n    debug('SemVer', version, options)\n    this.options = options\n    this.loose = !!options.loose\n    // this isn't actually relevant for versions, but keep it so that we\n    // don't run into trouble passing this.options around.\n    this.includePrerelease = !!options.includePrerelease\n\n    const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n    if (!m) {\n      throw new TypeError(`Invalid Version: ${version}`)\n    }\n\n    this.raw = version\n\n    // these are actually numbers\n    this.major = +m[1]\n    this.minor = +m[2]\n    this.patch = +m[3]\n\n    if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n      throw new TypeError('Invalid major version')\n    }\n\n    if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n      throw new TypeError('Invalid minor version')\n    }\n\n    if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n      throw new TypeError('Invalid patch version')\n    }\n\n    // numberify any prerelease numeric ids\n    if (!m[4]) {\n      this.prerelease = []\n    } else {\n      this.prerelease = m[4].split('.').map((id) => {\n        if (/^[0-9]+$/.test(id)) {\n          const num = +id\n          if (num >= 0 && num < MAX_SAFE_INTEGER) {\n            return num\n          }\n        }\n        return id\n      })\n    }\n\n    this.build = m[5] ? m[5].split('.') : []\n    this.format()\n  }\n\n  format () {\n    this.version = `${this.major}.${this.minor}.${this.patch}`\n    if (this.prerelease.length) {\n      this.version += `-${this.prerelease.join('.')}`\n    }\n    return this.version\n  }\n\n  toString () {\n    return this.version\n  }\n\n  compare (other) {\n    debug('SemVer.compare', this.version, this.options, other)\n    if (!(other instanceof SemVer)) {\n      if (typeof other === 'string' && other === this.version) {\n        return 0\n      }\n      other = new SemVer(other, this.options)\n    }\n\n    if (other.version === this.version) {\n      return 0\n    }\n\n    return this.compareMain(other) || this.comparePre(other)\n  }\n\n  compareMain (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    if (this.major < other.major) {\n      return -1\n    }\n    if (this.major > other.major) {\n      return 1\n    }\n    if (this.minor < other.minor) {\n      return -1\n    }\n    if (this.minor > other.minor) {\n      return 1\n    }\n    if (this.patch < other.patch) {\n      return -1\n    }\n    if (this.patch > other.patch) {\n      return 1\n    }\n    return 0\n  }\n\n  comparePre (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    // NOT having a prerelease is > having one\n    if (this.prerelease.length && !other.prerelease.length) {\n      return -1\n    } else if (!this.prerelease.length && other.prerelease.length) {\n      return 1\n    } else if (!this.prerelease.length && !other.prerelease.length) {\n      return 0\n    }\n\n    let i = 0\n    do {\n      const a = this.prerelease[i]\n      const b = other.prerelease[i]\n      debug('prerelease compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  compareBuild (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    let i = 0\n    do {\n      const a = this.build[i]\n      const b = other.build[i]\n      debug('build compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  // preminor will bump the version up to the next minor release, and immediately\n  // down to pre-release. premajor and prepatch work the same way.\n  inc (release, identifier, identifierBase) {\n    if (release.startsWith('pre')) {\n      if (!identifier && identifierBase === false) {\n        throw new Error('invalid increment argument: identifier is empty')\n      }\n      // Avoid an invalid semver results\n      if (identifier) {\n        const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n        if (!match || match[1] !== identifier) {\n          throw new Error(`invalid identifier: ${identifier}`)\n        }\n      }\n    }\n\n    switch (release) {\n      case 'premajor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor = 0\n        this.major++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'preminor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'prepatch':\n        // If this is already a prerelease, it will bump to the next version\n        // drop any prereleases that might already exist, since they are not\n        // relevant at this point.\n        this.prerelease.length = 0\n        this.inc('patch', identifier, identifierBase)\n        this.inc('pre', identifier, identifierBase)\n        break\n      // If the input is a non-prerelease version, this acts the same as\n      // prepatch.\n      case 'prerelease':\n        if (this.prerelease.length === 0) {\n          this.inc('patch', identifier, identifierBase)\n        }\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'release':\n        if (this.prerelease.length === 0) {\n          throw new Error(`version ${this.raw} is not a prerelease`)\n        }\n        this.prerelease.length = 0\n        break\n\n      case 'major':\n        // If this is a pre-major version, bump up to the same major version.\n        // Otherwise increment major.\n        // 1.0.0-5 bumps to 1.0.0\n        // 1.1.0 bumps to 2.0.0\n        if (\n          this.minor !== 0 ||\n          this.patch !== 0 ||\n          this.prerelease.length === 0\n        ) {\n          this.major++\n        }\n        this.minor = 0\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'minor':\n        // If this is a pre-minor version, bump up to the same minor version.\n        // Otherwise increment minor.\n        // 1.2.0-5 bumps to 1.2.0\n        // 1.2.1 bumps to 1.3.0\n        if (this.patch !== 0 || this.prerelease.length === 0) {\n          this.minor++\n        }\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'patch':\n        // If this is not a pre-release version, it will increment the patch.\n        // If it is a pre-release it will bump up to the same patch version.\n        // 1.2.0-5 patches to 1.2.0\n        // 1.2.0 patches to 1.2.1\n        if (this.prerelease.length === 0) {\n          this.patch++\n        }\n        this.prerelease = []\n        break\n      // This probably shouldn't be used publicly.\n      // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n      case 'pre': {\n        const base = Number(identifierBase) ? 1 : 0\n\n        if (this.prerelease.length === 0) {\n          this.prerelease = [base]\n        } else {\n          let i = this.prerelease.length\n          while (--i >= 0) {\n            if (typeof this.prerelease[i] === 'number') {\n              this.prerelease[i]++\n              i = -2\n            }\n          }\n          if (i === -1) {\n            // didn't increment anything\n            if (identifier === this.prerelease.join('.') && identifierBase === false) {\n              throw new Error('invalid increment argument: identifier already exists')\n            }\n            this.prerelease.push(base)\n          }\n        }\n        if (identifier) {\n          // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n          // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n          let prerelease = [identifier, base]\n          if (identifierBase === false) {\n            prerelease = [identifier]\n          }\n          if (isPrereleaseIdentifier(this.prerelease, identifier)) {\n            const prereleaseBase = this.prerelease[identifier.split('.').length]\n            if (isNaN(prereleaseBase)) {\n              this.prerelease = prerelease\n            }\n          } else {\n            this.prerelease = prerelease\n          }\n        }\n        break\n      }\n      default:\n        throw new Error(`invalid increment argument: ${release}`)\n    }\n    this.raw = this.format()\n    if (this.build.length) {\n      this.raw += `+${this.build.join('.')}`\n    }\n    return this\n  }\n}\n\nmodule.exports = SemVer\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n  try {\n    return new SemVer(version, options)\n  } catch (er) {\n    if (!throwErrors) {\n      return null\n    }\n    throw er\n  }\n}\n\nmodule.exports = parse\n","'use strict'\n\nconst parse = require('./parse')\nconst valid = (version, options) => {\n  const v = parse(version, options)\n  return v ? v.version : null\n}\nmodule.exports = valid\n","'use strict'\n\nconst parse = require('./parse')\nconst clean = (version, options) => {\n  const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n  return s ? s.version : null\n}\nmodule.exports = clean\n","'use strict'\n\nconst SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n  if (typeof (options) === 'string') {\n    identifierBase = identifier\n    identifier = options\n    options = undefined\n  }\n\n  try {\n    return new SemVer(\n      version instanceof SemVer ? version.version : version,\n      options\n    ).inc(release, identifier, identifierBase).version\n  } catch (er) {\n    return null\n  }\n}\nmodule.exports = inc\n","'use strict'\n\nconst parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n  const v1 = parse(version1, null, true)\n  const v2 = parse(version2, null, true)\n  const comparison = v1.compare(v2)\n\n  if (comparison === 0) {\n    return null\n  }\n\n  const v1Higher = comparison > 0\n  const highVersion = v1Higher ? v1 : v2\n  const lowVersion = v1Higher ? v2 : v1\n  const highHasPre = !!highVersion.prerelease.length\n  const lowHasPre = !!lowVersion.prerelease.length\n\n  if (lowHasPre && !highHasPre) {\n    // Going from prerelease -> no prerelease requires some special casing\n\n    // If the low version has only a major, then it will always be a major\n    // Some examples:\n    // 1.0.0-1 -> 1.0.0\n    // 1.0.0-1 -> 1.1.1\n    // 1.0.0-1 -> 2.0.0\n    if (!lowVersion.patch && !lowVersion.minor) {\n      return 'major'\n    }\n\n    // If the main part has no difference\n    if (lowVersion.compareMain(highVersion) === 0) {\n      if (lowVersion.minor && !lowVersion.patch) {\n        return 'minor'\n      }\n      return 'patch'\n    }\n  }\n\n  // add the `pre` prefix if we are going to a prerelease version\n  const prefix = highHasPre ? 'pre' : ''\n\n  if (v1.major !== v2.major) {\n    return prefix + 'major'\n  }\n\n  if (v1.minor !== v2.minor) {\n    return prefix + 'minor'\n  }\n\n  if (v1.patch !== v2.patch) {\n    return prefix + 'patch'\n  }\n\n  // high and low are prereleases\n  return 'prerelease'\n}\n\nmodule.exports = diff\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","'use strict'\n\nconst parse = require('./parse')\nconst prerelease = (version, options) => {\n  const parsed = parse(version, options)\n  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n  new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","'use strict'\n\nconst compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","'use strict'\n\nconst compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n  const versionA = new SemVer(a, loose)\n  const versionB = new SemVer(b, loose)\n  return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n  switch (op) {\n    case '===':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a === b\n\n    case '!==':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a !== b\n\n    case '':\n    case '=':\n    case '==':\n      return eq(a, b, loose)\n\n    case '!=':\n      return neq(a, b, loose)\n\n    case '>':\n      return gt(a, b, loose)\n\n    case '>=':\n      return gte(a, b, loose)\n\n    case '<':\n      return lt(a, b, loose)\n\n    case '<=':\n      return lte(a, b, loose)\n\n    default:\n      throw new TypeError(`Invalid operator: ${op}`)\n  }\n}\nmodule.exports = cmp\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version === 'number') {\n    version = String(version)\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  options = options || {}\n\n  let match = null\n  if (!options.rtl) {\n    match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n  } else {\n    // Find the right-most coercible string that does not share\n    // a terminus with a more left-ward coercible string.\n    // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n    // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n    //\n    // Walk through the string checking with a /g regexp\n    // Manually set the index so as to pick up overlapping matches.\n    // Stop when we get a match that ends at the string end, since no\n    // coercible string can be more right-ward without the same terminus.\n    const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n    let next\n    while ((next = coerceRtlRegex.exec(version)) &&\n        (!match || match.index + match[0].length !== version.length)\n    ) {\n      if (!match ||\n            next.index + next[0].length !== match.index + match[0].length) {\n        match = next\n      }\n      coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n    }\n    // leave it in a clean state\n    coerceRtlRegex.lastIndex = -1\n  }\n\n  if (match === null) {\n    return null\n  }\n\n  const major = match[2]\n  const minor = match[3] || '0'\n  const patch = match[4] || '0'\n  const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n  const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n  return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n","'use strict'\n\nconst parse = require('./parse')\nconst constants = require('../internal/constants')\nconst SemVer = require('../classes/semver')\n\nconst truncate = (version, truncation, options) => {\n  if (!constants.RELEASE_TYPES.includes(truncation)) {\n    return null\n  }\n\n  const clonedVersion = cloneInputVersion(version, options)\n  return clonedVersion && doTruncation(clonedVersion, truncation)\n}\n\nconst cloneInputVersion = (version, options) => {\n  const versionStringToParse = (\n    version instanceof SemVer ? version.version : version\n  )\n\n  return parse(versionStringToParse, options)\n}\n\nconst doTruncation = (version, truncation) => {\n  if (isPrerelease(truncation)) {\n    return version.version\n  }\n\n  version.prerelease = []\n\n  switch (truncation) {\n    case 'major':\n      version.minor = 0\n      version.patch = 0\n      break\n    case 'minor':\n      version.patch = 0\n      break\n  }\n\n  return version.format()\n}\n\nconst isPrerelease = (type) => {\n  return type.startsWith('pre')\n}\n\nmodule.exports = truncate\n","'use strict'\n\nclass LRUCache {\n  constructor () {\n    this.max = 1000\n    this.map = new Map()\n  }\n\n  get (key) {\n    const value = this.map.get(key)\n    if (value === undefined) {\n      return undefined\n    } else {\n      // Remove the key from the map and add it to the end\n      this.map.delete(key)\n      this.map.set(key, value)\n      return value\n    }\n  }\n\n  delete (key) {\n    return this.map.delete(key)\n  }\n\n  set (key, value) {\n    const deleted = this.delete(key)\n\n    if (!deleted && value !== undefined) {\n      // If cache is full, delete the least recently used item\n      if (this.map.size >= this.max) {\n        const firstKey = this.map.keys().next().value\n        this.delete(firstKey)\n      }\n\n      this.map.set(key, value)\n    }\n\n    return this\n  }\n}\n\nmodule.exports = LRUCache\n","'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n  constructor (range, options) {\n    options = parseOptions(options)\n\n    if (range instanceof Range) {\n      if (\n        range.loose === !!options.loose &&\n        range.includePrerelease === !!options.includePrerelease\n      ) {\n        return range\n      } else {\n        return new Range(range.raw, options)\n      }\n    }\n\n    if (range instanceof Comparator) {\n      // just put it in the set and return\n      this.raw = range.value\n      this.set = [[range]]\n      this.formatted = undefined\n      return this\n    }\n\n    this.options = options\n    this.loose = !!options.loose\n    this.includePrerelease = !!options.includePrerelease\n\n    // First reduce all whitespace as much as possible so we do not have to rely\n    // on potentially slow regexes like \\s*. This is then stored and used for\n    // future error messages as well.\n    this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n    // First, split on ||\n    this.set = this.raw\n      .split('||')\n      // map the range to a 2d array of comparators\n      .map(r => this.parseRange(r.trim()))\n      // throw out any comparator lists that are empty\n      // this generally means that it was not a valid range, which is allowed\n      // in loose mode, but will still throw if the WHOLE range is invalid.\n      .filter(c => c.length)\n\n    if (!this.set.length) {\n      throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n    }\n\n    // if we have any that are not the null set, throw out null sets.\n    if (this.set.length > 1) {\n      // keep the first one, in case they're all null sets\n      const first = this.set[0]\n      this.set = this.set.filter(c => !isNullSet(c[0]))\n      if (this.set.length === 0) {\n        this.set = [first]\n      } else if (this.set.length > 1) {\n        // if we have any that are *, then the range is just *\n        for (const c of this.set) {\n          if (c.length === 1 && isAny(c[0])) {\n            this.set = [c]\n            break\n          }\n        }\n      }\n    }\n\n    this.formatted = undefined\n  }\n\n  get range () {\n    if (this.formatted === undefined) {\n      this.formatted = ''\n      for (let i = 0; i < this.set.length; i++) {\n        if (i > 0) {\n          this.formatted += '||'\n        }\n        const comps = this.set[i]\n        for (let k = 0; k < comps.length; k++) {\n          if (k > 0) {\n            this.formatted += ' '\n          }\n          this.formatted += comps[k].toString().trim()\n        }\n      }\n    }\n    return this.formatted\n  }\n\n  format () {\n    return this.range\n  }\n\n  toString () {\n    return this.range\n  }\n\n  parseRange (range) {\n    // strip build metadata so it can't bleed into the version\n    range = range.replace(BUILDSTRIPRE, '')\n\n    // memoize range parsing for performance.\n    // this is a very hot path, and fully deterministic.\n    const memoOpts =\n      (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n      (this.options.loose && FLAG_LOOSE)\n    const memoKey = memoOpts + ':' + range\n    const cached = cache.get(memoKey)\n    if (cached) {\n      return cached\n    }\n\n    const loose = this.options.loose\n    // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n    const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n    range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n    debug('hyphen replace', range)\n\n    // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n    range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n    debug('comparator trim', range)\n\n    // `~ 1.2.3` => `~1.2.3`\n    range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n    debug('tilde trim', range)\n\n    // `^ 1.2.3` => `^1.2.3`\n    range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n    debug('caret trim', range)\n\n    // At this point, the range is completely trimmed and\n    // ready to be split into comparators.\n\n    let rangeList = range\n      .split(' ')\n      .map(comp => parseComparator(comp, this.options))\n      .join(' ')\n      .split(/\\s+/)\n      // >=0.0.0 is equivalent to *\n      .map(comp => replaceGTE0(comp, this.options))\n\n    if (loose) {\n      // in loose mode, throw out any that are not valid comparators\n      rangeList = rangeList.filter(comp => {\n        debug('loose invalid filter', comp, this.options)\n        return !!comp.match(re[t.COMPARATORLOOSE])\n      })\n    }\n    debug('range list', rangeList)\n\n    // if any comparators are the null set, then replace with JUST null set\n    // if more than one comparator, remove any * comparators\n    // also, don't include the same comparator more than once\n    const rangeMap = new Map()\n    const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n    for (const comp of comparators) {\n      if (isNullSet(comp)) {\n        return [comp]\n      }\n      rangeMap.set(comp.value, comp)\n    }\n    if (rangeMap.size > 1 && rangeMap.has('')) {\n      rangeMap.delete('')\n    }\n\n    const result = [...rangeMap.values()]\n    cache.set(memoKey, result)\n    return result\n  }\n\n  intersects (range, options) {\n    if (!(range instanceof Range)) {\n      throw new TypeError('a Range is required')\n    }\n\n    return this.set.some((thisComparators) => {\n      return (\n        isSatisfiable(thisComparators, options) &&\n        range.set.some((rangeComparators) => {\n          return (\n            isSatisfiable(rangeComparators, options) &&\n            thisComparators.every((thisComparator) => {\n              return rangeComparators.every((rangeComparator) => {\n                return thisComparator.intersects(rangeComparator, options)\n              })\n            })\n          )\n        })\n      )\n    })\n  }\n\n  // if ANY of the sets match ALL of its comparators, then pass\n  test (version) {\n    if (!version) {\n      return false\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    for (let i = 0; i < this.set.length; i++) {\n      if (testSet(this.set[i], version, this.options)) {\n        return true\n      }\n    }\n    return false\n  }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n  safeRe: re,\n  src,\n  t,\n  comparatorTrimReplace,\n  tildeTrimReplace,\n  caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\n// unbounded global build-metadata stripper used by parseRange\nconst BUILDSTRIPRE = new RegExp(src[t.BUILD], 'g')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n  let result = true\n  const remainingComparators = comparators.slice()\n  let testComparator = remainingComparators.pop()\n\n  while (result && remainingComparators.length) {\n    result = remainingComparators.every((otherComparator) => {\n      return testComparator.intersects(otherComparator, options)\n    })\n\n    testComparator = remainingComparators.pop()\n  }\n\n  return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n  comp = comp.replace(re[t.BUILD], '')\n  debug('comp', comp, options)\n  comp = replaceCarets(comp, options)\n  debug('caret', comp)\n  comp = replaceTildes(comp, options)\n  debug('tildes', comp)\n  comp = replaceXRanges(comp, options)\n  debug('xrange', comp)\n  comp = replaceStars(comp, options)\n  debug('stars', comp)\n  return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\nconst invalidXRangeOrder = (M, m, p) => (\n  (isX(M) && !isX(m)) ||\n  (isX(m) && p && !isX(p))\n)\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceTilde(c, options))\n    .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n  const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n  // if we're including prereleases in the match, then the lower bound is\n  // -0, the lowest possible prerelease value, just like x-ranges and carets.\n  // this keeps `~1.2` equivalent to the `1.2.x` x-range it's documented as.\n  const z = options.includePrerelease ? '-0' : ''\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('tilde', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      // ~1.2 == >=1.2.0 <1.3.0-0\n      ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n    } else if (pr) {\n      debug('replaceTilde pr', pr)\n      ret = `>=${M}.${m}.${p}-${pr\n      } <${M}.${+m + 1}.0-0`\n    } else {\n      // ~1.2.3 == >=1.2.3 <1.3.0-0\n      ret = `>=${M}.${m}.${p\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('tilde return', ret)\n    return ret\n  })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceCaret(c, options))\n    .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n  debug('caret', comp, options)\n  const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n  const z = options.includePrerelease ? '-0' : ''\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('caret', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      if (M === '0') {\n        ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n      } else {\n        ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n      }\n    } else if (pr) {\n      debug('replaceCaret pr', pr)\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p}-${pr\n        } <${+M + 1}.0.0-0`\n      }\n    } else {\n      debug('no pr')\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p\n          } <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p\n          } <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p\n        } <${+M + 1}.0.0-0`\n      }\n    }\n\n    debug('caret return', ret)\n    return ret\n  })\n}\n\nconst replaceXRanges = (comp, options) => {\n  debug('replaceXRanges', comp, options)\n  return comp\n    .split(/\\s+/)\n    .map((c) => replaceXRange(c, options))\n    .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n  comp = comp.trim()\n  const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n  return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n    debug('xRange', comp, ret, gtlt, M, m, p, pr)\n    if (invalidXRangeOrder(M, m, p)) {\n      return comp\n    }\n\n    const xM = isX(M)\n    const xm = xM || isX(m)\n    const xp = xm || isX(p)\n    const anyX = xp\n\n    if (gtlt === '=' && anyX) {\n      gtlt = ''\n    }\n\n    // if we're including prereleases in the match, then we need\n    // to fix this to -0, the lowest possible prerelease value\n    pr = options.includePrerelease ? '-0' : ''\n\n    if (xM) {\n      if (gtlt === '>' || gtlt === '<') {\n        // nothing is allowed\n        ret = '<0.0.0-0'\n      } else {\n        // nothing is forbidden\n        ret = '*'\n      }\n    } else if (gtlt && anyX) {\n      // we know patch is an x, because we have any x at all.\n      // replace X with 0\n      if (xm) {\n        m = 0\n      }\n      p = 0\n\n      if (gtlt === '>') {\n        // >1 => >=2.0.0\n        // >1.2 => >=1.3.0\n        gtlt = '>='\n        if (xm) {\n          M = +M + 1\n          m = 0\n          p = 0\n        } else {\n          m = +m + 1\n          p = 0\n        }\n      } else if (gtlt === '<=') {\n        // <=0.7.x is actually <0.8.0, since any 0.7.x should\n        // pass.  Similarly, <=7.x is actually <8.0.0, etc.\n        gtlt = '<'\n        if (xm) {\n          M = +M + 1\n        } else {\n          m = +m + 1\n        }\n      }\n\n      if (gtlt === '<') {\n        pr = '-0'\n      }\n\n      ret = `${gtlt + M}.${m}.${p}${pr}`\n    } else if (xm) {\n      ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n    } else if (xp) {\n      ret = `>=${M}.${m}.0${pr\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('xRange return', ret)\n\n    return ret\n  })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n  debug('replaceStars', comp, options)\n  // Looseness is ignored here.  star is always as loose as it gets!\n  return comp\n    .trim()\n    .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n  debug('replaceGTE0', comp, options)\n  return comp\n    .trim()\n    .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n  from, fM, fm, fp, fpr, fb,\n  to, tM, tm, tp, tpr) => {\n  if (isX(fM)) {\n    from = ''\n  } else if (isX(fm)) {\n    from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n  } else if (isX(fp)) {\n    from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n  } else if (fpr) {\n    from = `>=${from}`\n  } else {\n    from = `>=${from}${incPr ? '-0' : ''}`\n  }\n\n  if (isX(tM)) {\n    to = ''\n  } else if (isX(tm)) {\n    to = `<${+tM + 1}.0.0-0`\n  } else if (isX(tp)) {\n    to = `<${tM}.${+tm + 1}.0-0`\n  } else if (tpr) {\n    to = `<=${tM}.${tm}.${tp}-${tpr}`\n  } else if (incPr) {\n    to = `<${tM}.${tm}.${+tp + 1}-0`\n  } else {\n    to = `<=${to}`\n  }\n\n  return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n  for (let i = 0; i < set.length; i++) {\n    if (!set[i].test(version)) {\n      return false\n    }\n  }\n\n  if (version.prerelease.length && !options.includePrerelease) {\n    // Find the set of versions that are allowed to have prereleases\n    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n    // That should allow `1.2.3-pr.2` to pass.\n    // However, `1.2.4-alpha.notready` should NOT be allowed,\n    // even though it's within the range set by the comparators.\n    for (let i = 0; i < set.length; i++) {\n      debug(set[i].semver)\n      if (set[i].semver === Comparator.ANY) {\n        continue\n      }\n\n      if (set[i].semver.prerelease.length > 0) {\n        const allowed = set[i].semver\n        if (allowed.major === version.major &&\n            allowed.minor === version.minor &&\n            allowed.patch === version.patch) {\n          return true\n        }\n      }\n    }\n\n    // Version has a -pre, but it's not one of the ones we like.\n    return false\n  }\n\n  return true\n}\n","'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n  static get ANY () {\n    return ANY\n  }\n\n  constructor (comp, options) {\n    options = parseOptions(options)\n\n    if (comp instanceof Comparator) {\n      if (comp.loose === !!options.loose) {\n        return comp\n      } else {\n        comp = comp.value\n      }\n    }\n\n    comp = comp.trim().split(/\\s+/).join(' ')\n    debug('comparator', comp, options)\n    this.options = options\n    this.loose = !!options.loose\n    this.parse(comp)\n\n    if (this.semver === ANY) {\n      this.value = ''\n    } else {\n      this.value = this.operator + this.semver.version\n    }\n\n    debug('comp', this)\n  }\n\n  parse (comp) {\n    const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n    const m = comp.match(r)\n\n    if (!m) {\n      throw new TypeError(`Invalid comparator: ${comp}`)\n    }\n\n    this.operator = m[1] !== undefined ? m[1] : ''\n    if (this.operator === '=') {\n      this.operator = ''\n    }\n\n    // if it literally is just '>' or '' then allow anything.\n    if (!m[2]) {\n      this.semver = ANY\n    } else {\n      this.semver = new SemVer(m[2], this.options.loose)\n    }\n  }\n\n  toString () {\n    return this.value\n  }\n\n  test (version) {\n    debug('Comparator.test', version, this.options.loose)\n\n    if (this.semver === ANY || version === ANY) {\n      return true\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    return cmp(version, this.operator, this.semver, this.options)\n  }\n\n  intersects (comp, options) {\n    if (!(comp instanceof Comparator)) {\n      throw new TypeError('a Comparator is required')\n    }\n\n    if (this.operator === '') {\n      if (this.value === '') {\n        return true\n      }\n      return new Range(comp.value, options).test(this.value)\n    } else if (comp.operator === '') {\n      if (comp.value === '') {\n        return true\n      }\n      return new Range(this.value, options).test(comp.semver)\n    }\n\n    options = parseOptions(options)\n\n    // Special cases where nothing can possibly be lower\n    if (options.includePrerelease &&\n      (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n      return false\n    }\n    if (!options.includePrerelease &&\n      (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n      return false\n    }\n\n    // Same direction increasing (> or >=)\n    if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n      return true\n    }\n    // Same direction decreasing (< or <=)\n    if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // same SemVer and both sides are inclusive (<= or >=)\n    if (\n      (this.semver.version === comp.semver.version) &&\n      this.operator.includes('=') && comp.operator.includes('=')) {\n      return true\n    }\n    // opposite directions less than\n    if (cmp(this.semver, '<', comp.semver, options) &&\n      this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // opposite directions greater than\n    if (cmp(this.semver, '>', comp.semver, options) &&\n      this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n      return true\n    }\n    return false\n  }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n  try {\n    range = new Range(range, options)\n  } catch (er) {\n    return false\n  }\n  return range.test(version)\n}\nmodule.exports = satisfies\n","'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n  new Range(range, options).set\n    .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n  let max = null\n  let maxSV = null\n  let rangeObj = null\n  try {\n    rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach((v) => {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!max || maxSV.compare(v) === -1) {\n        // compare(max, v, true)\n        max = v\n        maxSV = new SemVer(max, options)\n      }\n    }\n  })\n  return max\n}\nmodule.exports = maxSatisfying\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n  let min = null\n  let minSV = null\n  let rangeObj = null\n  try {\n    rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach((v) => {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!min || minSV.compare(v) === 1) {\n        // compare(min, v, true)\n        min = v\n        minSV = new SemVer(min, options)\n      }\n    }\n  })\n  return min\n}\nmodule.exports = minSatisfying\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n  range = new Range(range, loose)\n\n  let minver = new SemVer('0.0.0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = new SemVer('0.0.0-0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = null\n  for (let i = 0; i < range.set.length; ++i) {\n    const comparators = range.set[i]\n\n    let setMin = null\n    comparators.forEach((comparator) => {\n      // Clone to avoid manipulating the comparator's semver object.\n      const compver = new SemVer(comparator.semver.version)\n      switch (comparator.operator) {\n        case '>':\n          if (compver.prerelease.length === 0) {\n            compver.patch++\n          } else {\n            compver.prerelease.push(0)\n          }\n          compver.raw = compver.format()\n          /* fallthrough */\n        case '':\n        case '>=':\n          if (!setMin || gt(compver, setMin)) {\n            setMin = compver\n          }\n          break\n        case '<':\n        case '<=':\n          /* Ignore maximum versions */\n          break\n        /* istanbul ignore next */\n        default:\n          throw new Error(`Unexpected operation: ${comparator.operator}`)\n      }\n    })\n    if (setMin && (!minver || gt(minver, setMin))) {\n      minver = setMin\n    }\n  }\n\n  if (minver && range.test(minver)) {\n    return minver\n  }\n\n  return null\n}\nmodule.exports = minVersion\n","'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n  try {\n    // Return '*' instead of '' so that truthiness works.\n    // This will throw if it's invalid anyway\n    return new Range(range, options).range || '*'\n  } catch (er) {\n    return null\n  }\n}\nmodule.exports = validRange\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n  version = new SemVer(version, options)\n  range = new Range(range, options)\n\n  let gtfn, ltefn, ltfn, comp, ecomp\n  switch (hilo) {\n    case '>':\n      gtfn = gt\n      ltefn = lte\n      ltfn = lt\n      comp = '>'\n      ecomp = '>='\n      break\n    case '<':\n      gtfn = lt\n      ltefn = gte\n      ltfn = gt\n      comp = '<'\n      ecomp = '<='\n      break\n    default:\n      throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n  }\n\n  // If it satisfies the range it is not outside\n  if (satisfies(version, range, options)) {\n    return false\n  }\n\n  // From now on, variable terms are as if we're in \"gtr\" mode.\n  // but note that everything is flipped for the \"ltr\" function.\n\n  for (let i = 0; i < range.set.length; ++i) {\n    const comparators = range.set[i]\n\n    let high = null\n    let low = null\n\n    comparators.forEach((comparator) => {\n      if (comparator.semver === ANY) {\n        comparator = new Comparator('>=0.0.0')\n      }\n      high = high || comparator\n      low = low || comparator\n      if (gtfn(comparator.semver, high.semver, options)) {\n        high = comparator\n      } else if (ltfn(comparator.semver, low.semver, options)) {\n        low = comparator\n      }\n    })\n\n    // If the edge version comparator has a operator then our version\n    // isn't outside it\n    if (high.operator === comp || high.operator === ecomp) {\n      return false\n    }\n\n    // If the lowest version comparator has an operator and our version\n    // is less than it then it isn't higher than the range\n    if ((!low.operator || low.operator === comp) &&\n        ltefn(version, low.semver)) {\n      return false\n    } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n      return false\n    }\n  }\n  return true\n}\n\nmodule.exports = outside\n","'use strict'\n\n// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","'use strict'\n\nconst outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","'use strict'\n\nconst Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n  r1 = new Range(r1, options)\n  r2 = new Range(r2, options)\n  return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n","'use strict'\n\n// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n  const set = []\n  let first = null\n  let prev = null\n  const v = versions.sort((a, b) => compare(a, b, options))\n  for (const version of v) {\n    const included = satisfies(version, range, options)\n    if (included) {\n      prev = version\n      if (!first) {\n        first = version\n      }\n    } else {\n      if (prev) {\n        set.push([first, prev])\n      }\n      prev = null\n      first = null\n    }\n  }\n  if (first) {\n    set.push([first, null])\n  }\n\n  const ranges = []\n  for (const [min, max] of set) {\n    if (min === max) {\n      ranges.push(min)\n    } else if (!max && min === v[0]) {\n      ranges.push('*')\n    } else if (!max) {\n      ranges.push(`>=${min}`)\n    } else if (min === v[0]) {\n      ranges.push(`<=${max}`)\n    } else {\n      ranges.push(`${min} - ${max}`)\n    }\n  }\n  const simplified = ranges.join(' || ')\n  const original = typeof range.raw === 'string' ? range.raw : String(range)\n  return simplified.length < original.length ? simplified : range\n}\n","'use strict'\n\nconst Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n//   some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n//   - If C is only the ANY comparator, return true\n//   - Else if in prerelease mode, return false\n//   - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n//   - if in prerelease mode, return true\n//   - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n//   - If GT, and EQ does not satisfy GT, return true (null set)\n//   - If LT, and EQ does not satisfy LT, return true (null set)\n//   - If EQ satisfies every C, return true\n//   - Else return false\n// - If GT\n//   - If GT.semver is lower than any > or >= comp in C, return false\n//   - If GT is >=, and GT.semver does not satisfy every C, return false\n//   - If GT.semver has a prerelease, and not in prerelease mode\n//     - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n//   - If LT.semver is greater than any < or <= comp in C, return false\n//   - If LT is <=, and LT.semver does not satisfy every C, return false\n//   - If LT.semver has a prerelease, and not in prerelease mode\n//     - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n  if (sub === dom) {\n    return true\n  }\n\n  sub = new Range(sub, options)\n  dom = new Range(dom, options)\n  let sawNonNull = false\n\n  OUTER: for (const simpleSub of sub.set) {\n    for (const simpleDom of dom.set) {\n      const isSub = simpleSubset(simpleSub, simpleDom, options)\n      sawNonNull = sawNonNull || isSub !== null\n      if (isSub) {\n        continue OUTER\n      }\n    }\n    // the null set is a subset of everything, but null simple ranges in\n    // a complex range should be ignored.  so if we saw a non-null range,\n    // then we know this isn't a subset, but if EVERY simple range was null,\n    // then it is a subset.\n    if (sawNonNull) {\n      return false\n    }\n  }\n  return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n  if (sub === dom) {\n    return true\n  }\n\n  if (sub.length === 1 && sub[0].semver === ANY) {\n    if (dom.length === 1 && dom[0].semver === ANY) {\n      return true\n    } else if (options.includePrerelease) {\n      sub = minimumVersionWithPreRelease\n    } else {\n      sub = minimumVersion\n    }\n  }\n\n  if (dom.length === 1 && dom[0].semver === ANY) {\n    if (options.includePrerelease) {\n      return true\n    } else {\n      dom = minimumVersion\n    }\n  }\n\n  const eqSet = new Set()\n  let gt, lt\n  for (const c of sub) {\n    if (c.operator === '>' || c.operator === '>=') {\n      gt = higherGT(gt, c, options)\n    } else if (c.operator === '<' || c.operator === '<=') {\n      lt = lowerLT(lt, c, options)\n    } else {\n      eqSet.add(c.semver)\n    }\n  }\n\n  if (eqSet.size > 1) {\n    return null\n  }\n\n  let gtltComp\n  if (gt && lt) {\n    gtltComp = compare(gt.semver, lt.semver, options)\n    if (gtltComp > 0) {\n      return null\n    } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n      return null\n    }\n  }\n\n  // will iterate one or zero times\n  for (const eq of eqSet) {\n    if (gt && !satisfies(eq, String(gt), options)) {\n      return null\n    }\n\n    if (lt && !satisfies(eq, String(lt), options)) {\n      return null\n    }\n\n    for (const c of dom) {\n      if (!satisfies(eq, String(c), options)) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  let higher, lower\n  let hasDomLT, hasDomGT\n  // if the subset has a prerelease, we need a comparator in the superset\n  // with the same tuple and a prerelease, or it's not a subset\n  let needDomLTPre = lt &&\n    !options.includePrerelease &&\n    lt.semver.prerelease.length ? lt.semver : false\n  let needDomGTPre = gt &&\n    !options.includePrerelease &&\n    gt.semver.prerelease.length ? gt.semver : false\n  // exception: <1.2.3-0 is the same as <1.2.3\n  if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n      lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n    needDomLTPre = false\n  }\n\n  for (const c of dom) {\n    hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n    hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n    if (gt) {\n      if (needDomGTPre) {\n        if (c.semver.prerelease && c.semver.prerelease.length &&\n            c.semver.major === needDomGTPre.major &&\n            c.semver.minor === needDomGTPre.minor &&\n            c.semver.patch === needDomGTPre.patch) {\n          needDomGTPre = false\n        }\n      }\n      if (c.operator === '>' || c.operator === '>=') {\n        higher = higherGT(gt, c, options)\n        if (higher === c && higher !== gt) {\n          return false\n        }\n      } else if (gt.operator === '>=' && !c.test(gt.semver)) {\n        return false\n      }\n    }\n    if (lt) {\n      if (needDomLTPre) {\n        if (c.semver.prerelease && c.semver.prerelease.length &&\n            c.semver.major === needDomLTPre.major &&\n            c.semver.minor === needDomLTPre.minor &&\n            c.semver.patch === needDomLTPre.patch) {\n          needDomLTPre = false\n        }\n      }\n      if (c.operator === '<' || c.operator === '<=') {\n        lower = lowerLT(lt, c, options)\n        if (lower === c && lower !== lt) {\n          return false\n        }\n      } else if (lt.operator === '<=' && !c.test(lt.semver)) {\n        return false\n      }\n    }\n    if (!c.operator && (lt || gt) && gtltComp !== 0) {\n      return false\n    }\n  }\n\n  // if there was a < or >, and nothing in the dom, then must be false\n  // UNLESS it was limited by another range in the other direction.\n  // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n  if (gt && hasDomLT && !lt && gtltComp !== 0) {\n    return false\n  }\n\n  if (lt && hasDomGT && !gt && gtltComp !== 0) {\n    return false\n  }\n\n  // we needed a prerelease range in a specific tuple, but didn't get one\n  // then this isn't a subset.  eg >=1.2.3-pre is not a subset of >=1.0.0,\n  // because it includes prereleases in the 1.2.3 tuple\n  if (needDomGTPre || needDomLTPre) {\n    return false\n  }\n\n  return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n  if (!a) {\n    return b\n  }\n  const comp = compare(a.semver, b.semver, options)\n  return comp > 0 ? a\n    : comp < 0 ? b\n    : b.operator === '>' && a.operator === '>=' ? b\n    : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n  if (!a) {\n    return b\n  }\n  const comp = compare(a.semver, b.semver, options)\n  return comp < 0 ? a\n    : comp > 0 ? b\n    : b.operator === '<' && a.operator === '<=' ? b\n    : a\n}\n\nmodule.exports = subset\n","'use strict'\n\n// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst truncate = require('./functions/truncate')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n  parse,\n  valid,\n  clean,\n  inc,\n  diff,\n  major,\n  minor,\n  patch,\n  prerelease,\n  compare,\n  rcompare,\n  compareLoose,\n  compareBuild,\n  sort,\n  rsort,\n  gt,\n  lt,\n  eq,\n  neq,\n  gte,\n  lte,\n  cmp,\n  coerce,\n  truncate,\n  Comparator,\n  Range,\n  satisfies,\n  toComparators,\n  maxSatisfying,\n  minSatisfying,\n  minVersion,\n  validRange,\n  outside,\n  gtr,\n  ltr,\n  intersects,\n  simplifyRange,\n  subset,\n  SemVer,\n  re: internalRe.re,\n  src: internalRe.src,\n  tokens: internalRe.t,\n  SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n  RELEASE_TYPES: constants.RELEASE_TYPES,\n  compareIdentifiers: identifiers.compareIdentifiers,\n  rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","import { execFileSync } from \"node:child_process\";\nimport { join } from \"node:path\";\nimport { installDir, LAUNCHD_LABEL } from \"./constants\";\n\n// launchd label Homebrew registers for `brew services start tb-streamer`,\n// distinct from the deploy.sh LAUNCHD_LABEL. A brew prod install must be\n// detected at runtime so the prod/dev coordination targets the live service.\nconst BREW_LAUNCHD_LABEL = \"homebrew.mxcl.tb-streamer\";\n\nfunction uidScope(): string {\n  return `gui/${process.getuid?.() ?? 501}`;\n}\n\n// Resolves which launchd label the prod/dev machinery should operate on:\n// LAUNCHD_LABEL env override → the brew label if its service is loaded →\n// the deploy.sh default. The brew probe runs only when no env override pins a\n// label, so a deploy.sh install never pays for it. Mirrors the async\n// resolveDarwinLabel in src/updater/restart.ts (this side is sync because the\n// lifecycle wrappers use execFileSync).\nfunction resolveLoadedLabel(): string {\n  if (process.env.LAUNCHD_LABEL) return process.env.LAUNCHD_LABEL;\n  try {\n    execFileSync(\"launchctl\", [\"print\", `${uidScope()}/${BREW_LAUNCHD_LABEL}`], {\n      stdio: \"ignore\",\n    });\n    return BREW_LAUNCHD_LABEL;\n  } catch {\n    return LAUNCHD_LABEL;\n  }\n}\n\nfunction fullTarget(): string {\n  return `${uidScope()}/${resolveLoadedLabel()}`;\n}\n\nexport function isAgentLoaded(): boolean {\n  try {\n    execFileSync(\"launchctl\", [\"list\", resolveLoadedLabel()], { stdio: \"ignore\" });\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n// Bootout is async on macOS: launchctl returns immediately but the launchd\n// domain may still be tearing down the service when the command exits.\n// Poll up to `timeoutMs` for isAgentLoaded() to flip false so callers can\n// safely bootstrap a fresh copy without hitting the \"service already exists\"\n// race that returns exit 5 from `launchctl bootstrap`.\nexport function bootoutAgent(timeoutMs = 2000): void {\n  try {\n    execFileSync(\"launchctl\", [\"bootout\", fullTarget()], { stdio: \"ignore\" });\n  } catch {\n    // already unloaded — fine\n  }\n  const deadline = Date.now() + timeoutMs;\n  while (isAgentLoaded() && Date.now() < deadline) {\n    // Busy-wait in 50 ms ticks. Sleeping via spawnSync('sleep', …) is\n    // expensive; Atomics.wait would need a SharedArrayBuffer. A tight\n    // loop with a syscall per iteration matches what launchctl does\n    // internally and is bounded by the deadline.\n    const wake = Date.now() + 50;\n    while (Date.now() < wake) {\n      /* spin */\n    }\n  }\n}\n\n// Bootstrap is idempotent in intent — re-running it when the service is\n// already loaded should be a no-op, but launchctl returns exit 5\n// (\"Input/output error\") instead of 0. Catch that specific case so callers\n// like `prod restart` can race-recover gracefully. Other failures (bad\n// plist, permission denied, etc.) still throw with stderr attached.\nexport function bootstrapAgent(plistPath: string): void {\n  try {\n    execFileSync(\"launchctl\", [\"bootstrap\", uidScope(), plistPath], {\n      stdio: [\"ignore\", \"ignore\", \"pipe\"],\n    });\n  } catch (err) {\n    const e = err as NodeJS.ErrnoException & {\n      status?: number | null;\n      stderr?: Buffer | string;\n    };\n    const stderr = (e.stderr?.toString?.() ?? \"\").trim();\n    // Exit 5 + \"already\" in stderr → service is already loaded with the\n    // intended plist. Treat as success; the goal state matches the actual.\n    if (e.status === 5 && /already|loaded|in progress/i.test(stderr)) return;\n    // Exit 5 with empty stderr (newer launchctl versions) → most often the\n    // same \"already loaded\" case. If isAgentLoaded() confirms the service\n    // is up, accept it; otherwise rethrow with whatever diagnostic we have.\n    if (e.status === 5 && stderr === \"\" && isAgentLoaded()) return;\n    if (stderr) (e as Error).message = `launchctl bootstrap failed: ${stderr}`;\n    throw e;\n  }\n}\n\nexport function kickstartAgent(): void {\n  execFileSync(\"launchctl\", [\"kickstart\", \"-k\", fullTarget()], { stdio: \"ignore\" });\n}\n\n/**\n * Absolute path to the LaunchAgents plist for the currently-loaded service\n * (brew or deploy.sh). `prod restart` re-bootstraps from this path, so it must\n * resolve the label BEFORE booting the agent out — once unloaded, the probe\n * would no longer detect a brew service.\n */\nexport function darwinPlistPath(): string {\n  return `${process.env.HOME}/Library/LaunchAgents/${resolveLoadedLabel()}.plist`;\n}\n\n/**\n * Returns the absolute paths to the streamer's stdout/stderr log files. These\n * match the StandardOutPath / StandardErrorPath written by `scripts/deploy.sh`\n * into the launchd plist: `$INSTALL_DIR/logs/{stdout,stderr}.log`.\n */\nexport function getLogPaths(): { stdout: string; stderr: string } {\n  const dir = join(installDir(), \"logs\");\n  return { stdout: join(dir, \"stdout.log\"), stderr: join(dir, \"stderr.log\") };\n}\n\n/** Returns the current PID of the supervised agent, or null. */\nexport function getAgentPid(): number | null {\n  try {\n    const out = execFileSync(\"launchctl\", [\"list\"], {\n      stdio: [\"ignore\", \"pipe\", \"ignore\"],\n    }).toString();\n    const label = resolveLoadedLabel();\n    for (const line of out.split(\"\\n\")) {\n      const parts = line.trim().split(/\\s+/);\n      if (parts[2] === label) {\n        const pid = Number.parseInt(parts[0] ?? \"\", 10);\n        return Number.isFinite(pid) && pid > 0 ? pid : null;\n      }\n    }\n    return null;\n  } catch {\n    return null;\n  }\n}\n","import { z } from \"zod\";\n\nexport const MarkerSchema = z.object({\n  devPid: z.number().int().positive(),\n  port: z.number().int().positive(),\n  repoToplevel: z.string().min(1),\n  suspendedAt: z.string().datetime(),\n  userHeld: z.boolean(),\n  shimVersion: z.literal(1),\n});\n\nexport type Marker = z.infer<typeof MarkerSchema>;\n","import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { getLogger } from \"../logger\";\nimport { markerPath } from \"./constants\";\nimport { type Marker, MarkerSchema } from \"./marker-schema\";\n\nconst log = getLogger(\"lifecycle.marker\");\n\nexport function readMarker(): Marker | null {\n  if (!existsSync(markerPath())) return null;\n  try {\n    const raw = readFileSync(markerPath(), \"utf8\");\n    const parsed = JSON.parse(raw);\n    return MarkerSchema.parse(parsed);\n  } catch (err) {\n    log.warn(`marker at ${markerPath()} is malformed; treating as absent`, {\n      error: err instanceof Error ? err.message : String(err),\n    });\n    return null;\n  }\n}\n\nexport function writeMarker(marker: Marker): void {\n  MarkerSchema.parse(marker);\n  mkdirSync(dirname(markerPath()), { recursive: true });\n  const tmp = `${markerPath()}.tmp`;\n  writeFileSync(tmp, `${JSON.stringify(marker, null, 2)}\\n`, { mode: 0o600 });\n  renameSync(tmp, markerPath());\n}\n\nexport function clearMarker(): void {\n  if (existsSync(markerPath())) rmSync(markerPath());\n}\n","import { execFileSync } from \"node:child_process\";\nimport { TASK_NAME } from \"./constants\";\n\n/**\n * Windows backend for the Supervisor interface. Wraps Windows Task Scheduler\n * cmdlets via powershell.exe. Counterpart of launchd.ts for macOS.\n *\n * Task Scheduler has no equivalent of launchd's KeepAlive: SuccessfulExit=false,\n * so the marker-suppression mechanism (used by the shim on macOS) is not needed\n * here. When dev exits cleanly, the prod task simply remains stopped until\n * `tb-streamer prod start` (or system reboot, if the task is at-logon-triggered).\n */\nfunction ps(command: string): string {\n  return execFileSync(\"powershell.exe\", [\"-NoProfile\", \"-NonInteractive\", \"-Command\", command], {\n    stdio: [\"ignore\", \"pipe\", \"ignore\"],\n  }).toString();\n}\n\nfunction psSafe(command: string): void {\n  try {\n    ps(command);\n  } catch {\n    // Intentionally swallowed — caller is one of the stop/disable variants where\n    // \"already gone\" is the desired state.\n  }\n}\n\nexport function isAgentLoaded(): boolean {\n  try {\n    ps(`Get-ScheduledTask -TaskName '${TASK_NAME}' -ErrorAction Stop | Out-Null`);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport function bootoutAgent(): void {\n  // Stop running instance + disable trigger. Mirrors macOS bootout semantics:\n  // the task stays registered but will not run again until bootstrap.\n  psSafe(`Stop-ScheduledTask -TaskName '${TASK_NAME}' -ErrorAction SilentlyContinue`);\n  psSafe(`Disable-ScheduledTask -TaskName '${TASK_NAME}' -ErrorAction SilentlyContinue | Out-Null`);\n}\n\nexport function bootstrapAgent(_specPath: string): void {\n  // _specPath is the plist path on macOS; ignored on Windows because the task\n  // is already registered by scripts\\deploy.ps1 setup. The caller is asking\n  // us to re-enable + start it.\n  ps(`Enable-ScheduledTask -TaskName '${TASK_NAME}' -ErrorAction Stop | Out-Null`);\n  ps(`Start-ScheduledTask -TaskName '${TASK_NAME}' -ErrorAction Stop`);\n}\n\nexport function kickstartAgent(): void {\n  psSafe(`Stop-ScheduledTask -TaskName '${TASK_NAME}' -ErrorAction SilentlyContinue`);\n  ps(`Start-ScheduledTask -TaskName '${TASK_NAME}' -ErrorAction Stop`);\n}\n\n/**\n * Returns the absolute paths to the streamer's stdout/stderr log files.\n *\n * NOT YET IMPLEMENTED on Windows. The current scripts/deploy.ps1 generates a\n * launch.cmd that runs node without redirecting stdout/stderr to any file, so\n * there is nothing to tail. Wiring this up requires changing launch.cmd to\n * append to $installDir\\logs\\{stdout,stderr}.log (matching the macOS layout),\n * then returning those paths here.\n */\nexport function getLogPaths(): { stdout: string; stderr: string } {\n  throw new Error(\n    \"prod logs is not yet wired on Windows — launch.cmd does not currently redirect stdout/stderr to a file. \" +\n      \"Track the fix in docs/troubleshooting.md.\",\n  );\n}\n\nexport function getAgentPid(): number | null {\n  // Task Scheduler does not expose the running PID directly. WMI is the\n  // best-available probe: find node.exe processes whose command line\n  // mentions \"cli.js serve\". Returns the first match, or null.\n  try {\n    const out = ps(\n      `(Get-CimInstance Win32_Process -Filter \"Name='node.exe'\" ` +\n        `| Where-Object { $_.CommandLine -like '*cli.js*serve*' } ` +\n        `| Select-Object -First 1 -ExpandProperty ProcessId)`,\n    ).trim();\n    const n = Number.parseInt(out, 10);\n    return Number.isFinite(n) && n > 0 ? n : null;\n  } catch {\n    return null;\n  }\n}\n","import * as launchd from \"./launchd\";\nimport * as taskScheduler from \"./task-scheduler\";\n\nexport interface Supervisor {\n  /** True if the platform service supervisor knows about our service. */\n  isAgentLoaded(): boolean;\n  /** Stop & unload the supervised service. Idempotent. */\n  bootoutAgent(): void;\n  /**\n   * Re-load the supervised service from its on-disk definition.\n   * macOS: `launchctl bootstrap gui/<uid> <plist>` — `specPath` is the plist path.\n   * Windows: `Enable-ScheduledTask` — `specPath` is ignored (the task is already registered).\n   */\n  bootstrapAgent(specPath: string): void;\n  /** Restart the service (stop+start). */\n  kickstartAgent(): void;\n  /** PID of the running supervised service, or null. */\n  getAgentPid(): number | null;\n  /**\n   * Absolute paths to the stdout/stderr log files for the supervised service.\n   * Throws on platforms where log redirection is not yet wired (Windows today).\n   */\n  getLogPaths(): { stdout: string; stderr: string };\n}\n\nexport function getSupervisor(): Supervisor {\n  if (process.platform === \"darwin\") {\n    return launchd;\n  }\n  if (process.platform === \"win32\") {\n    return taskScheduler;\n  }\n  throw new Error(`lifecycle: unsupported platform ${process.platform}. Supported: darwin, win32.`);\n}\n","import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { z } from \"zod\";\nimport { getLogger } from \"../logger\";\nimport { prefsPath } from \"./constants\";\n\nconst log = getLogger(\"lifecycle.prefs\");\n\nexport const PrefsSchema = z.object({\n  repos: z.record(\n    z.string(),\n    z.object({\n      choice: z.enum([\"replace-prod\", \"use-port\"]),\n      port: z.number().int().positive().optional(),\n      rememberedAt: z.string().datetime(),\n    }),\n  ),\n});\n\nexport type Prefs = z.infer<typeof PrefsSchema>;\nexport type RepoChoice = { choice: \"replace-prod\" } | { choice: \"use-port\"; port: number };\n\nexport function readPrefs(): Prefs {\n  const path = prefsPath();\n  if (!existsSync(path)) return { repos: {} };\n  try {\n    return PrefsSchema.parse(JSON.parse(readFileSync(path, \"utf8\")));\n  } catch (err) {\n    log.warn(`prefs at ${path} are malformed; treating as empty`, {\n      error: err instanceof Error ? err.message : String(err),\n    });\n    return { repos: {} };\n  }\n}\n\nfunction savePrefs(p: Prefs): void {\n  const path = prefsPath();\n  mkdirSync(dirname(path), { recursive: true });\n  const tmp = `${path}.tmp`;\n  writeFileSync(tmp, `${JSON.stringify(p, null, 2)}\\n`, { mode: 0o600 });\n  renameSync(tmp, path);\n}\n\nexport function writePrefForRepo(repoToplevel: string, choice: RepoChoice): void {\n  const p = readPrefs();\n  p.repos[repoToplevel] = {\n    ...choice,\n    rememberedAt: new Date().toISOString(),\n  };\n  savePrefs(p);\n}\n\nexport function getPrefForRepo(repoToplevel: string | null) {\n  if (!repoToplevel) return null;\n  return readPrefs().repos[repoToplevel] ?? null;\n}\n\nexport function forgetRepo(repoToplevel: string): void {\n  const p = readPrefs();\n  delete p.repos[repoToplevel];\n  savePrefs(p);\n}\n\nexport function forgetAll(): void {\n  const path = prefsPath();\n  if (existsSync(path)) rmSync(path);\n}\n","import { createServer } from \"node:net\";\nimport { getLogger } from \"../logger\";\nimport { readMarker, writeMarker } from \"./marker\";\nimport { getSupervisor } from \"./platform\";\nimport { forgetAll, forgetRepo, getPrefForRepo, writePrefForRepo } from \"./prefs\";\nimport type { PromptFn } from \"./prompt\";\n\nconst log = getLogger(\"lifecycle.dev-takeover\");\n\nexport type DevPlan = { kind: \"use-port\"; port: number } | { kind: \"replace-prod\"; port: number };\n\nexport type ResolveDevPlanOpts = {\n  requestedPort: number;\n  replaceProd: boolean;\n  forget: boolean;\n  forgetAll: boolean;\n  repoToplevel: string | null;\n  isProdActive: () => boolean;\n  portInUse: (port: number) => boolean;\n  prompt: PromptFn;\n  findFreePort: (start: number) => Promise<number>;\n};\n\nexport async function resolveDevPlan(opts: ResolveDevPlanOpts): Promise<DevPlan> {\n  if (opts.forgetAll) forgetAll();\n  if (opts.forget && opts.repoToplevel) forgetRepo(opts.repoToplevel);\n\n  // Explicit flag overrides everything.\n  if (opts.replaceProd) {\n    return { kind: \"replace-prod\", port: opts.requestedPort };\n  }\n\n  const prodActive = opts.isProdActive();\n  const portTaken = opts.portInUse(opts.requestedPort);\n  if (!prodActive && !portTaken) {\n    return { kind: \"use-port\", port: opts.requestedPort };\n  }\n\n  // Conflict path. Honour remembered choice if not --forget.\n  if (!opts.forget) {\n    const pref = getPrefForRepo(opts.repoToplevel);\n    if (pref) {\n      if (pref.choice === \"replace-prod\") {\n        return { kind: \"replace-prod\", port: opts.requestedPort };\n      }\n      if (pref.choice === \"use-port\" && pref.port) {\n        return { kind: \"use-port\", port: pref.port };\n      }\n    }\n  }\n\n  const suggested = await opts.findFreePort(opts.requestedPort + 1);\n  const answer = await opts.prompt({ prodPort: opts.requestedPort, suggestedAltPort: suggested });\n\n  if (answer.remember && opts.repoToplevel) {\n    if (answer.choice === \"replace-prod\") {\n      writePrefForRepo(opts.repoToplevel, { choice: \"replace-prod\" });\n    } else {\n      writePrefForRepo(opts.repoToplevel, { choice: \"use-port\", port: answer.port });\n    }\n  }\n\n  return answer.choice === \"replace-prod\"\n    ? { kind: \"replace-prod\", port: opts.requestedPort }\n    : { kind: \"use-port\", port: answer.port };\n}\n\n// Real I/O helpers used by cli/index.ts; kept here so they're collocated.\nexport function detectProdActive(): boolean {\n  return getSupervisor().isAgentLoaded();\n}\n\nexport function isPortInUse(port: number): Promise<boolean> {\n  return new Promise((resolve) => {\n    const srv = createServer();\n    srv.once(\"error\", () => resolve(true));\n    srv.once(\"listening\", () => srv.close(() => resolve(false)));\n    srv.listen(port, \"127.0.0.1\");\n  });\n}\n\nexport function findFreePort(start: number): Promise<number> {\n  return tryBind(start, 0);\n}\n\nasync function tryBind(start: number, offset: number): Promise<number> {\n  if (offset >= 50) return start;\n  const port = start + offset;\n  const free = await new Promise<boolean>((resolve) => {\n    const srv = createServer();\n    srv.once(\"error\", () => resolve(false));\n    srv.once(\"listening\", () => srv.close(() => resolve(true)));\n    srv.listen(port, \"127.0.0.1\");\n  });\n  if (free) return port;\n  return tryBind(start, offset + 1);\n}\n\n/**\n * Acquire the prod port from launchd. Writes marker, unloads agent, installs\n * signal handlers that flip userHeld=true on clean exit (so launchd's shim\n * stays out until `tb-streamer prod start`).\n */\nfunction isPidAlive(pid: number): boolean {\n  try {\n    process.kill(pid, 0);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport function takeoverProd(opts: { port: number; repoToplevel: string | null }): void {\n  const existing = readMarker();\n  if (existing) {\n    if (isPidAlive(existing.devPid)) {\n      throw new Error(\n        `prod is already suspended by dev pid ${existing.devPid} (since ${existing.suspendedAt}). ` +\n          `Stop that dev session first, or run 'tb-streamer prod doctor'.`,\n      );\n    }\n    log.info(`stale marker found (pid ${existing.devPid} is gone) — clearing and proceeding`);\n  }\n\n  getSupervisor().bootoutAgent();\n  writeMarker({\n    devPid: process.pid,\n    port: opts.port,\n    repoToplevel: opts.repoToplevel ?? \"(no-repo)\",\n    suspendedAt: new Date().toISOString(),\n    userHeld: false,\n    shimVersion: 1,\n  });\n\n  const flipUserHeld = () => {\n    const m = readMarker();\n    if (m && m.devPid === process.pid) {\n      writeMarker({ ...m, userHeld: true });\n      log.info(\n        `prod is suspended (userHeld). Run 'tb-streamer prod start' to restore the supervised instance.`,\n      );\n    }\n  };\n\n  process.on(\"SIGINT\", () => {\n    flipUserHeld();\n    process.exit(0);\n  });\n  process.on(\"SIGTERM\", () => {\n    flipUserHeld();\n    process.exit(0);\n  });\n  process.on(\"SIGHUP\", () => {\n    flipUserHeld();\n    process.exit(0);\n  });\n  process.on(\"uncaughtException\", (err) => {\n    flipUserHeld();\n    log.error(`uncaught: ${err.message}`);\n    process.exit(1);\n  });\n  process.on(\"exit\", () => {\n    flipUserHeld();\n  });\n}\n","import { stdin, stdout } from \"node:process\";\nimport { createInterface } from \"node:readline/promises\";\n\nexport type PromptResult =\n  | { choice: \"replace-prod\"; remember: boolean }\n  | { choice: \"use-port\"; port: number; remember: boolean };\n\nexport type PromptFn = (opts: {\n  prodPort: number;\n  suggestedAltPort: number;\n}) => Promise<PromptResult>;\n\nexport const interactivePrompt: PromptFn = async ({ prodPort, suggestedAltPort }) => {\n  const rl = createInterface({ input: stdin, output: stdout });\n  try {\n    stdout.write(\n      `\\nProd streamer is running on port ${prodPort}.\\n` +\n        `  [r] Stop prod and take port ${prodPort}\\n` +\n        `  [p] Run dev on port ${suggestedAltPort} instead\\n`,\n    );\n    const choiceAns = (await rl.question(\"Choice [r/p]: \")).trim().toLowerCase();\n    const rememberAns = (await rl.question(\"Remember this choice for this repo? [y/N]: \"))\n      .trim()\n      .toLowerCase();\n    const remember = rememberAns === \"y\" || rememberAns === \"yes\";\n\n    if (choiceAns === \"r\") {\n      return { choice: \"replace-prod\", remember };\n    }\n    return { choice: \"use-port\", port: suggestedAltPort, remember };\n  } finally {\n    rl.close();\n  }\n};\n","import { execFileSync } from \"node:child_process\";\n\nexport function getGitToplevel(cwd: string): string | null {\n  try {\n    return execFileSync(\"git\", [\"rev-parse\", \"--show-toplevel\"], {\n      cwd,\n      stdio: [\"ignore\", \"pipe\", \"ignore\"],\n    })\n      .toString()\n      .trim();\n  } catch {\n    return null;\n  }\n}\n","import { setApiKey } from \"../src/auth\";\n\nconst KEY_PATTERN = /^tb_[a-f0-9]{32}$/;\n\nexport interface SetKeyArgs {\n  key: string | undefined;\n}\n\nexport interface SetKeyDeps {\n  log: { info: (msg: string) => void; error: (msg: string) => void };\n  readStdin?: () => Promise<string>;\n}\n\nasync function defaultReadStdin(): Promise<string> {\n  return new Promise((resolve, reject) => {\n    const chunks: Buffer[] = [];\n    process.stdin.on(\"data\", (chunk) => chunks.push(Buffer.from(chunk)));\n    process.stdin.on(\"end\", () => resolve(Buffer.concat(chunks).toString(\"utf-8\")));\n    process.stdin.on(\"error\", reject);\n  });\n}\n\nexport async function runSetKey(args: SetKeyArgs, deps: SetKeyDeps): Promise<number> {\n  const readStdin = deps.readStdin ?? defaultReadStdin;\n\n  let key = args.key;\n  if (key === \"-\") {\n    key = (await readStdin()).trim();\n  }\n\n  if (!key || key.length === 0) {\n    deps.log.error(\"API key required. Pass as argument or via stdin with '-'.\");\n    return 1;\n  }\n\n  if (!KEY_PATTERN.test(key)) {\n    deps.log.error(\"Invalid key format. Expected: tb_<32 hex chars>\");\n    return 1;\n  }\n\n  try {\n    setApiKey(key);\n  } catch (err) {\n    deps.log.error(`Failed to write key: ${(err as Error).message}`);\n    return 1;\n  }\n\n  deps.log.info(\"API key updated.\");\n  deps.log.info(\"Restart the service to pick up the new key: brew services restart tb-streamer\");\n  return 0;\n}\n","(function () {\n  require('./lib/main').config(\n    Object.assign(\n      {},\n      require('./lib/env-options'),\n      require('./lib/cli-options')(process.argv)\n    )\n  )\n})()\n","/**\n * CommanderError class\n */\nexport class CommanderError extends Error {\n  /**\n   * Constructs the CommanderError class\n   * @param {number} exitCode suggested exit code which could be used with process.exit\n   * @param {string} code an id string representing the error\n   * @param {string} message human-readable description of the error\n   */\n  constructor(exitCode, code, message) {\n    super(message);\n    // properly capture stack trace in Node.js\n    Error.captureStackTrace(this, this.constructor);\n    this.name = this.constructor.name;\n    this.code = code;\n    this.exitCode = exitCode;\n    this.nestedError = undefined;\n  }\n}\n\n/**\n * InvalidArgumentError class\n */\nexport class InvalidArgumentError extends CommanderError {\n  /**\n   * Constructs the InvalidArgumentError class\n   * @param {string} [message] explanation of why argument is invalid\n   */\n  constructor(message) {\n    super(1, 'commander.invalidArgument', message);\n    // properly capture stack trace in Node.js\n    Error.captureStackTrace(this, this.constructor);\n    this.name = this.constructor.name;\n  }\n}\n","import { InvalidArgumentError } from './error.js';\n\nexport class Argument {\n  /**\n   * Initialize a new command argument with the given name and description.\n   * The default is that the argument is required, and you can explicitly\n   * indicate this with <> around the name. Put [] around the name for an optional argument.\n   *\n   * @param {string} name\n   * @param {string} [description]\n   */\n\n  constructor(name, description) {\n    this.description = description || '';\n    this.variadic = false;\n    this.parseArg = undefined;\n    this.defaultValue = undefined;\n    this.defaultValueDescription = undefined;\n    this.argChoices = undefined;\n\n    switch (name[0]) {\n      case '<': // e.g. <required>\n        this.required = true;\n        this._name = name.slice(1, -1);\n        break;\n      case '[': // e.g. [optional]\n        this.required = false;\n        this._name = name.slice(1, -1);\n        break;\n      default:\n        this.required = true;\n        this._name = name;\n        break;\n    }\n\n    if (this._name.endsWith('...')) {\n      this.variadic = true;\n      this._name = this._name.slice(0, -3);\n    }\n  }\n\n  /**\n   * Return argument name.\n   *\n   * @return {string}\n   */\n\n  name() {\n    return this._name;\n  }\n\n  /**\n   * @package\n   */\n\n  _collectValue(value, previous) {\n    if (previous === this.defaultValue || !Array.isArray(previous)) {\n      return [value];\n    }\n\n    previous.push(value);\n    return previous;\n  }\n\n  /**\n   * Set the default value, and optionally supply the description to be displayed in the help.\n   *\n   * @param {*} value\n   * @param {string} [description]\n   * @return {Argument}\n   */\n\n  default(value, description) {\n    this.defaultValue = value;\n    this.defaultValueDescription = description;\n    return this;\n  }\n\n  /**\n   * Set the custom handler for processing CLI command arguments into argument values.\n   *\n   * @param {Function} [fn]\n   * @return {Argument}\n   */\n\n  argParser(fn) {\n    this.parseArg = fn;\n    return this;\n  }\n\n  /**\n   * Only allow argument value to be one of choices.\n   *\n   * @param {string[]} values\n   * @return {Argument}\n   */\n\n  choices(values) {\n    this.argChoices = values.slice();\n    this.parseArg = (arg, previous) => {\n      if (!this.argChoices.includes(arg)) {\n        throw new InvalidArgumentError(\n          `Allowed choices are ${this.argChoices.join(', ')}.`,\n        );\n      }\n      if (this.variadic) {\n        return this._collectValue(arg, previous);\n      }\n      return arg;\n    };\n    return this;\n  }\n\n  /**\n   * Make argument required.\n   *\n   * @returns {Argument}\n   */\n  argRequired() {\n    this.required = true;\n    return this;\n  }\n\n  /**\n   * Make argument optional.\n   *\n   * @returns {Argument}\n   */\n  argOptional() {\n    this.required = false;\n    return this;\n  }\n}\n\n/**\n * Takes an argument and returns its human readable equivalent for help usage.\n *\n * @param {Argument} arg\n * @return {string}\n * @private\n */\n\nexport function humanReadableArgName(arg) {\n  const nameOutput = arg.name() + (arg.variadic === true ? '...' : '');\n\n  return arg.required ? '<' + nameOutput + '>' : '[' + nameOutput + ']';\n}\n","import { EventEmitter } from 'node:events';\nimport childProcess from 'node:child_process';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport process from 'node:process';\nimport { stripVTControlCharacters } from 'node:util';\n\nimport { Argument, humanReadableArgName } from './argument.js';\nimport { CommanderError } from './error.js';\nimport { Help } from './help.js';\nimport { Option, DualOptions } from './option.js';\nimport { suggestSimilar } from './suggestSimilar.js';\n\nexport class Command extends EventEmitter {\n  /**\n   * Initialize a new `Command`.\n   *\n   * @param {string} [name]\n   */\n\n  constructor(name) {\n    super();\n    /** @type {Command[]} */\n    this.commands = [];\n    /** @type {Option[]} */\n    this.options = [];\n    this.parent = null;\n    this._allowUnknownOption = false;\n    this._allowExcessArguments = false;\n    /** @type {Argument[]} */\n    this.registeredArguments = [];\n    this._args = this.registeredArguments; // deprecated old name\n    /** @type {string[]} */\n    this.args = []; // cli args with options removed\n    this.rawArgs = [];\n    this.processedArgs = []; // like .args but after custom processing and collecting variadic\n    this._scriptPath = null;\n    this._name = name || '';\n    this._optionValues = {};\n    this._optionValueSources = {}; // default, env, cli etc\n    this._storeOptionsAsProperties = false;\n    this._actionHandler = null;\n    this._executableHandler = false;\n    this._executableFile = null; // custom name for executable\n    this._executableDir = null; // custom search directory for subcommands\n    this._defaultCommandName = null;\n    this._exitCallback = null;\n    this._aliases = [];\n    this._combineFlagAndOptionalValue = true;\n    this._description = '';\n    this._summary = '';\n    this._argsDescription = undefined; // legacy\n    this._enablePositionalOptions = false;\n    this._passThroughOptions = false;\n    this._lifeCycleHooks = {}; // a hash of arrays\n    /** @type {(boolean | string)} */\n    this._showHelpAfterError = false;\n    this._showSuggestionAfterError = true;\n    this._savedState = null; // used in save/restoreStateBeforeParse\n\n    // see configureOutput() for docs\n    this._outputConfiguration = {\n      writeOut: (str) => process.stdout.write(str),\n      writeErr: (str) => process.stderr.write(str),\n      outputError: (str, write) => write(str),\n      getOutHelpWidth: () =>\n        process.stdout.isTTY ? process.stdout.columns : undefined,\n      getErrHelpWidth: () =>\n        process.stderr.isTTY ? process.stderr.columns : undefined,\n      getOutHasColors: () =>\n        useColor() ?? (process.stdout.isTTY && process.stdout.hasColors?.()),\n      getErrHasColors: () =>\n        useColor() ?? (process.stderr.isTTY && process.stderr.hasColors?.()),\n      stripColor: (str) => stripVTControlCharacters(str),\n    };\n\n    this._hidden = false;\n    /** @type {(Option | null | undefined)} */\n    this._helpOption = undefined; // Lazy created on demand. May be null if help option is disabled.\n    this._addImplicitHelpCommand = undefined; // undecided whether true or false yet, not inherited\n    /** @type {Command} */\n    this._helpCommand = undefined; // lazy initialised, inherited\n    this._helpConfiguration = {};\n    /** @type {string | undefined} */\n    this._helpGroupHeading = undefined; // soft initialised when added to parent\n    /** @type {string | undefined} */\n    this._defaultCommandGroup = undefined;\n    /** @type {string | undefined} */\n    this._defaultOptionGroup = undefined;\n  }\n\n  /**\n   * Copy settings that are useful to have in common across root command and subcommands.\n   *\n   * (Used internally when adding a command using `.command()` so subcommands inherit parent settings.)\n   *\n   * @param {Command} sourceCommand\n   * @return {Command} `this` command for chaining\n   */\n  copyInheritedSettings(sourceCommand) {\n    this._outputConfiguration = sourceCommand._outputConfiguration;\n    this._helpOption = sourceCommand._helpOption;\n    this._helpCommand = sourceCommand._helpCommand;\n    this._helpConfiguration = sourceCommand._helpConfiguration;\n    this._exitCallback = sourceCommand._exitCallback;\n    this._storeOptionsAsProperties = sourceCommand._storeOptionsAsProperties;\n    this._combineFlagAndOptionalValue =\n      sourceCommand._combineFlagAndOptionalValue;\n    this._allowExcessArguments = sourceCommand._allowExcessArguments;\n    this._enablePositionalOptions = sourceCommand._enablePositionalOptions;\n    this._showHelpAfterError = sourceCommand._showHelpAfterError;\n    this._showSuggestionAfterError = sourceCommand._showSuggestionAfterError;\n\n    return this;\n  }\n\n  /**\n   * @returns {Command[]}\n   * @private\n   */\n\n  _getCommandAndAncestors() {\n    const result = [];\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    for (let command = this; command; command = command.parent) {\n      result.push(command);\n    }\n    return result;\n  }\n\n  /**\n   * Define a command.\n   *\n   * There are two styles of command: pay attention to where to put the description.\n   *\n   * @example\n   * // Command implemented using action handler (description is supplied separately to `.command`)\n   * program\n   *   .command('clone <source> [destination]')\n   *   .description('clone a repository into a newly created directory')\n   *   .action((source, destination) => {\n   *     console.log('clone command called');\n   *   });\n   *\n   * // Command implemented using separate executable file (description is second parameter to `.command`)\n   * program\n   *   .command('start <service>', 'start named service')\n   *   .command('stop [service]', 'stop named service, or all if no name supplied');\n   *\n   * @param {string} nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`\n   * @param {(object | string)} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable)\n   * @param {object} [execOpts] - configuration options (for executable)\n   * @return {Command} returns new command for action handler, or `this` for executable command\n   */\n\n  command(nameAndArgs, actionOptsOrExecDesc, execOpts) {\n    let desc = actionOptsOrExecDesc;\n    let opts = execOpts;\n    if (typeof desc === 'object' && desc !== null) {\n      opts = desc;\n      desc = null;\n    }\n    opts = opts || {};\n    const [, name, args] = nameAndArgs.match(/([^ ]+) *(.*)/);\n\n    const cmd = this.createCommand(name);\n    if (desc) {\n      cmd.description(desc);\n      cmd._executableHandler = true;\n    }\n    if (opts.isDefault) this._defaultCommandName = cmd._name;\n    cmd._hidden = !!(opts.noHelp || opts.hidden); // noHelp is deprecated old name for hidden\n    cmd._executableFile = opts.executableFile || null; // Custom name for executable file, set missing to null to match constructor\n    if (args) cmd.arguments(args);\n    this._registerCommand(cmd);\n    cmd.parent = this;\n    cmd.copyInheritedSettings(this);\n\n    if (desc) return this;\n    return cmd;\n  }\n\n  /**\n   * Factory routine to create a new unattached command.\n   *\n   * See .command() for creating an attached subcommand, which uses this routine to\n   * create the command. You can override createCommand to customise subcommands.\n   *\n   * @param {string} [name]\n   * @return {Command} new command\n   */\n\n  createCommand(name) {\n    return new Command(name);\n  }\n\n  /**\n   * You can customise the help with a subclass of Help by overriding createHelp,\n   * or by overriding Help properties using configureHelp().\n   *\n   * @return {Help}\n   */\n\n  createHelp() {\n    return Object.assign(new Help(), this.configureHelp());\n  }\n\n  /**\n   * You can customise the help by overriding Help properties using configureHelp(),\n   * or with a subclass of Help by overriding createHelp().\n   *\n   * @param {object} [configuration] - configuration options\n   * @return {(Command | object)} `this` command for chaining, or stored configuration\n   */\n\n  configureHelp(configuration) {\n    if (configuration === undefined) return this._helpConfiguration;\n\n    this._helpConfiguration = configuration;\n    return this;\n  }\n\n  /**\n   * The default output goes to stdout and stderr. You can customise this for special\n   * applications. You can also customise the display of errors by overriding outputError.\n   *\n   * The configuration properties are all functions:\n   *\n   *     // change how output being written, defaults to stdout and stderr\n   *     writeOut(str)\n   *     writeErr(str)\n   *     // change how output being written for errors, defaults to writeErr\n   *     outputError(str, write) // used for displaying errors and not used for displaying help\n   *     // specify width for wrapping help\n   *     getOutHelpWidth()\n   *     getErrHelpWidth()\n   *     // color support, currently only used with Help\n   *     getOutHasColors()\n   *     getErrHasColors()\n   *     stripColor() // used to remove ANSI escape codes if output does not have colors\n   *\n   * @param {object} [configuration] - configuration options\n   * @return {(Command | object)} `this` command for chaining, or stored configuration\n   */\n\n  configureOutput(configuration) {\n    if (configuration === undefined) return this._outputConfiguration;\n\n    this._outputConfiguration = {\n      ...this._outputConfiguration,\n      ...configuration,\n    };\n    return this;\n  }\n\n  /**\n   * Display the help or a custom message after an error occurs.\n   *\n   * @param {(boolean|string)} [displayHelp]\n   * @return {Command} `this` command for chaining\n   */\n  showHelpAfterError(displayHelp = true) {\n    if (typeof displayHelp !== 'string') displayHelp = !!displayHelp;\n    this._showHelpAfterError = displayHelp;\n    return this;\n  }\n\n  /**\n   * Display suggestion of similar commands for unknown commands, or options for unknown options.\n   *\n   * @param {boolean} [displaySuggestion]\n   * @return {Command} `this` command for chaining\n   */\n  showSuggestionAfterError(displaySuggestion = true) {\n    this._showSuggestionAfterError = !!displaySuggestion;\n    return this;\n  }\n\n  /**\n   * Add a prepared subcommand.\n   *\n   * See .command() for creating an attached subcommand which inherits settings from its parent.\n   *\n   * @param {Command} cmd - new subcommand\n   * @param {object} [opts] - configuration options\n   * @return {Command} `this` command for chaining\n   */\n\n  addCommand(cmd, opts) {\n    if (!cmd._name) {\n      throw new Error(`Command passed to .addCommand() must have a name\n- specify the name in Command constructor or using .name()`);\n    }\n\n    opts = opts || {};\n    if (opts.isDefault) this._defaultCommandName = cmd._name;\n    if (opts.noHelp || opts.hidden) cmd._hidden = true; // modifying passed command due to existing implementation\n\n    this._registerCommand(cmd);\n    cmd.parent = this;\n    cmd._checkForBrokenPassThrough();\n\n    return this;\n  }\n\n  /**\n   * Factory routine to create a new unattached argument.\n   *\n   * See .argument() for creating an attached argument, which uses this routine to\n   * create the argument. You can override createArgument to return a custom argument.\n   *\n   * @param {string} name\n   * @param {string} [description]\n   * @return {Argument} new argument\n   */\n\n  createArgument(name, description) {\n    return new Argument(name, description);\n  }\n\n  /**\n   * Define argument syntax for command.\n   *\n   * The default is that the argument is required, and you can explicitly\n   * indicate this with <> around the name. Put [] around the name for an optional argument.\n   *\n   * @example\n   * program.argument('<input-file>');\n   * program.argument('[output-file]');\n   *\n   * @param {string} name\n   * @param {string} [description]\n   * @param {(Function|*)} [parseArg] - custom argument processing function or default value\n   * @param {*} [defaultValue]\n   * @return {Command} `this` command for chaining\n   */\n  argument(name, description, parseArg, defaultValue) {\n    const argument = this.createArgument(name, description);\n    if (typeof parseArg === 'function') {\n      argument.default(defaultValue).argParser(parseArg);\n    } else {\n      argument.default(parseArg);\n    }\n    this.addArgument(argument);\n    return this;\n  }\n\n  /**\n   * Define argument syntax for command, adding multiple at once (without descriptions).\n   *\n   * See also .argument().\n   *\n   * @example\n   * program.arguments('<cmd> [env]');\n   *\n   * @param {string} names\n   * @return {Command} `this` command for chaining\n   */\n\n  arguments(names) {\n    names\n      .trim()\n      .split(/ +/)\n      .forEach((detail) => {\n        this.argument(detail);\n      });\n    return this;\n  }\n\n  /**\n   * Define argument syntax for command, adding a prepared argument.\n   *\n   * @param {Argument} argument\n   * @return {Command} `this` command for chaining\n   */\n  addArgument(argument) {\n    const previousArgument = this.registeredArguments.slice(-1)[0];\n    if (previousArgument?.variadic) {\n      throw new Error(\n        `only the last argument can be variadic '${previousArgument.name()}'`,\n      );\n    }\n    if (\n      argument.required &&\n      argument.defaultValue !== undefined &&\n      argument.parseArg === undefined\n    ) {\n      throw new Error(\n        `a default value for a required argument is never used: '${argument.name()}'`,\n      );\n    }\n    this.registeredArguments.push(argument);\n    return this;\n  }\n\n  /**\n   * Customise or override default help command. By default a help command is automatically added if your command has subcommands.\n   *\n   * @example\n   *    program.helpCommand('help [cmd]');\n   *    program.helpCommand('help [cmd]', 'show help');\n   *    program.helpCommand(false); // suppress default help command\n   *    program.helpCommand(true); // add help command even if no subcommands\n   *\n   * @param {string|boolean} enableOrNameAndArgs - enable with custom name and/or arguments, or boolean to override whether added\n   * @param {string} [description] - custom description\n   * @return {Command} `this` command for chaining\n   */\n\n  helpCommand(enableOrNameAndArgs, description) {\n    if (typeof enableOrNameAndArgs === 'boolean') {\n      this._addImplicitHelpCommand = enableOrNameAndArgs;\n      if (enableOrNameAndArgs && this._defaultCommandGroup) {\n        // make the command to store the group\n        this._initCommandGroup(this._getHelpCommand());\n      }\n      return this;\n    }\n\n    const nameAndArgs = enableOrNameAndArgs ?? 'help [command]';\n    const [, helpName, helpArgs] = nameAndArgs.match(/([^ ]+) *(.*)/);\n    const helpDescription = description ?? 'display help for command';\n\n    const helpCommand = this.createCommand(helpName);\n    helpCommand.helpOption(false);\n    if (helpArgs) helpCommand.arguments(helpArgs);\n    if (helpDescription) helpCommand.description(helpDescription);\n\n    this._addImplicitHelpCommand = true;\n    this._helpCommand = helpCommand;\n    // init group unless lazy create\n    if (enableOrNameAndArgs || description) this._initCommandGroup(helpCommand);\n\n    return this;\n  }\n\n  /**\n   * Add prepared custom help command.\n   *\n   * @param {(Command|string|boolean)} helpCommand - custom help command, or deprecated enableOrNameAndArgs as for `.helpCommand()`\n   * @param {string} [deprecatedDescription] - deprecated custom description used with custom name only\n   * @return {Command} `this` command for chaining\n   */\n  addHelpCommand(helpCommand, deprecatedDescription) {\n    // If not passed an object, call through to helpCommand for backwards compatibility,\n    // as addHelpCommand was originally used like helpCommand is now.\n    if (typeof helpCommand !== 'object') {\n      this.helpCommand(helpCommand, deprecatedDescription);\n      return this;\n    }\n\n    this._addImplicitHelpCommand = true;\n    this._helpCommand = helpCommand;\n    this._initCommandGroup(helpCommand);\n    return this;\n  }\n\n  /**\n   * Lazy create help command.\n   *\n   * @return {(Command|null)}\n   * @package\n   */\n  _getHelpCommand() {\n    const hasImplicitHelpCommand =\n      this._addImplicitHelpCommand ??\n      (this.commands.length &&\n        !this._actionHandler &&\n        !this._findCommand('help'));\n\n    if (hasImplicitHelpCommand) {\n      if (this._helpCommand === undefined) {\n        this.helpCommand(undefined, undefined); // use default name and description\n      }\n      return this._helpCommand;\n    }\n    return null;\n  }\n\n  /**\n   * Add hook for life cycle event.\n   *\n   * @param {string} event\n   * @param {Function} listener\n   * @return {Command} `this` command for chaining\n   */\n\n  hook(event, listener) {\n    const allowedValues = ['preSubcommand', 'preAction', 'postAction'];\n    if (!allowedValues.includes(event)) {\n      throw new Error(`Unexpected value for event passed to hook : '${event}'.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n    }\n    if (this._lifeCycleHooks[event]) {\n      this._lifeCycleHooks[event].push(listener);\n    } else {\n      this._lifeCycleHooks[event] = [listener];\n    }\n    return this;\n  }\n\n  /**\n   * Register callback to use as replacement for calling process.exit.\n   *\n   * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing\n   * @return {Command} `this` command for chaining\n   */\n\n  exitOverride(fn) {\n    if (fn) {\n      this._exitCallback = fn;\n    } else {\n      this._exitCallback = (err) => {\n        if (err.code !== 'commander.executeSubCommandAsync') {\n          throw err;\n        } else {\n          // Async callback from spawn events, not useful to throw.\n        }\n      };\n    }\n    return this;\n  }\n\n  /**\n   * Call process.exit, and _exitCallback if defined.\n   *\n   * @param {number} exitCode exit code for using with process.exit\n   * @param {string} code an id string representing the error\n   * @param {string} message human-readable description of the error\n   * @return never\n   * @private\n   */\n\n  _exit(exitCode, code, message) {\n    if (this._exitCallback) {\n      this._exitCallback(new CommanderError(exitCode, code, message));\n      // Expecting this line is not reached.\n    }\n    process.exit(exitCode);\n  }\n\n  /**\n   * Register callback `fn` for the command.\n   *\n   * @example\n   * program\n   *   .command('serve')\n   *   .description('start service')\n   *   .action(function() {\n   *      // do work here\n   *   });\n   *\n   * @param {Function} fn\n   * @return {Command} `this` command for chaining\n   */\n\n  action(fn) {\n    const listener = (args) => {\n      // The .action callback takes an extra parameter which is the command or options.\n      const expectedArgsCount = this.registeredArguments.length;\n      const actionArgs = args.slice(0, expectedArgsCount);\n      if (this._storeOptionsAsProperties) {\n        actionArgs[expectedArgsCount] = this; // backwards compatible \"options\"\n      } else {\n        actionArgs[expectedArgsCount] = this.opts();\n      }\n      actionArgs.push(this);\n\n      return fn.apply(this, actionArgs);\n    };\n    this._actionHandler = listener;\n    return this;\n  }\n\n  /**\n   * Factory routine to create a new unattached option.\n   *\n   * See .option() for creating an attached option, which uses this routine to\n   * create the option. You can override createOption to return a custom option.\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   * @return {Option} new option\n   */\n\n  createOption(flags, description) {\n    return new Option(flags, description);\n  }\n\n  /**\n   * Wrap parseArgs to catch 'commander.invalidArgument'.\n   *\n   * @param {(Option | Argument)} target\n   * @param {string} value\n   * @param {*} previous\n   * @param {string} invalidArgumentMessage\n   * @private\n   */\n\n  _callParseArg(target, value, previous, invalidArgumentMessage) {\n    try {\n      return target.parseArg(value, previous);\n    } catch (err) {\n      if (err.code === 'commander.invalidArgument') {\n        const message = `${invalidArgumentMessage} ${err.message}`;\n        this.error(message, { exitCode: err.exitCode, code: err.code });\n      }\n      throw err;\n    }\n  }\n\n  /**\n   * Check for option flag conflicts.\n   * Register option if no conflicts found, or throw on conflict.\n   *\n   * @param {Option} option\n   * @private\n   */\n\n  _registerOption(option) {\n    const matchingOption =\n      (option.short && this._findOption(option.short)) ||\n      (option.long && this._findOption(option.long));\n    if (matchingOption) {\n      const matchingFlag =\n        option.long && this._findOption(option.long)\n          ? option.long\n          : option.short;\n      throw new Error(`Cannot add option '${option.flags}'${this._name && ` to command '${this._name}'`} due to conflicting flag '${matchingFlag}'\n-  already used by option '${matchingOption.flags}'`);\n    }\n\n    this._initOptionGroup(option);\n    this.options.push(option);\n  }\n\n  /**\n   * Check for command name and alias conflicts with existing commands.\n   * Register command if no conflicts found, or throw on conflict.\n   *\n   * @param {Command} command\n   * @private\n   */\n\n  _registerCommand(command) {\n    const knownBy = (cmd) => {\n      return [cmd.name()].concat(cmd.aliases());\n    };\n\n    const alreadyUsed = knownBy(command).find((name) =>\n      this._findCommand(name),\n    );\n    if (alreadyUsed) {\n      const existingCmd = knownBy(this._findCommand(alreadyUsed)).join('|');\n      const newCmd = knownBy(command).join('|');\n      throw new Error(\n        `cannot add command '${newCmd}' as already have command '${existingCmd}'`,\n      );\n    }\n\n    this._initCommandGroup(command);\n    this.commands.push(command);\n  }\n\n  /**\n   * Add an option.\n   *\n   * @param {Option} option\n   * @return {Command} `this` command for chaining\n   */\n  addOption(option) {\n    this._registerOption(option);\n\n    const oname = option.name();\n    const name = option.attributeName();\n\n    // store default value\n    if (option.defaultValue !== undefined) {\n      this.setOptionValueWithSource(name, option.defaultValue, 'default');\n    }\n\n    // handler for cli and env supplied values\n    const handleOptionValue = (val, invalidValueMessage, valueSource) => {\n      // val is null for optional option used without an optional-argument.\n      // val is undefined for boolean and negated option.\n      if (val == null && option.presetArg !== undefined) {\n        val = option.presetArg;\n      }\n\n      // custom processing\n      const oldValue = this.getOptionValue(name);\n      if (val !== null && option.parseArg) {\n        val = this._callParseArg(option, val, oldValue, invalidValueMessage);\n      } else if (val !== null && option.variadic) {\n        val = option._collectValue(val, oldValue);\n      }\n\n      // Fill-in appropriate missing values. Long winded but easy to follow.\n      if (val == null) {\n        if (option.negate) {\n          val = false;\n        } else if (option.isBoolean() || option.optional) {\n          val = true;\n        } else {\n          val = ''; // not normal, parseArg might have failed or be a mock function for testing\n        }\n      }\n      this.setOptionValueWithSource(name, val, valueSource);\n    };\n\n    this.on('option:' + oname, (val) => {\n      const invalidValueMessage = `error: option '${option.flags}' argument '${val}' is invalid.`;\n      handleOptionValue(val, invalidValueMessage, 'cli');\n    });\n\n    if (option.envVar) {\n      this.on('optionEnv:' + oname, (val) => {\n        const invalidValueMessage = `error: option '${option.flags}' value '${val}' from env '${option.envVar}' is invalid.`;\n        handleOptionValue(val, invalidValueMessage, 'env');\n      });\n    }\n\n    return this;\n  }\n\n  /**\n   * Internal implementation shared by .option() and .requiredOption()\n   *\n   * @return {Command} `this` command for chaining\n   * @private\n   */\n  _optionEx(config, flags, description, fn, defaultValue) {\n    if (typeof flags === 'object' && flags instanceof Option) {\n      throw new Error(\n        'To add an Option object use addOption() instead of option() or requiredOption()',\n      );\n    }\n    const option = this.createOption(flags, description);\n    option.makeOptionMandatory(!!config.mandatory);\n    if (typeof fn === 'function') {\n      option.default(defaultValue).argParser(fn);\n    } else if (fn instanceof RegExp) {\n      // deprecated\n      const regex = fn;\n      fn = (val, def) => {\n        const m = regex.exec(val);\n        return m ? m[0] : def;\n      };\n      option.default(defaultValue).argParser(fn);\n    } else {\n      option.default(fn);\n    }\n\n    return this.addOption(option);\n  }\n\n  /**\n   * Define option with `flags`, `description`, and optional argument parsing function or `defaultValue` or both.\n   *\n   * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space. A required\n   * option-argument is indicated by `<>` and an optional option-argument by `[]`.\n   *\n   * See the README for more details, and see also addOption() and requiredOption().\n   *\n   * @example\n   * program\n   *     .option('-p, --pepper', 'add pepper')\n   *     .option('--pt, --pizza-type <TYPE>', 'type of pizza') // required option-argument\n   *     .option('-c, --cheese [CHEESE]', 'add extra cheese', 'mozzarella') // optional option-argument with default\n   *     .option('-t, --tip <VALUE>', 'add tip to purchase cost', parseFloat) // custom parse function\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   * @param {(Function|*)} [parseArg] - custom option processing function or default value\n   * @param {*} [defaultValue]\n   * @return {Command} `this` command for chaining\n   */\n\n  option(flags, description, parseArg, defaultValue) {\n    return this._optionEx({}, flags, description, parseArg, defaultValue);\n  }\n\n  /**\n   * Add a required option which must have a value after parsing. This usually means\n   * the option must be specified on the command line. (Otherwise the same as .option().)\n   *\n   * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space.\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   * @param {(Function|*)} [parseArg] - custom option processing function or default value\n   * @param {*} [defaultValue]\n   * @return {Command} `this` command for chaining\n   */\n\n  requiredOption(flags, description, parseArg, defaultValue) {\n    return this._optionEx(\n      { mandatory: true },\n      flags,\n      description,\n      parseArg,\n      defaultValue,\n    );\n  }\n\n  /**\n   * Alter parsing of short flags with optional values.\n   *\n   * @example\n   * // for `.option('-f,--flag [value]'):\n   * program.combineFlagAndOptionalValue(true);  // `-f80` is treated like `--flag=80`, this is the default behaviour\n   * program.combineFlagAndOptionalValue(false) // `-fb` is treated like `-f -b`\n   *\n   * @param {boolean} [combine] - if `true` or omitted, an optional value can be specified directly after the flag.\n   * @return {Command} `this` command for chaining\n   */\n  combineFlagAndOptionalValue(combine = true) {\n    this._combineFlagAndOptionalValue = !!combine;\n    return this;\n  }\n\n  /**\n   * Allow unknown options on the command line.\n   *\n   * @param {boolean} [allowUnknown] - if `true` or omitted, no error will be thrown for unknown options.\n   * @return {Command} `this` command for chaining\n   */\n  allowUnknownOption(allowUnknown = true) {\n    this._allowUnknownOption = !!allowUnknown;\n    return this;\n  }\n\n  /**\n   * Allow excess command-arguments on the command line. Pass false to make excess arguments an error.\n   *\n   * @param {boolean} [allowExcess] - if `true` or omitted, no error will be thrown for excess arguments.\n   * @return {Command} `this` command for chaining\n   */\n  allowExcessArguments(allowExcess = true) {\n    this._allowExcessArguments = !!allowExcess;\n    return this;\n  }\n\n  /**\n   * Enable positional options. Positional means global options are specified before subcommands which lets\n   * subcommands reuse the same option names, and also enables subcommands to turn on passThroughOptions.\n   * The default behaviour is non-positional and global options may appear anywhere on the command line.\n   *\n   * @param {boolean} [positional]\n   * @return {Command} `this` command for chaining\n   */\n  enablePositionalOptions(positional = true) {\n    this._enablePositionalOptions = !!positional;\n    return this;\n  }\n\n  /**\n   * Pass through options that come after command-arguments rather than treat them as command-options,\n   * so actual command-options come before command-arguments. Turning this on for a subcommand requires\n   * positional options to have been enabled on the program (parent commands).\n   * The default behaviour is non-positional and options may appear before or after command-arguments.\n   *\n   * @param {boolean} [passThrough] for unknown options.\n   * @return {Command} `this` command for chaining\n   */\n  passThroughOptions(passThrough = true) {\n    this._passThroughOptions = !!passThrough;\n    this._checkForBrokenPassThrough();\n    return this;\n  }\n\n  /**\n   * @private\n   */\n\n  _checkForBrokenPassThrough() {\n    if (\n      this.parent &&\n      this._passThroughOptions &&\n      !this.parent._enablePositionalOptions\n    ) {\n      throw new Error(\n        `passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`,\n      );\n    }\n  }\n\n  /**\n   * Whether to store option values as properties on command object,\n   * or store separately (specify false). In both cases the option values can be accessed using .opts().\n   *\n   * @param {boolean} [storeAsProperties=true]\n   * @return {Command} `this` command for chaining\n   */\n\n  storeOptionsAsProperties(storeAsProperties = true) {\n    if (this.options.length) {\n      throw new Error('call .storeOptionsAsProperties() before adding options');\n    }\n    if (Object.keys(this._optionValues).length) {\n      throw new Error(\n        'call .storeOptionsAsProperties() before setting option values',\n      );\n    }\n    this._storeOptionsAsProperties = !!storeAsProperties;\n    return this;\n  }\n\n  /**\n   * Retrieve option value.\n   *\n   * @param {string} key\n   * @return {object} value\n   */\n\n  getOptionValue(key) {\n    if (this._storeOptionsAsProperties) {\n      return this[key];\n    }\n    return this._optionValues[key];\n  }\n\n  /**\n   * Store option value.\n   *\n   * @param {string} key\n   * @param {object} value\n   * @return {Command} `this` command for chaining\n   */\n\n  setOptionValue(key, value) {\n    return this.setOptionValueWithSource(key, value, undefined);\n  }\n\n  /**\n   * Store option value and where the value came from.\n   *\n   * @param {string} key\n   * @param {object} value\n   * @param {string} source - expected values are default/config/env/cli/implied\n   * @return {Command} `this` command for chaining\n   */\n\n  setOptionValueWithSource(key, value, source) {\n    if (this._storeOptionsAsProperties) {\n      this[key] = value;\n    } else {\n      this._optionValues[key] = value;\n    }\n    this._optionValueSources[key] = source;\n    return this;\n  }\n\n  /**\n   * Get source of option value.\n   * Expected values are default | config | env | cli | implied\n   *\n   * @param {string} key\n   * @return {string}\n   */\n\n  getOptionValueSource(key) {\n    return this._optionValueSources[key];\n  }\n\n  /**\n   * Get source of option value. See also .optsWithGlobals().\n   * Expected values are default | config | env | cli | implied\n   *\n   * @param {string} key\n   * @return {string}\n   */\n\n  getOptionValueSourceWithGlobals(key) {\n    // global overwrites local, like optsWithGlobals\n    let source;\n    this._getCommandAndAncestors().forEach((cmd) => {\n      if (cmd.getOptionValueSource(key) !== undefined) {\n        source = cmd.getOptionValueSource(key);\n      }\n    });\n    return source;\n  }\n\n  /**\n   * Get user arguments from implied or explicit arguments.\n   * Side-effects: set _scriptPath if args included script. Used for default program name, and subcommand searches.\n   *\n   * @private\n   */\n\n  _prepareUserArgs(argv, parseOptions) {\n    if (argv !== undefined && !Array.isArray(argv)) {\n      throw new Error('first parameter to parse must be array or undefined');\n    }\n    parseOptions = parseOptions || {};\n\n    // auto-detect argument conventions if nothing supplied\n    if (argv === undefined && parseOptions.from === undefined) {\n      if (process.versions?.electron) {\n        parseOptions.from = 'electron';\n      }\n      // check node specific options for scenarios where user CLI args follow executable without scriptname\n      const execArgv = process.execArgv ?? [];\n      if (\n        execArgv.includes('-e') ||\n        execArgv.includes('--eval') ||\n        execArgv.includes('-p') ||\n        execArgv.includes('--print')\n      ) {\n        parseOptions.from = 'eval'; // internal usage, not documented\n      }\n    }\n\n    // default to using process.argv\n    if (argv === undefined) {\n      argv = process.argv;\n    }\n    this.rawArgs = argv.slice();\n\n    // extract the user args and scriptPath\n    let userArgs;\n    switch (parseOptions.from) {\n      case undefined:\n      case 'node':\n        this._scriptPath = argv[1];\n        userArgs = argv.slice(2);\n        break;\n      case 'electron':\n        // @ts-ignore: because defaultApp is an unknown property\n        if (process.defaultApp) {\n          this._scriptPath = argv[1];\n          userArgs = argv.slice(2);\n        } else {\n          userArgs = argv.slice(1);\n        }\n        break;\n      case 'user':\n        userArgs = argv.slice(0);\n        break;\n      case 'eval':\n        userArgs = argv.slice(1);\n        break;\n      default:\n        throw new Error(\n          `unexpected parse option { from: '${parseOptions.from}' }`,\n        );\n    }\n\n    // Find default name for program from arguments.\n    if (!this._name && this._scriptPath)\n      this.nameFromFilename(this._scriptPath);\n    this._name = this._name || 'program';\n\n    return userArgs;\n  }\n\n  /**\n   * Parse `argv`, setting options and invoking commands when defined.\n   *\n   * Use parseAsync instead of parse if any of your action handlers are async.\n   *\n   * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n   *\n   * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n   * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n   * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n   * - `'user'`: just user arguments\n   *\n   * @example\n   * program.parse(); // parse process.argv and auto-detect electron and special node flags\n   * program.parse(process.argv); // assume argv[0] is app and argv[1] is script\n   * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n   *\n   * @param {string[]} [argv] - optional, defaults to process.argv\n   * @param {object} [parseOptions] - optionally specify style of options with from: node/user/electron\n   * @param {string} [parseOptions.from] - where the args are from: 'node', 'user', 'electron'\n   * @return {Command} `this` command for chaining\n   */\n\n  parse(argv, parseOptions) {\n    this._prepareForParse();\n    const userArgs = this._prepareUserArgs(argv, parseOptions);\n    this._parseCommand([], userArgs);\n\n    return this;\n  }\n\n  /**\n   * Parse `argv`, setting options and invoking commands when defined.\n   *\n   * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n   *\n   * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n   * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n   * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n   * - `'user'`: just user arguments\n   *\n   * @example\n   * await program.parseAsync(); // parse process.argv and auto-detect electron and special node flags\n   * await program.parseAsync(process.argv); // assume argv[0] is app and argv[1] is script\n   * await program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n   *\n   * @param {string[]} [argv]\n   * @param {object} [parseOptions]\n   * @param {string} parseOptions.from - where the args are from: 'node', 'user', 'electron'\n   * @return {Promise}\n   */\n\n  async parseAsync(argv, parseOptions) {\n    this._prepareForParse();\n    const userArgs = this._prepareUserArgs(argv, parseOptions);\n    await this._parseCommand([], userArgs);\n\n    return this;\n  }\n\n  _prepareForParse() {\n    // Save the state the first time, then restore the state before each subsequent parse.\n    if (this._savedState === null) {\n      // Do the special default of lone negated option to true, now that we have all the options.\n      // Filter for negated options that have not been processed already.\n      this.options\n        .filter(\n          (option) =>\n            option.negate &&\n            option.defaultValue === undefined &&\n            this.getOptionValue(option.attributeName()) === undefined,\n        )\n        .forEach((option) => {\n          // check for lone negated option: --no-foo without a --foo option\n          const positiveLongFlag = option.long.replace(/^--no-/, '--');\n          if (!this._findOption(positiveLongFlag)) {\n            this.setOptionValueWithSource(\n              option.attributeName(),\n              true,\n              'default',\n            );\n          }\n        });\n\n      this.saveStateBeforeParse();\n    } else {\n      this.restoreStateBeforeParse();\n    }\n  }\n\n  /**\n   * Called the first time parse is called to save state and allow a restore before subsequent calls to parse.\n   * Not usually called directly, but available for subclasses to save their custom state.\n   *\n   * This is called in a lazy way. Only commands used in parsing chain will have state saved.\n   */\n  saveStateBeforeParse() {\n    this._savedState = {\n      // name is stable if supplied by author, but may be unspecified for root command and deduced during parsing\n      _name: this._name,\n      // option values before parse have default values (including false for negated options)\n      // shallow clones\n      _optionValues: { ...this._optionValues },\n      _optionValueSources: { ...this._optionValueSources },\n    };\n  }\n\n  /**\n   * Restore state before parse for calls after the first.\n   * Not usually called directly, but available for subclasses to save their custom state.\n   *\n   * This is called in a lazy way. Only commands used in parsing chain will have state restored.\n   */\n  restoreStateBeforeParse() {\n    if (this._storeOptionsAsProperties)\n      throw new Error(`Can not call parse again when storeOptionsAsProperties is true.\n- either make a new Command for each call to parse, or stop storing options as properties`);\n\n    // clear state from _prepareUserArgs\n    this._name = this._savedState._name;\n    this._scriptPath = null;\n    this.rawArgs = [];\n    // clear state from setOptionValueWithSource\n    this._optionValues = { ...this._savedState._optionValues };\n    this._optionValueSources = { ...this._savedState._optionValueSources };\n    // clear state from _parseCommand\n    this.args = [];\n    // clear state from _processArguments\n    this.processedArgs = [];\n  }\n\n  /**\n   * Throw if expected executable is missing. Add lots of help for author.\n   *\n   * @param {string} executableFile\n   * @param {string} executableDir\n   * @param {string} subcommandName\n   */\n  _checkForMissingExecutable(executableFile, executableDir, subcommandName) {\n    if (fs.existsSync(executableFile)) return;\n\n    const executableDirMessage = executableDir\n      ? `searched for local subcommand relative to directory '${executableDir}'`\n      : 'no directory for search for local subcommand, use .executableDir() to supply a custom directory';\n    const executableMissing = `'${executableFile}' does not exist\n - if '${subcommandName}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead\n - if the default executable name is not suitable, use the executableFile option to supply a custom name or path\n - ${executableDirMessage}`;\n    throw new Error(executableMissing);\n  }\n\n  /**\n   * Execute a sub-command executable.\n   *\n   * @private\n   */\n\n  _executeSubCommand(subcommand, args) {\n    args = args.slice();\n    const sourceExt = ['.js', '.ts', '.tsx', '.mjs', '.cjs'];\n\n    function findFile(baseDir, baseName) {\n      // Look for specified file\n      const localBin = path.resolve(baseDir, baseName);\n      if (fs.existsSync(localBin)) return localBin;\n\n      // Stop looking if candidate already has an expected extension.\n      if (sourceExt.includes(path.extname(baseName))) return undefined;\n\n      // Try all the extensions.\n      const foundExt = sourceExt.find((ext) =>\n        fs.existsSync(`${localBin}${ext}`),\n      );\n      if (foundExt) return `${localBin}${foundExt}`;\n\n      return undefined;\n    }\n\n    // Not checking for help first. Unlikely to have mandatory and executable, and can't robustly test for help flags in external command.\n    this._checkForMissingMandatoryOptions();\n    this._checkForConflictingOptions();\n\n    // executableFile and executableDir might be full path, or just a name\n    let executableFile =\n      subcommand._executableFile || `${this._name}-${subcommand._name}`;\n    let executableDir = this._executableDir || '';\n    if (this._scriptPath) {\n      let resolvedScriptPath; // resolve possible symlink for installed npm binary\n      try {\n        resolvedScriptPath = fs.realpathSync(this._scriptPath);\n      } catch {\n        resolvedScriptPath = this._scriptPath;\n      }\n      executableDir = path.resolve(\n        path.dirname(resolvedScriptPath),\n        executableDir,\n      );\n    }\n\n    // Look for a local file in preference to a command in PATH.\n    if (executableDir) {\n      let localFile = findFile(executableDir, executableFile);\n\n      // Legacy search using prefix of script name instead of command name\n      if (!localFile && !subcommand._executableFile && this._scriptPath) {\n        const legacyName = path.basename(\n          this._scriptPath,\n          path.extname(this._scriptPath),\n        );\n        if (legacyName !== this._name) {\n          localFile = findFile(\n            executableDir,\n            `${legacyName}-${subcommand._name}`,\n          );\n        }\n      }\n      executableFile = localFile || executableFile;\n    }\n\n    const launchWithNode = sourceExt.includes(path.extname(executableFile));\n\n    let proc;\n    if (process.platform !== 'win32') {\n      if (launchWithNode) {\n        args.unshift(executableFile);\n        // add executable arguments to spawn\n        args = incrementNodeInspectorPort(process.execArgv).concat(args);\n\n        proc = childProcess.spawn(process.argv[0], args, { stdio: 'inherit' });\n      } else {\n        proc = childProcess.spawn(executableFile, args, { stdio: 'inherit' });\n      }\n    } else {\n      this._checkForMissingExecutable(\n        executableFile,\n        executableDir,\n        subcommand._name,\n      );\n      args.unshift(executableFile);\n      // add executable arguments to spawn\n      args = incrementNodeInspectorPort(process.execArgv).concat(args);\n      proc = childProcess.spawn(process.execPath, args, { stdio: 'inherit' });\n    }\n\n    if (!proc.killed) {\n      // testing mainly to avoid leak warnings during unit tests with mocked spawn\n      const signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];\n      signals.forEach((signal) => {\n        process.on(signal, () => {\n          if (proc.killed === false && proc.exitCode === null) {\n            // @ts-ignore because signals not typed to known strings\n            proc.kill(signal);\n          }\n        });\n      });\n    }\n\n    // By default terminate process when spawned process terminates.\n    const exitCallback = this._exitCallback;\n    proc.on('close', (code) => {\n      code = code ?? 1; // code is null if spawned process terminated due to a signal\n      if (!exitCallback) {\n        process.exit(code);\n      } else {\n        exitCallback(\n          new CommanderError(\n            code,\n            'commander.executeSubCommandAsync',\n            '(close)',\n          ),\n        );\n      }\n    });\n    proc.on('error', (err) => {\n      // @ts-ignore: because err.code is an unknown property\n      if (err.code === 'ENOENT') {\n        this._checkForMissingExecutable(\n          executableFile,\n          executableDir,\n          subcommand._name,\n        );\n        // @ts-ignore: because err.code is an unknown property\n      } else if (err.code === 'EACCES') {\n        throw new Error(`'${executableFile}' not executable`);\n      }\n      if (!exitCallback) {\n        process.exit(1);\n      } else {\n        const wrappedError = new CommanderError(\n          1,\n          'commander.executeSubCommandAsync',\n          '(error)',\n        );\n        wrappedError.nestedError = err;\n        exitCallback(wrappedError);\n      }\n    });\n\n    // Store the reference to the child process\n    this.runningCommand = proc;\n  }\n\n  /**\n   * @private\n   */\n\n  _dispatchSubcommand(commandName, operands, unknown) {\n    const subCommand = this._findCommand(commandName);\n    if (!subCommand) this.help({ error: true });\n\n    subCommand._prepareForParse();\n    let promiseChain;\n    promiseChain = this._chainOrCallSubCommandHook(\n      promiseChain,\n      subCommand,\n      'preSubcommand',\n    );\n    promiseChain = this._chainOrCall(promiseChain, () => {\n      if (subCommand._executableHandler) {\n        this._executeSubCommand(subCommand, operands.concat(unknown));\n      } else {\n        return subCommand._parseCommand(operands, unknown);\n      }\n    });\n    return promiseChain;\n  }\n\n  /**\n   * Invoke help directly if possible, or dispatch if necessary.\n   * e.g. help foo\n   *\n   * @private\n   */\n\n  _dispatchHelpCommand(subcommandName) {\n    if (!subcommandName) {\n      this.help();\n    }\n    const subCommand = this._findCommand(subcommandName);\n    if (subCommand && !subCommand._executableHandler) {\n      subCommand.help();\n    }\n\n    // Fallback to parsing the help flag to invoke the help.\n    return this._dispatchSubcommand(\n      subcommandName,\n      [],\n      [this._getHelpOption()?.long ?? this._getHelpOption()?.short ?? '--help'],\n    );\n  }\n\n  /**\n   * Check this.args against expected this.registeredArguments.\n   *\n   * @private\n   */\n\n  _checkNumberOfArguments() {\n    // too few\n    this.registeredArguments.forEach((arg, i) => {\n      if (arg.required && this.args[i] == null) {\n        this.missingArgument(arg.name());\n      }\n    });\n    // too many\n    if (\n      this.registeredArguments.length > 0 &&\n      this.registeredArguments[this.registeredArguments.length - 1].variadic\n    ) {\n      return;\n    }\n    if (this.args.length > this.registeredArguments.length) {\n      this._excessArguments(this.args);\n    }\n  }\n\n  /**\n   * Process this.args using this.registeredArguments and save as this.processedArgs!\n   *\n   * @private\n   */\n\n  _processArguments() {\n    const myParseArg = (argument, value, previous) => {\n      // Extra processing for nice error message on parsing failure.\n      let parsedValue = value;\n      if (value !== null && argument.parseArg) {\n        const invalidValueMessage = `error: command-argument value '${value}' is invalid for argument '${argument.name()}'.`;\n        parsedValue = this._callParseArg(\n          argument,\n          value,\n          previous,\n          invalidValueMessage,\n        );\n      }\n      return parsedValue;\n    };\n\n    this._checkNumberOfArguments();\n\n    const processedArgs = [];\n    this.registeredArguments.forEach((declaredArg, index) => {\n      let value = declaredArg.defaultValue;\n      if (declaredArg.variadic) {\n        // Collect together remaining arguments for passing together as an array.\n        if (index < this.args.length) {\n          value = this.args.slice(index);\n          if (declaredArg.parseArg) {\n            value = value.reduce((processed, v) => {\n              return myParseArg(declaredArg, v, processed);\n            }, declaredArg.defaultValue);\n          }\n        } else if (value === undefined) {\n          value = [];\n        }\n      } else if (index < this.args.length) {\n        value = this.args[index];\n        if (declaredArg.parseArg) {\n          value = myParseArg(declaredArg, value, declaredArg.defaultValue);\n        }\n      }\n      processedArgs[index] = value;\n    });\n    this.processedArgs = processedArgs;\n  }\n\n  /**\n   * Once we have a promise we chain, but call synchronously until then.\n   *\n   * @param {(Promise|undefined)} promise\n   * @param {Function} fn\n   * @return {(Promise|undefined)}\n   * @private\n   */\n\n  _chainOrCall(promise, fn) {\n    // thenable\n    if (promise?.then && typeof promise.then === 'function') {\n      // already have a promise, chain callback\n      return promise.then(() => fn());\n    }\n    // callback might return a promise\n    return fn();\n  }\n\n  /**\n   *\n   * @param {(Promise|undefined)} promise\n   * @param {string} event\n   * @return {(Promise|undefined)}\n   * @private\n   */\n\n  _chainOrCallHooks(promise, event) {\n    let result = promise;\n    const hooks = [];\n    this._getCommandAndAncestors()\n      .reverse()\n      .filter((cmd) => cmd._lifeCycleHooks[event] !== undefined)\n      .forEach((hookedCommand) => {\n        hookedCommand._lifeCycleHooks[event].forEach((callback) => {\n          hooks.push({ hookedCommand, callback });\n        });\n      });\n    if (event === 'postAction') {\n      hooks.reverse();\n    }\n\n    hooks.forEach((hookDetail) => {\n      result = this._chainOrCall(result, () => {\n        return hookDetail.callback(hookDetail.hookedCommand, this);\n      });\n    });\n    return result;\n  }\n\n  /**\n   *\n   * @param {(Promise|undefined)} promise\n   * @param {Command} subCommand\n   * @param {string} event\n   * @return {(Promise|undefined)}\n   * @private\n   */\n\n  _chainOrCallSubCommandHook(promise, subCommand, event) {\n    let result = promise;\n    if (this._lifeCycleHooks[event] !== undefined) {\n      this._lifeCycleHooks[event].forEach((hook) => {\n        result = this._chainOrCall(result, () => {\n          return hook(this, subCommand);\n        });\n      });\n    }\n    return result;\n  }\n\n  /**\n   * Process arguments in context of this command.\n   * Returns action result, in case it is a promise.\n   *\n   * @private\n   */\n\n  _parseCommand(operands, unknown) {\n    const parsed = this.parseOptions(unknown);\n    this._parseOptionsEnv(); // after cli, so parseArg not called on both cli and env\n    this._parseOptionsImplied();\n    operands = operands.concat(parsed.operands);\n    unknown = parsed.unknown;\n    this.args = operands.concat(unknown);\n\n    if (operands && this._findCommand(operands[0])) {\n      return this._dispatchSubcommand(operands[0], operands.slice(1), unknown);\n    }\n    if (\n      this._getHelpCommand() &&\n      operands[0] === this._getHelpCommand().name()\n    ) {\n      return this._dispatchHelpCommand(operands[1]);\n    }\n    if (this._defaultCommandName) {\n      this._outputHelpIfRequested(unknown); // Run the help for default command from parent rather than passing to default command\n      return this._dispatchSubcommand(\n        this._defaultCommandName,\n        operands,\n        unknown,\n      );\n    }\n    if (\n      this.commands.length &&\n      this.args.length === 0 &&\n      !this._actionHandler &&\n      !this._defaultCommandName\n    ) {\n      // probably missing subcommand and no handler, user needs help (and exit)\n      this.help({ error: true });\n    }\n\n    this._outputHelpIfRequested(parsed.unknown);\n    this._checkForMissingMandatoryOptions();\n    this._checkForConflictingOptions();\n\n    // We do not always call this check to avoid masking a \"better\" error, like unknown command.\n    const checkForUnknownOptions = () => {\n      if (parsed.unknown.length > 0) {\n        this.unknownOption(parsed.unknown[0]);\n      }\n    };\n\n    const commandEvent = `command:${this.name()}`;\n    if (this._actionHandler) {\n      checkForUnknownOptions();\n      this._processArguments();\n\n      let promiseChain;\n      promiseChain = this._chainOrCallHooks(promiseChain, 'preAction');\n      promiseChain = this._chainOrCall(promiseChain, () =>\n        this._actionHandler(this.processedArgs),\n      );\n      if (this.parent) {\n        promiseChain = this._chainOrCall(promiseChain, () => {\n          this.parent.emit(commandEvent, operands, unknown); // legacy\n        });\n      }\n      promiseChain = this._chainOrCallHooks(promiseChain, 'postAction');\n      return promiseChain;\n    }\n    if (this.parent?.listenerCount(commandEvent)) {\n      checkForUnknownOptions();\n      this._processArguments();\n      this.parent.emit(commandEvent, operands, unknown); // legacy\n    } else if (operands.length) {\n      if (this._findCommand('*')) {\n        // legacy default command\n        return this._dispatchSubcommand('*', operands, unknown);\n      }\n      if (this.listenerCount('command:*')) {\n        // skip option check, emit event for possible misspelling suggestion\n        this.emit('command:*', operands, unknown);\n      } else if (this.commands.length) {\n        this.unknownCommand();\n      } else {\n        checkForUnknownOptions();\n        this._processArguments();\n      }\n    } else if (this.commands.length) {\n      checkForUnknownOptions();\n      // This command has subcommands and nothing hooked up at this level, so display help (and exit).\n      this.help({ error: true });\n    } else {\n      checkForUnknownOptions();\n      this._processArguments();\n      // fall through for caller to handle after calling .parse()\n    }\n  }\n\n  /**\n   * Find matching command.\n   *\n   * @private\n   * @return {Command | undefined}\n   */\n  _findCommand(name) {\n    if (!name) return undefined;\n    return this.commands.find(\n      (cmd) => cmd._name === name || cmd._aliases.includes(name),\n    );\n  }\n\n  /**\n   * Return an option matching `arg` if any.\n   *\n   * @param {string} arg\n   * @return {Option}\n   * @package\n   */\n\n  _findOption(arg) {\n    return this.options.find((option) => option.is(arg));\n  }\n\n  /**\n   * Display an error message if a mandatory option does not have a value.\n   * Called after checking for help flags in leaf subcommand.\n   *\n   * @private\n   */\n\n  _checkForMissingMandatoryOptions() {\n    // Walk up hierarchy so can call in subcommand after checking for displaying help.\n    this._getCommandAndAncestors().forEach((cmd) => {\n      cmd.options.forEach((anOption) => {\n        if (\n          anOption.mandatory &&\n          cmd.getOptionValue(anOption.attributeName()) === undefined\n        ) {\n          cmd.missingMandatoryOptionValue(anOption);\n        }\n      });\n    });\n  }\n\n  /**\n   * Display an error message if conflicting options are used together in this.\n   *\n   * @private\n   */\n  _checkForConflictingLocalOptions() {\n    const definedNonDefaultOptions = this.options.filter((option) => {\n      const optionKey = option.attributeName();\n      if (this.getOptionValue(optionKey) === undefined) {\n        return false;\n      }\n      return this.getOptionValueSource(optionKey) !== 'default';\n    });\n\n    const optionsWithConflicting = definedNonDefaultOptions.filter(\n      (option) => option.conflictsWith.length > 0,\n    );\n\n    optionsWithConflicting.forEach((option) => {\n      const conflictingAndDefined = definedNonDefaultOptions.find((defined) =>\n        option.conflictsWith.includes(defined.attributeName()),\n      );\n      if (conflictingAndDefined) {\n        this._conflictingOption(option, conflictingAndDefined);\n      }\n    });\n  }\n\n  /**\n   * Display an error message if conflicting options are used together.\n   * Called after checking for help flags in leaf subcommand.\n   *\n   * @private\n   */\n  _checkForConflictingOptions() {\n    // Walk up hierarchy so can call in subcommand after checking for displaying help.\n    this._getCommandAndAncestors().forEach((cmd) => {\n      cmd._checkForConflictingLocalOptions();\n    });\n  }\n\n  /**\n   * Parse options from `argv` removing known options,\n   * and return argv split into operands and unknown arguments.\n   *\n   * Side effects: modifies command by storing options. Does not reset state if called again.\n   *\n   * Examples:\n   *\n   *     argv => operands, unknown\n   *     --known kkk op => [op], []\n   *     op --known kkk => [op], []\n   *     sub --unknown uuu op => [sub], [--unknown uuu op]\n   *     sub -- --unknown uuu op => [sub --unknown uuu op], []\n   *\n   * @param {string[]} args\n   * @return {{operands: string[], unknown: string[]}}\n   */\n\n  parseOptions(args) {\n    const operands = []; // operands, not options or values\n    const unknown = []; // first unknown option and remaining unknown args\n    let dest = operands;\n\n    function maybeOption(arg) {\n      return arg.length > 1 && arg[0] === '-';\n    }\n\n    const negativeNumberArg = (arg) => {\n      // return false if not a negative number\n      if (!/^-(\\d+|\\d*\\.\\d+)(e[+-]?\\d+)?$/.test(arg)) return false;\n      // negative number is ok unless digit used as an option in command hierarchy\n      return !this._getCommandAndAncestors().some((cmd) =>\n        cmd.options\n          .map((opt) => opt.short)\n          .some((short) => /^-\\d$/.test(short)),\n      );\n    };\n\n    // parse options\n    let activeVariadicOption = null;\n    let activeGroup = null; // working through group of short options, like -abc\n    let i = 0;\n    while (i < args.length || activeGroup) {\n      const arg = activeGroup ?? args[i++];\n      activeGroup = null;\n\n      // literal\n      if (arg === '--') {\n        if (dest === unknown) dest.push(arg);\n        dest.push(...args.slice(i));\n        break;\n      }\n\n      if (\n        activeVariadicOption &&\n        (!maybeOption(arg) || negativeNumberArg(arg))\n      ) {\n        this.emit(`option:${activeVariadicOption.name()}`, arg);\n        continue;\n      }\n      activeVariadicOption = null;\n\n      if (maybeOption(arg)) {\n        const option = this._findOption(arg);\n        // recognised option, call listener to assign value with possible custom processing\n        if (option) {\n          if (option.required) {\n            const value = args[i++];\n            if (value === undefined) this.optionMissingArgument(option);\n            this.emit(`option:${option.name()}`, value);\n          } else if (option.optional) {\n            let value = null;\n            // historical behaviour is optional value is following arg unless an option\n            if (\n              i < args.length &&\n              (!maybeOption(args[i]) || negativeNumberArg(args[i]))\n            ) {\n              value = args[i++];\n            }\n            this.emit(`option:${option.name()}`, value);\n          } else {\n            // boolean flag\n            this.emit(`option:${option.name()}`);\n          }\n          activeVariadicOption = option.variadic ? option : null;\n          continue;\n        }\n      }\n\n      // Look for combo options following single dash, eat first one if known.\n      if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') {\n        const option = this._findOption(`-${arg[1]}`);\n        if (option) {\n          if (\n            option.required ||\n            (option.optional && this._combineFlagAndOptionalValue)\n          ) {\n            // option with value following in same argument\n            this.emit(`option:${option.name()}`, arg.slice(2));\n          } else {\n            // boolean option\n            this.emit(`option:${option.name()}`);\n            // remove the processed option and keep processing group\n            activeGroup = `-${arg.slice(2)}`;\n          }\n          continue;\n        }\n      }\n\n      // Look for known long flag with value, like --foo=bar\n      if (/^--[^=]+=/.test(arg)) {\n        const index = arg.indexOf('=');\n        const option = this._findOption(arg.slice(0, index));\n        if (option && (option.required || option.optional)) {\n          this.emit(`option:${option.name()}`, arg.slice(index + 1));\n          continue;\n        }\n      }\n\n      // Not a recognised option by this command.\n      // Might be a command-argument, or subcommand option, or unknown option, or help command or option.\n\n      // An unknown option means further arguments also classified as unknown so can be reprocessed by subcommands.\n      // A negative number in a leaf command is not an unknown option.\n      if (\n        dest === operands &&\n        maybeOption(arg) &&\n        !(this.commands.length === 0 && negativeNumberArg(arg))\n      ) {\n        dest = unknown;\n      }\n\n      // If using positionalOptions, stop processing our options at subcommand.\n      if (\n        (this._enablePositionalOptions || this._passThroughOptions) &&\n        operands.length === 0 &&\n        unknown.length === 0\n      ) {\n        if (this._findCommand(arg)) {\n          operands.push(arg);\n          unknown.push(...args.slice(i));\n          break;\n        } else if (\n          this._getHelpCommand() &&\n          arg === this._getHelpCommand().name()\n        ) {\n          operands.push(arg, ...args.slice(i));\n          break;\n        } else if (this._defaultCommandName) {\n          unknown.push(arg, ...args.slice(i));\n          break;\n        }\n      }\n\n      // If using passThroughOptions, stop processing options at first command-argument.\n      if (this._passThroughOptions) {\n        dest.push(arg, ...args.slice(i));\n        break;\n      }\n\n      // add arg\n      dest.push(arg);\n    }\n\n    return { operands, unknown };\n  }\n\n  /**\n   * Return an object containing local option values as key-value pairs.\n   *\n   * @return {object}\n   */\n  opts() {\n    if (this._storeOptionsAsProperties) {\n      // Preserve original behaviour so backwards compatible when still using properties\n      const result = {};\n      const len = this.options.length;\n\n      for (let i = 0; i < len; i++) {\n        const key = this.options[i].attributeName();\n        result[key] =\n          key === this._versionOptionName ? this._version : this[key];\n      }\n      return result;\n    }\n\n    return this._optionValues;\n  }\n\n  /**\n   * Return an object containing merged local and global option values as key-value pairs.\n   *\n   * @return {object}\n   */\n  optsWithGlobals() {\n    // globals overwrite locals\n    return this._getCommandAndAncestors().reduce(\n      (combinedOptions, cmd) => Object.assign(combinedOptions, cmd.opts()),\n      {},\n    );\n  }\n\n  /**\n   * Display error message and exit (or call exitOverride).\n   *\n   * @param {string} message\n   * @param {object} [errorOptions]\n   * @param {string} [errorOptions.code] - an id string representing the error\n   * @param {number} [errorOptions.exitCode] - used with process.exit\n   */\n  error(message, errorOptions) {\n    // output handling\n    this._outputConfiguration.outputError(\n      `${message}\\n`,\n      this._outputConfiguration.writeErr,\n    );\n    if (typeof this._showHelpAfterError === 'string') {\n      this._outputConfiguration.writeErr(`${this._showHelpAfterError}\\n`);\n    } else if (this._showHelpAfterError) {\n      this._outputConfiguration.writeErr('\\n');\n      this.outputHelp({ error: true });\n    }\n\n    // exit handling\n    const config = errorOptions || {};\n    const exitCode = config.exitCode || 1;\n    const code = config.code || 'commander.error';\n    this._exit(exitCode, code, message);\n  }\n\n  /**\n   * Apply any option related environment variables, if option does\n   * not have a value from cli or client code.\n   *\n   * @private\n   */\n  _parseOptionsEnv() {\n    this.options.forEach((option) => {\n      if (option.envVar && option.envVar in process.env) {\n        const optionKey = option.attributeName();\n        // Priority check. Do not overwrite cli or options from unknown source (client-code).\n        if (\n          this.getOptionValue(optionKey) === undefined ||\n          ['default', 'config', 'env'].includes(\n            this.getOptionValueSource(optionKey),\n          )\n        ) {\n          if (option.required || option.optional) {\n            // option can take a value\n            // keep very simple, optional always takes value\n            this.emit(`optionEnv:${option.name()}`, process.env[option.envVar]);\n          } else {\n            // boolean\n            // keep very simple, only care that envVar defined and not the value\n            this.emit(`optionEnv:${option.name()}`);\n          }\n        }\n      }\n    });\n  }\n\n  /**\n   * Apply any implied option values, if option is undefined or default value.\n   *\n   * @private\n   */\n  _parseOptionsImplied() {\n    const dualHelper = new DualOptions(this.options);\n    const hasCustomOptionValue = (optionKey) => {\n      return (\n        this.getOptionValue(optionKey) !== undefined &&\n        !['default', 'implied'].includes(this.getOptionValueSource(optionKey))\n      );\n    };\n    this.options\n      .filter(\n        (option) =>\n          option.implied !== undefined &&\n          hasCustomOptionValue(option.attributeName()) &&\n          dualHelper.valueFromOption(\n            this.getOptionValue(option.attributeName()),\n            option,\n          ),\n      )\n      .forEach((option) => {\n        Object.keys(option.implied)\n          .filter((impliedKey) => !hasCustomOptionValue(impliedKey))\n          .forEach((impliedKey) => {\n            this.setOptionValueWithSource(\n              impliedKey,\n              option.implied[impliedKey],\n              'implied',\n            );\n          });\n      });\n  }\n\n  /**\n   * Argument `name` is missing.\n   *\n   * @param {string} name\n   * @private\n   */\n\n  missingArgument(name) {\n    const message = `error: missing required argument '${name}'`;\n    this.error(message, { code: 'commander.missingArgument' });\n  }\n\n  /**\n   * `Option` is missing an argument.\n   *\n   * @param {Option} option\n   * @private\n   */\n\n  optionMissingArgument(option) {\n    const message = `error: option '${option.flags}' argument missing`;\n    this.error(message, { code: 'commander.optionMissingArgument' });\n  }\n\n  /**\n   * `Option` does not have a value, and is a mandatory option.\n   *\n   * @param {Option} option\n   * @private\n   */\n\n  missingMandatoryOptionValue(option) {\n    const message = `error: required option '${option.flags}' not specified`;\n    this.error(message, { code: 'commander.missingMandatoryOptionValue' });\n  }\n\n  /**\n   * `Option` conflicts with another option.\n   *\n   * @param {Option} option\n   * @param {Option} conflictingOption\n   * @private\n   */\n  _conflictingOption(option, conflictingOption) {\n    // The calling code does not know whether a negated option is the source of the\n    // value, so do some work to take an educated guess.\n    const findBestOptionFromValue = (option) => {\n      const optionKey = option.attributeName();\n      const optionValue = this.getOptionValue(optionKey);\n      const negativeOption = this.options.find(\n        (target) => target.negate && optionKey === target.attributeName(),\n      );\n      const positiveOption = this.options.find(\n        (target) => !target.negate && optionKey === target.attributeName(),\n      );\n      if (\n        negativeOption &&\n        ((negativeOption.presetArg === undefined && optionValue === false) ||\n          (negativeOption.presetArg !== undefined &&\n            optionValue === negativeOption.presetArg))\n      ) {\n        return negativeOption;\n      }\n      return positiveOption || option;\n    };\n\n    const getErrorMessage = (option) => {\n      const bestOption = findBestOptionFromValue(option);\n      const optionKey = bestOption.attributeName();\n      const source = this.getOptionValueSource(optionKey);\n      if (source === 'env') {\n        return `environment variable '${bestOption.envVar}'`;\n      }\n      return `option '${bestOption.flags}'`;\n    };\n\n    const message = `error: ${getErrorMessage(option)} cannot be used with ${getErrorMessage(conflictingOption)}`;\n    this.error(message, { code: 'commander.conflictingOption' });\n  }\n\n  /**\n   * Unknown option `flag`.\n   *\n   * @param {string} flag\n   * @private\n   */\n\n  unknownOption(flag) {\n    if (this._allowUnknownOption) return;\n    let suggestion = '';\n\n    if (flag.startsWith('--') && this._showSuggestionAfterError) {\n      // Looping to pick up the global options too\n      let candidateFlags = [];\n      // eslint-disable-next-line @typescript-eslint/no-this-alias\n      let command = this;\n      do {\n        const moreFlags = command\n          .createHelp()\n          .visibleOptions(command)\n          .filter((option) => option.long)\n          .map((option) => option.long);\n        candidateFlags = candidateFlags.concat(moreFlags);\n        command = command.parent;\n      } while (command && !command._enablePositionalOptions);\n      suggestion = suggestSimilar(flag, candidateFlags);\n    }\n\n    const message = `error: unknown option '${flag}'${suggestion}`;\n    this.error(message, { code: 'commander.unknownOption' });\n  }\n\n  /**\n   * Excess arguments, more than expected.\n   *\n   * @param {string[]} receivedArgs\n   * @private\n   */\n\n  _excessArguments(receivedArgs) {\n    if (this._allowExcessArguments) return;\n\n    const expected = this.registeredArguments.length;\n    const s = expected === 1 ? '' : 's';\n    const received = receivedArgs.length;\n    const forSubcommand = this.parent ? ` for '${this.name()}'` : '';\n    const details = receivedArgs.join(', ');\n    const message = `error: too many arguments${forSubcommand}. Expected ${expected} argument${s} but got ${received}: ${details}.`;\n    this.error(message, { code: 'commander.excessArguments' });\n  }\n\n  /**\n   * Unknown command.\n   *\n   * @private\n   */\n\n  unknownCommand() {\n    const unknownName = this.args[0];\n    let suggestion = '';\n\n    if (this._showSuggestionAfterError) {\n      const candidateNames = [];\n      this.createHelp()\n        .visibleCommands(this)\n        .forEach((command) => {\n          candidateNames.push(command.name());\n          // just visible alias\n          if (command.alias()) candidateNames.push(command.alias());\n        });\n      suggestion = suggestSimilar(unknownName, candidateNames);\n    }\n\n    const message = `error: unknown command '${unknownName}'${suggestion}`;\n    this.error(message, { code: 'commander.unknownCommand' });\n  }\n\n  /**\n   * Get or set the program version.\n   *\n   * This method auto-registers the \"-V, --version\" option which will print the version number.\n   *\n   * You can optionally supply the flags and description to override the defaults.\n   *\n   * @param {string} [str]\n   * @param {string} [flags]\n   * @param {string} [description]\n   * @return {(this | string | undefined)} `this` command for chaining, or version string if no arguments\n   */\n\n  version(str, flags, description) {\n    if (str === undefined) return this._version;\n    this._version = str;\n    flags = flags || '-V, --version';\n    description = description || 'output the version number';\n    const versionOption = this.createOption(flags, description);\n    this._versionOptionName = versionOption.attributeName();\n    this._registerOption(versionOption);\n\n    this.on('option:' + versionOption.name(), () => {\n      this._outputConfiguration.writeOut(`${str}\\n`);\n      this._exit(0, 'commander.version', str);\n    });\n    return this;\n  }\n\n  /**\n   * Set the description.\n   *\n   * @param {string} [str]\n   * @param {object} [argsDescription]\n   * @return {(string|Command)}\n   */\n  description(str, argsDescription) {\n    if (str === undefined && argsDescription === undefined)\n      return this._description;\n    this._description = str;\n    if (argsDescription) {\n      this._argsDescription = argsDescription;\n    }\n    return this;\n  }\n\n  /**\n   * Set the summary. Used when listed as subcommand of parent.\n   *\n   * @param {string} [str]\n   * @return {(string|Command)}\n   */\n  summary(str) {\n    if (str === undefined) return this._summary;\n    this._summary = str;\n    return this;\n  }\n\n  /**\n   * Set an alias for the command.\n   *\n   * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help.\n   *\n   * @param {string} [alias]\n   * @return {(string|Command)}\n   */\n\n  alias(alias) {\n    if (alias === undefined) return this._aliases[0]; // just return first, for backwards compatibility\n\n    /** @type {Command} */\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    let command = this;\n    if (\n      this.commands.length !== 0 &&\n      this.commands[this.commands.length - 1]._executableHandler\n    ) {\n      // assume adding alias for last added executable subcommand, rather than this\n      command = this.commands[this.commands.length - 1];\n    }\n\n    if (alias === command._name)\n      throw new Error(\"Command alias can't be the same as its name\");\n    const matchingCommand = this.parent?._findCommand(alias);\n    if (matchingCommand) {\n      // c.f. _registerCommand\n      const existingCmd = [matchingCommand.name()]\n        .concat(matchingCommand.aliases())\n        .join('|');\n      throw new Error(\n        `cannot add alias '${alias}' to command '${this.name()}' as already have command '${existingCmd}'`,\n      );\n    }\n\n    command._aliases.push(alias);\n    return this;\n  }\n\n  /**\n   * Set aliases for the command.\n   *\n   * Only the first alias is shown in the auto-generated help.\n   *\n   * @param {string[]} [aliases]\n   * @return {(string[]|Command)}\n   */\n\n  aliases(aliases) {\n    // Getter for the array of aliases is the main reason for having aliases() in addition to alias().\n    if (aliases === undefined) return this._aliases;\n\n    aliases.forEach((alias) => this.alias(alias));\n    return this;\n  }\n\n  /**\n   * Set / get the command usage `str`.\n   *\n   * @param {string} [str]\n   * @return {(string|Command)}\n   */\n\n  usage(str) {\n    if (str === undefined) {\n      if (this._usage) return this._usage;\n\n      const args = this.registeredArguments.map((arg) => {\n        return humanReadableArgName(arg);\n      });\n      return []\n        .concat(\n          this.options.length || this._helpOption !== null ? '[options]' : [],\n          this.commands.length ? '[command]' : [],\n          this.registeredArguments.length ? args : [],\n        )\n        .join(' ');\n    }\n\n    this._usage = str;\n    return this;\n  }\n\n  /**\n   * Get or set the name of the command.\n   *\n   * @param {string} [str]\n   * @return {(string|Command)}\n   */\n\n  name(str) {\n    if (str === undefined) return this._name;\n    this._name = str;\n    return this;\n  }\n\n  /**\n   * Set/get the help group heading for this subcommand in parent command's help.\n   *\n   * @param {string} [heading]\n   * @return {Command | string}\n   */\n\n  helpGroup(heading) {\n    if (heading === undefined) return this._helpGroupHeading ?? '';\n    this._helpGroupHeading = heading;\n    return this;\n  }\n\n  /**\n   * Set/get the default help group heading for subcommands added to this command.\n   * (This does not override a group set directly on the subcommand using .helpGroup().)\n   *\n   * @example\n   * program.commandsGroup('Development Commands:);\n   * program.command('watch')...\n   * program.command('lint')...\n   * ...\n   *\n   * @param {string} [heading]\n   * @returns {Command | string}\n   */\n  commandsGroup(heading) {\n    if (heading === undefined) return this._defaultCommandGroup ?? '';\n    this._defaultCommandGroup = heading;\n    return this;\n  }\n\n  /**\n   * Set/get the default help group heading for options added to this command.\n   * (This does not override a group set directly on the option using .helpGroup().)\n   *\n   * @example\n   * program\n   *   .optionsGroup('Development Options:')\n   *   .option('-d, --debug', 'output extra debugging')\n   *   .option('-p, --profile', 'output profiling information')\n   *\n   * @param {string} [heading]\n   * @returns {Command | string}\n   */\n  optionsGroup(heading) {\n    if (heading === undefined) return this._defaultOptionGroup ?? '';\n    this._defaultOptionGroup = heading;\n    return this;\n  }\n\n  /**\n   * @param {Option} option\n   * @private\n   */\n  _initOptionGroup(option) {\n    if (this._defaultOptionGroup && !option.helpGroupHeading)\n      option.helpGroup(this._defaultOptionGroup);\n  }\n\n  /**\n   * @param {Command} cmd\n   * @private\n   */\n  _initCommandGroup(cmd) {\n    if (this._defaultCommandGroup && !cmd.helpGroup())\n      cmd.helpGroup(this._defaultCommandGroup);\n  }\n\n  /**\n   * Set the name of the command from script filename, such as process.argv[1],\n   * or import.meta.filename.\n   *\n   * (Used internally and public although not documented in README.)\n   *\n   * @example\n   * program.nameFromFilename(import.meta.filename);\n   *\n   * @param {string} filename\n   * @return {Command}\n   */\n\n  nameFromFilename(filename) {\n    this._name = path.basename(filename, path.extname(filename));\n\n    return this;\n  }\n\n  /**\n   * Get or set the directory for searching for executable subcommands of this command.\n   *\n   * @example\n   * program.executableDir(import.meta.dirname);\n   * // or\n   * program.executableDir('subcommands');\n   *\n   * @param {string} [path]\n   * @return {(string|null|Command)}\n   */\n\n  executableDir(path) {\n    if (path === undefined) return this._executableDir;\n    this._executableDir = path;\n    return this;\n  }\n\n  /**\n   * Return program help documentation.\n   *\n   * @param {{ error: boolean }} [contextOptions] - pass {error:true} to wrap for stderr instead of stdout\n   * @return {string}\n   */\n\n  helpInformation(contextOptions) {\n    const helper = this.createHelp();\n    const context = this._getOutputContext(contextOptions);\n    helper.prepareContext({\n      error: context.error,\n      helpWidth: context.helpWidth,\n      outputHasColors: context.hasColors,\n    });\n    const text = helper.formatHelp(this, helper);\n    if (context.hasColors) return text;\n    return this._outputConfiguration.stripColor(text);\n  }\n\n  /**\n   * @typedef HelpContext\n   * @type {object}\n   * @property {boolean} error\n   * @property {number} helpWidth\n   * @property {boolean} hasColors\n   * @property {function} write - includes stripColor if needed\n   *\n   * @returns {HelpContext}\n   * @private\n   */\n\n  _getOutputContext(contextOptions) {\n    contextOptions = contextOptions || {};\n    const error = !!contextOptions.error;\n    let baseWrite;\n    let hasColors;\n    let helpWidth;\n    if (error) {\n      baseWrite = (str) => this._outputConfiguration.writeErr(str);\n      hasColors = this._outputConfiguration.getErrHasColors();\n      helpWidth = this._outputConfiguration.getErrHelpWidth();\n    } else {\n      baseWrite = (str) => this._outputConfiguration.writeOut(str);\n      hasColors = this._outputConfiguration.getOutHasColors();\n      helpWidth = this._outputConfiguration.getOutHelpWidth();\n    }\n    const write = (str) => {\n      if (!hasColors) str = this._outputConfiguration.stripColor(str);\n      return baseWrite(str);\n    };\n    return { error, write, hasColors, helpWidth };\n  }\n\n  /**\n   * Output help information for this command.\n   *\n   * Outputs built-in help, and custom text added using `.addHelpText()`.\n   *\n   * @param {{ error: boolean } | Function} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n   */\n\n  outputHelp(contextOptions) {\n    let deprecatedCallback;\n    if (typeof contextOptions === 'function') {\n      deprecatedCallback = contextOptions;\n      contextOptions = undefined;\n    }\n\n    const outputContext = this._getOutputContext(contextOptions);\n    /** @type {HelpTextEventContext} */\n    const eventContext = {\n      error: outputContext.error,\n      write: outputContext.write,\n      command: this,\n    };\n\n    this._getCommandAndAncestors()\n      .reverse()\n      .forEach((command) => command.emit('beforeAllHelp', eventContext));\n    this.emit('beforeHelp', eventContext);\n\n    let helpInformation = this.helpInformation({ error: outputContext.error });\n    if (deprecatedCallback) {\n      helpInformation = deprecatedCallback(helpInformation);\n      if (\n        typeof helpInformation !== 'string' &&\n        !Buffer.isBuffer(helpInformation)\n      ) {\n        throw new Error('outputHelp callback must return a string or a Buffer');\n      }\n    }\n    outputContext.write(helpInformation);\n\n    if (this._getHelpOption()?.long) {\n      this.emit(this._getHelpOption().long); // deprecated\n    }\n    this.emit('afterHelp', eventContext);\n    this._getCommandAndAncestors().forEach((command) =>\n      command.emit('afterAllHelp', eventContext),\n    );\n  }\n\n  /**\n   * You can pass in flags and a description to customise the built-in help option.\n   * Pass in false to disable the built-in help option.\n   *\n   * @example\n   * program.helpOption('-?, --help' 'show help'); // customise\n   * program.helpOption(false); // disable\n   *\n   * @param {(string | boolean)} flags\n   * @param {string} [description]\n   * @return {Command} `this` command for chaining\n   */\n\n  helpOption(flags, description) {\n    // Support enabling/disabling built-in help option.\n    if (typeof flags === 'boolean') {\n      if (flags) {\n        if (this._helpOption === null) this._helpOption = undefined; // reenable\n        if (this._defaultOptionGroup) {\n          // make the option to store the group\n          this._initOptionGroup(this._getHelpOption());\n        }\n      } else {\n        this._helpOption = null; // disable\n      }\n      return this;\n    }\n\n    // Customise flags and description.\n    this._helpOption = this.createOption(\n      flags ?? '-h, --help',\n      description ?? 'display help for command',\n    );\n    // init group unless lazy create\n    if (flags || description) this._initOptionGroup(this._helpOption);\n\n    return this;\n  }\n\n  /**\n   * Lazy create help option.\n   * Returns null if has been disabled with .helpOption(false).\n   *\n   * @returns {(Option | null)} the help option\n   * @package\n   */\n  _getHelpOption() {\n    // Lazy create help option on demand.\n    if (this._helpOption === undefined) {\n      this.helpOption(undefined, undefined);\n    }\n    return this._helpOption;\n  }\n\n  /**\n   * Supply your own option to use for the built-in help option.\n   * This is an alternative to using helpOption() to customise the flags and description etc.\n   *\n   * @param {Option} option\n   * @return {Command} `this` command for chaining\n   */\n  addHelpOption(option) {\n    this._helpOption = option;\n    this._initOptionGroup(option);\n    return this;\n  }\n\n  /**\n   * Output help information and exit.\n   *\n   * Outputs built-in help, and custom text added using `.addHelpText()`.\n   *\n   * @param {{ error: boolean }} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n   */\n\n  help(contextOptions) {\n    this.outputHelp(contextOptions);\n    let exitCode = Number(process.exitCode ?? 0); // process.exitCode does allow a string or an integer, but we prefer just a number\n    if (\n      exitCode === 0 &&\n      contextOptions &&\n      typeof contextOptions !== 'function' &&\n      contextOptions.error\n    ) {\n      exitCode = 1;\n    }\n    // message: do not have all displayed text available so only passing placeholder.\n    this._exit(exitCode, 'commander.help', '(outputHelp)');\n  }\n\n  /**\n   * // Do a little typing to coordinate emit and listener for the help text events.\n   * @typedef HelpTextEventContext\n   * @type {object}\n   * @property {boolean} error\n   * @property {Command} command\n   * @property {function} write\n   */\n\n  /**\n   * Add additional text to be displayed with the built-in help.\n   *\n   * Position is 'before' or 'after' to affect just this command,\n   * and 'beforeAll' or 'afterAll' to affect this command and all its subcommands.\n   *\n   * @param {string} position - before or after built-in help\n   * @param {(string | Function)} text - string to add, or a function returning a string\n   * @return {Command} `this` command for chaining\n   */\n\n  addHelpText(position, text) {\n    const allowedValues = ['beforeAll', 'before', 'after', 'afterAll'];\n    if (!allowedValues.includes(position)) {\n      throw new Error(`Unexpected value for position to addHelpText.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n    }\n\n    const helpEvent = `${position}Help`;\n    this.on(helpEvent, (/** @type {HelpTextEventContext} */ context) => {\n      let helpStr;\n      if (typeof text === 'function') {\n        helpStr = text({ error: context.error, command: context.command });\n      } else {\n        helpStr = text;\n      }\n      // Ignore falsy value when nothing to output.\n      if (helpStr) {\n        context.write(`${helpStr}\\n`);\n      }\n    });\n    return this;\n  }\n\n  /**\n   * Output help information if help flags specified\n   *\n   * @param {Array} args - array of options to search for help flags\n   * @private\n   */\n\n  _outputHelpIfRequested(args) {\n    const helpOption = this._getHelpOption();\n    const helpRequested = helpOption && args.find((arg) => helpOption.is(arg));\n    if (helpRequested) {\n      this.outputHelp();\n      // (Do not have all displayed text available so only passing placeholder.)\n      this._exit(0, 'commander.helpDisplayed', '(outputHelp)');\n    }\n  }\n}\n\n/**\n * Scan arguments and increment port number for inspect calls (to avoid conflicts when spawning new command).\n *\n * @param {string[]} args - array of arguments from node.execArgv\n * @returns {string[]}\n * @private\n */\n\nfunction incrementNodeInspectorPort(args) {\n  // Testing for these options:\n  //  --inspect[=[host:]port]\n  //  --inspect-brk[=[host:]port]\n  //  --inspect-port=[host:]port\n  return args.map((arg) => {\n    if (!arg.startsWith('--inspect')) {\n      return arg;\n    }\n    let debugOption;\n    let debugHost = '127.0.0.1';\n    let debugPort = '9229';\n    let match;\n    if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) {\n      // e.g. --inspect\n      debugOption = match[1];\n    } else if (\n      (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null\n    ) {\n      debugOption = match[1];\n      if (/^\\d+$/.test(match[3])) {\n        // e.g. --inspect=1234\n        debugPort = match[3];\n      } else {\n        // e.g. --inspect=localhost\n        debugHost = match[3];\n      }\n    } else if (\n      (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\\d+)$/)) !== null\n    ) {\n      // e.g. --inspect=localhost:1234\n      debugOption = match[1];\n      debugHost = match[3];\n      debugPort = match[4];\n    }\n\n    if (debugOption && debugPort !== '0') {\n      return `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`;\n    }\n    return arg;\n  });\n}\n\n/**\n * Exported for using from tests, not otherwise used outside this file.\n *\n * @returns {boolean | undefined}\n * @package\n */\nexport function useColor() {\n  // Test for common conventions.\n  // NB: the observed behaviour is in combination with how author adds color! For example:\n  //   - we do not test NODE_DISABLE_COLORS, but util:styletext does\n  //   - we do test NO_COLOR, but Chalk does not\n  //\n  // References:\n  // https://no-color.org\n  // https://bixense.com/clicolors/\n  // https://github.com/nodejs/node/blob/0a00217a5f67ef4a22384cfc80eb6dd9a917fdc1/lib/internal/tty.js#L109\n  // https://github.com/chalk/supports-color/blob/c214314a14bcb174b12b3014b2b0a8de375029ae/index.js#L33\n  // (https://force-color.org recent web page from 2023, does not match major javascript implementations)\n\n  if (\n    process.env.NO_COLOR ||\n    process.env.FORCE_COLOR === '0' ||\n    process.env.FORCE_COLOR === 'false'\n  )\n    return false;\n  if (process.env.FORCE_COLOR || process.env.CLICOLOR_FORCE !== undefined)\n    return true;\n  return undefined;\n}\n","import { humanReadableArgName } from './argument.js';\nimport { stripVTControlCharacters } from 'node:util';\n\n/**\n * TypeScript import types for JSDoc, used by Visual Studio Code IntelliSense and `npm run typescript-checkJS`\n * https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#import-types\n * @typedef { import(\"./argument.js\").Argument } Argument\n * @typedef { import(\"./command.js\").Command } Command\n * @typedef { import(\"./option.js\").Option } Option\n */\n\n// Although this is a class, methods are static in style to allow override using subclass or just functions.\nexport class Help {\n  constructor() {\n    this.helpWidth = undefined;\n    this.minWidthToWrap = 40;\n    this.sortSubcommands = false;\n    this.sortOptions = false;\n    this.showGlobalOptions = false;\n  }\n\n  /**\n   * prepareContext is called by Commander after applying overrides from `Command.configureHelp()`\n   * and just before calling `formatHelp()`.\n   *\n   * Commander just uses the helpWidth and the rest is provided for optional use by more complex subclasses.\n   *\n   * @param {{ error?: boolean, helpWidth?: number, outputHasColors?: boolean }} contextOptions\n   */\n  prepareContext(contextOptions) {\n    this.helpWidth = this.helpWidth ?? contextOptions.helpWidth ?? 80;\n  }\n\n  /**\n   * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.\n   *\n   * @param {Command} cmd\n   * @returns {Command[]}\n   */\n\n  visibleCommands(cmd) {\n    const visibleCommands = cmd.commands.filter((cmd) => !cmd._hidden);\n    const helpCommand = cmd._getHelpCommand();\n    if (helpCommand && !helpCommand._hidden) {\n      visibleCommands.push(helpCommand);\n    }\n    if (this.sortSubcommands) {\n      visibleCommands.sort((a, b) => {\n        // @ts-ignore: because overloaded return type\n        return a.name().localeCompare(b.name());\n      });\n    }\n    return visibleCommands;\n  }\n\n  /**\n   * Compare options for sort.\n   *\n   * @param {Option} a\n   * @param {Option} b\n   * @returns {number}\n   */\n  compareOptions(a, b) {\n    const getSortKey = (option) => {\n      // WYSIWYG for order displayed in help. Short used for comparison if present. No special handling for negated.\n      return option.short\n        ? option.short.replace(/^-/, '')\n        : option.long.replace(/^--/, '');\n    };\n    return getSortKey(a).localeCompare(getSortKey(b));\n  }\n\n  /**\n   * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.\n   *\n   * @param {Command} cmd\n   * @returns {Option[]}\n   */\n\n  visibleOptions(cmd) {\n    const visibleOptions = cmd.options.filter((option) => !option.hidden);\n    // Built-in help option.\n    const helpOption = cmd._getHelpOption();\n    if (helpOption && !helpOption.hidden) {\n      // Automatically hide conflicting flags. Bit dubious but a historical behaviour that is convenient for single-command programs.\n      const removeShort = helpOption.short && cmd._findOption(helpOption.short);\n      const removeLong = helpOption.long && cmd._findOption(helpOption.long);\n      if (!removeShort && !removeLong) {\n        visibleOptions.push(helpOption); // no changes needed\n      } else if (helpOption.long && !removeLong) {\n        visibleOptions.push(\n          cmd.createOption(helpOption.long, helpOption.description),\n        );\n      } else if (helpOption.short && !removeShort) {\n        visibleOptions.push(\n          cmd.createOption(helpOption.short, helpOption.description),\n        );\n      }\n    }\n    if (this.sortOptions) {\n      visibleOptions.sort(this.compareOptions);\n    }\n    return visibleOptions;\n  }\n\n  /**\n   * Get an array of the visible global options. (Not including help.)\n   *\n   * @param {Command} cmd\n   * @returns {Option[]}\n   */\n\n  visibleGlobalOptions(cmd) {\n    if (!this.showGlobalOptions) return [];\n\n    const globalOptions = [];\n    for (\n      let ancestorCmd = cmd.parent;\n      ancestorCmd;\n      ancestorCmd = ancestorCmd.parent\n    ) {\n      const visibleOptions = ancestorCmd.options.filter(\n        (option) => !option.hidden,\n      );\n      globalOptions.push(...visibleOptions);\n    }\n    if (this.sortOptions) {\n      globalOptions.sort(this.compareOptions);\n    }\n    return globalOptions;\n  }\n\n  /**\n   * Get an array of the arguments if any have a description.\n   *\n   * @param {Command} cmd\n   * @returns {Argument[]}\n   */\n\n  visibleArguments(cmd) {\n    // Side effect! Apply the legacy descriptions before the arguments are displayed.\n    if (cmd._argsDescription) {\n      cmd.registeredArguments.forEach((argument) => {\n        argument.description =\n          argument.description || cmd._argsDescription[argument.name()] || '';\n      });\n    }\n\n    // If there are any arguments with a description then return all the arguments.\n    if (cmd.registeredArguments.find((argument) => argument.description)) {\n      return cmd.registeredArguments;\n    }\n    return [];\n  }\n\n  /**\n   * Get the command term to show in the list of subcommands.\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  subcommandTerm(cmd) {\n    // Legacy. Ignores custom usage string, and nested commands.\n    const args = cmd.registeredArguments\n      .map((arg) => humanReadableArgName(arg))\n      .join(' ');\n    return (\n      cmd._name +\n      (cmd._aliases[0] ? '|' + cmd._aliases[0] : '') +\n      (cmd.options.length ? ' [options]' : '') + // simplistic check for non-help option\n      (args ? ' ' + args : '')\n    );\n  }\n\n  /**\n   * Get the option term to show in the list of options.\n   *\n   * @param {Option} option\n   * @returns {string}\n   */\n\n  optionTerm(option) {\n    return option.flags;\n  }\n\n  /**\n   * Get the argument term to show in the list of arguments.\n   *\n   * @param {Argument} argument\n   * @returns {string}\n   */\n\n  argumentTerm(argument) {\n    return argument.name();\n  }\n\n  /**\n   * Get the longest command term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestSubcommandTermLength(cmd, helper) {\n    return helper.visibleCommands(cmd).reduce((max, command) => {\n      return Math.max(\n        max,\n        this.displayWidth(\n          helper.styleSubcommandTerm(helper.subcommandTerm(command)),\n        ),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the longest option term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestOptionTermLength(cmd, helper) {\n    return helper.visibleOptions(cmd).reduce((max, option) => {\n      return Math.max(\n        max,\n        this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option))),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the longest global option term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestGlobalOptionTermLength(cmd, helper) {\n    return helper.visibleGlobalOptions(cmd).reduce((max, option) => {\n      return Math.max(\n        max,\n        this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option))),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the longest argument term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestArgumentTermLength(cmd, helper) {\n    return helper.visibleArguments(cmd).reduce((max, argument) => {\n      return Math.max(\n        max,\n        this.displayWidth(\n          helper.styleArgumentTerm(helper.argumentTerm(argument)),\n        ),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the command usage to be displayed at the top of the built-in help.\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  commandUsage(cmd) {\n    // Usage\n    let cmdName = cmd._name;\n    if (cmd._aliases[0]) {\n      cmdName = cmdName + '|' + cmd._aliases[0];\n    }\n    let ancestorCmdNames = '';\n    for (\n      let ancestorCmd = cmd.parent;\n      ancestorCmd;\n      ancestorCmd = ancestorCmd.parent\n    ) {\n      ancestorCmdNames = ancestorCmd.name() + ' ' + ancestorCmdNames;\n    }\n    return ancestorCmdNames + cmdName + ' ' + cmd.usage();\n  }\n\n  /**\n   * Get the description for the command.\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  commandDescription(cmd) {\n    // @ts-ignore: because overloaded return type\n    return cmd.description();\n  }\n\n  /**\n   * Get the subcommand summary to show in the list of subcommands.\n   * (Fallback to description for backwards compatibility.)\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  subcommandDescription(cmd) {\n    // @ts-ignore: because overloaded return type\n    return cmd.summary() || cmd.description();\n  }\n\n  /**\n   * Get the option description to show in the list of options.\n   *\n   * @param {Option} option\n   * @return {string}\n   */\n\n  optionDescription(option) {\n    const extraInfo = [];\n\n    if (option.argChoices) {\n      extraInfo.push(\n        // use stringify to match the display of the default value\n        `choices: ${option.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`,\n      );\n    }\n    if (option.defaultValue !== undefined) {\n      // default for boolean and negated more for programmer than end user,\n      // but show true/false for boolean option as may be for hand-rolled env or config processing.\n      const showDefault =\n        option.required ||\n        option.optional ||\n        (option.isBoolean() && typeof option.defaultValue === 'boolean');\n      if (showDefault) {\n        extraInfo.push(\n          `default: ${option.defaultValueDescription || JSON.stringify(option.defaultValue)}`,\n        );\n      }\n    }\n    // preset for boolean and negated are more for programmer than end user\n    if (option.presetArg !== undefined && option.optional) {\n      extraInfo.push(`preset: ${JSON.stringify(option.presetArg)}`);\n    }\n    if (option.envVar !== undefined) {\n      extraInfo.push(`env: ${option.envVar}`);\n    }\n    if (extraInfo.length > 0) {\n      const extraDescription = `(${extraInfo.join(', ')})`;\n      if (option.description) {\n        return `${option.description} ${extraDescription}`;\n      }\n      return extraDescription;\n    }\n\n    return option.description;\n  }\n\n  /**\n   * Get the argument description to show in the list of arguments.\n   *\n   * @param {Argument} argument\n   * @return {string}\n   */\n\n  argumentDescription(argument) {\n    const extraInfo = [];\n    if (argument.argChoices) {\n      extraInfo.push(\n        // use stringify to match the display of the default value\n        `choices: ${argument.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`,\n      );\n    }\n    if (argument.defaultValue !== undefined) {\n      extraInfo.push(\n        `default: ${argument.defaultValueDescription || JSON.stringify(argument.defaultValue)}`,\n      );\n    }\n    if (extraInfo.length > 0) {\n      const extraDescription = `(${extraInfo.join(', ')})`;\n      if (argument.description) {\n        return `${argument.description} ${extraDescription}`;\n      }\n      return extraDescription;\n    }\n    return argument.description;\n  }\n\n  /**\n   * Format a list of items, given a heading and an array of formatted items.\n   *\n   * @param {string} heading\n   * @param {string[]} items\n   * @param {Help} helper\n   * @returns string[]\n   */\n  formatItemList(heading, items, helper) {\n    if (items.length === 0) return [];\n\n    return [helper.styleTitle(heading), ...items, ''];\n  }\n\n  /**\n   * Group items by their help group heading.\n   *\n   * @param {Command[] | Option[]} unsortedItems\n   * @param {Command[] | Option[]} visibleItems\n   * @param {Function} getGroup\n   * @returns {Map<string, Command[] | Option[]>}\n   */\n  groupItems(unsortedItems, visibleItems, getGroup) {\n    const result = new Map();\n    // Add groups in order of appearance in unsortedItems.\n    unsortedItems.forEach((item) => {\n      const group = getGroup(item);\n      if (!result.has(group)) result.set(group, []);\n    });\n    // Add items in order of appearance in visibleItems.\n    visibleItems.forEach((item) => {\n      const group = getGroup(item);\n      if (!result.has(group)) {\n        result.set(group, []);\n      }\n      result.get(group).push(item);\n    });\n    return result;\n  }\n\n  /**\n   * Generate the built-in help text.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {string}\n   */\n\n  formatHelp(cmd, helper) {\n    const termWidth = helper.padWidth(cmd, helper);\n    const helpWidth = helper.helpWidth ?? 80; // in case prepareContext() was not called\n\n    function callFormatItem(term, description) {\n      return helper.formatItem(term, termWidth, description, helper);\n    }\n\n    // Usage\n    let output = [\n      `${helper.styleTitle('Usage:')} ${helper.styleUsage(helper.commandUsage(cmd))}`,\n      '',\n    ];\n\n    // Description\n    const commandDescription = helper.commandDescription(cmd);\n    if (commandDescription.length > 0) {\n      output = output.concat([\n        helper.boxWrap(\n          helper.styleCommandDescription(commandDescription),\n          helpWidth,\n        ),\n        '',\n      ]);\n    }\n\n    // Arguments\n    const argumentList = helper.visibleArguments(cmd).map((argument) => {\n      return callFormatItem(\n        helper.styleArgumentTerm(helper.argumentTerm(argument)),\n        helper.styleArgumentDescription(helper.argumentDescription(argument)),\n      );\n    });\n    output = output.concat(\n      this.formatItemList('Arguments:', argumentList, helper),\n    );\n\n    // Options\n    const optionGroups = this.groupItems(\n      cmd.options,\n      helper.visibleOptions(cmd),\n      (option) => option.helpGroupHeading ?? 'Options:',\n    );\n    optionGroups.forEach((options, group) => {\n      const optionList = options.map((option) => {\n        return callFormatItem(\n          helper.styleOptionTerm(helper.optionTerm(option)),\n          helper.styleOptionDescription(helper.optionDescription(option)),\n        );\n      });\n      output = output.concat(this.formatItemList(group, optionList, helper));\n    });\n\n    if (helper.showGlobalOptions) {\n      const globalOptionList = helper\n        .visibleGlobalOptions(cmd)\n        .map((option) => {\n          return callFormatItem(\n            helper.styleOptionTerm(helper.optionTerm(option)),\n            helper.styleOptionDescription(helper.optionDescription(option)),\n          );\n        });\n      output = output.concat(\n        this.formatItemList('Global Options:', globalOptionList, helper),\n      );\n    }\n\n    // Commands\n    const commandGroups = this.groupItems(\n      cmd.commands,\n      helper.visibleCommands(cmd),\n      (sub) => sub.helpGroup() || 'Commands:',\n    );\n    commandGroups.forEach((commands, group) => {\n      const commandList = commands.map((sub) => {\n        return callFormatItem(\n          helper.styleSubcommandTerm(helper.subcommandTerm(sub)),\n          helper.styleSubcommandDescription(helper.subcommandDescription(sub)),\n        );\n      });\n      output = output.concat(this.formatItemList(group, commandList, helper));\n    });\n\n    return output.join('\\n');\n  }\n\n  /**\n   * Return display width of string, ignoring ANSI escape sequences. Used in padding and wrapping calculations.\n   *\n   * @param {string} str\n   * @returns {number}\n   */\n  displayWidth(str) {\n    return stripVTControlCharacters(str).length;\n  }\n\n  /**\n   * Style the title for displaying in the help. Called with 'Usage:', 'Options:', etc.\n   *\n   * @param {string} str\n   * @returns {string}\n   */\n  styleTitle(str) {\n    return str;\n  }\n\n  styleUsage(str) {\n    // Usage has lots of parts the user might like to color separately! Assume default usage string which is formed like:\n    //    command subcommand [options] [command] <foo> [bar]\n    return str\n      .split(' ')\n      .map((word) => {\n        if (word === '[options]') return this.styleOptionText(word);\n        if (word === '[command]') return this.styleSubcommandText(word);\n        if (word[0] === '[' || word[0] === '<')\n          return this.styleArgumentText(word);\n        return this.styleCommandText(word); // Restrict to initial words?\n      })\n      .join(' ');\n  }\n  styleCommandDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleOptionDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleSubcommandDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleArgumentDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleDescriptionText(str) {\n    return str;\n  }\n  styleOptionTerm(str) {\n    return this.styleOptionText(str);\n  }\n  styleSubcommandTerm(str) {\n    // This is very like usage with lots of parts! Assume default string which is formed like:\n    //    subcommand [options] <foo> [bar]\n    return str\n      .split(' ')\n      .map((word) => {\n        if (word === '[options]') return this.styleOptionText(word);\n        if (word[0] === '[' || word[0] === '<')\n          return this.styleArgumentText(word);\n        return this.styleSubcommandText(word); // Restrict to initial words?\n      })\n      .join(' ');\n  }\n  styleArgumentTerm(str) {\n    return this.styleArgumentText(str);\n  }\n  styleOptionText(str) {\n    return str;\n  }\n  styleArgumentText(str) {\n    return str;\n  }\n  styleSubcommandText(str) {\n    return str;\n  }\n  styleCommandText(str) {\n    return str;\n  }\n\n  /**\n   * Calculate the pad width from the maximum term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  padWidth(cmd, helper) {\n    return Math.max(\n      helper.longestOptionTermLength(cmd, helper),\n      helper.longestGlobalOptionTermLength(cmd, helper),\n      helper.longestSubcommandTermLength(cmd, helper),\n      helper.longestArgumentTermLength(cmd, helper),\n    );\n  }\n\n  /**\n   * Detect manually wrapped and indented strings by checking for line break followed by whitespace.\n   *\n   * @param {string} str\n   * @returns {boolean}\n   */\n  preformatted(str) {\n    return /\\n[^\\S\\r\\n]/.test(str);\n  }\n\n  /**\n   * Format the \"item\", which consists of a term and description. Pad the term and wrap the description, indenting the following lines.\n   *\n   * So \"TTT\", 5, \"DDD DDDD DD DDD\" might be formatted for this.helpWidth=17 like so:\n   *   TTT  DDD DDDD\n   *        DD DDD\n   *\n   * @param {string} term\n   * @param {number} termWidth\n   * @param {string} description\n   * @param {Help} helper\n   * @returns {string}\n   */\n  formatItem(term, termWidth, description, helper) {\n    const itemIndent = 2;\n    const itemIndentStr = ' '.repeat(itemIndent);\n    if (!description) return itemIndentStr + term;\n\n    // Pad the term out to a consistent width, so descriptions are aligned.\n    const paddedTerm = term.padEnd(\n      termWidth + term.length - helper.displayWidth(term),\n    );\n\n    // Format the description.\n    const spacerWidth = 2; // between term and description\n    const helpWidth = this.helpWidth ?? 80; // in case prepareContext() was not called\n    const remainingWidth = helpWidth - termWidth - spacerWidth - itemIndent;\n    let formattedDescription;\n    if (\n      remainingWidth < this.minWidthToWrap ||\n      helper.preformatted(description)\n    ) {\n      formattedDescription = description;\n    } else {\n      const wrappedDescription = helper.boxWrap(description, remainingWidth);\n      formattedDescription = wrappedDescription.replace(\n        /\\n/g,\n        '\\n' + ' '.repeat(termWidth + spacerWidth),\n      );\n    }\n\n    // Construct and overall indent.\n    return (\n      itemIndentStr +\n      paddedTerm +\n      ' '.repeat(spacerWidth) +\n      formattedDescription.replace(/\\n/g, `\\n${itemIndentStr}`)\n    );\n  }\n\n  /**\n   * Wrap a string at whitespace, preserving existing line breaks.\n   * Wrapping is skipped if the width is less than `minWidthToWrap`.\n   *\n   * @param {string} str\n   * @param {number} width\n   * @returns {string}\n   */\n  boxWrap(str, width) {\n    if (width < this.minWidthToWrap) return str;\n\n    const rawLines = str.split(/\\r\\n|\\n/);\n    // split up text by whitespace\n    const chunkPattern = /[\\s]*[^\\s]+/g;\n    const wrappedLines = [];\n    rawLines.forEach((line) => {\n      const chunks = line.match(chunkPattern);\n      if (chunks === null) {\n        wrappedLines.push('');\n        return;\n      }\n\n      let sumChunks = [chunks.shift()];\n      let sumWidth = this.displayWidth(sumChunks[0]);\n      chunks.forEach((chunk) => {\n        const visibleWidth = this.displayWidth(chunk);\n        // Accumulate chunks while they fit into width.\n        if (sumWidth + visibleWidth <= width) {\n          sumChunks.push(chunk);\n          sumWidth += visibleWidth;\n          return;\n        }\n        wrappedLines.push(sumChunks.join(''));\n\n        const nextChunk = chunk.trimStart(); // trim space at line break\n        sumChunks = [nextChunk];\n        sumWidth = this.displayWidth(nextChunk);\n      });\n      wrappedLines.push(sumChunks.join(''));\n    });\n\n    return wrappedLines.join('\\n');\n  }\n}\n","import { InvalidArgumentError } from './error.js';\n\nexport class Option {\n  /**\n   * Initialize a new `Option` with the given `flags` and `description`.\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   */\n\n  constructor(flags, description) {\n    this.flags = flags;\n    this.description = description || '';\n\n    this.required = flags.includes('<'); // A value must be supplied when the option is specified.\n    this.optional = flags.includes('['); // A value is optional when the option is specified.\n    // variadic test ignores <value,...> et al which might be used to describe custom splitting of single argument\n    this.variadic = /\\w\\.\\.\\.[>\\]]$/.test(flags); // The option can take multiple values.\n    this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line.\n    const optionFlags = splitOptionFlags(flags);\n    this.short = optionFlags.shortFlag; // May be a short flag, undefined, or even a long flag (if option has two long flags).\n    this.long = optionFlags.longFlag;\n    this.negate = false;\n    if (this.long) {\n      this.negate = this.long.startsWith('--no-');\n    }\n    this.defaultValue = undefined;\n    this.defaultValueDescription = undefined;\n    this.presetArg = undefined;\n    this.envVar = undefined;\n    this.parseArg = undefined;\n    this.hidden = false;\n    this.argChoices = undefined;\n    this.conflictsWith = [];\n    this.implied = undefined;\n    this.helpGroupHeading = undefined; // soft initialised when option added to command\n  }\n\n  /**\n   * Set the default value, and optionally supply the description to be displayed in the help.\n   *\n   * @param {*} value\n   * @param {string} [description]\n   * @return {Option}\n   */\n\n  default(value, description) {\n    this.defaultValue = value;\n    this.defaultValueDescription = description;\n    return this;\n  }\n\n  /**\n   * Preset to use when option used without option-argument, especially optional but also boolean and negated.\n   * The custom processing (parseArg) is called.\n   *\n   * @example\n   * new Option('--color').default('GREYSCALE').preset('RGB');\n   * new Option('--donate [amount]').preset('20').argParser(parseFloat);\n   *\n   * @param {*} arg\n   * @return {Option}\n   */\n\n  preset(arg) {\n    this.presetArg = arg;\n    return this;\n  }\n\n  /**\n   * Add option name(s) that conflict with this option.\n   * An error will be displayed if conflicting options are found during parsing.\n   *\n   * @example\n   * new Option('--rgb').conflicts('cmyk');\n   * new Option('--js').conflicts(['ts', 'jsx']);\n   *\n   * @param {(string | string[])} names\n   * @return {Option}\n   */\n\n  conflicts(names) {\n    this.conflictsWith = this.conflictsWith.concat(names);\n    return this;\n  }\n\n  /**\n   * Specify implied option values for when this option is set and the implied options are not.\n   *\n   * The custom processing (parseArg) is not called on the implied values.\n   *\n   * @example\n   * program\n   *   .addOption(new Option('--log', 'write logging information to file'))\n   *   .addOption(new Option('--trace', 'log extra details').implies({ log: 'trace.txt' }));\n   *\n   * @param {object} impliedOptionValues\n   * @return {Option}\n   */\n  implies(impliedOptionValues) {\n    let newImplied = impliedOptionValues;\n    if (typeof impliedOptionValues === 'string') {\n      // string is not documented, but easy mistake and we can do what user probably intended.\n      newImplied = { [impliedOptionValues]: true };\n    }\n    this.implied = Object.assign(this.implied || {}, newImplied);\n    return this;\n  }\n\n  /**\n   * Set environment variable to check for option value.\n   *\n   * An environment variable is only used if when processed the current option value is\n   * undefined, or the source of the current value is 'default' or 'config' or 'env'.\n   *\n   * @param {string} name\n   * @return {Option}\n   */\n\n  env(name) {\n    this.envVar = name;\n    return this;\n  }\n\n  /**\n   * Set the custom handler for processing CLI option arguments into option values.\n   *\n   * @param {Function} [fn]\n   * @return {Option}\n   */\n\n  argParser(fn) {\n    this.parseArg = fn;\n    return this;\n  }\n\n  /**\n   * Whether the option is mandatory and must have a value after parsing.\n   *\n   * @param {boolean} [mandatory=true]\n   * @return {Option}\n   */\n\n  makeOptionMandatory(mandatory = true) {\n    this.mandatory = !!mandatory;\n    return this;\n  }\n\n  /**\n   * Hide option in help.\n   *\n   * @param {boolean} [hide=true]\n   * @return {Option}\n   */\n\n  hideHelp(hide = true) {\n    this.hidden = !!hide;\n    return this;\n  }\n\n  /**\n   * @package\n   */\n\n  _collectValue(value, previous) {\n    if (previous === this.defaultValue || !Array.isArray(previous)) {\n      return [value];\n    }\n\n    previous.push(value);\n    return previous;\n  }\n\n  /**\n   * Only allow option value to be one of choices.\n   *\n   * @param {string[]} values\n   * @return {Option}\n   */\n\n  choices(values) {\n    this.argChoices = values.slice();\n    this.parseArg = (arg, previous) => {\n      if (!this.argChoices.includes(arg)) {\n        throw new InvalidArgumentError(\n          `Allowed choices are ${this.argChoices.join(', ')}.`,\n        );\n      }\n      if (this.variadic) {\n        return this._collectValue(arg, previous);\n      }\n      return arg;\n    };\n    return this;\n  }\n\n  /**\n   * Return option name.\n   *\n   * @return {string}\n   */\n\n  name() {\n    if (this.long) {\n      return this.long.replace(/^--/, '');\n    }\n    return this.short.replace(/^-/, '');\n  }\n\n  /**\n   * Return option name, in a camelcase format that can be used\n   * as an object attribute key.\n   *\n   * @return {string}\n   */\n\n  attributeName() {\n    if (this.negate) {\n      return camelcase(this.name().replace(/^no-/, ''));\n    }\n    return camelcase(this.name());\n  }\n\n  /**\n   * Set the help group heading.\n   *\n   * @param {string} heading\n   * @return {Option}\n   */\n  helpGroup(heading) {\n    this.helpGroupHeading = heading;\n    return this;\n  }\n\n  /**\n   * Check if `arg` matches the short or long flag.\n   *\n   * @param {string} arg\n   * @return {boolean}\n   * @package\n   */\n\n  is(arg) {\n    return this.short === arg || this.long === arg;\n  }\n\n  /**\n   * Return whether a boolean option.\n   *\n   * Options are one of boolean, negated, required argument, or optional argument.\n   *\n   * @return {boolean}\n   * @package\n   */\n\n  isBoolean() {\n    return !this.required && !this.optional && !this.negate;\n  }\n}\n\n/**\n * This class is to make it easier to work with dual options, without changing the existing\n * implementation. We support separate dual options for separate positive and negative options,\n * like `--build` and `--no-build`, which share a single option value. This works nicely for some\n * use cases, but is tricky for others where we want separate behaviours despite\n * the single shared option value.\n */\nexport class DualOptions {\n  /**\n   * @param {Option[]} options\n   */\n  constructor(options) {\n    this.positiveOptions = new Map();\n    this.negativeOptions = new Map();\n    this.dualOptions = new Set();\n    options.forEach((option) => {\n      if (option.negate) {\n        this.negativeOptions.set(option.attributeName(), option);\n      } else {\n        this.positiveOptions.set(option.attributeName(), option);\n      }\n    });\n    this.negativeOptions.forEach((value, key) => {\n      if (this.positiveOptions.has(key)) {\n        this.dualOptions.add(key);\n      }\n    });\n  }\n\n  /**\n   * Did the value come from the option, and not from possible matching dual option?\n   *\n   * @param {*} value\n   * @param {Option} option\n   * @returns {boolean}\n   */\n  valueFromOption(value, option) {\n    const optionKey = option.attributeName();\n    if (!this.dualOptions.has(optionKey)) return true;\n\n    // Use the value to deduce if (probably) came from the option.\n    const preset = this.negativeOptions.get(optionKey).presetArg;\n    const negativeValue = preset !== undefined ? preset : false;\n    return option.negate === (negativeValue === value);\n  }\n}\n\n/**\n * Convert string from kebab-case to camelCase.\n *\n * @param {string} str\n * @return {string}\n * @private\n */\n\nfunction camelcase(str) {\n  return str.split('-').reduce((str, word) => {\n    return str + word[0].toUpperCase() + word.slice(1);\n  });\n}\n\n/**\n * Split the short and long flag out of something like '-m,--mixed <value>'\n *\n * @private\n */\n\nfunction splitOptionFlags(flags) {\n  let shortFlag;\n  let longFlag;\n  // short flag, single dash and single character\n  const shortFlagExp = /^-[^-]$/;\n  // long flag, double dash and at least one character\n  const longFlagExp = /^--[^-]/;\n\n  const flagParts = flags.split(/[ |,]+/).concat('guard');\n  // Normal is short and/or long.\n  if (shortFlagExp.test(flagParts[0])) shortFlag = flagParts.shift();\n  if (longFlagExp.test(flagParts[0])) longFlag = flagParts.shift();\n  // Long then short. Rarely used but fine.\n  if (!shortFlag && shortFlagExp.test(flagParts[0]))\n    shortFlag = flagParts.shift();\n  // Allow two long flags, like '--ws, --workspace'\n  // This is the supported way to have a shortish option flag.\n  if (!shortFlag && longFlagExp.test(flagParts[0])) {\n    shortFlag = longFlag;\n    longFlag = flagParts.shift();\n  }\n\n  // Check for unprocessed flag. Fail noisily rather than silently ignore.\n  if (flagParts[0].startsWith('-')) {\n    const unsupportedFlag = flagParts[0];\n    const baseError = `option creation failed due to '${unsupportedFlag}' in option flags '${flags}'`;\n    if (/^-[^-][^-]/.test(unsupportedFlag))\n      throw new Error(\n        `${baseError}\n- a short flag is a single dash and a single character\n  - either use a single dash and a single character (for a short flag)\n  - or use a double dash for a long option (and can have two, like '--ws, --workspace')`,\n      );\n    if (shortFlagExp.test(unsupportedFlag))\n      throw new Error(`${baseError}\n- too many short flags`);\n    if (longFlagExp.test(unsupportedFlag))\n      throw new Error(`${baseError}\n- too many long flags`);\n\n    throw new Error(`${baseError}\n- unrecognised flag format`);\n  }\n  if (shortFlag === undefined && longFlag === undefined)\n    throw new Error(\n      `option creation failed due to no flags found in '${flags}'.`,\n    );\n\n  return { shortFlag, longFlag };\n}\n","const maxDistance = 3;\n\nfunction editDistance(a, b) {\n  // https://en.wikipedia.org/wiki/Damerau–Levenshtein_distance\n  // Calculating optimal string alignment distance, no substring is edited more than once.\n  // (Simple implementation.)\n\n  // Quick early exit, return worst case.\n  if (Math.abs(a.length - b.length) > maxDistance)\n    return Math.max(a.length, b.length);\n\n  // distance between prefix substrings of a and b\n  const d = [];\n\n  // pure deletions turn a into empty string\n  for (let i = 0; i <= a.length; i++) {\n    d[i] = [i];\n  }\n  // pure insertions turn empty string into b\n  for (let j = 0; j <= b.length; j++) {\n    d[0][j] = j;\n  }\n\n  // fill matrix\n  for (let j = 1; j <= b.length; j++) {\n    for (let i = 1; i <= a.length; i++) {\n      let cost;\n      if (a[i - 1] === b[j - 1]) {\n        cost = 0;\n      } else {\n        cost = 1;\n      }\n      d[i][j] = Math.min(\n        d[i - 1][j] + 1, // deletion\n        d[i][j - 1] + 1, // insertion\n        d[i - 1][j - 1] + cost, // substitution\n      );\n      // transposition\n      if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {\n        d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + 1);\n      }\n    }\n  }\n\n  return d[a.length][b.length];\n}\n\n/**\n * Find close matches, restricted to same number of edits.\n *\n * @param {string} word\n * @param {string[]} candidates\n * @returns {string}\n */\n\nexport function suggestSimilar(word, candidates) {\n  if (!candidates || candidates.length === 0) return '';\n  // remove possible duplicates\n  candidates = Array.from(new Set(candidates));\n\n  const searchingOptions = word.startsWith('--');\n  if (searchingOptions) {\n    word = word.slice(2);\n    candidates = candidates.map((candidate) => candidate.slice(2));\n  }\n\n  let similar = [];\n  let bestDistance = maxDistance;\n  const minSimilarity = 0.4;\n  candidates.forEach((candidate) => {\n    if (candidate.length <= 1) return; // no one character guesses\n\n    const distance = editDistance(word, candidate);\n    const length = Math.max(word.length, candidate.length);\n    const similarity = (length - distance) / length;\n    if (similarity > minSimilarity) {\n      if (distance < bestDistance) {\n        // better edit distance, throw away previous worse matches\n        bestDistance = distance;\n        similar = [candidate];\n      } else if (distance === bestDistance) {\n        similar.push(candidate);\n      }\n    }\n  });\n\n  similar.sort((a, b) => a.localeCompare(b));\n  if (searchingOptions) {\n    similar = similar.map((candidate) => `--${candidate}`);\n  }\n\n  if (similar.length > 1) {\n    return `\\n(Did you mean one of ${similar.join(', ')}?)`;\n  }\n  if (similar.length === 1) {\n    return `\\n(Did you mean ${similar[0]}?)`;\n  }\n  return '';\n}\n","import { Argument } from './lib/argument.js';\nimport { Command } from './lib/command.js';\nimport { CommanderError, InvalidArgumentError } from './lib/error.js';\nimport { Help } from './lib/help.js';\nimport { Option } from './lib/option.js';\n\nexport const program = new Command();\n\nexport const createCommand = (name) => new Command(name);\nexport const createOption = (flags, description) =>\n  new Option(flags, description);\nexport const createArgument = (name, description) =>\n  new Argument(name, description);\n\n/**\n * Expose classes\n */\n\nexport { Command, Option, Argument, Help };\nexport { CommanderError, InvalidArgumentError };\nexport { InvalidArgumentError as InvalidOptionArgumentError }; // Deprecated\n","import \"dotenv/config\";\nimport { Command } from \"commander\";\nimport qrcode from \"qrcode-terminal\";\nimport { loadOrCreateApiKey, loadPublicUrl } from \"../src/auth\";\nimport { loadUpdateConfig, UPDATE_CONFIG_PATH } from \"../src/config/update-config\";\nimport { appendDevSessionMarker } from \"../src/devLog\";\nimport { resolveServerUrl } from \"../src/lan-url\";\nimport { getLogger } from \"../src/logger\";\nimport { StreamerServer } from \"../src/server\";\nimport { checkForUpdate } from \"../src/updater/check-update\";\nimport { runInstall } from \"../src/updater/install\";\nimport { appendUpdateLog } from \"../src/updater/update-log\";\nimport { getVersion } from \"../src/version\";\nimport { registerProdCommands } from \"./prod\";\n\nconst log = getLogger(\"cli\");\n\nconst program = new Command();\n\nprogram\n  .name(\"threadbase-streamer\")\n  .description(\"PTY session management, WebSocket streaming, and REST API server for Claude Code\")\n  .version(getVersion());\n\nprogram\n  .command(\"serve\")\n  .description(\"Start the streamer server\")\n  .option(\"-p, --port <number>\", \"Port to listen on\", \"8766\")\n  .option(\"--api-key <key>\", \"API key for authentication\")\n  .option(\"--local-no-auth\", \"Skip auth for localhost requests\", false)\n  .option(\"-v, --verbose\", \"Verbose output\", false)\n  .option(\"--log-menubar-requests\", \"Log /healthz requests from the menubar app\", false)\n  .option(\"--browse-root <path>\", \"Root directory for file browsing\")\n  .option(\n    \"--public-url <url>\",\n    \"Public URL clients should use to reach this server (https:// required, except localhost). Falls back to THREADBASE_PUBLIC_URL env or public_url: in ~/.threadbase/server.yaml.\",\n  )\n  .option(\"--no-pair-qr\", \"Skip the pairing QR on startup\", false)\n  .option(\"--replace-prod\", \"Stop the launchd-supervised prod streamer and bind its port\", false)\n  .option(\"--forget\", \"Clear this repo's remembered dev-vs-prod choice and re-prompt\", false)\n  .option(\"--forget-all\", \"Clear every repo's remembered dev-vs-prod choice\", false)\n  .option(\n    \"--prod\",\n    \"Run as if invoked by launchd: skip the dev-takeover prompt and signal handlers\",\n    false,\n  )\n  .option(\n    \"--multi-agent-flow\",\n    \"Run in multi-agent mode (PTY mode unreachable in this process)\",\n    false,\n  )\n  .action(async (opts) => {\n    if (opts.multiAgentFlow) {\n      process.env.MULTI_AGENT_FLOW = \"true\";\n    }\n    const requestedPort = Number.parseInt(opts.port, 10);\n    const apiKey = opts.apiKey ?? loadOrCreateApiKey();\n    const publicUrl = opts.publicUrl ?? loadPublicUrl() ?? null;\n\n    // Detect whether this invocation is \"dev mode\" (started by a human shell)\n    // or \"prod mode\" (started by launchd). PPID 1 = launchd on macOS.\n    const isProdInvocation = opts.prod === true || process.ppid === 1;\n    if (!isProdInvocation) appendDevSessionMarker();\n\n    let resolvedPort = requestedPort;\n\n    if (!isProdInvocation) {\n      const { resolveDevPlan, detectProdActive, isPortInUse, findFreePort, takeoverProd } =\n        await import(\"../src/lifecycle/dev-takeover\");\n      const { interactivePrompt } = await import(\"../src/lifecycle/prompt\");\n      const { getGitToplevel } = await import(\"../src/lifecycle/repo\");\n\n      const repoToplevel = getGitToplevel(process.cwd());\n      const portTaken = await isPortInUse(requestedPort);\n\n      const plan = await resolveDevPlan({\n        requestedPort,\n        replaceProd: opts.replaceProd === true,\n        forget: opts.forget === true,\n        forgetAll: opts.forgetAll === true,\n        repoToplevel,\n        isProdActive: detectProdActive,\n        portInUse: () => portTaken,\n        prompt: interactivePrompt,\n        findFreePort,\n      });\n\n      resolvedPort = plan.port;\n      if (plan.kind === \"replace-prod\") {\n        takeoverProd({ port: plan.port, repoToplevel });\n      }\n    }\n\n    const server = new StreamerServer({\n      port: resolvedPort,\n      apiKey,\n      apiKeySource: opts.apiKey ? \"cli\" : \"config\",\n      localNoAuth: opts.localNoAuth,\n      verbose: opts.verbose,\n      logMenubarRequests: opts.logMenubarRequests,\n      browseRoot: opts.browseRoot,\n      publicUrl: opts.publicUrl,\n    });\n\n    await server.listen(resolvedPort);\n\n    {\n      const v = getVersion();\n      log.info(`Threadbase Streamer v${v}`, { version: v, port: resolvedPort });\n    }\n    log.info(`Listening on http://localhost:${resolvedPort}`, {\n      url: `http://localhost:${resolvedPort}`,\n    });\n    log.info(`WebSocket at ws://localhost:${resolvedPort}/ws`, {\n      wsUrl: `ws://localhost:${resolvedPort}/ws`,\n    });\n    log.info(`API key: ${apiKey}`, { apiKeyMasked: `${apiKey.slice(0, 6)}…` });\n\n    if (opts.pairQr !== false) {\n      try {\n        await printPairQR({ port: resolvedPort, apiKey, publicUrl });\n      } catch (err) {\n        const message = err instanceof Error ? err.message : String(err);\n        log.warn(`(skipped pairing QR: ${message})`, { reason: message });\n      }\n    }\n\n    const shutdown = async () => {\n      log.info(\"Shutting down...\");\n      await server.close();\n      process.exit(0);\n    };\n\n    if (isProdInvocation) {\n      // Prod mode: simple shutdown handlers (no takeover semantics).\n      process.on(\"SIGINT\", shutdown);\n      process.on(\"SIGTERM\", shutdown);\n      // Belt-and-suspenders for unhandled socket errors that slip past the\n      // specific guards in StreamerServer (clientError, server-error, upgrade\n      // race). Without this handler, an unhandled 'error' event from any TCP\n      // socket terminates the process with a stack trace to stderr; launchd\n      // respawns it but the next startup repeats the same warm-up. Logging\n      // the error with the cause + exiting 1 ensures launchd respawns\n      // cleanly AND we can grep the log for what slipped through.\n      process.on(\"uncaughtException\", (err) => {\n        log.error(`uncaught: ${err.message}`, {\n          error: err.message,\n          stack: err.stack,\n          event: \"process.uncaught\",\n        });\n        process.exit(1);\n      });\n      process.on(\"unhandledRejection\", (reason) => {\n        const msg = reason instanceof Error ? reason.message : String(reason);\n        log.error(`unhandled rejection: ${msg}`, {\n          error: msg,\n          event: \"process.unhandled_rejection\",\n        });\n        process.exit(1);\n      });\n    }\n    // Dev mode with takeover already installed its handlers in takeoverProd().\n    // Dev mode without takeover (use-port path) — install simple ones too:\n    if (!isProdInvocation) {\n      process.on(\"SIGINT\", shutdown);\n      process.on(\"SIGTERM\", shutdown);\n    }\n  });\n\nprogram\n  .command(\"cache\")\n  .description(\"Manage the local SQLite conversation cache\")\n  .addCommand(\n    new Command(\"clear\")\n      .description(\"Delete the cache DB so it rebuilds from disk on next startup\")\n      .option(\n        \"--cache-dir <path>\",\n        \"Cache directory (default: ~/.threadbase/cache)\",\n        `${process.env.HOME}/.threadbase/cache`,\n      )\n      .action((opts) => {\n        const { rmSync, existsSync } = require(\"node:fs\");\n        const { join } = require(\"node:path\");\n        const dbPath = join(opts.cacheDir, \"cache.db\");\n        for (const suffix of [\"\", \"-shm\", \"-wal\"]) {\n          const f = dbPath + suffix;\n          if (existsSync(f)) {\n            rmSync(f);\n            log.info(`Deleted ${f}`, { path: f }, \"console\");\n          }\n        }\n        log.info(\"Cache cleared. Restart the server to rebuild.\", undefined, \"console\");\n      }),\n  );\n\nprogram\n  .command(\"pair\")\n  .description(\"Print a pairing QR code (server must already be running)\")\n  .option(\"-p, --port <number>\", \"Port the server is listening on\", \"8766\")\n  .action(async (opts) => {\n    const port = Number.parseInt(opts.port, 10);\n    const apiKey = loadOrCreateApiKey();\n    const publicUrl = loadPublicUrl() ?? null;\n    await printPairQR({ port, apiKey, publicUrl });\n  });\n\nprogram\n  .command(\"set-key [key]\")\n  .description(\"Set the streamer API key in ~/.threadbase/server.yaml\")\n  .action(async (key: string | undefined) => {\n    const { runSetKey } = await import(\"./setKey\");\n    const code = await runSetKey(\n      { key },\n      {\n        log: {\n          info: (msg) => console.log(msg),\n          error: (msg) => console.error(msg),\n        },\n      },\n    );\n    process.exit(code);\n  });\n\nprogram\n  .command(\"update\")\n  .description(\"Check for streamer updates from GitHub Releases and install them\")\n  .option(\"--check\", \"Check only; do not install\", false)\n  .option(\"--version <version>\", \"Pin to a specific release tag\")\n  .option(\"--allow-major\", \"Allow a major-version bump\", false)\n  .option(\"--force\", \"Skip the active-session defer check\", false)\n  .option(\"--dry-run\", \"Print what would be installed without writing to disk\", false)\n  .option(\"-p, --port <number>\", \"Port of the running streamer for active-session check\", \"8766\")\n  .action(async (opts) => {\n    const cfg = loadUpdateConfig();\n    if (!cfg) {\n      log.warn(\n        `No update config found at ${UPDATE_CONFIG_PATH}. Create one with at least 'github_repo: owner/name' to enable updates.`,\n        undefined,\n        \"console\",\n      );\n      process.exitCode = 1;\n      return;\n    }\n\n    try {\n      if (opts.check) {\n        const result = await checkForUpdate({\n          currentVersion: getVersion(),\n          config: cfg,\n          pinnedVersion: opts.version,\n          allowMajor: opts.allowMajor,\n        });\n        appendUpdateLog(\n          `[check] current=${result.current} latest=${result.latest ?? \"none\"} status=${result.reason}`,\n        );\n        log.info(`Current : ${result.current}`, undefined, \"console\");\n        log.info(`Latest  : ${result.latest ?? \"(none)\"}`, undefined, \"console\");\n        log.info(`Channel : ${cfg.channel}`, undefined, \"console\");\n        log.info(`Diff    : ${result.diff ?? \"(none)\"}`, undefined, \"console\");\n        log.info(`Status  : ${result.reason}`, undefined, \"console\");\n        return;\n      }\n\n      const port = Number.parseInt(opts.port, 10);\n      const apiKey = loadOrCreateApiKey();\n\n      const result = await runInstall({\n        currentVersion: getVersion(),\n        config: cfg,\n        pinnedVersion: opts.version,\n        allowMajor: opts.allowMajor,\n        force: opts.force,\n        dryRun: opts.dryRun,\n        runningServer: { port, apiKey },\n      });\n\n      switch (result.kind) {\n        case \"no-op\":\n          log.info(`Current : ${result.current}`, undefined, \"console\");\n          log.info(`Latest  : ${result.latest ?? \"(none)\"}`, undefined, \"console\");\n          log.info(`Status  : ${result.reason}`, undefined, \"console\");\n          break;\n        case \"unsupported-install\":\n          log.warn(result.reason, undefined, \"console\");\n          process.exitCode = 2;\n          break;\n        case \"deferred\":\n          log.warn(`Deferred: ${result.reason}`, undefined, \"console\");\n          process.exitCode = 2;\n          break;\n        case \"dry-run\":\n          log.info(\n            `Would install ${result.latest} from ${result.tarballUrl}`,\n            undefined,\n            \"console\",\n          );\n          break;\n        case \"installed\":\n          log.info(\n            `Installed ${result.installed} (was ${result.previous}). Restart: ${result.restart.method}.`,\n            undefined,\n            \"console\",\n          );\n          if (result.pruned.length > 0) {\n            log.info(`Pruned old releases: ${result.pruned.join(\", \")}`, undefined, \"console\");\n          }\n          break;\n      }\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err);\n      appendUpdateLog(`[error] ${message}`);\n      log.error(`Update failed: ${message}`, { error: message }, \"console\");\n      process.exitCode = 1;\n    }\n  });\n\nregisterProdCommands(program);\n\nprogram.parse();\n\nasync function printPairQR({\n  port,\n  apiKey,\n  publicUrl,\n}: {\n  port: number;\n  apiKey: string;\n  publicUrl: string | null;\n}): Promise<void> {\n  const res = await fetch(`http://localhost:${port}/api/pair/start`, {\n    method: \"POST\",\n    headers: { Authorization: `Bearer ${apiKey}`, \"Content-Type\": \"application/json\" },\n    body: \"{}\",\n  });\n  if (!res.ok) {\n    throw new Error(`/api/pair/start returned ${res.status}`);\n  }\n  const { token, expiresAt, expiresInSeconds } = (await res.json()) as {\n    token: string;\n    expiresAt: number;\n    expiresInSeconds: number;\n  };\n\n  const url = resolveServerUrl({ publicUrl, port });\n  const expSeconds = Math.floor(expiresAt / 1000);\n  const payload = `threadbase://pair?url=${encodeURIComponent(url)}&token=${token}&exp=${expSeconds}`;\n\n  log.info(\"Scan to pair a mobile client:\\n\", undefined, \"console\");\n  qrcode.generate(payload, { small: true });\n  log.info(`Server URL : ${url}`, undefined, \"console\");\n  log.info(`Pair URL   : ${payload}`, undefined, \"console\");\n  log.info(\n    `Expires    : ${new Date(expiresAt).toLocaleTimeString()} (${expiresInSeconds}s)\\n`,\n    undefined,\n    \"console\",\n  );\n}\n","import { readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\nimport { type UpdateConfig, UpdateConfigSchema } from \"../schemas/updateConfig.schema\";\n\nconst DEFAULT_CONFIG_PATH = join(homedir(), \".threadbase\", \"update.yaml\");\n\nexport interface LoadUpdateConfigOptions {\n  path?: string;\n}\n\n/**\n * Loads ~/.threadbase/update.yaml. Returns null when the file does not exist\n * (auto-update disabled). Throws on malformed YAML or schema-invalid content\n * so misconfiguration is loud rather than silently disabling updates.\n */\nexport function loadUpdateConfig(opts: LoadUpdateConfigOptions = {}): UpdateConfig | null {\n  const path = opts.path ?? DEFAULT_CONFIG_PATH;\n\n  let raw: string;\n  try {\n    raw = readFileSync(path, \"utf-8\");\n  } catch (err) {\n    if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n    throw err;\n  }\n\n  const parsed: unknown = parseYaml(raw);\n  if (parsed === null || parsed === undefined) {\n    throw new Error(`update.yaml at ${path} is empty — github_repo is required`);\n  }\n\n  return UpdateConfigSchema.parse(parsed);\n}\n\nexport { DEFAULT_CONFIG_PATH as UPDATE_CONFIG_PATH };\n","import { z } from \"zod\";\n\nexport const UpdateConfigSchema = z\n  .object({\n    auto_update: z.boolean().default(false),\n    channel: z.enum([\"stable\", \"next\"]).default(\"stable\"),\n    allow: z.array(z.enum([\"patch\", \"minor\", \"major\"])).default([\"patch\", \"minor\"]),\n    poll_interval_minutes: z.number().int().min(0).default(60),\n    defer_if_active_sessions: z.boolean().default(true),\n    github_repo: z.string().regex(/^[^/]+\\/[^/]+$/, \"github_repo must be 'owner/name'\"),\n    webhook_secret: z.string().min(1).nullable().default(null),\n  })\n  .strict();\n\nexport type UpdateConfig = z.infer<typeof UpdateConfigSchema>;\n","import { appendFileSync, mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { installDir } from \"./lifecycle/constants\";\n\nexport function devLogPath(): string {\n  return join(installDir(), \"logs\", \"dev.log\");\n}\n\n// ponytail: append-only, never truncated — dev sessions stack up in one\n// file instead of overwriting each other like prod's stdout/stderr do.\nexport function appendDevSessionMarker(): void {\n  try {\n    const path = devLogPath();\n    mkdirSync(join(installDir(), \"logs\"), { recursive: true });\n    appendFileSync(path, `=== dev session started ${new Date().toISOString()} ===\\n`, \"utf8\");\n  } catch {\n    // Non-fatal — never let a logging failure block server startup.\n  }\n}\n","import { networkInterfaces } from \"os\";\n\nexport interface ResolveOpts {\n  publicUrl: string | null;\n  port: number;\n}\n\nexport function resolveServerUrl({ publicUrl, port }: ResolveOpts): string {\n  if (publicUrl) return publicUrl;\n  const lan = firstLanIPv4();\n  if (lan) return `http://${lan}:${port}`;\n  return `http://localhost:${port}`;\n}\n\nfunction firstLanIPv4(): string | null {\n  const ifaces = networkInterfaces();\n  for (const name of Object.keys(ifaces)) {\n    const addrs = ifaces[name] ?? [];\n    for (const addr of addrs) {\n      if (addr.family === \"IPv4\" && !addr.internal) return addr.address;\n    }\n  }\n  return null;\n}\n","// src/helper/websocket/index.ts\nvar WSContext = class {\n  #init;\n  constructor(init) {\n    this.#init = init;\n    this.raw = init.raw;\n    this.url = init.url ? new URL(init.url) : null;\n    this.protocol = init.protocol ?? null;\n  }\n  send(source, options) {\n    this.#init.send(source, options ?? {});\n  }\n  raw;\n  binaryType = \"arraybuffer\";\n  get readyState() {\n    return this.#init.readyState;\n  }\n  url;\n  protocol;\n  close(code, reason) {\n    this.#init.close(code, reason);\n  }\n};\nvar createWSMessageEvent = (source) => {\n  return new MessageEvent(\"message\", {\n    data: source\n  });\n};\nvar defineWebSocketHelper = (handler) => {\n  return ((...args) => {\n    if (typeof args[0] === \"function\") {\n      const [createEvents, options] = args;\n      return async function upgradeWebSocket(c, next) {\n        const events = await createEvents(c);\n        const result = await handler(c, events, options);\n        if (result) {\n          return result;\n        }\n        await next();\n      };\n    } else {\n      const [c, events, options] = args;\n      return (async () => {\n        const upgraded = await handler(c, events, options);\n        if (!upgraded) {\n          throw new Error(\"Failed to upgrade WebSocket\");\n        }\n        return upgraded;\n      })();\n    }\n  });\n};\nexport {\n  WSContext,\n  createWSMessageEvent,\n  defineWebSocketHelper\n};\n","import createWebSocketStream from './lib/stream.js';\nimport extension from './lib/extension.js';\nimport PerMessageDeflate from './lib/permessage-deflate.js';\nimport Receiver from './lib/receiver.js';\nimport Sender from './lib/sender.js';\nimport subprotocol from './lib/subprotocol.js';\nimport WebSocket from './lib/websocket.js';\nimport WebSocketServer from './lib/websocket-server.js';\n\nexport {\n  createWebSocketStream,\n  extension,\n  PerMessageDeflate,\n  Receiver,\n  Sender,\n  subprotocol,\n  WebSocket,\n  WebSocketServer\n};\n\nexport default WebSocket;\n","interface CloseEventInit extends EventInit {\n  code?: number\n  reason?: string\n  wasClean?: boolean\n}\n\n/**\n * @link https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent\n */\nexport const CloseEvent: typeof globalThis.CloseEvent =\n  globalThis.CloseEvent ??\n  class extends Event {\n    #eventInitDict\n\n    constructor(type: string, eventInitDict: CloseEventInit = {}) {\n      super(type, eventInitDict)\n      this.#eventInitDict = eventInitDict\n    }\n\n    get wasClean(): boolean {\n      return this.#eventInitDict.wasClean ?? false\n    }\n\n    get code(): number {\n      return this.#eventInitDict.code ?? 0\n    }\n\n    get reason(): string {\n      return this.#eventInitDict.reason ?? ''\n    }\n  }\n","import type { Hono } from 'hono'\nimport { defineWebSocketHelper } from 'hono/ws'\nimport type { UpgradeWebSocket, WSContext } from 'hono/ws'\nimport type { WebSocket } from 'ws'\nimport { WebSocketServer } from 'ws'\nimport { STATUS_CODES } from 'node:http'\nimport type { IncomingMessage, Server } from 'node:http'\nimport type { Http2SecureServer, Http2Server } from 'node:http2'\nimport type { Duplex } from 'node:stream'\nimport { CloseEvent } from './events'\n\nexport interface NodeWebSocket {\n  upgradeWebSocket: UpgradeWebSocket<\n    WebSocket,\n    {\n      onError: (err: unknown) => void\n    }\n  >\n  injectWebSocket(server: Server | Http2Server | Http2SecureServer): void\n  wss: WebSocketServer\n}\nexport interface NodeWebSocketInit {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  app: Hono<any, any, any>\n  baseUrl?: string | URL\n}\n\nconst generateConnectionSymbol = () => Symbol('connection')\n\n/** @example `c.env[CONNECTION_SYMBOL_KEY]` */\nconst CONNECTION_SYMBOL_KEY: unique symbol = Symbol('CONNECTION_SYMBOL_KEY')\n\n/**\n * Create WebSockets for Node.js\n * @param init Options\n * @returns NodeWebSocket\n */\nexport const createNodeWebSocket = (init: NodeWebSocketInit): NodeWebSocket => {\n  const wss = new WebSocketServer({ noServer: true })\n  const waiterMap = new Map<\n    IncomingMessage,\n    { resolve: (ws: WebSocket) => void; connectionSymbol: symbol }\n  >()\n\n  wss.on('connection', (ws, request) => {\n    const waiter = waiterMap.get(request)\n    if (waiter) {\n      waiter.resolve(ws)\n      waiterMap.delete(request)\n    }\n  })\n\n  const nodeUpgradeWebSocket = (request: IncomingMessage, connectionSymbol: symbol) => {\n    return new Promise<WebSocket>((resolve) => {\n      waiterMap.set(request, { resolve, connectionSymbol })\n    })\n  }\n\n  return {\n    wss,\n    injectWebSocket(server) {\n      server.on('upgrade', async (request, socket: Duplex, head) => {\n        const url = new URL(request.url ?? '/', init.baseUrl ?? 'http://localhost')\n        const headers = new Headers()\n        for (const key in request.headers) {\n          const value = request.headers[key]\n          if (!value) {\n            continue\n          }\n          headers.append(key, Array.isArray(value) ? value[0] : value)\n        }\n\n        const env: {\n          incoming: IncomingMessage\n          outgoing: undefined\n          [CONNECTION_SYMBOL_KEY]?: symbol\n        } = {\n          incoming: request,\n          outgoing: undefined,\n        }\n        const response = await init.app.request(url, { headers: headers }, env)\n        const waiter = waiterMap.get(request)\n\n        if (!waiter || waiter.connectionSymbol !== env[CONNECTION_SYMBOL_KEY]) {\n          socket.end(\n            `HTTP/1.1 ${response.status.toString()} ${STATUS_CODES[response.status] ?? ''}\\r\\n` +\n              'Connection: close\\r\\n' +\n              'Content-Length: 0\\r\\n' +\n              '\\r\\n'\n          )\n          waiterMap.delete(request)\n          return\n        }\n\n        wss.handleUpgrade(request, socket, head, (ws) => {\n          wss.emit('connection', ws, request)\n        })\n      })\n    },\n    upgradeWebSocket: defineWebSocketHelper(async (c, events, options) => {\n      if (c.req.header('upgrade')?.toLowerCase() !== 'websocket') {\n        // Not websocket\n        return\n      }\n\n      const connectionSymbol = generateConnectionSymbol()\n      c.env[CONNECTION_SYMBOL_KEY] = connectionSymbol\n      ;(async () => {\n        const ws = await nodeUpgradeWebSocket(c.env.incoming, connectionSymbol)\n\n        // buffer messages to handle messages received before the events are set up\n        const messagesReceivedInStarting: [data: WebSocket.RawData, isBinary: boolean][] = []\n        const bufferMessage = (data: WebSocket.RawData, isBinary: boolean) => {\n          messagesReceivedInStarting.push([data, isBinary])\n        }\n        ws.on('message', bufferMessage)\n\n        const ctx: WSContext<WebSocket> = {\n          binaryType: 'arraybuffer',\n          close(code, reason) {\n            ws.close(code, reason)\n          },\n          protocol: ws.protocol,\n          raw: ws,\n          get readyState() {\n            return ws.readyState\n          },\n          send(source, opts) {\n            ws.send(source, {\n              compress: opts?.compress,\n            })\n          },\n          url: new URL(c.req.url),\n        }\n        try {\n          events?.onOpen?.(new Event('open'), ctx)\n        } catch (e) {\n          ;(options?.onError ?? console.error)(e)\n        }\n\n        const handleMessage = (data: WebSocket.RawData, isBinary: boolean) => {\n          const datas = Array.isArray(data) ? data : [data]\n          for (const data of datas) {\n            try {\n              events?.onMessage?.(\n                new MessageEvent('message', {\n                  data: isBinary\n                    ? data instanceof ArrayBuffer\n                      ? data\n                      : data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength)\n                    : data.toString('utf-8'),\n                }),\n                ctx\n              )\n            } catch (e) {\n              ;(options?.onError ?? console.error)(e)\n            }\n          }\n        }\n        ws.off('message', bufferMessage)\n        for (const message of messagesReceivedInStarting) {\n          handleMessage(...message)\n        }\n\n        ws.on('message', (data, isBinary) => {\n          handleMessage(data, isBinary)\n        })\n        ws.on('close', (code, reason) => {\n          try {\n            events?.onClose?.(new CloseEvent('close', { code, reason: reason.toString() }), ctx)\n          } catch (e) {\n            ;(options?.onError ?? console.error)(e)\n          }\n        })\n        ws.on('error', (error) => {\n          try {\n            events?.onError?.(\n              new ErrorEvent('error', {\n                error: error,\n              }),\n              ctx\n            )\n          } catch (e) {\n            ;(options?.onError ?? console.error)(e)\n          }\n        })\n      })()\n\n      return new Response()\n    }),\n  }\n}\n","import { createNodeWebSocket } from \"@hono/node-ws\";\nimport { Connection, Client as TemporalClient } from \"@temporalio/client\";\nimport {\n  applyIncludeFilter,\n  applyPagination,\n  applyProjectFilter,\n  applySort,\n  type Conversation,\n  type ConversationMeta,\n  ConversationScanner,\n  type FileStatEntry,\n  type SortOrder,\n  search,\n} from \"@threadbase-sh/scanner\";\nimport { EventEmitter } from \"events\";\nimport {\n  createReadStream,\n  existsSync,\n  watch as fsWatch,\n  readdirSync,\n  readFileSync,\n  statSync,\n} from \"fs\";\nimport { realpath } from \"fs/promises\";\nimport type { Hono } from \"hono\";\nimport { createServer, type IncomingMessage, type ServerResponse } from \"http\";\nimport { homedir } from \"os\";\nimport { dirname, join } from \"path\";\nimport { createInterface } from \"readline\";\nimport type { WebSocket } from \"ws\";\nimport { type AgentClient, createAgentClient } from \"./agent/agent-client\";\nimport { type AgentConfig, readAgentConfig } from \"./agent/agent-config\";\nimport { type ConversationWriter, createConversationWriter } from \"./agent/conversation-writer\";\nimport { handleSendAgentInput } from \"./agent/handle-send-agent-input\";\nimport { handleStartAgentSession } from \"./agent/handle-start-agent-session\";\nimport { type AppEnv, createHonoApp } from \"./api/app\";\nimport { ALREADY_HANDLED } from \"./api/routes/sessions.routes\";\nimport { createWsRoutes } from \"./api/routes/ws.routes\";\nimport type { ApiDeps } from \"./api/types/api-deps\";\nimport {\n  generateApiKey,\n  loadBrowseRoot,\n  loadCacheDir,\n  loadPublicUrl,\n  loadTailSize,\n  setApiKey,\n  validatePublicUrl,\n} from \"./auth\";\nimport {\n  BrowsePathNotFoundError,\n  createDirectory,\n  listDirectories,\n  resolveBrowsePath,\n} from \"./browse\";\nimport { ConversationCache, type ConversationListItem } from \"./conversation-cache\";\nimport { createPool, getDbConfig, maskConnectionString, runMigrations } from \"./db\";\nimport { CacheMetadataRepository } from \"./db/repositories/cacheMetadata.repository\";\nimport { ConversationsRepository } from \"./db/repositories/conversations.repository\";\nimport { ProjectsRepository } from \"./db/repositories/projects.repository\";\nimport { SessionsRepository } from \"./db/repositories/sessions.repository\";\nimport { recordUpload } from \"./db/upload-records\";\nimport { handleListProjects } from \"./handlers/handleListProjects\";\nimport { getLogger } from \"./logger\";\nimport { PairTokenStore } from \"./pair-store\";\nimport { discoverClaudeProcesses } from \"./process-discovery\";\nimport { CLAUDE_CODE_PROVIDER, CODEX_CLI_PROVIDER, isProviderResumable } from \"./providers\";\nimport { PTYManager } from \"./pty-manager\";\nimport { seal } from \"./seal\";\nimport { ConversationWatcher } from \"./services/conversations/conversationWatcher\";\nimport { parseAgentEntrypointsEnv } from \"./services/conversations/isAgentConversation\";\nimport { pruneAgentConversations } from \"./services/conversations/pruneAgentConversations\";\nimport { deriveProjectChatTitle } from \"./services/projectChats/deriveProjectChatTitle\";\nimport { questionContentKey } from \"./services/questions/detectQuestionFromScreen\";\nimport {\n  questionsFromLines,\n  shouldBroadcastQuestion,\n} from \"./services/questions/questionBroadcast\";\nimport { resolveAnswer } from \"./services/questions/resolveAnswer\";\nimport { SessionStore } from \"./session-store\";\nimport type {\n  AskQuestion,\n  DiscoveredProcess,\n  PermissionOption,\n  ServerConfig,\n  SessionSortKey,\n  SortOrder as SessionSortOrder,\n  SessionStatus,\n} from \"./types\";\n\nimport { saveUploadFile } from \"./uploads\";\nimport { computeConversationEtag } from \"./utils/conversationEtag\";\nimport { debounce } from \"./utils/debounce\";\nimport { isScannedSnapshotStale } from \"./utils/isScannedSnapshotStale\";\nimport { createScanProgressThrottle } from \"./utils/scanProgressThrottle\";\nimport { WSHub } from \"./ws-hub\";\n\nconst BROWSE_SYSTEM_PROMPT = (browseRoot: string) =>\n  `You are working within the project boundary: ${browseRoot}. ` +\n  `Do not read, write, or execute commands that access files or directories outside this boundary.`;\n\nconst DEFAULT_SYSTEM_PROMPT =\n  \"When presenting options or choices to the user, limit the options to at most 3.\";\n\nconst DEFAULT_PTY_GRACE_PERIOD_MS = 270_000; // 4.5 minutes\n\n// Default OFF. Set to \"1\" or \"true\" to show Claude Agent SDK / claude-mem\n// runs in /api/conversations and /project-chats.\nexport function parseIncludeAgentsEnv(raw: string | undefined): boolean {\n  if (raw === undefined) return false;\n  const v = raw.trim().toLowerCase();\n  return !(v === \"0\" || v === \"false\" || v === \"no\" || v === \"off\" || v === \"\");\n}\n\nexport class StreamerServer {\n  private httpServer: ReturnType<typeof createServer>;\n  private ptyManager: PTYManager;\n  private sessionStore: SessionStore;\n  private wsHub: WSHub;\n  private fileWatcher: ConversationWatcher;\n  private sessionFileMap = new Map<string, string>(); // sessionId → JSONL filePath\n  private pendingQuestions = new Map<string, { toolUseId: string; questions: AskQuestion[] }>();\n  // Content key of the AskUserQuestion currently broadcast for a session (from\n  // either the rendered screen or JSONL), used to de-dupe the two paths: when\n  // the screen detection fires first, the later JSONL flush of the same question\n  // is suppressed. Cleared alongside pendingQuestions.\n  private pendingQuestionKey = new Map<string, string>();\n  // Per-session permission gate currently open (scraped via OSC 777). Parallel\n  // to pendingQuestions; mobile answers it by sending the option index via\n  // /input { keys }. Cleared when the gate closes.\n  private pendingPermission = new Map<\n    string,\n    { prompt?: string; options: PermissionOption[]; cursor?: number }\n  >();\n  private scanner: ConversationScanner | null = null;\n  // Tracks every ConversationScanner ever created so close() can shut them all\n  // down and release SQLite handles (open handles block temp-dir deletion on Windows).\n  private allScanners = new Set<ConversationScanner>();\n  private scannerReady: Promise<unknown> | null = null;\n  // Set by onConversationChanged while a scan is in-flight; getScanner() does\n  // a single rescan after the current one completes instead of restarting it.\n  private scannerStale = false;\n  // True only while bindWithRetry is actively retrying. The persistent\n  // listener-level 'error' handler demotes EADDRINUSE to debug during this\n  // window so the self-healing kickstart-relaunch race doesn't spam warn.\n  private binding = false;\n  private cacheReady = false;\n  private apiKey: string;\n  private apiKeySource: \"config\" | \"cli\";\n  private localNoAuth: boolean;\n  private logMenubarRequests: boolean;\n  private verbose: boolean;\n  private scanProfiles:\n    | Array<{ id: string; label: string; configDir: string; enabled: boolean; emoji: string }>\n    | undefined;\n  private dbPool: Awaited<ReturnType<typeof createPool>> | null = null;\n  private dbInstanceId: string | null = null;\n  private disableDb = false;\n  private browseRoot: string | null = null;\n  private publicUrl: string | null = null;\n  private pairTokens = new PairTokenStore();\n  private exchangeAttempts = new Map<string, number[]>();\n  private sessionStartAttempts = new Map<string, number[]>();\n  private sessionInputAttempts = new Map<string, number[]>();\n  private ptyGracePeriodMs: number;\n  private defaultSystemPrompt: string;\n  // Map of sessionId → grace timer; fires to kill PTY after WS disconnect\n  private ptyGraceTimers = new Map<string, ReturnType<typeof setTimeout>>();\n  // Map of sessionId → set of subscribed WS clients\n  private sessionSubscribers = new Map<string, Set<WebSocket>>();\n  // Map of clientId → WS socket (populated by the \"register\" WS handshake)\n  private clientIdToWs = new Map<string, WebSocket>();\n  // Reverse map for cleanup on close\n  private wsToClientId = new Map<WebSocket, string>();\n  private cache: ConversationCache | null = null;\n  private projectsRepo: ProjectsRepository | null = null;\n  private conversationsRepo: ConversationsRepository | null = null;\n  private sessionsRepo: SessionsRepository | null = null;\n  private cacheMetadataRepo: CacheMetadataRepository | null = null;\n  private discoveryCache: {\n    entries: DiscoveredProcess[];\n    fetchedAt: number;\n  } | null = null;\n  private cacheDir: string;\n  private tailSize: number;\n  private directoryDebounceMs: number;\n  // Trailing-debounced trigger that flags the scanner stale after a quiet\n  // period, collapsing a burst of directory events into one rescan. Assigned\n  // in the constructor body (NOT a field initializer) so directoryDebounceMs\n  // is already set when debounce() captures the wait.\n  private markScannerStaleDebounced!: ReturnType<typeof debounce>;\n  private codexRoots: string[];\n  private includeAgents: boolean;\n  private agentEntrypoints: ReadonlySet<string>;\n  private honoApp: Hono<AppEnv>;\n  private log = getLogger(\"server\");\n  private agentConfig: AgentConfig;\n  private agentClient: AgentClient | null = null;\n  private sessionStatusBus = new EventEmitter();\n\n  constructor(config: ServerConfig & { apiKey: string }) {\n    this.sessionStatusBus.setMaxListeners(0);\n    this.apiKey = config.apiKey;\n    this.apiKeySource = config.apiKeySource ?? \"config\";\n    this.localNoAuth = config.localNoAuth ?? false;\n    this.logMenubarRequests = config.logMenubarRequests ?? false;\n    if (this.localNoAuth) {\n      console.warn(\n        \"[WARN] localNoAuth is ENABLED — all requests from localhost bypass authentication. \" +\n          \"Do not run with --local-no-auth in shared or production environments.\",\n      );\n    }\n    this.verbose = config.verbose ?? false;\n    this.disableDb = config.disableDb ?? false;\n    this.scanProfiles = config.scanProfiles;\n    this.codexRoots = config.codexRoots ?? [join(homedir(), \".codex\", \"sessions\")];\n    this.ptyGracePeriodMs = config.ptyGracePeriodMs ?? DEFAULT_PTY_GRACE_PERIOD_MS;\n    this.defaultSystemPrompt = config.defaultSystemPrompt ?? DEFAULT_SYSTEM_PROMPT;\n    this.cacheDir = config.cacheDir ?? loadCacheDir() ?? join(homedir(), \".threadbase\", \"cache\");\n    this.tailSize = config.tailSize ?? loadTailSize() ?? 10;\n    this.directoryDebounceMs =\n      parseDirScanDebounceEnv(process.env.THREADBASE_DIR_SCAN_DEBOUNCE_MS) ??\n      config.directoryScanDebounceMs ??\n      1000;\n    this.markScannerStaleDebounced = debounce(() => {\n      if (this.scannerReady) this.scannerStale = true;\n      else this.scanner = null;\n    }, this.directoryDebounceMs);\n    this.includeAgents = parseIncludeAgentsEnv(process.env.THREADBASE_INCLUDE_AGENTS);\n    this.agentEntrypoints = parseAgentEntrypointsEnv(process.env.THREADBASE_AGENT_ENTRYPOINTS);\n\n    const rawRoot = process.env.THREADBASE_BROWSE_ROOT ?? loadBrowseRoot() ?? config.browseRoot;\n    if (rawRoot) {\n      realpath(rawRoot)\n        .then((resolved) => {\n          this.browseRoot = resolved;\n          if (this.verbose) this.log.info(`Browse root: ${resolved}`, { browseRoot: resolved });\n        })\n        .catch(() => {\n          this.log.warn(`Warning: browse root does not exist: ${rawRoot}`, { browseRoot: rawRoot });\n        });\n    }\n\n    const rawPublicUrl = process.env.THREADBASE_PUBLIC_URL ?? config.publicUrl ?? loadPublicUrl();\n    if (rawPublicUrl) {\n      const result = validatePublicUrl(rawPublicUrl);\n      if (result.ok) {\n        this.publicUrl = result.normalized;\n        if (this.verbose)\n          this.log.info(`Public URL: ${this.publicUrl}`, { publicUrl: this.publicUrl });\n      } else {\n        this.log.warn(`Warning: ${result.error}`, { error: result.error });\n      }\n    }\n\n    this.sessionStore = new SessionStore();\n    this.wsHub = new WSHub();\n\n    this.fileWatcher = new ConversationWatcher({\n      onNewLines: (filePath, lines) => {\n        // One transactional cache write for the whole batch instead of per line.\n        this.cache?.updateFromLines(filePath, lines);\n        for (const [sessionId, watchedPath] of this.sessionFileMap) {\n          if (watchedPath === filePath) {\n            // toolUseId the client currently holds for this session (set by the\n            // live-screen path as `screen:…`, or a prior JSONL flush). Captured\n            // BEFORE the overwrite below so we can detect an id change.\n            const priorToolUseId = this.pendingQuestions.get(sessionId)?.toolUseId;\n            const { messages, pending } = questionsFromLines(sessionId, lines);\n            for (const p of pending) {\n              this.pendingQuestions.set(sessionId, p); // last pending wins\n              const t = setTimeout(() => {\n                if (this.pendingQuestions.get(sessionId)?.toolUseId === p.toolUseId) {\n                  this.cancelPendingQuestion(sessionId);\n                }\n              }, 60_000);\n              t.unref();\n            }\n            // De-dupe vs the live-screen path: if the rendered detection already\n            // broadcast this exact question (same content key), don't re-render —\n            // EXCEPT when the real JSONL toolUseId differs from the synthetic\n            // `screen:` id the client holds. The client answers with the id it\n            // was given; if it still has the screen id, resolveAnswer rejects the\n            // POST as tool_use_mismatch. Re-broadcasting the real id re-syncs the\n            // client (mapAskQuestionToBlock just replaces activeQuestion — the\n            // card re-renders identically) so answering works.\n            for (const m of messages) {\n              const key = questionContentKey(m.questions);\n              const broadcast = shouldBroadcastQuestion({\n                newContentKey: key,\n                lastContentKey: this.pendingQuestionKey.get(sessionId),\n                newToolUseId: m.toolUseId,\n                priorToolUseId,\n              });\n              this.pendingQuestionKey.set(sessionId, key);\n              if (broadcast) this.wsHub.broadcast(m);\n            }\n            // Additive batched event (one socket write) for newer clients...\n            this.wsHub.broadcast({ type: \"conversation_events\", sessionId, lines });\n            // ...plus per-line conversation_event so older mobile clients,\n            // which only know that shape, keep working byte-for-byte.\n            for (const line of lines) {\n              this.wsHub.broadcast({ type: \"conversation_event\", sessionId, line });\n            }\n            break;\n          }\n        }\n      },\n      onConversationChanged: (filePath) => {\n        // A new JSONL appeared (or changed) in a watched project directory.\n        // Invalidate only the affected file's cache row immediately (cheap\n        // single-row delete; wiping the whole cache on every event would\n        // prevent the warm-up from persisting while active sessions write).\n        // skipIfTailed: this same append also drives the live-tail watcher's\n        // updateFromLines upsert; the two fire with no ordering guarantee, so\n        // never delete a row a live tail just wrote (CRITICAL #2).\n        this.cache?.invalidateByFilePath(filePath, { skipIfTailed: true });\n        // Debounce the global scanner-staleness flip so a burst of directory\n        // events during active sessions collapses into one rescan trigger\n        // after a quiet period. The debounced callback still checks\n        // scannerReady at fire time, preserving the anti-infinite-loop rule\n        // (never null scannerReady mid-scan).\n        this.markScannerStaleDebounced();\n        this.log.debug?.(`Scanner invalidated by directory event: ${filePath}`, {\n          filePath,\n          event: \"cache.directory_change\",\n        });\n      },\n      onFileDeleted: (filePath) => {\n        const id = this.cache?.invalidateByFilePath(filePath);\n        if (id)\n          this.log.info(`Cache row invalidated after JSONL delete: ${id}`, {\n            id,\n            filePath,\n            event: \"cache.invalidate_on_unlink\",\n          });\n      },\n    });\n\n    this.ptyManager = new PTYManager({\n      logger: getLogger(\"pty\"),\n      onOutput: (sessionId, data) => {\n        this.wsHub.broadcast({ type: \"terminal_output\", sessionId, data });\n      },\n      onPermissionChange: (sessionId, gate) => {\n        this.handlePermissionChange(sessionId, gate);\n      },\n      onLiveQuestion: (sessionId, questions) => {\n        this.handleLiveQuestion(sessionId, questions);\n      },\n      onLiveQuestionGone: (sessionId) => {\n        // The rendered AskUserQuestion menu closed. Clear the screen-dedupe key\n        // and cancel the pending question so the answered card is dismissed and\n        // a later repaint can't re-broadcast it. Only acts on a screen-scoped\n        // question — once the JSONL flush recorded the real toolUseId, the\n        // answer path (handleSendAnswer) already cleared it.\n        this.pendingQuestionKey.delete(sessionId);\n        const pq = this.pendingQuestions.get(sessionId);\n        if (pq?.toolUseId.startsWith(\"screen:\")) {\n          this.cancelPendingQuestion(sessionId);\n        }\n      },\n      onReady: (session) => {\n        const resp = this.sessionStore.get(session.id, this.ptyAttachedIds());\n        if (resp) this.wsHub.broadcast({ type: \"session_ready\", session: resp });\n      },\n      onStatusChange: (session) => {\n        this.sessionStore.updateManaged(session.id, {\n          status: session.status,\n          completedAt: session.completedAt,\n          ...(session.lastActivityAt != null && { lastActivityAt: session.lastActivityAt }),\n        });\n        // Refresh the scanner index at the end of each Claude turn so the\n        // conversation is searchable with up-to-date content immediately.\n        if (session.status === \"waiting_input\" || session.status === \"idle\") {\n          const filePath = this.sessionFileMap.get(session.id);\n          if (filePath) {\n            this.getScanner()\n              .then((scanner) => scanner.refreshFile(filePath))\n              .then((meta) => {\n                this.log.info(\"scanner.refreshFile: ok\", {\n                  event: \"scanner.refresh\",\n                  sessionId: session.id,\n                  filePath,\n                  trigger: session.status,\n                  messageCount: meta?.messageCount,\n                });\n              })\n              .catch((err) => {\n                this.log.warn(\"scanner.refreshFile: failed\", {\n                  event: \"scanner.refresh_failed\",\n                  sessionId: session.id,\n                  filePath,\n                  trigger: session.status,\n                  err,\n                });\n              });\n          }\n        }\n        // Stop watching JSONL when PTY exits (session goes idle)\n        if (session.status === \"idle\") {\n          const filePath = this.sessionFileMap.get(session.id);\n          if (filePath) {\n            this.fileWatcher.unwatch(filePath);\n            this.sessionFileMap.delete(session.id);\n            this.cancelPendingQuestion(session.id);\n          }\n          // A gone PTY can never have an open gate; clear silently.\n          this.pendingPermission.delete(session.id);\n        }\n        const resp = this.sessionStore.get(session.id, this.ptyAttachedIds());\n        if (resp) {\n          this.wsHub.broadcast({ type: \"session_update\", session: resp });\n        }\n        this.sessionStatusBus.emit(`status:${session.id}`, session.status);\n      },\n    });\n\n    // ─── Multi-agent mode bootstrap ──────────────────────────────────\n    // When MULTI_AGENT_FLOW is on, construct the Temporal client + JSONL\n    // writer. We use Connection.lazy() so the constructor stays sync —\n    // the actual gRPC connection happens on first RPC.\n    this.agentConfig = readAgentConfig();\n    const agentConfig = this.agentConfig;\n    let conversationWriter: ConversationWriter | null = null;\n    if (agentConfig.enabled) {\n      const connection = Connection.lazy({\n        address: agentConfig.temporal.address,\n      });\n      const temporalClient = new TemporalClient({\n        connection,\n        namespace: agentConfig.temporal.namespace,\n      });\n      this.agentClient = createAgentClient({\n        temporalClient,\n        taskQueue: agentConfig.temporal.taskQueue,\n      });\n      // JSONL goes next to (not inside) the SQLite cacheDir, mirroring the\n      // existing convention: ~/.threadbase/conversations/.\n      const conversationsBaseDir =\n        agentConfig.conversationsDir || join(dirname(this.cacheDir), \"conversations\");\n      conversationWriter = createConversationWriter({\n        baseDir: conversationsBaseDir,\n      });\n    }\n    const agentClient = this.agentClient;\n\n    const self = this;\n    const apiDeps: ApiDeps = {\n      // ponytail: getter so rotateApiKey() takes effect without restarting the server\n      get apiKey() {\n        return self.apiKey;\n      },\n      localNoAuth: this.localNoAuth,\n      logMenubarRequests: this.logMenubarRequests,\n      rotateApiKey: () => this.rotateApiKey(),\n      publicUrl: this.publicUrl,\n      browseRoot: this.browseRoot,\n      ptyManager: this.ptyManager,\n      sessionStore: this.sessionStore,\n      wsHub: this.wsHub,\n      cache: () => this.cache,\n      projectsRepo: () => this.projectsRepo,\n      conversationsRepo: () => this.conversationsRepo,\n      sessionsRepo: () => this.sessionsRepo,\n      cacheMetadataRepo: () => this.cacheMetadataRepo,\n      ptyAttachedIds: () => this.ptyAttachedIds(),\n      handleListSessions: (url, res) => this.handleListSessions(url, res),\n      handleSessionsCount: (res) => this.handleSessionsCount(res),\n      handleGetRecentSessions: (url, res) => this.handleGetRecentSessions(url, res),\n      handleGetSessionNames: (res) => this.handleGetSessionNames(res),\n      handleGetSession: (id, res) => this.handleGetSession(id, res),\n      handleGetOutput: (id, res) => this.handleGetOutput(id, res),\n      handleSendInput: (id, req, res) => this.handleSendInput(id, req, res),\n      handleSendAnswer: (id, req, res) => this.handleSendAnswer(id, req, res),\n      handleCancel: (id, res) => this.handleCancel(id, res),\n      handleStopSession: (id, res) => this.handleStopSession(id, res),\n      handleSetSessionName: (id, req, res) => this.handleSetSessionName(id, req, res),\n      handleUploadFile: (id, req, res) => this.handleUploadFile(id, req, res),\n      handleAdopt: (id, res) => this.handleAdopt(id, res),\n      handleResume: (req, res) => this.handleResume(req, res),\n      handleStartSession: (req, res) => this.handleStartSession(req, res),\n      handleListConversations: (url, res) => this.handleListConversations(url, res),\n      handleConversationsCount: (url, res) => this.handleConversationsCount(url, res),\n      handleGetConversation: (id, url, res, ifNoneMatch) =>\n        this.handleGetConversation(id, url, res, ifNoneMatch),\n      handleSearch: (url, res) => this.handleSearch(url, res),\n      handleListProjects: (url, res) => handleListProjects(url, res),\n      handleGetPopularProjects: (url, res) => this.handleGetPopularProjects(url, res),\n      handlePairStart: (res) => this.handlePairStart(res),\n      handlePairExchange: (req, res) => this.handlePairExchange(req, res),\n      handleBrowse: (url, res) => this.handleBrowse(url, res),\n      handleMkdir: (req, res) => this.handleMkdir(req, res),\n      handleWsOpen: (ws) => {\n        this.wsHub.addClient(ws);\n        const sessions = this.sessionStore.list(this.ptyAttachedIds());\n        ws.send(JSON.stringify({ type: \"session_list\", sessions }));\n        if (this.cacheReady) {\n          ws.send(JSON.stringify({ type: \"cache_ready\" }));\n        }\n      },\n      handleWsMessage: async (ws, raw) => {\n        try {\n          const msg = JSON.parse(String(raw));\n          if (msg.type === \"register\" && typeof msg.clientId === \"string\") {\n            const oldClientId = this.wsToClientId.get(ws);\n            if (oldClientId) this.clientIdToWs.delete(oldClientId);\n            this.clientIdToWs.set(msg.clientId, ws);\n            this.wsToClientId.set(ws, msg.clientId);\n          }\n          if (msg.type === \"subscribe_session\" && typeof msg.sessionId === \"string\") {\n            this.addSessionSubscriber(msg.sessionId, ws);\n            if (this.ptyManager.hasSession(msg.sessionId)) {\n              const lines = await this.ptyManager.getOutputLines(msg.sessionId, 200);\n              ws.send(JSON.stringify({ type: \"terminal_replay\", sessionId: msg.sessionId, lines }));\n            }\n          }\n          if (msg.type === \"hold_session\" && typeof msg.sessionId === \"string\") {\n            this.startGraceTimer(msg.sessionId, 0);\n          }\n        } catch {\n          // malformed JSON, ignore\n        }\n      },\n      handleWsClose: (ws) => {\n        const clientId = this.wsToClientId.get(ws);\n        if (clientId) {\n          this.clientIdToWs.delete(clientId);\n          this.wsToClientId.delete(ws);\n        }\n        for (const [sessionId, subscribers] of this.sessionSubscribers) {\n          subscribers.delete(ws);\n          if (subscribers.size === 0) {\n            this.startGraceTimer(sessionId, this.ptyGracePeriodMs);\n          }\n        }\n      },\n      agentClient,\n      conversationWriter,\n      agentConfig,\n    };\n\n    this.httpServer = createServer((req, res) => this.handleRequest(req, res));\n\n    // Defense-in-depth against unhandled socket errors that would otherwise\n    // crash the process with \"Unhandled 'error' event\":\n    //\n    // 1. 'clientError' fires when the http parser rejects a request (bad\n    //    headers, etc.). Default behavior destroys the socket, but a stale\n    //    handler could leak. We respond 400 (or destroy on any I/O error)\n    //    and never throw.\n    this.httpServer.on(\"clientError\", (_err, socket) => {\n      try {\n        socket.end(\"HTTP/1.1 400 Bad Request\\r\\nConnection: close\\r\\n\\r\\n\");\n      } catch {\n        socket.destroy();\n      }\n    });\n    // 2. Listener-level 'error' (port in use, etc.) — log instead of crashing.\n    this.httpServer.on(\"error\", (err) => {\n      const e = err as NodeJS.ErrnoException;\n      // While bindWithRetry is retrying, each failed listen() attempt also\n      // reaches this persistent handler. That EADDRINUSE is the expected,\n      // self-healing kickstart race — log it at debug, not warn, so boots stay\n      // quiet. Genuine runtime errors (and the final give-up) still warn.\n      if (this.binding && e.code === \"EADDRINUSE\") {\n        this.log.debug?.(`httpServer error during bind: ${err.message}`, {\n          error: err.message,\n          event: \"http.server_error\",\n        });\n        return;\n      }\n      this.log.warn(`httpServer error: ${err.message}`, {\n        error: err.message,\n        event: \"http.server_error\",\n      });\n    });\n    // 3. The WebSocket upgrade race that caused real prod crashes:\n    //    @hono/node-ws registers an 'upgrade' listener that does `await\n    //    app.request(...)` before promoting the socket. If the peer RSTs\n    //    during the await, the raw net.Socket emits 'error' with no listener,\n    //    crashing the process. Registering our own 'upgrade' listener FIRST\n    //    attaches a noop 'error' handler to the raw socket so the upgrade\n    //    abort becomes a harmless event. Node fires upgrade listeners in\n    //    registration order, so this must be wired before injectWebSocket().\n    this.httpServer.on(\"upgrade\", (_req, socket) => {\n      socket.on(\"error\", () => {\n        // Intentional: a RST during the WS handshake is normal client\n        // behavior (network blip, peer kill). The socket is already torn\n        // down; we just need to absorb the event so Node doesn't crash.\n      });\n    });\n\n    // createNodeWebSocket needs the real Hono app (it calls app.request() on\n    // upgrade). Resolve the chicken-and-egg by creating the app without WS\n    // routes first, handing it to createNodeWebSocket, then mounting the WS\n    // route onto the same app instance.\n    this.honoApp = createHonoApp(apiDeps);\n    const { injectWebSocket, upgradeWebSocket } = createNodeWebSocket({ app: this.honoApp });\n    this.honoApp.route(\"/\", createWsRoutes(apiDeps, upgradeWebSocket));\n    injectWebSocket(this.httpServer);\n  }\n\n  // ─── PTY Grace Timer ────────────────────────────────────────────\n\n  private ptyAttachedIds(): Set<string> {\n    return new Set(this.ptyManager.listSessions().map((s) => s.id));\n  }\n\n  /**\n   * Send a session_list to only the client that triggered this HTTP request\n   * (identified by X-Client-Id header → registered WS socket). Falls back to\n   * a full broadcast if no match exists (old clients, or no WS registered yet).\n   */\n  private broadcastOrUnicastSessionList(req: IncomingMessage): void {\n    const clientId = req.headers[\"x-client-id\"];\n    const ws = typeof clientId === \"string\" ? this.clientIdToWs.get(clientId) : undefined;\n    const payload = {\n      type: \"session_list\" as const,\n      sessions: this.sessionStore.list(this.ptyAttachedIds()),\n    };\n    if (ws) {\n      this.wsHub.unicast(ws, payload);\n    } else {\n      this.wsHub.broadcast(payload);\n    }\n  }\n\n  private addSessionSubscriber(sessionId: string, ws: WebSocket): void {\n    let subs = this.sessionSubscribers.get(sessionId);\n    if (!subs) {\n      subs = new Set();\n      this.sessionSubscribers.set(sessionId, subs);\n    }\n    subs.add(ws);\n    // Cancel any pending grace timer since someone is now watching\n    const existing = this.ptyGraceTimers.get(sessionId);\n    if (existing) {\n      clearTimeout(existing);\n      this.ptyGraceTimers.delete(sessionId);\n    }\n  }\n\n  private startGraceTimer(sessionId: string, delayMs: number): void {\n    const existing = this.ptyGraceTimers.get(sessionId);\n    if (existing) clearTimeout(existing);\n\n    const timer = setTimeout(() => {\n      this.ptyGraceTimers.delete(sessionId);\n      if (this.ptyManager.hasSession(sessionId)) {\n        // Never interrupt a session mid-response. A `running` PTY is actively\n        // streaming a Claude turn that hasn't flushed to the JSONL yet; killing\n        // it (SIGINT) would lose the in-flight answer. Re-arm the grace timer\n        // and re-check after another grace period — it only becomes eligible\n        // for hold once it settles back to waiting_input/idle.\n        const resp = this.sessionStore.get(sessionId, this.ptyAttachedIds());\n        if (resp?.status === \"running\") {\n          this.log.info(\n            `[grace] session ${sessionId} still running, deferring hold`,\n            { sessionId, event: \"pty.grace_defer\" },\n            \"pino\",\n          );\n          this.startGraceTimer(sessionId, delayMs);\n          return;\n        }\n        this.sessionSubscribers.delete(sessionId);\n        this.log.info(\n          `[grace] killing idle PTY for ${sessionId}`,\n          { sessionId, event: \"pty.grace_kill\" },\n          \"pino\",\n        );\n        this.ptyManager.putOnHold(sessionId);\n        const held = this.sessionStore.get(sessionId, this.ptyAttachedIds());\n        if (held) this.wsHub.broadcast({ type: \"session_update\", session: held });\n      } else {\n        this.sessionSubscribers.delete(sessionId);\n      }\n    }, delayMs);\n\n    this.ptyGraceTimers.set(sessionId, timer);\n  }\n\n  get port(): number {\n    const addr = this.httpServer.address();\n    return typeof addr === \"object\" && addr ? addr.port : 0;\n  }\n\n  async listen(port: number, opts?: { awaitReady?: boolean }): Promise<void> {\n    // DB is still used for upload records and other non-session purposes.\n    // Session state is no longer persisted to DB.\n    const dbConfig = this.disableDb ? null : getDbConfig();\n    if (dbConfig) {\n      this.dbPool = await createPool(dbConfig);\n      this.dbInstanceId = dbConfig.instanceId;\n      const masked = maskConnectionString(dbConfig.connectionString);\n      this.log.info(`Database enabled: ${masked}`, {\n        connectionString: masked,\n        instanceId: dbConfig.instanceId,\n      });\n      this.log.info(`Instance ID: ${dbConfig.instanceId}`, { instanceId: dbConfig.instanceId });\n      await runMigrations(this.dbPool);\n      this.log.info(\"Database migrations applied\", { event: \"db.migrations_applied\" });\n    }\n\n    // Bind with bounded retry. `launchctl kickstart -k` kills the old prod\n    // instance and relaunches immediately; even after the old process has\n    // exited cleanly, the kernel can hold :PORT in a transient teardown state\n    // for a beat, so the fresh instance's first bind can race into EADDRINUSE.\n    // Retrying with a short backoff absorbs that window instead of leaving the\n    // process listener-less (the old behavior: the listener-level 'error'\n    // handler logged EADDRINUSE once and gave up, failing the deploy\n    // healthcheck). On the final attempt we let the error propagate so a\n    // genuinely occupied port still surfaces loudly.\n    await this.bindWithRetry(port);\n\n    const warmUp = new Promise<void>((resolveWarm) => {\n      {\n        this.log.info(`Streamer server listening on port ${port}`, {\n          port,\n          event: \"server.listening\",\n        });\n        try {\n          this.cache = ConversationCache.open(\n            join(this.cacheDir, \"cache.db\"),\n            this.tailSize,\n            undefined,\n            {\n              filterAgentConversations: !this.includeAgents,\n              agentEntrypoints: this.agentEntrypoints,\n              onAgentFileDetected: (fp) => this.fileWatcher.unwatch(fp),\n            },\n          );\n          if (!this.includeAgents) {\n            const result = pruneAgentConversations(this.cache);\n            if (result.pruned > 0 || result.missing > 0) {\n              this.log.info(\n                `Agent conversation prune: scanned=${result.scanned} pruned=${result.pruned} missing=${result.missing}`,\n                { ...result, event: \"cache.prune_agents\" },\n              );\n            }\n          }\n          const db = this.cache.getDatabase();\n          this.projectsRepo = new ProjectsRepository(db);\n          this.conversationsRepo = new ConversationsRepository(this.cache);\n          this.sessionsRepo = new SessionsRepository(this.sessionStore);\n          this.cacheMetadataRepo = new CacheMetadataRepository(db);\n          // Watch the active profile dirs (or ~/.claude/projects as fallback) so\n          // new JSONL files created after startup are discovered and the scanner\n          // and cache are invalidated without a restart.\n          if (this.scanProfiles && this.scanProfiles.length > 0) {\n            for (const profile of this.scanProfiles) {\n              if (profile.enabled) {\n                this.fileWatcher.watchDirectory(join(profile.configDir, \"projects\"));\n              }\n            }\n          } else {\n            this.fileWatcher.watchDirectory(join(homedir(), \".claude\", \"projects\"));\n          }\n        } catch (err) {\n          const message = err instanceof Error ? err.message : String(err);\n          this.log.warn(`ConversationCache failed to open (running without cache): ${message}`, {\n            error: message,\n            event: \"cache.open_failed\",\n          });\n        }\n        // Use a dedicated scanner for warm-up, independent of this.scanner, so\n        // that onConversationChanged invalidations during the scan cannot cause\n        // getScanner() to restart indefinitely and leave the warm-up stuck.\n        const warmupScanner = new ConversationScanner();\n        this.allScanners.add(warmupScanner);\n        const warmupStatCache = this.buildStatCache(null);\n        // Throttle the per-file onProgress firings to ~one frame per whole\n        // percent (plus the final tick) so a large scan doesn't flood every\n        // WebSocket client with thousands of scan_progress messages.\n        const shouldEmitProgress = createScanProgressThrottle();\n        const scanOpts = {\n          ...(this.scanProfiles ? { profiles: this.scanProfiles } : {}),\n          ...this.codexScanOpts(),\n          ...(warmupStatCache ? { statCache: warmupStatCache } : {}),\n        };\n        warmupScanner\n          .scan({\n            ...scanOpts,\n            onProgress: (scanned, total) => {\n              if (shouldEmitProgress(scanned, total)) {\n                this.wsHub.broadcast({ type: \"scan_progress\", scanned, total });\n              }\n            },\n          })\n          .then(async () => {\n            if (!this.cache) return;\n            const metas = [...warmupScanner.getMetadataCache().values()] as any[];\n            // upsertFromScannerMeta returns IDs of rows actually upserted\n            // (excluding agent JSONLs skipped when includeAgents=false).\n            // Warming tails for filtered-out IDs would hit the\n            // conversation_tail.conversation_id → conversation_meta(id) FK\n            // and abort the whole warm-up before pruneGhostFiles can run.\n            const upsertedIds = new Set(this.cache.upsertFromScannerMeta(metas));\n            const tailTargets: Array<{ id: string; filePath: string }> = [];\n            for (const m of metas) {\n              if (!m.filePath) continue;\n              const id =\n                m.sessionId ||\n                m.id\n                  ?.split(\"/\")\n                  .pop()\n                  ?.replace(/\\.jsonl$/, \"\") ||\n                m.id;\n              if (upsertedIds.has(id)) tailTargets.push({ id, filePath: m.filePath });\n            }\n            const BATCH = 50;\n            let tailFailures = 0;\n            for (let i = 0; i < tailTargets.length; i += BATCH) {\n              const batch = tailTargets.slice(i, i + BATCH);\n              for (const t of batch) {\n                try {\n                  this.cache.populateTailFromFile(t.id, t.filePath);\n                } catch (err) {\n                  // Benign race: the live ConversationWatcher runs during\n                  // warm-up, so an active session writing/deleting its JSONL\n                  // fires invalidateByFilePath() → invalidate(id), which deletes\n                  // the conversation_meta row we just upserted. The follow-up\n                  // tail insert then trips the conversation_tail → conversation_meta\n                  // FK. Skipping is correct — the row was invalidated and gets\n                  // re-upserted on the next scan, and pruneGhostFiles (below)\n                  // reconciles any file that was genuinely deleted. We must not\n                  // throw here or pruneGhostFiles never runs. Logged at info (not\n                  // debug) so the failing id+reason is visible by default.\n                  tailFailures += 1;\n                  this.log.info(\n                    `populateTailFromFile skipped for ${t.id}: ${\n                      err instanceof Error ? err.message : String(err)\n                    }`,\n                    { id: t.id, event: \"cache.warmup_tail_failed\" },\n                  );\n                }\n              }\n              await new Promise<void>((r) => setImmediate(r));\n            }\n            if (tailFailures > 0) {\n              this.log.warn(\n                `Warm-up: ${tailFailures}/${tailTargets.length} tail populates skipped (see info logs for ids)`,\n                {\n                  failures: tailFailures,\n                  total: tailTargets.length,\n                  event: \"cache.warmup_tail_failures\",\n                },\n              );\n            }\n            const pruned = this.cache.pruneGhostFiles();\n            this.log.info(`Startup ghost prune: removed ${pruned.length} stale cache rows`, {\n              count: pruned.length,\n              event: \"cache.prune_ghosts\",\n            });\n          })\n          .catch((err) => {\n            const message = err instanceof Error ? err.message : String(err);\n            this.log.warn(`Startup cache warm-up failed: ${message}`, {\n              error: message,\n              event: \"cache.warmup_failed\",\n            });\n          })\n          .finally(() => {\n            // Adopt the warm-up scan as the live scanner so the first real\n            // request reuses it instead of paying for a second full scan.\n            // Guard: only adopt if nothing else already owns the slot — a\n            // request-path getScanner() that built its own scanner during\n            // warm-up, or an onConversationChanged that nulled both fields.\n            // If invalidation fires after we adopt, the next request rescans\n            // (pre-existing fallback); the per-request refreshFile path\n            // reconciles single-file drift.\n            if (!this.scannerReady && !this.scanner) {\n              this.scanner = warmupScanner;\n              this.scannerReady = Promise.resolve();\n            }\n            this.cacheReady = true;\n            this.wsHub.broadcast({ type: \"cache_ready\" });\n            resolveWarm();\n          });\n      }\n    });\n    if (opts?.awaitReady) await warmUp;\n  }\n\n  // Bind the HTTP listener, retrying on a transient EADDRINUSE. See the call\n  // site in listen() for why the race exists (kickstart -k relaunch). Total\n  // worst case ≈ 6 × 500 ms = 3 s before the final attempt rethrows.\n  private async bindWithRetry(port: number, attempts = 6, delayMs = 500): Promise<void> {\n    this.binding = true;\n    try {\n      await this.bindWithRetryLoop(port, attempts, delayMs);\n    } finally {\n      this.binding = false;\n    }\n  }\n\n  private async bindWithRetryLoop(port: number, attempts: number, delayMs: number): Promise<void> {\n    for (let attempt = 1; attempt <= attempts; attempt++) {\n      try {\n        await new Promise<void>((resolve, reject) => {\n          const onError = (err: NodeJS.ErrnoException) => {\n            this.httpServer.removeListener(\"listening\", onListening);\n            reject(err);\n          };\n          const onListening = () => {\n            this.httpServer.removeListener(\"error\", onError);\n            resolve();\n          };\n          this.httpServer.once(\"error\", onError);\n          this.httpServer.once(\"listening\", onListening);\n          this.httpServer.listen(port);\n        });\n        return;\n      } catch (err) {\n        const e = err as NodeJS.ErrnoException;\n        if (e.code === \"EADDRINUSE\" && attempt === attempts) {\n          // Final attempt exhausted on a still-busy port: this is a genuine\n          // failure (not the self-healing kickstart race), so surface it once\n          // before rethrowing.\n          this.log.error(\n            `port ${port} still busy (EADDRINUSE) after ${attempts} attempts; giving up`,\n            { port, attempts, event: \"server.bind_failed\" },\n          );\n        }\n        if (e.code !== \"EADDRINUSE\" || attempt === attempts) throw err;\n        // Routine kickstart-relaunch race: log at debug (invisible by default)\n        // since bindWithRetry recovers on its own within the attempt budget.\n        this.log.debug?.(\n          `port ${port} busy (EADDRINUSE), retry ${attempt}/${attempts - 1} in ${delayMs}ms`,\n          { port, attempt, event: \"server.bind_retry\" },\n        );\n        await new Promise<void>((r) => setTimeout(r, delayMs));\n      }\n    }\n  }\n\n  async close(): Promise<void> {\n    for (const timer of this.ptyGraceTimers.values()) clearTimeout(timer);\n    this.ptyGraceTimers.clear();\n    this.markScannerStaleDebounced.cancel();\n    // Close all scanner SQLite connections before the cache so file handles are\n    // released on Windows (open handles block temp-dir deletion in tests).\n    for (const s of this.allScanners) s.close();\n    this.allScanners.clear();\n    this.scanner = null;\n    this.cache?.close();\n    this.ptyManager.dispose();\n    this.fileWatcher.dispose();\n    this.wsHub.dispose();\n    this.pairTokens.dispose();\n    if (this.dbPool) {\n      await this.dbPool.end();\n    }\n    // Force any sockets that survived wsHub.dispose() (e.g. a half-open\n    // connection mid-upgrade) to close, so httpServer.close()'s callback —\n    // which only fires once every connection drains — can't hang. Without\n    // this the old process keeps :PORT bound until launchd's SIGKILL, and the\n    // freshly-started instance hits EADDRINUSE. Guarded for Node < 18.2.\n    this.httpServer.closeAllConnections?.();\n    return new Promise((resolve) => {\n      // Belt-and-suspenders: never let process exit block forever on the\n      // listener close. The port is released the moment closeAllConnections()\n      // runs; the timeout only guards against an unforeseen lingering socket.\n      const timer = setTimeout(resolve, 2000);\n      this.httpServer.close(() => {\n        clearTimeout(timer);\n        resolve();\n      });\n    });\n  }\n\n  // ─── Request Router ────────────────────────────────────────────\n\n  private async handleRequest(req: IncomingMessage, res: ServerResponse): Promise<void> {\n    const host = req.headers.host ?? \"localhost\";\n    const webReq = new Request(`http://${host}${req.url ?? \"/\"}`, {\n      method: req.method ?? \"GET\",\n      headers: req.headers as Record<string, string>,\n    });\n    const honoRes = await this.honoApp.fetch(webReq, { incoming: req, outgoing: res });\n    if (honoRes.status !== ALREADY_HANDLED) {\n      await writeHonoResponse(honoRes, res);\n    }\n  }\n\n  // ─── Handlers ──────────────────────────────────────────────────\n\n  private handlePairStart(res: ServerResponse): void {\n    const minted = this.pairTokens.mint();\n    json(res, 200, {\n      token: minted.token,\n      expiresAt: minted.expiresAt,\n      expiresInSeconds: minted.expiresInSeconds,\n      publicUrl: this.publicUrl,\n    });\n  }\n\n  private async handlePairExchange(req: IncomingMessage, res: ServerResponse): Promise<void> {\n    const ct = req.headers[\"content-type\"] ?? \"\";\n    if (!String(ct).toLowerCase().includes(\"application/json\")) {\n      json(res, 415, { error: \"Content-Type: application/json required\" });\n      return;\n    }\n\n    const ip = req.socket.remoteAddress ?? \"unknown\";\n    if (!this.checkExchangeRateLimit(ip)) {\n      json(res, 429, { error: \"Too many pair exchange attempts; try again in a minute\" });\n      return;\n    }\n\n    let body: any;\n    try {\n      body = await readBody(req);\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Invalid body\";\n      json(res, 400, { error: message });\n      return;\n    }\n\n    const { token, clientPublicKey } = body ?? {};\n    if (typeof token !== \"string\" || typeof clientPublicKey !== \"string\") {\n      json(res, 400, { error: \"Missing token or clientPublicKey\" });\n      return;\n    }\n\n    const result = this.pairTokens.consume(token);\n    if (!result.ok) {\n      json(res, 401, { error: `Pair token ${result.reason}` });\n      return;\n    }\n\n    let sealed: ReturnType<typeof seal>;\n    try {\n      sealed = seal(this.apiKey, clientPublicKey);\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Invalid clientPublicKey\";\n      json(res, 400, { error: message });\n      return;\n    }\n\n    const { hostname } = require(\"os\");\n    const ts = new Date().toISOString();\n    this.log.info(`[pair] token exchanged from ${ip} at ${ts}`, {\n      event: \"pair.token_exchanged\",\n      ip,\n      ts,\n    });\n\n    json(res, 200, {\n      ciphertext: sealed.ciphertext,\n      nonce: sealed.nonce,\n      ephemeralPublicKey: sealed.ephemeralPublicKey,\n      publicUrl: this.publicUrl,\n      machineName: hostname(),\n    });\n  }\n\n  private rotateApiKey(): { newKey: string; persisted: boolean } {\n    const oldKey = this.apiKey;\n    const newKey = generateApiKey();\n    // Only persist to server.yaml when the key came from there.\n    // If --api-key was passed on the CLI, the flag wins on restart and\n    // would silently revert to the old key — so skip the write and let\n    // the caller know via the response.\n    const persisted = this.apiKeySource === \"config\";\n    if (persisted) setApiKey(newKey);\n    this.apiKey = newKey;\n    this.log.info(\"API key rotated\", {\n      event: \"auth.api_key_rotated\",\n      oldKeyMasked: `${oldKey.slice(0, 6)}…`,\n      newKeyMasked: `${newKey.slice(0, 6)}…`,\n      persisted,\n    });\n    return { newKey, persisted };\n  }\n\n  private checkRateLimit(\n    map: Map<string, number[]>,\n    key: string,\n    limit: number,\n    windowMs: number,\n  ): boolean {\n    const now = Date.now();\n    const arr = (map.get(key) ?? []).filter((t) => now - t < windowMs);\n    if (arr.length >= limit) {\n      map.set(key, arr);\n      return false;\n    }\n    arr.push(now);\n    map.set(key, arr);\n    // TTL-evict the entry once the window expires so the map doesn't grow unbounded.\n    setTimeout(() => {\n      const remaining = (map.get(key) ?? []).filter((t) => Date.now() - t < windowMs);\n      if (remaining.length === 0) map.delete(key);\n      else map.set(key, remaining);\n    }, windowMs);\n    return true;\n  }\n\n  private checkExchangeRateLimit(ip: string): boolean {\n    return this.checkRateLimit(this.exchangeAttempts, ip, 5, 60_000);\n  }\n\n  private checkSessionStartRateLimit(ip: string): boolean {\n    // 10 new sessions per minute per client IP\n    return this.checkRateLimit(this.sessionStartAttempts, ip, 10, 60_000);\n  }\n\n  private checkSessionInputRateLimit(sessionId: string): boolean {\n    // 500 keystrokes per minute per session\n    return this.checkRateLimit(this.sessionInputAttempts, sessionId, 500, 60_000);\n  }\n\n  private async handleListConversations(url: URL, res: ServerResponse): Promise<void> {\n    const limit = intParam(url, \"limit\", 50);\n    const offset = intParam(url, \"offset\", 0);\n    const sort = (url.searchParams.get(\"sort\") ?? \"recent\") as SortOrder;\n    const project = url.searchParams.get(\"project\") ?? undefined;\n    const providerFilter = url.searchParams.get(\"provider\") ?? undefined;\n    const bustCache = url.searchParams.get(\"refresh\") === \"1\";\n\n    if (bustCache) {\n      this.cache?.invalidate();\n      this.scanner = null;\n      this.scannerReady = null;\n    }\n\n    if (this.cache && !bustCache) {\n      const { conversations, total } = this.cache.listConversations({\n        project,\n        provider: providerFilter,\n        limit,\n        offset,\n      });\n      const adapted = conversations.map((c) => ({\n        id: c.id,\n        title: deriveProjectChatTitle({\n          title: c.title,\n          projectName: c.projectName,\n          projectPath: c.projectPath,\n          id: c.id,\n        }),\n        sessionName: undefined as string | undefined,\n        filePath: c.filePath,\n        projectPath: c.projectPath,\n        branch: c.branch ?? undefined,\n        account: c.account ?? undefined,\n        preview: c.preview ?? undefined,\n        messageCount: c.messageCount,\n        lastActivity: c.lastActivity,\n        firstMessage: c.firstMessage ? (JSON.parse(c.firstMessage) as unknown) : undefined,\n        lastMessage: c.lastMessage ? (JSON.parse(c.lastMessage) as unknown) : undefined,\n        model: c.model ?? undefined,\n        provider: c.provider ?? CLAUDE_CODE_PROVIDER,\n      }));\n      json(res, 200, { conversations: adapted, hasMore: offset + limit < total, offset, total });\n      return;\n    }\n\n    const scanner = await this.getScanner();\n    let metas = [...scanner.getMetadataCache().values()];\n    metas = applyIncludeFilter(metas, \"conversations\");\n    if (project) metas = applyProjectFilter(metas, project);\n    if (providerFilter)\n      metas = metas.filter((m) => (m.provider ?? CLAUDE_CODE_PROVIDER) === providerFilter);\n    metas = applySort(metas, sort);\n    const total = metas.length;\n    const page = applyPagination(metas, limit, offset);\n\n    const adapted = (page.items as ConversationMeta[]).map((c) => {\n      const id =\n        c.sessionId ||\n        c.id\n          .split(\"/\")\n          .pop()\n          ?.replace(/\\.jsonl$/, \"\") ||\n        c.id;\n      return {\n        id,\n        title: deriveProjectChatTitle({\n          title: c.sessionName,\n          projectName: c.projectName,\n          projectPath: c.projectPath,\n          id,\n        }),\n        sessionName: c.sessionName || undefined,\n        filePath: c.filePath,\n        projectPath: c.projectPath,\n        branch: c.gitBranch ?? undefined,\n        account: c.account,\n        preview: c.preview || undefined,\n        messageCount: c.messageCount,\n        lastActivity: c.timestamp,\n        firstMessage: c.firstMessage ?? undefined,\n        lastMessage: c.lastMessage ?? undefined,\n        model: c.model ?? undefined,\n        provider: (c as any).provider ?? CLAUDE_CODE_PROVIDER,\n      };\n    });\n    json(res, 200, { conversations: adapted, hasMore: offset + limit < total, offset, total });\n\n    if (this.cache && bustCache) {\n      try {\n        this.cache.upsertFromScannerMeta([...scanner.getMetadataCache().values()] as any[]);\n      } catch {\n        // Best-effort; response already sent\n      }\n    }\n  }\n\n  private async handleConversationsCount(url: URL, res: ServerResponse): Promise<void> {\n    const project = url.searchParams.get(\"project\") ?? undefined;\n    const providerFilter = url.searchParams.get(\"provider\") ?? undefined;\n    const bustCache = url.searchParams.get(\"refresh\") === \"1\";\n\n    // refresh=1 historically forced a full synchronous scan() to recount from\n    // disk. On a cold/empty index that scan walks every JSONL and blocks ~16s,\n    // tripping mobile's request timeout into a false \"unreachable\". Mirror the\n    // detail path's skipStaleRescan stance: serve the indexed/cached total\n    // immediately and reconcile from disk in the BACKGROUND so the count stays\n    // fast regardless of refresh.\n    if (this.cache) {\n      const { total } = this.cache.listConversations({\n        project,\n        provider: providerFilter,\n        limit: 0,\n        offset: 0,\n      });\n      json(res, 200, { total });\n      if (bustCache) this.refreshCountInBackground();\n      return;\n    }\n\n    const scanner = await this.getScanner(true);\n    let metas = [...scanner.getMetadataCache().values()];\n    metas = applyIncludeFilter(metas, \"conversations\");\n    if (project) metas = applyProjectFilter(metas, project);\n    if (providerFilter)\n      metas = metas.filter((m) => (m.provider ?? CLAUDE_CODE_PROVIDER) === providerFilter);\n    json(res, 200, { total: metas.length });\n  }\n\n  // Fire-and-forget full rescan that reconciles the SQLite cache from disk so a\n  // later count reflects new/removed conversations. Never awaited by the request\n  // path — refresh=1 returns the cached total synchronously and this catches up.\n  private refreshCountInBackground(): void {\n    void (async () => {\n      try {\n        const scanner = await this.getFreshScanner();\n        if (this.cache) {\n          this.cache.upsertFromScannerMeta([...scanner.getMetadataCache().values()] as any[]);\n        }\n      } catch (err) {\n        this.log.warn(\n          `Background count refresh failed: ${err instanceof Error ? err.message : String(err)}`,\n          { event: \"count.refresh_failed\" },\n        );\n      }\n    })();\n  }\n\n  private handleSessionsCount(res: ServerResponse): void {\n    json(res, 200, { total: this.sessionStore.list(this.ptyAttachedIds()).length });\n  }\n\n  private handleGetRecentSessions(url: URL, res: ServerResponse): void {\n    const limit = intParam(url, \"limit\", 20);\n    if (!this.cache) {\n      json(res, 200, { sessions: [], total: 0 });\n      return;\n    }\n    const { conversations } = this.cache.listConversations({ limit, offset: 0 });\n    // Items here are conversation cache rows, not live sessions in SessionStore.\n    // The `type` discriminator lets mobile route taps through /api/sessions/resume\n    // (which spawns a fresh PTY) instead of GET /api/sessions/:id (which 404s).\n    const sessions = conversations.map((c) => ({\n      type: \"conversation\" as const,\n      id: c.id,\n      status: \"idle\" as const,\n      ptyAttached: false,\n      projectId: c.projectId ?? undefined,\n      projectPath: c.projectPath ?? \"\",\n      projectName: c.projectName ?? \"\",\n      branch: c.branch ?? undefined,\n      lastOutput: \"\",\n      elapsedMs: 0,\n      promptCount: c.messageCount,\n      startedAt: c.lastActivity,\n      lastActivityAt: c.lastActivity,\n    }));\n    json(res, 200, { sessions, total: sessions.length });\n  }\n\n  private handleGetPopularProjects(url: URL, res: ServerResponse): void {\n    const limit = intParam(url, \"limit\", 20);\n    if (!this.cache) {\n      json(res, 200, { projects: [], total: 0 });\n      return;\n    }\n    const projects = this.cache.getPopularProjects(limit);\n    json(res, 200, { projects, total: projects.length });\n  }\n\n  private buildStatCache(\n    previousScanner: ConversationScanner | null,\n  ): Map<string, { stat: FileStatEntry; meta: ConversationMeta }> | undefined {\n    if (!this.cache) return undefined;\n    const dbStats = this.cache.getFileStats();\n    if (dbStats.size === 0) return undefined;\n    const metaByPath = new Map<string, ConversationMeta>();\n    if (previousScanner) {\n      for (const meta of previousScanner.getMetadataCache().values()) {\n        if (meta.filePath) metaByPath.set(meta.filePath, meta);\n      }\n    }\n    const statCache = new Map<string, { stat: FileStatEntry; meta: ConversationMeta }>();\n    for (const [filePath, stat] of dbStats) {\n      const meta = metaByPath.get(filePath);\n      if (meta) statCache.set(filePath, { stat, meta });\n    }\n    return statCache.size > 0 ? statCache : undefined;\n  }\n\n  // Returns the provider + codexRoots fragment to spread into every scan()/search() call.\n  // codexRoots=[] disables codex scanning (safe no-op per scanner contract).\n  private codexScanOpts() {\n    return {\n      providers: [CLAUDE_CODE_PROVIDER, CODEX_CLI_PROVIDER],\n      codexRoots: this.codexRoots,\n    };\n  }\n\n  // skipStaleRescan: when an indexed scanner already exists, return it directly\n  // even if scannerStale is set, leaving the flag untouched so the next\n  // list-level call still rescans. The single-conversation detail path passes\n  // this — its per-file refreshFile (in findConversationByUuid) already\n  // reconciles the one conversation being requested, so paying a full-tree\n  // rescan just because some OTHER file changed is the stall this avoids.\n  private async getScanner(skipStaleRescan = false): Promise<ConversationScanner> {\n    if (this.scannerReady) {\n      await this.scannerReady;\n      // onConversationChanged may have nulled this.scanner while we awaited —\n      // if so, fall through and create a fresh one.\n      if (this.scanner) {\n        if (skipStaleRescan) return this.scanner;\n        // If file events arrived while the scan was running, do one rescan now\n        // rather than serving a stale result. The stale flag is cleared first so\n        // any events during the rescan trigger another pass on the next call.\n        if (this.scannerStale) {\n          this.scannerStale = false;\n          this.scanner = null;\n          this.scannerReady = null;\n          return this.getScanner();\n        }\n        return this.scanner;\n      }\n    }\n    this.scannerStale = false;\n    const statCache = this.buildStatCache(this.scanner);\n    this.scanner = new ConversationScanner();\n    this.allScanners.add(this.scanner);\n    this.scannerReady = this.scanner.scan({\n      ...(this.scanProfiles ? { profiles: this.scanProfiles } : {}),\n      ...this.codexScanOpts(),\n      ...(statCache ? { statCache } : {}),\n    });\n    await this.scannerReady;\n    // Capture before returning — onConversationChanged could null this.scanner\n    // in the microtask between the await and the return.\n    const scanner = this.scanner;\n    if (!scanner) return this.getScanner();\n    return scanner;\n  }\n\n  private async getFreshScanner(): Promise<ConversationScanner> {\n    this.scanner = null;\n    this.scannerReady = null;\n    return this.getScanner();\n  }\n\n  private findJsonlPath(uuid: string): string | null {\n    const projectsDir = join(homedir(), \".claude\", \"projects\");\n    if (!existsSync(projectsDir)) return null;\n    const filename = `${uuid}.jsonl`;\n    for (const dir of readdirSync(projectsDir)) {\n      const fp = join(projectsDir, dir, filename);\n      if (existsSync(fp)) return fp;\n      const projectDir = join(projectsDir, dir);\n      try {\n        for (const sub of readdirSync(projectDir)) {\n          const subagentPath = join(projectDir, sub, \"subagents\", filename);\n          if (existsSync(subagentPath)) return subagentPath;\n        }\n      } catch {\n        // Not a directory or no access\n      }\n    }\n    return null;\n  }\n\n  private async readCwdFromJsonl(filePath: string): Promise<string | null> {\n    return new Promise((resolve) => {\n      const rl = createInterface({ input: createReadStream(filePath), crlfDelay: Infinity });\n      let found = false;\n      rl.on(\"line\", (line) => {\n        if (found) return;\n        try {\n          const entry = JSON.parse(line);\n          if (entry.cwd) {\n            found = true;\n            rl.close();\n            resolve(entry.cwd as string);\n          }\n        } catch {\n          // skip malformed lines\n        }\n      });\n      rl.on(\"close\", () => {\n        if (!found) resolve(null);\n      });\n      rl.on(\"error\", () => resolve(null));\n    });\n  }\n\n  private async findConversationByUuid(uuid: string): Promise<Conversation | null> {\n    // Cold-start fast path: until the warm-up scan has populated this.scanner\n    // (this.scannerReady is null), do NOT trigger a full scan to answer a\n    // single-conversation request — that scan walks every JSONL on disk and is\n    // the 20s+ stall that makes mobile abort. Resolve the file directly\n    // (findJsonlPath is an O(project-dirs) walk) and parse just that one file.\n    // The warm-up scan keeps running in the background; once it adopts the\n    // scanner, subsequent requests use the indexed hot path below.\n    if (!this.scannerReady && !this.scanProfiles) {\n      const filePath = this.findJsonlPath(uuid);\n      if (filePath) {\n        const account = this.cache?.getMetaById(uuid)?.account ?? undefined;\n        const coldScanner = this.scanner ?? new ConversationScanner();\n        const page = await coldScanner.parseSingleFilePage(filePath, account, {\n          limit: Number.MAX_SAFE_INTEGER,\n        });\n        if (page) return page.conversation;\n      }\n      // No JSONL on disk (or unparseable). Return null WITHOUT triggering a\n      // full scan — confirming not-found is not worth the 20s stall. The\n      // caller's cache-tail fallback / 404 self-heal handles it.\n      return null;\n    }\n\n    // Use the existing indexed scanner without honoring the global scannerStale\n    // full-rescan: the per-file refreshFile below reconciles the one\n    // conversation we care about, so a sibling file changing must not stall this\n    // single-conversation request behind a full-tree rescan.\n    const scanner = await this.getScanner(true);\n    const fromIndex = await scanner.getConversation(uuid);\n    if (fromIndex) {\n      // The scanner memoizes both its metadata index and parsed conversations\n      // for the server's lifetime. A conversation that grows after the initial\n      // scan (the chokidar watcher keeps the SQLite cache fresh, but never the\n      // scanner) keeps serving the startup snapshot here — so the detail/info\n      // view shows a stale message count + last activity that disagrees with\n      // the list view and with what --resume actually replays. If the JSONL on\n      // disk is newer than the snapshot, refresh just that one file's indexes\n      // (refreshFile evicts the stale parse and re-parses on the next read)\n      // rather than dropping and rebuilding the entire scanner.\n      if (fromIndex.filePath && this.isConversationSnapshotStale(fromIndex)) {\n        const refreshedMeta = await scanner.refreshFile(fromIndex.filePath);\n        // refreshFile returns null and drops the entry when the file no longer\n        // parses (deleted/emptied). In that case return null so the caller's\n        // ghost-prune + cache-tail fallback runs instead of serving the stale\n        // snapshot we already know is wrong.\n        if (!refreshedMeta) return null;\n        return (await scanner.getConversation(uuid)) ?? fromIndex;\n      }\n      return fromIndex;\n    }\n\n    if (this.scanProfiles) return null;\n\n    const filePath = this.findJsonlPath(uuid);\n    if (!filePath) return null;\n    this.scanner = null;\n    this.scannerReady = null;\n    const freshScanner = await this.getScanner();\n    return freshScanner.getConversation(uuid);\n  }\n\n  // True when the JSONL on disk is meaningfully newer than the scanned\n  // snapshot's last-activity timestamp — i.e. the file grew after the scan.\n  private isConversationSnapshotStale(conv: Conversation): boolean {\n    if (!conv.filePath) return false;\n    let mtimeMs: number | null = null;\n    try {\n      mtimeMs = statSync(conv.filePath).mtimeMs;\n    } catch {\n      // Stat failed (file moved/deleted mid-flight) — don't force a re-scan.\n      return false;\n    }\n    return isScannedSnapshotStale(conv.timestamp, mtimeMs);\n  }\n\n  private async handleGetConversation(\n    id: string,\n    url: URL,\n    res: ServerResponse,\n    ifNoneMatch?: string,\n  ): Promise<void> {\n    // Try the scanner first (has full content including tool_use blocks).\n    // Fall back to the cache tail only when the scanner can't find the file —\n    // e.g. a conversation that existed in a previous run but whose JSONL was deleted.\n    const conversation = await this.findConversationByUuid(id);\n\n    if (!conversation && this.cache) {\n      // Only `before_index` indicates the client is paginating backward (asking\n      // for messages older than a cursor) — `msg_limit` is just page size and is\n      // sent on the first page too. The tail fallback should serve any first-page\n      // request when the JSONL is missing, regardless of msg_limit.\n      const isFirstLoad = !url.searchParams.has(\"before_index\");\n      if (isFirstLoad) {\n        const tail = this.cache.getConversationTail(id);\n        if (tail && tail.messages.length > 0) {\n          const cachedMeta = this.cache.getMetaById(id);\n          const cachedProvider = cachedMeta?.provider ?? CLAUDE_CODE_PROVIDER;\n          const availability = classifyResumability(cachedMeta?.projectPath);\n          const messagesPayload = tail.messages.map((m, idx) => ({\n            message_index: idx,\n            role: m.role,\n            timestamp: m.timestamp,\n            text: m.text,\n            tool_calls: [] as unknown[],\n            content: (m.content ?? []).filter((b: any) => b.type !== \"text\"),\n          }));\n          json(res, 200, {\n            meta: {\n              id,\n              profile_id: cachedMeta?.account ?? undefined,\n              project_name: cachedMeta?.projectName ?? undefined,\n              project_path: cachedMeta?.projectPath ?? undefined,\n              file_path: cachedMeta?.filePath ?? undefined,\n              last_updated_at: cachedMeta?.lastActivity ?? undefined,\n              message_count: cachedMeta?.messageCount ?? undefined,\n              provider: cachedProvider,\n              resumable: isProviderResumable(cachedProvider, availability.resumable),\n              ...(availability.unavailable_reason && {\n                unavailable_reason: availability.unavailable_reason,\n              }),\n            },\n            messages: messagesPayload,\n            message_pagination: {\n              total: tail.tailSize,\n              before_index: tail.tailSize,\n              from_index: 0,\n              has_more_older: false,\n              next_before_index: null,\n            },\n          });\n          return;\n        }\n      }\n    }\n\n    if (!conversation) {\n      // Self-heal: the row is a ghost (JSONL gone, no usable tail). Drop it so\n      // the next list refresh doesn't keep offering this id to clients.\n      this.cache?.invalidate(id);\n      json(res, 404, { error: \"Conversation not found\", code: \"not_found\" });\n      return;\n    }\n\n    // Compute the conditional-fetch validator from the RESOLVED conversation —\n    // findConversationByUuid has already done its staleness refresh above, so\n    // these fields reflect the same state the body would. Computing it from a\n    // pre-refresh snapshot would let us hand out a 304 against stale data.\n    const etagSource = conversation as unknown as {\n      filePath: string;\n      messageCount: number;\n      timestamp: string;\n    };\n    const etag = computeConversationEtag({\n      filePath: etagSource.filePath,\n      messageCount: etagSource.messageCount,\n      timestamp: etagSource.timestamp,\n    });\n\n    // Only the first page (\"is the conversation as a whole still current?\")\n    // participates in the freshness check. Older pages are immutable history —\n    // a back-page request (before_index set) always returns its 200 body, never\n    // a 304, even when the client echoes a matching If-None-Match.\n    const isFirstPage = !url.searchParams.has(\"before_index\");\n    if (isFirstPage && ifNoneMatch && ifNoneMatch === etag) {\n      // This is a direct-`ServerResponse` write, so the Hono CORS middleware's\n      // headers don't reach it — set the expose header here so a cross-origin\n      // client can read the validator off the 304 too.\n      res.writeHead(304, { ETag: etag, \"Access-Control-Expose-Headers\": \"ETag\" });\n      res.end();\n      return;\n    }\n\n    const filtered = conversation.messages;\n    const total = filtered.length;\n\n    const usePaging = url.searchParams.has(\"msg_limit\") || url.searchParams.has(\"before_index\");\n\n    let slice = filtered;\n    let fromIdx = 0;\n    let messagePagination: Record<string, unknown> | undefined;\n\n    if (usePaging) {\n      const limit = Math.min(Math.max(intParam(url, \"msg_limit\", 80), 1), 500);\n      let beforeIndex = total;\n      if (url.searchParams.has(\"before_index\")) {\n        beforeIndex = intParam(url, \"before_index\", total);\n        beforeIndex = Math.min(Math.max(beforeIndex, 0), total);\n      }\n      // Only consult the scanner's paged reader when it's already warm. On the\n      // cold path `conversation` came from the single-file fast path and holds\n      // every message in memory, so slice it locally — calling getScanner()\n      // here would trigger the full scan the fast path exists to avoid. Pass\n      // skipStaleRescan: this is the same single-conversation detail path, whose\n      // refreshFile already reconciled the one file we page here, so a sibling\n      // file's stale flag must not stall this read behind a full-tree rescan.\n      const pagedScanner = this.scannerReady\n        ? ((await this.getScanner(true)) as unknown as {\n            getConversationPage?: (\n              id: string,\n              options: { beforeIndex: number; limit: number },\n            ) => Promise<{ messages: typeof filtered; total: number; fromIndex: number } | null>;\n          })\n        : null;\n      const page =\n        pagedScanner && typeof pagedScanner.getConversationPage === \"function\"\n          ? await pagedScanner.getConversationPage(id, { beforeIndex, limit })\n          : null;\n      const start = page?.fromIndex ?? Math.max(0, beforeIndex - limit);\n      slice = page?.messages ?? filtered.slice(start, beforeIndex);\n      fromIdx = start;\n      messagePagination = {\n        total: page?.total ?? total,\n        before_index: beforeIndex,\n        from_index: start,\n        has_more_older: start > 0,\n        next_before_index: start > 0 ? start : null,\n      };\n    }\n\n    const messagesPayload = slice.map((m: any, localIdx: number) => {\n      const content: unknown[] = [];\n      if (m.isThinking) {\n        content.push({\n          type: \"thinking\",\n          thinking: m.thinkingContent ?? \"\",\n          signature: m.thinkingSignature,\n        });\n      }\n      for (const b of m.metadata?.toolUseBlocks ?? []) {\n        content.push({ type: \"tool_use\", id: b.id, name: b.name, input: b.input });\n      }\n      for (const r of m.metadata?.toolResults ?? []) {\n        content.push({\n          type: \"tool_result\",\n          tool_use_id: r.toolUseId,\n          content: JSON.stringify(r.content),\n          is_error: r.isError ?? false,\n        });\n      }\n      return {\n        uuid: m.uuid ?? null,\n        message_index: fromIdx + localIdx,\n        role: m.role,\n        timestamp: m.timestamp,\n        text: m.text,\n        tool_calls: m.metadata?.toolUses ?? [],\n        has_images: m.hasImages ?? false,\n        parent_uuid: m.parentUuid ?? null,\n        permission_mode: m.permissionMode ?? null,\n        is_sidechain: m.isSidechain ?? false,\n        is_tool_result: m.isToolResult ?? false,\n        attachment: m.attachment ?? null,\n        content,\n      };\n    });\n\n    const conv = conversation as any;\n    const cachedConvMeta = this.cache?.getMetaById(id);\n    const convProvider: typeof CLAUDE_CODE_PROVIDER | typeof CODEX_CLI_PROVIDER =\n      conv.provider ?? cachedConvMeta?.provider ?? CLAUDE_CODE_PROVIDER;\n    const availability = classifyResumability(conv.projectPath);\n    const body: Record<string, unknown> = {\n      meta: {\n        id,\n        profile_id: conv.account,\n        project_name: conv.projectName,\n        project_path: conv.projectPath,\n        file_path: conv.filePath,\n        last_updated_at: conv.timestamp,\n        message_count: conv.messageCount,\n        last_prompt: conv.lastPrompt ?? undefined,\n        provider: convProvider,\n        resumable: isProviderResumable(convProvider, availability.resumable),\n        ...(availability.unavailable_reason && {\n          unavailable_reason: availability.unavailable_reason,\n        }),\n      },\n      messages: messagesPayload,\n    };\n    if (messagePagination) body.message_pagination = messagePagination;\n    if (conv.turnDurations?.length) {\n      body.turn_durations = conv.turnDurations.map((d: any) => ({\n        duration_ms: d.durationMs,\n        message_count: d.messageCount,\n        uuid: d.uuid,\n      }));\n    }\n    // Always expose the ETag on the 200 so the client can store it and send it\n    // back as If-None-Match next time. Old clients ignore the header. This is a\n    // direct-`ServerResponse` write that bypasses the Hono CORS middleware, so\n    // the expose header is set here too — without it a cross-origin client\n    // can't read ETag.\n    res.writeHead(200, {\n      \"Content-Type\": \"application/json\",\n      ETag: etag,\n      \"Access-Control-Expose-Headers\": \"ETag\",\n    });\n    res.end(JSON.stringify(body));\n  }\n\n  private async handleSearch(url: URL, res: ServerResponse): Promise<void> {\n    const q = url.searchParams.get(\"q\") ?? \"\";\n    if (!q) {\n      json(res, 400, { error: \"Missing query parameter: q\" });\n      return;\n    }\n\n    const limit = intParam(url, \"limit\", 50);\n    const scanner = await this.getScanner();\n    const results = await search(\n      q,\n      {\n        limit,\n        include: \"conversations\",\n        ...(this.scanProfiles ? { profiles: this.scanProfiles } : {}),\n        ...this.codexScanOpts(),\n      },\n      scanner,\n    );\n    const adapted = results.map((r: any) => ({\n      id:\n        r.meta.id\n          .split(\"/\")\n          .pop()\n          ?.replace(/\\.jsonl$/, \"\") || r.meta.id,\n      title: r.meta.projectName,\n      sessionName: r.meta.sessionName || undefined,\n      filePath: r.meta.filePath,\n      projectPath: r.meta.projectPath,\n      branch: r.meta.gitBranch ?? undefined,\n      account: r.meta.account,\n      preview: r.meta.preview || undefined,\n      messageCount: r.meta.messageCount,\n      lastActivity: r.meta.timestamp,\n      firstMessage: r.meta.firstMessage ?? undefined,\n      lastMessage: r.meta.lastMessage ?? undefined,\n      provider: r.meta.provider ?? CLAUDE_CODE_PROVIDER,\n    }));\n    json(res, 200, {\n      conversations: adapted,\n      hasMore: false,\n      offset: 0,\n      total: adapted.length,\n    });\n  }\n\n  private async handleListSessions(url: URL, res: ServerResponse): Promise<void> {\n    const DISCOVERY_TTL_MS = 15_000;\n    const now = Date.now();\n\n    if (!this.discoveryCache || now - this.discoveryCache.fetchedAt >= DISCOVERY_TTL_MS) {\n      try {\n        const discovered = await discoverClaudeProcesses();\n        this.sessionStore.setDiscovered(discovered);\n        this.discoveryCache = { entries: discovered, fetchedAt: now };\n      } catch {\n        // Discovery is best-effort\n      }\n    }\n\n    // Backwards compat: a bare GET /api/sessions returns the legacy plain\n    // array. Any pagination param switches to the new envelope.\n    const hasPaginationParams =\n      url.searchParams.has(\"limit\") ||\n      url.searchParams.has(\"cursor\") ||\n      url.searchParams.has(\"sortBy\") ||\n      url.searchParams.has(\"order\") ||\n      url.searchParams.has(\"status\");\n\n    if (!hasPaginationParams) {\n      json(res, 200, this.sessionStore.list(this.ptyAttachedIds()));\n      return;\n    }\n\n    const parsed = parseSessionListQuery(url);\n    if (\"error\" in parsed) {\n      json(res, 400, { error: parsed.error });\n      return;\n    }\n\n    try {\n      const page = this.sessionStore.paginate(this.ptyAttachedIds(), parsed.query);\n      json(res, 200, page);\n    } catch (err) {\n      if (err instanceof Error && err.message === \"INVALID_CURSOR\") {\n        json(res, 400, { error: \"Invalid cursor\" });\n        return;\n      }\n      throw err;\n    }\n  }\n\n  private handleGetSession(sessionId: string, res: ServerResponse): void {\n    const session = this.sessionStore.get(sessionId, this.ptyAttachedIds());\n    if (session) {\n      if (!existsSync(session.projectPath)) {\n        session.failureReason = `Project directory not found: ${session.projectPath}`;\n      }\n      json(res, 200, session);\n      return;\n    }\n    // Fall back to the conversation cache: older mobile builds tap recents\n    // entries via GET /api/sessions/:id even though those IDs are conversation\n    // UUIDs, not live sessions. Returning a resumable shape (status=on_hold)\n    // lets the mobile open flow proceed to /api/sessions/resume.\n    const conversation = this.cache?.getMetaById(sessionId);\n    if (conversation) {\n      json(res, 200, conversationToResumableSession(conversation));\n      return;\n    }\n    json(res, 404, { error: \"Session not found\" });\n  }\n\n  private async handleResume(req: IncomingMessage, res: ServerResponse): Promise<void> {\n    this.discoveryCache = null;\n    const body = await readBody(req);\n    // Accept both sessionId (new) and conversationId (legacy alias)\n    const sessionId: string | undefined = body.sessionId ?? body.conversationId;\n\n    if (!sessionId) {\n      json(res, 400, { error: \"Missing sessionId\" });\n      return;\n    }\n\n    // If a PTY is already running for this session, return it immediately\n    if (this.ptyManager.hasSession(sessionId)) {\n      const resp = this.sessionStore.get(sessionId, this.ptyAttachedIds());\n      if (resp) {\n        json(res, 200, resp);\n        return;\n      }\n    }\n\n    // Authoritative cwd comes from the JSONL itself — the file Claude looks\n    // up by filename when processing --resume. The scanner index can return a\n    // stale or wrong path (e.g. …/tb-mobile/android vs …/tb-mobile), so we\n    // read the first cwd field directly, mirroring tb-scanner/src/parser.ts.\n    const jsonlPath = this.findJsonlPath(sessionId);\n    const jsonlCwd = jsonlPath ? await this.readCwdFromJsonl(jsonlPath) : null;\n\n    const conv = await this.findConversationByUuid(sessionId);\n    const projectPath: string = jsonlCwd ?? (conv as any)?.projectPath;\n    if (!projectPath) {\n      if (!conv && !jsonlPath) {\n        json(res, 404, { error: \"Conversation not found\" });\n        return;\n      }\n      json(res, 400, { error: \"Could not determine project path\" });\n      return;\n    }\n\n    const session = await this.ptyManager.start(sessionId, {\n      projectPath,\n      projectName: body.projectName,\n      branch: body.branch,\n    });\n\n    this.sessionStore.addManaged(session);\n\n    // Watch the conversation's JSONL file for structured events\n    void this.watchConversationFile(sessionId);\n\n    const resp = this.sessionStore.get(session.id, this.ptyAttachedIds());\n    this.broadcastOrUnicastSessionList(req);\n\n    json(res, 201, resp ?? session);\n\n    // Enrich session metadata and update DB in background (fire-and-forget).\n    // The conversation history is already in the JSONL; DB writes are\n    // bookkeeping that can happen asynchronously without blocking the response.\n    this.enrichResumedSessionAsync(sessionId, projectPath, conv);\n  }\n\n  private enrichResumedSessionAsync(sessionId: string, projectPath: string, conv: any): void {\n    try {\n      const session = this.sessionStore.get(sessionId, this.ptyAttachedIds());\n      if (!session) return;\n\n      if (conv) {\n        session.sessionName = conv.sessionName ?? undefined;\n        session.messageCount = conv.messageCount ?? 0;\n        session.account = conv.account ?? undefined;\n        session.filePath = conv.filePath ?? undefined;\n      }\n\n      if (!this.cache || !this.projectsRepo || !this.conversationsRepo) return;\n\n      // Single SQLite read covers model, preview, timestamps, and projectId —\n      // no scanner round-trip needed; these fields are already cached.\n      const cached = this.cache.getMetaById(sessionId);\n      if (cached) {\n        session.model = cached.model ?? undefined;\n        session.preview = cached.preview ?? undefined;\n        const first = cached.firstMessage ? JSON.parse(cached.firstMessage as string) : null;\n        const last = cached.lastMessage ? JSON.parse(cached.lastMessage as string) : null;\n        session.firstMessageText = first?.text ?? undefined;\n        session.firstMessageAt = first?.timestamp\n          ? new Date(first.timestamp).toISOString()\n          : undefined;\n        session.lastMessageText = last?.text ?? undefined;\n        session.lastMessageAt = last?.timestamp\n          ? new Date(last.timestamp).toISOString()\n          : undefined;\n      }\n\n      let resolvedProjectId: string | null = cached?.projectId ?? null;\n      if (!resolvedProjectId) {\n        const project = this.projectsRepo.upsertProjectByPath(projectPath);\n        resolvedProjectId = project.id;\n        this.conversationsRepo.updateConversationProjectId({\n          conversationId: sessionId,\n          projectId: project.id,\n        });\n      }\n      if (resolvedProjectId) {\n        session.projectId = resolvedProjectId;\n        session.resumedFromConversationId = sessionId;\n      }\n    } catch (err) {\n      // ponytail: log but don't crash; session is already live and usable\n      console.error(`[enrichResumedSessionAsync] ${sessionId}:`, err);\n    }\n  }\n\n  private async handleSendInput(\n    sessionId: string,\n    req: IncomingMessage,\n    res: ServerResponse,\n  ): Promise<void> {\n    if (!this.checkSessionInputRateLimit(sessionId)) {\n      json(res, 429, { error: \"Too many input requests for this session. Please slow down.\" });\n      return;\n    }\n    if (this.agentConfig.enabled) {\n      const body = await readBody(req);\n      const cache = this.cache;\n      if (!cache) {\n        json(res, 503, {\n          error: \"Conversation cache is not available\",\n          code: \"INTERNAL_ERROR\",\n        });\n        return;\n      }\n      const result = await handleSendAgentInput(sessionId, body, {\n        sessionStore: this.sessionStore,\n        cache,\n        // biome-ignore lint/style/noNonNullAssertion: agentClient is set when agentConfig.enabled is true\n        agentClient: this.agentClient!,\n        agentConfig: this.agentConfig,\n      });\n      json(res, result.status, result.body);\n      return;\n    }\n    const body = await readBody(req);\n    const { input, keys } = body;\n\n    if (typeof keys === \"string\") {\n      // Raw key bytes (e.g. arrow navigation for interactive prompts).\n      // These bypass bracketed-paste wrapping — caller is responsible for\n      // sending well-formed escape sequences.\n      try {\n        this.ptyManager.sendKeys(sessionId, keys);\n        const updated = this.sessionStore.get(sessionId, this.ptyAttachedIds());\n        if (updated) {\n          this.wsHub.broadcast({ type: \"session_update\", session: updated });\n        }\n        json(res, 200, { ok: true });\n      } catch (err) {\n        const message = err instanceof Error ? err.message : \"Failed to send keys\";\n        json(res, 400, { error: message });\n      }\n      return;\n    }\n\n    if (typeof input !== \"string\") {\n      json(res, 400, { error: \"Missing input field\" });\n      return;\n    }\n\n    try {\n      const promptCount = this.ptyManager.sendInput(sessionId, input);\n      this.sessionStore.updateManaged(sessionId, { promptCount });\n      const updated = this.sessionStore.get(sessionId, this.ptyAttachedIds());\n      if (updated) {\n        this.wsHub.broadcast({ type: \"session_update\", session: updated });\n      }\n      // Index the user's new message immediately so it's searchable right away.\n      const filePath = this.sessionFileMap.get(sessionId);\n      if (filePath) {\n        this.getScanner()\n          .then((scanner) => scanner.refreshFile(filePath))\n          .then((meta) => {\n            this.log.info(\"scanner.refreshFile: ok\", {\n              event: \"scanner.refresh\",\n              sessionId,\n              filePath,\n              trigger: \"sendInput\",\n              messageCount: meta?.messageCount,\n            });\n          })\n          .catch((err) => {\n            this.log.warn(\"scanner.refreshFile: failed\", {\n              event: \"scanner.refresh_failed\",\n              sessionId,\n              filePath,\n              trigger: \"sendInput\",\n              err,\n            });\n          });\n      }\n      json(res, 200, { ok: true });\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Failed to send input\";\n      json(res, 400, { error: message });\n    }\n  }\n\n  private cancelPendingQuestion(sessionId: string): void {\n    const pq = this.pendingQuestions.get(sessionId);\n    if (!pq) return;\n    this.pendingQuestions.delete(sessionId);\n    this.pendingQuestionKey.delete(sessionId);\n    this.wsHub.broadcast({ type: \"question_cancelled\", sessionId, toolUseId: pq.toolUseId });\n  }\n\n  // Live AskUserQuestion detected from the rendered screen (ahead of JSONL).\n  // Broadcasts the `question` event immediately and records the content key so\n  // the later JSONL flush of the same question is de-duped. We synthesize a\n  // screen-scoped toolUseId; the JSONL path overwrites pendingQuestions with the\n  // real toolUseId when it lands, so answering works once JSONL catches up.\n  private handleLiveQuestion(sessionId: string, questions: AskQuestion[]): void {\n    const key = questionContentKey(questions);\n    if (this.pendingQuestionKey.get(sessionId) === key) return; // already shown\n    const toolUseId = `screen:${sessionId}:${key.length}`;\n    this.pendingQuestions.set(sessionId, { toolUseId, questions });\n    this.pendingQuestionKey.set(sessionId, key);\n    this.wsHub.broadcast({ type: \"question\", sessionId, toolUseId, questions });\n  }\n\n  // Permission gate opened/closed (OSC 777 + scraped options). Broadcasts the\n  // additive `permission` / `permission_cancelled` events. Mobile answers by\n  // sending the chosen option index via /input { keys } (e.g. \"2\\r\").\n  private handlePermissionChange(\n    sessionId: string,\n    gate: { prompt?: string; options: PermissionOption[]; cursor?: number } | null,\n  ): void {\n    if (gate === null) {\n      if (!this.pendingPermission.has(sessionId)) return;\n      this.pendingPermission.delete(sessionId);\n      this.wsHub.broadcast({ type: \"permission_cancelled\", sessionId });\n      return;\n    }\n    this.pendingPermission.set(sessionId, gate);\n    this.wsHub.broadcast({\n      type: \"permission\",\n      sessionId,\n      ...(gate.prompt ? { prompt: gate.prompt } : {}),\n      options: gate.options,\n      ...(gate.cursor !== undefined ? { cursor: gate.cursor } : {}),\n    });\n  }\n\n  private async handleSendAnswer(\n    sessionId: string,\n    req: IncomingMessage,\n    res: ServerResponse,\n  ): Promise<void> {\n    const body = await readBody(req);\n    const pending = this.pendingQuestions.get(sessionId);\n    const resolution = resolveAnswer(pending, body);\n    if (!resolution.ok) {\n      json(res, 400, { ok: false, reason: resolution.reason });\n      return;\n    }\n    // pending is guaranteed defined when resolution.ok is true (resolveAnswer guards it)\n    const toolUseId = pending?.toolUseId ?? \"\";\n    try {\n      this.ptyManager.sendKeys(sessionId, resolution.keys);\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Failed to send answer\";\n      json(res, 400, { ok: false, reason: message });\n      return;\n    }\n    this.pendingQuestions.delete(sessionId);\n    this.wsHub.broadcast({ type: \"question_cancelled\", sessionId, toolUseId });\n    json(res, 200, { ok: true });\n  }\n\n  private async handleUploadFile(\n    sessionId: string,\n    req: IncomingMessage,\n    res: ServerResponse,\n  ): Promise<void> {\n    const session = this.sessionStore.get(sessionId, this.ptyAttachedIds());\n    if (!session) {\n      json(res, 404, { error: \"Session not found\" });\n      return;\n    }\n    if (!session.projectPath) {\n      json(res, 400, { error: \"Session has no project path\" });\n      return;\n    }\n\n    const body = await readBody(req);\n    const { filename, mimeType, dataBase64 } = body ?? {};\n    if (\n      typeof filename !== \"string\" ||\n      typeof mimeType !== \"string\" ||\n      typeof dataBase64 !== \"string\"\n    ) {\n      json(res, 400, { error: \"Missing filename, mimeType, or dataBase64\" });\n      return;\n    }\n\n    try {\n      const saved = await saveUploadFile({\n        sessionId,\n        projectPath: session.projectPath,\n        originalName: filename,\n        mimeType,\n        dataBase64,\n      });\n\n      try {\n        await recordUpload(this.dbPool, this.dbInstanceId, {\n          id: saved.id,\n          sessionId,\n          filePath: saved.filePath,\n          originalName: saved.originalName,\n          mimeType: saved.mimeType,\n          sizeBytes: saved.sizeBytes,\n        });\n      } catch (err) {\n        const message = err instanceof Error ? err.message : String(err);\n        this.log.warn(\n          `[uploads] DB record failed: ${message}`,\n          { event: \"uploads.db_record_failed\", error: message },\n          \"pino\",\n        );\n      }\n\n      json(res, 201, {\n        id: saved.id,\n        path: saved.filePath,\n        originalName: saved.originalName,\n        mimeType: saved.mimeType,\n        sizeBytes: saved.sizeBytes,\n      });\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Upload failed\";\n      json(res, 400, { error: message });\n    }\n  }\n\n  private handleGetOutput(sessionId: string, res: ServerResponse): void {\n    // Return PTY ring buffer if a PTY is attached; otherwise return empty\n    // so clients render \"no buffered output\" instead of an error.\n    try {\n      const output = this.ptyManager.getOutput(sessionId);\n      json(res, 200, { output });\n    } catch {\n      json(res, 200, { output: \"\" });\n    }\n  }\n\n  private handleCancel(sessionId: string, res: ServerResponse): void {\n    this.discoveryCache = null;\n    try {\n      this.ptyManager.cancel(sessionId);\n      json(res, 200, { ok: true });\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Failed to cancel\";\n      json(res, 400, { error: message });\n    }\n  }\n\n  private async handleStopSession(sessionId: string, res: ServerResponse): Promise<void> {\n    const STOP_TIMEOUT_MS = 5000;\n\n    const session = this.ptyManager.getSession(sessionId);\n    if (!session) {\n      res.writeHead(404, { \"Content-Type\": \"application/json\" });\n      res.end(JSON.stringify({ error: \"Session not found\" }));\n      return;\n    }\n\n    if (session.status === \"idle\") {\n      res.writeHead(200, { \"Content-Type\": \"application/json\" });\n      res.end(JSON.stringify({ status: \"already_idle\", sessionId }));\n      return;\n    }\n\n    res.writeHead(200, {\n      \"Content-Type\": \"application/x-ndjson\",\n      \"Transfer-Encoding\": \"chunked\",\n      \"Cache-Control\": \"no-cache\",\n      \"X-Accel-Buffering\": \"no\",\n    });\n    res.write(`${JSON.stringify({ event: \"stopping\", sessionId })}\\n`);\n\n    const idlePromise = new Promise<\"idle\">((resolve) => {\n      const handler = (status: string) => {\n        if (status === \"idle\") {\n          this.sessionStatusBus.off(`status:${sessionId}`, handler);\n          resolve(\"idle\");\n        }\n      };\n      this.sessionStatusBus.on(`status:${sessionId}`, handler);\n    });\n\n    const timeoutPromise = new Promise<\"timeout\">((resolve) =>\n      setTimeout(() => resolve(\"timeout\"), STOP_TIMEOUT_MS),\n    );\n\n    this.ptyManager.putOnHold(sessionId);\n    this.discoveryCache = null;\n\n    const outcome = await Promise.race([idlePromise, timeoutPromise]);\n\n    if (outcome === \"idle\") {\n      res.write(`${JSON.stringify({ event: \"stopped\", sessionId })}\\n`);\n    } else {\n      res.write(`${JSON.stringify({ event: \"timeout\", sessionId })}\\n`);\n      this.log.warn(\n        `[stop] session ${sessionId.slice(0, 8)} did not idle within ${STOP_TIMEOUT_MS}ms`,\n      );\n    }\n\n    res.end();\n  }\n\n  private async handleAdopt(sessionId: string, res: ServerResponse): Promise<void> {\n    // Refresh discovery so we have the latest metadata\n    const discovered = await discoverClaudeProcesses();\n    this.sessionStore.setDiscovered(discovered);\n    this.discoveryCache = null;\n\n    const discSession = this.sessionStore.get(sessionId, this.ptyAttachedIds());\n    if (!discSession || discSession.ptyAttached) {\n      json(res, 404, { error: \"Discovered session not found\" });\n      return;\n    }\n\n    const { projectPath, projectName, branch } = discSession;\n    const convId = discSession.id;\n\n    if (discSession.pid == null) {\n      json(res, 400, { error: \"Session has no known PID\" });\n      return;\n    }\n\n    // Kill the external process\n    this.ptyManager.killPid(discSession.pid);\n\n    // Start a new managed session, resuming the conversation\n    const session = await this.ptyManager.start(convId, {\n      projectPath,\n      projectName,\n      branch,\n    });\n\n    this.sessionStore.addManaged(session);\n    void this.watchConversationFile(session.id);\n\n    this.wsHub.broadcast({\n      type: \"session_list\",\n      sessions: this.sessionStore.list(this.ptyAttachedIds()),\n    });\n\n    json(res, 201, { sessionId: session.id });\n  }\n\n  private async handleStartSession(req: IncomingMessage, res: ServerResponse): Promise<void> {\n    const ip = req.socket?.remoteAddress ?? \"unknown\";\n    if (!this.checkSessionStartRateLimit(ip)) {\n      json(res, 429, {\n        error: \"Too many session start requests. Please wait before trying again.\",\n      });\n      return;\n    }\n    if (this.agentConfig.enabled) {\n      const body = await readBody(req);\n      const result = await handleStartAgentSession(body, {\n        sessionStore: this.sessionStore,\n        // biome-ignore lint/style/noNonNullAssertion: agentClient is set when agentConfig.enabled is true\n        agentClient: this.agentClient!,\n        conversationsDir: this.cacheDir ? join(dirname(this.cacheDir), \"conversations\") : \"\",\n        agentConfig: this.agentConfig,\n      });\n      json(res, result.status, result.body);\n      if (result.status === 200) {\n        this.broadcastOrUnicastSessionList(req);\n      }\n      return;\n    }\n    if (!this.browseRoot) {\n      json(res, 403, {\n        error: \"File browsing not configured. Set browseRoot on the server.\",\n        code: \"BROWSE_ROOT_NOT_SET\",\n      });\n      return;\n    }\n    const body = await readBody(req);\n    const { path: relativePath, systemPrompt: clientPrompt } = body;\n\n    if (typeof relativePath !== \"string\") {\n      json(res, 400, { error: \"Missing path field\" });\n      return;\n    }\n\n    let resolvedPath: string;\n    try {\n      resolvedPath = await resolveBrowsePath(this.browseRoot, relativePath);\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Invalid path\";\n      json(res, 400, { error: message });\n      return;\n    }\n\n    this.discoveryCache = null;\n\n    const systemPromptParts = [\n      this.defaultSystemPrompt,\n      BROWSE_SYSTEM_PROMPT(this.browseRoot),\n      typeof clientPrompt === \"string\" ? clientPrompt : null,\n    ].filter(Boolean);\n\n    try {\n      const session = await this.ptyManager.startFresh({\n        projectPath: resolvedPath,\n        projectName: body.projectName,\n        systemPrompt: systemPromptParts.join(\"\\n\"),\n      });\n\n      this.sessionStore.addManaged(session);\n\n      // Return the real UUID immediately — no pending_ dance needed.\n      json(res, 202, { id: session.id, status: \"pending\" });\n\n      // Wire up JSONL watching once Claude creates the conversation file.\n      this.watchForJsonl(session.id, resolvedPath);\n\n      this.broadcastOrUnicastSessionList(req);\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Failed to start session\";\n      this.log.error(`[start] failed to start session: ${message}`, {\n        event: \"session.start_failed\",\n        error: message,\n      });\n      json(res, 500, { error: message });\n    }\n  }\n\n  // ─── Project linking ─────────────────────────────────────────────\n\n  private linkSessionToProject(sessionId: string, projectPath: string, filePath: string): void {\n    if (!this.projectsRepo || !this.conversationsRepo || !this.sessionsRepo || !this.cache) {\n      return;\n    }\n    try {\n      const project = this.projectsRepo.upsertProjectByPath(projectPath, {\n        lastConversationId: sessionId,\n        lastConversationCreatedAt: new Date().toISOString(),\n      });\n      // The conversation row may not exist yet (Claude is still writing the\n      // JSONL). Best-effort: only link if the row is present.\n      if (this.cache.hasConversation(sessionId)) {\n        this.conversationsRepo.updateConversationProjectId({\n          conversationId: sessionId,\n          projectId: project.id,\n        });\n      }\n      this.sessionsRepo.updateSessionProjectId({\n        sessionId,\n        projectId: project.id,\n      });\n      if (this.cacheMetadataRepo) {\n        this.cacheMetadataRepo.setCacheMetadata(\"last_conversation_id\", sessionId);\n      }\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err);\n      this.log.warn(`[projects] failed to link session to project: ${message}`, {\n        event: \"session.project_link_failed\",\n        sessionId,\n        projectPath,\n        filePath,\n        error: message,\n      });\n    }\n  }\n\n  // ─── File Watcher Wiring ─────────────────────────────────────────\n\n  private async watchConversationFile(sessionId: string): Promise<void> {\n    try {\n      const conversation = await this.findConversationByUuid(sessionId);\n      if (conversation?.filePath) {\n        this.sessionFileMap.set(sessionId, conversation.filePath);\n        this.fileWatcher.watch(conversation.filePath);\n      }\n    } catch {\n      // Best-effort: if we can't find the JSONL file, raw terminal output still works\n    }\n  }\n\n  // Watch the project directory for the JSONL file Claude creates for sessionId.\n  // Once found, wire up structured event streaming. No rekeying needed — the UUID\n  // was passed to Claude via --session-id so the filename matches from the start.\n  private watchForJsonl(sessionId: string, projectPath: string): void {\n    const encoded = projectPath.replace(/[/\\\\:.]/g, \"-\");\n    const projectsDir = join(homedir(), \".claude\", \"projects\", encoded);\n    const expectedFile = `${sessionId}.jsonl`;\n    const filePath = join(projectsDir, expectedFile);\n    const deadline = Date.now() + 120_000;\n\n    let watcher: ReturnType<typeof fsWatch> | null = null;\n    const cleanup = () => {\n      try {\n        watcher?.close();\n      } catch {\n        /* ignore */\n      }\n    };\n\n    const tryWire = () => {\n      if (!this.ptyManager.hasSession(sessionId)) {\n        cleanup();\n        return;\n      }\n      if (Date.now() > deadline) {\n        cleanup();\n        return;\n      }\n\n      // Primary: Claude named the file after the session UUID\n      let resolvedFilePath = existsSync(filePath) ? filePath : null;\n\n      // Fallback: Claude resumed an existing conversation — the JSONL it writes\n      // to will be a different UUID. Pick the most recently modified JSONL in\n      // the directory that was touched within the last 5 seconds (session just started).\n      if (!resolvedFilePath && existsSync(projectsDir)) {\n        try {\n          const now = Date.now();\n          const recent = readdirSync(projectsDir)\n            .filter((f) => f.endsWith(\".jsonl\"))\n            .map((f) => ({ f, mtime: statSync(join(projectsDir, f)).mtimeMs }))\n            .filter(({ mtime }) => now - mtime < 5_000)\n            .sort((a, b) => b.mtime - a.mtime)[0];\n          if (recent) resolvedFilePath = join(projectsDir, recent.f);\n        } catch {\n          /* ignore */\n        }\n      }\n\n      if (!resolvedFilePath) return;\n\n      cleanup();\n      this.sessionFileMap.set(sessionId, resolvedFilePath);\n      this.fileWatcher.watch(resolvedFilePath);\n\n      // Broadcast any lines already written before the watcher started — Claude\n      // can finish writing the JSONL in the same tick as the watcher wires up,\n      // so chokidar won't emit a change event for those lines.\n      try {\n        const existing = readFileSync(resolvedFilePath, \"utf8\").split(\"\\n\").filter(Boolean);\n        if (existing.length > 0) {\n          this.wsHub.broadcast({ type: \"conversation_events\", sessionId, lines: existing });\n          for (const line of existing) {\n            this.wsHub.broadcast({ type: \"conversation_event\", sessionId, line });\n          }\n        }\n      } catch {\n        /* ignore — file may not be readable yet; watcher will catch future writes */\n      }\n\n      if (this.scannerReady) {\n        this.scannerStale = true;\n      } else {\n        this.scanner = null;\n      }\n      this.linkSessionToProject(sessionId, projectPath, resolvedFilePath);\n      this.cache?.markAsStreamer(sessionId);\n      this.log.info(\n        `[startFresh] wired JSONL for ${sessionId}`,\n        { event: \"session.jsonl_wired\", sessionId, filePath: resolvedFilePath },\n        \"pino\",\n      );\n    };\n\n    tryWire();\n    if (this.sessionFileMap.has(sessionId)) return; // already found\n\n    try {\n      require(\"fs\").mkdirSync(projectsDir, { recursive: true });\n      watcher = fsWatch(projectsDir, tryWire);\n      watcher.on(\"error\", cleanup);\n    } catch {\n      // fs.watch not available (e.g. in tests), ignore\n    }\n  }\n\n  private async handleBrowse(url: URL, res: ServerResponse): Promise<void> {\n    if (!this.browseRoot) {\n      json(res, 403, {\n        error: \"File browsing not configured. Set browseRoot on the server.\",\n        code: \"BROWSE_ROOT_NOT_SET\",\n      });\n      return;\n    }\n    const relativePath = url.searchParams.get(\"path\") ?? \"\";\n    try {\n      const resolved = await resolveBrowsePath(this.browseRoot, relativePath);\n      const directories = await listDirectories(resolved);\n      json(res, 200, { path: relativePath, directories });\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Browse failed\";\n      if (err instanceof BrowsePathNotFoundError) {\n        json(res, 404, { error: message, code: \"PATH_NOT_FOUND\" });\n        return;\n      }\n      json(res, 400, { error: message });\n    }\n  }\n\n  private async handleMkdir(req: IncomingMessage, res: ServerResponse): Promise<void> {\n    if (!this.browseRoot) {\n      json(res, 403, {\n        error: \"File browsing not configured. Set browseRoot on the server.\",\n        code: \"BROWSE_ROOT_NOT_SET\",\n      });\n      return;\n    }\n    const body = await readBody(req);\n    const { path: relativePath, name } = body;\n    if (!name || typeof name !== \"string\") {\n      json(res, 400, { error: \"Missing name field\" });\n      return;\n    }\n    try {\n      const parentPath = await resolveBrowsePath(this.browseRoot, relativePath ?? \"\");\n      await createDirectory(parentPath, name);\n      const parentRelative = relativePath ?? \"\";\n      const created = parentRelative ? `${parentRelative}/${name}` : name;\n      json(res, 201, { created });\n    } catch (err) {\n      const message = err instanceof Error ? err.message : \"Failed to create directory\";\n      if (message.includes(\"already exists\")) {\n        json(res, 409, { error: message });\n      } else if (message.includes(\"Invalid directory name\")) {\n        json(res, 400, { error: message });\n      } else {\n        json(res, 400, { error: message });\n      }\n    }\n  }\n\n  private async handleSetSessionName(\n    sessionId: string,\n    req: IncomingMessage,\n    res: ServerResponse,\n  ): Promise<void> {\n    if (!this.cache) {\n      json(res, 503, { error: \"Cache not available\" });\n      return;\n    }\n    let parsed: { name?: string };\n    try {\n      parsed = await readBody(req);\n    } catch {\n      json(res, 400, { error: \"Invalid JSON\" });\n      return;\n    }\n    const name = parsed.name?.trim();\n    if (!name) {\n      json(res, 400, { error: \"name is required\" });\n      return;\n    }\n    this.cache.upsertSessionName(sessionId, name);\n    json(res, 200, { ok: true });\n  }\n\n  private handleGetSessionNames(res: ServerResponse): void {\n    if (!this.cache) {\n      json(res, 200, {});\n      return;\n    }\n    json(res, 200, this.cache.listSessionNames());\n  }\n}\n\n// ─── Utilities ─────────────────────────────────────────────────────\n\n// Classify whether a conversation can be resumed from the project directory\n// (cwd) the session ran in. Shared by the detail handler and the\n// resumable-session shape. A conversation's JSONL parses fine even when its\n// cwd is gone, so callers still serve the full history — this only flags that\n// resume would fail and why. Returns optional meta fields older clients\n// ignore: cwd exists → resumable; gone → not resumable, with a\n// worktree-specific reason when the path was a git worktree (now removed).\nfunction classifyResumability(cwd: string | null | undefined): {\n  resumable: boolean;\n  unavailable_reason?: \"path_missing\" | \"worktree_removed\";\n} {\n  if (!cwd) return { resumable: true };\n  if (existsSync(cwd)) return { resumable: true };\n  const ranInWorktree = /\\/\\.worktrees\\//.test(cwd) || /\\/\\.claude\\/worktrees\\//.test(cwd);\n  return {\n    resumable: false,\n    unavailable_reason: ranInWorktree ? \"worktree_removed\" : \"path_missing\",\n  };\n}\n\nfunction conversationToResumableSession(c: ConversationListItem) {\n  const availability = classifyResumability(c.projectPath);\n  const provider = c.provider ?? CLAUDE_CODE_PROVIDER;\n  return {\n    type: \"conversation\" as const,\n    id: c.id,\n    conversationId: c.id,\n    status: \"on_hold\" as const,\n    ptyAttached: false,\n    projectId: c.projectId ?? undefined,\n    projectPath: c.projectPath ?? \"\",\n    projectName: c.projectName ?? \"\",\n    branch: c.branch ?? undefined,\n    lastOutput: \"\",\n    elapsedMs: 0,\n    promptCount: c.messageCount,\n    startedAt: c.lastActivity,\n    completedAt: null,\n    lastActivityAt: c.lastActivity,\n    ...(c.title != null && { sessionName: c.title }),\n    ...(c.model != null && { model: c.model }),\n    ...(c.account != null && { account: c.account }),\n    messageCount: c.messageCount,\n    ...(c.preview != null && { preview: c.preview }),\n    ...(c.firstMessage != null && { firstMessageText: c.firstMessage }),\n    ...(c.lastMessage != null && { lastMessageText: c.lastMessage }),\n    filePath: c.filePath,\n    provider,\n    resumable: isProviderResumable(provider, availability.resumable),\n    ...(availability.unavailable_reason && {\n      unavailable_reason: availability.unavailable_reason,\n    }),\n  };\n}\n\nfunction json(res: ServerResponse, status: number, data: unknown): void {\n  res.writeHead(status, { \"Content-Type\": \"application/json\" });\n  res.end(JSON.stringify(data));\n}\n\nasync function writeHonoResponse(honoRes: Response, res: ServerResponse): Promise<void> {\n  const headers: Record<string, string> = {};\n  honoRes.headers.forEach((value, key) => {\n    headers[key] = value;\n  });\n  res.writeHead(honoRes.status, headers);\n  if (honoRes.body) {\n    const reader = honoRes.body.getReader();\n    try {\n      while (true) {\n        const { done, value } = await reader.read();\n        if (done) break;\n        res.write(value);\n      }\n    } finally {\n      reader.releaseLock();\n    }\n  }\n  res.end();\n}\n\n// Parse THREADBASE_DIR_SCAN_DEBOUNCE_MS → a non-negative integer, or undefined\n// when unset/invalid so the caller can fall through to config/default.\nfunction parseDirScanDebounceEnv(raw: string | undefined): number | undefined {\n  if (raw == null || raw === \"\") return undefined;\n  const parsed = Number.parseInt(raw, 10);\n  return Number.isNaN(parsed) || parsed < 0 ? undefined : parsed;\n}\n\nfunction intParam(url: URL, name: string, defaultValue: number): number {\n  const val = url.searchParams.get(name);\n  if (!val) return defaultValue;\n  const parsed = Number.parseInt(val, 10);\n  return Number.isNaN(parsed) ? defaultValue : parsed;\n}\n\nconst VALID_SORT_KEYS: SessionSortKey[] = [\"startedAt\", \"lastActivityAt\", \"projectName\", \"status\"];\nconst VALID_ORDERS: SessionSortOrder[] = [\"asc\", \"desc\"];\nconst VALID_STATUSES: SessionStatus[] = [\"running\", \"waiting_input\", \"idle\"];\n\nconst SESSIONS_DEFAULT_LIMIT = 200;\nconst SESSIONS_MAX_LIMIT = 500;\n\ntype ParsedSessionListQuery = { query: import(\"./types\").SessionListQuery } | { error: string };\n\nfunction parseSessionListQuery(url: URL): ParsedSessionListQuery {\n  const limitRaw = url.searchParams.get(\"limit\");\n  let limit = SESSIONS_DEFAULT_LIMIT;\n  if (limitRaw !== null) {\n    const n = Number.parseInt(limitRaw, 10);\n    if (!Number.isFinite(n) || n < 1 || n > SESSIONS_MAX_LIMIT) {\n      return { error: `limit must be 1..${SESSIONS_MAX_LIMIT}` };\n    }\n    limit = n;\n  }\n\n  const sortByRaw = url.searchParams.get(\"sortBy\") ?? \"startedAt\";\n  if (!VALID_SORT_KEYS.includes(sortByRaw as SessionSortKey)) {\n    return { error: `sortBy must be one of ${VALID_SORT_KEYS.join(\",\")}` };\n  }\n  const sortBy = sortByRaw as SessionSortKey;\n\n  const orderRaw = url.searchParams.get(\"order\") ?? \"desc\";\n  if (!VALID_ORDERS.includes(orderRaw as SessionSortOrder)) {\n    return { error: `order must be asc or desc` };\n  }\n  const order = orderRaw as SessionSortOrder;\n\n  const statusRaw = url.searchParams.get(\"status\");\n  let status: SessionStatus[] | undefined;\n  if (statusRaw) {\n    const parts = statusRaw\n      .split(\",\")\n      .map((s) => s.trim())\n      .filter(Boolean);\n    for (const p of parts) {\n      if (!VALID_STATUSES.includes(p as SessionStatus)) {\n        return { error: `status entry \"${p}\" is invalid` };\n      }\n    }\n    status = parts as SessionStatus[];\n  }\n\n  const cursor = url.searchParams.get(\"cursor\") ?? undefined;\n\n  return { query: { limit, sortBy, order, status, cursor } };\n}\n\nfunction readBody(req: IncomingMessage): Promise<any> {\n  return new Promise((resolve, reject) => {\n    const chunks: Buffer[] = [];\n    req.on(\"data\", (chunk) => chunks.push(chunk));\n    req.on(\"end\", () => {\n      try {\n        const raw = Buffer.concat(chunks).toString(\"utf-8\");\n        resolve(raw ? JSON.parse(raw) : {});\n      } catch {\n        reject(new Error(\"Invalid JSON body\"));\n      }\n    });\n    req.on(\"error\", reject);\n  });\n}\n","import type { ConversationMeta, Include, SortOrder } from \"./types\";\n\nexport function applySort(metas: ConversationMeta[], order: SortOrder): ConversationMeta[] {\n  const out = [...metas];\n  // Tie-break by id (the file path) so the order is fully deterministic and does\n  // not depend on input order. This matters because metas can arrive in\n  // different orders (filesystem discovery vs. an SQLite query), and a tie on\n  // the primary key would otherwise resolve differently between them.\n  const tie = (a: ConversationMeta, b: ConversationMeta) => a.id.localeCompare(b.id);\n  switch (order) {\n    case \"recent\":\n      out.sort((a, b) => b.timestamp.localeCompare(a.timestamp) || tie(a, b));\n      break;\n    case \"oldest\":\n      out.sort((a, b) => a.timestamp.localeCompare(b.timestamp) || tie(a, b));\n      break;\n    case \"messages-desc\":\n      out.sort((a, b) => b.messageCount - a.messageCount || tie(a, b));\n      break;\n    case \"messages-asc\":\n      out.sort((a, b) => a.messageCount - b.messageCount || tie(a, b));\n      break;\n    case \"alpha\":\n      out.sort((a, b) => {\n        const cmp = a.projectName.localeCompare(b.projectName);\n        if (cmp !== 0) return cmp;\n        return a.preview.localeCompare(b.preview) || tie(a, b);\n      });\n      break;\n  }\n  return out;\n}\n\nexport function applySinceFilter(metas: ConversationMeta[], since: string): ConversationMeta[] {\n  const cutoff = parseSinceCutoff(since);\n  return metas.filter((m) => new Date(m.timestamp).getTime() >= cutoff.getTime());\n}\n\nexport function applyIncludeFilter(\n  metas: ConversationMeta[],\n  include: Include,\n): ConversationMeta[] {\n  switch (include) {\n    case \"all\":\n      return metas;\n    case \"conversations\":\n      return metas.filter((m) => !m.isSubagent && !m.isTeammate);\n    case \"subagents\":\n      return metas.filter((m) => m.isSubagent);\n    case \"teammates\":\n      return metas.filter((m) => m.isTeammate);\n  }\n}\n\nexport function applyProjectFilter(metas: ConversationMeta[], project: string): ConversationMeta[] {\n  const lower = project.toLowerCase();\n  return metas.filter(\n    (m) =>\n      m.projectPath.toLowerCase().includes(lower) || m.projectName.toLowerCase().includes(lower),\n  );\n}\n\nexport function applyAccountFilter(metas: ConversationMeta[], account: string): ConversationMeta[] {\n  return metas.filter((m) => m.account === account);\n}\n\nexport function applyPagination<T>(\n  items: T[],\n  limit: number,\n  offset: number,\n): { items: T[]; total: number } {\n  return {\n    items: items.slice(offset, offset + limit),\n    total: items.length,\n  };\n}\n\nexport function parseSinceCutoff(value: string): Date {\n  const s = value.trim();\n  if (!s) throw new Error(\"Empty --since value\");\n\n  // Try ISO date\n  const isoMatch = s.match(/^\\d{4}-\\d{2}-\\d{2}$/);\n  if (isoMatch) {\n    const d = new Date(`${s}T00:00:00Z`);\n    if (!Number.isNaN(d.getTime())) return d;\n  }\n\n  // Try duration: digits + unit\n  const durationMatch = s.match(/^(\\d+)([hdw])$/);\n  if (!durationMatch) {\n    throw new Error(\n      `Invalid --since value \"${s}\": expected duration like \"7d\", \"24h\", \"2w\" or ISO date \"2006-01-02\"`,\n    );\n  }\n\n  const n = parseInt(durationMatch[1], 10);\n  const unit = durationMatch[2];\n  let ms: number;\n  switch (unit) {\n    case \"h\":\n      ms = n * 60 * 60 * 1000;\n      break;\n    case \"d\":\n      ms = n * 24 * 60 * 60 * 1000;\n      break;\n    case \"w\":\n      ms = n * 7 * 24 * 60 * 60 * 1000;\n      break;\n    default:\n      throw new Error(`Invalid unit \"${unit}\"`);\n  }\n\n  return new Date(Date.now() - ms);\n}\n","import { readFileSync } from \"fs\";\nimport { dirname, join } from \"path\";\nimport { getLogger } from \"./logger\";\n\nconst REF_PREFIX = \"ref: refs/heads/\";\nconst MAX_DEPTH = 6;\n\nexport function readGitBranch(projectPath: string): string | null {\n  if (!projectPath) return null;\n  const log = getLogger();\n\n  let dir = projectPath;\n  let depth = 0;\n\n  while (depth < MAX_DEPTH) {\n    const headPath = join(dir, \".git\", \"HEAD\");\n    try {\n      const content = readFileSync(headPath, \"utf-8\").trim();\n      if (content.startsWith(REF_PREFIX)) {\n        const branch = content.slice(REF_PREFIX.length);\n        log.trace({ projectPath, dir, branch }, \"git: branch resolved\");\n        return branch;\n      }\n      // Detached HEAD: raw commit SHA\n      if (content.length >= 7) {\n        log.trace({ projectPath, dir }, \"git: detached HEAD\");\n        return \"(detached)\";\n      }\n      return null;\n    } catch {\n      // .git/HEAD not found at this level\n    }\n\n    const parent = dirname(dir);\n    if (parent === dir) return null; // filesystem root\n    dir = parent;\n    depth++;\n  }\n\n  log.trace({ projectPath }, \"git: no .git found within depth\");\n  return null;\n}\n","import pino, { type Logger, type LoggerOptions } from \"pino\";\n\nlet currentLogger: Logger = pino({ level: \"silent\" });\n\nexport function createLogger(options?: LoggerOptions | Logger): Logger {\n  if (options && typeof (options as Logger).child === \"function\") {\n    return options as Logger;\n  }\n  return pino((options as LoggerOptions) ?? { level: \"silent\" });\n}\n\nexport function setLogger(logger: Logger): void {\n  currentLogger = logger;\n}\n\nexport function getLogger(): Logger {\n  return currentLogger;\n}\n\nexport type { Logger, LoggerOptions };\n","import FlexSearchModule from \"flexsearch\";\n\n// FlexSearch has inconsistent default export across ESM/CJS\nconst FlexSearch = (FlexSearchModule as any).default ?? FlexSearchModule;\n\nimport { getLogger } from \"./logger\";\nimport { generateMatches } from \"./search-matches\";\nimport type { ConversationMeta, SearchResult } from \"./types\";\n\nexport class SearchIndexer {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private index: any;\n  private documents = new Map<string, ConversationMeta>();\n\n  constructor() {\n    this.index = this.createIndex();\n  }\n\n  private createIndex() {\n    return new (FlexSearch as any).Document({\n      document: {\n        id: \"id\",\n        index: [\n          \"content\",\n          \"projectName\",\n          \"projectPath\",\n          \"sessionId\",\n          \"sessionName\",\n          \"account\",\n          \"model\",\n          \"gitBranch\",\n          \"toolNames\",\n        ],\n        store: [\"id\"],\n      },\n      tokenize: \"forward\",\n      resolution: 9,\n      cache: 100,\n    });\n  }\n\n  addDocument(meta: ConversationMeta): void {\n    this.documents.set(meta.id, meta);\n    this.index.add({\n      id: meta.id,\n      content: meta.contentSnippet,\n      projectName: meta.projectName,\n      projectPath: meta.projectPath,\n      sessionId: meta.sessionId,\n      sessionName: meta.sessionName,\n      account: meta.account,\n      model: meta.model || \"\",\n      gitBranch: meta.gitBranch || \"\",\n      toolNames: meta.toolNames.join(\" \"),\n    });\n  }\n\n  buildIndex(metas: ConversationMeta[]): void {\n    this.clear();\n    for (const meta of metas) {\n      this.addDocument(meta);\n    }\n    getLogger().debug({ docCount: metas.length }, \"indexer: built\");\n  }\n\n  search(query: string, options?: { fields?: string[]; limit?: number }): SearchResult[] {\n    const limit = options?.limit ?? 50;\n\n    if (!query.trim()) {\n      return this.getRecent(limit);\n    }\n\n    const results = this.index.search(query, { limit: limit * 2, enrich: true });\n\n    const seen = new Set<string>();\n    const searchResults: SearchResult[] = [];\n\n    for (const fieldResult of results) {\n      if (!fieldResult.result) continue;\n      for (const item of fieldResult.result) {\n        const id = typeof item === \"object\" ? (item as { id: string }).id : String(item);\n        if (seen.has(id)) continue;\n        seen.add(id);\n\n        const meta = this.documents.get(id);\n        if (!meta) continue;\n\n        const matches = generateMatches(meta, query);\n\n        searchResults.push({ meta, score: 1, matches });\n        if (searchResults.length >= limit) break;\n      }\n      if (searchResults.length >= limit) break;\n    }\n\n    return searchResults;\n  }\n\n  private getRecent(limit: number): SearchResult[] {\n    return Array.from(this.documents.values())\n      .sort((a, b) => b.timestamp.localeCompare(a.timestamp))\n      .slice(0, limit)\n      .map((meta) => ({\n        meta,\n        score: 1,\n        matches: [{ field: \"timestamp\", snippet: meta.preview }],\n      }));\n  }\n\n  getDocumentCount(): number {\n    return this.documents.size;\n  }\n\n  // Replace an already-indexed document in place. FlexSearch's `add` does not\n  // overwrite an existing id, so a single-file refresh must go through\n  // `update` to avoid stale matches lingering in the index.\n  updateDocument(meta: ConversationMeta): void {\n    this.documents.set(meta.id, meta);\n    this.index.update({\n      id: meta.id,\n      content: meta.contentSnippet,\n      projectName: meta.projectName,\n      projectPath: meta.projectPath,\n      sessionId: meta.sessionId,\n      sessionName: meta.sessionName,\n      account: meta.account,\n      model: meta.model || \"\",\n      gitBranch: meta.gitBranch || \"\",\n      toolNames: meta.toolNames.join(\" \"),\n    });\n  }\n\n  removeDocument(id: string): void {\n    this.documents.delete(id);\n    this.index.remove(id);\n  }\n\n  clear(): void {\n    this.documents.clear();\n    this.index = this.createIndex();\n    getLogger().trace(\"indexer: cleared\");\n  }\n}\n","import type { ConversationMeta, SearchMatch } from \"./types\";\n\n// Build the per-field match snippets for a search hit. Shared by the in-memory\n// FlexSearch indexer and the persistent FTS backend so search() returns\n// identical SearchMatch output regardless of which engine ran the query.\nexport function generateMatches(meta: ConversationMeta, query: string): SearchMatch[] {\n  const matches: SearchMatch[] = [];\n  const lowerQuery = query.toLowerCase();\n\n  const fields: [string, string][] = [\n    [\"contentSnippet\", meta.contentSnippet],\n    [\"projectName\", meta.projectName],\n    [\"sessionId\", meta.sessionId],\n    [\"sessionName\", meta.sessionName],\n    [\"account\", meta.account],\n    [\"model\", meta.model || \"\"],\n    [\"gitBranch\", meta.gitBranch || \"\"],\n    [\"toolNames\", meta.toolNames.join(\" \")],\n  ];\n\n  for (const [field, value] of fields) {\n    const idx = value.toLowerCase().indexOf(lowerQuery);\n    if (idx !== -1) {\n      const start = Math.max(0, idx - 80);\n      const end = Math.min(value.length, idx + query.length + 120);\n      let snippet = value.slice(start, end);\n      if (start > 0) snippet = `...${snippet}`;\n      if (end < value.length) snippet = `${snippet}...`;\n      matches.push({ field, snippet });\n    }\n  }\n\n  return matches.length > 0 ? matches : [{ field: \"preview\", snippet: meta.preview }];\n}\n","import { readFileSync, writeFileSync } from \"fs\";\nimport { getLogger } from \"../logger\";\nimport type { ConversationMeta } from \"../types\";\n\nexport const SIDECAR_VERSION = 1;\n\n// Portable, human-readable index summary written next to a JSONL file as\n// `<file>.idx.json`. Not the canonical index (SQLite is) — useful for\n// debugging, portability, and rebuilding the DB if it's lost. Off by default.\nexport interface Sidecar {\n  version: number;\n  sourcePath: string;\n  sizeBytes: number;\n  mtimeMs: number;\n  lastIndexedOffset: number;\n  lastIndexedLine: number;\n  messageCount: number;\n  projectPath: string;\n  projectName: string;\n  branch: string | null;\n  firstSentAt: string | null;\n  firstSentText: string | null;\n  lastSentAt: string | null;\n  lastSentText: string | null;\n  updatedAt: string;\n}\n\nexport function sidecarPath(jsonlPath: string): string {\n  return `${jsonlPath}.idx.json`;\n}\n\nexport function buildSidecar(\n  meta: ConversationMeta,\n  cursor: { sizeBytes: number; mtimeMs: number; offset: number; line: number },\n  updatedAt: string,\n): Sidecar {\n  return {\n    version: SIDECAR_VERSION,\n    sourcePath: meta.filePath,\n    sizeBytes: cursor.sizeBytes,\n    mtimeMs: cursor.mtimeMs,\n    lastIndexedOffset: cursor.offset,\n    lastIndexedLine: cursor.line,\n    messageCount: meta.messageCount,\n    projectPath: meta.projectPath,\n    projectName: meta.projectName,\n    branch: meta.gitBranch,\n    firstSentAt: meta.firstMessage?.timestamp ?? null,\n    firstSentText: meta.firstMessage?.text ?? null,\n    lastSentAt: meta.lastMessage?.timestamp ?? null,\n    lastSentText: meta.lastMessage?.text ?? null,\n    updatedAt,\n  };\n}\n\n// Write the sidecar; never throw into the indexing path — a sidecar is a\n// best-effort artifact, so a write failure (read-only dir, etc.) is logged and\n// swallowed.\nexport function writeSidecar(jsonlPath: string, sidecar: Sidecar): void {\n  try {\n    writeFileSync(sidecarPath(jsonlPath), JSON.stringify(sidecar, null, 2));\n  } catch (err) {\n    getLogger().warn({ jsonlPath, err }, \"sidecar: write failed\");\n  }\n}\n\nexport function readSidecar(jsonlPath: string): Sidecar | null {\n  try {\n    return JSON.parse(readFileSync(sidecarPath(jsonlPath), \"utf-8\")) as Sidecar;\n  } catch {\n    return null;\n  }\n}\n","import { mkdir, readFile, writeFile } from \"fs/promises\";\nimport { homedir } from \"os\";\nimport { join } from \"path\";\nimport { getLogger } from \"./logger\";\nimport type { Profile } from \"./types\";\n\nconst PROFILES_FILE = \"profiles.json\";\n\nexport function resolveConfigDir(configDir: string): string {\n  return configDir.replace(/^~/, homedir());\n}\n\nexport function getProjectsDir(profile: Profile): string {\n  return join(resolveConfigDir(profile.configDir), \"projects\");\n}\n\nexport async function detectDefaultProfile(): Promise<Profile> {\n  return {\n    id: \"default\",\n    label: \"Default\",\n    configDir: join(homedir(), \".claude\"),\n    enabled: true,\n    emoji: \"🤖\",\n  };\n}\n\nexport async function loadProfiles(configPath: string): Promise<Profile[]> {\n  const log = getLogger();\n  try {\n    const resolved = resolveConfigDir(configPath);\n    const data = await readFile(join(resolved, PROFILES_FILE), \"utf-8\");\n    const profiles = JSON.parse(data) as Profile[];\n    log.debug({ configPath, count: profiles.length }, \"profiles: loaded\");\n    return profiles;\n  } catch (err) {\n    log.debug({ configPath, err }, \"profiles: load failed, using default\");\n    const defaultProfile = await detectDefaultProfile();\n    return [defaultProfile];\n  }\n}\n\nexport async function saveProfiles(profiles: Profile[], configPath: string): Promise<void> {\n  const resolved = resolveConfigDir(configPath);\n  await mkdir(resolved, { recursive: true });\n  await writeFile(join(resolved, PROFILES_FILE), JSON.stringify(profiles, null, 2));\n  getLogger().debug({ configPath, count: profiles.length }, \"profiles: saved\");\n}\n","import fg from \"fast-glob\";\nimport { createReadStream } from \"fs\";\nimport { stat } from \"fs/promises\";\nimport { basename } from \"path\";\nimport { createInterface } from \"readline\";\nimport { getLogger } from \"../logger\";\nimport { cleanSystemTags } from \"../tags\";\nimport type {\n  ContentTier,\n  Conversation,\n  ConversationMessage,\n  ConversationMeta,\n  MessageSender,\n  MessageSnapshot,\n} from \"../types\";\nimport {\n  CODEX_CLI_PROVIDER,\n  type DiscoveredConversationFile,\n  type ScannerProvider,\n} from \"./provider\";\n\n// Serializable fold state for a Codex CLI rollout session. Plain JSON so a\n// future persistent engine can resume it from a byte offset (same contract as\n// the Threadbase ReducerState).\nexport interface CodexAccumulator {\n  sessionId: string;\n  cwd: string;\n  gitBranch: string | null;\n  model: string | null;\n  latestTimestamp: string;\n  messageCount: number;\n  lastMessageSender: MessageSender;\n  firstUser: MessageSnapshot | null;\n  lastUser: MessageSnapshot | null;\n  lastAssistant: MessageSnapshot | null;\n  toolNames: string[];\n  previewParts: string[];\n  previewLength: number;\n  snippetParts: string[];\n  snippetLength: number;\n}\n\n// Codex CLI rollout sessions live as rollout-*.jsonl under a date-partitioned\n// tree. The Codex provider is opt-in: the scanner only discovers under roots the\n// caller passes explicitly (no default home scan).\nexport class CodexCliProvider implements ScannerProvider<CodexAccumulator> {\n  readonly name = CODEX_CLI_PROVIDER;\n\n  async discover(roots: string[]): Promise<DiscoveredConversationFile[]> {\n    const log = getLogger();\n    const results: DiscoveredConversationFile[] = [];\n    for (const root of roots) {\n      let paths: string[];\n      try {\n        paths = await fg([\"**/rollout-*.jsonl\", \"**/*.jsonl\"], {\n          cwd: root,\n          absolute: true,\n          dot: false,\n          unique: true,\n        });\n      } catch (err) {\n        log.warn({ root, err }, \"codex discovery: glob failed\");\n        continue;\n      }\n      for (const filePath of paths) {\n        try {\n          const s = await stat(filePath);\n          if (s.size > 0) results.push({ filePath, account: \"codex\" });\n        } catch (err) {\n          log.warn({ filePath, err }, \"codex discovery: stat failed\");\n        }\n      }\n    }\n    return results;\n  }\n\n  // Codex rollout lines carry distinctive top-level types.\n  canParse(_filePath: string, sample: string): boolean {\n    for (const line of sample.split(\"\\n\")) {\n      if (!line.trim()) continue;\n      try {\n        const e = JSON.parse(line) as Record<string, unknown>;\n        if (e.type === \"session_meta\" || e.type === \"response_item\" || e.type === \"event_msg\") {\n          return true;\n        }\n        if (e.type === \"user\" || e.type === \"assistant\") return false;\n      } catch {}\n    }\n    return false;\n  }\n\n  createEmptyAccumulator(): CodexAccumulator {\n    return {\n      sessionId: \"\",\n      cwd: \"\",\n      gitBranch: null,\n      model: null,\n      latestTimestamp: \"\",\n      messageCount: 0,\n      lastMessageSender: \"user\",\n      firstUser: null,\n      lastUser: null,\n      lastAssistant: null,\n      toolNames: [],\n      previewParts: [],\n      previewLength: 0,\n      snippetParts: [],\n      snippetLength: 0,\n    };\n  }\n\n  reduceEntry(acc: CodexAccumulator, entry: Record<string, unknown>, tier: ContentTier): void {\n    reduceCodexEntry(acc, entry, tier);\n  }\n\n  finalize(\n    acc: CodexAccumulator,\n    filePath: string,\n    account: string,\n    tier: ContentTier,\n  ): ConversationMeta | null {\n    return finalizeCodexMeta(acc, filePath, account, tier);\n  }\n}\n\n// ─── Reducer (exported for tests / future incremental engine) ───────────\n\nconst asString = (v: unknown): string => (typeof v === \"string\" ? v : \"\");\n\n// Pull display text out of a Codex content array of {type,text} blocks.\nfunction extractCodexText(content: unknown): string {\n  if (typeof content === \"string\") return cleanSystemTags(content);\n  if (!Array.isArray(content)) return \"\";\n  return content\n    .map((item) => {\n      if (typeof item === \"string\") return item;\n      const t = item?.type;\n      if ((t === \"input_text\" || t === \"output_text\" || t === \"text\") && item?.text) {\n        return item.text as string;\n      }\n      return \"\";\n    })\n    .filter(Boolean)\n    .map(cleanSystemTags)\n    .join(\" \");\n}\n\n// Fold one Codex rollout line into the accumulator. Tolerant by construction:\n// any line it doesn't recognise is ignored, never thrown on.\nexport function reduceCodexEntry(\n  acc: CodexAccumulator,\n  entry: Record<string, unknown>,\n  tier: ContentTier,\n): void {\n  const ts = asString(entry.timestamp);\n  if (ts && (!acc.latestTimestamp || ts > acc.latestTimestamp)) acc.latestTimestamp = ts;\n\n  const payload = entry.payload as Record<string, unknown> | undefined;\n  if (!payload || typeof payload !== \"object\") return;\n\n  const type = entry.type as string;\n\n  if (type === \"session_meta\") {\n    if (!acc.sessionId) acc.sessionId = asString(payload.id);\n    if (!acc.cwd) acc.cwd = asString(payload.cwd);\n    const git = payload.git as Record<string, unknown> | undefined;\n    if (acc.gitBranch === null && git?.branch) acc.gitBranch = asString(git.branch) || null;\n    return;\n  }\n\n  // Model lives on turn_context records (and occasionally elsewhere).\n  if (acc.model === null && payload.model) acc.model = asString(payload.model) || null;\n\n  if (type !== \"response_item\") return;\n\n  const ptype = payload.type as string;\n\n  // Tool calls — collect the tool name.\n  if (ptype === \"function_call\" || ptype === \"custom_tool_call\") {\n    const name = asString(payload.name);\n    if (name && !acc.toolNames.includes(name)) acc.toolNames.push(name);\n    return;\n  }\n\n  if (ptype !== \"message\") return;\n\n  const role = payload.role;\n  // developer/system/tool roles carry sandbox boilerplate — not user-visible turns.\n  if (role !== \"user\" && role !== \"assistant\") return;\n\n  const text = extractCodexText(payload.content);\n  if (!text) return;\n\n  const sender = role as MessageSender;\n  acc.messageCount++;\n  acc.lastMessageSender = sender;\n\n  const snapshot: MessageSnapshot = { text: text.slice(0, 200), timestamp: ts };\n  if (sender === \"user\") {\n    if (!acc.firstUser) acc.firstUser = snapshot;\n    acc.lastUser = snapshot;\n  } else {\n    acc.lastAssistant = snapshot;\n  }\n\n  if (acc.previewLength < tier.previewMax) {\n    acc.previewParts.push(text);\n    acc.previewLength += text.length;\n  }\n  if (acc.snippetLength < tier.snippetMax) {\n    const remaining = tier.snippetMax - acc.snippetLength;\n    const chunk = text.length > remaining ? text.slice(0, remaining) : text;\n    acc.snippetParts.push(chunk);\n    acc.snippetLength += chunk.length;\n  }\n}\n\nexport function finalizeCodexMeta(\n  acc: CodexAccumulator,\n  filePath: string,\n  account: string,\n  tier: ContentTier,\n): ConversationMeta | null {\n  if (acc.messageCount === 0) return null;\n\n  const sessionId = acc.sessionId || basename(filePath, \".jsonl\");\n  const projectPath = acc.cwd;\n  // Treat a session with tool calls but no plain back-and-forth as task-shaped.\n  const kind: \"conversation\" | \"task\" =\n    acc.lastAssistant === null && acc.toolNames.length > 0 ? \"task\" : \"conversation\";\n\n  return {\n    id: filePath,\n    filePath,\n    provider: CODEX_CLI_PROVIDER,\n    kind,\n    externalSessionId: acc.sessionId || undefined,\n    sessionId,\n    sessionName: \"\",\n    projectPath,\n    projectName: getShortProjectName(projectPath),\n    account,\n    timestamp: acc.latestTimestamp || new Date().toISOString(),\n    messageCount: acc.messageCount,\n    lastMessageSender: acc.lastMessageSender,\n    preview: acc.previewParts.join(\" \").slice(0, tier.previewMax),\n    contentSnippet: acc.snippetParts.join(\" \"),\n    gitBranch: acc.gitBranch,\n    model: acc.model,\n    isSubagent: false,\n    parentSessionId: null,\n    isTeammate: false,\n    teamName: null,\n    toolNames: acc.toolNames,\n    firstMessage: acc.firstUser,\n    lastMessage: acc.lastAssistant ?? acc.lastUser,\n    lastPrompt: acc.lastUser?.text || undefined,\n  };\n}\n\nfunction getShortProjectName(fullPath: string): string {\n  return fullPath.split(\"/\").filter(Boolean).slice(-3).join(\"/\");\n}\n\n// Full conversation parse for a Codex rollout session — the Codex analogue of\n// parseConversation(). Streams the file, emitting one ConversationMessage per\n// user/assistant message item. Used by getConversation()/getConversationPage()\n// when the resolved meta is a codex-cli conversation.\nexport async function parseCodexConversation(\n  filePath: string,\n  account: string,\n): Promise<Conversation | null> {\n  const log = getLogger();\n  const messages: ConversationMessage[] = [];\n  const textParts: string[] = [];\n  let sessionId = \"\";\n  let cwd = \"\";\n  let latestTimestamp = \"\";\n  let lastUserText = \"\";\n\n  const rl = createInterface({ input: createReadStream(filePath), crlfDelay: Infinity });\n  try {\n    for await (const line of rl) {\n      if (!line.trim()) continue;\n      let entry: Record<string, unknown>;\n      try {\n        entry = JSON.parse(line);\n      } catch {\n        continue;\n      }\n      const ts = asString(entry.timestamp);\n      if (ts && (!latestTimestamp || ts > latestTimestamp)) latestTimestamp = ts;\n      const payload = entry.payload as Record<string, unknown> | undefined;\n      if (!payload || typeof payload !== \"object\") continue;\n\n      if (entry.type === \"session_meta\") {\n        if (!sessionId) sessionId = asString(payload.id);\n        if (!cwd) cwd = asString(payload.cwd);\n        continue;\n      }\n      if (entry.type !== \"response_item\" || payload.type !== \"message\") continue;\n      const role = payload.role;\n      if (role !== \"user\" && role !== \"assistant\") continue;\n      const text = extractCodexText(payload.content);\n      if (!text) continue;\n      messages.push({ role: role as MessageSender, text, timestamp: ts });\n      textParts.push(text);\n      if (role === \"user\") lastUserText = text;\n    }\n  } catch (err) {\n    log.warn({ filePath, err }, \"parseCodexConversation: read failed\");\n    return null;\n  }\n\n  if (messages.length === 0) return null;\n\n  return {\n    id: filePath,\n    filePath,\n    projectPath: cwd,\n    projectName: getShortProjectName(cwd),\n    sessionId: sessionId || basename(filePath, \".jsonl\"),\n    sessionName: \"\",\n    messages,\n    fullText: textParts.join(\" \"),\n    timestamp: latestTimestamp || new Date().toISOString(),\n    messageCount: messages.length,\n    account,\n    lastPrompt: lastUserText || undefined,\n  };\n}\n","const SYSTEM_TAGS = [\n  \"system-reminder\",\n  \"command-name\",\n  \"command-message\",\n  \"command-args\",\n  \"ide_selection\",\n  \"ide_opened_file\",\n  \"local-command-stdout\",\n  \"local-command-caveat\",\n  \"retrieval_status\",\n  \"task_id\",\n  \"task_type\",\n  \"task-id\",\n  \"task-notification\",\n  \"fast_mode_info\",\n  \"persisted-output\",\n  \"tool_use_error\",\n  \"user-prompt-submit-hook\",\n  \"thinking\",\n  \"ask_user\",\n  \"teammate-message\",\n];\n\nconst SYSTEM_TAG_RE = new RegExp(`<(${SYSTEM_TAGS.join(\"|\")})[^>]*>[\\\\s\\\\S]*?<\\\\/\\\\1>`, \"g\");\n\nexport function cleanSystemTags(text: string): string {\n  return text\n    .replace(SYSTEM_TAG_RE, \"\")\n    .replace(/[^\\S\\n]+/g, \" \")\n    .replace(/\\n{3,}/g, \"\\n\\n\")\n    .trim();\n}\n","import type { ContentTier, ConversationMeta } from \"../types\";\n\n// A scanner provider knows how to discover and parse one local conversation-log\n// format into the shared ConversationMeta model. The reducer triplet\n// (createEmptyAccumulator / reduceEntry / finalize) is the same fold used by a\n// full streamed parse and — by design — a future offset-resumed incremental\n// parse, since the accumulator is plain serializable state. See\n// metadata-reducer.ts for the Threadbase implementation this mirrors.\nexport interface ScannerProvider<Acc = unknown> {\n  name: ScannerProviderName;\n\n  // Discover candidate files for this provider under the given roots. Roots are\n  // already absolute. Returns one entry per file worth parsing.\n  discover(roots: string[]): Promise<DiscoveredConversationFile[]>;\n\n  // Cheap structural sniff: does this file look like this provider's format?\n  // `sample` is the first few lines (newline-joined). Used so a single roots\n  // list can be shared across providers without misclassifying files.\n  canParse(filePath: string, sample: string): boolean;\n\n  createEmptyAccumulator(): Acc;\n\n  // Fold one already-JSON.parsed line into the accumulator, in place. Must never\n  // throw on an unknown entry shape — ignore what it doesn't understand.\n  reduceEntry(acc: Acc, entry: Record<string, unknown>, tier: ContentTier): void;\n\n  // Build the ConversationMeta from the accumulator, or null if no messages.\n  finalize(acc: Acc, filePath: string, account: string, tier: ContentTier): ConversationMeta | null;\n}\n\nexport type ScannerProviderName = \"claude-code\" | \"codex-cli\";\n\nexport const CLAUDE_CODE_PROVIDER = \"claude-code\" as const;\nexport const CODEX_CLI_PROVIDER = \"codex-cli\" as const;\n\nexport interface DiscoveredConversationFile {\n  filePath: string;\n  account: string;\n}\n","import fg from \"fast-glob\";\nimport { stat } from \"fs/promises\";\nimport { getLogger } from \"./logger\";\n\nexport interface DiscoveredFile {\n  filePath: string;\n  account: string;\n}\n\nconst EXCLUDED_SEGMENTS = [\"/memory/\", \"/tool-results/\"];\n\n// stat() is cheap and IO-bound, so a large history scans much faster when the\n// calls run concurrently rather than one-at-a-time. Cap concurrency well under\n// typical fd limits.\nconst STAT_CONCURRENCY = 32;\n\nexport async function discoverJsonlFiles(\n  dirs: { projectsDir: string; account: string }[],\n  onProgress?: (found: number) => void,\n): Promise<DiscoveredFile[]> {\n  const log = getLogger();\n  const results: DiscoveredFile[] = [];\n\n  for (const { projectsDir, account } of dirs) {\n    let filePaths: string[];\n    try {\n      filePaths = await fg(\"**/*.jsonl\", {\n        cwd: projectsDir,\n        absolute: true,\n        dot: false,\n      });\n    } catch (err) {\n      log.warn({ projectsDir, account, err }, \"discovery: glob failed\");\n      continue;\n    }\n\n    // Filter out excluded directory segments\n    const filtered = filePaths.filter((fp) => !EXCLUDED_SEGMENTS.some((seg) => fp.includes(seg)));\n\n    // Filter out empty files. Stat concurrently in bounded chunks; chunk order\n    // is preserved and intra-chunk order follows the input, so discovery order\n    // is stable (downstream sorts anyway).\n    let kept = 0;\n    let skippedEmpty = 0;\n    let skippedInaccessible = 0;\n    for (let i = 0; i < filtered.length; i += STAT_CONCURRENCY) {\n      const chunk = filtered.slice(i, i + STAT_CONCURRENCY);\n      const statted = await Promise.all(\n        chunk.map(async (filePath) => {\n          try {\n            const s = await stat(filePath);\n            return { filePath, size: s.size };\n          } catch (err) {\n            log.warn({ filePath, err }, \"discovery: stat failed\");\n            return { filePath, size: -1 };\n          }\n        }),\n      );\n      for (const { filePath, size } of statted) {\n        if (size < 0) {\n          skippedInaccessible++;\n        } else if (size > 0) {\n          results.push({ filePath, account });\n          kept++;\n        } else {\n          skippedEmpty++;\n        }\n      }\n    }\n\n    log.debug(\n      {\n        projectsDir,\n        account,\n        globMatches: filePaths.length,\n        afterExclusions: filtered.length,\n        kept,\n        skippedEmpty,\n        skippedInaccessible,\n      },\n      \"discovery: directory scanned\",\n    );\n\n    onProgress?.(results.length);\n  }\n\n  log.debug({ totalFiles: results.length, dirs: dirs.length }, \"discovery: complete\");\n  return results;\n}\n","import { basename, dirname, join } from \"path\";\nimport {\n  collectToolNames,\n  extractTextContent,\n  extractThinking,\n  extractToolUseBlocks,\n  isOnlyToolResultContent,\n  isTeammateContent,\n} from \"../parser\";\nimport { CLAUDE_CODE_PROVIDER } from \"../providers/provider\";\nimport type { ContentTier, ConversationMeta, MessageSender, MessageSnapshot } from \"../types\";\n\n// Serializable fold state for incremental metadata indexing. parseMeta()'s\n// per-line loop is expressed as reduceLine(state, entry); finalizeMeta(state)\n// produces the ConversationMeta. Because the state is plain JSON, it can be\n// persisted in conversation_files.reducer_state and resumed when a file grows,\n// so an append only needs to fold the newly-read lines.\nexport interface ReducerState {\n  sessionId: string;\n  sessionName: string;\n  latestTimestamp: string;\n  cwd: string;\n  teamName: string;\n  model: string | null;\n  messageCount: number;\n  // Count of messages parseConversation() would produce — broader than\n  // messageCount (also counts tool_use-only and thinking-only lines). Used as\n  // the page total for bounded reads, since metadata messageCount differs.\n  pageMessageCount: number;\n  lastMessageSender: MessageSender;\n  isTeammate: boolean;\n  firstUserSeen: boolean;\n  firstMessage: MessageSnapshot | null;\n  lastMessage: MessageSnapshot | null;\n  lastPrompt: string;\n  toolNames: string[];\n  previewParts: string[];\n  snippetParts: string[];\n  previewLength: number;\n  snippetLength: number;\n  badJsonLines: number;\n}\n\nexport function initialReducerState(): ReducerState {\n  return {\n    sessionId: \"\",\n    sessionName: \"\",\n    latestTimestamp: \"\",\n    cwd: \"\",\n    teamName: \"\",\n    model: null,\n    messageCount: 0,\n    lastMessageSender: \"user\",\n    isTeammate: false,\n    firstUserSeen: false,\n    firstMessage: null,\n    lastMessage: null,\n    lastPrompt: \"\",\n    pageMessageCount: 0,\n    toolNames: [],\n    previewParts: [],\n    snippetParts: [],\n    previewLength: 0,\n    snippetLength: 0,\n    badJsonLines: 0,\n  };\n}\n\n// Fold one already-parsed JSONL entry into the state, mutating it in place.\n// Mirrors parseMeta()'s loop body exactly so a full reduce equals a streamed\n// parseMeta. `entry` is the JSON.parse() of one non-empty line.\nexport function reduceLine(\n  state: ReducerState,\n  entry: Record<string, unknown>,\n  tier: ContentTier,\n): void {\n  if (entry.cwd && !state.cwd) state.cwd = entry.cwd as string;\n  if (entry.sessionId && !state.sessionId) state.sessionId = entry.sessionId as string;\n  if (entry.slug && !state.sessionName) state.sessionName = entry.slug as string;\n  if (entry.teamName && !state.teamName) state.teamName = entry.teamName as string;\n  if (entry.timestamp) {\n    const ts = entry.timestamp as string;\n    if (!state.latestTimestamp || ts > state.latestTimestamp) state.latestTimestamp = ts;\n  }\n\n  const type = entry.type as string;\n\n  if (type === \"last-prompt\") {\n    if (entry.lastPrompt && !state.lastPrompt) state.lastPrompt = entry.lastPrompt as string;\n    return;\n  }\n\n  // file-history-snapshot and other non-message entries are excluded.\n  if (type !== \"user\" && type !== \"assistant\") return;\n  if (entry.isMeta) return;\n\n  const msg = entry.message as Record<string, unknown> | undefined;\n\n  if (state.model === null && msg?.model) state.model = msg.model as string;\n\n  if (type === \"user\" && !state.firstUserSeen) {\n    state.firstUserSeen = true;\n    if (isTeammateContent(msg?.content)) state.isTeammate = true;\n  }\n\n  const content = extractTextContent(msg?.content);\n  const hasToolUseResult = type === \"user\" && entry.toolUseResult != null;\n  const isOnlyToolResult = hasToolUseResult && isOnlyToolResultContent(msg?.content);\n\n  const toolSet = new Set(state.toolNames);\n  collectToolNames(msg?.content, toolSet);\n  state.toolNames = Array.from(toolSet);\n\n  // Count messages the same way parseConversation does, so bounded paging has a\n  // correct total. (Broader than messageCount: includes tool_use-only and\n  // thinking-only lines.)\n  const toolUseBlocks = extractToolUseBlocks(msg?.content);\n  const thinking = type === \"assistant\" ? extractThinking(msg?.content) : null;\n  const hasThinking = !!(thinking?.content || thinking?.signature);\n  if (content || isOnlyToolResult || toolUseBlocks.length > 0 || hasThinking) {\n    state.pageMessageCount++;\n  }\n\n  if (content || isOnlyToolResult) {\n    state.messageCount++;\n    state.lastMessageSender = type as MessageSender;\n\n    if (content) {\n      const ts = (entry.timestamp as string) || \"\";\n      if (!state.firstMessage) state.firstMessage = { text: content.slice(0, 200), timestamp: ts };\n      state.lastMessage = { text: content.slice(0, 200), timestamp: ts };\n\n      if (state.previewLength < tier.previewMax) {\n        state.previewParts.push(content);\n        state.previewLength += content.length;\n      }\n      if (state.snippetLength < tier.snippetMax) {\n        const remaining = tier.snippetMax - state.snippetLength;\n        const chunk = content.length > remaining ? content.slice(0, remaining) : content;\n        state.snippetParts.push(chunk);\n        state.snippetLength += chunk.length;\n      }\n    }\n  }\n}\n\n// Build the ConversationMeta from accumulated state, or null when no messages\n// were seen — matching parseMeta()'s final shape exactly.\nexport function finalizeMeta(\n  state: ReducerState,\n  filePath: string,\n  account: string,\n  tier: ContentTier,\n): ConversationMeta | null {\n  if (state.messageCount === 0) return null;\n\n  const isSubagent = filePath.includes(\"/subagents/\");\n  let parentSessionId: string | null = null;\n  if (isSubagent) {\n    const uuidDir = dirname(dirname(filePath));\n    parentSessionId = join(dirname(uuidDir), `${basename(uuidDir)}.jsonl`);\n  }\n\n  const projectPath = state.cwd;\n  return {\n    id: filePath,\n    filePath,\n    provider: CLAUDE_CODE_PROVIDER,\n    sessionId: state.sessionId || basename(filePath, \".jsonl\"),\n    sessionName: state.sessionName,\n    projectPath,\n    projectName: getShortProjectName(projectPath),\n    account,\n    timestamp: state.latestTimestamp || new Date().toISOString(),\n    messageCount: state.messageCount,\n    lastMessageSender: state.lastMessageSender,\n    preview: state.previewParts.join(\" \").slice(0, tier.previewMax),\n    contentSnippet: state.snippetParts.join(\" \"),\n    gitBranch: null,\n    model: state.model,\n    isSubagent,\n    parentSessionId,\n    isTeammate: state.isTeammate,\n    teamName: state.teamName || null,\n    toolNames: state.toolNames,\n    firstMessage: state.firstMessage,\n    lastMessage: state.lastMessage,\n    lastPrompt: state.lastPrompt || undefined,\n  };\n}\n\nfunction getShortProjectName(fullPath: string): string {\n  const parts = fullPath.split(\"/\").filter(Boolean);\n  return parts.slice(-3).join(\"/\");\n}\n","import { createReadStream } from \"fs\";\nimport { basename } from \"path\";\nimport { createInterface } from \"readline\";\nimport { getLogger } from \"./logger\";\nimport { applyTeamInfo, initialConvState, reduceConvLine } from \"./persistent/conversation-reducer\";\nimport { finalizeMeta, initialReducerState, reduceLine } from \"./persistent/metadata-reducer\";\nimport { cleanSystemTags } from \"./tags\";\nimport type {\n  ContentTier,\n  Conversation,\n  ConversationMessage,\n  ConversationMeta,\n  TeamInfo,\n  ToolResultBlock,\n  ToolUseBlock,\n  TurnDuration,\n} from \"./types\";\n\nexport async function parseMeta(\n  filePath: string,\n  account: string,\n  tier: ContentTier,\n): Promise<ConversationMeta | null> {\n  const log = getLogger();\n  log.trace({ filePath, account, tier: tier.name }, \"parseMeta: start\");\n\n  // Stream the whole file through the same per-line fold the incremental\n  // indexer uses, so a full parse and an append-then-resume produce identical\n  // metadata by construction.\n  const state = initialReducerState();\n  const fileStream = createReadStream(filePath);\n  const rl = createInterface({ input: fileStream, crlfDelay: Infinity });\n\n  try {\n    for await (const line of rl) {\n      if (!line.trim()) continue;\n      let entry: Record<string, unknown>;\n      try {\n        entry = JSON.parse(line);\n      } catch {\n        state.badJsonLines++;\n        continue;\n      }\n      reduceLine(state, entry, tier);\n    }\n  } catch (err) {\n    log.warn({ filePath, err }, \"parseMeta: read failed\");\n    return null;\n  }\n\n  if (state.badJsonLines > 0) {\n    log.warn(\n      { filePath, badJsonLines: state.badJsonLines },\n      \"parseMeta: skipped malformed JSON lines\",\n    );\n  }\n\n  const meta = finalizeMeta(state, filePath, account, tier);\n  if (!meta) log.trace({ filePath }, \"parseMeta: no messages\");\n  return meta;\n}\n\nexport async function parseConversation(\n  filePath: string,\n  account: string,\n): Promise<Conversation | null> {\n  const log = getLogger();\n  log.trace({ filePath, account }, \"parseConversation: start\");\n  const messages: ConversationMessage[] = [];\n  let badJsonLines = 0;\n  const textParts: string[] = [];\n  const turnDurations: TurnDuration[] = [];\n\n  // The message line→message reduction lives in reduceConvLine (shared with the\n  // bounded page reader). turn_duration collection is parseConversation-only\n  // (pages don't need it), so it stays inline here.\n  const state = initialConvState();\n\n  const fileStream = createReadStream(filePath);\n  const rl = createInterface({ input: fileStream, crlfDelay: Infinity });\n\n  try {\n    for await (const line of rl) {\n      if (!line.trim()) continue;\n\n      let entry: Record<string, unknown>;\n      try {\n        entry = JSON.parse(line);\n      } catch {\n        badJsonLines++;\n        continue;\n      }\n\n      if (\n        entry.type === \"system\" &&\n        entry.subtype === \"turn_duration\" &&\n        typeof entry.durationMs === \"number\"\n      ) {\n        turnDurations.push({\n          durationMs: entry.durationMs as number,\n          messageCount: (entry.messageCount as number) || 0,\n          uuid: entry.uuid as string | undefined,\n        });\n        continue;\n      }\n\n      const message = reduceConvLine(state, entry);\n      if (message) {\n        messages.push(message);\n        if (message.text) textParts.push(message.text);\n      }\n    }\n  } catch (err) {\n    log.warn({ filePath, err }, \"parseConversation: read failed\");\n    return null;\n  }\n\n  if (badJsonLines > 0) {\n    log.warn({ filePath, badJsonLines }, \"parseConversation: skipped malformed JSON lines\");\n  }\n\n  if (messages.length === 0) {\n    log.trace({ filePath }, \"parseConversation: no messages\");\n    return null;\n  }\n\n  log.debug({ filePath, messageCount: messages.length }, \"parseConversation: complete\");\n  applyTeamInfo(messages, state);\n\n  return {\n    id: filePath,\n    filePath,\n    projectPath: state.cwd,\n    projectName: getShortProjectName(state.cwd),\n    sessionId: state.sessionId || basename(filePath, \".jsonl\"),\n    sessionName: state.sessionName,\n    messages,\n    fullText: textParts.join(\" \"),\n    timestamp: state.latestTimestamp || new Date().toISOString(),\n    messageCount: messages.length,\n    account,\n    turnDurations: turnDurations.length > 0 ? turnDurations : undefined,\n    lastPrompt: state.lastPrompt || undefined,\n  };\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────\n\nexport function extractTextContent(content: unknown): string {\n  if (!content) return \"\";\n  if (typeof content === \"string\") return cleanSystemTags(content);\n  if (Array.isArray(content)) {\n    return content\n      .map((item) => {\n        if (typeof item === \"string\") return item;\n        if (item?.type === \"text\" && item?.text) return item.text;\n        if (item?.type === \"tool_result\" && typeof item?.content === \"string\") return item.content;\n        return \"\";\n      })\n      .filter(Boolean)\n      .map(cleanSystemTags)\n      .join(\" \");\n  }\n  return \"\";\n}\n\nexport function extractToolUseNames(content: unknown): string[] {\n  if (!Array.isArray(content)) return [];\n  return content\n    .filter((item) => item?.type === \"tool_use\" && item?.name)\n    .map((item) => item.name as string);\n}\n\nexport function extractToolUseBlocks(content: unknown): ToolUseBlock[] {\n  if (!Array.isArray(content)) return [];\n  return content\n    .filter((item) => item?.type === \"tool_use\" && item?.name && item?.id)\n    .map((item) => ({\n      id: item.id as string,\n      name: item.name as string,\n      input: (item.input as Record<string, unknown>) || {},\n    }));\n}\n\nconst TOOL_NAME_TO_TYPE: Record<string, ToolResultBlock[\"type\"]> = {\n  Edit: \"edit\",\n  Write: \"write\",\n  Read: \"read\",\n  Bash: \"bash\",\n  Grep: \"grep\",\n  Glob: \"glob\",\n  Agent: \"taskAgent\",\n  TaskCreate: \"taskCreate\",\n  TaskUpdate: \"taskUpdate\",\n};\n\nexport function extractToolResultBlocks(\n  content: unknown,\n  pendingToolUses: Map<string, ToolUseBlock>,\n): ToolResultBlock[] {\n  if (!Array.isArray(content)) return [];\n  return content\n    .filter((item) => item?.type === \"tool_result\" && item?.tool_use_id)\n    .map((item) => {\n      const toolName = pendingToolUses.get(item.tool_use_id as string)?.name ?? \"\";\n      return {\n        toolUseId: item.tool_use_id as string,\n        type: TOOL_NAME_TO_TYPE[toolName] ?? \"generic\",\n        content:\n          typeof item.content === \"string\"\n            ? { text: item.content as string }\n            : ((item.content as Record<string, unknown>) ?? {}),\n        isError: typeof item.is_error === \"boolean\" ? item.is_error : undefined,\n      };\n    });\n}\n\nexport function collectToolNames(content: unknown, toolSet: Set<string>): void {\n  if (!Array.isArray(content)) return;\n  for (const item of content) {\n    if (item?.type === \"tool_use\" && item?.name) {\n      toolSet.add(item.name as string);\n    }\n  }\n}\n\nexport function isOnlyToolResultContent(content: unknown): boolean {\n  if (!Array.isArray(content)) return false;\n  return content.length > 0 && content.every((item) => item?.type === \"tool_result\");\n}\n\nexport function isTeammateContent(content: unknown): boolean {\n  const raw =\n    typeof content === \"string\"\n      ? content\n      : Array.isArray(content)\n        ? content\n            .map((item) =>\n              typeof item === \"string\" ? item : item?.type === \"text\" ? (item.text ?? \"\") : \"\",\n            )\n            .join(\"\")\n        : \"\";\n  return raw.includes(\"<teammate-message\");\n}\n\nexport function extractThinking(content: unknown): { content: string; signature: string } {\n  if (!Array.isArray(content)) return { content: \"\", signature: \"\" };\n  const blocks = content.filter((item) => item?.type === \"thinking\");\n  return {\n    content: blocks\n      .map((b) => b.thinking as string)\n      .filter(Boolean)\n      .join(\"\\n\\n\"),\n    signature: blocks\n      .map((b) => b.signature as string)\n      .filter(Boolean)\n      .join(\"\"),\n  };\n}\n\nexport function hasImageBlocks(content: unknown): boolean {\n  if (!Array.isArray(content)) return false;\n  return content.some(\n    (item) =>\n      item?.type === \"image\" &&\n      (item?.source?.type === \"base64\" || item?.file?.base64 !== undefined),\n  );\n}\n\nexport function parseTeammateMessageTag(content: string): TeamInfo | null {\n  const match = content.match(/<teammate-message\\s+([^>]*)>/);\n  if (!match) return null;\n  const attrs = match[1];\n  const id = attrs.match(/teammate_id=\"([^\"]*)\"/)?.[1];\n  if (!id) return null;\n  const summary = attrs.match(/summary=\"([^\"]*)\"/)?.[1];\n  const color = attrs.match(/color=\"([^\"]*)\"/)?.[1];\n  return { teammateId: id, summary, color };\n}\n\nfunction getShortProjectName(fullPath: string): string {\n  const parts = fullPath.split(\"/\").filter(Boolean);\n  return parts.slice(-3).join(\"/\");\n}\n","import {\n  extractTextContent,\n  extractThinking,\n  extractToolResultBlocks,\n  extractToolUseBlocks,\n  extractToolUseNames,\n  hasImageBlocks,\n  isOnlyToolResultContent,\n  parseTeammateMessageTag,\n} from \"../parser\";\nimport type {\n  AttachmentSidecar,\n  ConversationMessage,\n  MessageMetadata,\n  MessageSender,\n  TeamInfo,\n  ToolUseBlock,\n} from \"../types\";\n\n// Resumable, serializable state for the conversation line→message reduction.\n// Mirrors parseConversation()'s loop so a full reduce equals a streamed parse,\n// and so a bounded page read can resume an *equivalent* parse from a checkpoint\n// by restoring the cross-line state (pending tool_use blocks + team info).\nexport interface ConvReducerState {\n  cwd: string;\n  sessionId: string;\n  sessionName: string;\n  latestTimestamp: string;\n  lastPrompt: string;\n  // id -> tool_use block, so a later tool_result line resolves its tool type.\n  pendingToolUses: Record<string, ToolUseBlock>;\n  // teamName -> info, collected as lines are read and applied to messages.\n  teamInfo: Record<string, TeamInfo>;\n}\n\nexport function initialConvState(): ConvReducerState {\n  return {\n    cwd: \"\",\n    sessionId: \"\",\n    sessionName: \"\",\n    latestTimestamp: \"\",\n    lastPrompt: \"\",\n    pendingToolUses: {},\n    teamInfo: {},\n  };\n}\n\n// Fold one JSONL entry. Returns the produced ConversationMessage (its message\n// index is the count of messages emitted so far), or null if the line produced\n// no message. Mutates `state` (header fields + cross-line maps).\nexport function reduceConvLine(\n  state: ConvReducerState,\n  entry: Record<string, unknown>,\n): ConversationMessage | null {\n  if (entry.cwd && !state.cwd) state.cwd = entry.cwd as string;\n  if (entry.sessionId && !state.sessionId) state.sessionId = entry.sessionId as string;\n  if (entry.slug && !state.sessionName) state.sessionName = entry.slug as string;\n  if (entry.timestamp) {\n    const ts = entry.timestamp as string;\n    if (!state.latestTimestamp || ts > state.latestTimestamp) state.latestTimestamp = ts;\n  }\n\n  const type = entry.type as string;\n\n  if (type === \"last-prompt\") {\n    if (entry.lastPrompt && !state.lastPrompt) state.lastPrompt = entry.lastPrompt as string;\n    return null;\n  }\n  // system (incl. turn_duration), file-history-snapshot, etc. produce no message.\n  if (type !== \"user\" && type !== \"assistant\") return null;\n  if (entry.isMeta) return null;\n\n  const msg = entry.message as Record<string, unknown> | undefined;\n\n  const toolUseBlocks = extractToolUseBlocks(msg?.content);\n  for (const block of toolUseBlocks) state.pendingToolUses[block.id] = block;\n\n  const hasToolUseResult = type === \"user\" && entry.toolUseResult != null;\n  const isToolResultOnly = hasToolUseResult && isOnlyToolResultContent(msg?.content);\n  const content = extractTextContent(msg?.content);\n  const thinking = type === \"assistant\" ? extractThinking(msg?.content) : null;\n  const hasThinking = !!(thinking?.content || thinking?.signature);\n\n  if (!(content || isToolResultOnly || toolUseBlocks.length > 0 || hasThinking)) return null;\n\n  const metadata: MessageMetadata = {};\n  if (msg?.model) metadata.model = msg.model as string;\n  if (msg?.stop_reason !== undefined) metadata.stopReason = msg.stop_reason as string | null;\n  if (entry.gitBranch) metadata.gitBranch = entry.gitBranch as string;\n  if (entry.version) metadata.version = entry.version as string;\n\n  const usage = msg?.usage as Record<string, number> | undefined;\n  if (usage) {\n    if (usage.input_tokens) metadata.inputTokens = usage.input_tokens;\n    if (usage.output_tokens) metadata.outputTokens = usage.output_tokens;\n    if (usage.cache_read_input_tokens) metadata.cacheReadTokens = usage.cache_read_input_tokens;\n    if (usage.cache_creation_input_tokens)\n      metadata.cacheCreationTokens = usage.cache_creation_input_tokens;\n  }\n\n  const toolUseNames = extractToolUseNames(msg?.content);\n  if (toolUseNames.length > 0) metadata.toolUses = toolUseNames;\n  if (toolUseBlocks.length > 0) metadata.toolUseBlocks = toolUseBlocks;\n\n  if (isToolResultOnly) {\n    const pending = new Map(Object.entries(state.pendingToolUses));\n    const toolResultBlocks = extractToolResultBlocks(msg?.content, pending);\n    if (toolResultBlocks.length > 0) metadata.toolResults = toolResultBlocks;\n  }\n\n  if (entry.teamName) {\n    metadata.teamName = entry.teamName as string;\n    if (!state.teamInfo[metadata.teamName] && content) {\n      const info = parseTeammateMessageTag(content);\n      if (info) state.teamInfo[metadata.teamName] = info;\n    }\n  }\n\n  const thinkingContent = thinking?.content || undefined;\n  const thinkingSignature = thinking?.signature || undefined;\n  const hasMetadata = Object.keys(metadata).length > 0;\n\n  return {\n    role: type as MessageSender,\n    text: content || \"\",\n    timestamp: (entry.timestamp as string) || \"\",\n    uuid: (entry.uuid as string) || undefined,\n    metadata: hasMetadata ? metadata : undefined,\n    isToolResult: isToolResultOnly || undefined,\n    isThinking: thinkingContent || thinkingSignature ? true : undefined,\n    thinkingContent,\n    thinkingSignature,\n    parentUuid: entry.parentUuid !== undefined ? (entry.parentUuid as string | null) : undefined,\n    requestId: type === \"assistant\" ? (entry.requestId as string | undefined) : undefined,\n    promptId: type === \"user\" ? (entry.promptId as string | undefined) : undefined,\n    isSidechain: typeof entry.isSidechain === \"boolean\" ? entry.isSidechain : undefined,\n    permissionMode: type === \"user\" ? (entry.permissionMode as string | undefined) : undefined,\n    hasImages: hasImageBlocks(msg?.content) || undefined,\n    attachment:\n      entry.attachment !== undefined ? (entry.attachment as AttachmentSidecar) : undefined,\n  };\n}\n\n// Back-apply collected team info to a set of messages (the post-pass\n// parseConversation does). Safe to call on a window: teamInfo for a given name\n// is stable once first seen, so a window restored from a checkpoint that\n// carries earlier teamInfo gets the same result.\nexport function applyTeamInfo(messages: ConversationMessage[], state: ConvReducerState): void {\n  if (Object.keys(state.teamInfo).length === 0) return;\n  for (const m of messages) {\n    const name = m.metadata?.teamName;\n    if (name && state.teamInfo[name] && m.metadata) m.metadata.teamInfo = state.teamInfo[name];\n  }\n}\n","import { discoverJsonlFiles } from \"../discovery\";\nimport {\n  finalizeMeta,\n  initialReducerState,\n  type ReducerState,\n  reduceLine,\n} from \"../persistent/metadata-reducer\";\nimport type { ContentTier, ConversationMeta } from \"../types\";\nimport {\n  CLAUDE_CODE_PROVIDER,\n  type DiscoveredConversationFile,\n  type ScannerProvider,\n} from \"./provider\";\n\n// The existing Claude/Threadbase format, expressed as a provider. All behavior\n// is the already-shared reducer (metadata-reducer.ts) — no logic is duplicated\n// here. Discovery is delegated to discoverJsonlFiles; the scanner passes the\n// profiles' projects dirs as roots paired with their account ids.\nexport class ThreadbaseProvider implements ScannerProvider<ReducerState> {\n  readonly name = CLAUDE_CODE_PROVIDER;\n\n  // Roots are passed as \"<projectsDir>\\0<account>\" so the scanner can carry the\n  // per-root account through the shared interface. The scanner builds these.\n  async discover(roots: string[]): Promise<DiscoveredConversationFile[]> {\n    const dirs = roots.map((r) => {\n      const [projectsDir, account = \"default\"] = r.split(\"\\0\");\n      return { projectsDir, account };\n    });\n    return discoverJsonlFiles(dirs);\n  }\n\n  // Threadbase JSONL has top-level type \"user\"/\"assistant\" with a cwd/sessionId.\n  canParse(_filePath: string, sample: string): boolean {\n    for (const line of sample.split(\"\\n\")) {\n      if (!line.trim()) continue;\n      try {\n        const e = JSON.parse(line) as Record<string, unknown>;\n        if (e.type === \"user\" || e.type === \"assistant\") return true;\n        // Codex's distinctive top-level types — definitively not us.\n        if (e.type === \"session_meta\" || e.type === \"response_item\") return false;\n      } catch {}\n    }\n    return false;\n  }\n\n  createEmptyAccumulator(): ReducerState {\n    return initialReducerState();\n  }\n\n  reduceEntry(acc: ReducerState, entry: Record<string, unknown>, tier: ContentTier): void {\n    reduceLine(acc, entry, tier);\n  }\n\n  finalize(\n    acc: ReducerState,\n    filePath: string,\n    account: string,\n    tier: ContentTier,\n  ): ConversationMeta | null {\n    // finalizeMeta already tags provider: \"claude-code\".\n    return finalizeMeta(acc, filePath, account, tier);\n  }\n}\n","import { EventEmitter } from \"events\";\nimport { closeSync, openSync, readSync, statSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { join } from \"path\";\nimport { LRUCache } from \"./cache\";\nimport { discoverJsonlFiles } from \"./discovery\";\nimport {\n  applyAccountFilter,\n  applyIncludeFilter,\n  applyPagination,\n  applyProjectFilter,\n  applySinceFilter,\n  applySort,\n  parseSinceCutoff,\n} from \"./filters\";\nimport { readGitBranch } from \"./git\";\nimport { SearchIndexer } from \"./indexer\";\nimport { getLogger } from \"./logger\";\nimport { parseConversation, parseMeta } from \"./parser\";\nimport { classify } from \"./persistent/cursor\";\nimport { PersistentEngine } from \"./persistent/index-engine\";\nimport { getProjectsDir, loadProfiles } from \"./profiles\";\nimport { CodexCliProvider, parseCodexConversation } from \"./providers/codex-cli\";\nimport { parseMetaWithProvider } from \"./providers/parse\";\nimport {\n  CLAUDE_CODE_PROVIDER,\n  CODEX_CLI_PROVIDER,\n  type ScannerProvider,\n} from \"./providers/provider\";\nimport { ThreadbaseProvider } from \"./providers/threadbase\";\nimport { generateMatches } from \"./search-matches\";\nimport { resolveTier } from \"./tiers\";\nimport type {\n  ContentTier,\n  Conversation,\n  ConversationMeta,\n  ConversationPage,\n  GetConversationOptions,\n  GetConversationPageOptions,\n  GroupedConversations,\n  Profile,\n  ScanOptions,\n  ScanResult,\n  SearchOptions,\n  SearchResult,\n  SingleFilePage,\n  TreeConversation,\n} from \"./types\";\nimport { FileWatcher } from \"./watcher/file-watcher\";\nimport { type IndexJob, IndexQueue } from \"./watcher/index-queue\";\n\nconst BATCH_SIZE = 12;\nconst DEFAULT_CONFIG_PATH = \"~/.config/threadbase-scanner\";\n\n// Default persistent-index location. Overridable via TB_SCANNER_DB (used by\n// tests for isolation, and handy for pointing at an alternate DB in ops).\nfunction defaultDbPath(): string {\n  return process.env.TB_SCANNER_DB ?? join(homedir(), \".config\", \"threadbase-scanner\", \"index.db\");\n}\n\nexport interface PersistentConfig {\n  dbPath?: string;\n  // Write a portable <file>.idx.json sidecar next to each indexed JSONL for\n  // debugging/portability/recovery. Off by default. SQLite stays canonical.\n  sidecar?: boolean;\n}\n\nexport interface ConversationScannerOptions {\n  metadataCacheSize?: number;\n  conversationCacheSize?: number;\n  // SQLite-backed persistent index. Enabled by default (at DEFAULT_DB_PATH).\n  // Pass `false` for the legacy in-memory path (no native dependency, no DB\n  // file). Pass `{ dbPath }` to override the database location.\n  persistent?: false | PersistentConfig;\n}\n\nexport interface WatchOptions {\n  profiles?: Profile[];\n  // Watcher debounce window (ms). Default 400.\n  debounceMs?: number;\n  // Periodic full rescan as a correctness fallback for missed FS events.\n  // Default 60_000ms; set 0 to disable.\n  periodicMs?: number;\n}\n\n// Emitted after the index changes for one file. `meta` is the fresh metadata,\n// or null when the file was removed/emptied (deleted from the index).\nexport interface ScannerChangeEvent {\n  filePath: string;\n  account: string;\n  meta: ConversationMeta | null;\n  reason: IndexJob[\"reason\"];\n}\n\nexport class ConversationScanner {\n  private metadataCache: Map<string, ConversationMeta> = new Map();\n  private conversationLRU: LRUCache<string, Conversation>;\n  // session_id is NOT unique, so this maps a sessionId to every active meta that\n  // carries it. Resolution picks deterministically (newest timestamp, then path\n  // ascending) so dropping one file never hides another with the same id.\n  private sessionIdIndex: Map<string, ConversationMeta[]> = new Map();\n  private projects: Set<string> = new Set();\n  private indexer: SearchIndexer = new SearchIndexer();\n  // Tier the most recent scan() ran with, so refreshFile() re-parses a single\n  // file at the same content depth. Defaults to the standard tier.\n  private lastTier: ContentTier = resolveTier(\"standard\");\n\n  // null when persistent mode is disabled (legacy in-memory path). Lazily\n  // opened on first use so merely constructing a scanner never touches disk.\n  private readonly dbPath: string | null;\n  private readonly sidecarEnabled: boolean;\n  private engineInstance: PersistentEngine | null = null;\n\n  private emitter = new EventEmitter();\n  private watcher: FileWatcher | null = null;\n  private queue: IndexQueue | null = null;\n  private periodicTimer: ReturnType<typeof setInterval> | null = null;\n\n  constructor(options?: ConversationScannerOptions) {\n    this.conversationLRU = new LRUCache<string, Conversation>(options?.conversationCacheSize ?? 5);\n    if (options?.persistent === false) {\n      this.dbPath = null;\n      this.sidecarEnabled = false;\n    } else {\n      this.dbPath = options?.persistent?.dbPath ?? defaultDbPath();\n      this.sidecarEnabled = options?.persistent?.sidecar ?? false;\n    }\n  }\n\n  private get persistent(): boolean {\n    return this.dbPath !== null;\n  }\n\n  private engine(): PersistentEngine {\n    if (!this.engineInstance) {\n      this.engineInstance = new PersistentEngine(this.dbPath as string, {\n        sidecar: this.sidecarEnabled,\n      });\n    }\n    return this.engineInstance;\n  }\n\n  // Release the SQLite connection. No-op in legacy mode. Safe to call\n  // repeatedly. Stops the watcher first if one is running; call unwatch()\n  // explicitly beforehand if you need to await watcher teardown.\n  close(): void {\n    if (this.watcher || this.queue || this.periodicTimer) void this.unwatch();\n    this.engineInstance?.close();\n    this.engineInstance = null;\n  }\n\n  async scan(options: ScanOptions = {}): Promise<ScanResult> {\n    const profiles = await this.resolveProfiles(options.profiles);\n    const activeProfiles = profiles.filter((p) => p.enabled && p.scanHistory !== false);\n    this.lastTier = resolveTier(options.tier ?? \"standard\", options.tiers);\n\n    if (this.persistent) {\n      return this.scanPersistent(activeProfiles, options);\n    }\n    return this.scanInMemory(activeProfiles, options);\n  }\n\n  // SQLite-backed scan: (re)index changed files into the DB, then query all\n  // active metas and run the identical filter/sort/view/paginate pipeline as\n  // the in-memory path — guaranteeing an identical ScanResult shape.\n  private async scanPersistent(\n    activeProfiles: Profile[],\n    options: ScanOptions,\n  ): Promise<ScanResult> {\n    const log = getLogger();\n    const startedAt = Date.now();\n    const engine = this.engine();\n\n    const { scanned } = await engine.indexAll(activeProfiles, options);\n    const allMetas = engine.allActive();\n\n    const { conversations, total } = this.finalize(allMetas, options);\n    log.info(\n      { scanned, kept: allMetas.length, filteredTotal: total, elapsedMs: Date.now() - startedAt },\n      \"scan: complete (persistent)\",\n    );\n    return { conversations, total, scanned };\n  }\n\n  // Apply include/project/account/since filters, sort, view transform, and\n  // pagination. Shared by both backends so results never diverge.\n  private finalize(\n    allMetas: ConversationMeta[],\n    options: ScanOptions,\n  ): { conversations: ScanResult[\"conversations\"]; total: number } {\n    let filtered = allMetas;\n    if (options.include && options.include !== \"all\") {\n      filtered = applyIncludeFilter(filtered, options.include);\n    }\n    if (options.project) filtered = applyProjectFilter(filtered, options.project);\n    if (options.account) filtered = applyAccountFilter(filtered, options.account);\n    if (options.since) filtered = applySinceFilter(filtered, options.since);\n\n    filtered = applySort(filtered, options.sort ?? \"recent\");\n    const total = filtered.length;\n    const conversations = this.transformView(filtered, options);\n\n    if (Array.isArray(conversations)) {\n      const limit = options.limit ?? 50;\n      const offset = options.offset ?? 0;\n      return { conversations: applyPagination(conversations, limit, offset).items, total };\n    }\n    return { conversations, total };\n  }\n\n  private async scanInMemory(activeProfiles: Profile[], options: ScanOptions): Promise<ScanResult> {\n    const log = getLogger();\n    const startedAt = Date.now();\n    const tier = this.lastTier;\n\n    log.info(\n      {\n        activeProfiles: activeProfiles.length,\n        tier: tier.name,\n        sort: options.sort ?? \"recent\",\n        include: options.include ?? \"all\",\n        view: options.view ?? \"flat\",\n      },\n      \"scan: start\",\n    );\n\n    // Clear caches\n    this.metadataCache.clear();\n    this.conversationLRU.clear();\n    this.sessionIdIndex.clear();\n    this.projects.clear();\n    this.indexer.clear();\n\n    const files = await this.discoverWithProviders(activeProfiles, options);\n    const totalFiles = files.length;\n    let scanned = 0;\n    let parseFailures = 0;\n\n    const allMetas: ConversationMeta[] = [];\n    // Memoize git-branch lookups per project path for the duration of this\n    // scan. readGitBranch walks the filesystem for .git/HEAD; without this it\n    // runs once per conversation (thousands of times) even though there are\n    // only a handful of distinct project roots. Scoped to one scan() call —\n    // branches can change between scans, so a longer-lived memo would go stale.\n    const gitBranchMemo = new Map<string, string | null>();\n    const resolveGitBranch = (projectPath: string): string | null => {\n      let branch = gitBranchMemo.get(projectPath);\n      if (branch === undefined) {\n        branch = readGitBranch(projectPath);\n        gitBranchMemo.set(projectPath, branch);\n      }\n      return branch;\n    };\n    const { statCache } = options;\n    for (let i = 0; i < files.length; i += BATCH_SIZE) {\n      const batch = files.slice(i, i + BATCH_SIZE);\n      const results = await Promise.all(\n        batch.map(async ({ filePath, account, provider }) => {\n          if (statCache) {\n            const cached = statCache.get(filePath);\n            if (cached) {\n              try {\n                const s = statSync(filePath);\n                if (s.mtimeMs === cached.stat.mtimeMs && s.size === cached.stat.size) {\n                  return cached.meta;\n                }\n              } catch {\n                // file disappeared — fall through to parse which will return null\n              }\n            }\n          }\n          try {\n            const meta = await parseMetaWithProvider(provider, filePath, account, tier);\n            // The provider may already know its branch (Codex reads it from\n            // session_meta). Only walk the filesystem when it doesn't.\n            if (meta && meta.gitBranch === null && meta.projectPath) {\n              meta.gitBranch = resolveGitBranch(meta.projectPath);\n            }\n            return meta;\n          } catch (err) {\n            parseFailures++;\n            log.warn({ filePath, account, provider: provider.name, err }, \"scan: parse threw\");\n            return null;\n          }\n        }),\n      );\n\n      const batchMetas: ConversationMeta[] = [];\n      for (const meta of results) {\n        if (meta && meta.messageCount > 0) {\n          this.metadataCache.set(meta.id, meta);\n          this.addToSessionIndex(meta);\n          this.projects.add(meta.projectPath);\n          allMetas.push(meta);\n          batchMetas.push(meta);\n          this.indexer.addDocument(meta);\n        }\n      }\n\n      if (batchMetas.length > 0) {\n        options.onBatch?.(batchMetas);\n      }\n\n      scanned += batch.length;\n      log.debug({ scanned, totalFiles, batchKept: batchMetas.length }, \"scan: batch complete\");\n      options.onProgress?.(scanned, totalFiles);\n    }\n\n    const { conversations, total } = this.finalize(allMetas, options);\n\n    const elapsedMs = Date.now() - startedAt;\n    log.info(\n      {\n        totalFiles,\n        scanned,\n        kept: allMetas.length,\n        filteredTotal: total,\n        parseFailures,\n        elapsedMs,\n      },\n      \"scan: complete\",\n    );\n\n    return { conversations, total, scanned };\n  }\n\n  async search(query: string, options: SearchOptions = {}): Promise<SearchResult[]> {\n    const log = getLogger();\n    log.debug({ query, indexSize: this.indexer.getDocumentCount() }, \"search: start\");\n\n    let results: SearchResult[];\n    if (this.persistent) {\n      // SQLite FTS5 is the persistent search engine. Index once if the DB is\n      // empty (mirroring the in-memory \"scan on first search\" contract), then\n      // query FTS directly — no in-memory index to warm.\n      const engine = this.engine();\n      if (engine.conversations.count() === 0) {\n        log.debug(\"search: persistent index empty, triggering scan\");\n        const profiles = await this.resolveProfiles(options.profiles);\n        const activeProfiles = profiles.filter((p) => p.enabled && p.scanHistory !== false);\n        await engine.indexAll(activeProfiles, { ...options, limit: undefined, offset: undefined });\n      }\n      const metas = engine.searchMetas(query, (options.limit ?? 50) * 2);\n      results = query.trim()\n        ? metas.map((meta) => ({ meta, score: 1, matches: generateMatches(meta, query) }))\n        : metas.map((meta) => ({\n            meta,\n            score: 1,\n            matches: [{ field: \"timestamp\", snippet: meta.preview }],\n          }));\n    } else {\n      if (this.indexer.getDocumentCount() === 0) {\n        log.debug(\"search: index empty, triggering scan\");\n        await this.scan({ ...options, limit: undefined, offset: undefined });\n      }\n      results = this.indexer.search(query, {\n        fields: options.fields,\n        limit: (options.limit ?? 50) * 2,\n      });\n    }\n\n    if (options.include && options.include !== \"all\") {\n      results = results.filter((r) => {\n        switch (options.include) {\n          case \"conversations\":\n            return !r.meta.isSubagent && !r.meta.isTeammate;\n          case \"subagents\":\n            return r.meta.isSubagent;\n          case \"teammates\":\n            return r.meta.isTeammate;\n          default:\n            return true;\n        }\n      });\n    }\n    if (options.project) {\n      const lower = options.project.toLowerCase();\n      results = results.filter(\n        (r) =>\n          r.meta.projectPath.toLowerCase().includes(lower) ||\n          r.meta.projectName.toLowerCase().includes(lower),\n      );\n    }\n    if (options.account) {\n      results = results.filter((r) => r.meta.account === options.account);\n    }\n    if (options.provider) {\n      results = results.filter(\n        (r) => (r.meta.provider ?? CLAUDE_CODE_PROVIDER) === options.provider,\n      );\n    }\n    if (options.since) {\n      const cutoff = parseSinceCutoff(options.since);\n      results = results.filter((r) => new Date(r.meta.timestamp).getTime() >= cutoff.getTime());\n    }\n\n    const limit = options.limit ?? 50;\n    const offset = options.offset ?? 0;\n    const sliced = results.slice(offset, offset + limit);\n    log.debug({ query, matched: results.length, returned: sliced.length }, \"search: complete\");\n    return sliced;\n  }\n\n  async getConversation(\n    id: string,\n    _options?: GetConversationOptions,\n  ): Promise<Conversation | null> {\n    const log = getLogger();\n    const cached = this.conversationLRU.get(id);\n    if (cached) {\n      log.debug({ id }, \"getConversation: cache hit\");\n      return cached;\n    }\n\n    const meta = this.persistent\n      ? this.engine().getByIdOrSession(id)\n      : (this.metadataCache.get(id) ?? this.resolveSessionId(id));\n    if (!meta) {\n      log.debug({ id }, \"getConversation: not found in metadata\");\n      return null;\n    }\n\n    log.debug({ id, filePath: meta.filePath }, \"getConversation: cache miss, parsing\");\n    try {\n      const conversation =\n        meta.provider === CODEX_CLI_PROVIDER\n          ? await parseCodexConversation(meta.filePath, meta.account)\n          : await parseConversation(meta.filePath, meta.account);\n      if (conversation) {\n        this.conversationLRU.set(id, conversation);\n      }\n      return conversation;\n    } catch (err) {\n      log.warn({ id, filePath: meta.filePath, err }, \"getConversation: parse failed\");\n      return null;\n    }\n  }\n\n  // Return one bounded window of a conversation's messages plus the total\n  // message count, so a caller can serve the last page and scroll back without\n  // holding the whole conversation itself.\n  //\n  // The window is `[max(0, beforeIndex - limit), beforeIndex)` in chronological\n  // order; `beforeIndex` defaults to `total` (the newest page). `fromIndex` is\n  // the window's start index, so the caller can derive `has_more_older`\n  // (fromIndex > 0). Returns null when the id can't be resolved/parsed — the\n  // same contract as getConversation.\n  //\n  // Persistent mode: a true bounded read — the engine seeks from the nearest\n  // checkpoint and parses only the requested window (checkpoints are built\n  // lazily for large conversations). Windowed message indices are proven\n  // identical to parseConversation().messages.slice(...) by the paged-reader\n  // equivalence test.\n  //\n  // Legacy mode: parse-once-then-slice via getConversation (cached in the LRU),\n  // which is identical by construction.\n  async getConversationPage(\n    id: string,\n    options: GetConversationPageOptions,\n  ): Promise<ConversationPage | null> {\n    if (this.persistent) {\n      return this.engine().getPage(id, options);\n    }\n\n    const conversation = await this.getConversation(id);\n    if (!conversation) return null;\n\n    const { messages } = conversation;\n    const total = messages.length;\n    const { limit } = options;\n    const beforeIndex = options.beforeIndex ?? total;\n\n    const fromIndex = Math.max(0, beforeIndex - limit);\n    const window = messages.slice(fromIndex, beforeIndex);\n\n    return { messages: window, total, fromIndex };\n  }\n\n  // Parse one JSONL file directly and slice a page window — without any prior\n  // scan() or metadata index. This is the cold-start fast path: a single\n  // conversation can be served from one file parse (~ms) instead of waiting\n  // for a full filesystem scan. The window is the same\n  // `[max(0, beforeIndex - limit), beforeIndex)` slice as getConversationPage,\n  // and the parsed Conversation is returned alongside so the caller can build\n  // the response meta (projectPath, timestamp, messageCount, …) without a\n  // second parse. Returns null when the file can't be parsed. `account` only\n  // feeds the conversation's account field; \"default\" is the single-profile\n  // fallback, matching refreshFile.\n  async parseSingleFilePage(\n    filePath: string,\n    account: string | undefined,\n    options: GetConversationPageOptions,\n  ): Promise<SingleFilePage | null> {\n    const conversation = await parseConversation(filePath, account ?? \"default\");\n    if (!conversation) return null;\n\n    const { messages } = conversation;\n    const total = messages.length;\n    const { limit } = options;\n    const beforeIndex = options.beforeIndex ?? total;\n\n    const fromIndex = Math.max(0, beforeIndex - limit);\n    const window = messages.slice(fromIndex, beforeIndex);\n\n    return { messages: window, total, fromIndex, conversation };\n  }\n\n  // Re-parse a single JSONL file and update every in-memory index in place —\n  // metadata cache, sessionId index, project set, search index — and evict the\n  // file's parsed conversation from the LRU so the next getConversation()\n  // re-reads it. This lets a long-lived scanner stay current with a file that\n  // grew after the initial scan() without paying for a full rescan.\n  //\n  // `account` defaults to the account already recorded for this file (the id\n  // is the file path), falling back to \"default\" for a file the scanner has\n  // not seen before. Returns the fresh ConversationMeta, or null when the file\n  // no longer parses (missing/empty) — in which case any prior entry for it is\n  // dropped from all indexes.\n  async refreshFile(filePath: string, account?: string): Promise<ConversationMeta | null> {\n    const log = getLogger();\n\n    if (this.persistent) {\n      const engine = this.engine();\n      const previous = engine.getByIdOrSession(filePath);\n      const resolvedAccount = account ?? previous?.account ?? \"default\";\n      const evict = (m: ConversationMeta | null) => {\n        if (!m) return;\n        this.conversationLRU.delete(m.id);\n        this.conversationLRU.delete(m.sessionId);\n      };\n      evict(previous);\n      // Resolve the provider so a Codex file refreshes through the Codex reducer\n      // rather than the Threadbase tail-read. Prefer stored metadata; fall back\n      // to a structural sniff for a file the index hasn't seen yet.\n      const provider = await this.resolveProviderForFile(filePath, previous);\n      const meta = await engine.indexFile(\n        filePath,\n        resolvedAccount,\n        this.lastTier.name,\n        undefined,\n        readGitBranch,\n        true,\n        provider,\n      );\n      evict(meta);\n      log.debug({ filePath, kept: !!meta }, \"refreshFile: updated persistent index\");\n      return meta;\n    }\n\n    const previous = this.metadataCache.get(filePath);\n    const resolvedAccount = account ?? previous?.account ?? \"default\";\n\n    let meta: ConversationMeta | null = null;\n    try {\n      meta = await parseMeta(filePath, resolvedAccount, this.lastTier);\n    } catch (err) {\n      log.warn({ filePath, err }, \"refreshFile: parseMeta threw\");\n      meta = null;\n    }\n\n    // The LRU is keyed by the id used at getConversation() time, which can be\n    // either the file-path id or the sessionId — evict both for the prior and\n    // refreshed metas so no stale parse survives.\n    const evict = (m: ConversationMeta | undefined | null) => {\n      if (!m) return;\n      this.conversationLRU.delete(m.id);\n      this.conversationLRU.delete(m.sessionId);\n    };\n    evict(previous);\n    evict(meta);\n\n    if (!meta || meta.messageCount === 0) {\n      if (previous) {\n        this.metadataCache.delete(previous.id);\n        this.removeFromSessionIndex(previous);\n        this.indexer.removeDocument(previous.id);\n      }\n      log.debug({ filePath }, \"refreshFile: dropped (no parseable messages)\");\n      return null;\n    }\n\n    meta.gitBranch = readGitBranch(meta.projectPath);\n\n    // A re-parse can change the sessionId mapping; clear the old entry first so\n    // we don't leave this file listed under a stale sessionId.\n    if (previous) this.removeFromSessionIndex(previous);\n    this.metadataCache.set(meta.id, meta);\n    this.addToSessionIndex(meta);\n    this.projects.add(meta.projectPath);\n    if (previous) {\n      this.indexer.updateDocument(meta);\n    } else {\n      this.indexer.addDocument(meta);\n    }\n\n    log.debug(\n      { filePath, messageCount: meta.messageCount },\n      \"refreshFile: updated in-memory indexes\",\n    );\n    return meta;\n  }\n\n  getMetadataCache(): Map<string, ConversationMeta> {\n    if (this.persistent) {\n      const map = new Map<string, ConversationMeta>();\n      for (const meta of this.engine().allActive()) map.set(meta.id, meta);\n      return map;\n    }\n    return this.metadataCache;\n  }\n\n  // Collision-safe sessionId lookup. session_id is NOT unique (the parser falls\n  // back to the file basename, and resumed/subagent sessions repeat ids), so\n  // getConversation(sessionId) is a convenience that resolves to one match;\n  // this returns every active conversation sharing the id, newest first.\n  getConversationsBySessionId(sessionId: string): ConversationMeta[] {\n    if (this.persistent) {\n      return this.engine().getAllBySessionId(sessionId);\n    }\n    return this.sortBySessionPriority(this.sessionIdIndex.get(sessionId) ?? []);\n  }\n\n  getProjects(): string[] {\n    const source = this.persistent ? this.engine().getProjects() : this.projects;\n    const normalized = new Set<string>();\n    for (const p of source) {\n      normalized.add(p.replace(/\\/+$/, \"\"));\n    }\n    return Array.from(normalized).sort();\n  }\n\n  // ── File watching (persistent mode only) ────────────────────────────────\n\n  // Subscribe to index changes. Events: \"change\" → ScannerChangeEvent,\n  // \"error\" → Error. Returns this for chaining.\n  on(event: \"change\", listener: (e: ScannerChangeEvent) => void): this;\n  on(event: \"error\", listener: (err: Error) => void): this;\n  on(event: string, listener: (...args: any[]) => void): this {\n    this.emitter.on(event, listener);\n    return this;\n  }\n\n  off(event: string, listener: (...args: any[]) => void): this {\n    this.emitter.off(event, listener);\n    return this;\n  }\n\n  // Start watching the active profiles' project dirs. A filesystem watcher\n  // feeds debounced, path-deduplicated index jobs through a single-writer\n  // queue; a periodic full rescan backstops any events the watcher misses\n  // (sleep/wake, network FS, restarts). Emits \"change\" per indexed file.\n  // Persistent mode only — throws in legacy mode (no durable index to update).\n  async watch(options: WatchOptions = {}): Promise<void> {\n    if (!this.persistent) {\n      throw new Error(\"watch() requires persistent mode; construct with persistent enabled\");\n    }\n    if (this.watcher) return; // already watching\n\n    const profiles = await this.resolveProfiles(options.profiles);\n    const activeProfiles = profiles.filter((p) => p.enabled && p.scanHistory !== false);\n\n    this.queue = new IndexQueue(async (job) => {\n      try {\n        // Create/change and delete both route through refreshFile: a removed\n        // file stat-fails or parses empty, so refreshFile drops its row and\n        // returns null. The index stays correct either way.\n        const meta = await this.refreshFile(job.filePath, job.account);\n        this.emitter.emit(\"change\", {\n          filePath: job.filePath,\n          account: job.account,\n          meta,\n          reason: job.reason,\n        } satisfies ScannerChangeEvent);\n      } catch (err) {\n        this.emitter.emit(\"error\", err instanceof Error ? err : new Error(String(err)));\n      }\n    });\n\n    this.watcher = new FileWatcher(\n      activeProfiles,\n      (e) => {\n        this.queue?.enqueue({\n          filePath: e.filePath,\n          account: e.account,\n          reason: \"watcher\",\n        });\n      },\n      { debounceMs: options.debounceMs },\n    );\n    await this.watcher.start();\n\n    const periodicMs = options.periodicMs ?? 60_000;\n    if (periodicMs > 0) {\n      this.periodicTimer = setInterval(() => {\n        void this.periodicReconcile(activeProfiles);\n      }, periodicMs);\n      // Don't keep the process alive solely for the rescan timer.\n      this.periodicTimer.unref?.();\n    }\n\n    getLogger().info({ profiles: activeProfiles.length, periodicMs }, \"watch: started\");\n  }\n\n  // Periodic correctness backstop: re-discover all files and enqueue them\n  // through the same queue the watcher uses, so any add/change the watcher\n  // missed still gets indexed and emits a \"change\" event. Vanished files\n  // (active in the DB but no longer on disk) are enqueued too — refreshFile\n  // drops them. Routing through the queue (not a direct scan) keeps event\n  // emission and single-writer serialization unified.\n  private async periodicReconcile(activeProfiles: Profile[]): Promise<void> {\n    if (!this.queue) return;\n    try {\n      const engine = this.engine();\n      const configDirs = activeProfiles.map((p) => ({\n        projectsDir: getProjectsDir(p),\n        account: p.id,\n      }));\n      const discovered = await discoverJsonlFiles(configDirs);\n      const seen = new Set<string>();\n      for (const { filePath, account } of discovered) {\n        seen.add(filePath);\n        // Only enqueue genuinely-changed files so an idle tick stays silent\n        // (no spurious \"change\" events for thousands of unchanged files).\n        const { change } = classify(filePath, engine.files.getByPath(filePath));\n        if (change !== \"unchanged\") {\n          this.queue.enqueue({ filePath, account, reason: \"periodic\" });\n        }\n      }\n      // Files in the index but gone from disk → enqueue so refreshFile drops them.\n      for (const path of engine.files.allActivePaths()) {\n        if (!seen.has(path)) {\n          this.queue.enqueue({ filePath: path, account: \"default\", reason: \"periodic\" });\n        }\n      }\n    } catch (err) {\n      this.emitter.emit(\"error\", err instanceof Error ? err : new Error(String(err)));\n    }\n  }\n\n  // Stop watching and drain any in-flight index jobs.\n  async unwatch(): Promise<void> {\n    if (this.periodicTimer) {\n      clearInterval(this.periodicTimer);\n      this.periodicTimer = null;\n    }\n    if (this.watcher) {\n      await this.watcher.stop();\n      this.watcher = null;\n    }\n    if (this.queue) {\n      await this.queue.onIdle();\n      this.queue = null;\n    }\n  }\n\n  // ── Provider plumbing (in-memory path) ──────────────────────────────────\n\n  // Build the flat parse worklist for the enabled providers. Threadbase\n  // discovers under the active profiles' project dirs; Codex discovers under\n  // the explicit codexRoots (opt-in — no default home scan).\n  private async discoverWithProviders(\n    activeProfiles: Profile[],\n    options: ScanOptions,\n  ): Promise<{ filePath: string; account: string; provider: ScannerProvider }[]> {\n    const enabled = options.providers ?? [CLAUDE_CODE_PROVIDER];\n    const work: { filePath: string; account: string; provider: ScannerProvider }[] = [];\n\n    if (enabled.includes(CLAUDE_CODE_PROVIDER)) {\n      const provider = new ThreadbaseProvider();\n      const roots = activeProfiles.map((p) => `${getProjectsDir(p)}\\0${p.id}`);\n      for (const f of await provider.discover(roots)) {\n        work.push({ ...f, provider });\n      }\n    }\n    if (enabled.includes(CODEX_CLI_PROVIDER) && (options.codexRoots?.length ?? 0) > 0) {\n      const provider = new CodexCliProvider();\n      for (const f of await provider.discover(options.codexRoots as string[])) {\n        work.push({ ...f, provider });\n      }\n    }\n    return work;\n  }\n\n  // Resolve which provider should (re)parse a file. Stored metadata wins; for a\n  // file the index has not seen, sniff the first lines with each non-Threadbase\n  // provider's canParse. Returns undefined for Threadbase (the engine's default\n  // tail-read path).\n  private async resolveProviderForFile(\n    filePath: string,\n    previous: ConversationMeta | null,\n  ): Promise<ScannerProvider | undefined> {\n    if (previous?.provider === CODEX_CLI_PROVIDER) return new CodexCliProvider();\n    if (previous?.provider) return undefined; // known Threadbase\n    let sample = \"\";\n    try {\n      const fd = openSync(filePath, \"r\");\n      try {\n        const buf = Buffer.alloc(8192);\n        const n = readSync(fd, buf, 0, buf.length, 0);\n        sample = buf.subarray(0, n).toString(\"utf8\");\n      } finally {\n        closeSync(fd);\n      }\n    } catch {\n      return undefined;\n    }\n    const codex = new CodexCliProvider();\n    if (codex.canParse(filePath, sample)) return codex;\n    return undefined;\n  }\n\n  private addToSessionIndex(meta: ConversationMeta): void {\n    const list = this.sessionIdIndex.get(meta.sessionId);\n    if (list) {\n      // Replace any existing entry for the same file (re-index), else append.\n      const i = list.findIndex((m) => m.id === meta.id);\n      if (i >= 0) list[i] = meta;\n      else list.push(meta);\n    } else {\n      this.sessionIdIndex.set(meta.sessionId, [meta]);\n    }\n  }\n\n  private removeFromSessionIndex(meta: ConversationMeta): void {\n    const list = this.sessionIdIndex.get(meta.sessionId);\n    if (!list) return;\n    const next = list.filter((m) => m.id !== meta.id);\n    if (next.length > 0) this.sessionIdIndex.set(meta.sessionId, next);\n    else this.sessionIdIndex.delete(meta.sessionId);\n  }\n\n  // Deterministic single-result sessionId resolution: newest timestamp first,\n  // tie-broken by absolute path ascending.\n  private resolveSessionId(sessionId: string): ConversationMeta | undefined {\n    return this.sortBySessionPriority(this.sessionIdIndex.get(sessionId) ?? [])[0];\n  }\n\n  private sortBySessionPriority(metas: ConversationMeta[]): ConversationMeta[] {\n    return [...metas].sort((a, b) => {\n      if (a.timestamp !== b.timestamp) return a.timestamp < b.timestamp ? 1 : -1;\n      return a.filePath < b.filePath ? -1 : a.filePath > b.filePath ? 1 : 0;\n    });\n  }\n\n  private async resolveProfiles(profiles?: Profile[]): Promise<Profile[]> {\n    // An explicit array (including an empty one) means \"use exactly these\" —\n    // `[]` scans zero profiles. Only an absent argument falls back to defaults.\n    // Treating `[]` as \"load defaults\" silently scanned the real ~/.claude\n    // history, which looked like a hang for callers isolating from it.\n    if (profiles) return profiles;\n    return loadProfiles(DEFAULT_CONFIG_PATH);\n  }\n\n  private transformView(\n    metas: ConversationMeta[],\n    options: ScanOptions,\n  ): ConversationMeta[] | TreeConversation[] | GroupedConversations {\n    switch (options.view) {\n      case \"tree\":\n        return this.toTree(metas);\n      case \"grouped\":\n        return this.toGrouped(metas);\n      default:\n        return metas;\n    }\n  }\n\n  private toTree(metas: ConversationMeta[]): TreeConversation[] {\n    const parents: TreeConversation[] = [];\n    const subagents: ConversationMeta[] = [];\n\n    for (const meta of metas) {\n      if (meta.isSubagent) {\n        subagents.push(meta);\n      } else {\n        parents.push({ ...meta, subagents: [] });\n      }\n    }\n\n    const parentById = new Map(parents.map((p) => [p.id, p]));\n    for (const sub of subagents) {\n      const parent = sub.parentSessionId ? parentById.get(sub.parentSessionId) : undefined;\n      if (parent) {\n        parent.subagents.push(sub);\n      } else {\n        parents.push({ ...sub, subagents: [] });\n      }\n    }\n\n    return parents;\n  }\n\n  private toGrouped(metas: ConversationMeta[]): GroupedConversations {\n    const groups: GroupedConversations = {};\n    for (const meta of metas) {\n      const key = meta.teamName || \"_default\";\n      if (!groups[key]) groups[key] = [];\n      groups[key].push(meta);\n    }\n    return groups;\n  }\n}\n","export class LRUCache<K, V> {\n  private map = new Map<K, V>();\n  private readonly capacity: number;\n\n  constructor(capacity: number) {\n    this.capacity = capacity;\n  }\n\n  get(key: K): V | undefined {\n    const value = this.map.get(key);\n    if (value === undefined) return undefined;\n    // Move to end (most recently used)\n    this.map.delete(key);\n    this.map.set(key, value);\n    return value;\n  }\n\n  set(key: K, value: V): void {\n    this.map.delete(key);\n    this.map.set(key, value);\n    if (this.map.size > this.capacity) {\n      const oldest = this.map.keys().next();\n      if (!oldest.done) this.map.delete(oldest.value);\n    }\n  }\n\n  has(key: K): boolean {\n    return this.map.has(key);\n  }\n\n  delete(key: K): boolean {\n    return this.map.delete(key);\n  }\n\n  clear(): void {\n    this.map.clear();\n  }\n\n  get size(): number {\n    return this.map.size;\n  }\n}\n","import { createHash } from \"crypto\";\nimport { closeSync, openSync, readSync, statSync } from \"fs\";\nimport type { FileRow } from \"./repositories/conversation-files.repo\";\n\nexport type FileChange = \"unchanged\" | \"appended\" | \"reindex\" | \"vanished\";\n\nexport interface FileStat {\n  size: number;\n  mtimeMs: number;\n}\n\n// Cheap content fingerprint: hash of the first + last 4KB plus the size. Lets\n// us detect a same-size in-place rewrite (e.g. a file replaced atomically)\n// without hashing an entire 200MB file. (Spec §9.4.)\nconst FP_BYTES = 4096;\n\nexport function fingerprint(filePath: string, size: number): string {\n  const hash = createHash(\"sha1\");\n  hash.update(String(size));\n  const fd = openSync(filePath, \"r\");\n  try {\n    const head = Buffer.alloc(Math.min(FP_BYTES, size));\n    if (head.length > 0) {\n      readSync(fd, head, 0, head.length, 0);\n      hash.update(head);\n    }\n    if (size > FP_BYTES) {\n      const tailLen = Math.min(FP_BYTES, size);\n      const tail = Buffer.alloc(tailLen);\n      readSync(fd, tail, 0, tailLen, size - tailLen);\n      hash.update(tail);\n    }\n  } finally {\n    closeSync(fd);\n  }\n  return hash.digest(\"hex\");\n}\n\n// Classify how a file changed relative to its persisted cursor row. Drives\n// whether the indexer skips, tail-reads from the cursor, or reindexes from 0.\n// (Spec §9.)\nexport function classify(\n  filePath: string,\n  existing: FileRow | undefined,\n): { change: FileChange; stat?: FileStat } {\n  let stat: FileStat;\n  try {\n    const s = statSync(filePath);\n    stat = { size: s.size, mtimeMs: s.mtimeMs };\n  } catch {\n    return { change: \"vanished\" };\n  }\n\n  if (!existing || existing.status !== \"active\" || existing.last_indexed_offset === 0) {\n    return { change: \"reindex\", stat };\n  }\n\n  // Smaller than where we left off → truncated/replaced. Reindex.\n  if (stat.size < existing.last_indexed_offset) {\n    return { change: \"reindex\", stat };\n  }\n\n  // Same size + same mtime → nothing to do.\n  if (stat.size === existing.size_bytes && stat.mtimeMs === existing.mtime_ms) {\n    return { change: \"unchanged\", stat };\n  }\n\n  // Same size but mtime moved → possible in-place rewrite. Fingerprint to be\n  // sure; a changed fingerprint means the bytes we already indexed are stale.\n  if (stat.size === existing.last_indexed_offset) {\n    const fp = fingerprint(filePath, stat.size);\n    if (existing.content_fingerprint && fp !== existing.content_fingerprint) {\n      return { change: \"reindex\", stat };\n    }\n    return { change: \"unchanged\", stat };\n  }\n\n  // Grew past the cursor → append-only fast path.\n  return { change: \"appended\", stat };\n}\n","import { createReadStream } from \"fs\";\nimport { createInterface } from \"readline\";\nimport { getLogger } from \"../logger\";\nimport type { ContentTier, ConversationMeta } from \"../types\";\nimport type { ScannerProvider } from \"./provider\";\n\n// Stream a file through a provider's reducer triplet. This is the same fold a\n// future offset-resumed incremental parse would run (createEmptyAccumulator →\n// reduceEntry per line → finalize), just starting from offset 0. Bad JSON lines\n// and unknown entry shapes are skipped, never fatal.\nexport async function parseMetaWithProvider(\n  provider: ScannerProvider,\n  filePath: string,\n  account: string,\n  tier: ContentTier,\n): Promise<ConversationMeta | null> {\n  const log = getLogger();\n  const acc = provider.createEmptyAccumulator();\n  const rl = createInterface({\n    input: createReadStream(filePath),\n    crlfDelay: Infinity,\n  });\n\n  try {\n    for await (const line of rl) {\n      if (!line.trim()) continue;\n      let entry: Record<string, unknown>;\n      try {\n        entry = JSON.parse(line);\n      } catch {\n        continue;\n      }\n      try {\n        provider.reduceEntry(acc, entry, tier);\n      } catch (err) {\n        // A provider reducer should never throw, but one bad line must not kill\n        // the whole file.\n        log.warn({ filePath, provider: provider.name, err }, \"provider reduce threw; line skipped\");\n      }\n    }\n  } catch (err) {\n    log.warn({ filePath, provider: provider.name, err }, \"provider parse: read failed\");\n    return null;\n  }\n\n  return provider.finalize(acc, filePath, account, tier);\n}\n","import type { ContentTier } from \"./types\";\n\nexport const DEFAULT_TIERS: Record<string, ContentTier> = {\n  standard: { name: \"standard\", previewMax: 200, snippetMax: 5_000 },\n  full: { name: \"full\", previewMax: 1_200, snippetMax: 50_000 },\n};\n\nexport function resolveTier(\n  tierName: string,\n  customTiers?: Record<string, ContentTier>,\n): ContentTier {\n  const tier = customTiers?.[tierName] ?? DEFAULT_TIERS[tierName];\n  if (!tier) {\n    throw new Error(\n      `Unknown tier \"${tierName}\". Available: ${Object.keys({ ...DEFAULT_TIERS, ...customTiers }).join(\", \")}`,\n    );\n  }\n  return tier;\n}\n","import Database from \"better-sqlite3\";\nimport { mkdirSync } from \"fs\";\nimport { dirname } from \"path\";\nimport { getLogger } from \"../logger\";\nimport { runMigrations } from \"./migrations\";\n\nexport type DB = Database.Database;\n\n// Open (creating if needed) the SQLite index at dbPath, apply WAL pragmas, and\n// run migrations. \":memory:\" is supported for tests.\nexport function openDatabase(dbPath: string): DB {\n  if (dbPath !== \":memory:\") {\n    mkdirSync(dirname(dbPath), { recursive: true });\n  }\n\n  const db = new Database(dbPath);\n  db.pragma(\"journal_mode = WAL\");\n  db.pragma(\"synchronous = NORMAL\");\n  db.pragma(\"temp_store = MEMORY\");\n  db.pragma(\"foreign_keys = ON\");\n\n  runMigrations(db);\n\n  getLogger().debug({ dbPath }, \"db: opened\");\n  return db;\n}\n","// Persistent index schema for @threadbase-sh/scanner.\n//\n// Embedded as a string (not a sibling .sql file) so it survives tsup bundling\n// into dist/ without runtime file I/O.\n//\n// One JSONL file == one conversation, so conversation_files.id maps 1:1 to\n// conversations.file_id.\n//\n// NOTE: session_id is intentionally NOT unique. parseMeta() falls back to the\n// file's basename when a line carries no sessionId, and resumed/subagent\n// sessions can repeat a sessionId across files. The stable unique key is the\n// file's absolute_path (and conversations.file_id).\n\n// Bumped whenever DDL below changes; drives migrations.ts via PRAGMA user_version.\nexport const SCHEMA_VERSION = 3;\n\nexport const SCHEMA_SQL = `\nCREATE TABLE IF NOT EXISTS conversation_files (\n  id INTEGER PRIMARY KEY AUTOINCREMENT,\n\n  absolute_path TEXT NOT NULL UNIQUE,\n  parent_dir TEXT NOT NULL,\n  file_name TEXT NOT NULL,\n\n  account TEXT NOT NULL DEFAULT 'default',\n\n  size_bytes INTEGER NOT NULL DEFAULT 0,\n  mtime_ms INTEGER NOT NULL DEFAULT 0,\n\n  last_indexed_offset INTEGER NOT NULL DEFAULT 0,\n  last_indexed_line INTEGER NOT NULL DEFAULT 0,\n\n  reducer_state TEXT,\n\n  content_fingerprint TEXT,\n\n  status TEXT NOT NULL DEFAULT 'active',\n\n  last_indexed_at TEXT,\n  created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,\n  updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,\n  deleted_at TEXT\n);\n\nCREATE INDEX IF NOT EXISTS idx_conversation_files_status ON conversation_files(status);\nCREATE INDEX IF NOT EXISTS idx_conversation_files_parent_dir ON conversation_files(parent_dir);\nCREATE INDEX IF NOT EXISTS idx_conversation_files_account ON conversation_files(account);\n\nCREATE TABLE IF NOT EXISTS conversations (\n  id INTEGER PRIMARY KEY AUTOINCREMENT,\n\n  file_id INTEGER NOT NULL UNIQUE,\n\n  source_path TEXT NOT NULL UNIQUE,\n  -- Which provider produced this row. Canonical identity is (provider,\n  -- source_path); session_id stays non-unique across providers too.\n  provider TEXT NOT NULL DEFAULT 'claude-code',\n  kind TEXT,\n  external_session_id TEXT,\n  session_id TEXT NOT NULL,\n  session_name TEXT,\n\n  project_path TEXT,\n  project_name TEXT,\n  account TEXT NOT NULL DEFAULT 'default',\n  branch TEXT,\n\n  preview TEXT,\n  content_snippet TEXT,\n\n  message_count INTEGER NOT NULL DEFAULT 0,\n  -- Count of messages parseConversation() produces (broader than message_count;\n  -- includes tool_use-only and thinking-only lines). The total for bounded paging.\n  page_message_count INTEGER NOT NULL DEFAULT 0,\n  last_message_sender TEXT NOT NULL DEFAULT 'user',\n  timestamp TEXT,\n\n  -- Monotonic write counter; the highest value is the most recently indexed\n  -- row. Drives last-writer-wins resolution for shared session_ids (matching\n  -- the in-memory sessionId map), at the sub-second precision updated_at lacks.\n  index_seq INTEGER NOT NULL DEFAULT 0,\n\n  first_sent_at TEXT,\n  first_sent_text TEXT,\n\n  last_sent_at TEXT,\n  last_sent_text TEXT,\n\n  model TEXT,\n  is_subagent INTEGER NOT NULL DEFAULT 0,\n  parent_session_id TEXT,\n  is_teammate INTEGER NOT NULL DEFAULT 0,\n  team_name TEXT,\n  tool_names_json TEXT,\n  last_prompt TEXT,\n\n  status TEXT NOT NULL DEFAULT 'active',\n\n  created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,\n  updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,\n\n  FOREIGN KEY (file_id) REFERENCES conversation_files(id)\n);\n\nCREATE INDEX IF NOT EXISTS idx_conversations_session_id ON conversations(session_id);\nCREATE INDEX IF NOT EXISTS idx_conversations_provider_session ON conversations(provider, session_id);\nCREATE INDEX IF NOT EXISTS idx_conversations_provider_recent ON conversations(provider, timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_conversations_provider_project_branch ON conversations(provider, project_path, branch);\nCREATE INDEX IF NOT EXISTS idx_conversations_recent ON conversations(timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_conversations_project_recent ON conversations(project_path, timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_conversations_project_branch_recent ON conversations(project_path, branch, timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_conversations_account_recent ON conversations(account, timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_conversations_subagent_recent ON conversations(is_subagent, timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_conversations_team_recent ON conversations(team_name, timestamp DESC);\n\n-- Full-text search index over conversation content + metadata. Kept separate\n-- from the metadata tables so list-screen queries stay small and fast.\n-- source_path is UNINDEXED (stored, not tokenized) and links back to a\n-- conversations row. One FTS row per conversation, replaced on each upsert.\nCREATE VIRTUAL TABLE IF NOT EXISTS conversation_messages_fts USING fts5(\n  source_path UNINDEXED,\n  content,\n  project_name,\n  session_id,\n  session_name,\n  account,\n  model,\n  branch,\n  tool_names,\n  tokenize = 'unicode61'\n);\n\n-- Seek index for large conversations: every N messages, record the byte offset\n-- where the next message's line begins plus the parser's cross-line state\n-- (pending tool_use blocks, team info) needed to resume an equivalent parse\n-- from that point. Lets getConversationPage() read a window near the end of a\n-- huge file without parsing from byte 0.\nCREATE TABLE IF NOT EXISTS message_checkpoints (\n  id INTEGER PRIMARY KEY AUTOINCREMENT,\n  source_path TEXT NOT NULL,\n  message_index INTEGER NOT NULL,\n  byte_offset INTEGER NOT NULL,\n  line_number INTEGER NOT NULL,\n  parser_state TEXT NOT NULL,\n  created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n\nCREATE INDEX IF NOT EXISTS idx_message_checkpoints_lookup\n  ON message_checkpoints(source_path, message_index);\n`;\n","import type { Database } from \"better-sqlite3\";\nimport { getLogger } from \"../logger\";\nimport { SCHEMA_SQL, SCHEMA_VERSION } from \"./schema\";\n\n// Minimal migration runner gated by PRAGMA user_version. The whole schema uses\n// CREATE TABLE/INDEX IF NOT EXISTS, so a fresh DB and an up-to-date DB both\n// no-op safely. When SCHEMA_VERSION bumps in the future, add ALTER statements\n// keyed on the stored version before stamping the new version.\nexport function runMigrations(db: Database): void {\n  const current = db.pragma(\"user_version\", { simple: true }) as number;\n  if (current >= SCHEMA_VERSION) return;\n\n  const log = getLogger();\n  log.info({ from: current, to: SCHEMA_VERSION }, \"migrations: applying\");\n\n  // v1 → v2: add provider columns to a pre-existing conversations table BEFORE\n  // running SCHEMA_SQL, because SCHEMA_SQL now creates indexes on those columns.\n  // CREATE TABLE IF NOT EXISTS can't add columns, so ALTER the existing one.\n  // Non-destructive: existing rows keep their data and default to 'claude-code'.\n  // Guarded on table existence so a fresh DB (table created by SCHEMA_SQL below)\n  // skips this entirely.\n  if (current >= 1 && current < 2 && tableExists(db, \"conversations\")) {\n    for (const [col, ddl] of [\n      [\n        \"provider\",\n        // Keep the historical DEFAULT 'threadbase' — v2→v3 below updates these rows.\n        \"ALTER TABLE conversations ADD COLUMN provider TEXT NOT NULL DEFAULT 'threadbase'\",\n      ],\n      [\"kind\", \"ALTER TABLE conversations ADD COLUMN kind TEXT\"],\n      [\"external_session_id\", \"ALTER TABLE conversations ADD COLUMN external_session_id TEXT\"],\n    ] as const) {\n      if (!hasColumn(db, \"conversations\", col)) db.exec(ddl);\n    }\n  }\n\n  // v2 → v3: rename provider 'threadbase' → 'claude-code'.\n  if (current >= 1 && current < 3 && tableExists(db, \"conversations\")) {\n    db.exec(\"UPDATE conversations SET provider = 'claude-code' WHERE provider = 'threadbase'\");\n  }\n\n  // Fresh DB and re-runs both no-op safely (CREATE ... IF NOT EXISTS). Creates\n  // any missing tables/indexes, including the new provider indexes.\n  db.exec(SCHEMA_SQL);\n\n  db.pragma(`user_version = ${SCHEMA_VERSION}`);\n}\n\nfunction tableExists(db: Database, table: string): boolean {\n  return (\n    db.prepare(\"SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?\").get(table) !==\n    undefined\n  );\n}\n\nfunction hasColumn(db: Database, table: string, column: string): boolean {\n  const cols = db.prepare(`PRAGMA table_info(${table})`).all() as { name: string }[];\n  return cols.some((c) => c.name === column);\n}\n","import { createReadStream } from \"fs\";\nimport type { ContentTier } from \"../types\";\nimport { type ReducerState, reduceLine } from \"./metadata-reducer\";\n\nexport interface TailReadResult {\n  // Byte offset of the first un-consumed byte (start of the trailing partial\n  // line, or EOF). Safe to persist as the next cursor.\n  newOffset: number;\n  newLine: number;\n  parsedLines: number;\n  badJsonLines: number;\n}\n\n// Stream a JSONL file from `startOffset` to EOF, folding each COMPLETE line into\n// `state`. A trailing line with no newline (a writer mid-append) is left\n// un-consumed: the offset is not advanced past it, so the next pass re-reads it\n// once it's complete. Offsets are byte offsets (Buffer.byteLength), never string\n// .length, so multibyte content stays aligned. (Spec §7.2–7.4.)\nexport async function tailReduce(\n  filePath: string,\n  startOffset: number,\n  startLine: number,\n  state: ReducerState,\n  tier: ContentTier,\n): Promise<TailReadResult> {\n  const stream = createReadStream(filePath, { start: startOffset, encoding: \"utf8\" });\n\n  let buffer = \"\";\n  let offset = startOffset;\n  let line = startLine;\n  let parsedLines = 0;\n\n  for await (const chunk of stream) {\n    buffer += chunk;\n    let nl: number;\n    // biome-ignore lint/suspicious/noAssignInExpressions: idiomatic line scan\n    while ((nl = buffer.indexOf(\"\\n\")) >= 0) {\n      const lineWithNewline = buffer.slice(0, nl + 1);\n      const text = lineWithNewline.trimEnd();\n      buffer = buffer.slice(nl + 1);\n\n      if (text.length > 0) {\n        try {\n          reduceLine(state, JSON.parse(text), tier);\n        } catch {\n          state.badJsonLines++;\n        }\n        parsedLines++;\n      }\n\n      offset += Buffer.byteLength(lineWithNewline, \"utf8\");\n      line++;\n    }\n  }\n\n  return { newOffset: offset, newLine: line, parsedLines, badJsonLines: state.badJsonLines };\n}\n","import { createReadStream } from \"fs\";\nimport type { ConversationMessage, ConversationPage } from \"../types\";\nimport {\n  applyTeamInfo,\n  type ConvReducerState,\n  initialConvState,\n  reduceConvLine,\n} from \"./conversation-reducer\";\nimport type { Checkpoint } from \"./repositories/checkpoints.repo\";\n\n// Snapshot the parser state every CHECKPOINT_INTERVAL messages.\nexport const CHECKPOINT_INTERVAL = 500;\n\n// Stream a JSONL file from `startOffset`, folding each complete line through the\n// conversation reducer. `onMessage` receives every produced message plus the\n// byte offset of the line that FOLLOWS it (a safe resume point) and the current\n// state. Returns the total messages produced from this offset.\nasync function streamMessages(\n  filePath: string,\n  startOffset: number,\n  startLine: number,\n  state: ConvReducerState,\n  // Return true to stop streaming (window filled).\n  onMessage: (message: ConversationMessage, nextByteOffset: number, nextLine: number) => boolean,\n): Promise<void> {\n  const stream = createReadStream(filePath, { start: startOffset, encoding: \"utf8\" });\n  let buffer = \"\";\n  let offset = startOffset;\n  let line = startLine;\n\n  for await (const chunk of stream) {\n    buffer += chunk;\n    let nl: number;\n    // biome-ignore lint/suspicious/noAssignInExpressions: idiomatic line scan\n    while ((nl = buffer.indexOf(\"\\n\")) >= 0) {\n      const lineWithNewline = buffer.slice(0, nl + 1);\n      const text = lineWithNewline.trimEnd();\n      buffer = buffer.slice(nl + 1);\n      offset += Buffer.byteLength(lineWithNewline, \"utf8\");\n      line += 1;\n\n      if (text.length === 0) continue;\n      let entry: Record<string, unknown>;\n      try {\n        entry = JSON.parse(text);\n      } catch {\n        continue;\n      }\n      const message = reduceConvLine(state, entry);\n      if (message && onMessage(message, offset, line)) {\n        stream.destroy();\n        return;\n      }\n    }\n  }\n}\n\n// Build checkpoints by streaming the whole file once. Each checkpoint captures\n// the byte offset + reducer state immediately AFTER message (k*interval - 1),\n// i.e. a clean resume point for message index k*interval.\nexport async function buildCheckpoints(\n  filePath: string,\n  interval = CHECKPOINT_INTERVAL,\n): Promise<Checkpoint[]> {\n  const checkpoints: Checkpoint[] = [];\n  const state = initialConvState();\n  let index = 0;\n\n  await streamMessages(filePath, 0, 0, state, (_msg, nextOffset, nextLine) => {\n    index += 1;\n    // After consuming `index` messages, if the next message index is a multiple\n    // of the interval, snapshot a resume point for it.\n    if (index % interval === 0) {\n      checkpoints.push({\n        messageIndex: index,\n        byteOffset: nextOffset,\n        lineNumber: nextLine,\n        state: structuredClone(state),\n      });\n    }\n    return false; // never stop early — we want the whole file\n  });\n\n  return checkpoints;\n}\n\n// Read a bounded message window [fromIndex, beforeIndex) plus the total message\n// count, seeking from the nearest checkpoint <= fromIndex. `total` requires\n// knowing the message count; callers pass it (from the indexed summary) so we\n// never scan the whole file just to count.\nexport async function readPage(\n  filePath: string,\n  total: number,\n  options: { beforeIndex?: number; limit: number },\n  floor: Checkpoint | null,\n): Promise<ConversationPage> {\n  const beforeIndex = options.beforeIndex ?? total;\n  const fromIndex = Math.max(0, beforeIndex - options.limit);\n\n  const state = floor ? structuredClone(floor.state) : initialConvState();\n  const startOffset = floor ? floor.byteOffset : 0;\n  const startLine = floor ? floor.lineNumber : 0;\n  let index = floor ? floor.messageIndex : 0;\n\n  const window: ConversationMessage[] = [];\n  await streamMessages(filePath, startOffset, startLine, state, (message) => {\n    const current = index;\n    index += 1;\n    if (current >= fromIndex && current < beforeIndex) window.push(message);\n    return index >= beforeIndex; // stop once the window is filled\n  });\n\n  applyTeamInfo(window, state);\n  return { messages: window, total, fromIndex };\n}\n","import type { Database } from \"better-sqlite3\";\nimport type { ConvReducerState } from \"../conversation-reducer\";\n\nexport interface Checkpoint {\n  messageIndex: number;\n  byteOffset: number;\n  lineNumber: number;\n  state: ConvReducerState;\n}\n\ninterface CheckpointRow {\n  message_index: number;\n  byte_offset: number;\n  line_number: number;\n  parser_state: string;\n}\n\n// Stores periodic seek points for a conversation so a page near the end of a\n// large file can be read without parsing from byte 0.\nexport class CheckpointsRepo {\n  constructor(private db: Database) {}\n\n  replaceAll(sourcePath: string, checkpoints: Checkpoint[]): void {\n    const tx = this.db.transaction(() => {\n      this.db.prepare(\"DELETE FROM message_checkpoints WHERE source_path = ?\").run(sourcePath);\n      const insert = this.db.prepare(\n        `INSERT INTO message_checkpoints\n           (source_path, message_index, byte_offset, line_number, parser_state)\n         VALUES (?, ?, ?, ?, ?)`,\n      );\n      for (const c of checkpoints) {\n        insert.run(sourcePath, c.messageIndex, c.byteOffset, c.lineNumber, JSON.stringify(c.state));\n      }\n    });\n    tx();\n  }\n\n  // The latest checkpoint at or before `messageIndex`, or null if none (read\n  // from the file start). Lets a page seek to the nearest prior anchor.\n  floor(sourcePath: string, messageIndex: number): Checkpoint | null {\n    const row = this.db\n      .prepare(\n        `SELECT message_index, byte_offset, line_number, parser_state\n         FROM message_checkpoints\n         WHERE source_path = ? AND message_index <= ?\n         ORDER BY message_index DESC LIMIT 1`,\n      )\n      .get(sourcePath, messageIndex) as CheckpointRow | undefined;\n    return row ? toCheckpoint(row) : null;\n  }\n\n  count(sourcePath: string): number {\n    return (\n      this.db\n        .prepare(\"SELECT COUNT(*) AS n FROM message_checkpoints WHERE source_path = ?\")\n        .get(sourcePath) as { n: number }\n    ).n;\n  }\n\n  remove(sourcePath: string): void {\n    this.db.prepare(\"DELETE FROM message_checkpoints WHERE source_path = ?\").run(sourcePath);\n  }\n}\n\nfunction toCheckpoint(row: CheckpointRow): Checkpoint {\n  return {\n    messageIndex: row.message_index,\n    byteOffset: row.byte_offset,\n    lineNumber: row.line_number,\n    state: JSON.parse(row.parser_state) as ConvReducerState,\n  };\n}\n","import type { Database } from \"better-sqlite3\";\nimport { basename, dirname } from \"path\";\n\n// One tracked JSONL source file + its incremental indexing cursor.\nexport interface FileRow {\n  id: number;\n  absolute_path: string;\n  parent_dir: string;\n  file_name: string;\n  account: string;\n  size_bytes: number;\n  mtime_ms: number;\n  last_indexed_offset: number;\n  last_indexed_line: number;\n  reducer_state: string | null;\n  content_fingerprint: string | null;\n  status: string;\n  last_indexed_at: string | null;\n}\n\nexport class ConversationFilesRepo {\n  constructor(private db: Database) {}\n\n  getByPath(absolutePath: string): FileRow | undefined {\n    return this.db\n      .prepare(\"SELECT * FROM conversation_files WHERE absolute_path = ?\")\n      .get(absolutePath) as FileRow | undefined;\n  }\n\n  // Insert a freshly-discovered file at offset 0; returns its row id. Existing\n  // path is left untouched (returns the existing id) so a re-discovery is safe.\n  ensure(absolutePath: string, account: string): number {\n    const existing = this.getByPath(absolutePath);\n    if (existing) return existing.id;\n\n    const info = this.db\n      .prepare(\n        `INSERT INTO conversation_files (absolute_path, parent_dir, file_name, account)\n         VALUES (?, ?, ?, ?)`,\n      )\n      .run(absolutePath, dirname(absolutePath), basename(absolutePath), account);\n    return Number(info.lastInsertRowid);\n  }\n\n  // Advance the cursor + persisted reducer state after a successful index pass.\n  updateCursor(\n    id: number,\n    fields: {\n      sizeBytes: number;\n      mtimeMs: number;\n      offset: number;\n      line: number;\n      reducerState: string | null;\n      fingerprint: string | null;\n      status?: string;\n    },\n  ): void {\n    this.db\n      .prepare(\n        `UPDATE conversation_files\n         SET size_bytes = ?, mtime_ms = ?, last_indexed_offset = ?, last_indexed_line = ?,\n             reducer_state = ?, content_fingerprint = ?, status = ?,\n             last_indexed_at = CURRENT_TIMESTAMP, updated_at = CURRENT_TIMESTAMP\n         WHERE id = ?`,\n      )\n      .run(\n        fields.sizeBytes,\n        fields.mtimeMs,\n        fields.offset,\n        fields.line,\n        fields.reducerState,\n        fields.fingerprint,\n        fields.status ?? \"active\",\n        id,\n      );\n  }\n\n  // Reset the cursor to 0 for a truncated/replaced file before a full reindex.\n  resetCursor(id: number): void {\n    this.db\n      .prepare(\n        `UPDATE conversation_files\n         SET last_indexed_offset = 0, last_indexed_line = 0, reducer_state = NULL,\n             status = 'needs_reindex', updated_at = CURRENT_TIMESTAMP\n         WHERE id = ?`,\n      )\n      .run(id);\n  }\n\n  setStatus(id: number, status: string): void {\n    const deletedAt = status === \"deleted\" ? \"CURRENT_TIMESTAMP\" : \"deleted_at\";\n    this.db\n      .prepare(\n        `UPDATE conversation_files\n         SET status = ?, deleted_at = ${deletedAt}, updated_at = CURRENT_TIMESTAMP\n         WHERE id = ?`,\n      )\n      .run(status, id);\n  }\n\n  allActivePaths(): string[] {\n    const rows = this.db\n      .prepare(\"SELECT absolute_path FROM conversation_files WHERE status != 'deleted'\")\n      .all() as { absolute_path: string }[];\n    return rows.map((r) => r.absolute_path);\n  }\n}\n","import type { Database } from \"better-sqlite3\";\nimport { CLAUDE_CODE_PROVIDER } from \"../../providers/provider\";\nimport type { ConversationMeta, MessageSender, ProviderName } from \"../../types\";\n\nexport interface ConversationRow {\n  id: number;\n  file_id: number;\n  source_path: string;\n  provider: string;\n  kind: string | null;\n  external_session_id: string | null;\n  session_id: string;\n  session_name: string | null;\n  project_path: string | null;\n  project_name: string | null;\n  account: string;\n  branch: string | null;\n  preview: string | null;\n  content_snippet: string | null;\n  message_count: number;\n  page_message_count: number;\n  last_message_sender: string;\n  timestamp: string | null;\n  first_sent_at: string | null;\n  first_sent_text: string | null;\n  last_sent_at: string | null;\n  last_sent_text: string | null;\n  model: string | null;\n  is_subagent: number;\n  parent_session_id: string | null;\n  is_teammate: number;\n  team_name: string | null;\n  tool_names_json: string | null;\n  last_prompt: string | null;\n  status: string;\n}\n\n// Row -> ConversationMeta. Must reproduce the exact in-memory shape so the\n// persistent and legacy paths return identical ScanResult/SearchResult objects.\nexport function rowToMeta(row: ConversationRow): ConversationMeta {\n  return {\n    id: row.source_path,\n    filePath: row.source_path,\n    provider: (row.provider as ProviderName) ?? CLAUDE_CODE_PROVIDER,\n    kind: (row.kind as ConversationMeta[\"kind\"]) ?? undefined,\n    externalSessionId: row.external_session_id ?? undefined,\n    sessionId: row.session_id,\n    sessionName: row.session_name ?? \"\",\n    projectPath: row.project_path ?? \"\",\n    projectName: row.project_name ?? \"\",\n    account: row.account,\n    timestamp: row.timestamp ?? \"\",\n    messageCount: row.message_count,\n    lastMessageSender: row.last_message_sender as MessageSender,\n    preview: row.preview ?? \"\",\n    contentSnippet: row.content_snippet ?? \"\",\n    gitBranch: row.branch,\n    model: row.model,\n    isSubagent: row.is_subagent === 1,\n    parentSessionId: row.parent_session_id,\n    isTeammate: row.is_teammate === 1,\n    teamName: row.team_name,\n    toolNames: row.tool_names_json ? (JSON.parse(row.tool_names_json) as string[]) : [],\n    firstMessage: row.first_sent_text\n      ? { text: row.first_sent_text, timestamp: row.first_sent_at ?? \"\" }\n      : null,\n    lastMessage: row.last_sent_text\n      ? { text: row.last_sent_text, timestamp: row.last_sent_at ?? \"\" }\n      : null,\n    lastPrompt: row.last_prompt ?? undefined,\n  };\n}\n\nexport class ConversationsRepo {\n  constructor(private db: Database) {}\n\n  // Upsert by file_id (1 file = 1 conversation). Keyed on the unique file_id so\n  // a re-index overwrites the prior summary in place.\n  upsert(fileId: number, meta: ConversationMeta, pageMessageCount = meta.messageCount): void {\n    this.db\n      .prepare(\n        `INSERT INTO conversations (\n           file_id, source_path, provider, kind, external_session_id,\n           session_id, session_name, project_path, project_name,\n           account, branch, preview, content_snippet, message_count, page_message_count,\n           last_message_sender,\n           timestamp, index_seq, first_sent_at, first_sent_text, last_sent_at, last_sent_text,\n           model, is_subagent, parent_session_id, is_teammate, team_name, tool_names_json,\n           last_prompt, status, updated_at\n         ) VALUES (\n           @file_id, @source_path, @provider, @kind, @external_session_id,\n           @session_id, @session_name, @project_path, @project_name,\n           @account, @branch, @preview, @content_snippet, @message_count, @page_message_count,\n           @last_message_sender,\n           @timestamp,\n           (SELECT COALESCE(MAX(index_seq), 0) + 1 FROM conversations),\n           @first_sent_at, @first_sent_text, @last_sent_at, @last_sent_text,\n           @model, @is_subagent, @parent_session_id, @is_teammate, @team_name, @tool_names_json,\n           @last_prompt, 'active', CURRENT_TIMESTAMP\n         )\n         ON CONFLICT(file_id) DO UPDATE SET\n           source_path = excluded.source_path,\n           provider = excluded.provider,\n           kind = excluded.kind,\n           external_session_id = excluded.external_session_id,\n           session_id = excluded.session_id,\n           session_name = excluded.session_name,\n           project_path = excluded.project_path,\n           project_name = excluded.project_name,\n           account = excluded.account,\n           branch = excluded.branch,\n           preview = excluded.preview,\n           content_snippet = excluded.content_snippet,\n           message_count = excluded.message_count,\n           page_message_count = excluded.page_message_count,\n           last_message_sender = excluded.last_message_sender,\n           timestamp = excluded.timestamp,\n           first_sent_at = excluded.first_sent_at,\n           first_sent_text = excluded.first_sent_text,\n           last_sent_at = excluded.last_sent_at,\n           last_sent_text = excluded.last_sent_text,\n           model = excluded.model,\n           is_subagent = excluded.is_subagent,\n           parent_session_id = excluded.parent_session_id,\n           is_teammate = excluded.is_teammate,\n           team_name = excluded.team_name,\n           tool_names_json = excluded.tool_names_json,\n           last_prompt = excluded.last_prompt,\n           status = 'active',\n           index_seq = (SELECT COALESCE(MAX(index_seq), 0) + 1 FROM conversations),\n           updated_at = CURRENT_TIMESTAMP`,\n      )\n      .run({\n        file_id: fileId,\n        source_path: meta.id,\n        provider: meta.provider ?? CLAUDE_CODE_PROVIDER,\n        kind: meta.kind ?? null,\n        external_session_id: meta.externalSessionId ?? null,\n        session_id: meta.sessionId,\n        session_name: meta.sessionName || null,\n        project_path: meta.projectPath || null,\n        project_name: meta.projectName || null,\n        account: meta.account,\n        branch: meta.gitBranch,\n        preview: meta.preview || null,\n        content_snippet: meta.contentSnippet || null,\n        message_count: meta.messageCount,\n        page_message_count: pageMessageCount,\n        last_message_sender: meta.lastMessageSender,\n        timestamp: meta.timestamp || null,\n        first_sent_at: meta.firstMessage?.timestamp ?? null,\n        first_sent_text: meta.firstMessage?.text ?? null,\n        last_sent_at: meta.lastMessage?.timestamp ?? null,\n        last_sent_text: meta.lastMessage?.text ?? null,\n        model: meta.model,\n        is_subagent: meta.isSubagent ? 1 : 0,\n        parent_session_id: meta.parentSessionId,\n        is_teammate: meta.isTeammate ? 1 : 0,\n        team_name: meta.teamName,\n        tool_names_json: JSON.stringify(meta.toolNames),\n        last_prompt: meta.lastPrompt ?? null,\n      });\n  }\n\n  getBySourcePath(sourcePath: string): ConversationMeta | null {\n    const row = this.db\n      .prepare(\"SELECT * FROM conversations WHERE source_path = ? AND status = 'active'\")\n      .get(sourcePath) as ConversationRow | undefined;\n    return row ? rowToMeta(row) : null;\n  }\n\n  // Dual lookup matching scanner.getConversation: resolve by source_path (the\n  // canonical id) first, then by session_id.\n  //\n  // session_id is NOT unique (see schema header) — the sessionId form is a\n  // compatibility convenience. Resolution is deterministic and matches the\n  // in-memory scanner: among active rows sharing the session_id, newest\n  // timestamp wins, index_seq breaks sub-second ties (precision updated_at\n  // lacks), then source_path ascending. Collision-safe callers should use\n  // getAllBySessionId() instead.\n  getByIdOrSession(id: string): ConversationMeta | null {\n    const direct = this.getBySourcePath(id);\n    if (direct) return direct;\n    const row = this.db\n      .prepare(\n        `SELECT * FROM conversations WHERE session_id = ? AND status = 'active'\n         ORDER BY COALESCE(timestamp, '') DESC, index_seq DESC, source_path ASC LIMIT 1`,\n      )\n      .get(id) as ConversationRow | undefined;\n    return row ? rowToMeta(row) : null;\n  }\n\n  // All active conversations sharing a session_id, newest first (same ordering\n  // as getByIdOrSession). Collision-safe counterpart to the convenience\n  // getByIdOrSession() sessionId lookup.\n  getAllBySessionId(sessionId: string): ConversationMeta[] {\n    const rows = this.db\n      .prepare(\n        `SELECT * FROM conversations WHERE session_id = ? AND status = 'active'\n         ORDER BY COALESCE(timestamp, '') DESC, index_seq DESC, source_path ASC`,\n      )\n      .all(sessionId) as ConversationRow[];\n    return rows.map(rowToMeta);\n  }\n\n  // All active metas (unsorted/unfiltered) — callers apply the existing\n  // filters/view transforms. Used by scan() before SQL filtering is wired in.\n  allActive(): ConversationMeta[] {\n    const rows = this.db\n      .prepare(\"SELECT * FROM conversations WHERE status = 'active'\")\n      .all() as ConversationRow[];\n    return rows.map(rowToMeta);\n  }\n\n  // Most recent active conversations, newest first. Backs the empty-query\n  // search path (mirrors the in-memory indexer's getRecent).\n  recent(limit: number): ConversationMeta[] {\n    const rows = this.db\n      .prepare(\n        `SELECT * FROM conversations WHERE status = 'active'\n         ORDER BY COALESCE(timestamp, '') DESC, source_path ASC LIMIT ?`,\n      )\n      .all(limit) as ConversationRow[];\n    return rows.map(rowToMeta);\n  }\n\n  distinctProjects(): string[] {\n    const rows = this.db\n      .prepare(\n        `SELECT DISTINCT project_path FROM conversations\n         WHERE status = 'active' AND project_path IS NOT NULL AND project_path != ''\n         ORDER BY project_path ASC`,\n      )\n      .all() as { project_path: string }[];\n    return rows.map((r) => r.project_path);\n  }\n\n  deleteByFileId(fileId: number): void {\n    this.db\n      .prepare(\n        \"UPDATE conversations SET status = 'deleted', updated_at = CURRENT_TIMESTAMP WHERE file_id = ?\",\n      )\n      .run(fileId);\n  }\n\n  // The parseConversation message total for a file (for bounded paging), or 0\n  // if not indexed.\n  pageMessageCount(sourcePath: string): number {\n    const row = this.db\n      .prepare(\n        \"SELECT page_message_count AS n FROM conversations WHERE source_path = ? AND status = 'active'\",\n      )\n      .get(sourcePath) as { n: number } | undefined;\n    return row?.n ?? 0;\n  }\n\n  count(): number {\n    return (\n      this.db.prepare(\"SELECT COUNT(*) AS n FROM conversations WHERE status = 'active'\").get() as {\n        n: number;\n      }\n    ).n;\n  }\n}\n","import type { Database } from \"better-sqlite3\";\nimport type { ConversationMeta } from \"../../types\";\n\n// FTS5-backed search index over conversation content + metadata. One row per\n// conversation, keyed by source_path (== ConversationMeta.id). Replaced on each\n// upsert so a re-index never leaves stale text behind.\nexport class FtsRepo {\n  constructor(private db: Database) {}\n\n  upsert(meta: ConversationMeta): void {\n    const tx = this.db.transaction(() => {\n      this.db.prepare(\"DELETE FROM conversation_messages_fts WHERE source_path = ?\").run(meta.id);\n      this.db\n        .prepare(\n          `INSERT INTO conversation_messages_fts\n             (source_path, content, project_name, session_id, session_name, account, model, branch, tool_names)\n           VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n        )\n        .run(\n          meta.id,\n          meta.contentSnippet ?? \"\",\n          meta.projectName ?? \"\",\n          meta.sessionId ?? \"\",\n          meta.sessionName ?? \"\",\n          meta.account ?? \"\",\n          meta.model ?? \"\",\n          meta.gitBranch ?? \"\",\n          meta.toolNames.join(\" \"),\n        );\n    });\n    tx();\n  }\n\n  remove(sourcePath: string): void {\n    this.db.prepare(\"DELETE FROM conversation_messages_fts WHERE source_path = ?\").run(sourcePath);\n  }\n\n  // Ranked source_paths matching the query, best first. Returns [] on an empty\n  // query (callers fall back to a recency listing).\n  search(query: string, limit: number): string[] {\n    const match = toMatchQuery(query);\n    if (!match) return [];\n    const rows = this.db\n      .prepare(\n        `SELECT source_path FROM conversation_messages_fts\n         WHERE conversation_messages_fts MATCH ?\n         ORDER BY rank\n         LIMIT ?`,\n      )\n      .all(match, limit) as { source_path: string }[];\n    return rows.map((r) => r.source_path);\n  }\n\n  count(): number {\n    return (\n      this.db.prepare(\"SELECT COUNT(*) AS n FROM conversation_messages_fts\").get() as { n: number }\n    ).n;\n  }\n}\n\n// Turn free-text into a safe FTS5 prefix query. Each whitespace-separated term\n// is wrapped in double quotes (so FTS5 special chars are treated literally) and\n// suffixed with * for prefix matching, mirroring FlexSearch's forward tokenizer.\n// Terms are ANDed together. Returns \"\" when nothing usable remains.\nfunction toMatchQuery(query: string): string {\n  const terms = query\n    .trim()\n    .split(/\\s+/)\n    .map((t) => t.replace(/\"/g, \"\").trim())\n    .filter(Boolean);\n  if (terms.length === 0) return \"\";\n  return terms.map((t) => `\"${t}\"*`).join(\" AND \");\n}\n","import { discoverJsonlFiles } from \"../discovery\";\nimport { readGitBranch } from \"../git\";\nimport { getLogger } from \"../logger\";\nimport { getProjectsDir } from \"../profiles\";\nimport { CodexCliProvider, parseCodexConversation } from \"../providers/codex-cli\";\nimport { parseMetaWithProvider } from \"../providers/parse\";\nimport {\n  CLAUDE_CODE_PROVIDER,\n  CODEX_CLI_PROVIDER,\n  type ScannerProvider,\n} from \"../providers/provider\";\nimport { resolveTier } from \"../tiers\";\nimport type {\n  ConversationMeta,\n  ConversationPage,\n  GetConversationPageOptions,\n  Profile,\n  ScanOptions,\n} from \"../types\";\nimport { classify, fingerprint } from \"./cursor\";\nimport { type DB, openDatabase } from \"./db\";\nimport { type TailReadResult, tailReduce } from \"./jsonl-tail-reader\";\nimport { finalizeMeta, initialReducerState, type ReducerState } from \"./metadata-reducer\";\nimport { buildCheckpoints, CHECKPOINT_INTERVAL, readPage } from \"./paged-reader\";\nimport { CheckpointsRepo } from \"./repositories/checkpoints.repo\";\nimport { ConversationFilesRepo } from \"./repositories/conversation-files.repo\";\nimport { ConversationsRepo } from \"./repositories/conversations.repo\";\nimport { FtsRepo } from \"./repositories/fts.repo\";\nimport { buildSidecar, writeSidecar } from \"./sidecar\";\n\nconst BATCH_SIZE = 12;\n\n// Persistent indexing engine. Owns the SQLite connection and the discover ->\n// classify -> tail-read -> upsert pipeline. Query helpers return ConversationMeta\n// straight from the DB so the scanner facade can run the existing\n// filter/sort/view pipeline over them, guaranteeing parity with the in-memory\n// path.\n//\n// Indexing is incremental: an appended file resumes the persisted reducer fold\n// from its byte cursor and reads only the new bytes (cursor.ts + the tail\n// reader); a truncated/replaced file reindexes from offset 0.\nexport class PersistentEngine {\n  readonly db: DB;\n  readonly files: ConversationFilesRepo;\n  readonly conversations: ConversationsRepo;\n  readonly fts: FtsRepo;\n  readonly checkpoints: CheckpointsRepo;\n  // When true, write a portable <file>.idx.json sidecar next to each indexed\n  // JSONL. Off by default.\n  private readonly sidecar: boolean;\n\n  constructor(dbPath: string, options: { sidecar?: boolean } = {}) {\n    this.db = openDatabase(dbPath);\n    this.files = new ConversationFilesRepo(this.db);\n    this.conversations = new ConversationsRepo(this.db);\n    this.fts = new FtsRepo(this.db);\n    this.checkpoints = new CheckpointsRepo(this.db);\n    this.sidecar = options.sidecar ?? false;\n  }\n\n  close(): void {\n    this.db.close();\n  }\n\n  // Discover all JSONL files under the active profiles, (re)parse files that\n  // changed since the last index, and upsert their metadata. Returns the number\n  // of files seen on disk this pass (the scan \"scanned\" count).\n  async indexAll(activeProfiles: Profile[], options: ScanOptions): Promise<{ scanned: number }> {\n    const log = getLogger();\n    const tier = resolveTier(options.tier ?? \"standard\", options.tiers);\n\n    const enabled = options.providers ?? [CLAUDE_CODE_PROVIDER];\n\n    // Each discovered file carries the provider that should parse it. claude-code\n    // files fold through the byte-offset-resumable tail reader; Codex files\n    // (opt-in, only under explicit codexRoots) reparse from offset 0.\n    const discovered: { filePath: string; account: string; provider?: ScannerProvider }[] = [];\n\n    if (enabled.includes(CLAUDE_CODE_PROVIDER)) {\n      const configDirs = activeProfiles.map((p) => ({\n        projectsDir: getProjectsDir(p),\n        account: p.id,\n      }));\n      for (const f of await discoverJsonlFiles(configDirs)) discovered.push(f);\n    }\n\n    const codex = new CodexCliProvider();\n    if (enabled.includes(CODEX_CLI_PROVIDER) && (options.codexRoots?.length ?? 0) > 0) {\n      for (const f of await codex.discover(options.codexRoots as string[])) {\n        discovered.push({ ...f, provider: codex });\n      }\n    }\n    let scanned = 0;\n\n    const gitBranchMemo = new Map<string, string | null>();\n    const resolveGitBranch = (projectPath: string): string | null => {\n      if (gitBranchMemo.has(projectPath)) {\n        return gitBranchMemo.get(projectPath) ?? null;\n      }\n      const branch = readGitBranch(projectPath);\n      gitBranchMemo.set(projectPath, branch);\n      return branch;\n    };\n\n    for (let i = 0; i < discovered.length; i += BATCH_SIZE) {\n      const batch = discovered.slice(i, i + BATCH_SIZE);\n      const results = await Promise.all(\n        batch.map(async ({ filePath, account, provider }) => {\n          const meta = await this.indexFile(\n            filePath,\n            account,\n            tier.name,\n            options.tiers,\n            resolveGitBranch,\n            false,\n            provider,\n          );\n          return meta;\n        }),\n      );\n      const kept = results.filter((m): m is ConversationMeta => m != null);\n      if (kept.length > 0) options.onBatch?.(kept);\n      scanned += batch.length;\n      options.onProgress?.(scanned, discovered.length);\n    }\n\n    // Reconcile deletions: any previously-active file that wasn't discovered\n    // this pass is gone from disk — mark it deleted. This is the correctness\n    // backstop for unlink events the watcher may have missed (spec §9.5).\n    const seen = new Set(discovered.map((d) => d.filePath));\n    for (const path of this.files.allActivePaths()) {\n      if (!seen.has(path)) this.markDeleted(path);\n    }\n\n    log.info({ scanned, indexed: this.conversations.count() }, \"persistent: indexAll complete\");\n    return { scanned };\n  }\n\n  // (Re)index a single file. Classifies the change vs. the persisted cursor:\n  // unchanged → return the stored summary; appended → resume the fold and read\n  // only new bytes; reindex/force → fold from offset 0. Writes the summary +\n  // cursor + reducer state in one transaction so a crash never leaves a\n  // half-written row or an over-advanced cursor.\n  async indexFile(\n    filePath: string,\n    account: string,\n    tierName: string,\n    customTiers: ScanOptions[\"tiers\"],\n    resolveGitBranch: (projectPath: string) => string | null,\n    force = false,\n    provider?: ScannerProvider,\n  ): Promise<ConversationMeta | null> {\n    const log = getLogger();\n    const tier = resolveTier(tierName, customTiers);\n\n    const existing = this.files.getByPath(filePath);\n    const { change, stat } = classify(filePath, existing);\n\n    if (change === \"vanished\" || !stat) {\n      // File gone between discovery and indexing — treat as deleted.\n      this.markDeleted(filePath);\n      return null;\n    }\n    // Unchanged: serve the persisted summary without re-reading (unless a\n    // caller forces a re-parse, e.g. refreshFile after a same-size edit).\n    if (change === \"unchanged\" && !force) {\n      return this.conversations.getBySourcePath(filePath);\n    }\n\n    // ponytail: Codex reparses from offset 0 on every change rather than\n    // resuming a byte cursor like claude-code. Codex rollout sessions are small,\n    // so a full reparse is cheap; the resumable-fold path stays claude-code-only.\n    // Upgrade path if Codex files ever get large: give CodexAccumulator the same\n    // serialized-reducer-state treatment and route it through tailReduce.\n    if (provider && provider.name !== CLAUDE_CODE_PROVIDER) {\n      return this.indexFileWithProvider(provider, filePath, account, tier, stat, resolveGitBranch);\n    }\n\n    // appended → resume the persisted fold from the cursor; reindex/force →\n    // start fresh from offset 0. This is the incremental win: an append only\n    // reads the newly-written bytes.\n    const resume = change === \"appended\" && !force && existing?.reducer_state;\n    const state: ReducerState = resume\n      ? (JSON.parse(existing.reducer_state as string) as ReducerState)\n      : initialReducerState();\n    const startOffset = resume ? existing.last_indexed_offset : 0;\n    const startLine = resume ? existing.last_indexed_line : 0;\n\n    let result: TailReadResult;\n    try {\n      result = await tailReduce(filePath, startOffset, startLine, state, tier);\n    } catch (err) {\n      log.warn({ filePath, err }, \"persistent: tail read failed\");\n      return null;\n    }\n\n    const meta = finalizeMeta(state, filePath, account, tier);\n    if (!meta) {\n      this.markDeleted(filePath);\n      return null;\n    }\n    meta.gitBranch = resolveGitBranch(meta.projectPath);\n\n    const fp = stat.size > 0 ? fingerprint(filePath, stat.size) : null;\n    const fileId = this.files.ensure(filePath, account);\n    const upsert = this.db.transaction(() => {\n      this.conversations.upsert(fileId, meta, state.pageMessageCount);\n      this.fts.upsert(meta);\n      // Byte offsets shift when the file changes, so any checkpoints are stale.\n      // Drop them; they're rebuilt lazily on the next page request.\n      this.checkpoints.remove(filePath);\n      this.files.updateCursor(fileId, {\n        sizeBytes: stat.size,\n        mtimeMs: stat.mtimeMs,\n        // Advance only to the last fully-parsed line; a trailing partial line\n        // is left for the next pass.\n        offset: result.newOffset,\n        line: result.newLine,\n        reducerState: JSON.stringify(state),\n        fingerprint: fp,\n        status: \"active\",\n      });\n    });\n    upsert();\n\n    if (this.sidecar) {\n      writeSidecar(\n        filePath,\n        buildSidecar(\n          meta,\n          {\n            sizeBytes: stat.size,\n            mtimeMs: stat.mtimeMs,\n            offset: result.newOffset,\n            line: result.newLine,\n          },\n          new Date().toISOString(),\n        ),\n      );\n    }\n\n    log.debug(\n      { filePath, change, bytesRead: result.newOffset - startOffset, msgs: meta.messageCount },\n      \"persistent: indexed file\",\n    );\n    return meta;\n  }\n\n  // Index a non-Threadbase provider file: full reparse from offset 0 through the\n  // provider's reducer/finalize, then the same upsert + FTS write + cursor bump\n  // the Threadbase path uses. The cursor records size/mtime (and offset = size)\n  // so the next pass classifies an unchanged file as \"unchanged\" and skips it;\n  // any change reparses from 0 again. No reducer_state is persisted.\n  private async indexFileWithProvider(\n    provider: ScannerProvider,\n    filePath: string,\n    account: string,\n    tier: ReturnType<typeof resolveTier>,\n    stat: { size: number; mtimeMs: number },\n    resolveGitBranch: (projectPath: string) => string | null,\n  ): Promise<ConversationMeta | null> {\n    const log = getLogger();\n\n    const meta = await parseMetaWithProvider(provider, filePath, account, tier);\n    if (!meta) {\n      this.markDeleted(filePath);\n      return null;\n    }\n    // The provider may already know its branch (Codex reads it from\n    // session_meta). Only walk the filesystem when it doesn't.\n    if (meta.gitBranch === null && meta.projectPath) {\n      meta.gitBranch = resolveGitBranch(meta.projectPath);\n    }\n\n    const fp = stat.size > 0 ? fingerprint(filePath, stat.size) : null;\n    const fileId = this.files.ensure(filePath, account);\n    const upsert = this.db.transaction(() => {\n      this.conversations.upsert(fileId, meta, meta.messageCount);\n      this.fts.upsert(meta);\n      this.checkpoints.remove(filePath);\n      this.files.updateCursor(fileId, {\n        sizeBytes: stat.size,\n        mtimeMs: stat.mtimeMs,\n        // offset = size marks the file fully consumed (non-zero so the next pass\n        // can classify it \"unchanged\"); no resumable reducer state is kept.\n        offset: stat.size,\n        line: 0,\n        reducerState: null,\n        fingerprint: fp,\n        status: \"active\",\n      });\n    });\n    upsert();\n\n    log.debug(\n      { filePath, provider: provider.name, msgs: meta.messageCount },\n      \"persistent: indexed provider file\",\n    );\n    return meta;\n  }\n\n  private markDeleted(filePath: string): void {\n    const existing = this.files.getByPath(filePath);\n    if (!existing) return;\n    const tx = this.db.transaction(() => {\n      this.conversations.deleteByFileId(existing.id);\n      this.fts.remove(filePath);\n      this.checkpoints.remove(filePath);\n      this.files.setStatus(existing.id, \"deleted\");\n    });\n    tx();\n  }\n\n  // ── Query helpers (read straight from SQLite) ───────────────────────────\n\n  allActive(): ConversationMeta[] {\n    return this.conversations.allActive();\n  }\n\n  getByIdOrSession(id: string): ConversationMeta | null {\n    return this.conversations.getByIdOrSession(id);\n  }\n\n  getAllBySessionId(sessionId: string): ConversationMeta[] {\n    return this.conversations.getAllBySessionId(sessionId);\n  }\n\n  // Ranked metas matching the FTS query, best first. Empty query returns the\n  // most recent conversations (mirroring the in-memory indexer's empty-query\n  // behavior). Resolves each FTS hit to its active conversation row.\n  searchMetas(query: string, limit: number): ConversationMeta[] {\n    if (!query.trim()) {\n      return this.conversations.recent(limit);\n    }\n    const paths = this.fts.search(query, limit);\n    const metas: ConversationMeta[] = [];\n    for (const path of paths) {\n      const meta = this.conversations.getBySourcePath(path);\n      if (meta) metas.push(meta);\n    }\n    return metas;\n  }\n\n  getProjects(): string[] {\n    return this.conversations.distinctProjects();\n  }\n\n  // Bounded conversation page: read only the requested window from the file,\n  // seeking from the nearest checkpoint. Returns null if the id can't be\n  // resolved to an indexed conversation. For conversations large enough to span\n  // a checkpoint interval, checkpoints are built lazily on first access and\n  // reused thereafter. Smaller conversations read from the start (cheap).\n  async getPage(id: string, options: GetConversationPageOptions): Promise<ConversationPage | null> {\n    const meta = this.conversations.getByIdOrSession(id);\n    if (!meta) return null;\n    const filePath = meta.filePath;\n\n    // Codex files don't fold through the conversation-reducer the bounded reader\n    // (readPage) uses — that reducer only understands the claude-code line shape,\n    // so readPage would return an empty window for a Codex file. Codex rollout\n    // sessions are small (already reparsed from offset 0 on every change), so\n    // parse the whole conversation and slice the window — identical math to the\n    // claude-code path and to the legacy getConversationPage slice.\n    if (meta.provider === CODEX_CLI_PROVIDER) {\n      const conversation = await parseCodexConversation(filePath, meta.account);\n      if (!conversation) return null;\n      const { messages } = conversation;\n      const total = messages.length;\n      const beforeIndex = options.beforeIndex ?? total;\n      const fromIndex = Math.max(0, beforeIndex - options.limit);\n      return { messages: messages.slice(fromIndex, beforeIndex), total, fromIndex };\n    }\n\n    // Bounded paging uses the parseConversation message total, which differs\n    // from meta.messageCount (the metadata count excludes tool_use-only and\n    // thinking-only lines).\n    const total = this.conversations.pageMessageCount(filePath);\n\n    if (total > CHECKPOINT_INTERVAL && this.checkpoints.count(filePath) === 0) {\n      const built = await buildCheckpoints(filePath);\n      if (built.length > 0) this.checkpoints.replaceAll(filePath, built);\n    }\n\n    const beforeIndex = options.beforeIndex ?? total;\n    const fromIndex = Math.max(0, beforeIndex - options.limit);\n    const floor = this.checkpoints.floor(filePath, fromIndex);\n    return readPage(filePath, total, options, floor);\n  }\n}\n","import type { FSWatcher } from \"chokidar\";\nimport chokidar from \"chokidar\";\nimport { getLogger } from \"../logger\";\nimport { getProjectsDir } from \"../profiles\";\nimport type { Profile } from \"../types\";\n\nconst EXCLUDED_SEGMENTS = [\"/memory/\", \"/tool-results/\"];\n\nexport interface WatchEvent {\n  filePath: string;\n  account: string;\n  type: \"add\" | \"change\" | \"unlink\";\n}\n\nexport interface FileWatcherOptions {\n  // Debounce window (ms) coalescing rapid events for one file. Spec §8.\n  debounceMs?: number;\n}\n\n// Watches each active profile's projects dir for *.jsonl changes and forwards\n// debounced add/change/unlink events. Thin wrapper over chokidar; the scanner\n// owns what to do with the events (enqueue index jobs, emit to host apps).\nexport class FileWatcher {\n  private watchers: FSWatcher[] = [];\n  private timers = new Map<string, ReturnType<typeof setTimeout>>();\n  private readonly debounceMs: number;\n\n  constructor(\n    private profiles: Profile[],\n    private onEvent: (event: WatchEvent) => void,\n    options: FileWatcherOptions = {},\n  ) {\n    this.debounceMs = options.debounceMs ?? 400;\n  }\n\n  // Resolves once every underlying chokidar watcher has finished its initial\n  // scan, so the caller knows subsequent FS changes will be observed.\n  async start(): Promise<void> {\n    const log = getLogger();\n    const ready: Promise<void>[] = [];\n    for (const profile of this.profiles) {\n      const dir = getProjectsDir(profile);\n      const watcher = chokidar.watch(dir, {\n        ignoreInitial: true,\n        ignored: (p: string) => EXCLUDED_SEGMENTS.some((seg) => p.includes(seg)),\n        awaitWriteFinish: { stabilityThreshold: this.debounceMs, pollInterval: 100 },\n      });\n      watcher\n        .on(\"add\", (p) => this.dispatch(p, profile.id, \"add\"))\n        .on(\"change\", (p) => this.dispatch(p, profile.id, \"change\"))\n        .on(\"unlink\", (p) => this.dispatch(p, profile.id, \"unlink\"));\n      ready.push(new Promise<void>((resolve) => watcher.once(\"ready\", () => resolve())));\n      this.watchers.push(watcher);\n      log.debug({ dir, account: profile.id }, \"watcher: watching\");\n    }\n    await Promise.all(ready);\n  }\n\n  async stop(): Promise<void> {\n    for (const t of this.timers.values()) clearTimeout(t);\n    this.timers.clear();\n    await Promise.all(this.watchers.map((w) => w.close()));\n    this.watchers = [];\n  }\n\n  private dispatch(filePath: string, account: string, type: WatchEvent[\"type\"]): void {\n    if (!filePath.endsWith(\".jsonl\")) return;\n    // Debounce per path: collapse a flurry of events into the latest one.\n    const existing = this.timers.get(filePath);\n    if (existing) clearTimeout(existing);\n    this.timers.set(\n      filePath,\n      setTimeout(() => {\n        this.timers.delete(filePath);\n        this.onEvent({ filePath, account, type });\n      }, this.debounceMs),\n    );\n  }\n}\n","import { getLogger } from \"../logger\";\n\nexport type JobReason = \"watcher\" | \"manual\" | \"periodic\";\n\nexport interface IndexJob {\n  filePath: string;\n  account: string;\n  reason: JobReason;\n}\n\n// In-process job queue for incremental indexing. Jobs are deduplicated by file\n// path (the latest job for a path wins) and processed one at a time, because\n// SQLite has a single writer. A burst of filesystem events for the same file\n// collapses to one index pass.\nexport class IndexQueue {\n  private pending = new Map<string, IndexJob>();\n  private running = false;\n  private idleResolvers: Array<() => void> = [];\n\n  constructor(private process: (job: IndexJob) => Promise<void>) {}\n\n  enqueue(job: IndexJob): void {\n    this.pending.set(job.filePath, job);\n    void this.drain();\n  }\n\n  // Resolves when the queue has fully drained — useful for tests and for a\n  // clean shutdown.\n  onIdle(): Promise<void> {\n    if (!this.running && this.pending.size === 0) return Promise.resolve();\n    return new Promise((resolve) => this.idleResolvers.push(resolve));\n  }\n\n  get size(): number {\n    return this.pending.size;\n  }\n\n  private async drain(): Promise<void> {\n    if (this.running) return;\n    this.running = true;\n    const log = getLogger();\n\n    while (this.pending.size > 0) {\n      const [path, job] = this.pending.entries().next().value as [string, IndexJob];\n      this.pending.delete(path);\n      try {\n        await this.process(job);\n      } catch (err) {\n        log.warn({ filePath: job.filePath, err }, \"index-queue: job failed\");\n      }\n    }\n\n    this.running = false;\n    const resolvers = this.idleResolvers;\n    this.idleResolvers = [];\n    for (const r of resolvers) r();\n  }\n}\n","// ─── Primitives ─────────────────────────────────────────────────────\n\nexport type MessageSender = \"user\" | \"assistant\";\nexport type Include = \"all\" | \"conversations\" | \"subagents\" | \"teammates\";\nexport type View = \"flat\" | \"tree\" | \"grouped\";\nexport type SortOrder = \"recent\" | \"oldest\" | \"messages-desc\" | \"messages-asc\" | \"alpha\";\n\nexport const VALID_SORT_ORDERS: SortOrder[] = [\n  \"recent\",\n  \"oldest\",\n  \"messages-desc\",\n  \"messages-asc\",\n  \"alpha\",\n];\n\n// ─── Profile ────────────────────────────────────────────────────────\n\nexport interface Profile {\n  id: string;\n  label: string;\n  configDir: string;\n  enabled: boolean;\n  emoji?: string;\n  scanHistory?: boolean;\n}\n\n// ─── Content Tiers ──────────────────────────────────────────────────\n\nexport interface ContentTier {\n  name: string;\n  previewMax: number;\n  snippetMax: number;\n}\n\n// ─── ConversationMeta (full superset) ───────────────────────────────\n\nexport interface MessageSnapshot {\n  text: string;\n  timestamp: string;\n}\n\nexport type ProviderName = \"claude-code\" | \"codex-cli\";\n\nexport interface ConversationMeta {\n  id: string;\n  filePath: string;\n  sessionId: string;\n  // Which provider produced this meta. Optional/additive: existing claude-code\n  // metas default to \"claude-code\" when unset.\n  provider?: ProviderName;\n  // Distinguishes plain chat conversations from task-oriented logs (Codex).\n  kind?: \"conversation\" | \"task\";\n  // Provider-native session id when it differs from the (non-unique) sessionId.\n  externalSessionId?: string;\n  sessionName: string;\n  projectPath: string;\n  projectName: string;\n  account: string;\n  timestamp: string;\n  messageCount: number;\n  lastMessageSender: MessageSender;\n  preview: string;\n  contentSnippet: string;\n  gitBranch: string | null;\n  model: string | null;\n  isSubagent: boolean;\n  parentSessionId: string | null;\n  isTeammate: boolean;\n  teamName: string | null;\n  toolNames: string[];\n  firstMessage: MessageSnapshot | null;\n  lastMessage: MessageSnapshot | null;\n  lastPrompt?: string;\n}\n\n// ─── View Variants ──────────────────────────────────────────────────\n\nexport interface TreeConversation extends ConversationMeta {\n  subagents: ConversationMeta[];\n}\n\nexport interface GroupedConversations {\n  [groupKey: string]: ConversationMeta[];\n}\n\n// ─── Options ────────────────────────────────────────────────────────\n\nexport interface FileStatEntry {\n  mtimeMs: number;\n  size: number;\n}\n\nexport interface ScanOptions {\n  profiles?: Profile[];\n  // Providers to scan. Defaults to [\"claude-code\"]. Including \"codex-cli\"\n  // requires codexRoots (no default home scan).\n  providers?: ProviderName[];\n  // Absolute roots to discover Codex CLI history under (e.g. ~/.codex/sessions).\n  codexRoots?: string[];\n  tier?: string;\n  tiers?: Record<string, ContentTier>;\n  include?: Include;\n  view?: View;\n  sort?: SortOrder;\n  since?: string;\n  project?: string;\n  account?: string;\n  limit?: number;\n  offset?: number;\n  onProgress?: (scanned: number, total: number) => void;\n  onBatch?: (metas: ConversationMeta[]) => void;\n  /** Known file stats from a previous scan. Files whose (mtimeMs, size) match\n   *  are skipped — the cached ConversationMeta is reused instead. */\n  statCache?: Map<string, { stat: FileStatEntry; meta: ConversationMeta }>;\n}\n\nexport interface ScanResult {\n  conversations: ConversationMeta[] | TreeConversation[] | GroupedConversations;\n  total: number;\n  scanned: number;\n}\n\nexport interface SearchOptions extends ScanOptions {\n  fields?: string[];\n  // Restrict results to one provider.\n  provider?: ProviderName;\n}\n\nexport interface SearchMatch {\n  field: string;\n  snippet: string;\n}\n\nexport interface SearchResult {\n  meta: ConversationMeta;\n  score: number;\n  matches: SearchMatch[];\n}\n\nexport interface GetConversationOptions {\n  profiles?: Profile[];\n}\n\nexport interface GetConversationPageOptions {\n  beforeIndex?: number;\n  limit: number;\n}\n\nexport interface ConversationPage {\n  messages: ConversationMessage[];\n  total: number;\n  fromIndex: number;\n}\n\n// A page sliced directly from a single parsed JSONL file, carrying the parsed\n// Conversation alongside the window so a caller can build a full response\n// (meta + messages) from one parse, without a prior scan().\nexport interface SingleFilePage extends ConversationPage {\n  conversation: Conversation;\n}\n\n// ─── Full Conversation ──────────────────────────────────────────────\n\nexport interface TurnDuration {\n  durationMs: number;\n  messageCount: number;\n  uuid?: string;\n}\n\nexport interface DeferredToolsDeltaAttachment {\n  type: \"deferred_tools_delta\";\n  addedNames: string[];\n  addedLines: unknown[];\n  removedNames: string[];\n}\n\nexport type AttachmentSidecar =\n  | DeferredToolsDeltaAttachment\n  | { type: string; [key: string]: unknown };\n\nexport interface ToolUseBlock {\n  id: string;\n  name: string;\n  input: Record<string, unknown>;\n}\n\nexport interface ToolResultBlock {\n  toolUseId: string;\n  type:\n    | \"edit\"\n    | \"write\"\n    | \"read\"\n    | \"bash\"\n    | \"grep\"\n    | \"glob\"\n    | \"taskAgent\"\n    | \"taskCreate\"\n    | \"taskUpdate\"\n    | \"generic\";\n  content: Record<string, unknown>;\n  isError?: boolean;\n}\n\nexport interface TeamInfo {\n  teammateId: string;\n  summary?: string;\n  color?: string;\n}\n\nexport interface MessageMetadata {\n  model?: string;\n  stopReason?: string | null;\n  inputTokens?: number;\n  outputTokens?: number;\n  cacheReadTokens?: number;\n  cacheCreationTokens?: number;\n  gitBranch?: string;\n  version?: string;\n  toolUses?: string[];\n  toolUseBlocks?: ToolUseBlock[];\n  toolResults?: ToolResultBlock[];\n  teamName?: string;\n  teamInfo?: TeamInfo;\n}\n\nexport interface ConversationMessage {\n  role: MessageSender;\n  text: string;\n  timestamp: string;\n  uuid?: string;\n  metadata?: MessageMetadata;\n  isToolResult?: boolean;\n  isThinking?: boolean;\n  thinkingContent?: string;\n  thinkingSignature?: string;\n  parentUuid?: string | null;\n  requestId?: string;\n  promptId?: string;\n  isSidechain?: boolean;\n  permissionMode?: string;\n  hasImages?: boolean;\n  attachment?: AttachmentSidecar;\n}\n\nexport interface Conversation {\n  id: string;\n  filePath: string;\n  projectPath: string;\n  projectName: string;\n  sessionId: string;\n  sessionName: string;\n  messages: ConversationMessage[];\n  fullText: string;\n  timestamp: string;\n  messageCount: number;\n  account: string;\n  turnDurations?: TurnDuration[];\n  lastPrompt?: string;\n}\n","export {\n  applyAccountFilter,\n  applyIncludeFilter,\n  applyPagination,\n  applyProjectFilter,\n  applySinceFilter,\n  applySort,\n} from \"./filters\";\nexport { readGitBranch } from \"./git\";\nexport { SearchIndexer } from \"./indexer\";\nexport type { Logger, LoggerOptions } from \"./logger\";\nexport { createLogger, getLogger, setLogger } from \"./logger\";\nexport type { Sidecar } from \"./persistent/sidecar\";\nexport { readSidecar, sidecarPath } from \"./persistent/sidecar\";\nexport {\n  detectDefaultProfile,\n  getProjectsDir,\n  loadProfiles,\n  resolveConfigDir,\n  saveProfiles,\n} from \"./profiles\";\nexport { CodexCliProvider } from \"./providers/codex-cli\";\nexport type {\n  DiscoveredConversationFile,\n  ScannerProvider,\n  ScannerProviderName,\n} from \"./providers/provider\";\nexport { ThreadbaseProvider } from \"./providers/threadbase\";\nexport type {\n  ConversationScannerOptions,\n  PersistentConfig,\n  ScannerChangeEvent,\n  WatchOptions,\n} from \"./scanner\";\nexport { ConversationScanner } from \"./scanner\";\nexport { cleanSystemTags } from \"./tags\";\nexport { DEFAULT_TIERS, resolveTier } from \"./tiers\";\nexport * from \"./types\";\n\n// ─── Standalone Convenience Functions ───────────────────────────────\n\nimport { ConversationScanner } from \"./scanner\";\nimport type {\n  Conversation,\n  GetConversationOptions,\n  ScanOptions,\n  ScanResult,\n  SearchOptions,\n  SearchResult,\n} from \"./types\";\n\nlet defaultScanner: ConversationScanner | undefined;\n\nfunction getDefaultScanner(): ConversationScanner {\n  if (!defaultScanner) {\n    defaultScanner = new ConversationScanner();\n  }\n  return defaultScanner;\n}\n\nexport function resetDefaultScanner(): void {\n  defaultScanner = undefined;\n}\n\nexport async function scan(\n  options?: ScanOptions,\n  scanner?: ConversationScanner,\n): Promise<ScanResult> {\n  return (scanner ?? getDefaultScanner()).scan(options);\n}\n\nexport async function search(\n  query: string,\n  options?: SearchOptions,\n  scanner?: ConversationScanner,\n): Promise<SearchResult[]> {\n  return (scanner ?? getDefaultScanner()).search(query, options);\n}\n\nexport async function getConversation(\n  id: string,\n  options?: GetConversationOptions,\n  scanner?: ConversationScanner,\n): Promise<Conversation | null> {\n  return (scanner ?? getDefaultScanner()).getConversation(id, options);\n}\n","/**!\r\n * FlexSearch.js v0.7.41 (Bundle.module)\r\n * Author and Copyright: Thomas Wilkerling\r\n * Licence: Apache-2.0\r\n * Hosted by Nextapps GmbH\r\n * https://github.com/nextapps-de/flexsearch\r\n */\nvar t;function u(a){return\"undefined\"!==typeof a?a:!0}function v(a){const b=Array(a);for(let c=0;c<a;c++)b[c]=x();return b}function x(){return Object.create(null)}function aa(a,b){return b.length-a.length}function C(a){return\"string\"===typeof a}function D(a){return\"object\"===typeof a}function E(a){return\"function\"===typeof a};function F(a,b){var c=ba;if(a&&(b&&(a=G(a,b)),this.H&&(a=G(a,this.H)),this.J&&1<a.length&&(a=G(a,this.J)),c||\"\"===c)){b=a.split(c);if(this.filter){a=this.filter;c=b.length;const d=[];for(let e=0,f=0;e<c;e++){const h=b[e];h&&!a[h]&&(d[f++]=h)}a=d}else a=b;return a}return a}const ba=/[\\p{Z}\\p{S}\\p{P}\\p{C}]+/u,ca=/[\\u0300-\\u036f]/g;\nfunction I(a,b){const c=Object.keys(a),d=c.length,e=[];let f=\"\",h=0;for(let g=0,k,m;g<d;g++)k=c[g],(m=a[k])?(e[h++]=J(b?\"(?!\\\\b)\"+k+\"(\\\\b|_)\":k),e[h++]=m):f+=(f?\"|\":\"\")+k;f&&(e[h++]=J(b?\"(?!\\\\b)(\"+f+\")(\\\\b|_)\":\"(\"+f+\")\"),e[h]=\"\");return e}function G(a,b){for(let c=0,d=b.length;c<d&&(a=a.replace(b[c],b[c+1]),a);c+=2);return a}function J(a){return new RegExp(a,\"g\")}function da(a){let b=\"\",c=\"\";for(let d=0,e=a.length,f;d<e;d++)(f=a[d])!==c&&(b+=c=f);return b};var fa={encode:ea,F:!1,G:\"\"};function ea(a){return F.call(this,(\"\"+a).toLowerCase(),!1)};const ha={},K={};function ia(a){L(a,\"add\");L(a,\"append\");L(a,\"search\");L(a,\"update\");L(a,\"remove\")}function L(a,b){a[b+\"Async\"]=function(){const c=this,d=arguments;var e=d[d.length-1];let f;E(e)&&(f=e,delete d[d.length-1]);e=new Promise(function(h){setTimeout(function(){c.async=!0;const g=c[b].apply(c,d);c.async=!1;h(g)})});return f?(e.then(f),this):e}};function ja(a,b,c,d){const e=a.length;let f=[],h,g,k=0;d&&(d=[]);for(let m=e-1;0<=m;m--){const n=a[m],w=n.length,q=x();let r=!h;for(let l=0;l<w;l++){const p=n[l],A=p.length;if(A)for(let B=0,z,y;B<A;B++)if(y=p[B],h){if(h[y]){if(!m)if(c)c--;else if(f[k++]=y,k===b)return f;if(m||d)q[y]=1;r=!0}if(d&&(z=(g[y]||0)+1,g[y]=z,z<e)){const H=d[z-2]||(d[z-2]=[]);H[H.length]=y}}else q[y]=1}if(d)h||(g=q);else if(!r)return[];h=q}if(d)for(let m=d.length-1,n,w;0<=m;m--){n=d[m];w=n.length;for(let q=0,r;q<w;q++)if(r=\nn[q],!h[r]){if(c)c--;else if(f[k++]=r,k===b)return f;h[r]=1}}return f}function ka(a,b){const c=x(),d=x(),e=[];for(let f=0;f<a.length;f++)c[a[f]]=1;for(let f=0,h;f<b.length;f++){h=b[f];for(let g=0,k;g<h.length;g++)k=h[g],c[k]&&!d[k]&&(d[k]=1,e[e.length]=k)}return e};function M(a){this.l=!0!==a&&a;this.cache=x();this.h=[]}function la(a,b,c){D(a)&&(a=a.query);let d=this.cache.get(a);d||(d=this.search(a,b,c),this.cache.set(a,d));return d}M.prototype.set=function(a,b){if(!this.cache[a]){var c=this.h.length;c===this.l?delete this.cache[this.h[c-1]]:c++;for(--c;0<c;c--)this.h[c]=this.h[c-1];this.h[0]=a}this.cache[a]=b};M.prototype.get=function(a){const b=this.cache[a];if(this.l&&b&&(a=this.h.indexOf(a))){const c=this.h[a-1];this.h[a-1]=this.h[a];this.h[a]=c}return b};const na={memory:{charset:\"latin:extra\",D:3,B:4,m:!1},performance:{D:3,B:3,s:!1,context:{depth:2,D:1}},match:{charset:\"latin:extra\",G:\"reverse\"},score:{charset:\"latin:advanced\",D:20,B:3,context:{depth:3,D:9}},\"default\":{}};function oa(a,b,c,d,e,f,h,g){setTimeout(function(){const k=a(c?c+\".\"+d:d,JSON.stringify(h));k&&k.then?k.then(function(){b.export(a,b,c,e,f+1,g)}):b.export(a,b,c,e,f+1,g)})};function N(a,b){if(!(this instanceof N))return new N(a);var c;if(a){C(a)?a=na[a]:(c=a.preset)&&(a=Object.assign({},c[c],a));c=a.charset;var d=a.lang;C(c)&&(-1===c.indexOf(\":\")&&(c+=\":default\"),c=K[c]);C(d)&&(d=ha[d])}else a={};let e,f,h=a.context||{};this.encode=a.encode||c&&c.encode||ea;this.register=b||x();this.D=e=a.resolution||9;this.G=b=c&&c.G||a.tokenize||\"strict\";this.depth=\"strict\"===b&&h.depth;this.l=u(h.bidirectional);this.s=f=u(a.optimize);this.m=u(a.fastupdate);this.B=a.minlength||1;this.C=\na.boost;this.map=f?v(e):x();this.A=e=h.resolution||1;this.h=f?v(e):x();this.F=c&&c.F||a.rtl;this.H=(b=a.matcher||d&&d.H)&&I(b,!1);this.J=(b=a.stemmer||d&&d.J)&&I(b,!0);if(c=b=a.filter||d&&d.filter){c=b;d=x();for(let g=0,k=c.length;g<k;g++)d[c[g]]=1;c=d}this.filter=c;this.cache=(b=a.cache)&&new M(b)}t=N.prototype;t.append=function(a,b){return this.add(a,b,!0)};\nt.add=function(a,b,c,d){if(b&&(a||0===a)){if(!d&&!c&&this.register[a])return this.update(a,b);b=this.encode(b);if(d=b.length){const m=x(),n=x(),w=this.depth,q=this.D;for(let r=0;r<d;r++){let l=b[this.F?d-1-r:r];var e=l.length;if(l&&e>=this.B&&(w||!n[l])){var f=O(q,d,r),h=\"\";switch(this.G){case \"full\":if(2<e){for(f=0;f<e;f++)for(var g=e;g>f;g--)if(g-f>=this.B){var k=O(q,d,r,e,f);h=l.substring(f,g);P(this,n,h,k,a,c)}break}case \"reverse\":if(1<e){for(g=e-1;0<g;g--)h=l[g]+h,h.length>=this.B&&P(this,n,\nh,O(q,d,r,e,g),a,c);h=\"\"}case \"forward\":if(1<e){for(g=0;g<e;g++)h+=l[g],h.length>=this.B&&P(this,n,h,f,a,c);break}default:if(this.C&&(f=Math.min(f/this.C(b,l,r)|0,q-1)),P(this,n,l,f,a,c),w&&1<d&&r<d-1)for(e=x(),h=this.A,f=l,g=Math.min(w+1,d-r),e[f]=1,k=1;k<g;k++)if((l=b[this.F?d-1-r-k:r+k])&&l.length>=this.B&&!e[l]){e[l]=1;const p=this.l&&l>f;P(this,m,p?f:l,O(h+(d/2>h?0:1),d,r,g-1,k-1),a,c,p?l:f)}}}}this.m||(this.register[a]=1)}}return this};\nfunction O(a,b,c,d,e){return c&&1<a?b+(d||0)<=a?c+(e||0):(a-1)/(b+(d||0))*(c+(e||0))+1|0:0}function P(a,b,c,d,e,f,h){let g=h?a.h:a.map;if(!b[c]||h&&!b[c][h])a.s&&(g=g[d]),h?(b=b[c]||(b[c]=x()),b[h]=1,g=g[h]||(g[h]=x())):b[c]=1,g=g[c]||(g[c]=[]),a.s||(g=g[d]||(g[d]=[])),f&&g.includes(e)||(g[g.length]=e,a.m&&(a=a.register[e]||(a.register[e]=[]),a[a.length]=g))}\nt.search=function(a,b,c){c||(!b&&D(a)?(c=a,a=c.query):D(b)&&(c=b));let d=[],e;let f,h=0;if(c){a=c.query||a;b=c.limit;h=c.offset||0;var g=c.context;f=c.suggest}if(a&&(a=this.encode(\"\"+a),e=a.length,1<e)){c=x();var k=[];for(let n=0,w=0,q;n<e;n++)if((q=a[n])&&q.length>=this.B&&!c[q])if(this.s||f||this.map[q])k[w++]=q,c[q]=1;else return d;a=k;e=a.length}if(!e)return d;b||(b=100);g=this.depth&&1<e&&!1!==g;c=0;let m;g?(m=a[0],c=1):1<e&&a.sort(aa);for(let n,w;c<e;c++){w=a[c];g?(n=pa(this,d,f,b,h,2===e,w,\nm),f&&!1===n&&d.length||(m=w)):n=pa(this,d,f,b,h,1===e,w);if(n)return n;if(f&&c===e-1){k=d.length;if(!k){if(g){g=0;c=-1;continue}return d}if(1===k)return qa(d[0],b,h)}}return ja(d,b,h,f)};\nfunction pa(a,b,c,d,e,f,h,g){let k=[],m=g?a.h:a.map;a.s||(m=ra(m,h,g,a.l));if(m){let n=0;const w=Math.min(m.length,g?a.A:a.D);for(let q=0,r=0,l,p;q<w;q++)if(l=m[q])if(a.s&&(l=ra(l,h,g,a.l)),e&&l&&f&&(p=l.length,p<=e?(e-=p,l=null):(l=l.slice(e),e=0)),l&&(k[n++]=l,f&&(r+=l.length,r>=d)))break;if(n){if(f)return qa(k,d,0);b[b.length]=k;return}}return!c&&k}function qa(a,b,c){a=1===a.length?a[0]:[].concat.apply([],a);return c||a.length>b?a.slice(c,c+b):a}\nfunction ra(a,b,c,d){c?(d=d&&b>c,a=(a=a[d?b:c])&&a[d?c:b]):a=a[b];return a}t.contain=function(a){return!!this.register[a]};t.update=function(a,b){return this.remove(a).add(a,b)};\nt.remove=function(a,b){const c=this.register[a];if(c){if(this.m)for(let d=0,e;d<c.length;d++)e=c[d],e.splice(e.indexOf(a),1);else Q(this.map,a,this.D,this.s),this.depth&&Q(this.h,a,this.A,this.s);b||delete this.register[a];if(this.cache){b=this.cache;for(let d=0,e,f;d<b.h.length;d++)f=b.h[d],e=b.cache[f],e.includes(a)&&(b.h.splice(d--,1),delete b.cache[f])}}return this};\nfunction Q(a,b,c,d,e){let f=0;if(a.constructor===Array)if(e)b=a.indexOf(b),-1!==b?1<a.length&&(a.splice(b,1),f++):f++;else{e=Math.min(a.length,c);for(let h=0,g;h<e;h++)if(g=a[h])f=Q(g,b,c,d,e),d||f||delete a[h]}else for(let h in a)(f=Q(a[h],b,c,d,e))||delete a[h];return f}t.searchCache=la;\nt.export=function(a,b,c,d,e,f){let h=!0;\"undefined\"===typeof f&&(h=new Promise(m=>{f=m}));let g,k;switch(e||(e=0)){case 0:g=\"reg\";if(this.m){k=x();for(let m in this.register)k[m]=1}else k=this.register;break;case 1:g=\"cfg\";k={doc:0,opt:this.s?1:0};break;case 2:g=\"map\";k=this.map;break;case 3:g=\"ctx\";k=this.h;break;default:\"undefined\"===typeof c&&f&&f();return}oa(a,b||this,c,g,d,e,k,f);return h};\nt.import=function(a,b){if(b)switch(C(b)&&(b=JSON.parse(b)),a){case \"cfg\":this.s=!!b.opt;break;case \"reg\":this.m=!1;this.register=b;break;case \"map\":this.map=b;break;case \"ctx\":this.h=b}};ia(N.prototype);function sa(a){a=a.data;var b=self._index;const c=a.args;var d=a.task;switch(d){case \"init\":d=a.options||{};a=a.factory;b=d.encode;d.cache=!1;b&&0===b.indexOf(\"function\")&&(d.encode=Function(\"return \"+b)());a?(Function(\"return \"+a)()(self),self._index=new self.FlexSearch.Index(d),delete self.FlexSearch):self._index=new N(d);break;default:a=a.id,b=b[d].apply(b,c),postMessage(\"search\"===d?{id:a,msg:b}:{id:a})}};let ta=0;function S(a){if(!(this instanceof S))return new S(a);var b;a?E(b=a.encode)&&(a.encode=b.toString()):a={};(b=(self||window)._factory)&&(b=b.toString());const c=\"undefined\"===typeof window&&self.exports,d=this;this.o=ua(b,c,a.worker);this.h=x();if(this.o){if(c)this.o.on(\"message\",function(e){d.h[e.id](e.msg);delete d.h[e.id]});else this.o.onmessage=function(e){e=e.data;d.h[e.id](e.msg);delete d.h[e.id]};this.o.postMessage({task:\"init\",factory:b,options:a})}}T(\"add\");T(\"append\");T(\"search\");\nT(\"update\");T(\"remove\");function T(a){S.prototype[a]=S.prototype[a+\"Async\"]=function(){const b=this,c=[].slice.call(arguments);var d=c[c.length-1];let e;E(d)&&(e=d,c.splice(c.length-1,1));d=new Promise(function(f){setTimeout(function(){b.h[++ta]=f;b.o.postMessage({task:a,id:ta,args:c})})});return e?(d.then(e),this):d}}\nfunction ua(a,b,c){let d;try{d=b?new (require(\"worker_threads\")[\"Worker\"])(__dirname + \"/node/node.js\"):a?new Worker(URL.createObjectURL(new Blob([\"onmessage=\"+sa.toString()],{type:\"text/javascript\"}))):new Worker(C(c)?c:\"worker/worker.js\",{type:\"module\"})}catch(e){}return d};function U(a){if(!(this instanceof U))return new U(a);var b=a.document||a.doc||a,c;this.K=[];this.h=[];this.A=[];this.register=x();this.key=(c=b.key||b.id)&&V(c,this.A)||\"id\";this.m=u(a.fastupdate);this.C=(c=b.store)&&!0!==c&&[];this.store=c&&x();this.I=(c=b.tag)&&V(c,this.A);this.l=c&&x();this.cache=(c=a.cache)&&new M(c);a.cache=!1;this.o=a.worker;this.async=!1;c=x();let d=b.index||b.field||b;C(d)&&(d=[d]);for(let e=0,f,h;e<d.length;e++)f=d[e],C(f)||(h=f,f=f.field),h=D(h)?Object.assign({},a,h):a,\nthis.o&&(c[f]=new S(h),c[f].o||(this.o=!1)),this.o||(c[f]=new N(h,this.register)),this.K[e]=V(f,this.A),this.h[e]=f;if(this.C)for(a=b.store,C(a)&&(a=[a]),b=0;b<a.length;b++)this.C[b]=V(a[b],this.A);this.index=c}function V(a,b){const c=a.split(\":\");let d=0;for(let e=0;e<c.length;e++)a=c[e],0<=a.indexOf(\"[]\")&&(a=a.substring(0,a.length-2))&&(b[d]=!0),a&&(c[d++]=a);d<c.length&&(c.length=d);return 1<d?c:c[0]}function X(a,b){if(C(b))a=a[b];else for(let c=0;a&&c<b.length;c++)a=a[b[c]];return a}\nfunction Y(a,b,c,d,e){a=a[e];if(d===c.length-1)b[e]=a;else if(a)if(a.constructor===Array)for(b=b[e]=Array(a.length),e=0;e<a.length;e++)Y(a,b,c,d,e);else b=b[e]||(b[e]=x()),e=c[++d],Y(a,b,c,d,e)}function Z(a,b,c,d,e,f,h,g){if(a=a[h])if(d===b.length-1){if(a.constructor===Array){if(c[d]){for(b=0;b<a.length;b++)e.add(f,a[b],!0,!0);return}a=a.join(\" \")}e.add(f,a,g,!0)}else if(a.constructor===Array)for(h=0;h<a.length;h++)Z(a,b,c,d,e,f,h,g);else h=b[++d],Z(a,b,c,d,e,f,h,g)}t=U.prototype;\nt.add=function(a,b,c){D(a)&&(b=a,a=X(b,this.key));if(b&&(a||0===a)){if(!c&&this.register[a])return this.update(a,b);for(let d=0,e,f;d<this.h.length;d++)f=this.h[d],e=this.K[d],C(e)&&(e=[e]),Z(b,e,this.A,0,this.index[f],a,e[0],c);if(this.I){let d=X(b,this.I),e=x();C(d)&&(d=[d]);for(let f=0,h,g;f<d.length;f++)if(h=d[f],!e[h]&&(e[h]=1,g=this.l[h]||(this.l[h]=[]),!c||!g.includes(a)))if(g[g.length]=a,this.m){const k=this.register[a]||(this.register[a]=[]);k[k.length]=g}}if(this.store&&(!c||!this.store[a])){let d;\nif(this.C){d=x();for(let e=0,f;e<this.C.length;e++)f=this.C[e],C(f)?d[f]=b[f]:Y(b,d,f,0,f[0])}this.store[a]=d||b}}return this};t.append=function(a,b){return this.add(a,b,!0)};t.update=function(a,b){return this.remove(a).add(a,b)};\nt.remove=function(a){D(a)&&(a=X(a,this.key));if(this.register[a]){for(var b=0;b<this.h.length&&(this.index[this.h[b]].remove(a,!this.o),!this.m);b++);if(this.I&&!this.m)for(let c in this.l){b=this.l[c];const d=b.indexOf(a);-1!==d&&(1<b.length?b.splice(d,1):delete this.l[c])}this.store&&delete this.store[a];delete this.register[a]}return this};\nt.search=function(a,b,c,d){c||(!b&&D(a)?(c=a,a=\"\"):D(b)&&(c=b,b=0));let e=[],f=[],h,g,k,m,n,w,q=0;if(c)if(c.constructor===Array)k=c,c=null;else{a=c.query||a;k=(h=c.pluck)||c.index||c.field;m=c.tag;g=this.store&&c.enrich;n=\"and\"===c.bool;b=c.limit||b||100;w=c.offset||0;if(m&&(C(m)&&(m=[m]),!a)){for(let l=0,p;l<m.length;l++)if(p=va.call(this,m[l],b,w,g))e[e.length]=p,q++;return q?e:[]}C(k)&&(k=[k])}k||(k=this.h);n=n&&(1<k.length||m&&1<m.length);const r=!d&&(this.o||this.async)&&[];for(let l=0,p,A,B;l<\nk.length;l++){let z;A=k[l];C(A)||(z=A,A=z.field,a=z.query||a,b=z.limit||b,g=z.enrich||g);if(r)r[l]=this.index[A].searchAsync(a,b,z||c);else{d?p=d[l]:p=this.index[A].search(a,b,z||c);B=p&&p.length;if(m&&B){const y=[];let H=0;n&&(y[0]=[p]);for(let W=0,ma,R;W<m.length;W++)if(ma=m[W],B=(R=this.l[ma])&&R.length)H++,y[y.length]=n?[R]:R;H&&(p=n?ja(y,b||100,w||0):ka(p,y),B=p.length)}if(B)f[q]=A,e[q++]=p;else if(n)return[]}}if(r){const l=this;return new Promise(function(p){Promise.all(r).then(function(A){p(l.search(a,\nb,c,A))})})}if(!q)return[];if(h&&(!g||!this.store))return e[0];for(let l=0,p;l<f.length;l++){p=e[l];p.length&&g&&(p=wa.call(this,p));if(h)return p;e[l]={field:f[l],result:p}}return e};function va(a,b,c,d){let e=this.l[a],f=e&&e.length-c;if(f&&0<f){if(f>b||c)e=e.slice(c,c+b);d&&(e=wa.call(this,e));return{tag:a,result:e}}}function wa(a){const b=Array(a.length);for(let c=0,d;c<a.length;c++)d=a[c],b[c]={id:d,doc:this.store[d]};return b}t.contain=function(a){return!!this.register[a]};t.get=function(a){return this.store[a]};\nt.set=function(a,b){this.store[a]=b;return this};t.searchCache=la;t.export=function(a,b,c,d,e,f){let h;\"undefined\"===typeof f&&(h=new Promise(g=>{f=g}));e||(e=0);d||(d=0);if(d<this.h.length){const g=this.h[d],k=this.index[g];b=this;setTimeout(function(){k.export(a,b,e?g:\"\",d,e++,f)||(d++,e=1,b.export(a,b,g,d,e,f))})}else{let g,k;switch(e){case 1:g=\"tag\";k=this.l;c=null;break;case 2:g=\"store\";k=this.store;c=null;break;default:f();return}oa(a,this,c,g,d,e,k,f)}return h};\nt.import=function(a,b){if(b)switch(C(b)&&(b=JSON.parse(b)),a){case \"tag\":this.l=b;break;case \"reg\":this.m=!1;this.register=b;for(let d=0,e;d<this.h.length;d++)e=this.index[this.h[d]],e.register=b,e.m=!1;break;case \"store\":this.store=b;break;default:a=a.split(\".\");const c=a[0];a=a[1];c&&a&&this.index[c].import(a,b)}};ia(U.prototype);var ya={encode:xa,F:!1,G:\"\"};const za=[J(\"[\\u00e0\\u00e1\\u00e2\\u00e3\\u00e4\\u00e5]\"),\"a\",J(\"[\\u00e8\\u00e9\\u00ea\\u00eb]\"),\"e\",J(\"[\\u00ec\\u00ed\\u00ee\\u00ef]\"),\"i\",J(\"[\\u00f2\\u00f3\\u00f4\\u00f5\\u00f6\\u0151]\"),\"o\",J(\"[\\u00f9\\u00fa\\u00fb\\u00fc\\u0171]\"),\"u\",J(\"[\\u00fd\\u0177\\u00ff]\"),\"y\",J(\"\\u00f1\"),\"n\",J(\"[\\u00e7c]\"),\"k\",J(\"\\u00df\"),\"s\",J(\" & \"),\" and \"];function xa(a){var b=a=\"\"+a;b.normalize&&(b=b.normalize(\"NFD\").replace(ca,\"\"));return F.call(this,b.toLowerCase(),!a.normalize&&za)};var Ba={encode:Aa,F:!1,G:\"strict\"};const Ca=/[^a-z0-9]+/,Da={b:\"p\",v:\"f\",w:\"f\",z:\"s\",x:\"s\",\"\\u00df\":\"s\",d:\"t\",n:\"m\",c:\"k\",g:\"k\",j:\"k\",q:\"k\",i:\"e\",y:\"e\",u:\"o\"};function Aa(a){a=xa.call(this,a).join(\" \");const b=[];if(a){const c=a.split(Ca),d=c.length;for(let e=0,f,h=0;e<d;e++)if((a=c[e])&&(!this.filter||!this.filter[a])){f=a[0];let g=Da[f]||f,k=g;for(let m=1;m<a.length;m++){f=a[m];const n=Da[f]||f;n&&n!==k&&(g+=n,k=n)}b[h++]=g}}return b};var Fa={encode:Ea,F:!1,G:\"\"};const Ga=[J(\"ae\"),\"a\",J(\"oe\"),\"o\",J(\"sh\"),\"s\",J(\"th\"),\"t\",J(\"ph\"),\"f\",J(\"pf\"),\"f\",J(\"(?![aeo])h(?![aeo])\"),\"\",J(\"(?!^[aeo])h(?!^[aeo])\"),\"\"];function Ea(a,b){a&&(a=Aa.call(this,a).join(\" \"),2<a.length&&(a=G(a,Ga)),b||(1<a.length&&(a=da(a)),a&&(a=a.split(\" \"))));return a||[]};var Ia={encode:Ha,F:!1,G:\"\"};const Ja=J(\"(?!\\\\b)[aeo]\");function Ha(a){a&&(a=Ea.call(this,a,!0),1<a.length&&(a=a.replace(Ja,\"\")),1<a.length&&(a=da(a)),a&&(a=a.split(\" \")));return a||[]};K[\"latin:default\"]=fa;K[\"latin:simple\"]=ya;K[\"latin:balance\"]=Ba;K[\"latin:advanced\"]=Fa;K[\"latin:extra\"]=Ia;export default {Index:N,Document:U,Worker:S,registerCharset:function(a,b){K[a]=b},registerLanguage:function(a,b){ha[a]=b}};\n","/*! chokidar - MIT License (c) 2012 Paul Miller (paulmillr.com) */\nimport { stat as statcb } from 'fs';\nimport { stat, readdir } from 'fs/promises';\nimport { EventEmitter } from 'events';\nimport * as sysPath from 'path';\nimport { readdirp } from 'readdirp';\nimport { NodeFsHandler, EVENTS as EV, isWindows, isIBMi, EMPTY_FN, STR_CLOSE, STR_END, } from './handler.js';\nconst SLASH = '/';\nconst SLASH_SLASH = '//';\nconst ONE_DOT = '.';\nconst TWO_DOTS = '..';\nconst STRING_TYPE = 'string';\nconst BACK_SLASH_RE = /\\\\/g;\nconst DOUBLE_SLASH_RE = /\\/\\//;\nconst DOT_RE = /\\..*\\.(sw[px])$|~$|\\.subl.*\\.tmp/;\nconst REPLACER_RE = /^\\.[/\\\\]/;\nfunction arrify(item) {\n    return Array.isArray(item) ? item : [item];\n}\nconst isMatcherObject = (matcher) => typeof matcher === 'object' && matcher !== null && !(matcher instanceof RegExp);\nfunction createPattern(matcher) {\n    if (typeof matcher === 'function')\n        return matcher;\n    if (typeof matcher === 'string')\n        return (string) => matcher === string;\n    if (matcher instanceof RegExp)\n        return (string) => matcher.test(string);\n    if (typeof matcher === 'object' && matcher !== null) {\n        return (string) => {\n            if (matcher.path === string)\n                return true;\n            if (matcher.recursive) {\n                const relative = sysPath.relative(matcher.path, string);\n                if (!relative) {\n                    return false;\n                }\n                return !relative.startsWith('..') && !sysPath.isAbsolute(relative);\n            }\n            return false;\n        };\n    }\n    return () => false;\n}\nfunction normalizePath(path) {\n    if (typeof path !== 'string')\n        throw new Error('string expected');\n    path = sysPath.normalize(path);\n    path = path.replace(/\\\\/g, '/');\n    let prepend = false;\n    if (path.startsWith('//'))\n        prepend = true;\n    const DOUBLE_SLASH_RE = /\\/\\//;\n    while (path.match(DOUBLE_SLASH_RE))\n        path = path.replace(DOUBLE_SLASH_RE, '/');\n    if (prepend)\n        path = '/' + path;\n    return path;\n}\nfunction matchPatterns(patterns, testString, stats) {\n    const path = normalizePath(testString);\n    for (let index = 0; index < patterns.length; index++) {\n        const pattern = patterns[index];\n        if (pattern(path, stats)) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction anymatch(matchers, testString) {\n    if (matchers == null) {\n        throw new TypeError('anymatch: specify first argument');\n    }\n    // Early cache for matchers.\n    const matchersArray = arrify(matchers);\n    const patterns = matchersArray.map((matcher) => createPattern(matcher));\n    if (testString == null) {\n        return (testString, stats) => {\n            return matchPatterns(patterns, testString, stats);\n        };\n    }\n    return matchPatterns(patterns, testString);\n}\nconst unifyPaths = (paths_) => {\n    const paths = arrify(paths_).flat();\n    if (!paths.every((p) => typeof p === STRING_TYPE)) {\n        throw new TypeError(`Non-string provided as watch path: ${paths}`);\n    }\n    return paths.map(normalizePathToUnix);\n};\n// If SLASH_SLASH occurs at the beginning of path, it is not replaced\n//     because \"//StoragePC/DrivePool/Movies\" is a valid network path\nconst toUnix = (string) => {\n    let str = string.replace(BACK_SLASH_RE, SLASH);\n    let prepend = false;\n    if (str.startsWith(SLASH_SLASH)) {\n        prepend = true;\n    }\n    while (str.match(DOUBLE_SLASH_RE)) {\n        str = str.replace(DOUBLE_SLASH_RE, SLASH);\n    }\n    if (prepend) {\n        str = SLASH + str;\n    }\n    return str;\n};\n// Our version of upath.normalize\n// TODO: this is not equal to path-normalize module - investigate why\nconst normalizePathToUnix = (path) => toUnix(sysPath.normalize(toUnix(path)));\n// TODO: refactor\nconst normalizeIgnored = (cwd = '') => (path) => {\n    if (typeof path === 'string') {\n        return normalizePathToUnix(sysPath.isAbsolute(path) ? path : sysPath.join(cwd, path));\n    }\n    else {\n        return path;\n    }\n};\nconst getAbsolutePath = (path, cwd) => {\n    if (sysPath.isAbsolute(path)) {\n        return path;\n    }\n    return sysPath.join(cwd, path);\n};\nconst EMPTY_SET = Object.freeze(new Set());\n/**\n * Directory entry.\n */\nclass DirEntry {\n    constructor(dir, removeWatcher) {\n        this.path = dir;\n        this._removeWatcher = removeWatcher;\n        this.items = new Set();\n    }\n    add(item) {\n        const { items } = this;\n        if (!items)\n            return;\n        if (item !== ONE_DOT && item !== TWO_DOTS)\n            items.add(item);\n    }\n    async remove(item) {\n        const { items } = this;\n        if (!items)\n            return;\n        items.delete(item);\n        if (items.size > 0)\n            return;\n        const dir = this.path;\n        try {\n            await readdir(dir);\n        }\n        catch (err) {\n            if (this._removeWatcher) {\n                this._removeWatcher(sysPath.dirname(dir), sysPath.basename(dir));\n            }\n        }\n    }\n    has(item) {\n        const { items } = this;\n        if (!items)\n            return;\n        return items.has(item);\n    }\n    getChildren() {\n        const { items } = this;\n        if (!items)\n            return [];\n        return [...items.values()];\n    }\n    dispose() {\n        this.items.clear();\n        this.path = '';\n        this._removeWatcher = EMPTY_FN;\n        this.items = EMPTY_SET;\n        Object.freeze(this);\n    }\n}\nconst STAT_METHOD_F = 'stat';\nconst STAT_METHOD_L = 'lstat';\nexport class WatchHelper {\n    constructor(path, follow, fsw) {\n        this.fsw = fsw;\n        const watchPath = path;\n        this.path = path = path.replace(REPLACER_RE, '');\n        this.watchPath = watchPath;\n        this.fullWatchPath = sysPath.resolve(watchPath);\n        this.dirParts = [];\n        this.dirParts.forEach((parts) => {\n            if (parts.length > 1)\n                parts.pop();\n        });\n        this.followSymlinks = follow;\n        this.statMethod = follow ? STAT_METHOD_F : STAT_METHOD_L;\n    }\n    entryPath(entry) {\n        return sysPath.join(this.watchPath, sysPath.relative(this.watchPath, entry.fullPath));\n    }\n    filterPath(entry) {\n        const { stats } = entry;\n        if (stats && stats.isSymbolicLink())\n            return this.filterDir(entry);\n        const resolvedPath = this.entryPath(entry);\n        // TODO: what if stats is undefined? remove !\n        return this.fsw._isntIgnored(resolvedPath, stats) && this.fsw._hasReadPermissions(stats);\n    }\n    filterDir(entry) {\n        return this.fsw._isntIgnored(this.entryPath(entry), entry.stats);\n    }\n}\n/**\n * Watches files & directories for changes. Emitted events:\n * `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error`\n *\n *     new FSWatcher()\n *       .add(directories)\n *       .on('add', path => log('File', path, 'was added'))\n */\nexport class FSWatcher extends EventEmitter {\n    // Not indenting methods for history sake; for now.\n    constructor(_opts = {}) {\n        super();\n        this.closed = false;\n        this._closers = new Map();\n        this._ignoredPaths = new Set();\n        this._throttled = new Map();\n        this._streams = new Set();\n        this._symlinkPaths = new Map();\n        this._watched = new Map();\n        this._pendingWrites = new Map();\n        this._pendingUnlinks = new Map();\n        this._readyCount = 0;\n        this._readyEmitted = false;\n        const awf = _opts.awaitWriteFinish;\n        const DEF_AWF = { stabilityThreshold: 2000, pollInterval: 100 };\n        const opts = {\n            // Defaults\n            persistent: true,\n            ignoreInitial: false,\n            ignorePermissionErrors: false,\n            interval: 100,\n            binaryInterval: 300,\n            followSymlinks: true,\n            usePolling: false,\n            // useAsync: false,\n            atomic: true, // NOTE: overwritten later (depends on usePolling)\n            ..._opts,\n            // Change format\n            ignored: _opts.ignored ? arrify(_opts.ignored) : arrify([]),\n            awaitWriteFinish: awf === true ? DEF_AWF : typeof awf === 'object' ? { ...DEF_AWF, ...awf } : false,\n        };\n        // Always default to polling on IBM i because fs.watch() is not available on IBM i.\n        if (isIBMi)\n            opts.usePolling = true;\n        // Editor atomic write normalization enabled by default with fs.watch\n        if (opts.atomic === undefined)\n            opts.atomic = !opts.usePolling;\n        // opts.atomic = typeof _opts.atomic === 'number' ? _opts.atomic : 100;\n        // Global override. Useful for developers, who need to force polling for all\n        // instances of chokidar, regardless of usage / dependency depth\n        const envPoll = process.env.CHOKIDAR_USEPOLLING;\n        if (envPoll !== undefined) {\n            const envLower = envPoll.toLowerCase();\n            if (envLower === 'false' || envLower === '0')\n                opts.usePolling = false;\n            else if (envLower === 'true' || envLower === '1')\n                opts.usePolling = true;\n            else\n                opts.usePolling = !!envLower;\n        }\n        const envInterval = process.env.CHOKIDAR_INTERVAL;\n        if (envInterval)\n            opts.interval = Number.parseInt(envInterval, 10);\n        // This is done to emit ready only once, but each 'add' will increase that?\n        let readyCalls = 0;\n        this._emitReady = () => {\n            readyCalls++;\n            if (readyCalls >= this._readyCount) {\n                this._emitReady = EMPTY_FN;\n                this._readyEmitted = true;\n                // use process.nextTick to allow time for listener to be bound\n                process.nextTick(() => this.emit(EV.READY));\n            }\n        };\n        this._emitRaw = (...args) => this.emit(EV.RAW, ...args);\n        this._boundRemove = this._remove.bind(this);\n        this.options = opts;\n        this._nodeFsHandler = new NodeFsHandler(this);\n        // You’re frozen when your heart’s not open.\n        Object.freeze(opts);\n    }\n    _addIgnoredPath(matcher) {\n        if (isMatcherObject(matcher)) {\n            // return early if we already have a deeply equal matcher object\n            for (const ignored of this._ignoredPaths) {\n                if (isMatcherObject(ignored) &&\n                    ignored.path === matcher.path &&\n                    ignored.recursive === matcher.recursive) {\n                    return;\n                }\n            }\n        }\n        this._ignoredPaths.add(matcher);\n    }\n    _removeIgnoredPath(matcher) {\n        this._ignoredPaths.delete(matcher);\n        // now find any matcher objects with the matcher as path\n        if (typeof matcher === 'string') {\n            for (const ignored of this._ignoredPaths) {\n                // TODO (43081j): make this more efficient.\n                // probably just make a `this._ignoredDirectories` or some\n                // such thing.\n                if (isMatcherObject(ignored) && ignored.path === matcher) {\n                    this._ignoredPaths.delete(ignored);\n                }\n            }\n        }\n    }\n    // Public methods\n    /**\n     * Adds paths to be watched on an existing FSWatcher instance.\n     * @param paths_ file or file list. Other arguments are unused\n     */\n    add(paths_, _origAdd, _internal) {\n        const { cwd } = this.options;\n        this.closed = false;\n        this._closePromise = undefined;\n        let paths = unifyPaths(paths_);\n        if (cwd) {\n            paths = paths.map((path) => {\n                const absPath = getAbsolutePath(path, cwd);\n                // Check `path` instead of `absPath` because the cwd portion can't be a glob\n                return absPath;\n            });\n        }\n        paths.forEach((path) => {\n            this._removeIgnoredPath(path);\n        });\n        this._userIgnored = undefined;\n        if (!this._readyCount)\n            this._readyCount = 0;\n        this._readyCount += paths.length;\n        Promise.all(paths.map(async (path) => {\n            const res = await this._nodeFsHandler._addToNodeFs(path, !_internal, undefined, 0, _origAdd);\n            if (res)\n                this._emitReady();\n            return res;\n        })).then((results) => {\n            if (this.closed)\n                return;\n            results.forEach((item) => {\n                if (item)\n                    this.add(sysPath.dirname(item), sysPath.basename(_origAdd || item));\n            });\n        });\n        return this;\n    }\n    /**\n     * Close watchers or start ignoring events from specified paths.\n     */\n    unwatch(paths_) {\n        if (this.closed)\n            return this;\n        const paths = unifyPaths(paths_);\n        const { cwd } = this.options;\n        paths.forEach((path) => {\n            // convert to absolute path unless relative path already matches\n            if (!sysPath.isAbsolute(path) && !this._closers.has(path)) {\n                if (cwd)\n                    path = sysPath.join(cwd, path);\n                path = sysPath.resolve(path);\n            }\n            this._closePath(path);\n            this._addIgnoredPath(path);\n            if (this._watched.has(path)) {\n                this._addIgnoredPath({\n                    path,\n                    recursive: true,\n                });\n            }\n            // reset the cached userIgnored anymatch fn\n            // to make ignoredPaths changes effective\n            this._userIgnored = undefined;\n        });\n        return this;\n    }\n    /**\n     * Close watchers and remove all listeners from watched paths.\n     */\n    close() {\n        if (this._closePromise) {\n            return this._closePromise;\n        }\n        this.closed = true;\n        // Memory management.\n        this.removeAllListeners();\n        const closers = [];\n        this._closers.forEach((closerList) => closerList.forEach((closer) => {\n            const promise = closer();\n            if (promise instanceof Promise)\n                closers.push(promise);\n        }));\n        this._streams.forEach((stream) => stream.destroy());\n        this._userIgnored = undefined;\n        this._readyCount = 0;\n        this._readyEmitted = false;\n        this._watched.forEach((dirent) => dirent.dispose());\n        this._closers.clear();\n        this._watched.clear();\n        this._streams.clear();\n        this._symlinkPaths.clear();\n        this._throttled.clear();\n        this._closePromise = closers.length\n            ? Promise.all(closers).then(() => undefined)\n            : Promise.resolve();\n        return this._closePromise;\n    }\n    /**\n     * Expose list of watched paths\n     * @returns for chaining\n     */\n    getWatched() {\n        const watchList = {};\n        this._watched.forEach((entry, dir) => {\n            const key = this.options.cwd ? sysPath.relative(this.options.cwd, dir) : dir;\n            const index = key || ONE_DOT;\n            watchList[index] = entry.getChildren().sort();\n        });\n        return watchList;\n    }\n    emitWithAll(event, args) {\n        this.emit(event, ...args);\n        if (event !== EV.ERROR)\n            this.emit(EV.ALL, event, ...args);\n    }\n    // Common helpers\n    // --------------\n    /**\n     * Normalize and emit events.\n     * Calling _emit DOES NOT MEAN emit() would be called!\n     * @param event Type of event\n     * @param path File or directory path\n     * @param stats arguments to be passed with event\n     * @returns the error if defined, otherwise the value of the FSWatcher instance's `closed` flag\n     */\n    async _emit(event, path, stats) {\n        if (this.closed)\n            return;\n        const opts = this.options;\n        if (isWindows)\n            path = sysPath.normalize(path);\n        if (opts.cwd)\n            path = sysPath.relative(opts.cwd, path);\n        const args = [path];\n        if (stats != null)\n            args.push(stats);\n        const awf = opts.awaitWriteFinish;\n        let pw;\n        if (awf && (pw = this._pendingWrites.get(path))) {\n            pw.lastChange = new Date();\n            return this;\n        }\n        if (opts.atomic) {\n            if (event === EV.UNLINK) {\n                this._pendingUnlinks.set(path, [event, ...args]);\n                setTimeout(() => {\n                    this._pendingUnlinks.forEach((entry, path) => {\n                        this.emit(...entry);\n                        this.emit(EV.ALL, ...entry);\n                        this._pendingUnlinks.delete(path);\n                    });\n                }, typeof opts.atomic === 'number' ? opts.atomic : 100);\n                return this;\n            }\n            if (event === EV.ADD && this._pendingUnlinks.has(path)) {\n                event = EV.CHANGE;\n                this._pendingUnlinks.delete(path);\n            }\n        }\n        if (awf && (event === EV.ADD || event === EV.CHANGE) && this._readyEmitted) {\n            const awfEmit = (err, stats) => {\n                if (err) {\n                    event = EV.ERROR;\n                    args[0] = err;\n                    this.emitWithAll(event, args);\n                }\n                else if (stats) {\n                    // if stats doesn't exist the file must have been deleted\n                    if (args.length > 1) {\n                        args[1] = stats;\n                    }\n                    else {\n                        args.push(stats);\n                    }\n                    this.emitWithAll(event, args);\n                }\n            };\n            this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit);\n            return this;\n        }\n        if (event === EV.CHANGE) {\n            const isThrottled = !this._throttle(EV.CHANGE, path, 50);\n            if (isThrottled)\n                return this;\n        }\n        if (opts.alwaysStat &&\n            stats === undefined &&\n            (event === EV.ADD || event === EV.ADD_DIR || event === EV.CHANGE)) {\n            const fullPath = opts.cwd ? sysPath.join(opts.cwd, path) : path;\n            let stats;\n            try {\n                stats = await stat(fullPath);\n            }\n            catch (err) {\n                // do nothing\n            }\n            // Suppress event when fs_stat fails, to avoid sending undefined 'stat'\n            if (!stats || this.closed)\n                return;\n            args.push(stats);\n        }\n        this.emitWithAll(event, args);\n        return this;\n    }\n    /**\n     * Common handler for errors\n     * @returns The error if defined, otherwise the value of the FSWatcher instance's `closed` flag\n     */\n    _handleError(error) {\n        const code = error && error.code;\n        if (error &&\n            code !== 'ENOENT' &&\n            code !== 'ENOTDIR' &&\n            (!this.options.ignorePermissionErrors || (code !== 'EPERM' && code !== 'EACCES'))) {\n            this.emit(EV.ERROR, error);\n        }\n        return error || this.closed;\n    }\n    /**\n     * Helper utility for throttling\n     * @param actionType type being throttled\n     * @param path being acted upon\n     * @param timeout duration of time to suppress duplicate actions\n     * @returns tracking object or false if action should be suppressed\n     */\n    _throttle(actionType, path, timeout) {\n        if (!this._throttled.has(actionType)) {\n            this._throttled.set(actionType, new Map());\n        }\n        const action = this._throttled.get(actionType);\n        if (!action)\n            throw new Error('invalid throttle');\n        const actionPath = action.get(path);\n        if (actionPath) {\n            actionPath.count++;\n            return false;\n        }\n        // eslint-disable-next-line prefer-const\n        let timeoutObject;\n        const clear = () => {\n            const item = action.get(path);\n            const count = item ? item.count : 0;\n            action.delete(path);\n            clearTimeout(timeoutObject);\n            if (item)\n                clearTimeout(item.timeoutObject);\n            return count;\n        };\n        timeoutObject = setTimeout(clear, timeout);\n        const thr = { timeoutObject, clear, count: 0 };\n        action.set(path, thr);\n        return thr;\n    }\n    _incrReadyCount() {\n        return this._readyCount++;\n    }\n    /**\n     * Awaits write operation to finish.\n     * Polls a newly created file for size variations. When files size does not change for 'threshold' milliseconds calls callback.\n     * @param path being acted upon\n     * @param threshold Time in milliseconds a file size must be fixed before acknowledging write OP is finished\n     * @param event\n     * @param awfEmit Callback to be called when ready for event to be emitted.\n     */\n    _awaitWriteFinish(path, threshold, event, awfEmit) {\n        const awf = this.options.awaitWriteFinish;\n        if (typeof awf !== 'object')\n            return;\n        const pollInterval = awf.pollInterval;\n        let timeoutHandler;\n        let fullPath = path;\n        if (this.options.cwd && !sysPath.isAbsolute(path)) {\n            fullPath = sysPath.join(this.options.cwd, path);\n        }\n        const now = new Date();\n        const writes = this._pendingWrites;\n        function awaitWriteFinishFn(prevStat) {\n            statcb(fullPath, (err, curStat) => {\n                if (err || !writes.has(path)) {\n                    if (err && err.code !== 'ENOENT')\n                        awfEmit(err);\n                    return;\n                }\n                const now = Number(new Date());\n                if (prevStat && curStat.size !== prevStat.size) {\n                    writes.get(path).lastChange = now;\n                }\n                const pw = writes.get(path);\n                const df = now - pw.lastChange;\n                if (df >= threshold) {\n                    writes.delete(path);\n                    awfEmit(undefined, curStat);\n                }\n                else {\n                    timeoutHandler = setTimeout(awaitWriteFinishFn, pollInterval, curStat);\n                }\n            });\n        }\n        if (!writes.has(path)) {\n            writes.set(path, {\n                lastChange: now,\n                cancelWait: () => {\n                    writes.delete(path);\n                    clearTimeout(timeoutHandler);\n                    return event;\n                },\n            });\n            timeoutHandler = setTimeout(awaitWriteFinishFn, pollInterval);\n        }\n    }\n    /**\n     * Determines whether user has asked to ignore this path.\n     */\n    _isIgnored(path, stats) {\n        if (this.options.atomic && DOT_RE.test(path))\n            return true;\n        if (!this._userIgnored) {\n            const { cwd } = this.options;\n            const ign = this.options.ignored;\n            const ignored = (ign || []).map(normalizeIgnored(cwd));\n            const ignoredPaths = [...this._ignoredPaths];\n            const list = [...ignoredPaths.map(normalizeIgnored(cwd)), ...ignored];\n            this._userIgnored = anymatch(list, undefined);\n        }\n        return this._userIgnored(path, stats);\n    }\n    _isntIgnored(path, stat) {\n        return !this._isIgnored(path, stat);\n    }\n    /**\n     * Provides a set of common helpers and properties relating to symlink handling.\n     * @param path file or directory pattern being watched\n     */\n    _getWatchHelpers(path) {\n        return new WatchHelper(path, this.options.followSymlinks, this);\n    }\n    // Directory helpers\n    // -----------------\n    /**\n     * Provides directory tracking objects\n     * @param directory path of the directory\n     */\n    _getWatchedDir(directory) {\n        const dir = sysPath.resolve(directory);\n        if (!this._watched.has(dir))\n            this._watched.set(dir, new DirEntry(dir, this._boundRemove));\n        return this._watched.get(dir);\n    }\n    // File helpers\n    // ------------\n    /**\n     * Check for read permissions: https://stackoverflow.com/a/11781404/1358405\n     */\n    _hasReadPermissions(stats) {\n        if (this.options.ignorePermissionErrors)\n            return true;\n        return Boolean(Number(stats.mode) & 0o400);\n    }\n    /**\n     * Handles emitting unlink events for\n     * files and directories, and via recursion, for\n     * files and directories within directories that are unlinked\n     * @param directory within which the following item is located\n     * @param item      base path of item/directory\n     */\n    _remove(directory, item, isDirectory) {\n        // if what is being deleted is a directory, get that directory's paths\n        // for recursive deleting and cleaning of watched object\n        // if it is not a directory, nestedDirectoryChildren will be empty array\n        const path = sysPath.join(directory, item);\n        const fullPath = sysPath.resolve(path);\n        isDirectory =\n            isDirectory != null ? isDirectory : this._watched.has(path) || this._watched.has(fullPath);\n        // prevent duplicate handling in case of arriving here nearly simultaneously\n        // via multiple paths (such as _handleFile and _handleDir)\n        if (!this._throttle('remove', path, 100))\n            return;\n        // if the only watched file is removed, watch for its return\n        if (!isDirectory && this._watched.size === 1) {\n            this.add(directory, item, true);\n        }\n        // This will create a new entry in the watched object in either case\n        // so we got to do the directory check beforehand\n        const wp = this._getWatchedDir(path);\n        const nestedDirectoryChildren = wp.getChildren();\n        // Recursively remove children directories / files.\n        nestedDirectoryChildren.forEach((nested) => this._remove(path, nested));\n        // Check if item was on the watched list and remove it\n        const parent = this._getWatchedDir(directory);\n        const wasTracked = parent.has(item);\n        parent.remove(item);\n        // Fixes issue #1042 -> Relative paths were detected and added as symlinks\n        // (https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L612),\n        // but never removed from the map in case the path was deleted.\n        // This leads to an incorrect state if the path was recreated:\n        // https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L553\n        if (this._symlinkPaths.has(fullPath)) {\n            this._symlinkPaths.delete(fullPath);\n        }\n        // If we wait for this file to be fully written, cancel the wait.\n        let relPath = path;\n        if (this.options.cwd)\n            relPath = sysPath.relative(this.options.cwd, path);\n        if (this.options.awaitWriteFinish && this._pendingWrites.has(relPath)) {\n            const event = this._pendingWrites.get(relPath).cancelWait();\n            if (event === EV.ADD)\n                return;\n        }\n        // The Entry will either be a directory that just got removed\n        // or a bogus entry to a file, in either case we have to remove it\n        this._watched.delete(path);\n        this._watched.delete(fullPath);\n        const eventName = isDirectory ? EV.UNLINK_DIR : EV.UNLINK;\n        if (wasTracked && !this._isIgnored(path))\n            this._emit(eventName, path);\n        // Avoid conflicts if we later create another file with the same name\n        this._closePath(path);\n    }\n    /**\n     * Closes all watchers for a path\n     */\n    _closePath(path) {\n        this._closeFile(path);\n        const dir = sysPath.dirname(path);\n        this._getWatchedDir(dir).remove(sysPath.basename(path));\n    }\n    /**\n     * Closes only file-specific watchers\n     */\n    _closeFile(path) {\n        const closers = this._closers.get(path);\n        if (!closers)\n            return;\n        closers.forEach((closer) => closer());\n        this._closers.delete(path);\n    }\n    _addPathCloser(path, closer) {\n        if (!closer)\n            return;\n        let list = this._closers.get(path);\n        if (!list) {\n            list = [];\n            this._closers.set(path, list);\n        }\n        list.push(closer);\n    }\n    _readdirp(root, opts) {\n        if (this.closed)\n            return;\n        const options = { type: EV.ALL, alwaysStat: true, lstat: true, ...opts, depth: 0 };\n        let stream = readdirp(root, options);\n        this._streams.add(stream);\n        stream.once(STR_CLOSE, () => {\n            stream = undefined;\n        });\n        stream.once(STR_END, () => {\n            if (stream) {\n                this._streams.delete(stream);\n                stream = undefined;\n            }\n        });\n        return stream;\n    }\n}\n/**\n * Instantiates watcher with paths to be tracked.\n * @param paths file / directory paths\n * @param options opts, such as `atomic`, `awaitWriteFinish`, `ignored`, and others\n * @returns an instance of FSWatcher for chaining.\n * @example\n * const watcher = watch('.').on('all', (event, path) => { console.log(event, path); });\n * watch('.', { atomic: true, awaitWriteFinish: true, ignored: (f, stats) => stats?.isFile() && !f.endsWith('.js') })\n */\nexport function watch(paths, options = {}) {\n    const watcher = new FSWatcher(options);\n    watcher.add(paths);\n    return watcher;\n}\nexport default { watch, FSWatcher };\n","import { stat, lstat, readdir, realpath } from 'node:fs/promises';\nimport { Readable } from 'node:stream';\nimport { resolve as presolve, relative as prelative, join as pjoin, sep as psep } from 'node:path';\nexport const EntryTypes = {\n    FILE_TYPE: 'files',\n    DIR_TYPE: 'directories',\n    FILE_DIR_TYPE: 'files_directories',\n    EVERYTHING_TYPE: 'all',\n};\nconst defaultOptions = {\n    root: '.',\n    fileFilter: (_entryInfo) => true,\n    directoryFilter: (_entryInfo) => true,\n    type: EntryTypes.FILE_TYPE,\n    lstat: false,\n    depth: 2147483648,\n    alwaysStat: false,\n    highWaterMark: 4096,\n};\nObject.freeze(defaultOptions);\nconst RECURSIVE_ERROR_CODE = 'READDIRP_RECURSIVE_ERROR';\nconst NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP', RECURSIVE_ERROR_CODE]);\nconst ALL_TYPES = [\n    EntryTypes.DIR_TYPE,\n    EntryTypes.EVERYTHING_TYPE,\n    EntryTypes.FILE_DIR_TYPE,\n    EntryTypes.FILE_TYPE,\n];\nconst DIR_TYPES = new Set([\n    EntryTypes.DIR_TYPE,\n    EntryTypes.EVERYTHING_TYPE,\n    EntryTypes.FILE_DIR_TYPE,\n]);\nconst FILE_TYPES = new Set([\n    EntryTypes.EVERYTHING_TYPE,\n    EntryTypes.FILE_DIR_TYPE,\n    EntryTypes.FILE_TYPE,\n]);\nconst isNormalFlowError = (error) => NORMAL_FLOW_ERRORS.has(error.code);\nconst wantBigintFsStats = process.platform === 'win32';\nconst emptyFn = (_entryInfo) => true;\nconst normalizeFilter = (filter) => {\n    if (filter === undefined)\n        return emptyFn;\n    if (typeof filter === 'function')\n        return filter;\n    if (typeof filter === 'string') {\n        const fl = filter.trim();\n        return (entry) => entry.basename === fl;\n    }\n    if (Array.isArray(filter)) {\n        const trItems = filter.map((item) => item.trim());\n        return (entry) => trItems.some((f) => entry.basename === f);\n    }\n    return emptyFn;\n};\n/** Readable readdir stream, emitting new files as they're being listed. */\nexport class ReaddirpStream extends Readable {\n    constructor(options = {}) {\n        super({\n            objectMode: true,\n            autoDestroy: true,\n            highWaterMark: options.highWaterMark,\n        });\n        const opts = { ...defaultOptions, ...options };\n        const { root, type } = opts;\n        this._fileFilter = normalizeFilter(opts.fileFilter);\n        this._directoryFilter = normalizeFilter(opts.directoryFilter);\n        const statMethod = opts.lstat ? lstat : stat;\n        // Use bigint stats if it's windows and stat() supports options (node 10+).\n        if (wantBigintFsStats) {\n            this._stat = (path) => statMethod(path, { bigint: true });\n        }\n        else {\n            this._stat = statMethod;\n        }\n        this._maxDepth = opts.depth ?? defaultOptions.depth;\n        this._wantsDir = type ? DIR_TYPES.has(type) : false;\n        this._wantsFile = type ? FILE_TYPES.has(type) : false;\n        this._wantsEverything = type === EntryTypes.EVERYTHING_TYPE;\n        this._root = presolve(root);\n        this._isDirent = !opts.alwaysStat;\n        this._statsProp = this._isDirent ? 'dirent' : 'stats';\n        this._rdOptions = { encoding: 'utf8', withFileTypes: this._isDirent };\n        // Launch stream with one parent, the root dir.\n        this.parents = [this._exploreDir(root, 1)];\n        this.reading = false;\n        this.parent = undefined;\n    }\n    async _read(batch) {\n        if (this.reading)\n            return;\n        this.reading = true;\n        try {\n            while (!this.destroyed && batch > 0) {\n                const par = this.parent;\n                const fil = par && par.files;\n                if (fil && fil.length > 0) {\n                    const { path, depth } = par;\n                    const slice = fil.splice(0, batch).map((dirent) => this._formatEntry(dirent, path));\n                    const awaited = await Promise.all(slice);\n                    for (const entry of awaited) {\n                        if (!entry)\n                            continue;\n                        if (this.destroyed)\n                            return;\n                        const entryType = await this._getEntryType(entry);\n                        if (entryType === 'directory' && this._directoryFilter(entry)) {\n                            if (depth <= this._maxDepth) {\n                                this.parents.push(this._exploreDir(entry.fullPath, depth + 1));\n                            }\n                            if (this._wantsDir) {\n                                this.push(entry);\n                                batch--;\n                            }\n                        }\n                        else if ((entryType === 'file' || this._includeAsFile(entry)) &&\n                            this._fileFilter(entry)) {\n                            if (this._wantsFile) {\n                                this.push(entry);\n                                batch--;\n                            }\n                        }\n                    }\n                }\n                else {\n                    const parent = this.parents.pop();\n                    if (!parent) {\n                        this.push(null);\n                        break;\n                    }\n                    this.parent = await parent;\n                    if (this.destroyed)\n                        return;\n                }\n            }\n        }\n        catch (error) {\n            this.destroy(error);\n        }\n        finally {\n            this.reading = false;\n        }\n    }\n    async _exploreDir(path, depth) {\n        let files;\n        try {\n            files = await readdir(path, this._rdOptions);\n        }\n        catch (error) {\n            this._onError(error);\n        }\n        return { files, depth, path };\n    }\n    async _formatEntry(dirent, path) {\n        let entry;\n        const basename = this._isDirent ? dirent.name : dirent;\n        try {\n            const fullPath = presolve(pjoin(path, basename));\n            entry = { path: prelative(this._root, fullPath), fullPath, basename };\n            entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath);\n        }\n        catch (err) {\n            this._onError(err);\n            return;\n        }\n        return entry;\n    }\n    _onError(err) {\n        if (isNormalFlowError(err) && !this.destroyed) {\n            this.emit('warn', err);\n        }\n        else {\n            this.destroy(err);\n        }\n    }\n    async _getEntryType(entry) {\n        // entry may be undefined, because a warning or an error were emitted\n        // and the statsProp is undefined\n        if (!entry && this._statsProp in entry) {\n            return '';\n        }\n        const stats = entry[this._statsProp];\n        if (stats.isFile())\n            return 'file';\n        if (stats.isDirectory())\n            return 'directory';\n        if (stats && stats.isSymbolicLink()) {\n            const full = entry.fullPath;\n            try {\n                const entryRealPath = await realpath(full);\n                const entryRealPathStats = await lstat(entryRealPath);\n                if (entryRealPathStats.isFile()) {\n                    return 'file';\n                }\n                if (entryRealPathStats.isDirectory()) {\n                    const len = entryRealPath.length;\n                    if (full.startsWith(entryRealPath) && full.substr(len, 1) === psep) {\n                        const recursiveError = new Error(`Circular symlink detected: \"${full}\" points to \"${entryRealPath}\"`);\n                        // @ts-ignore\n                        recursiveError.code = RECURSIVE_ERROR_CODE;\n                        return this._onError(recursiveError);\n                    }\n                    return 'directory';\n                }\n            }\n            catch (error) {\n                this._onError(error);\n                return '';\n            }\n        }\n    }\n    _includeAsFile(entry) {\n        const stats = entry && entry[this._statsProp];\n        return stats && this._wantsEverything && !stats.isDirectory();\n    }\n}\n/**\n * Streaming version: Reads all files and directories in given root recursively.\n * Consumes ~constant small amount of RAM.\n * @param root Root directory\n * @param options Options to specify root (start directory), filters and recursion depth\n */\nexport function readdirp(root, options = {}) {\n    // @ts-ignore\n    let type = options.entryType || options.type;\n    if (type === 'both')\n        type = EntryTypes.FILE_DIR_TYPE; // backwards-compatibility\n    if (type)\n        options.type = type;\n    if (!root) {\n        throw new Error('readdirp: root argument is required. Usage: readdirp(root, options)');\n    }\n    else if (typeof root !== 'string') {\n        throw new TypeError('readdirp: root argument must be a string. Usage: readdirp(root, options)');\n    }\n    else if (type && !ALL_TYPES.includes(type)) {\n        throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(', ')}`);\n    }\n    options.root = root;\n    return new ReaddirpStream(options);\n}\n/**\n * Promise version: Reads all files and directories in given root recursively.\n * Compared to streaming version, will consume a lot of RAM e.g. when 1 million files are listed.\n * @returns array of paths and their entry infos\n */\nexport function readdirpPromise(root, options = {}) {\n    return new Promise((resolve, reject) => {\n        const files = [];\n        readdirp(root, options)\n            .on('data', (entry) => files.push(entry))\n            .on('end', () => resolve(files))\n            .on('error', (error) => reject(error));\n    });\n}\nexport default readdirp;\n","import { watchFile, unwatchFile, watch as fs_watch } from 'fs';\nimport { open, stat, lstat, realpath as fsrealpath } from 'fs/promises';\nimport * as sysPath from 'path';\nimport { type as osType } from 'os';\nexport const STR_DATA = 'data';\nexport const STR_END = 'end';\nexport const STR_CLOSE = 'close';\nexport const EMPTY_FN = () => { };\nexport const IDENTITY_FN = (val) => val;\nconst pl = process.platform;\nexport const isWindows = pl === 'win32';\nexport const isMacos = pl === 'darwin';\nexport const isLinux = pl === 'linux';\nexport const isFreeBSD = pl === 'freebsd';\nexport const isIBMi = osType() === 'OS400';\nexport const EVENTS = {\n    ALL: 'all',\n    READY: 'ready',\n    ADD: 'add',\n    CHANGE: 'change',\n    ADD_DIR: 'addDir',\n    UNLINK: 'unlink',\n    UNLINK_DIR: 'unlinkDir',\n    RAW: 'raw',\n    ERROR: 'error',\n};\nconst EV = EVENTS;\nconst THROTTLE_MODE_WATCH = 'watch';\nconst statMethods = { lstat, stat };\nconst KEY_LISTENERS = 'listeners';\nconst KEY_ERR = 'errHandlers';\nconst KEY_RAW = 'rawEmitters';\nconst HANDLER_KEYS = [KEY_LISTENERS, KEY_ERR, KEY_RAW];\n// prettier-ignore\nconst binaryExtensions = new Set([\n    '3dm', '3ds', '3g2', '3gp', '7z', 'a', 'aac', 'adp', 'afdesign', 'afphoto', 'afpub', 'ai',\n    'aif', 'aiff', 'alz', 'ape', 'apk', 'appimage', 'ar', 'arj', 'asf', 'au', 'avi',\n    'bak', 'baml', 'bh', 'bin', 'bk', 'bmp', 'btif', 'bz2', 'bzip2',\n    'cab', 'caf', 'cgm', 'class', 'cmx', 'cpio', 'cr2', 'cur', 'dat', 'dcm', 'deb', 'dex', 'djvu',\n    'dll', 'dmg', 'dng', 'doc', 'docm', 'docx', 'dot', 'dotm', 'dra', 'DS_Store', 'dsk', 'dts',\n    'dtshd', 'dvb', 'dwg', 'dxf',\n    'ecelp4800', 'ecelp7470', 'ecelp9600', 'egg', 'eol', 'eot', 'epub', 'exe',\n    'f4v', 'fbs', 'fh', 'fla', 'flac', 'flatpak', 'fli', 'flv', 'fpx', 'fst', 'fvt',\n    'g3', 'gh', 'gif', 'graffle', 'gz', 'gzip',\n    'h261', 'h263', 'h264', 'icns', 'ico', 'ief', 'img', 'ipa', 'iso',\n    'jar', 'jpeg', 'jpg', 'jpgv', 'jpm', 'jxr', 'key', 'ktx',\n    'lha', 'lib', 'lvp', 'lz', 'lzh', 'lzma', 'lzo',\n    'm3u', 'm4a', 'm4v', 'mar', 'mdi', 'mht', 'mid', 'midi', 'mj2', 'mka', 'mkv', 'mmr', 'mng',\n    'mobi', 'mov', 'movie', 'mp3',\n    'mp4', 'mp4a', 'mpeg', 'mpg', 'mpga', 'mxu',\n    'nef', 'npx', 'numbers', 'nupkg',\n    'o', 'odp', 'ods', 'odt', 'oga', 'ogg', 'ogv', 'otf', 'ott',\n    'pages', 'pbm', 'pcx', 'pdb', 'pdf', 'pea', 'pgm', 'pic', 'png', 'pnm', 'pot', 'potm',\n    'potx', 'ppa', 'ppam',\n    'ppm', 'pps', 'ppsm', 'ppsx', 'ppt', 'pptm', 'pptx', 'psd', 'pya', 'pyc', 'pyo', 'pyv',\n    'qt',\n    'rar', 'ras', 'raw', 'resources', 'rgb', 'rip', 'rlc', 'rmf', 'rmvb', 'rpm', 'rtf', 'rz',\n    's3m', 's7z', 'scpt', 'sgi', 'shar', 'snap', 'sil', 'sketch', 'slk', 'smv', 'snk', 'so',\n    'stl', 'suo', 'sub', 'swf',\n    'tar', 'tbz', 'tbz2', 'tga', 'tgz', 'thmx', 'tif', 'tiff', 'tlz', 'ttc', 'ttf', 'txz',\n    'udf', 'uvh', 'uvi', 'uvm', 'uvp', 'uvs', 'uvu',\n    'viv', 'vob',\n    'war', 'wav', 'wax', 'wbmp', 'wdp', 'weba', 'webm', 'webp', 'whl', 'wim', 'wm', 'wma',\n    'wmv', 'wmx', 'woff', 'woff2', 'wrm', 'wvx',\n    'xbm', 'xif', 'xla', 'xlam', 'xls', 'xlsb', 'xlsm', 'xlsx', 'xlt', 'xltm', 'xltx', 'xm',\n    'xmind', 'xpi', 'xpm', 'xwd', 'xz',\n    'z', 'zip', 'zipx',\n]);\nconst isBinaryPath = (filePath) => binaryExtensions.has(sysPath.extname(filePath).slice(1).toLowerCase());\n// TODO: emit errors properly. Example: EMFILE on Macos.\nconst foreach = (val, fn) => {\n    if (val instanceof Set) {\n        val.forEach(fn);\n    }\n    else {\n        fn(val);\n    }\n};\nconst addAndConvert = (main, prop, item) => {\n    let container = main[prop];\n    if (!(container instanceof Set)) {\n        main[prop] = container = new Set([container]);\n    }\n    container.add(item);\n};\nconst clearItem = (cont) => (key) => {\n    const set = cont[key];\n    if (set instanceof Set) {\n        set.clear();\n    }\n    else {\n        delete cont[key];\n    }\n};\nconst delFromSet = (main, prop, item) => {\n    const container = main[prop];\n    if (container instanceof Set) {\n        container.delete(item);\n    }\n    else if (container === item) {\n        delete main[prop];\n    }\n};\nconst isEmptySet = (val) => (val instanceof Set ? val.size === 0 : !val);\nconst FsWatchInstances = new Map();\n/**\n * Instantiates the fs_watch interface\n * @param path to be watched\n * @param options to be passed to fs_watch\n * @param listener main event handler\n * @param errHandler emits info about errors\n * @param emitRaw emits raw event data\n * @returns {NativeFsWatcher}\n */\nfunction createFsWatchInstance(path, options, listener, errHandler, emitRaw) {\n    const handleEvent = (rawEvent, evPath) => {\n        listener(path);\n        emitRaw(rawEvent, evPath, { watchedPath: path });\n        // emit based on events occurring for files from a directory's watcher in\n        // case the file's watcher misses it (and rely on throttling to de-dupe)\n        if (evPath && path !== evPath) {\n            fsWatchBroadcast(sysPath.resolve(path, evPath), KEY_LISTENERS, sysPath.join(path, evPath));\n        }\n    };\n    try {\n        return fs_watch(path, {\n            persistent: options.persistent,\n        }, handleEvent);\n    }\n    catch (error) {\n        errHandler(error);\n        return undefined;\n    }\n}\n/**\n * Helper for passing fs_watch event data to a collection of listeners\n * @param fullPath absolute path bound to fs_watch instance\n */\nconst fsWatchBroadcast = (fullPath, listenerType, val1, val2, val3) => {\n    const cont = FsWatchInstances.get(fullPath);\n    if (!cont)\n        return;\n    foreach(cont[listenerType], (listener) => {\n        listener(val1, val2, val3);\n    });\n};\n/**\n * Instantiates the fs_watch interface or binds listeners\n * to an existing one covering the same file system entry\n * @param path\n * @param fullPath absolute path\n * @param options to be passed to fs_watch\n * @param handlers container for event listener functions\n */\nconst setFsWatchListener = (path, fullPath, options, handlers) => {\n    const { listener, errHandler, rawEmitter } = handlers;\n    let cont = FsWatchInstances.get(fullPath);\n    let watcher;\n    if (!options.persistent) {\n        watcher = createFsWatchInstance(path, options, listener, errHandler, rawEmitter);\n        if (!watcher)\n            return;\n        return watcher.close.bind(watcher);\n    }\n    if (cont) {\n        addAndConvert(cont, KEY_LISTENERS, listener);\n        addAndConvert(cont, KEY_ERR, errHandler);\n        addAndConvert(cont, KEY_RAW, rawEmitter);\n    }\n    else {\n        watcher = createFsWatchInstance(path, options, fsWatchBroadcast.bind(null, fullPath, KEY_LISTENERS), errHandler, // no need to use broadcast here\n        fsWatchBroadcast.bind(null, fullPath, KEY_RAW));\n        if (!watcher)\n            return;\n        watcher.on(EV.ERROR, async (error) => {\n            const broadcastErr = fsWatchBroadcast.bind(null, fullPath, KEY_ERR);\n            if (cont)\n                cont.watcherUnusable = true; // documented since Node 10.4.1\n            // Workaround for https://github.com/joyent/node/issues/4337\n            if (isWindows && error.code === 'EPERM') {\n                try {\n                    const fd = await open(path, 'r');\n                    await fd.close();\n                    broadcastErr(error);\n                }\n                catch (err) {\n                    // do nothing\n                }\n            }\n            else {\n                broadcastErr(error);\n            }\n        });\n        cont = {\n            listeners: listener,\n            errHandlers: errHandler,\n            rawEmitters: rawEmitter,\n            watcher,\n        };\n        FsWatchInstances.set(fullPath, cont);\n    }\n    // const index = cont.listeners.indexOf(listener);\n    // removes this instance's listeners and closes the underlying fs_watch\n    // instance if there are no more listeners left\n    return () => {\n        delFromSet(cont, KEY_LISTENERS, listener);\n        delFromSet(cont, KEY_ERR, errHandler);\n        delFromSet(cont, KEY_RAW, rawEmitter);\n        if (isEmptySet(cont.listeners)) {\n            // Check to protect against issue gh-730.\n            // if (cont.watcherUnusable) {\n            cont.watcher.close();\n            // }\n            FsWatchInstances.delete(fullPath);\n            HANDLER_KEYS.forEach(clearItem(cont));\n            // @ts-ignore\n            cont.watcher = undefined;\n            Object.freeze(cont);\n        }\n    };\n};\n// fs_watchFile helpers\n// object to hold per-process fs_watchFile instances\n// (may be shared across chokidar FSWatcher instances)\nconst FsWatchFileInstances = new Map();\n/**\n * Instantiates the fs_watchFile interface or binds listeners\n * to an existing one covering the same file system entry\n * @param path to be watched\n * @param fullPath absolute path\n * @param options options to be passed to fs_watchFile\n * @param handlers container for event listener functions\n * @returns closer\n */\nconst setFsWatchFileListener = (path, fullPath, options, handlers) => {\n    const { listener, rawEmitter } = handlers;\n    let cont = FsWatchFileInstances.get(fullPath);\n    // let listeners = new Set();\n    // let rawEmitters = new Set();\n    const copts = cont && cont.options;\n    if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) {\n        // \"Upgrade\" the watcher to persistence or a quicker interval.\n        // This creates some unlikely edge case issues if the user mixes\n        // settings in a very weird way, but solving for those cases\n        // doesn't seem worthwhile for the added complexity.\n        // listeners = cont.listeners;\n        // rawEmitters = cont.rawEmitters;\n        unwatchFile(fullPath);\n        cont = undefined;\n    }\n    if (cont) {\n        addAndConvert(cont, KEY_LISTENERS, listener);\n        addAndConvert(cont, KEY_RAW, rawEmitter);\n    }\n    else {\n        // TODO\n        // listeners.add(listener);\n        // rawEmitters.add(rawEmitter);\n        cont = {\n            listeners: listener,\n            rawEmitters: rawEmitter,\n            options,\n            watcher: watchFile(fullPath, options, (curr, prev) => {\n                foreach(cont.rawEmitters, (rawEmitter) => {\n                    rawEmitter(EV.CHANGE, fullPath, { curr, prev });\n                });\n                const currmtime = curr.mtimeMs;\n                if (curr.size !== prev.size || currmtime > prev.mtimeMs || currmtime === 0) {\n                    foreach(cont.listeners, (listener) => listener(path, curr));\n                }\n            }),\n        };\n        FsWatchFileInstances.set(fullPath, cont);\n    }\n    // const index = cont.listeners.indexOf(listener);\n    // Removes this instance's listeners and closes the underlying fs_watchFile\n    // instance if there are no more listeners left.\n    return () => {\n        delFromSet(cont, KEY_LISTENERS, listener);\n        delFromSet(cont, KEY_RAW, rawEmitter);\n        if (isEmptySet(cont.listeners)) {\n            FsWatchFileInstances.delete(fullPath);\n            unwatchFile(fullPath);\n            cont.options = cont.watcher = undefined;\n            Object.freeze(cont);\n        }\n    };\n};\n/**\n * @mixin\n */\nexport class NodeFsHandler {\n    constructor(fsW) {\n        this.fsw = fsW;\n        this._boundHandleError = (error) => fsW._handleError(error);\n    }\n    /**\n     * Watch file for changes with fs_watchFile or fs_watch.\n     * @param path to file or dir\n     * @param listener on fs change\n     * @returns closer for the watcher instance\n     */\n    _watchWithNodeFs(path, listener) {\n        const opts = this.fsw.options;\n        const directory = sysPath.dirname(path);\n        const basename = sysPath.basename(path);\n        const parent = this.fsw._getWatchedDir(directory);\n        parent.add(basename);\n        const absolutePath = sysPath.resolve(path);\n        const options = {\n            persistent: opts.persistent,\n        };\n        if (!listener)\n            listener = EMPTY_FN;\n        let closer;\n        if (opts.usePolling) {\n            const enableBin = opts.interval !== opts.binaryInterval;\n            options.interval = enableBin && isBinaryPath(basename) ? opts.binaryInterval : opts.interval;\n            closer = setFsWatchFileListener(path, absolutePath, options, {\n                listener,\n                rawEmitter: this.fsw._emitRaw,\n            });\n        }\n        else {\n            closer = setFsWatchListener(path, absolutePath, options, {\n                listener,\n                errHandler: this._boundHandleError,\n                rawEmitter: this.fsw._emitRaw,\n            });\n        }\n        return closer;\n    }\n    /**\n     * Watch a file and emit add event if warranted.\n     * @returns closer for the watcher instance\n     */\n    _handleFile(file, stats, initialAdd) {\n        if (this.fsw.closed) {\n            return;\n        }\n        const dirname = sysPath.dirname(file);\n        const basename = sysPath.basename(file);\n        const parent = this.fsw._getWatchedDir(dirname);\n        // stats is always present\n        let prevStats = stats;\n        // if the file is already being watched, do nothing\n        if (parent.has(basename))\n            return;\n        const listener = async (path, newStats) => {\n            if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5))\n                return;\n            if (!newStats || newStats.mtimeMs === 0) {\n                try {\n                    const newStats = await stat(file);\n                    if (this.fsw.closed)\n                        return;\n                    // Check that change event was not fired because of changed only accessTime.\n                    const at = newStats.atimeMs;\n                    const mt = newStats.mtimeMs;\n                    if (!at || at <= mt || mt !== prevStats.mtimeMs) {\n                        this.fsw._emit(EV.CHANGE, file, newStats);\n                    }\n                    if ((isMacos || isLinux || isFreeBSD) && prevStats.ino !== newStats.ino) {\n                        this.fsw._closeFile(path);\n                        prevStats = newStats;\n                        const closer = this._watchWithNodeFs(file, listener);\n                        if (closer)\n                            this.fsw._addPathCloser(path, closer);\n                    }\n                    else {\n                        prevStats = newStats;\n                    }\n                }\n                catch (error) {\n                    // Fix issues where mtime is null but file is still present\n                    this.fsw._remove(dirname, basename);\n                }\n                // add is about to be emitted if file not already tracked in parent\n            }\n            else if (parent.has(basename)) {\n                // Check that change event was not fired because of changed only accessTime.\n                const at = newStats.atimeMs;\n                const mt = newStats.mtimeMs;\n                if (!at || at <= mt || mt !== prevStats.mtimeMs) {\n                    this.fsw._emit(EV.CHANGE, file, newStats);\n                }\n                prevStats = newStats;\n            }\n        };\n        // kick off the watcher\n        const closer = this._watchWithNodeFs(file, listener);\n        // emit an add event if we're supposed to\n        if (!(initialAdd && this.fsw.options.ignoreInitial) && this.fsw._isntIgnored(file)) {\n            if (!this.fsw._throttle(EV.ADD, file, 0))\n                return;\n            this.fsw._emit(EV.ADD, file, stats);\n        }\n        return closer;\n    }\n    /**\n     * Handle symlinks encountered while reading a dir.\n     * @param entry returned by readdirp\n     * @param directory path of dir being read\n     * @param path of this item\n     * @param item basename of this item\n     * @returns true if no more processing is needed for this entry.\n     */\n    async _handleSymlink(entry, directory, path, item) {\n        if (this.fsw.closed) {\n            return;\n        }\n        const full = entry.fullPath;\n        const dir = this.fsw._getWatchedDir(directory);\n        if (!this.fsw.options.followSymlinks) {\n            // watch symlink directly (don't follow) and detect changes\n            this.fsw._incrReadyCount();\n            let linkPath;\n            try {\n                linkPath = await fsrealpath(path);\n            }\n            catch (e) {\n                this.fsw._emitReady();\n                return true;\n            }\n            if (this.fsw.closed)\n                return;\n            if (dir.has(item)) {\n                if (this.fsw._symlinkPaths.get(full) !== linkPath) {\n                    this.fsw._symlinkPaths.set(full, linkPath);\n                    this.fsw._emit(EV.CHANGE, path, entry.stats);\n                }\n            }\n            else {\n                dir.add(item);\n                this.fsw._symlinkPaths.set(full, linkPath);\n                this.fsw._emit(EV.ADD, path, entry.stats);\n            }\n            this.fsw._emitReady();\n            return true;\n        }\n        // don't follow the same symlink more than once\n        if (this.fsw._symlinkPaths.has(full)) {\n            return true;\n        }\n        this.fsw._symlinkPaths.set(full, true);\n    }\n    _handleRead(directory, initialAdd, wh, target, dir, depth, throttler) {\n        // Normalize the directory name on Windows\n        directory = sysPath.join(directory, '');\n        throttler = this.fsw._throttle('readdir', directory, 1000);\n        if (!throttler)\n            return;\n        const previous = this.fsw._getWatchedDir(wh.path);\n        const current = new Set();\n        let stream = this.fsw._readdirp(directory, {\n            fileFilter: (entry) => wh.filterPath(entry),\n            directoryFilter: (entry) => wh.filterDir(entry),\n        });\n        if (!stream)\n            return;\n        stream\n            .on(STR_DATA, async (entry) => {\n            if (this.fsw.closed) {\n                stream = undefined;\n                return;\n            }\n            const item = entry.path;\n            let path = sysPath.join(directory, item);\n            current.add(item);\n            if (entry.stats.isSymbolicLink() &&\n                (await this._handleSymlink(entry, directory, path, item))) {\n                return;\n            }\n            if (this.fsw.closed) {\n                stream = undefined;\n                return;\n            }\n            // Files that present in current directory snapshot\n            // but absent in previous are added to watch list and\n            // emit `add` event.\n            if (item === target || (!target && !previous.has(item))) {\n                this.fsw._incrReadyCount();\n                // ensure relativeness of path is preserved in case of watcher reuse\n                path = sysPath.join(dir, sysPath.relative(dir, path));\n                this._addToNodeFs(path, initialAdd, wh, depth + 1);\n            }\n        })\n            .on(EV.ERROR, this._boundHandleError);\n        return new Promise((resolve, reject) => {\n            if (!stream)\n                return reject();\n            stream.once(STR_END, () => {\n                if (this.fsw.closed) {\n                    stream = undefined;\n                    return;\n                }\n                const wasThrottled = throttler ? throttler.clear() : false;\n                resolve(undefined);\n                // Files that absent in current directory snapshot\n                // but present in previous emit `remove` event\n                // and are removed from @watched[directory].\n                previous\n                    .getChildren()\n                    .filter((item) => {\n                    return item !== directory && !current.has(item);\n                })\n                    .forEach((item) => {\n                    this.fsw._remove(directory, item);\n                });\n                stream = undefined;\n                // one more time for any missed in case changes came in extremely quickly\n                if (wasThrottled)\n                    this._handleRead(directory, false, wh, target, dir, depth, throttler);\n            });\n        });\n    }\n    /**\n     * Read directory to add / remove files from `@watched` list and re-read it on change.\n     * @param dir fs path\n     * @param stats\n     * @param initialAdd\n     * @param depth relative to user-supplied path\n     * @param target child path targeted for watch\n     * @param wh Common watch helpers for this path\n     * @param realpath\n     * @returns closer for the watcher instance.\n     */\n    async _handleDir(dir, stats, initialAdd, depth, target, wh, realpath) {\n        const parentDir = this.fsw._getWatchedDir(sysPath.dirname(dir));\n        const tracked = parentDir.has(sysPath.basename(dir));\n        if (!(initialAdd && this.fsw.options.ignoreInitial) && !target && !tracked) {\n            this.fsw._emit(EV.ADD_DIR, dir, stats);\n        }\n        // ensure dir is tracked (harmless if redundant)\n        parentDir.add(sysPath.basename(dir));\n        this.fsw._getWatchedDir(dir);\n        let throttler;\n        let closer;\n        const oDepth = this.fsw.options.depth;\n        if ((oDepth == null || depth <= oDepth) && !this.fsw._symlinkPaths.has(realpath)) {\n            if (!target) {\n                await this._handleRead(dir, initialAdd, wh, target, dir, depth, throttler);\n                if (this.fsw.closed)\n                    return;\n            }\n            closer = this._watchWithNodeFs(dir, (dirPath, stats) => {\n                // if current directory is removed, do nothing\n                if (stats && stats.mtimeMs === 0)\n                    return;\n                this._handleRead(dirPath, false, wh, target, dir, depth, throttler);\n            });\n        }\n        return closer;\n    }\n    /**\n     * Handle added file, directory, or glob pattern.\n     * Delegates call to _handleFile / _handleDir after checks.\n     * @param path to file or ir\n     * @param initialAdd was the file added at watch instantiation?\n     * @param priorWh depth relative to user-supplied path\n     * @param depth Child path actually targeted for watch\n     * @param target Child path actually targeted for watch\n     */\n    async _addToNodeFs(path, initialAdd, priorWh, depth, target) {\n        const ready = this.fsw._emitReady;\n        if (this.fsw._isIgnored(path) || this.fsw.closed) {\n            ready();\n            return false;\n        }\n        const wh = this.fsw._getWatchHelpers(path);\n        if (priorWh) {\n            wh.filterPath = (entry) => priorWh.filterPath(entry);\n            wh.filterDir = (entry) => priorWh.filterDir(entry);\n        }\n        // evaluate what is at the path we're being asked to watch\n        try {\n            const stats = await statMethods[wh.statMethod](wh.watchPath);\n            if (this.fsw.closed)\n                return;\n            if (this.fsw._isIgnored(wh.watchPath, stats)) {\n                ready();\n                return false;\n            }\n            const follow = this.fsw.options.followSymlinks;\n            let closer;\n            if (stats.isDirectory()) {\n                const absPath = sysPath.resolve(path);\n                const targetPath = follow ? await fsrealpath(path) : path;\n                if (this.fsw.closed)\n                    return;\n                closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath);\n                if (this.fsw.closed)\n                    return;\n                // preserve this symlink's target path\n                if (absPath !== targetPath && targetPath !== undefined) {\n                    this.fsw._symlinkPaths.set(absPath, targetPath);\n                }\n            }\n            else if (stats.isSymbolicLink()) {\n                const targetPath = follow ? await fsrealpath(path) : path;\n                if (this.fsw.closed)\n                    return;\n                const parent = sysPath.dirname(wh.watchPath);\n                this.fsw._getWatchedDir(parent).add(wh.watchPath);\n                this.fsw._emit(EV.ADD, wh.watchPath, stats);\n                closer = await this._handleDir(parent, stats, initialAdd, depth, path, wh, targetPath);\n                if (this.fsw.closed)\n                    return;\n                // preserve this symlink's target path\n                if (targetPath !== undefined) {\n                    this.fsw._symlinkPaths.set(sysPath.resolve(path), targetPath);\n                }\n            }\n            else {\n                closer = this._handleFile(wh.watchPath, stats, initialAdd);\n            }\n            ready();\n            if (closer)\n                this.fsw._addPathCloser(path, closer);\n            return false;\n        }\n        catch (error) {\n            if (this.fsw._handleError(error)) {\n                ready();\n                return path;\n            }\n        }\n    }\n}\n","// src/agent/agent-client.ts\n//\n// Thin Temporal client wrapper used by tb-streamer in multi-agent mode.\n// Does NOT import workflow code from tb-multi-agent — we identify the\n// workflow and its signals/queries by name. The workflow's wire contract\n// lives in @threadbase-sh/agent-types.\n\nimport type { Client } from \"@temporalio/client\";\nimport type { UserInputSignal } from \"@threadbase-sh/agent-types\";\n\n// `defineSignal` / `defineQuery` only ship in `@temporalio/workflow` (a worker-\n// side package we deliberately do NOT pull into the streamer). The handle\n// methods `.signal(...)` and `.query(...)` accept either a plain string OR a\n// definition object with `{ type, name }`. We construct minimal definition\n// objects here — Temporal matches by name, the rest of the shape is virtual\n// branding.\n//\n// Same identifiers as tb-multi-agent's src/workflows/signals.ts.\nconst userInputSignal = { type: \"signal\", name: \"userInput\" } as unknown as {\n  type: \"signal\";\n  name: \"userInput\";\n};\nconst stageQuery = { type: \"query\", name: \"stage\" } as unknown as {\n  type: \"query\";\n  name: \"stage\";\n};\n\nconst ORCHESTRATOR_WORKFLOW_TYPE = \"orchestratorWorkflow\";\n\nexport interface AgentClient {\n  startSession(sessionId: string): Promise<string>;\n  sendUserInput(sessionId: string, payload: UserInputSignal): Promise<void>;\n  endSession(sessionId: string): Promise<void>;\n  getSessionStage(sessionId: string): Promise<string>;\n}\n\nexport interface AgentClientOpts {\n  temporalClient: Client;\n  taskQueue: string;\n}\n\nconst sessionWorkflowId = (sessionId: string): string => `session-${sessionId}`;\n\nexport function createAgentClient({ temporalClient, taskQueue }: AgentClientOpts): AgentClient {\n  return {\n    async startSession(sessionId: string): Promise<string> {\n      const handle = await temporalClient.workflow.start(ORCHESTRATOR_WORKFLOW_TYPE, {\n        taskQueue,\n        workflowId: sessionWorkflowId(sessionId),\n        args: [sessionId],\n        workflowIdReusePolicy: \"REJECT_DUPLICATE\",\n      } as any);\n      return handle.workflowId;\n    },\n    async sendUserInput(sessionId: string, payload: UserInputSignal): Promise<void> {\n      await temporalClient.workflow\n        .getHandle(sessionWorkflowId(sessionId))\n        .signal(userInputSignal as any, payload);\n    },\n    async endSession(sessionId: string): Promise<void> {\n      await temporalClient.workflow.getHandle(sessionWorkflowId(sessionId)).cancel();\n    },\n    async getSessionStage(sessionId: string): Promise<string> {\n      return temporalClient.workflow\n        .getHandle(sessionWorkflowId(sessionId))\n        .query(stageQuery as any);\n    },\n  };\n}\n","// src/agent/agent-config.ts\n//\n// Runtime config for multi-agent mode. Read once at server startup so we don't\n// thread env-var lookups through the rest of the codebase.\n\nexport interface AgentConfig {\n  enabled: boolean;\n  temporal: {\n    address: string;\n    namespace: string;\n    taskQueue: string;\n  };\n  webhook: {\n    hmacSecret: string;\n    timestampSkewSeconds: number;\n  };\n  dedupe: {\n    perSessionCapacity: number;\n  };\n  payload: {\n    limitBytes: number;\n    trajectoryLogBytes: number;\n    trajectoryLogTurns: number;\n  };\n  sessionBusyRetryMs: number;\n  conversationsDir: string;\n}\n\nconst DEFAULTS = {\n  TEMPORAL_ADDRESS: \"localhost:7233\",\n  TEMPORAL_NAMESPACE: \"default\",\n  TEMPORAL_TASK_QUEUE: \"agent-tasks\",\n  PROGRESS_HMAC_SECRET: \"dev-secret-change-me\",\n  PROGRESS_WEBHOOK_TIMESTAMP_SKEW_SECONDS: \"300\",\n  PROGRESS_DEDUPE_CAPACITY: \"1024\",\n  AGENT_PAYLOAD_LIMIT_BYTES: \"1572864\", // 1.5 MB — 75% of Temporal's 2 MB ceiling\n  AGENT_TRAJECTORY_LOG_BYTES: \"512000\", // 500 KB\n  AGENT_TRAJECTORY_LOG_TURNS: \"20\", // First turn count for trajectory WARN\n  AGENT_SESSION_BUSY_RETRY_MS: \"1000\",\n};\n\nfunction isTruthy(v: string | undefined): boolean {\n  if (v === undefined) return false;\n  return v === \"true\" || v === \"1\" || v === \"yes\" || v === \"on\";\n}\n\nexport function readAgentConfig(env: NodeJS.ProcessEnv = process.env): AgentConfig {\n  const enabled = isTruthy(env.MULTI_AGENT_FLOW);\n  return {\n    enabled,\n    temporal: {\n      address: env.TEMPORAL_ADDRESS ?? DEFAULTS.TEMPORAL_ADDRESS,\n      namespace: env.TEMPORAL_NAMESPACE ?? DEFAULTS.TEMPORAL_NAMESPACE,\n      taskQueue: env.TEMPORAL_TASK_QUEUE ?? DEFAULTS.TEMPORAL_TASK_QUEUE,\n    },\n    webhook: {\n      hmacSecret: env.PROGRESS_HMAC_SECRET ?? DEFAULTS.PROGRESS_HMAC_SECRET,\n      timestampSkewSeconds: Number(\n        env.PROGRESS_WEBHOOK_TIMESTAMP_SKEW_SECONDS ??\n          DEFAULTS.PROGRESS_WEBHOOK_TIMESTAMP_SKEW_SECONDS,\n      ),\n    },\n    dedupe: {\n      perSessionCapacity: Number(env.PROGRESS_DEDUPE_CAPACITY ?? DEFAULTS.PROGRESS_DEDUPE_CAPACITY),\n    },\n    payload: {\n      limitBytes: Number(env.AGENT_PAYLOAD_LIMIT_BYTES ?? DEFAULTS.AGENT_PAYLOAD_LIMIT_BYTES),\n      trajectoryLogBytes: Number(\n        env.AGENT_TRAJECTORY_LOG_BYTES ?? DEFAULTS.AGENT_TRAJECTORY_LOG_BYTES,\n      ),\n      trajectoryLogTurns: Number(\n        env.AGENT_TRAJECTORY_LOG_TURNS ?? DEFAULTS.AGENT_TRAJECTORY_LOG_TURNS,\n      ),\n    },\n    sessionBusyRetryMs: Number(\n      env.AGENT_SESSION_BUSY_RETRY_MS ?? DEFAULTS.AGENT_SESSION_BUSY_RETRY_MS,\n    ),\n    // Mirrors ServerConfig.cacheDir's parent — the actual JSONL directory.\n    // We read it from env here; the conversation writer takes the resolved\n    // value from ServerConfig in Task 9.\n    conversationsDir: env.THREADBASE_CONVERSATIONS_DIR ?? \"\",\n  };\n}\n","// src/agent/conversation-writer.ts\n//\n// Persists assistant turns to JSONL when the worker's final agent_output for a\n// turn arrives. The existing ConversationCache + ConversationWatcher then\n// ingest the line via the existing watcher pipeline — see spec §6.3.\n\nimport { appendFile, mkdir } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nexport interface AppendArgs {\n  sessionId: string;\n  turnId: string;\n  content: string;\n  reviewerOverruled?: boolean;\n}\n\nexport interface ConversationWriter {\n  appendAssistantTurn(args: AppendArgs): Promise<void>;\n}\n\nexport function createConversationWriter(opts: { baseDir: string }): ConversationWriter {\n  const { baseDir } = opts;\n\n  return {\n    async appendAssistantTurn(args: AppendArgs): Promise<void> {\n      if (!args.content || args.content.length === 0) {\n        throw new Error(\"ConversationWriter: refusing to write empty assistant turn\");\n      }\n      const file = join(baseDir, `${args.sessionId}.jsonl`);\n      await mkdir(dirname(file), { recursive: true });\n\n      const record = {\n        role: \"assistant\" as const,\n        turnId: args.turnId,\n        content: args.content,\n        timestamp: Date.now(),\n        ...(args.reviewerOverruled ? { reviewerOverruled: true } : {}),\n      };\n\n      const line = `${JSON.stringify(record)}\\n`;\n      await appendFile(file, line, { encoding: \"utf8\" });\n    },\n  };\n}\n","import crypto from 'crypto'\n\nimport { urlAlphabet } from './url-alphabet/index.js'\n\nconst POOL_SIZE_MULTIPLIER = 128\nlet pool, poolOffset\n\nlet fillPool = bytes => {\n  if (bytes < 0) throw new RangeError('Wrong ID size')\n  try {\n    if (!pool || pool.length < bytes) {\n      pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)\n      crypto.randomFillSync(pool)\n      poolOffset = 0\n    } else if (poolOffset + bytes > pool.length) {\n      crypto.randomFillSync(pool)\n      poolOffset = 0\n    }\n  } catch (e) {\n    pool = undefined\n    throw e\n  }\n  poolOffset += bytes\n}\n\nlet random = bytes => {\n  fillPool((bytes |= 0))\n  return pool.subarray(poolOffset - bytes, poolOffset)\n}\n\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n  let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1\n\n\n  let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)\n\n  return (size = defaultSize) => {\n    let id = ''\n    while (true) {\n      let bytes = getRandom(step)\n      let i = step\n      while (i--) {\n        id += alphabet[bytes[i] & mask] || ''\n        if (id.length === size) return id\n      }\n    }\n  }\n}\n\nlet customAlphabet = (alphabet, size = 21) =>\n  customRandom(alphabet, size, random)\n\nlet nanoid = (size = 21) => {\n  fillPool((size |= 0))\n  let id = ''\n  for (let i = poolOffset - size; i < poolOffset; i++) {\n    id += urlAlphabet[pool[i] & 63]\n  }\n  return id\n}\n\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n","let urlAlphabet =\n  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n\nexport { urlAlphabet }\n","// src/agent/handle-send-agent-input.ts\n//\n// Pure function for multi-agent user-input. Server.ts wraps this in HTTP\n// plumbing. Implements spec §3.2 + §5 (payload guard) + §6 (lock check).\n\nimport type { UserInputSignal } from \"@threadbase-sh/agent-types\";\nimport { nanoid } from \"nanoid\";\nimport type { ConversationCache } from \"../conversation-cache\";\nimport { getLogger } from \"../logger\";\nimport type { ManagedSession } from \"../types\";\nimport type { AgentClient } from \"./agent-client\";\nimport type { AgentConfig } from \"./agent-config\";\nimport { AgentErrorCode, agentErrorResponse } from \"./errors\";\nimport { mapTailToConversationTurns } from \"./history-mapper\";\nimport { measureSignalPayload, shouldLogTrajectory } from \"./payload-guard\";\n\nconst log = getLogger(\"agent.send-input\");\n\nexport interface SendInputBody {\n  text?: string;\n}\n\nexport interface SendAgentInputDeps {\n  sessionStore: {\n    getManaged: (sessionId: string) => ManagedSession | null;\n  };\n  cache: ConversationCache;\n  agentClient: AgentClient;\n  agentConfig: AgentConfig;\n}\n\nexport interface SendAgentInputResult {\n  status: number;\n  body: Record<string, unknown>;\n}\n\nexport async function handleSendAgentInput(\n  sessionId: string,\n  body: SendInputBody,\n  deps: SendAgentInputDeps,\n): Promise<SendAgentInputResult> {\n  // 1. Validate body\n  if (typeof body.text !== \"string\" || body.text.length === 0) {\n    return {\n      status: 400,\n      body: agentErrorResponse(\n        AgentErrorCode.INPUT_REQUIRED,\n        \"Body must contain a non-empty `text` field\",\n      ),\n    };\n  }\n\n  // 2. Look up session\n  const session = deps.sessionStore.getManaged(sessionId);\n  if (!session) {\n    return {\n      status: 404,\n      body: agentErrorResponse(AgentErrorCode.SESSION_NOT_FOUND, `Session ${sessionId} not found`),\n    };\n  }\n\n  // 3. Session-busy check\n  if (session.currentTurnId) {\n    return {\n      status: 429,\n      body: agentErrorResponse(\n        AgentErrorCode.SESSION_BUSY,\n        \"A turn is already in flight; retry shortly\",\n        { retryAfterMs: deps.agentConfig.sessionBusyRetryMs },\n      ),\n    };\n  }\n\n  const turnId = nanoid();\n  // 4. Acquire the lock by setting currentTurnId before any I/O.\n  session.currentTurnId = turnId;\n\n  // 5. Build conversation history from cache\n  const conversationId = session.conversationId ?? session.id;\n  const tail = deps.cache.getConversationTail(conversationId);\n  const conversationHistory = mapTailToConversationTurns(tail);\n\n  // 6. Compose signal\n  const signal: UserInputSignal = {\n    turnId,\n    prompt: body.text,\n    conversationHistory,\n  };\n\n  // 7. Payload-size guard\n  const measurement = measureSignalPayload(signal, deps.agentConfig.payload.limitBytes);\n  const turnCount = conversationHistory.length;\n  if (shouldLogTrajectory(turnCount, measurement.bytes, deps.agentConfig.payload)) {\n    log.warn(`session payload trajectory`, {\n      sessionId,\n      turnCount,\n      observedBytes: measurement.bytes,\n      limitBytes: deps.agentConfig.payload.limitBytes,\n      pctOfLimit: Math.round((measurement.bytes / deps.agentConfig.payload.limitBytes) * 100),\n    });\n  }\n  if (measurement.exceedsLimit) {\n    session.currentTurnId = null; // release lock — no signal will be sent\n    return {\n      status: 413,\n      body: agentErrorResponse(\n        AgentErrorCode.SESSION_HISTORY_FULL,\n        \"Conversation history exceeds payload limit\",\n        {\n          limitBytes: deps.agentConfig.payload.limitBytes,\n          observedBytes: measurement.bytes,\n        },\n      ),\n    };\n  }\n\n  // 8. Send signal\n  try {\n    await deps.agentClient.sendUserInput(sessionId, signal);\n  } catch (err) {\n    session.currentTurnId = null; // release lock on failure\n    const message = err instanceof Error ? err.message : \"Temporal unavailable\";\n    return {\n      status: 503,\n      body: agentErrorResponse(AgentErrorCode.TEMPORAL_UNAVAILABLE, message),\n    };\n  }\n\n  return { status: 202, body: { turnId, status: \"queued\" } };\n}\n","// src/agent/errors.ts\n//\n// Structured error codes for multi-agent HTTP endpoints.\n// Existing PTY-mode endpoints keep their unstructured {error: \"msg\"} shape;\n// the retrofit is captured in tb-multi-agent/docs/plans/structured-error-codes-retrofit.md.\n\nexport const AgentErrorCode = {\n  SESSION_NOT_FOUND: \"SESSION_NOT_FOUND\",\n  SESSION_HISTORY_FULL: \"SESSION_HISTORY_FULL\",\n  SESSION_BUSY: \"SESSION_BUSY\",\n  INVALID_SESSION_STATE: \"INVALID_SESSION_STATE\",\n  CONVERSATION_NOT_FOUND: \"CONVERSATION_NOT_FOUND\",\n  INPUT_REQUIRED: \"INPUT_REQUIRED\",\n  INVALID_BODY: \"INVALID_BODY\",\n  TEMPORAL_UNAVAILABLE: \"TEMPORAL_UNAVAILABLE\",\n  NOT_APPLICABLE_IN_MULTI_AGENT_MODE: \"NOT_APPLICABLE_IN_MULTI_AGENT_MODE\",\n  INTERNAL_ERROR: \"INTERNAL_ERROR\",\n} as const;\n\nexport type AgentErrorCode = (typeof AgentErrorCode)[keyof typeof AgentErrorCode];\n\n/**\n * Build a structured error response. `error` and `code` are canonical;\n * `extra` may carry hint fields like `retryAfterMs` or `limitBytes` but\n * cannot override the canonical fields.\n */\nexport function agentErrorResponse(\n  code: AgentErrorCode,\n  message: string,\n  extra: Record<string, unknown> = {},\n): { error: string; code: AgentErrorCode } & Record<string, unknown> {\n  return { ...extra, error: message, code };\n}\n","// src/agent/history-mapper.ts\n//\n// Converts a CachedTail (the shape ConversationCache returns) into a\n// ConversationTurn[] (the shape the worker's UserInputSignal expects).\n//\n// Rules per spec §4:\n// - Text blocks: keep, concatenate with \"\\n\".\n// - tool_use, tool_result, thinking blocks: drop.\n// - Messages with empty content after stripping: drop.\n// - Unknown roles: drop with WARN.\n\nimport type { ConversationTurn } from \"@threadbase-sh/agent-types\";\nimport type { CachedTail } from \"../conversation-cache\";\nimport { getLogger } from \"../logger\";\n\nconst log = getLogger(\"agent.history-mapper\");\n\ntype ContentBlock =\n  | { type: \"text\"; text: string }\n  | { type: \"tool_use\"; id: string; name: string; input: unknown }\n  | { type: \"tool_result\"; tool_use_id: string; content: unknown }\n  | { type: \"thinking\"; thinking: string }\n  | { type: string; [key: string]: unknown };\n\nfunction extractText(message: { text?: string; content?: unknown[] | null }): string {\n  // Prefer structured content[] over flat text if both are present.\n  if (Array.isArray(message.content)) {\n    const blocks = message.content as ContentBlock[];\n    const textParts: string[] = [];\n    for (const block of blocks) {\n      if (\n        block &&\n        typeof block === \"object\" &&\n        block.type === \"text\" &&\n        typeof block.text === \"string\"\n      ) {\n        textParts.push(block.text);\n      }\n      // tool_use / tool_result / thinking: ignored by design.\n    }\n    return textParts.join(\"\\n\");\n  }\n  return typeof message.text === \"string\" ? message.text : \"\";\n}\n\nexport function mapTailToConversationTurns(tail: CachedTail | null): ConversationTurn[] {\n  if (!tail || !Array.isArray(tail.messages) || tail.messages.length === 0) {\n    return [];\n  }\n\n  const turns: ConversationTurn[] = [];\n  for (const message of tail.messages) {\n    const role = message.role;\n    if (role !== \"user\" && role !== \"assistant\") {\n      log.warn(\"unknown role in tail; skipping\", {\n        role,\n        conversationId: tail.conversationId,\n      });\n      continue;\n    }\n    const content = extractText(message);\n    if (!content || content.length === 0) {\n      continue;\n    }\n    turns.push({ role, content });\n  }\n  return turns;\n}\n","// src/agent/payload-guard.ts\n//\n// Per spec §5: enforce a 1.5 MB ceiling on UserInputSignal payloads (75% of\n// Temporal's 2 MB hard limit) and emit trajectory WARN logs as a session\n// approaches the wall.\n\nimport type { UserInputSignal } from \"@threadbase-sh/agent-types\";\n\nexport interface PayloadMeasurement {\n  bytes: number;\n  exceedsLimit: boolean;\n}\n\n/**\n * Serialize the signal and measure its byte size. Returns both the count and\n * whether it exceeds the supplied limit.\n *\n * Callers should refuse the input and return 413 SESSION_HISTORY_FULL when\n * `exceedsLimit` is true.\n */\nexport function measureSignalPayload(\n  signal: UserInputSignal,\n  limitBytes: number,\n): PayloadMeasurement {\n  const bytes = Buffer.byteLength(JSON.stringify(signal), \"utf8\");\n  return { bytes, exceedsLimit: bytes > limitBytes };\n}\n\nexport interface TrajectoryConfig {\n  trajectoryLogBytes: number;\n  trajectoryLogTurns: number;\n}\n\n/**\n * Trajectory log trigger. Fires when EITHER:\n * - The session has reached a turn count that's a multiple of 5, starting at\n *   `trajectoryLogTurns` (default 20), OR\n * - The composed signal is >= `trajectoryLogBytes` (default 500 KB) regardless\n *   of turn count.\n *\n * Returning true means the caller should emit a WARN log line with current\n * size + turn count + percentage-of-limit info.\n */\nexport function shouldLogTrajectory(\n  turnCount: number,\n  bytes: number,\n  cfg: TrajectoryConfig,\n): boolean {\n  if (bytes >= cfg.trajectoryLogBytes) return true;\n  if (turnCount < cfg.trajectoryLogTurns) return false;\n  return (turnCount - cfg.trajectoryLogTurns) % 5 === 0;\n}\n","// src/agent/handle-start-agent-session.ts\n//\n// Pure function (deps + body in, response out) for multi-agent session\n// creation. Server.ts wraps this in HTTP plumbing.\n\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { nanoid } from \"nanoid\"; // already a transitive dep of tb-streamer\nimport type { ManagedSession } from \"../types\";\nimport type { AgentClient } from \"./agent-client\";\nimport type { AgentConfig } from \"./agent-config\";\nimport { AgentErrorCode, agentErrorResponse } from \"./errors\";\n\nexport interface StartSessionBody {\n  conversationId?: string;\n}\n\nexport interface StartAgentSessionDeps {\n  sessionStore: {\n    addManaged: (session: ManagedSession) => void;\n    initAgentSession: (sessionId: string, dedupeCapacity: number) => void;\n  };\n  agentClient: AgentClient;\n  conversationsDir: string;\n  agentConfig: AgentConfig;\n}\n\nexport interface StartAgentSessionResult {\n  status: number;\n  body: Record<string, unknown>;\n}\n\n/**\n * Validate body shape. Accept only `{}` or `{conversationId: string}`.\n * Anything else is `INVALID_BODY`.\n */\nfunction validateBody(body: unknown): { ok: true; conversationId: string | null } | { ok: false } {\n  if (body === null || body === undefined || typeof body !== \"object\") {\n    return { ok: false };\n  }\n  const keys = Object.keys(body);\n  if (keys.length === 0) {\n    return { ok: true, conversationId: null };\n  }\n  if (keys.length === 1 && keys[0] === \"conversationId\") {\n    const v = (body as { conversationId: unknown }).conversationId;\n    if (typeof v === \"string\" && v.length > 0) {\n      return { ok: true, conversationId: v };\n    }\n  }\n  return { ok: false };\n}\n\nexport async function handleStartAgentSession(\n  body: unknown,\n  deps: StartAgentSessionDeps,\n): Promise<StartAgentSessionResult> {\n  const parsed = validateBody(body);\n  if (!parsed.ok) {\n    return {\n      status: 400,\n      body: agentErrorResponse(\n        AgentErrorCode.INVALID_BODY,\n        \"Body must be {} or {conversationId: string}\",\n      ),\n    };\n  }\n\n  let conversationId = parsed.conversationId;\n  if (conversationId) {\n    // Resume — JSONL must exist\n    const jsonlPath = join(deps.conversationsDir, `${conversationId}.jsonl`);\n    if (!existsSync(jsonlPath)) {\n      return {\n        status: 404,\n        body: agentErrorResponse(\n          AgentErrorCode.CONVERSATION_NOT_FOUND,\n          `No conversation found for id ${conversationId}`,\n        ),\n      };\n    }\n  }\n\n  const sessionId = nanoid();\n  if (!conversationId) conversationId = sessionId;\n\n  // Build a minimal ManagedSession. PTY-specific fields stay undefined/null;\n  // the spec (§3.3) says they're returned as null in multi-agent mode.\n  const now = new Date();\n  const session: ManagedSession = {\n    id: sessionId,\n    conversationId,\n    projectPath: \"\",\n    projectName: \"\",\n    branch: \"\",\n    status: \"running\",\n    startedAt: now,\n    completedAt: null,\n    promptCount: 0,\n    lastOutput: \"\",\n    currentTurnId: null,\n  };\n\n  try {\n    deps.sessionStore.addManaged(session);\n    deps.sessionStore.initAgentSession(sessionId, deps.agentConfig.dedupe.perSessionCapacity);\n    await deps.agentClient.startSession(sessionId);\n  } catch (err) {\n    const message = err instanceof Error ? err.message : \"Temporal unavailable\";\n    return {\n      status: 503,\n      body: agentErrorResponse(AgentErrorCode.TEMPORAL_UNAVAILABLE, message),\n    };\n  }\n\n  return {\n    status: 200,\n    body: { sessionId, conversationId, status: \"running\" },\n  };\n}\n","// src/compose.ts\nvar compose = (middleware, onError, onNotFound) => {\n  return (context, next) => {\n    let index = -1;\n    return dispatch(0);\n    async function dispatch(i) {\n      if (i <= index) {\n        throw new Error(\"next() called multiple times\");\n      }\n      index = i;\n      let res;\n      let isError = false;\n      let handler;\n      if (middleware[i]) {\n        handler = middleware[i][0][0];\n        context.req.routeIndex = i;\n      } else {\n        handler = i === middleware.length && next || void 0;\n      }\n      if (handler) {\n        try {\n          res = await handler(context, () => dispatch(i + 1));\n        } catch (err) {\n          if (err instanceof Error && onError) {\n            context.error = err;\n            res = await onError(err, context);\n            isError = true;\n          } else {\n            throw err;\n          }\n        }\n      } else {\n        if (context.finalized === false && onNotFound) {\n          res = await onNotFound(context);\n        }\n      }\n      if (res && (context.finalized === false || isError)) {\n        context.res = res;\n      }\n      return context;\n    }\n  };\n};\nexport {\n  compose\n};\n","// src/request/constants.ts\nvar GET_MATCH_RESULT = /* @__PURE__ */ Symbol();\nexport {\n  GET_MATCH_RESULT\n};\n","// src/utils/body.ts\nimport { HonoRequest } from \"../request.js\";\nvar parseBody = async (request, options = /* @__PURE__ */ Object.create(null)) => {\n  const { all = false, dot = false } = options;\n  const headers = request instanceof HonoRequest ? request.raw.headers : request.headers;\n  const contentType = headers.get(\"Content-Type\");\n  if (contentType?.startsWith(\"multipart/form-data\") || contentType?.startsWith(\"application/x-www-form-urlencoded\")) {\n    return parseFormData(request, { all, dot });\n  }\n  return {};\n};\nasync function parseFormData(request, options) {\n  const formData = await request.formData();\n  if (formData) {\n    return convertFormDataToBodyData(formData, options);\n  }\n  return {};\n}\nfunction convertFormDataToBodyData(formData, options) {\n  const form = /* @__PURE__ */ Object.create(null);\n  formData.forEach((value, key) => {\n    const shouldParseAllValues = options.all || key.endsWith(\"[]\");\n    if (!shouldParseAllValues) {\n      form[key] = value;\n    } else {\n      handleParsingAllValues(form, key, value);\n    }\n  });\n  if (options.dot) {\n    Object.entries(form).forEach(([key, value]) => {\n      const shouldParseDotValues = key.includes(\".\");\n      if (shouldParseDotValues) {\n        handleParsingNestedValues(form, key, value);\n        delete form[key];\n      }\n    });\n  }\n  return form;\n}\nvar handleParsingAllValues = (form, key, value) => {\n  if (form[key] !== void 0) {\n    if (Array.isArray(form[key])) {\n      ;\n      form[key].push(value);\n    } else {\n      form[key] = [form[key], value];\n    }\n  } else {\n    if (!key.endsWith(\"[]\")) {\n      form[key] = value;\n    } else {\n      form[key] = [value];\n    }\n  }\n};\nvar handleParsingNestedValues = (form, key, value) => {\n  if (/(?:^|\\.)__proto__\\./.test(key)) {\n    return;\n  }\n  let nestedForm = form;\n  const keys = key.split(\".\");\n  keys.forEach((key2, index) => {\n    if (index === keys.length - 1) {\n      nestedForm[key2] = value;\n    } else {\n      if (!nestedForm[key2] || typeof nestedForm[key2] !== \"object\" || Array.isArray(nestedForm[key2]) || nestedForm[key2] instanceof File) {\n        nestedForm[key2] = /* @__PURE__ */ Object.create(null);\n      }\n      nestedForm = nestedForm[key2];\n    }\n  });\n};\nexport {\n  parseBody\n};\n","// src/utils/url.ts\nvar splitPath = (path) => {\n  const paths = path.split(\"/\");\n  if (paths[0] === \"\") {\n    paths.shift();\n  }\n  return paths;\n};\nvar splitRoutingPath = (routePath) => {\n  const { groups, path } = extractGroupsFromPath(routePath);\n  const paths = splitPath(path);\n  return replaceGroupMarks(paths, groups);\n};\nvar extractGroupsFromPath = (path) => {\n  const groups = [];\n  path = path.replace(/\\{[^}]+\\}/g, (match, index) => {\n    const mark = `@${index}`;\n    groups.push([mark, match]);\n    return mark;\n  });\n  return { groups, path };\n};\nvar replaceGroupMarks = (paths, groups) => {\n  for (let i = groups.length - 1; i >= 0; i--) {\n    const [mark] = groups[i];\n    for (let j = paths.length - 1; j >= 0; j--) {\n      if (paths[j].includes(mark)) {\n        paths[j] = paths[j].replace(mark, groups[i][1]);\n        break;\n      }\n    }\n  }\n  return paths;\n};\nvar patternCache = {};\nvar getPattern = (label, next) => {\n  if (label === \"*\") {\n    return \"*\";\n  }\n  const match = label.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n  if (match) {\n    const cacheKey = `${label}#${next}`;\n    if (!patternCache[cacheKey]) {\n      if (match[2]) {\n        patternCache[cacheKey] = next && next[0] !== \":\" && next[0] !== \"*\" ? [cacheKey, match[1], new RegExp(`^${match[2]}(?=/${next})`)] : [label, match[1], new RegExp(`^${match[2]}$`)];\n      } else {\n        patternCache[cacheKey] = [label, match[1], true];\n      }\n    }\n    return patternCache[cacheKey];\n  }\n  return null;\n};\nvar tryDecode = (str, decoder) => {\n  try {\n    return decoder(str);\n  } catch {\n    return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {\n      try {\n        return decoder(match);\n      } catch {\n        return match;\n      }\n    });\n  }\n};\nvar tryDecodeURI = (str) => tryDecode(str, decodeURI);\nvar getPath = (request) => {\n  const url = request.url;\n  const start = url.indexOf(\"/\", url.indexOf(\":\") + 4);\n  let i = start;\n  for (; i < url.length; i++) {\n    const charCode = url.charCodeAt(i);\n    if (charCode === 37) {\n      const queryIndex = url.indexOf(\"?\", i);\n      const hashIndex = url.indexOf(\"#\", i);\n      const end = queryIndex === -1 ? hashIndex === -1 ? void 0 : hashIndex : hashIndex === -1 ? queryIndex : Math.min(queryIndex, hashIndex);\n      const path = url.slice(start, end);\n      return tryDecodeURI(path.includes(\"%25\") ? path.replace(/%25/g, \"%2525\") : path);\n    } else if (charCode === 63 || charCode === 35) {\n      break;\n    }\n  }\n  return url.slice(start, i);\n};\nvar getQueryStrings = (url) => {\n  const queryIndex = url.indexOf(\"?\", 8);\n  return queryIndex === -1 ? \"\" : \"?\" + url.slice(queryIndex + 1);\n};\nvar getPathNoStrict = (request) => {\n  const result = getPath(request);\n  return result.length > 1 && result.at(-1) === \"/\" ? result.slice(0, -1) : result;\n};\nvar mergePath = (base, sub, ...rest) => {\n  if (rest.length) {\n    sub = mergePath(sub, ...rest);\n  }\n  return `${base?.[0] === \"/\" ? \"\" : \"/\"}${base}${sub === \"/\" ? \"\" : `${base?.at(-1) === \"/\" ? \"\" : \"/\"}${sub?.[0] === \"/\" ? sub.slice(1) : sub}`}`;\n};\nvar checkOptionalParameter = (path) => {\n  if (path.charCodeAt(path.length - 1) !== 63 || !path.includes(\":\")) {\n    return null;\n  }\n  const segments = path.split(\"/\");\n  const results = [];\n  let basePath = \"\";\n  segments.forEach((segment) => {\n    if (segment !== \"\" && !/\\:/.test(segment)) {\n      basePath += \"/\" + segment;\n    } else if (/\\:/.test(segment)) {\n      if (/\\?/.test(segment)) {\n        if (results.length === 0 && basePath === \"\") {\n          results.push(\"/\");\n        } else {\n          results.push(basePath);\n        }\n        const optionalSegment = segment.replace(\"?\", \"\");\n        basePath += \"/\" + optionalSegment;\n        results.push(basePath);\n      } else {\n        basePath += \"/\" + segment;\n      }\n    }\n  });\n  return results.filter((v, i, a) => a.indexOf(v) === i);\n};\nvar _decodeURI = (value) => {\n  if (!/[%+]/.test(value)) {\n    return value;\n  }\n  if (value.indexOf(\"+\") !== -1) {\n    value = value.replace(/\\+/g, \" \");\n  }\n  return value.indexOf(\"%\") !== -1 ? tryDecode(value, decodeURIComponent_) : value;\n};\nvar _getQueryParam = (url, key, multiple) => {\n  let encoded;\n  if (!multiple && key && !/[%+]/.test(key)) {\n    let keyIndex2 = url.indexOf(\"?\", 8);\n    if (keyIndex2 === -1) {\n      return void 0;\n    }\n    if (!url.startsWith(key, keyIndex2 + 1)) {\n      keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n    }\n    while (keyIndex2 !== -1) {\n      const trailingKeyCode = url.charCodeAt(keyIndex2 + key.length + 1);\n      if (trailingKeyCode === 61) {\n        const valueIndex = keyIndex2 + key.length + 2;\n        const endIndex = url.indexOf(\"&\", valueIndex);\n        return _decodeURI(url.slice(valueIndex, endIndex === -1 ? void 0 : endIndex));\n      } else if (trailingKeyCode == 38 || isNaN(trailingKeyCode)) {\n        return \"\";\n      }\n      keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n    }\n    encoded = /[%+]/.test(url);\n    if (!encoded) {\n      return void 0;\n    }\n  }\n  const results = {};\n  encoded ??= /[%+]/.test(url);\n  let keyIndex = url.indexOf(\"?\", 8);\n  while (keyIndex !== -1) {\n    const nextKeyIndex = url.indexOf(\"&\", keyIndex + 1);\n    let valueIndex = url.indexOf(\"=\", keyIndex);\n    if (valueIndex > nextKeyIndex && nextKeyIndex !== -1) {\n      valueIndex = -1;\n    }\n    let name = url.slice(\n      keyIndex + 1,\n      valueIndex === -1 ? nextKeyIndex === -1 ? void 0 : nextKeyIndex : valueIndex\n    );\n    if (encoded) {\n      name = _decodeURI(name);\n    }\n    keyIndex = nextKeyIndex;\n    if (name === \"\") {\n      continue;\n    }\n    let value;\n    if (valueIndex === -1) {\n      value = \"\";\n    } else {\n      value = url.slice(valueIndex + 1, nextKeyIndex === -1 ? void 0 : nextKeyIndex);\n      if (encoded) {\n        value = _decodeURI(value);\n      }\n    }\n    if (multiple) {\n      if (!(results[name] && Array.isArray(results[name]))) {\n        results[name] = [];\n      }\n      ;\n      results[name].push(value);\n    } else {\n      results[name] ??= value;\n    }\n  }\n  return key ? results[key] : results;\n};\nvar getQueryParam = _getQueryParam;\nvar getQueryParams = (url, key) => {\n  return _getQueryParam(url, key, true);\n};\nvar decodeURIComponent_ = decodeURIComponent;\nexport {\n  checkOptionalParameter,\n  decodeURIComponent_,\n  getPath,\n  getPathNoStrict,\n  getPattern,\n  getQueryParam,\n  getQueryParams,\n  getQueryStrings,\n  mergePath,\n  splitPath,\n  splitRoutingPath,\n  tryDecode,\n  tryDecodeURI\n};\n","// src/request.ts\nimport { HTTPException } from \"./http-exception.js\";\nimport { GET_MATCH_RESULT } from \"./request/constants.js\";\nimport { parseBody } from \"./utils/body.js\";\nimport { decodeURIComponent_, getQueryParam, getQueryParams, tryDecode } from \"./utils/url.js\";\nvar tryDecodeURIComponent = (str) => tryDecode(str, decodeURIComponent_);\nvar HonoRequest = class {\n  /**\n   * `.raw` can get the raw Request object.\n   *\n   * @see {@link https://hono.dev/docs/api/request#raw}\n   *\n   * @example\n   * ```ts\n   * // For Cloudflare Workers\n   * app.post('/', async (c) => {\n   *   const metadata = c.req.raw.cf?.hostMetadata?\n   *   ...\n   * })\n   * ```\n   */\n  raw;\n  #validatedData;\n  // Short name of validatedData\n  #matchResult;\n  routeIndex = 0;\n  /**\n   * `.path` can get the pathname of the request.\n   *\n   * @see {@link https://hono.dev/docs/api/request#path}\n   *\n   * @example\n   * ```ts\n   * app.get('/about/me', (c) => {\n   *   const pathname = c.req.path // `/about/me`\n   * })\n   * ```\n   */\n  path;\n  bodyCache = {};\n  constructor(request, path = \"/\", matchResult = [[]]) {\n    this.raw = request;\n    this.path = path;\n    this.#matchResult = matchResult;\n    this.#validatedData = {};\n  }\n  param(key) {\n    return key ? this.#getDecodedParam(key) : this.#getAllDecodedParams();\n  }\n  #getDecodedParam(key) {\n    const paramKey = this.#matchResult[0][this.routeIndex][1][key];\n    const param = this.#getParamValue(paramKey);\n    return param && /\\%/.test(param) ? tryDecodeURIComponent(param) : param;\n  }\n  #getAllDecodedParams() {\n    const decoded = {};\n    const keys = Object.keys(this.#matchResult[0][this.routeIndex][1]);\n    for (const key of keys) {\n      const value = this.#getParamValue(this.#matchResult[0][this.routeIndex][1][key]);\n      if (value !== void 0) {\n        decoded[key] = /\\%/.test(value) ? tryDecodeURIComponent(value) : value;\n      }\n    }\n    return decoded;\n  }\n  #getParamValue(paramKey) {\n    return this.#matchResult[1] ? this.#matchResult[1][paramKey] : paramKey;\n  }\n  query(key) {\n    return getQueryParam(this.url, key);\n  }\n  queries(key) {\n    return getQueryParams(this.url, key);\n  }\n  header(name) {\n    if (name) {\n      return this.raw.headers.get(name) ?? void 0;\n    }\n    const headerData = {};\n    this.raw.headers.forEach((value, key) => {\n      headerData[key] = value;\n    });\n    return headerData;\n  }\n  async parseBody(options) {\n    return parseBody(this, options);\n  }\n  #cachedBody = (key) => {\n    const { bodyCache, raw } = this;\n    const cachedBody = bodyCache[key];\n    if (cachedBody) {\n      return cachedBody;\n    }\n    const anyCachedKey = Object.keys(bodyCache)[0];\n    if (anyCachedKey) {\n      return bodyCache[anyCachedKey].then((body) => {\n        if (anyCachedKey === \"json\") {\n          body = JSON.stringify(body);\n        }\n        return new Response(body)[key]();\n      });\n    }\n    return bodyCache[key] = raw[key]();\n  };\n  /**\n   * `.json()` can parse Request body of type `application/json`\n   *\n   * @see {@link https://hono.dev/docs/api/request#json}\n   *\n   * @example\n   * ```ts\n   * app.post('/entry', async (c) => {\n   *   const body = await c.req.json()\n   * })\n   * ```\n   */\n  json() {\n    return this.#cachedBody(\"text\").then((text) => JSON.parse(text));\n  }\n  /**\n   * `.text()` can parse Request body of type `text/plain`\n   *\n   * @see {@link https://hono.dev/docs/api/request#text}\n   *\n   * @example\n   * ```ts\n   * app.post('/entry', async (c) => {\n   *   const body = await c.req.text()\n   * })\n   * ```\n   */\n  text() {\n    return this.#cachedBody(\"text\");\n  }\n  /**\n   * `.arrayBuffer()` parse Request body as an `ArrayBuffer`\n   *\n   * @see {@link https://hono.dev/docs/api/request#arraybuffer}\n   *\n   * @example\n   * ```ts\n   * app.post('/entry', async (c) => {\n   *   const body = await c.req.arrayBuffer()\n   * })\n   * ```\n   */\n  arrayBuffer() {\n    return this.#cachedBody(\"arrayBuffer\");\n  }\n  /**\n   * `.bytes()` parses the request body as a `Uint8Array`.\n   *\n   * @see {@link https://hono.dev/docs/api/request#bytes}\n   *\n   * @example\n   * ```ts\n   * app.post('/entry', async (c) => {\n   *   const body = await c.req.bytes()\n   * })\n   * ```\n   */\n  bytes() {\n    return this.#cachedBody(\"arrayBuffer\").then((buffer) => new Uint8Array(buffer));\n  }\n  /**\n   * Parses the request body as a `Blob`.\n   * @example\n   * ```ts\n   * app.post('/entry', async (c) => {\n   *   const body = await c.req.blob();\n   * });\n   * ```\n   * @see https://hono.dev/docs/api/request#blob\n   */\n  blob() {\n    return this.#cachedBody(\"blob\");\n  }\n  /**\n   * Parses the request body as `FormData`.\n   * @example\n   * ```ts\n   * app.post('/entry', async (c) => {\n   *   const body = await c.req.formData();\n   * });\n   * ```\n   * @see https://hono.dev/docs/api/request#formdata\n   */\n  formData() {\n    return this.#cachedBody(\"formData\");\n  }\n  /**\n   * Adds validated data to the request.\n   *\n   * @param target - The target of the validation.\n   * @param data - The validated data to add.\n   */\n  addValidatedData(target, data) {\n    this.#validatedData[target] = data;\n  }\n  valid(target) {\n    return this.#validatedData[target];\n  }\n  /**\n   * `.url()` can get the request url strings.\n   *\n   * @see {@link https://hono.dev/docs/api/request#url}\n   *\n   * @example\n   * ```ts\n   * app.get('/about/me', (c) => {\n   *   const url = c.req.url // `http://localhost:8787/about/me`\n   *   ...\n   * })\n   * ```\n   */\n  get url() {\n    return this.raw.url;\n  }\n  /**\n   * `.method()` can get the method name of the request.\n   *\n   * @see {@link https://hono.dev/docs/api/request#method}\n   *\n   * @example\n   * ```ts\n   * app.get('/about/me', (c) => {\n   *   const method = c.req.method // `GET`\n   * })\n   * ```\n   */\n  get method() {\n    return this.raw.method;\n  }\n  get [GET_MATCH_RESULT]() {\n    return this.#matchResult;\n  }\n  /**\n   * `.matchedRoutes()` can return a matched route in the handler\n   *\n   * @deprecated\n   *\n   * Use matchedRoutes helper defined in \"hono/route\" instead.\n   *\n   * @see {@link https://hono.dev/docs/api/request#matchedroutes}\n   *\n   * @example\n   * ```ts\n   * app.use('*', async function logger(c, next) {\n   *   await next()\n   *   c.req.matchedRoutes.forEach(({ handler, method, path }, i) => {\n   *     const name = handler.name || (handler.length < 2 ? '[handler]' : '[middleware]')\n   *     console.log(\n   *       method,\n   *       ' ',\n   *       path,\n   *       ' '.repeat(Math.max(10 - path.length, 0)),\n   *       name,\n   *       i === c.req.routeIndex ? '<- respond from here' : ''\n   *     )\n   *   })\n   * })\n   * ```\n   */\n  get matchedRoutes() {\n    return this.#matchResult[0].map(([[, route]]) => route);\n  }\n  /**\n   * `routePath()` can retrieve the path registered within the handler\n   *\n   * @deprecated\n   *\n   * Use routePath helper defined in \"hono/route\" instead.\n   *\n   * @see {@link https://hono.dev/docs/api/request#routepath}\n   *\n   * @example\n   * ```ts\n   * app.get('/posts/:id', (c) => {\n   *   return c.json({ path: c.req.routePath })\n   * })\n   * ```\n   */\n  get routePath() {\n    return this.#matchResult[0].map(([[, route]]) => route)[this.routeIndex].path;\n  }\n};\nvar cloneRawRequest = async (req) => {\n  if (!req.raw.bodyUsed) {\n    return req.raw.clone();\n  }\n  const cacheKey = Object.keys(req.bodyCache)[0];\n  if (!cacheKey) {\n    throw new HTTPException(500, {\n      message: \"Cannot clone request: body was already consumed and not cached. Please use HonoRequest methods (e.g., req.json(), req.text()) instead of consuming req.raw directly.\"\n    });\n  }\n  const requestInit = {\n    body: await req[cacheKey](),\n    cache: req.raw.cache,\n    credentials: req.raw.credentials,\n    headers: req.header(),\n    integrity: req.raw.integrity,\n    keepalive: req.raw.keepalive,\n    method: req.method,\n    mode: req.raw.mode,\n    redirect: req.raw.redirect,\n    referrer: req.raw.referrer,\n    referrerPolicy: req.raw.referrerPolicy,\n    signal: req.raw.signal\n  };\n  return new Request(req.url, requestInit);\n};\nexport {\n  HonoRequest,\n  cloneRawRequest\n};\n","// src/utils/html.ts\nvar HtmlEscapedCallbackPhase = {\n  Stringify: 1,\n  BeforeStream: 2,\n  Stream: 3\n};\nvar raw = (value, callbacks) => {\n  const escapedString = new String(value);\n  escapedString.isEscaped = true;\n  escapedString.callbacks = callbacks;\n  return escapedString;\n};\nvar escapeRe = /[&<>'\"]/;\nvar stringBufferToString = async (buffer, callbacks) => {\n  let str = \"\";\n  callbacks ||= [];\n  const resolvedBuffer = await Promise.all(buffer);\n  for (let i = resolvedBuffer.length - 1; ; i--) {\n    str += resolvedBuffer[i];\n    i--;\n    if (i < 0) {\n      break;\n    }\n    let r = resolvedBuffer[i];\n    if (typeof r === \"object\") {\n      callbacks.push(...r.callbacks || []);\n    }\n    const isEscaped = r.isEscaped;\n    r = await (typeof r === \"object\" ? r.toString() : r);\n    if (typeof r === \"object\") {\n      callbacks.push(...r.callbacks || []);\n    }\n    if (r.isEscaped ?? isEscaped) {\n      str += r;\n    } else {\n      const buf = [str];\n      escapeToBuffer(r, buf);\n      str = buf[0];\n    }\n  }\n  return raw(str, callbacks);\n};\nvar escapeToBuffer = (str, buffer) => {\n  const match = str.search(escapeRe);\n  if (match === -1) {\n    buffer[0] += str;\n    return;\n  }\n  let escape;\n  let index;\n  let lastIndex = 0;\n  for (index = match; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34:\n        escape = \"&quot;\";\n        break;\n      case 39:\n        escape = \"&#39;\";\n        break;\n      case 38:\n        escape = \"&amp;\";\n        break;\n      case 60:\n        escape = \"&lt;\";\n        break;\n      case 62:\n        escape = \"&gt;\";\n        break;\n      default:\n        continue;\n    }\n    buffer[0] += str.substring(lastIndex, index) + escape;\n    lastIndex = index + 1;\n  }\n  buffer[0] += str.substring(lastIndex, index);\n};\nvar resolveCallbackSync = (str) => {\n  const callbacks = str.callbacks;\n  if (!callbacks?.length) {\n    return str;\n  }\n  const buffer = [str];\n  const context = {};\n  callbacks.forEach((c) => c({ phase: HtmlEscapedCallbackPhase.Stringify, buffer, context }));\n  return buffer[0];\n};\nvar resolveCallback = async (str, phase, preserveCallbacks, context, buffer) => {\n  if (typeof str === \"object\" && !(str instanceof String)) {\n    if (!(str instanceof Promise)) {\n      str = str.toString();\n    }\n    if (str instanceof Promise) {\n      str = await str;\n    }\n  }\n  const callbacks = str.callbacks;\n  if (!callbacks?.length) {\n    return Promise.resolve(str);\n  }\n  if (buffer) {\n    buffer[0] += str;\n  } else {\n    buffer = [str];\n  }\n  const resStr = Promise.all(callbacks.map((c) => c({ phase, buffer, context }))).then(\n    (res) => Promise.all(\n      res.filter(Boolean).map((str2) => resolveCallback(str2, phase, false, context, buffer))\n    ).then(() => buffer[0])\n  );\n  if (preserveCallbacks) {\n    return raw(await resStr, callbacks);\n  } else {\n    return resStr;\n  }\n};\nexport {\n  HtmlEscapedCallbackPhase,\n  escapeToBuffer,\n  raw,\n  resolveCallback,\n  resolveCallbackSync,\n  stringBufferToString\n};\n","// src/context.ts\nimport { HonoRequest } from \"./request.js\";\nimport { HtmlEscapedCallbackPhase, resolveCallback } from \"./utils/html.js\";\nvar TEXT_PLAIN = \"text/plain; charset=UTF-8\";\nvar setDefaultContentType = (contentType, headers) => {\n  return {\n    \"Content-Type\": contentType,\n    ...headers\n  };\n};\nvar createResponseInstance = (body, init) => new Response(body, init);\nvar Context = class {\n  #rawRequest;\n  #req;\n  /**\n   * `.env` can get bindings (environment variables, secrets, KV namespaces, D1 database, R2 bucket etc.) in Cloudflare Workers.\n   *\n   * @see {@link https://hono.dev/docs/api/context#env}\n   *\n   * @example\n   * ```ts\n   * // Environment object for Cloudflare Workers\n   * app.get('*', async c => {\n   *   const counter = c.env.COUNTER\n   * })\n   * ```\n   */\n  env = {};\n  #var;\n  finalized = false;\n  /**\n   * `.error` can get the error object from the middleware if the Handler throws an error.\n   *\n   * @see {@link https://hono.dev/docs/api/context#error}\n   *\n   * @example\n   * ```ts\n   * app.use('*', async (c, next) => {\n   *   await next()\n   *   if (c.error) {\n   *     // do something...\n   *   }\n   * })\n   * ```\n   */\n  error;\n  #status;\n  #executionCtx;\n  #res;\n  #layout;\n  #renderer;\n  #notFoundHandler;\n  #preparedHeaders;\n  #matchResult;\n  #path;\n  /**\n   * Creates an instance of the Context class.\n   *\n   * @param req - The Request object.\n   * @param options - Optional configuration options for the context.\n   */\n  constructor(req, options) {\n    this.#rawRequest = req;\n    if (options) {\n      this.#executionCtx = options.executionCtx;\n      this.env = options.env;\n      this.#notFoundHandler = options.notFoundHandler;\n      this.#path = options.path;\n      this.#matchResult = options.matchResult;\n    }\n  }\n  /**\n   * `.req` is the instance of {@link HonoRequest}.\n   */\n  get req() {\n    this.#req ??= new HonoRequest(this.#rawRequest, this.#path, this.#matchResult);\n    return this.#req;\n  }\n  /**\n   * @see {@link https://hono.dev/docs/api/context#event}\n   * The FetchEvent associated with the current request.\n   *\n   * @throws Will throw an error if the context does not have a FetchEvent.\n   */\n  get event() {\n    if (this.#executionCtx && \"respondWith\" in this.#executionCtx) {\n      return this.#executionCtx;\n    } else {\n      throw Error(\"This context has no FetchEvent\");\n    }\n  }\n  /**\n   * @see {@link https://hono.dev/docs/api/context#executionctx}\n   * The ExecutionContext associated with the current request.\n   *\n   * @throws Will throw an error if the context does not have an ExecutionContext.\n   */\n  get executionCtx() {\n    if (this.#executionCtx) {\n      return this.#executionCtx;\n    } else {\n      throw Error(\"This context has no ExecutionContext\");\n    }\n  }\n  /**\n   * @see {@link https://hono.dev/docs/api/context#res}\n   * The Response object for the current request.\n   */\n  get res() {\n    return this.#res ||= createResponseInstance(null, {\n      headers: this.#preparedHeaders ??= new Headers()\n    });\n  }\n  /**\n   * Sets the Response object for the current request.\n   *\n   * @param _res - The Response object to set.\n   */\n  set res(_res) {\n    if (this.#res && _res) {\n      _res = createResponseInstance(_res.body, _res);\n      for (const [k, v] of this.#res.headers.entries()) {\n        if (k === \"content-type\") {\n          continue;\n        }\n        if (k === \"set-cookie\") {\n          const cookies = this.#res.headers.getSetCookie();\n          _res.headers.delete(\"set-cookie\");\n          for (const cookie of cookies) {\n            _res.headers.append(\"set-cookie\", cookie);\n          }\n        } else {\n          _res.headers.set(k, v);\n        }\n      }\n    }\n    this.#res = _res;\n    this.finalized = true;\n  }\n  /**\n   * `.render()` can create a response within a layout.\n   *\n   * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n   *\n   * @example\n   * ```ts\n   * app.get('/', (c) => {\n   *   return c.render('Hello!')\n   * })\n   * ```\n   */\n  render = (...args) => {\n    this.#renderer ??= (content) => this.html(content);\n    return this.#renderer(...args);\n  };\n  /**\n   * Sets the layout for the response.\n   *\n   * @param layout - The layout to set.\n   * @returns The layout function.\n   */\n  setLayout = (layout) => this.#layout = layout;\n  /**\n   * Gets the current layout for the response.\n   *\n   * @returns The current layout function.\n   */\n  getLayout = () => this.#layout;\n  /**\n   * `.setRenderer()` can set the layout in the custom middleware.\n   *\n   * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n   *\n   * @example\n   * ```tsx\n   * app.use('*', async (c, next) => {\n   *   c.setRenderer((content) => {\n   *     return c.html(\n   *       <html>\n   *         <body>\n   *           <p>{content}</p>\n   *         </body>\n   *       </html>\n   *     )\n   *   })\n   *   await next()\n   * })\n   * ```\n   */\n  setRenderer = (renderer) => {\n    this.#renderer = renderer;\n  };\n  /**\n   * `.header()` can set headers.\n   *\n   * @see {@link https://hono.dev/docs/api/context#header}\n   *\n   * @example\n   * ```ts\n   * app.get('/welcome', (c) => {\n   *   // Set headers\n   *   c.header('X-Message', 'Hello!')\n   *   c.header('Content-Type', 'text/plain')\n   *\n   *   return c.body('Thank you for coming')\n   * })\n   * ```\n   */\n  header = (name, value, options) => {\n    if (this.finalized) {\n      this.#res = createResponseInstance(this.#res.body, this.#res);\n    }\n    const headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers();\n    if (value === void 0) {\n      headers.delete(name);\n    } else if (options?.append) {\n      headers.append(name, value);\n    } else {\n      headers.set(name, value);\n    }\n  };\n  status = (status) => {\n    this.#status = status;\n  };\n  /**\n   * `.set()` can set the value specified by the key.\n   *\n   * @see {@link https://hono.dev/docs/api/context#set-get}\n   *\n   * @example\n   * ```ts\n   * app.use('*', async (c, next) => {\n   *   c.set('message', 'Hono is hot!!')\n   *   await next()\n   * })\n   * ```\n   */\n  set = (key, value) => {\n    this.#var ??= /* @__PURE__ */ new Map();\n    this.#var.set(key, value);\n  };\n  /**\n   * `.get()` can use the value specified by the key.\n   *\n   * @see {@link https://hono.dev/docs/api/context#set-get}\n   *\n   * @example\n   * ```ts\n   * app.get('/', (c) => {\n   *   const message = c.get('message')\n   *   return c.text(`The message is \"${message}\"`)\n   * })\n   * ```\n   */\n  get = (key) => {\n    return this.#var ? this.#var.get(key) : void 0;\n  };\n  /**\n   * `.var` can access the value of a variable.\n   *\n   * @see {@link https://hono.dev/docs/api/context#var}\n   *\n   * @example\n   * ```ts\n   * const result = c.var.client.oneMethod()\n   * ```\n   */\n  // c.var.propName is a read-only\n  get var() {\n    if (!this.#var) {\n      return {};\n    }\n    return Object.fromEntries(this.#var);\n  }\n  #newResponse(data, arg, headers) {\n    const responseHeaders = this.#res ? new Headers(this.#res.headers) : this.#preparedHeaders ?? new Headers();\n    if (typeof arg === \"object\" && \"headers\" in arg) {\n      const argHeaders = arg.headers instanceof Headers ? arg.headers : new Headers(arg.headers);\n      for (const [key, value] of argHeaders) {\n        if (key.toLowerCase() === \"set-cookie\") {\n          responseHeaders.append(key, value);\n        } else {\n          responseHeaders.set(key, value);\n        }\n      }\n    }\n    if (headers) {\n      for (const [k, v] of Object.entries(headers)) {\n        if (typeof v === \"string\") {\n          responseHeaders.set(k, v);\n        } else {\n          responseHeaders.delete(k);\n          for (const v2 of v) {\n            responseHeaders.append(k, v2);\n          }\n        }\n      }\n    }\n    const status = typeof arg === \"number\" ? arg : arg?.status ?? this.#status;\n    return createResponseInstance(data, { status, headers: responseHeaders });\n  }\n  newResponse = (...args) => this.#newResponse(...args);\n  /**\n   * `.body()` can return the HTTP response.\n   * You can set headers with `.header()` and set HTTP status code with `.status`.\n   * This can also be set in `.text()`, `.json()` and so on.\n   *\n   * @see {@link https://hono.dev/docs/api/context#body}\n   *\n   * @example\n   * ```ts\n   * app.get('/welcome', (c) => {\n   *   // Set headers\n   *   c.header('X-Message', 'Hello!')\n   *   c.header('Content-Type', 'text/plain')\n   *   // Set HTTP status code\n   *   c.status(201)\n   *\n   *   // Return the response body\n   *   return c.body('Thank you for coming')\n   * })\n   * ```\n   */\n  body = (data, arg, headers) => this.#newResponse(data, arg, headers);\n  /**\n   * `.text()` can render text as `Content-Type:text/plain`.\n   *\n   * @see {@link https://hono.dev/docs/api/context#text}\n   *\n   * @example\n   * ```ts\n   * app.get('/say', (c) => {\n   *   return c.text('Hello!')\n   * })\n   * ```\n   */\n  text = (text, arg, headers) => {\n    return !this.#preparedHeaders && !this.#status && !arg && !headers && !this.finalized ? new Response(text) : this.#newResponse(\n      text,\n      arg,\n      setDefaultContentType(TEXT_PLAIN, headers)\n    );\n  };\n  /**\n   * `.json()` can render JSON as `Content-Type:application/json`.\n   *\n   * @see {@link https://hono.dev/docs/api/context#json}\n   *\n   * @example\n   * ```ts\n   * app.get('/api', (c) => {\n   *   return c.json({ message: 'Hello!' })\n   * })\n   * ```\n   */\n  json = (object, arg, headers) => {\n    return this.#newResponse(\n      JSON.stringify(object),\n      arg,\n      setDefaultContentType(\"application/json\", headers)\n    );\n  };\n  html = (html, arg, headers) => {\n    const res = (html2) => this.#newResponse(html2, arg, setDefaultContentType(\"text/html; charset=UTF-8\", headers));\n    return typeof html === \"object\" ? resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then(res) : res(html);\n  };\n  /**\n   * `.redirect()` can Redirect, default status code is 302.\n   *\n   * @see {@link https://hono.dev/docs/api/context#redirect}\n   *\n   * @example\n   * ```ts\n   * app.get('/redirect', (c) => {\n   *   return c.redirect('/')\n   * })\n   * app.get('/redirect-permanently', (c) => {\n   *   return c.redirect('/', 301)\n   * })\n   * ```\n   */\n  redirect = (location, status) => {\n    const locationString = String(location);\n    this.header(\n      \"Location\",\n      // Multibyes should be encoded\n      // eslint-disable-next-line no-control-regex\n      !/[^\\x00-\\xFF]/.test(locationString) ? locationString : encodeURI(locationString)\n    );\n    return this.newResponse(null, status ?? 302);\n  };\n  /**\n   * `.notFound()` can return the Not Found Response.\n   *\n   * @see {@link https://hono.dev/docs/api/context#notfound}\n   *\n   * @example\n   * ```ts\n   * app.get('/notfound', (c) => {\n   *   return c.notFound()\n   * })\n   * ```\n   */\n  notFound = () => {\n    this.#notFoundHandler ??= () => createResponseInstance();\n    return this.#notFoundHandler(this);\n  };\n};\nexport {\n  Context,\n  TEXT_PLAIN\n};\n","// src/router.ts\nvar METHOD_NAME_ALL = \"ALL\";\nvar METHOD_NAME_ALL_LOWERCASE = \"all\";\nvar METHODS = [\"get\", \"post\", \"put\", \"delete\", \"options\", \"patch\"];\nvar MESSAGE_MATCHER_IS_ALREADY_BUILT = \"Can not add a route since the matcher is already built.\";\nvar UnsupportedPathError = class extends Error {\n};\nexport {\n  MESSAGE_MATCHER_IS_ALREADY_BUILT,\n  METHODS,\n  METHOD_NAME_ALL,\n  METHOD_NAME_ALL_LOWERCASE,\n  UnsupportedPathError\n};\n","// src/utils/constants.ts\nvar COMPOSED_HANDLER = \"__COMPOSED_HANDLER\";\nexport {\n  COMPOSED_HANDLER\n};\n","// src/hono-base.ts\nimport { compose } from \"./compose.js\";\nimport { Context } from \"./context.js\";\nimport { METHODS, METHOD_NAME_ALL, METHOD_NAME_ALL_LOWERCASE } from \"./router.js\";\nimport { COMPOSED_HANDLER } from \"./utils/constants.js\";\nimport { getPath, getPathNoStrict, mergePath } from \"./utils/url.js\";\nvar notFoundHandler = (c) => {\n  return c.text(\"404 Not Found\", 404);\n};\nvar errorHandler = (err, c) => {\n  if (\"getResponse\" in err) {\n    const res = err.getResponse();\n    return c.newResponse(res.body, res);\n  }\n  console.error(err);\n  return c.text(\"Internal Server Error\", 500);\n};\nvar Hono = class _Hono {\n  get;\n  post;\n  put;\n  delete;\n  options;\n  patch;\n  all;\n  on;\n  use;\n  /*\n    This class is like an abstract class and does not have a router.\n    To use it, inherit the class and implement router in the constructor.\n  */\n  router;\n  getPath;\n  // Cannot use `#` because it requires visibility at JavaScript runtime.\n  _basePath = \"/\";\n  #path = \"/\";\n  routes = [];\n  constructor(options = {}) {\n    const allMethods = [...METHODS, METHOD_NAME_ALL_LOWERCASE];\n    allMethods.forEach((method) => {\n      this[method] = (args1, ...args) => {\n        if (typeof args1 === \"string\") {\n          this.#path = args1;\n        } else {\n          this.#addRoute(method, this.#path, args1);\n        }\n        args.forEach((handler) => {\n          this.#addRoute(method, this.#path, handler);\n        });\n        return this;\n      };\n    });\n    this.on = (method, path, ...handlers) => {\n      for (const p of [path].flat()) {\n        this.#path = p;\n        for (const m of [method].flat()) {\n          handlers.map((handler) => {\n            this.#addRoute(m.toUpperCase(), this.#path, handler);\n          });\n        }\n      }\n      return this;\n    };\n    this.use = (arg1, ...handlers) => {\n      if (typeof arg1 === \"string\") {\n        this.#path = arg1;\n      } else {\n        this.#path = \"*\";\n        handlers.unshift(arg1);\n      }\n      handlers.forEach((handler) => {\n        this.#addRoute(METHOD_NAME_ALL, this.#path, handler);\n      });\n      return this;\n    };\n    const { strict, ...optionsWithoutStrict } = options;\n    Object.assign(this, optionsWithoutStrict);\n    this.getPath = strict ?? true ? options.getPath ?? getPath : getPathNoStrict;\n  }\n  #clone() {\n    const clone = new _Hono({\n      router: this.router,\n      getPath: this.getPath\n    });\n    clone.errorHandler = this.errorHandler;\n    clone.#notFoundHandler = this.#notFoundHandler;\n    clone.routes = this.routes;\n    return clone;\n  }\n  #notFoundHandler = notFoundHandler;\n  // Cannot use `#` because it requires visibility at JavaScript runtime.\n  errorHandler = errorHandler;\n  /**\n   * `.route()` allows grouping other Hono instance in routes.\n   *\n   * @see {@link https://hono.dev/docs/api/routing#grouping}\n   *\n   * @param {string} path - base Path\n   * @param {Hono} app - other Hono instance\n   * @returns {Hono} routed Hono instance\n   *\n   * @example\n   * ```ts\n   * const app = new Hono()\n   * const app2 = new Hono()\n   *\n   * app2.get(\"/user\", (c) => c.text(\"user\"))\n   * app.route(\"/api\", app2) // GET /api/user\n   * ```\n   */\n  route(path, app) {\n    const subApp = this.basePath(path);\n    app.routes.map((r) => {\n      let handler;\n      if (app.errorHandler === errorHandler) {\n        handler = r.handler;\n      } else {\n        handler = async (c, next) => (await compose([], app.errorHandler)(c, () => r.handler(c, next))).res;\n        handler[COMPOSED_HANDLER] = r.handler;\n      }\n      subApp.#addRoute(r.method, r.path, handler, r.basePath);\n    });\n    return this;\n  }\n  /**\n   * `.basePath()` allows base paths to be specified.\n   *\n   * @see {@link https://hono.dev/docs/api/routing#base-path}\n   *\n   * @param {string} path - base Path\n   * @returns {Hono} changed Hono instance\n   *\n   * @example\n   * ```ts\n   * const api = new Hono().basePath('/api')\n   * ```\n   */\n  basePath(path) {\n    const subApp = this.#clone();\n    subApp._basePath = mergePath(this._basePath, path);\n    return subApp;\n  }\n  /**\n   * `.onError()` handles an error and returns a customized Response.\n   *\n   * @see {@link https://hono.dev/docs/api/hono#error-handling}\n   *\n   * @param {ErrorHandler} handler - request Handler for error\n   * @returns {Hono} changed Hono instance\n   *\n   * @example\n   * ```ts\n   * app.onError((err, c) => {\n   *   console.error(`${err}`)\n   *   return c.text('Custom Error Message', 500)\n   * })\n   * ```\n   */\n  onError = (handler) => {\n    this.errorHandler = handler;\n    return this;\n  };\n  /**\n   * `.notFound()` allows you to customize a Not Found Response.\n   *\n   * @see {@link https://hono.dev/docs/api/hono#not-found}\n   *\n   * @param {NotFoundHandler} handler - request handler for not-found\n   * @returns {Hono} changed Hono instance\n   *\n   * @example\n   * ```ts\n   * app.notFound((c) => {\n   *   return c.text('Custom 404 Message', 404)\n   * })\n   * ```\n   */\n  notFound = (handler) => {\n    this.#notFoundHandler = handler;\n    return this;\n  };\n  /**\n   * `.mount()` allows you to mount applications built with other frameworks into your Hono application.\n   *\n   * @see {@link https://hono.dev/docs/api/hono#mount}\n   *\n   * @param {string} path - base Path\n   * @param {Function} applicationHandler - other Request Handler\n   * @param {MountOptions} [options] - options of `.mount()`\n   * @returns {Hono} mounted Hono instance\n   *\n   * @example\n   * ```ts\n   * import { Router as IttyRouter } from 'itty-router'\n   * import { Hono } from 'hono'\n   * // Create itty-router application\n   * const ittyRouter = IttyRouter()\n   * // GET /itty-router/hello\n   * ittyRouter.get('/hello', () => new Response('Hello from itty-router'))\n   *\n   * const app = new Hono()\n   * app.mount('/itty-router', ittyRouter.handle)\n   * ```\n   *\n   * @example\n   * ```ts\n   * const app = new Hono()\n   * // Send the request to another application without modification.\n   * app.mount('/app', anotherApp, {\n   *   replaceRequest: (req) => req,\n   * })\n   * ```\n   */\n  mount(path, applicationHandler, options) {\n    let replaceRequest;\n    let optionHandler;\n    if (options) {\n      if (typeof options === \"function\") {\n        optionHandler = options;\n      } else {\n        optionHandler = options.optionHandler;\n        if (options.replaceRequest === false) {\n          replaceRequest = (request) => request;\n        } else {\n          replaceRequest = options.replaceRequest;\n        }\n      }\n    }\n    const getOptions = optionHandler ? (c) => {\n      const options2 = optionHandler(c);\n      return Array.isArray(options2) ? options2 : [options2];\n    } : (c) => {\n      let executionContext = void 0;\n      try {\n        executionContext = c.executionCtx;\n      } catch {\n      }\n      return [c.env, executionContext];\n    };\n    replaceRequest ||= (() => {\n      const mergedPath = mergePath(this._basePath, path);\n      const pathPrefixLength = mergedPath === \"/\" ? 0 : mergedPath.length;\n      return (request) => {\n        const url = new URL(request.url);\n        url.pathname = this.getPath(request).slice(pathPrefixLength) || \"/\";\n        return new Request(url, request);\n      };\n    })();\n    const handler = async (c, next) => {\n      const res = await applicationHandler(replaceRequest(c.req.raw), ...getOptions(c));\n      if (res) {\n        return res;\n      }\n      await next();\n    };\n    this.#addRoute(METHOD_NAME_ALL, mergePath(path, \"*\"), handler);\n    return this;\n  }\n  #addRoute(method, path, handler, baseRoutePath) {\n    method = method.toUpperCase();\n    path = mergePath(this._basePath, path);\n    const r = {\n      basePath: baseRoutePath !== void 0 ? mergePath(this._basePath, baseRoutePath) : this._basePath,\n      path,\n      method,\n      handler\n    };\n    this.router.add(method, path, [handler, r]);\n    this.routes.push(r);\n  }\n  #handleError(err, c) {\n    if (err instanceof Error) {\n      return this.errorHandler(err, c);\n    }\n    throw err;\n  }\n  #dispatch(request, executionCtx, env, method) {\n    if (method === \"HEAD\") {\n      return (async () => new Response(null, await this.#dispatch(request, executionCtx, env, \"GET\")))();\n    }\n    const path = this.getPath(request, { env });\n    const matchResult = this.router.match(method, path);\n    const c = new Context(request, {\n      path,\n      matchResult,\n      env,\n      executionCtx,\n      notFoundHandler: this.#notFoundHandler\n    });\n    if (matchResult[0].length === 1) {\n      let res;\n      try {\n        res = matchResult[0][0][0][0](c, async () => {\n          c.res = await this.#notFoundHandler(c);\n        });\n      } catch (err) {\n        return this.#handleError(err, c);\n      }\n      return res instanceof Promise ? res.then(\n        (resolved) => resolved || (c.finalized ? c.res : this.#notFoundHandler(c))\n      ).catch((err) => this.#handleError(err, c)) : res ?? this.#notFoundHandler(c);\n    }\n    const composed = compose(matchResult[0], this.errorHandler, this.#notFoundHandler);\n    return (async () => {\n      try {\n        const context = await composed(c);\n        if (!context.finalized) {\n          throw new Error(\n            \"Context is not finalized. Did you forget to return a Response object or `await next()`?\"\n          );\n        }\n        return context.res;\n      } catch (err) {\n        return this.#handleError(err, c);\n      }\n    })();\n  }\n  /**\n   * `.fetch()` will be entry point of your app.\n   *\n   * @see {@link https://hono.dev/docs/api/hono#fetch}\n   *\n   * @param {Request} request - request Object of request\n   * @param {Env} Env - env Object\n   * @param {ExecutionContext} - context of execution\n   * @returns {Response | Promise<Response>} response of request\n   *\n   */\n  fetch = (request, ...rest) => {\n    return this.#dispatch(request, rest[1], rest[0], request.method);\n  };\n  /**\n   * `.request()` is a useful method for testing.\n   * You can pass a URL or pathname to send a GET request.\n   * app will return a Response object.\n   * ```ts\n   * test('GET /hello is ok', async () => {\n   *   const res = await app.request('/hello')\n   *   expect(res.status).toBe(200)\n   * })\n   * ```\n   * @see https://hono.dev/docs/api/hono#request\n   */\n  request = (input, requestInit, Env, executionCtx) => {\n    if (input instanceof Request) {\n      return this.fetch(requestInit ? new Request(input, requestInit) : input, Env, executionCtx);\n    }\n    input = input.toString();\n    return this.fetch(\n      new Request(\n        /^https?:\\/\\//.test(input) ? input : `http://localhost${mergePath(\"/\", input)}`,\n        requestInit\n      ),\n      Env,\n      executionCtx\n    );\n  };\n  /**\n   * `.fire()` automatically adds a global fetch event listener.\n   * This can be useful for environments that adhere to the Service Worker API, such as non-ES module Cloudflare Workers.\n   * @deprecated\n   * Use `fire` from `hono/service-worker` instead.\n   * ```ts\n   * import { Hono } from 'hono'\n   * import { fire } from 'hono/service-worker'\n   *\n   * const app = new Hono()\n   * // ...\n   * fire(app)\n   * ```\n   * @see https://hono.dev/docs/api/hono#fire\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API\n   * @see https://developers.cloudflare.com/workers/reference/migrate-to-module-workers/\n   */\n  fire = () => {\n    addEventListener(\"fetch\", (event) => {\n      event.respondWith(this.#dispatch(event.request, event, void 0, event.request.method));\n    });\n  };\n};\nexport {\n  Hono as HonoBase\n};\n","// src/router/reg-exp-router/matcher.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nvar emptyParam = [];\nfunction match(method, path) {\n  const matchers = this.buildAllMatchers();\n  const match2 = ((method2, path2) => {\n    const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];\n    const staticMatch = matcher[2][path2];\n    if (staticMatch) {\n      return staticMatch;\n    }\n    const match3 = path2.match(matcher[0]);\n    if (!match3) {\n      return [[], emptyParam];\n    }\n    const index = match3.indexOf(\"\", 1);\n    return [matcher[1][index], match3];\n  });\n  this.match = match2;\n  return match2(method, path);\n}\nexport {\n  emptyParam,\n  match\n};\n","// src/router/reg-exp-router/node.ts\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = /* @__PURE__ */ Symbol();\nvar regExpMetaChars = new Set(\".\\\\+*[^]$()\");\nfunction compareKey(a, b) {\n  if (a.length === 1) {\n    return b.length === 1 ? a < b ? -1 : 1 : -1;\n  }\n  if (b.length === 1) {\n    return 1;\n  }\n  if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {\n    return 1;\n  } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {\n    return -1;\n  }\n  if (a === LABEL_REG_EXP_STR) {\n    return 1;\n  } else if (b === LABEL_REG_EXP_STR) {\n    return -1;\n  }\n  return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class _Node {\n  #index;\n  #varIndex;\n  #children = /* @__PURE__ */ Object.create(null);\n  insert(tokens, index, paramMap, context, pathErrorCheckOnly) {\n    if (tokens.length === 0) {\n      if (this.#index !== void 0) {\n        throw PATH_ERROR;\n      }\n      if (pathErrorCheckOnly) {\n        return;\n      }\n      this.#index = index;\n      return;\n    }\n    const [token, ...restTokens] = tokens;\n    const pattern = token === \"*\" ? restTokens.length === 0 ? [\"\", \"\", ONLY_WILDCARD_REG_EXP_STR] : [\"\", \"\", LABEL_REG_EXP_STR] : token === \"/*\" ? [\"\", \"\", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n    let node;\n    if (pattern) {\n      const name = pattern[1];\n      let regexpStr = pattern[2] || LABEL_REG_EXP_STR;\n      if (name && pattern[2]) {\n        if (regexpStr === \".*\") {\n          throw PATH_ERROR;\n        }\n        regexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n        if (/\\((?!\\?:)/.test(regexpStr)) {\n          throw PATH_ERROR;\n        }\n      }\n      node = this.#children[regexpStr];\n      if (!node) {\n        if (Object.keys(this.#children).some(\n          (k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n        )) {\n          throw PATH_ERROR;\n        }\n        if (pathErrorCheckOnly) {\n          return;\n        }\n        node = this.#children[regexpStr] = new _Node();\n        if (name !== \"\") {\n          node.#varIndex = context.varIndex++;\n        }\n      }\n      if (!pathErrorCheckOnly && name !== \"\") {\n        paramMap.push([name, node.#varIndex]);\n      }\n    } else {\n      node = this.#children[token];\n      if (!node) {\n        if (Object.keys(this.#children).some(\n          (k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n        )) {\n          throw PATH_ERROR;\n        }\n        if (pathErrorCheckOnly) {\n          return;\n        }\n        node = this.#children[token] = new _Node();\n      }\n    }\n    node.insert(restTokens, index, paramMap, context, pathErrorCheckOnly);\n  }\n  buildRegExpStr() {\n    const childKeys = Object.keys(this.#children).sort(compareKey);\n    const strList = childKeys.map((k) => {\n      const c = this.#children[k];\n      return (typeof c.#varIndex === \"number\" ? `(${k})@${c.#varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + c.buildRegExpStr();\n    });\n    if (typeof this.#index === \"number\") {\n      strList.unshift(`#${this.#index}`);\n    }\n    if (strList.length === 0) {\n      return \"\";\n    }\n    if (strList.length === 1) {\n      return strList[0];\n    }\n    return \"(?:\" + strList.join(\"|\") + \")\";\n  }\n};\nexport {\n  Node,\n  PATH_ERROR\n};\n","// src/router/reg-exp-router/trie.ts\nimport { Node } from \"./node.js\";\nvar Trie = class {\n  #context = { varIndex: 0 };\n  #root = new Node();\n  insert(path, index, pathErrorCheckOnly) {\n    const paramAssoc = [];\n    const groups = [];\n    for (let i = 0; ; ) {\n      let replaced = false;\n      path = path.replace(/\\{[^}]+\\}/g, (m) => {\n        const mark = `@\\\\${i}`;\n        groups[i] = [mark, m];\n        i++;\n        replaced = true;\n        return mark;\n      });\n      if (!replaced) {\n        break;\n      }\n    }\n    const tokens = path.match(/(?::[^\\/]+)|(?:\\/\\*$)|./g) || [];\n    for (let i = groups.length - 1; i >= 0; i--) {\n      const [mark] = groups[i];\n      for (let j = tokens.length - 1; j >= 0; j--) {\n        if (tokens[j].indexOf(mark) !== -1) {\n          tokens[j] = tokens[j].replace(mark, groups[i][1]);\n          break;\n        }\n      }\n    }\n    this.#root.insert(tokens, index, paramAssoc, this.#context, pathErrorCheckOnly);\n    return paramAssoc;\n  }\n  buildRegExp() {\n    let regexp = this.#root.buildRegExpStr();\n    if (regexp === \"\") {\n      return [/^$/, [], []];\n    }\n    let captureIndex = 0;\n    const indexReplacementMap = [];\n    const paramReplacementMap = [];\n    regexp = regexp.replace(/#(\\d+)|@(\\d+)|\\.\\*\\$/g, (_, handlerIndex, paramIndex) => {\n      if (handlerIndex !== void 0) {\n        indexReplacementMap[++captureIndex] = Number(handlerIndex);\n        return \"$()\";\n      }\n      if (paramIndex !== void 0) {\n        paramReplacementMap[Number(paramIndex)] = ++captureIndex;\n        return \"\";\n      }\n      return \"\";\n    });\n    return [new RegExp(`^${regexp}`), indexReplacementMap, paramReplacementMap];\n  }\n};\nexport {\n  Trie\n};\n","// src/router/reg-exp-router/router.ts\nimport {\n  MESSAGE_MATCHER_IS_ALREADY_BUILT,\n  METHOD_NAME_ALL,\n  UnsupportedPathError\n} from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { match, emptyParam } from \"./matcher.js\";\nimport { PATH_ERROR } from \"./node.js\";\nimport { Trie } from \"./trie.js\";\nvar nullMatcher = [/^$/, [], /* @__PURE__ */ Object.create(null)];\nvar wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\nfunction buildWildcardRegExp(path) {\n  return wildcardRegExpCache[path] ??= new RegExp(\n    path === \"*\" ? \"\" : `^${path.replace(\n      /\\/\\*$|([.\\\\+*[^\\]$()])/g,\n      (_, metaChar) => metaChar ? `\\\\${metaChar}` : \"(?:|/.*)\"\n    )}$`\n  );\n}\nfunction clearWildcardRegExpCache() {\n  wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\n}\nfunction buildMatcherFromPreprocessedRoutes(routes) {\n  const trie = new Trie();\n  const handlerData = [];\n  if (routes.length === 0) {\n    return nullMatcher;\n  }\n  const routesWithStaticPathFlag = routes.map(\n    (route) => [!/\\*|\\/:/.test(route[0]), ...route]\n  ).sort(\n    ([isStaticA, pathA], [isStaticB, pathB]) => isStaticA ? 1 : isStaticB ? -1 : pathA.length - pathB.length\n  );\n  const staticMap = /* @__PURE__ */ Object.create(null);\n  for (let i = 0, j = -1, len = routesWithStaticPathFlag.length; i < len; i++) {\n    const [pathErrorCheckOnly, path, handlers] = routesWithStaticPathFlag[i];\n    if (pathErrorCheckOnly) {\n      staticMap[path] = [handlers.map(([h]) => [h, /* @__PURE__ */ Object.create(null)]), emptyParam];\n    } else {\n      j++;\n    }\n    let paramAssoc;\n    try {\n      paramAssoc = trie.insert(path, j, pathErrorCheckOnly);\n    } catch (e) {\n      throw e === PATH_ERROR ? new UnsupportedPathError(path) : e;\n    }\n    if (pathErrorCheckOnly) {\n      continue;\n    }\n    handlerData[j] = handlers.map(([h, paramCount]) => {\n      const paramIndexMap = /* @__PURE__ */ Object.create(null);\n      paramCount -= 1;\n      for (; paramCount >= 0; paramCount--) {\n        const [key, value] = paramAssoc[paramCount];\n        paramIndexMap[key] = value;\n      }\n      return [h, paramIndexMap];\n    });\n  }\n  const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();\n  for (let i = 0, len = handlerData.length; i < len; i++) {\n    for (let j = 0, len2 = handlerData[i].length; j < len2; j++) {\n      const map = handlerData[i][j]?.[1];\n      if (!map) {\n        continue;\n      }\n      const keys = Object.keys(map);\n      for (let k = 0, len3 = keys.length; k < len3; k++) {\n        map[keys[k]] = paramReplacementMap[map[keys[k]]];\n      }\n    }\n  }\n  const handlerMap = [];\n  for (const i in indexReplacementMap) {\n    handlerMap[i] = handlerData[indexReplacementMap[i]];\n  }\n  return [regexp, handlerMap, staticMap];\n}\nfunction findMiddleware(middleware, path) {\n  if (!middleware) {\n    return void 0;\n  }\n  for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) {\n    if (buildWildcardRegExp(k).test(path)) {\n      return [...middleware[k]];\n    }\n  }\n  return void 0;\n}\nvar RegExpRouter = class {\n  name = \"RegExpRouter\";\n  #middleware;\n  #routes;\n  constructor() {\n    this.#middleware = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n    this.#routes = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n  }\n  add(method, path, handler) {\n    const middleware = this.#middleware;\n    const routes = this.#routes;\n    if (!middleware || !routes) {\n      throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n    }\n    if (!middleware[method]) {\n      ;\n      [middleware, routes].forEach((handlerMap) => {\n        handlerMap[method] = /* @__PURE__ */ Object.create(null);\n        Object.keys(handlerMap[METHOD_NAME_ALL]).forEach((p) => {\n          handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]];\n        });\n      });\n    }\n    if (path === \"/*\") {\n      path = \"*\";\n    }\n    const paramCount = (path.match(/\\/:/g) || []).length;\n    if (/\\*$/.test(path)) {\n      const re = buildWildcardRegExp(path);\n      if (method === METHOD_NAME_ALL) {\n        Object.keys(middleware).forEach((m) => {\n          middleware[m][path] ||= findMiddleware(middleware[m], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n        });\n      } else {\n        middleware[method][path] ||= findMiddleware(middleware[method], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n      }\n      Object.keys(middleware).forEach((m) => {\n        if (method === METHOD_NAME_ALL || method === m) {\n          Object.keys(middleware[m]).forEach((p) => {\n            re.test(p) && middleware[m][p].push([handler, paramCount]);\n          });\n        }\n      });\n      Object.keys(routes).forEach((m) => {\n        if (method === METHOD_NAME_ALL || method === m) {\n          Object.keys(routes[m]).forEach(\n            (p) => re.test(p) && routes[m][p].push([handler, paramCount])\n          );\n        }\n      });\n      return;\n    }\n    const paths = checkOptionalParameter(path) || [path];\n    for (let i = 0, len = paths.length; i < len; i++) {\n      const path2 = paths[i];\n      Object.keys(routes).forEach((m) => {\n        if (method === METHOD_NAME_ALL || method === m) {\n          routes[m][path2] ||= [\n            ...findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || []\n          ];\n          routes[m][path2].push([handler, paramCount - len + i + 1]);\n        }\n      });\n    }\n  }\n  match = match;\n  buildAllMatchers() {\n    const matchers = /* @__PURE__ */ Object.create(null);\n    Object.keys(this.#routes).concat(Object.keys(this.#middleware)).forEach((method) => {\n      matchers[method] ||= this.#buildMatcher(method);\n    });\n    this.#middleware = this.#routes = void 0;\n    clearWildcardRegExpCache();\n    return matchers;\n  }\n  #buildMatcher(method) {\n    const routes = [];\n    let hasOwnRoute = method === METHOD_NAME_ALL;\n    [this.#middleware, this.#routes].forEach((r) => {\n      const ownRoute = r[method] ? Object.keys(r[method]).map((path) => [path, r[method][path]]) : [];\n      if (ownRoute.length !== 0) {\n        hasOwnRoute ||= true;\n        routes.push(...ownRoute);\n      } else if (method !== METHOD_NAME_ALL) {\n        routes.push(\n          ...Object.keys(r[METHOD_NAME_ALL]).map((path) => [path, r[METHOD_NAME_ALL][path]])\n        );\n      }\n    });\n    if (!hasOwnRoute) {\n      return null;\n    } else {\n      return buildMatcherFromPreprocessedRoutes(routes);\n    }\n  }\n};\nexport {\n  RegExpRouter\n};\n","// src/router/smart-router/router.ts\nimport { MESSAGE_MATCHER_IS_ALREADY_BUILT, UnsupportedPathError } from \"../../router.js\";\nvar SmartRouter = class {\n  name = \"SmartRouter\";\n  #routers = [];\n  #routes = [];\n  constructor(init) {\n    this.#routers = init.routers;\n  }\n  add(method, path, handler) {\n    if (!this.#routes) {\n      throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n    }\n    this.#routes.push([method, path, handler]);\n  }\n  match(method, path) {\n    if (!this.#routes) {\n      throw new Error(\"Fatal error\");\n    }\n    const routers = this.#routers;\n    const routes = this.#routes;\n    const len = routers.length;\n    let i = 0;\n    let res;\n    for (; i < len; i++) {\n      const router = routers[i];\n      try {\n        for (let i2 = 0, len2 = routes.length; i2 < len2; i2++) {\n          router.add(...routes[i2]);\n        }\n        res = router.match(method, path);\n      } catch (e) {\n        if (e instanceof UnsupportedPathError) {\n          continue;\n        }\n        throw e;\n      }\n      this.match = router.match.bind(router);\n      this.#routers = [router];\n      this.#routes = void 0;\n      break;\n    }\n    if (i === len) {\n      throw new Error(\"Fatal error\");\n    }\n    this.name = `SmartRouter + ${this.activeRouter.name}`;\n    return res;\n  }\n  get activeRouter() {\n    if (this.#routes || this.#routers.length !== 1) {\n      throw new Error(\"No active router has been determined yet.\");\n    }\n    return this.#routers[0];\n  }\n};\nexport {\n  SmartRouter\n};\n","// src/router/trie-router/node.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nimport { getPattern, splitPath, splitRoutingPath } from \"../../utils/url.js\";\nvar emptyParams = /* @__PURE__ */ Object.create(null);\nvar hasChildren = (children) => {\n  for (const _ in children) {\n    return true;\n  }\n  return false;\n};\nvar Node = class _Node {\n  #methods;\n  #children;\n  #patterns;\n  #order = 0;\n  #params = emptyParams;\n  constructor(method, handler, children) {\n    this.#children = children || /* @__PURE__ */ Object.create(null);\n    this.#methods = [];\n    if (method && handler) {\n      const m = /* @__PURE__ */ Object.create(null);\n      m[method] = { handler, possibleKeys: [], score: 0 };\n      this.#methods = [m];\n    }\n    this.#patterns = [];\n  }\n  insert(method, path, handler) {\n    this.#order = ++this.#order;\n    let curNode = this;\n    const parts = splitRoutingPath(path);\n    const possibleKeys = [];\n    for (let i = 0, len = parts.length; i < len; i++) {\n      const p = parts[i];\n      const nextP = parts[i + 1];\n      const pattern = getPattern(p, nextP);\n      const key = Array.isArray(pattern) ? pattern[0] : p;\n      if (key in curNode.#children) {\n        curNode = curNode.#children[key];\n        if (pattern) {\n          possibleKeys.push(pattern[1]);\n        }\n        continue;\n      }\n      curNode.#children[key] = new _Node();\n      if (pattern) {\n        curNode.#patterns.push(pattern);\n        possibleKeys.push(pattern[1]);\n      }\n      curNode = curNode.#children[key];\n    }\n    curNode.#methods.push({\n      [method]: {\n        handler,\n        possibleKeys: possibleKeys.filter((v, i, a) => a.indexOf(v) === i),\n        score: this.#order\n      }\n    });\n    return curNode;\n  }\n  #pushHandlerSets(handlerSets, node, method, nodeParams, params) {\n    for (let i = 0, len = node.#methods.length; i < len; i++) {\n      const m = node.#methods[i];\n      const handlerSet = m[method] || m[METHOD_NAME_ALL];\n      const processedSet = {};\n      if (handlerSet !== void 0) {\n        handlerSet.params = /* @__PURE__ */ Object.create(null);\n        handlerSets.push(handlerSet);\n        if (nodeParams !== emptyParams || params && params !== emptyParams) {\n          for (let i2 = 0, len2 = handlerSet.possibleKeys.length; i2 < len2; i2++) {\n            const key = handlerSet.possibleKeys[i2];\n            const processed = processedSet[handlerSet.score];\n            handlerSet.params[key] = params?.[key] && !processed ? params[key] : nodeParams[key] ?? params?.[key];\n            processedSet[handlerSet.score] = true;\n          }\n        }\n      }\n    }\n  }\n  search(method, path) {\n    const handlerSets = [];\n    this.#params = emptyParams;\n    const curNode = this;\n    let curNodes = [curNode];\n    const parts = splitPath(path);\n    const curNodesQueue = [];\n    const len = parts.length;\n    let partOffsets = null;\n    for (let i = 0; i < len; i++) {\n      const part = parts[i];\n      const isLast = i === len - 1;\n      const tempNodes = [];\n      for (let j = 0, len2 = curNodes.length; j < len2; j++) {\n        const node = curNodes[j];\n        const nextNode = node.#children[part];\n        if (nextNode) {\n          nextNode.#params = node.#params;\n          if (isLast) {\n            if (nextNode.#children[\"*\"]) {\n              this.#pushHandlerSets(handlerSets, nextNode.#children[\"*\"], method, node.#params);\n            }\n            this.#pushHandlerSets(handlerSets, nextNode, method, node.#params);\n          } else {\n            tempNodes.push(nextNode);\n          }\n        }\n        for (let k = 0, len3 = node.#patterns.length; k < len3; k++) {\n          const pattern = node.#patterns[k];\n          const params = node.#params === emptyParams ? {} : { ...node.#params };\n          if (pattern === \"*\") {\n            const astNode = node.#children[\"*\"];\n            if (astNode) {\n              this.#pushHandlerSets(handlerSets, astNode, method, node.#params);\n              astNode.#params = params;\n              tempNodes.push(astNode);\n            }\n            continue;\n          }\n          const [key, name, matcher] = pattern;\n          if (!part && !(matcher instanceof RegExp)) {\n            continue;\n          }\n          const child = node.#children[key];\n          if (matcher instanceof RegExp) {\n            if (partOffsets === null) {\n              partOffsets = new Array(len);\n              let offset = path[0] === \"/\" ? 1 : 0;\n              for (let p = 0; p < len; p++) {\n                partOffsets[p] = offset;\n                offset += parts[p].length + 1;\n              }\n            }\n            const restPathString = path.substring(partOffsets[i]);\n            const m = matcher.exec(restPathString);\n            if (m) {\n              params[name] = m[0];\n              this.#pushHandlerSets(handlerSets, child, method, node.#params, params);\n              if (hasChildren(child.#children)) {\n                child.#params = params;\n                const componentCount = m[0].match(/\\//)?.length ?? 0;\n                const targetCurNodes = curNodesQueue[componentCount] ||= [];\n                targetCurNodes.push(child);\n              }\n              continue;\n            }\n          }\n          if (matcher === true || matcher.test(part)) {\n            params[name] = part;\n            if (isLast) {\n              this.#pushHandlerSets(handlerSets, child, method, params, node.#params);\n              if (child.#children[\"*\"]) {\n                this.#pushHandlerSets(\n                  handlerSets,\n                  child.#children[\"*\"],\n                  method,\n                  params,\n                  node.#params\n                );\n              }\n            } else {\n              child.#params = params;\n              tempNodes.push(child);\n            }\n          }\n        }\n      }\n      const shifted = curNodesQueue.shift();\n      curNodes = shifted ? tempNodes.concat(shifted) : tempNodes;\n    }\n    if (handlerSets.length > 1) {\n      handlerSets.sort((a, b) => {\n        return a.score - b.score;\n      });\n    }\n    return [handlerSets.map(({ handler, params }) => [handler, params])];\n  }\n};\nexport {\n  Node\n};\n","// src/router/trie-router/router.ts\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { Node } from \"./node.js\";\nvar TrieRouter = class {\n  name = \"TrieRouter\";\n  #node;\n  constructor() {\n    this.#node = new Node();\n  }\n  add(method, path, handler) {\n    const results = checkOptionalParameter(path);\n    if (results) {\n      for (let i = 0, len = results.length; i < len; i++) {\n        this.#node.insert(method, results[i], handler);\n      }\n      return;\n    }\n    this.#node.insert(method, path, handler);\n  }\n  match(method, path) {\n    return this.#node.search(method, path);\n  }\n};\nexport {\n  TrieRouter\n};\n","// src/hono.ts\nimport { HonoBase } from \"./hono-base.js\";\nimport { RegExpRouter } from \"./router/reg-exp-router/index.js\";\nimport { SmartRouter } from \"./router/smart-router/index.js\";\nimport { TrieRouter } from \"./router/trie-router/index.js\";\nvar Hono = class extends HonoBase {\n  /**\n   * Creates an instance of the Hono class.\n   *\n   * @param options - Optional configuration options for the Hono instance.\n   */\n  constructor(options = {}) {\n    super(options);\n    this.router = options.router ?? new SmartRouter({\n      routers: [new RegExpRouter(), new TrieRouter()]\n    });\n  }\n};\nexport {\n  Hono\n};\n","import type { HttpBindings } from \"@hono/node-server\";\nimport { Hono } from \"hono\";\nimport type { UpgradeWebSocket } from \"hono/ws\";\nimport type { WebSocket } from \"ws\";\nimport { getLogger } from \"../logger\";\nimport { authMiddleware } from \"./middleware/auth.middleware\";\nimport { corsMiddleware } from \"./middleware/cors.middleware\";\nimport { errorMiddleware } from \"./middleware/error.middleware\";\nimport { createBrowseRoutes } from \"./routes/browse.routes\";\nimport { createConversationRoutes } from \"./routes/conversations.routes\";\nimport { createHealthRoutes } from \"./routes/health.routes\";\nimport { createMiscRoutes } from \"./routes/misc.routes\";\nimport { createPairRoutes } from \"./routes/pair.routes\";\nimport { createProgressRoutes } from \"./routes/progress.routes\";\nimport { createProjectRoutes } from \"./routes/projects.routes\";\nimport { createScannerRoutes } from \"./routes/scanner.routes\";\nimport { createSessionRoutes } from \"./routes/sessions.routes\";\nimport { createWsRoutes } from \"./routes/ws.routes\";\nimport type { ApiDeps } from \"./types/api-deps\";\n\nexport type AppEnv = {\n  Bindings: HttpBindings;\n  Variables: {\n    requestId?: string;\n    validatedBody?: unknown;\n    validatedQuery?: unknown;\n  };\n};\n\nexport const createHonoApp = (deps: ApiDeps, upgradeWebSocket?: UpgradeWebSocket<WebSocket>) => {\n  const app = new Hono<AppEnv>();\n  const httpLog = getLogger(\"http\");\n\n  app.use(\"*\", async (c, next) => {\n    const start = Date.now();\n    const ua = c.req.header(\"user-agent\") ?? \"\";\n    await next();\n    if (!deps.logMenubarRequests && c.req.header(\"x-client\") === \"menubar\") return;\n    const ms = Date.now() - start;\n    httpLog.info(`[req] ${c.req.method} ${c.req.path} → ${c.res.status} ${ms}ms`, {\n      method: c.req.method,\n      path: c.req.path,\n      status: c.res.status,\n      ms,\n      ua,\n      event: \"http.request\",\n    });\n  });\n  app.use(\"*\", corsMiddleware());\n  app.use(\"*\", authMiddleware(deps));\n  app.onError(errorMiddleware);\n\n  app.route(\"/healthz\", createHealthRoutes());\n  app.route(\"/\", createMiscRoutes(deps));\n  app.route(\"/api/sessions\", createSessionRoutes(deps));\n  app.route(\"/api/conversations\", createConversationRoutes(deps));\n  app.route(\"/api/projects\", createProjectRoutes(deps));\n  app.route(\"/api/pair\", createPairRoutes(deps));\n  app.route(\"/api\", createBrowseRoutes(deps));\n  app.route(\"/\", createScannerRoutes(deps));\n  app.route(\"/internal\", createProgressRoutes(deps));\n\n  if (upgradeWebSocket) {\n    app.route(\"/\", createWsRoutes(deps, upgradeWebSocket));\n  }\n\n  return app;\n};\n","import type { MiddlewareHandler } from \"hono\";\nimport { validateApiKey } from \"../../auth\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nfunction isLocalRequest(remoteAddr: string | undefined): boolean {\n  const addr = remoteAddr ?? \"\";\n  return addr === \"127.0.0.1\" || addr === \"::1\" || addr === \"::ffff:127.0.0.1\";\n}\n\nconst PUBLIC_PATHS = new Set([\"/healthz\"]);\n// /api/__update uses HMAC signature auth instead of Bearer; skip the\n// Bearer-token middleware so the route handler can validate the signature.\nconst PUBLIC_POST_PATHS = new Set([\"/api/pair/exchange\", \"/api/__update\"]);\n// /internal/sessions/:sessionId/progress also uses HMAC (Progress webhook),\n// and the sessionId is dynamic so we match by prefix.\nconst PUBLIC_POST_PREFIXES = [\"/internal/sessions/\"];\n\nexport const authMiddleware =\n  (deps: Pick<ApiDeps, \"apiKey\" | \"localNoAuth\">): MiddlewareHandler<AppEnv> =>\n  async (c, next) => {\n    const path = new URL(c.req.url).pathname;\n    const method = c.req.method;\n    const isPublicPostPath =\n      method === \"POST\" &&\n      (PUBLIC_POST_PATHS.has(path) || PUBLIC_POST_PREFIXES.some((p) => path.startsWith(p)));\n    if (PUBLIC_PATHS.has(path) || isPublicPostPath) {\n      await next();\n      return;\n    }\n\n    if (deps.localNoAuth) {\n      const remoteAddr = c.env.incoming?.socket?.remoteAddress;\n      if (isLocalRequest(remoteAddr)) {\n        await next();\n        return;\n      }\n    }\n\n    const authorization = c.req.header(\"authorization\");\n    if (authorization?.startsWith(\"Bearer \")) {\n      const token = authorization.slice(7);\n      if (validateApiKey(token, deps.apiKey)) {\n        await next();\n        return;\n      }\n    }\n\n    const key = c.req.query(\"key\");\n    if (key && validateApiKey(key, deps.apiKey)) {\n      await next();\n      return;\n    }\n\n    return c.json({ error: \"Unauthorized\" }, 401);\n  };\n","import type { MiddlewareHandler } from \"hono\";\nimport type { AppEnv } from \"../app\";\n\n// Allow browser-originated requests only from known local dev origins.\n// Mobile app requests are not browser-originated and don't send an Origin header\n// so they are unaffected. Wildcard (*) would let any page make authenticated\n// requests if the caller obtains the API key out-of-band.\nconst ALLOWED_ORIGINS = new Set([\n  \"http://localhost:8081\",\n  \"http://localhost:19006\",\n  \"http://localhost:3000\",\n]);\n\nexport const corsMiddleware = (): MiddlewareHandler<AppEnv> => async (c, next) => {\n  const origin = c.req.header(\"origin\");\n  const allowedOrigin = origin && ALLOWED_ORIGINS.has(origin) ? origin : null;\n\n  if (allowedOrigin) {\n    c.res.headers.set(\"Access-Control-Allow-Origin\", allowedOrigin);\n    c.res.headers.set(\"Vary\", \"Origin\");\n    c.res.headers.set(\"Access-Control-Allow-Methods\", \"GET, POST, PATCH, OPTIONS\");\n    c.res.headers.set(\"Access-Control-Allow-Headers\", \"Authorization, Content-Type, If-None-Match\");\n    c.res.headers.set(\"Access-Control-Expose-Headers\", \"ETag\");\n  }\n\n  if (c.req.method === \"OPTIONS\") {\n    return c.newResponse(null, allowedOrigin ? 204 : 403);\n  }\n\n  await next();\n};\n","import type { ErrorHandler } from \"hono\";\nimport type { AppEnv } from \"../app\";\n\nexport const errorMiddleware: ErrorHandler<AppEnv> = (err, c) => {\n  const message = err instanceof Error ? err.message : \"Internal server error\";\n  return c.json({ error: message }, 500);\n};\n","import { Hono } from \"hono\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nconst ALREADY_HANDLED = 597;\nconst alreadyHandled = () => new Response(null, { status: ALREADY_HANDLED });\n\nexport const createBrowseRoutes = (deps: ApiDeps) => {\n  const app = new Hono<AppEnv>();\n\n  app.get(\"/browse\", async (c) => {\n    const url = new URL(c.req.url);\n    await deps.handleBrowse(url, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/browse/mkdir\", async (c) => {\n    await deps.handleMkdir(c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  return app;\n};\n","import { Hono } from \"hono\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nconst ALREADY_HANDLED = 597;\nconst alreadyHandled = () => new Response(null, { status: ALREADY_HANDLED });\n\nexport const createConversationRoutes = (deps: ApiDeps) => {\n  const app = new Hono<AppEnv>();\n\n  app.get(\"/count\", async (c) => {\n    const url = new URL(c.req.url);\n    await deps.handleConversationsCount(url, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.get(\"/:id{.+}\", async (c) => {\n    const id = c.req.param(\"id\");\n    const url = new URL(c.req.url);\n    const ifNoneMatch = c.req.header(\"if-none-match\");\n    await deps.handleGetConversation(id, url, c.env.outgoing, ifNoneMatch);\n    return alreadyHandled();\n  });\n\n  app.get(\"/\", async (c) => {\n    const url = new URL(c.req.url);\n    await deps.handleListConversations(url, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  return app;\n};\n","// Runtime version reporting.\n//\n// The version string is NOT baked into the compiled bundle. Each installer\n// (Homebrew, auto-updater, scripts/deploy.sh) writes a `version.txt` next to\n// the script it activates, so the binary reports the correct version even\n// when the tarball it was built from carried a stale package.json.\n//\n// Resolution order:\n//   1. Read `<dirname(process.argv[1])>/version.txt` — set by the installer.\n//   2. Read `<dirname(process.argv[1])>/../version.txt` — the built CLI is a\n//      symlink whose realpath resolves one level into $INSTALL_DIR/releases/,\n//      so the installer's version.txt sits in the parent dir.\n//   3. Fall back to `<dirname(process.argv[1])>/../package.json` with a\n//      `+source` suffix — covers source-tree runs (vitest, ts-node,\n//      `npm run dev`) where no installer has stamped a version.\n//   4. If all fail, return \"0.0.0+unknown\" so callers never crash on a\n//      missing version.\n\nimport { readFileSync, realpathSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\nlet cached: string | undefined;\n\nexport function getVersion(): string {\n  if (cached !== undefined) return cached;\n  cached = resolveVersion();\n  return cached;\n}\n\n// Exposed for tests to clear the memoization between cases.\nexport function resetVersionCache(): void {\n  cached = undefined;\n}\n\nfunction resolveVersion(): string {\n  const scriptPath = process.argv[1] ?? \"\";\n  const here = scriptPath ? dirname(scriptPath) : process.cwd();\n  // Also resolve the realpath so shims (e.g. /opt/homebrew/bin/tb-streamer →\n  // ~/.threadbase/cli.js → releases/cli.<sha>.cjs) don't cause version.txt\n  // lookups to land in the wrong directory.\n  let realHere = here;\n  try {\n    realHere = dirname(realpathSync(scriptPath));\n  } catch {}\n  // Deduplicate: if realHere === here we don't want to check the same dirs twice.\n  const searchDirs =\n    realHere === here\n      ? [here, join(here, \"..\")]\n      : [here, join(here, \"..\"), realHere, join(realHere, \"..\")];\n  // Check both the script directory and its parent — the installer places\n  // version.txt in $INSTALL_DIR (~/.threadbase/) but the built CLI is a\n  // symlink whose realpath resolves into $INSTALL_DIR/releases/, so `here`\n  // ends up one level too deep.\n  for (const dir of searchDirs) {\n    try {\n      const v = readFileSync(join(dir, \"version.txt\"), \"utf8\").trim();\n      if (v) return v;\n    } catch {}\n  }\n  try {\n    const pkg = JSON.parse(readFileSync(join(here, \"..\", \"package.json\"), \"utf8\")) as {\n      version?: string;\n    };\n    if (pkg.version) return `${pkg.version}+source`;\n  } catch {}\n  return \"0.0.0+unknown\";\n}\n","import { Hono } from \"hono\";\nimport { getVersion } from \"../../version\";\nimport type { AppEnv } from \"../app\";\n\nexport const createHealthRoutes = () => {\n  const app = new Hono<AppEnv>();\n\n  app.get(\"/\", (c) => c.json({ ok: true, version: getVersion() }));\n\n  return app;\n};\n","import { spawn } from \"node:child_process\";\nimport { createHmac, timingSafeEqual } from \"node:crypto\";\nimport { Hono } from \"hono\";\nimport type { IncomingMessage } from \"http\";\nimport { hostname } from \"os\";\nimport { loadUpdateConfig } from \"../../config/update-config\";\nimport { getLogger } from \"../../logger\";\nimport { getVersion } from \"../../version\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nfunction readJsonBody(req: IncomingMessage): Promise<unknown> {\n  return new Promise((resolve, reject) => {\n    const chunks: Buffer[] = [];\n    req.on(\"data\", (chunk) => chunks.push(chunk));\n    req.on(\"end\", () => {\n      try {\n        const raw = Buffer.concat(chunks).toString(\"utf-8\");\n        resolve(raw ? JSON.parse(raw) : {});\n      } catch {\n        reject(new Error(\"Invalid JSON body\"));\n      }\n    });\n    req.on(\"error\", reject);\n  });\n}\n\nfunction readRawBody(req: IncomingMessage): Promise<string> {\n  return new Promise((resolve, reject) => {\n    const chunks: Buffer[] = [];\n    req.on(\"data\", (chunk) => chunks.push(chunk));\n    req.on(\"end\", () => resolve(Buffer.concat(chunks).toString(\"utf-8\")));\n    req.on(\"error\", reject);\n  });\n}\n\nfunction verifyWebhookSignature(body: string, header: string | undefined, secret: string): boolean {\n  if (!header) return false;\n  const provided = header.startsWith(\"sha256=\") ? header.slice(7) : header;\n  const expected = createHmac(\"sha256\", secret).update(body).digest(\"hex\");\n  const a = Buffer.from(provided, \"utf-8\");\n  const b = Buffer.from(expected, \"utf-8\");\n  if (a.length !== b.length) return false;\n  return timingSafeEqual(a, b);\n}\n\nconst clientLog = getLogger(\"client\");\n\ntype ClientLogEntry = {\n  level?: \"debug\" | \"info\" | \"warn\" | \"error\";\n  msg?: string;\n  ts?: string;\n  tag?: string;\n  fields?: Record<string, unknown>;\n};\n\nexport const createMiscRoutes = (\n  deps: Pick<\n    ApiDeps,\n    \"publicUrl\" | \"sessionStore\" | \"ptyAttachedIds\" | \"rotateApiKey\" | \"localNoAuth\"\n  >,\n) => {\n  const app = new Hono<AppEnv>();\n\n  app.get(\"/api/info\", (c) => {\n    const ptyIds = deps.ptyAttachedIds();\n    return c.json({\n      version: getVersion(),\n      machineName: hostname(),\n      platform: process.platform,\n      activeSessions: deps.sessionStore.list(ptyIds).filter((s) => s.status === \"running\").length,\n      publicUrl: deps.publicUrl,\n    });\n  });\n\n  app.get(\"/api/profiles\", (c) => c.json([]));\n\n  app.post(\"/api/auth/rotate\", (c) => {\n    // Block rotation when localNoAuth is on — any localhost process could\n    // call this and lock out the legitimate owner.\n    if (deps.localNoAuth) {\n      return c.json({ error: \"key rotation is disabled while localNoAuth is active\" }, 403);\n    }\n    const { newKey, persisted } = deps.rotateApiKey();\n    return c.json({\n      apiKey: newKey,\n      persisted,\n      ...(persisted\n        ? {}\n        : {\n            warning:\n              \"Key rotated in memory only. The server was started with --api-key, so the \" +\n              \"old key will be restored on restart. Remove --api-key and let the server \" +\n              \"manage the key via ~/.threadbase/server.yaml for rotation to survive restarts.\",\n          }),\n    });\n  });\n\n  app.post(\"/api/push/register\", (c) => c.json({ ok: true }));\n\n  // Webhook for auto-update. Triggered by the release CI (or any caller that\n  // knows webhook_secret) to make this server pull the new release without\n  // waiting for the next poll. Enabled only when webhook_secret is set in\n  // ~/.threadbase/update.yaml. HMAC-SHA256 of the raw body using that secret\n  // must match the X-Threadbase-Signature header.\n  app.post(\"/api/__update\", async (c) => {\n    const cfg = loadUpdateConfig();\n    if (!cfg?.webhook_secret) {\n      return c.json({ error: \"webhook disabled\" }, 404);\n    }\n\n    let body: string;\n    try {\n      body = await readRawBody(c.env.incoming);\n    } catch {\n      return c.json({ error: \"could not read body\" }, 400);\n    }\n\n    const sig = c.req.header(\"x-threadbase-signature\");\n    if (!verifyWebhookSignature(body, sig, cfg.webhook_secret)) {\n      return c.json({ error: \"invalid signature\" }, 401);\n    }\n\n    const cliPath = process.argv[1];\n    if (!cliPath) {\n      return c.json({ error: \"cannot resolve updater path\" }, 500);\n    }\n    const child = spawn(process.execPath, [cliPath, \"update\", \"--force\"], {\n      detached: true,\n      stdio: \"ignore\",\n    });\n    child.unref();\n\n    return c.json({ accepted: true, pid: child.pid }, 202);\n  });\n\n  app.post(\"/api/__client-log\", async (c) => {\n    const ua = c.req.header(\"user-agent\") ?? \"\";\n    let body: { entries?: ClientLogEntry[] } = {};\n    try {\n      body = (await readJsonBody(c.env.incoming)) as { entries?: ClientLogEntry[] };\n    } catch {\n      return c.json({ ok: false, error: \"invalid json\" }, 400);\n    }\n    const entries = Array.isArray(body.entries) ? body.entries : [];\n    for (const e of entries) {\n      const level =\n        e.level === \"debug\" || e.level === \"warn\" || e.level === \"error\" ? e.level : \"info\";\n      clientLog[level](`[client] ${e.tag ?? \"log\"}: ${e.msg ?? \"\"}`, {\n        clientTs: e.ts,\n        tag: e.tag,\n        ua,\n        ...(e.fields ?? {}),\n      });\n    }\n    return c.json({ ok: true, accepted: entries.length });\n  });\n\n  return app;\n};\n","import { Hono } from \"hono\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nconst ALREADY_HANDLED = 597;\nconst alreadyHandled = () => new Response(null, { status: ALREADY_HANDLED });\n\nexport const createPairRoutes = (deps: ApiDeps) => {\n  const app = new Hono<AppEnv>();\n\n  app.post(\"/start\", (c) => {\n    deps.handlePairStart(c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  // /api/pair/exchange is public — auth middleware skips it\n  app.post(\"/exchange\", async (c) => {\n    await deps.handlePairExchange(c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  return app;\n};\n","// src/api/routes/progress.routes.ts\n//\n// Webhook receiver for worker → tb-streamer progress events.\n//\n// Auth: HMAC over the raw request body, header X-Progress-Signature.\n// Auth bypass: the auth middleware skips this prefix because validation\n// happens inside the handler (mirrors /api/__update).\n//\n// Idempotency: per-session LRU on the ManagedSession record. Duplicates\n// return 200 with deduped:true and do not broadcast.\n\nimport crypto from \"node:crypto\";\nimport type { IncomingMessage } from \"node:http\";\nimport type { AgentOutputPayload, ProgressEvent, Stage } from \"@threadbase-sh/agent-types\";\nimport { Hono } from \"hono\";\nimport type { WSMessage } from \"../../types\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nfunction readRawBody(req: IncomingMessage): Promise<Buffer> {\n  return new Promise((resolve, reject) => {\n    const chunks: Buffer[] = [];\n    req.on(\"data\", (chunk) => chunks.push(chunk));\n    req.on(\"end\", () => resolve(Buffer.concat(chunks)));\n    req.on(\"error\", reject);\n  });\n}\n\ninterface AgentDeps {\n  sessionStore: {\n    getManaged: (sessionId: string) => {\n      id: string;\n      progressDedupeIds?: { hasSeen: (id: string) => boolean };\n      currentTurnId?: string | null;\n    } | null;\n  };\n  wsHub: { broadcast: (m: WSMessage) => void };\n  conversationWriter: {\n    appendAssistantTurn: (a: {\n      sessionId: string;\n      turnId: string;\n      content: string;\n      reviewerOverruled?: boolean;\n    }) => Promise<void>;\n  } | null;\n  agentConfig: {\n    enabled: boolean;\n    webhook: { hmacSecret: string; timestampSkewSeconds: number };\n    dedupe: { perSessionCapacity: number };\n  };\n}\n\nfunction verifySignature(rawBody: Buffer, signature: string, secret: string): boolean {\n  if (!signature || signature.length === 0) return false;\n  const expected = crypto.createHmac(\"sha256\", secret).update(rawBody).digest(\"hex\");\n  if (expected.length !== signature.length) return false;\n  try {\n    return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));\n  } catch {\n    return false;\n  }\n}\n\nfunction isWithinSkew(timestampHeader: string | undefined, skewSeconds: number): boolean {\n  if (!timestampHeader) return true; // header optional in milestone B\n  const t = Number(timestampHeader);\n  if (!Number.isFinite(t)) return false;\n  const now = Math.floor(Date.now() / 1000);\n  return Math.abs(now - t) <= skewSeconds;\n}\n\nfunction stageToRole(stage: Stage | string | undefined): \"worker\" | \"reviewer\" | \"signoff\" {\n  if (stage === \"review\") return \"reviewer\";\n  if (stage === \"sign-off\") return \"signoff\";\n  return \"worker\";\n}\n\nexport const createProgressRoutes = (deps: ApiDeps & AgentDeps) => {\n  const app = new Hono<AppEnv>();\n\n  app.post(\"/sessions/:sessionId/progress\", async (c) => {\n    if (!deps.agentConfig.enabled) {\n      return c.json({ error: \"multi-agent mode not enabled\" }, 404);\n    }\n    const sessionId = c.req.param(\"sessionId\");\n    const session = deps.sessionStore.getManaged(sessionId);\n    if (!session) {\n      return c.json({ error: \"unknown session\" }, 404);\n    }\n\n    // Read raw body from the underlying Node IncomingMessage stream — mirrors\n    // /api/__update. Hono's c.req.arrayBuffer() returns empty when the request\n    // arrives via @hono/node-server's bindings, leaving HMAC verification with\n    // the wrong byte buffer. In tests (app.request), c.env.incoming is absent\n    // and arrayBuffer() works fine — fall back to it.\n    let rawBuf: Buffer;\n    try {\n      const incoming = c.env?.incoming;\n      rawBuf = incoming ? await readRawBody(incoming) : Buffer.from(await c.req.arrayBuffer());\n    } catch {\n      return c.json({ error: \"could not read body\" }, 400);\n    }\n    const sigHeader = c.req.header(\"x-progress-signature\") ?? \"\";\n    if (!verifySignature(rawBuf, sigHeader, deps.agentConfig.webhook.hmacSecret)) {\n      return c.json({ error: \"unauthorized\" }, 401);\n    }\n    if (\n      !isWithinSkew(\n        c.req.header(\"x-progress-timestamp\"),\n        deps.agentConfig.webhook.timestampSkewSeconds,\n      )\n    ) {\n      return c.json({ error: \"stale timestamp\" }, 401);\n    }\n\n    let event: ProgressEvent;\n    try {\n      event = JSON.parse(rawBuf.toString(\"utf8\")) as ProgressEvent;\n    } catch {\n      return c.json({ error: \"bad json\" }, 400);\n    }\n    if (!event.eventId || !event.sessionId || !event.turnId) {\n      return c.json({ error: \"missing required fields\" }, 400);\n    }\n\n    // Dedupe (per spec §7.1). If the session lacks a dedupe map (e.g., it was\n    // created in PTY mode and re-used), the receiver still works — every event\n    // is treated as new.\n    if (session.progressDedupeIds?.hasSeen(event.eventId)) {\n      return c.json({ ok: true, deduped: true }, 200);\n    }\n\n    // ─── Translate to WSMessage and broadcast ───────────────────────────\n    if (event.type === \"stage_transition\") {\n      const msg: WSMessage = {\n        type: \"session_update\",\n        sessionId: event.sessionId,\n        // turnId disambiguates which turn this stage applies to. Critical\n        // for `queued` (identifies the waiting turn) and `rework` (with\n        // reworkAttempt). Existing single-turn consumers can ignore it.\n        turnId: event.turnId,\n        // Existing session_update consumers expect status; we leave it\n        // undefined here (stage is the new-only field).\n        stage: event.stage,\n        reworkAttempt: event.reworkAttempt,\n        stalledSinceMs: 0,\n      } as WSMessage;\n      deps.wsHub.broadcast(msg);\n    } else if (event.type === \"agent_output\") {\n      const payload = (event.payload ?? {}) as unknown as AgentOutputPayload;\n      const msg: WSMessage = {\n        type: \"agent_output\",\n        sessionId: event.sessionId,\n        turnId: event.turnId,\n        role: stageToRole(event.stage),\n        content: payload.content ?? \"\",\n        partial: payload.partial,\n        reviewerOverruled: payload.reviewerOverruled,\n        stage: event.stage,\n        reworkAttempt: event.reworkAttempt,\n      } as WSMessage;\n      deps.wsHub.broadcast(msg);\n\n      // Persist final answer to JSONL.\n      if (event.stage === \"done\" && deps.conversationWriter && payload.content) {\n        await deps.conversationWriter.appendAssistantTurn({\n          sessionId: event.sessionId,\n          turnId: event.turnId,\n          content: payload.content,\n          reviewerOverruled: payload.reviewerOverruled,\n        });\n      }\n\n      // Release the session lock when the turn completes (spec §6).\n      if (event.stage === \"done\" && session.currentTurnId === event.turnId) {\n        (session as { currentTurnId: string | null }).currentTurnId = null;\n      }\n    } else if (event.type === \"terminal_failure\") {\n      const reason = (event.payload as { reason?: string } | undefined)?.reason ?? \"unknown\";\n      const msg: WSMessage = {\n        type: \"turn_failure\",\n        sessionId: event.sessionId,\n        turnId: event.turnId,\n        reason,\n      } as WSMessage;\n      deps.wsHub.broadcast(msg);\n\n      // Release the session lock on failure (spec §6).\n      if (session.currentTurnId === event.turnId) {\n        (session as { currentTurnId: string | null }).currentTurnId = null;\n      }\n    }\n\n    return c.json({ ok: true }, 200);\n  });\n\n  return app;\n};\n","import { Hono } from \"hono\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nconst ALREADY_HANDLED = 597;\nconst alreadyHandled = () => new Response(null, { status: ALREADY_HANDLED });\n\nexport const createProjectRoutes = (deps: ApiDeps) => {\n  const app = new Hono<AppEnv>();\n\n  app.get(\"/\", (c) => {\n    const url = new URL(c.req.url);\n    deps.handleListProjects(url, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.get(\"/popular\", (c) => {\n    const url = new URL(c.req.url);\n    deps.handleGetPopularProjects(url, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  return app;\n};\n","import { Hono } from \"hono\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nconst ALREADY_HANDLED = 597;\nconst alreadyHandled = () => new Response(null, { status: ALREADY_HANDLED });\n\nexport const createScannerRoutes = (deps: ApiDeps) => {\n  const app = new Hono<AppEnv>();\n\n  app.get(\"/api/search\", async (c) => {\n    const url = new URL(c.req.url);\n    await deps.handleSearch(url, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  return app;\n};\n","import { Hono } from \"hono\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\n// Sentinel status used to signal that the handler already wrote to the Node\n// ServerResponse directly. writeHonoResponse in server.ts skips piping when\n// it sees this status.\nexport const ALREADY_HANDLED = 597;\nconst alreadyHandled = () => new Response(null, { status: ALREADY_HANDLED });\n\nexport const createSessionRoutes = (deps: ApiDeps) => {\n  const app = new Hono<AppEnv>();\n\n  app.get(\"/count\", (c) => {\n    deps.handleSessionsCount(c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.get(\"/recents\", (c) => {\n    const url = new URL(c.req.url);\n    deps.handleGetRecentSessions(url, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.get(\"/names\", (c) => {\n    deps.handleGetSessionNames(c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/resume\", async (c) => {\n    await deps.handleResume(c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/start\", async (c) => {\n    await deps.handleStartSession(c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.get(\"/\", async (c) => {\n    const url = new URL(c.req.url);\n    await deps.handleListSessions(url, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.get(\"/:id/output\", (c) => {\n    deps.handleGetOutput(c.req.param(\"id\"), c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/:id/input\", async (c) => {\n    await deps.handleSendInput(c.req.param(\"id\"), c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/:id/answer\", async (c) => {\n    await deps.handleSendAnswer(c.req.param(\"id\"), c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/:id/files\", async (c) => {\n    await deps.handleUploadFile(c.req.param(\"id\"), c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/:id/cancel\", (c) => {\n    deps.handleCancel(c.req.param(\"id\"), c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.patch(\"/:id/name\", async (c) => {\n    await deps.handleSetSessionName(c.req.param(\"id\"), c.env.incoming, c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/:id/adopt\", async (c) => {\n    await deps.handleAdopt(c.req.param(\"id\"), c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.post(\"/:id/stop\", async (c) => {\n    await deps.handleStopSession(c.req.param(\"id\"), c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  app.get(\"/:id\", (c) => {\n    deps.handleGetSession(c.req.param(\"id\"), c.env.outgoing);\n    return alreadyHandled();\n  });\n\n  return app;\n};\n","import { Hono } from \"hono\";\nimport type { UpgradeWebSocket } from \"hono/ws\";\nimport type { WebSocket } from \"ws\";\nimport type { AppEnv } from \"../app\";\nimport type { ApiDeps } from \"../types/api-deps\";\n\nexport const createWsRoutes = (deps: ApiDeps, upgradeWebSocket: UpgradeWebSocket<WebSocket>) => {\n  const app = new Hono<AppEnv>();\n\n  app.get(\n    \"/ws\",\n    upgradeWebSocket(() => {\n      let openWs: WebSocket | null = null;\n      return {\n        onOpen(_evt, ws) {\n          const raw = ws.raw;\n          if (!raw) return;\n          openWs = raw;\n          deps.handleWsOpen(raw);\n        },\n        onMessage(evt, _ws) {\n          if (openWs) deps.handleWsMessage(openWs, evt.data);\n        },\n        onClose(_evt, _ws) {\n          if (openWs) deps.handleWsClose(openWs);\n        },\n      };\n    }),\n  );\n\n  return app;\n};\n","import { mkdir, readdir, realpath, stat } from \"fs/promises\";\nimport { join, resolve, sep } from \"path\";\n\n/**\n * Thrown when a browse target is inside the root but does not exist on disk\n * (e.g. a mobile-cached path whose folder was since moved or deleted). Lets the\n * browse handler answer 404 instead of conflating it with an out-of-root 400.\n */\nexport class BrowsePathNotFoundError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"BrowsePathNotFoundError\";\n  }\n}\n\nexport async function resolveBrowsePath(browseRoot: string, relativePath: string): Promise<string> {\n  const normalizedRoot = resolve(browseRoot);\n  // On Unix, if relativePath is already an absolute path under browseRoot, use it directly.\n  // Only strip the leading separator for bare names like \"/projectA\" sent by the mobile browse\n  // tree — not for full paths like \"/Users/foo/bar\" which are absolute, not drive-root-relative.\n  // On Windows we always strip because \"\\foo\" means \"drive root relative\", never a full path.\n  let sanitized: string;\n  if (\n    process.platform !== \"win32\" &&\n    relativePath.startsWith(\"/\") &&\n    relativePath.length > 1 &&\n    relativePath.includes(\"/\", 1)\n  ) {\n    sanitized = relativePath;\n  } else {\n    sanitized = relativePath.replace(/^[/\\\\]+/, \"\");\n  }\n  const target = sanitized ? resolve(normalizedRoot, sanitized) : normalizedRoot;\n  // Build the allowed prefix with exactly one separator — normalizedRoot may already end with sep\n  // when browseRoot is a drive root (e.g. \"C:\\\"), which would otherwise create a double-sep prefix.\n  const rootPrefix = normalizedRoot.endsWith(sep) ? normalizedRoot : `${normalizedRoot}${sep}`;\n  if (!target.startsWith(rootPrefix) && target !== normalizedRoot) {\n    throw new Error(\"Path outside browse root\");\n  }\n  // Verify the path exists; surface a not-found as a typed error so the handler\n  // can answer 404 (folder gone) rather than the out-of-root 400 above.\n  try {\n    await realpath(target);\n  } catch (err: any) {\n    if (err?.code === \"ENOENT\") {\n      throw new BrowsePathNotFoundError(`Path not found: ${target}`);\n    }\n    throw err;\n  }\n  return target;\n}\n\nexport async function listDirectories(absolutePath: string): Promise<Array<{ name: string }>> {\n  const entries = await readdir(absolutePath, { withFileTypes: true });\n  return entries\n    .filter((e) => e.isDirectory())\n    .map((e) => ({ name: e.name }))\n    .sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport async function createDirectory(parentAbsolutePath: string, name: string): Promise<string> {\n  if (name.includes(\"/\") || name.includes(\"\\\\\") || name === \"..\" || name === \".\") {\n    throw new Error(\"Invalid directory name\");\n  }\n  const target = join(parentAbsolutePath, name);\n  try {\n    const s = await stat(target);\n    if (s.isDirectory()) throw new Error(\"Directory already exists\");\n  } catch (err: any) {\n    if (err.code !== \"ENOENT\") throw err;\n  }\n  await mkdir(target);\n  return target;\n}\n","import Database from \"better-sqlite3\";\nimport { closeSync, existsSync, mkdirSync, openSync, readSync, statSync } from \"fs\";\nimport { dirname } from \"path\";\nimport { runSqliteMigrations } from \"./db/sqlite-migrate\";\nimport { CLAUDE_CODE_PROVIDER } from \"./providers\";\nimport {\n  DEFAULT_AGENT_ENTRYPOINTS,\n  isAgentFile,\n  isAgentLine,\n} from \"./services/conversations/isAgentConversation\";\n\nexport interface ConversationCacheOptions {\n  // When true, drop conversations whose JSONL came from an agent entrypoint.\n  // Default false to preserve legacy behavior.\n  filterAgentConversations?: boolean;\n  // Set of `entrypoint` values to treat as agent traffic. Defaults to\n  // DEFAULT_AGENT_ENTRYPOINTS ({ sdk-cli, claude-vscode }).\n  agentEntrypoints?: ReadonlySet<string>;\n  // Fired the first time an agent JSONL is detected for a given file path\n  // (from updateFromLine). Lets the server unwatch the file.\n  onAgentFileDetected?: (filePath: string) => void;\n}\n\nexport interface ConversationListItem {\n  id: string;\n  filePath: string;\n  projectId: string | null;\n  projectPath: string | null;\n  projectName: string | null;\n  title: string | null;\n  model: string | null;\n  account: string | null;\n  branch: string | null;\n  messageCount: number;\n  lastActivity: string;\n  firstMessage: string | null;\n  lastMessage: string | null;\n  preview: string | null;\n  source: string | null;\n  provider: \"claude-code\" | \"codex-cli\";\n}\n\nexport interface CachedTailMessage {\n  role: string;\n  timestamp: string;\n  text: string;\n  content?: unknown[];\n}\n\nexport interface CachedTail {\n  conversationId: string;\n  messages: CachedTailMessage[];\n  tailSize: number;\n}\n\nexport interface ScannerMeta {\n  id: string;\n  sessionId?: string;\n  filePath: string;\n  projectPath?: string;\n  projectName?: string;\n  title?: string;\n  model?: string;\n  account?: string;\n  gitBranch?: string;\n  messageCount?: number;\n  timestamp?: string;\n  firstMessage?: unknown;\n  lastMessage?: unknown;\n  preview?: string;\n  provider?: \"claude-code\" | \"codex-cli\";\n}\n\ninterface MetaRow {\n  id: string;\n  file_path: string;\n  project_id: string | null;\n  project_path: string | null;\n  project_name: string | null;\n  title: string | null;\n  model: string | null;\n  account: string | null;\n  branch: string | null;\n  message_count: number;\n  last_activity: number | null;\n  first_message: string | null;\n  last_message: string | null;\n  preview: string | null;\n  source: string | null;\n  provider: \"claude-code\" | \"codex-cli\";\n  updated_at: number;\n}\n\ninterface TailRow {\n  conversation_id: string;\n  messages_json: string;\n  tail_size: number;\n  updated_at: number;\n}\n\ntype ContentBlock = { type: string; text?: string; [key: string]: unknown };\n\ninterface JsonlLine {\n  role?: string;\n  type?: string;\n  timestamp?: string;\n  // Set by Claude Code / Agent SDK on every real message line. \"cli\" = human\n  // interactive Claude Code; \"sdk-cli\" = Claude Agent SDK / claude-mem / hooks.\n  entrypoint?: string;\n  // Project context: the scanner sets `cwd` from any line that carries it\n  // (attachment, metadata, user, assistant). The live watcher must do the\n  // same — otherwise skeleton rows persist with NULL project_path.\n  cwd?: string;\n  slug?: string;\n  // Real Claude JSONL emits either an array of blocks or a raw string. Normalize\n  // via `normalizeContent` before consuming.\n  content?: ContentBlock[] | string;\n  message?: {\n    role?: string;\n    content?: ContentBlock[] | string;\n  };\n}\n\n// Last three path segments — mirrors @threadbase-sh/scanner's\n// `getShortProjectName`. Inlined here because the scanner does not export it.\nfunction shortProjectName(fullPath: string): string {\n  const parts = fullPath.split(/[/\\\\]/).filter(Boolean);\n  return parts.slice(-3).join(\"/\");\n}\n\nfunction normalizeContent(raw: ContentBlock[] | string | null | undefined): ContentBlock[] {\n  if (Array.isArray(raw)) return raw;\n  if (typeof raw === \"string\") return [{ type: \"text\", text: raw }];\n  return [];\n}\n\nconst SCHEMA = `\nCREATE TABLE IF NOT EXISTS conversation_meta (\n  id            TEXT PRIMARY KEY,\n  file_path     TEXT NOT NULL,\n  project_path  TEXT,\n  project_name  TEXT,\n  title         TEXT,\n  model         TEXT,\n  account       TEXT,\n  branch        TEXT,\n  message_count INTEGER DEFAULT 0,\n  last_activity INTEGER,\n  first_message TEXT,\n  last_message  TEXT,\n  preview       TEXT,\n  updated_at    INTEGER NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_meta_last_activity ON conversation_meta(last_activity DESC);\nCREATE INDEX IF NOT EXISTS idx_meta_project ON conversation_meta(project_path);\n\nCREATE TABLE IF NOT EXISTS conversation_tail (\n  conversation_id TEXT PRIMARY KEY REFERENCES conversation_meta(id) ON DELETE CASCADE,\n  messages_json   TEXT NOT NULL,\n  tail_size       INTEGER NOT NULL,\n  updated_at      INTEGER NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS session_names (\n  session_id  TEXT PRIMARY KEY,\n  name        TEXT NOT NULL,\n  updated_at  INTEGER NOT NULL\n);\n`;\n\nexport class ConversationCache {\n  private db: Database.Database;\n  private tailSize: number;\n  private fileIndex = new Map<string, string>();\n  private fileIndexLoaded = false;\n  // Monotonically increasing counter for tail updated_at — guarantees strict\n  // ordering even when multiple updateFromLine() calls land within the same ms.\n  private tailSeq = Date.now();\n  // Monotonically increasing counter for session_names updated_at.\n  private nameSeq = Date.now();\n\n  private stmts: {\n    getById: Database.Statement;\n    getFullById: Database.Statement;\n    updateMeta: Database.Statement;\n    updateMetaBatch: Database.Statement;\n    insertSkeleton: Database.Statement;\n    backfillSkeletonProject: Database.Statement;\n    upsertFull: Database.Statement;\n    getTail: Database.Statement;\n    hasTail: Database.Statement;\n    upsertTail: Database.Statement;\n    list: Database.Statement;\n    count: Database.Statement;\n    listByProject: Database.Statement;\n    countByProject: Database.Statement;\n    listByProvider: Database.Statement;\n    countByProvider: Database.Statement;\n    deleteById: Database.Statement;\n    deleteTailById: Database.Statement;\n    deleteAll: Database.Statement;\n    deleteTailAll: Database.Statement;\n    getIdByFilePath: Database.Statement;\n    allFilePaths: Database.Statement;\n    allFileStats: Database.Statement;\n    upsertSessionName: Database.Statement;\n    getSessionName: Database.Statement;\n    listSessionNames: Database.Statement;\n    setConversationProjectId: Database.Statement;\n    markAsStreamer: Database.Statement;\n    getLatestConversation: Database.Statement;\n    listConversationsForProjectBackfill: Database.Statement;\n    hasOrphanProjectId: Database.Statement;\n    popularProjects: Database.Statement;\n  };\n\n  private migrationsDir?: string;\n\n  // When true, ingestion drops conversations whose JSONL `entrypoint` belongs\n  // to `agentEntrypoints`. See isAgentConversation.ts.\n  private filterAgentConversations = false;\n  private agentEntrypoints: ReadonlySet<string> = DEFAULT_AGENT_ENTRYPOINTS;\n  private onAgentFileDetected?: (filePath: string) => void;\n\n  private constructor(\n    db: Database.Database,\n    tailSize: number,\n    migrationsDir?: string,\n    options?: ConversationCacheOptions,\n  ) {\n    this.migrationsDir = migrationsDir;\n    this.db = db;\n    this.tailSize = tailSize;\n    this.filterAgentConversations = options?.filterAgentConversations ?? false;\n    this.agentEntrypoints = options?.agentEntrypoints ?? DEFAULT_AGENT_ENTRYPOINTS;\n    this.onAgentFileDetected = options?.onAgentFileDetected;\n    db.exec(SCHEMA);\n    runSqliteMigrations(db, this.migrationsDir);\n    this.stmts = {\n      getById: db.prepare(\"SELECT id FROM conversation_meta WHERE id = ?\"),\n      getFullById: db.prepare(\"SELECT * FROM conversation_meta WHERE id = ?\"),\n      updateMeta: db.prepare(\n        \"UPDATE conversation_meta SET message_count = message_count + 1, last_activity = ?, last_message = ?, updated_at = ? WHERE id = ?\",\n      ),\n      // Batch equivalent of updateMeta: bumps message_count by N in one write\n      // (used by updateFromLines so a burst of appended lines is one UPDATE).\n      updateMetaBatch: db.prepare(\n        \"UPDATE conversation_meta SET message_count = message_count + @inc, last_activity = @last_activity, last_message = @last_message, updated_at = @updated_at WHERE id = @id\",\n      ),\n      insertSkeleton: db.prepare(\n        \"INSERT OR IGNORE INTO conversation_meta (id, file_path, message_count, updated_at) VALUES (?, ?, 1, ?)\",\n      ),\n      // Fills project_path / project_name / title on a row whose columns are\n      // still NULL. Never overwrites scanner-populated values — the scanner's\n      // upsertFromScannerMeta remains authoritative for those columns.\n      backfillSkeletonProject: db.prepare(\n        `UPDATE conversation_meta\n         SET project_path = COALESCE(project_path, @project_path),\n             project_name = COALESCE(project_name, @project_name),\n             title        = COALESCE(title,        @title)\n         WHERE id = @id\n           AND (project_path IS NULL OR project_name IS NULL OR title IS NULL)`,\n      ),\n      upsertFull: db.prepare(`\n        INSERT INTO conversation_meta\n          (id, file_path, project_path, project_name, title, model, account, branch,\n           message_count, last_activity, first_message, last_message, preview, updated_at,\n           mtime_ms, file_size, provider)\n        VALUES\n          (@id, @file_path, @project_path, @project_name, @title, @model, @account, @branch,\n           @message_count, @last_activity, @first_message, @last_message, @preview, @updated_at,\n           @mtime_ms, @file_size, @provider)\n        ON CONFLICT(id) DO UPDATE SET\n          file_path     = excluded.file_path,\n          project_path  = excluded.project_path,\n          project_name  = excluded.project_name,\n          title         = excluded.title,\n          model         = excluded.model,\n          account       = excluded.account,\n          branch        = excluded.branch,\n          -- message_count is incremented by live tailing but recounted from\n          -- scratch by a scanner rescan; a stale rescan must not carry a live\n          -- session's count backwards, so take the max instead of overwriting.\n          message_count = MAX(conversation_meta.message_count, excluded.message_count),\n          last_activity = excluded.last_activity,\n          first_message = excluded.first_message,\n          last_message  = excluded.last_message,\n          preview       = excluded.preview,\n          updated_at    = excluded.updated_at,\n          mtime_ms      = excluded.mtime_ms,\n          file_size     = excluded.file_size,\n          provider      = excluded.provider\n        WHERE conversation_meta.updated_at < excluded.updated_at\n      `),\n      getTail: db.prepare(\"SELECT * FROM conversation_tail WHERE conversation_id = ?\"),\n      hasTail: db.prepare(\"SELECT 1 FROM conversation_tail WHERE conversation_id = ? LIMIT 1\"),\n      upsertTail: db.prepare(`\n        INSERT INTO conversation_tail (conversation_id, messages_json, tail_size, updated_at)\n        VALUES (?, ?, ?, ?)\n        ON CONFLICT(conversation_id) DO UPDATE SET\n          messages_json = excluded.messages_json,\n          tail_size     = excluded.tail_size,\n          updated_at    = excluded.updated_at\n        WHERE conversation_tail.updated_at < excluded.updated_at\n      `),\n      list: db.prepare(\n        \"SELECT * FROM conversation_meta ORDER BY last_activity DESC LIMIT ? OFFSET ?\",\n      ),\n      count: db.prepare(\"SELECT COUNT(*) as n FROM conversation_meta\"),\n      listByProject: db.prepare(\n        \"SELECT * FROM conversation_meta WHERE project_path = ? ORDER BY last_activity DESC LIMIT ? OFFSET ?\",\n      ),\n      countByProject: db.prepare(\n        \"SELECT COUNT(*) as n FROM conversation_meta WHERE project_path = ?\",\n      ),\n      listByProvider: db.prepare(\n        \"SELECT * FROM conversation_meta WHERE provider = ? ORDER BY last_activity DESC LIMIT ? OFFSET ?\",\n      ),\n      countByProvider: db.prepare(\"SELECT COUNT(*) as n FROM conversation_meta WHERE provider = ?\"),\n      deleteById: db.prepare(\"DELETE FROM conversation_meta WHERE id = ?\"),\n      deleteTailById: db.prepare(\"DELETE FROM conversation_tail WHERE conversation_id = ?\"),\n      deleteAll: db.prepare(\"DELETE FROM conversation_meta\"),\n      deleteTailAll: db.prepare(\"DELETE FROM conversation_tail\"),\n      getIdByFilePath: db.prepare(\"SELECT id FROM conversation_meta WHERE file_path = ?\"),\n      allFilePaths: db.prepare(\"SELECT id, file_path FROM conversation_meta\"),\n      allFileStats: db.prepare(\n        \"SELECT file_path, mtime_ms, file_size FROM conversation_meta WHERE mtime_ms IS NOT NULL AND file_size IS NOT NULL\",\n      ),\n      upsertSessionName: db.prepare(`\n        INSERT INTO session_names (session_id, name, updated_at)\n        VALUES (?, ?, ?)\n        ON CONFLICT(session_id) DO UPDATE SET\n          name       = excluded.name,\n          updated_at = excluded.updated_at\n        WHERE session_names.updated_at < excluded.updated_at\n      `),\n      getSessionName: db.prepare(\"SELECT name FROM session_names WHERE session_id = ?\"),\n      listSessionNames: db.prepare(\"SELECT session_id, name FROM session_names\"),\n      setConversationProjectId: db.prepare(\n        \"UPDATE conversation_meta SET project_id = ? WHERE id = ?\",\n      ),\n      markAsStreamer: db.prepare(\"UPDATE conversation_meta SET source = 'streamer' WHERE id = ?\"),\n      getLatestConversation: db.prepare(\n        \"SELECT id, last_activity FROM conversation_meta WHERE last_activity IS NOT NULL ORDER BY last_activity DESC, id DESC LIMIT 1\",\n      ),\n      listConversationsForProjectBackfill: db.prepare(\n        \"SELECT id, project_path, project_id, last_activity FROM conversation_meta WHERE project_path IS NOT NULL\",\n      ),\n      hasOrphanProjectId: db.prepare(\n        \"SELECT 1 FROM conversation_meta WHERE project_id IS NULL AND project_path IS NOT NULL LIMIT 1\",\n      ),\n      popularProjects: db.prepare(\n        `SELECT project_path, project_name, COUNT(*) as cnt\n         FROM conversation_meta\n         WHERE project_path IS NOT NULL\n         GROUP BY project_path\n         ORDER BY cnt DESC\n         LIMIT ?`,\n      ),\n    };\n  }\n\n  /**\n   * Expose the underlying handle so projects/cache_metadata repositories can\n   * share the same connection. Internal API; not part of the public surface.\n   */\n  getDatabase(): Database.Database {\n    return this.db;\n  }\n\n  getAgentEntrypoints(): ReadonlySet<string> {\n    return this.agentEntrypoints;\n  }\n\n  static open(\n    dbPath: string,\n    tailSize = 10,\n    migrationsDir?: string,\n    options?: ConversationCacheOptions,\n  ): ConversationCache {\n    mkdirSync(dirname(dbPath), { recursive: true });\n    const db = new Database(dbPath);\n    db.pragma(\"journal_mode = WAL\");\n    db.pragma(\"foreign_keys = ON\");\n    return new ConversationCache(db, tailSize, migrationsDir, options);\n  }\n\n  close(): void {\n    this.db.close();\n  }\n\n  getPopularProjects(limit: number): Array<{ path: string; name: string; sessionCount: number }> {\n    const rows = this.stmts.popularProjects.all(limit) as Array<{\n      project_path: string;\n      project_name: string | null;\n      cnt: number;\n    }>;\n    return rows.map((r) => ({\n      path: r.project_path,\n      name: r.project_name ?? r.project_path.split(/[/\\\\]/).pop() ?? r.project_path,\n      sessionCount: r.cnt,\n    }));\n  }\n\n  private ensureFileIndex(): void {\n    if (this.fileIndexLoaded) return;\n    const rows = this.stmts.allFilePaths.all() as Array<{ id: string; file_path: string }>;\n    for (const row of rows) {\n      this.fileIndex.set(row.file_path, row.id);\n    }\n    this.fileIndexLoaded = true;\n  }\n\n  updateFromLine(filePath: string, rawLine: string): void {\n    let line: JsonlLine;\n    try {\n      line = JSON.parse(rawLine);\n    } catch {\n      return;\n    }\n\n    if (this.filterAgentConversations && isAgentLine(line, this.agentEntrypoints)) {\n      this.deleteByFilePath(filePath);\n      this.onAgentFileDetected?.(filePath);\n      return;\n    }\n\n    const role = line.role ?? line.type;\n    const isMessage = role === \"user\" || role === \"assistant\";\n\n    this.ensureFileIndex();\n\n    // Skip lines that carry neither a message nor project context — there's\n    // nothing for us to record.\n    if (!isMessage && !line.cwd && !line.slug) return;\n\n    let convId = this.fileIndex.get(filePath);\n    if (!convId) {\n      const pseudoId =\n        filePath\n          .split(/[/\\\\]/)\n          .pop()\n          ?.replace(/\\.jsonl$/, \"\") ?? filePath;\n      this.stmts.insertSkeleton.run(pseudoId, filePath, 0);\n      this.fileIndex.set(filePath, pseudoId);\n      convId = pseudoId;\n    }\n\n    // Backfill project_path / project_name / title from cwd on any line that\n    // carries it. COALESCE inside the SQL ensures we never overwrite a\n    // scanner-populated value. Without this, the chokidar watcher leaves\n    // skeleton rows with NULL project context, which renders as blank cards\n    // on the mobile Recents tab.\n    if (line.cwd || line.slug) {\n      const projectPath = line.cwd ?? null;\n      const projectName = projectPath ? shortProjectName(projectPath) : null;\n      const title = line.slug ?? projectName ?? null;\n      this.stmts.backfillSkeletonProject.run({\n        id: convId,\n        project_path: projectPath,\n        project_name: projectName,\n        title,\n      });\n    }\n\n    if (!isMessage) return;\n\n    const timestamp = line.timestamp ?? new Date().toISOString();\n    const activityMs = new Date(timestamp).getTime();\n    if (Number.isNaN(activityMs)) return;\n\n    const contentBlocks = normalizeContent(line.message?.content ?? line.content);\n    const text = contentBlocks.find((b) => b.type === \"text\")?.text?.slice(0, 200) ?? \"\";\n    const lastMessage = JSON.stringify({ role, timestamp, text });\n    const seq = ++this.tailSeq;\n\n    const result = this.stmts.updateMeta.run(activityMs, lastMessage, seq, convId);\n    if (result.changes === 0) return;\n\n    const tailRow = this.stmts.getTail.get(convId) as TailRow | undefined;\n    const msgs: CachedTailMessage[] = tailRow\n      ? (JSON.parse(tailRow.messages_json) as CachedTailMessage[])\n      : [];\n\n    msgs.push({ role, timestamp, text, content: contentBlocks });\n    if (msgs.length > this.tailSize) msgs.splice(0, msgs.length - this.tailSize);\n\n    this.stmts.upsertTail.run(convId, JSON.stringify(msgs), msgs.length, seq);\n  }\n\n  /**\n   * Batched form of updateFromLine: applies a burst of newly-appended lines\n   * (one chokidar read) in a single transaction with one message_count bump,\n   * one meta write, and one tail read/write — instead of 2-4 synchronous\n   * writes per line. Semantics are identical to replaying each line through\n   * updateFromLine in order: the agent filter short-circuits the whole batch,\n   * project context is backfilled last-wins, message_count increases by the\n   * number of surviving message lines, and last_activity/last_message reflect\n   * the final message line.\n   */\n  updateFromLines(filePath: string, rawLines: string[]): void {\n    // Classify all lines first (outside the transaction). A single watched\n    // file maps to one conversation, so we accumulate into scalars.\n    let sawProjectContext = false;\n    let backfillProjectPath: string | null = null;\n    let backfillProjectName: string | null = null;\n    let backfillTitle: string | null = null;\n    let msgCount = 0;\n    let lastActivityMs: number | null = null;\n    let lastMessage: string | null = null;\n    const newTail: CachedTailMessage[] = [];\n\n    for (const rawLine of rawLines) {\n      let line: JsonlLine;\n      try {\n        line = JSON.parse(rawLine);\n      } catch {\n        continue;\n      }\n\n      // The first agent line nukes the file and aborts the whole batch —\n      // matches updateFromLine's per-line return.\n      if (this.filterAgentConversations && isAgentLine(line, this.agentEntrypoints)) {\n        this.deleteByFilePath(filePath);\n        this.onAgentFileDetected?.(filePath);\n        return;\n      }\n\n      const role = line.role ?? line.type;\n      const isMessage = role === \"user\" || role === \"assistant\";\n\n      // Skip lines that carry neither a message nor project context.\n      if (!isMessage && !line.cwd && !line.slug) continue;\n\n      if (line.cwd || line.slug) {\n        sawProjectContext = true;\n        // First-wins per column, mirroring updateFromLine's per-line replay:\n        // backfillSkeletonProject COALESCEs each column independently, so the\n        // first non-null value seen for a column sticks and later lines can't\n        // override it. Accumulating last-wins here would diverge from per-line\n        // replay when a conversation's cwd/slug changes mid-batch.\n        const lineProjectPath = line.cwd ?? null;\n        const lineProjectName = lineProjectPath ? shortProjectName(lineProjectPath) : null;\n        const lineTitle = line.slug ?? lineProjectName ?? null;\n        backfillProjectPath ??= lineProjectPath;\n        backfillProjectName ??= lineProjectName;\n        backfillTitle ??= lineTitle;\n      }\n\n      if (!isMessage) continue;\n\n      const timestamp = line.timestamp ?? new Date().toISOString();\n      const activityMs = new Date(timestamp).getTime();\n      if (Number.isNaN(activityMs)) continue;\n\n      const contentBlocks = normalizeContent(line.message?.content ?? line.content);\n      const text = contentBlocks.find((b) => b.type === \"text\")?.text?.slice(0, 200) ?? \"\";\n      msgCount += 1;\n      lastActivityMs = activityMs;\n      lastMessage = JSON.stringify({ role, timestamp, text });\n      newTail.push({ role, timestamp, text, content: contentBlocks });\n    }\n\n    // Nothing recordable in this batch.\n    if (!sawProjectContext && msgCount === 0) return;\n\n    this.ensureFileIndex();\n\n    let convId = this.fileIndex.get(filePath);\n    if (!convId) {\n      const pseudoId =\n        filePath\n          .split(/[/\\\\]/)\n          .pop()\n          ?.replace(/\\.jsonl$/, \"\") ?? filePath;\n      this.stmts.insertSkeleton.run(pseudoId, filePath, 0);\n      this.fileIndex.set(filePath, pseudoId);\n      convId = pseudoId;\n    }\n    const id = convId;\n\n    const apply = this.db.transaction(() => {\n      if (sawProjectContext) {\n        this.stmts.backfillSkeletonProject.run({\n          id,\n          project_path: backfillProjectPath,\n          project_name: backfillProjectName,\n          title: backfillTitle,\n        });\n      }\n\n      if (msgCount === 0) return;\n\n      const seq = ++this.tailSeq;\n      const result = this.stmts.updateMetaBatch.run({\n        inc: msgCount,\n        last_activity: lastActivityMs,\n        last_message: lastMessage,\n        updated_at: seq,\n        id,\n      });\n      if (result.changes === 0) return;\n\n      const tailRow = this.stmts.getTail.get(id) as TailRow | undefined;\n      const msgs: CachedTailMessage[] = tailRow\n        ? (JSON.parse(tailRow.messages_json) as CachedTailMessage[])\n        : [];\n      msgs.push(...newTail);\n      if (msgs.length > this.tailSize) msgs.splice(0, msgs.length - this.tailSize);\n\n      this.stmts.upsertTail.run(id, JSON.stringify(msgs), msgs.length, seq);\n    });\n    apply();\n  }\n\n  // Returns the IDs of rows actually upserted (i.e. excluding any agent JSONLs\n  // skipped by the filter). The server's warm-up loop uses this to populate\n  // tails only for IDs that have a parent conversation_meta row — otherwise\n  // the conversation_tail FK fires and aborts the warm-up (regression covered\n  // in conversation-cache.test.ts).\n  upsertFromScannerMeta(metas: ScannerMeta[]): string[] {\n    const filter = this.filterAgentConversations;\n    const entrypoints = this.agentEntrypoints;\n    const upsertedIds: string[] = [];\n    const run = this.db.transaction((items: ScannerMeta[]) => {\n      for (const m of items) {\n        if (filter && isAgentFile(m.filePath, entrypoints)) continue;\n        const id =\n          m.sessionId ||\n          m.id\n            .split(\"/\")\n            .pop()\n            ?.replace(/\\.jsonl$/, \"\") ||\n          m.id;\n        const lastActivityMs = m.timestamp ? new Date(m.timestamp).getTime() : null;\n        let mtimeMs: number | null = null;\n        let fileSize: number | null = null;\n        try {\n          const s = statSync(m.filePath);\n          mtimeMs = s.mtimeMs;\n          fileSize = s.size;\n        } catch {\n          // file disappeared between scan and upsert — store without stat\n        }\n        // Share the same monotonic counter as live-tail writes so \"newest\n        // wins\" holds in both directions: a rescan after a live line must\n        // update scanner-owned fields (title/model/branch/etc.), and a live\n        // line after a rescan must still take precedence. A hardcoded 0 here\n        // let any live write win forever (CRITICAL #1).\n        const seq = ++this.tailSeq;\n        this.stmts.upsertFull.run({\n          id,\n          file_path: m.filePath,\n          project_path: m.projectPath ?? null,\n          project_name: m.projectName ?? null,\n          title: m.title ?? m.projectName ?? null,\n          model: m.model ?? null,\n          account: m.account ?? null,\n          branch: m.gitBranch ?? null,\n          message_count: m.messageCount ?? 0,\n          last_activity: lastActivityMs,\n          first_message: m.firstMessage ? JSON.stringify(m.firstMessage) : null,\n          last_message: m.lastMessage ? JSON.stringify(m.lastMessage) : null,\n          preview: m.preview ?? null,\n          updated_at: seq,\n          mtime_ms: mtimeMs,\n          file_size: fileSize,\n          provider: m.provider ?? CLAUDE_CODE_PROVIDER,\n        });\n        if (this.fileIndexLoaded) this.fileIndex.set(m.filePath, id);\n        upsertedIds.push(id);\n      }\n    });\n    run(metas);\n    return upsertedIds;\n  }\n\n  // Returns true if a row was deleted. Used by the prune-on-startup step and\n  // by updateFromLine when a previously-cached file turns out to be an agent\n  // JSONL.\n  deleteByFilePath(filePath: string): boolean {\n    const row = this.stmts.getIdByFilePath.get(filePath) as { id: string } | undefined;\n    if (!row) return false;\n    this.stmts.deleteTailById.run(row.id);\n    const result = this.stmts.deleteById.run(row.id);\n    this.fileIndex.delete(filePath);\n    return result.changes > 0;\n  }\n\n  // Reads the last `tailSize` qualifying lines from a JSONL file and writes them\n  // to conversation_tail. Reads backward in 8 KB chunks so memory usage is\n  // bounded regardless of file size. Uses updated_at=0 so any live\n  // updateFromLine() call (which uses Date.now()) always wins the upsert.\n  // Returns false if the file cannot be read or the tail already exists.\n  populateTailFromFile(convId: string, filePath: string): boolean {\n    if (this.stmts.hasTail.get(convId)) return false;\n\n    let fileSize: number;\n    let fd: number;\n    try {\n      fileSize = statSync(filePath).size;\n      fd = openSync(filePath, \"r\");\n    } catch {\n      return false;\n    }\n\n    const CHUNK = 8192;\n    const buf = Buffer.allocUnsafe(CHUNK);\n    let pos = fileSize;\n    let partial = \"\";\n    const lines: string[] = [];\n\n    try {\n      while (pos > 0 && lines.length < this.tailSize * 4) {\n        const toRead = Math.min(CHUNK, pos);\n        pos -= toRead;\n        readSync(fd, buf, 0, toRead, pos);\n        const chunk = buf.subarray(0, toRead).toString(\"utf8\");\n        const combined = chunk + partial;\n        const parts = combined.split(\"\\n\");\n        // parts[0] may be a partial line — keep it for the next iteration\n        partial = parts[0];\n        for (let i = parts.length - 1; i >= 1; i--) {\n          lines.push(parts[i]);\n        }\n      }\n      if (partial) lines.push(partial);\n    } finally {\n      closeSync(fd);\n    }\n\n    const msgs: CachedTailMessage[] = [];\n    for (let i = 0; i < lines.length && msgs.length < this.tailSize; i++) {\n      const line = lines[i].trim();\n      if (!line) continue;\n      let parsed: JsonlLine;\n      try {\n        parsed = JSON.parse(line);\n      } catch {\n        continue;\n      }\n      const role = parsed.role ?? parsed.type;\n      if (!role) continue;\n      const timestamp = parsed.timestamp ?? \"\";\n      const contentBlocks = normalizeContent(parsed.message?.content ?? parsed.content);\n      const text = contentBlocks.find((b) => b.type === \"text\")?.text?.slice(0, 200) ?? \"\";\n      msgs.unshift({ role, timestamp, text, content: contentBlocks });\n    }\n    if (msgs.length === 0) return false;\n    this.stmts.upsertTail.run(convId, JSON.stringify(msgs), msgs.length, 0);\n    return true;\n  }\n\n  listConversations(opts: { project?: string; provider?: string; limit: number; offset: number }): {\n    conversations: ConversationListItem[];\n    total: number;\n  } {\n    const { project, provider, limit, offset } = opts;\n    let total: number;\n    let rows: MetaRow[];\n\n    if (project) {\n      total = (this.stmts.countByProject.get(project) as { n: number }).n;\n      rows = limit === 0 ? [] : (this.stmts.listByProject.all(project, limit, offset) as MetaRow[]);\n    } else if (provider) {\n      total = (this.stmts.countByProvider.get(provider) as { n: number }).n;\n      rows =\n        limit === 0 ? [] : (this.stmts.listByProvider.all(provider, limit, offset) as MetaRow[]);\n    } else {\n      total = (this.stmts.count.get() as { n: number }).n;\n      rows = limit === 0 ? [] : (this.stmts.list.all(limit, offset) as MetaRow[]);\n    }\n\n    return {\n      total,\n      conversations: rows.map((r) => ({\n        id: r.id,\n        filePath: r.file_path,\n        projectId: r.project_id,\n        projectPath: r.project_path,\n        projectName: r.project_name,\n        title: r.title,\n        model: r.model,\n        account: r.account,\n        branch: r.branch,\n        messageCount: r.message_count,\n        lastActivity: r.last_activity\n          ? new Date(r.last_activity).toISOString()\n          : new Date(0).toISOString(),\n        firstMessage: r.first_message,\n        lastMessage: r.last_message,\n        preview: r.preview,\n        source: r.source,\n        provider: r.provider ?? CLAUDE_CODE_PROVIDER,\n      })),\n    };\n  }\n\n  /** Returns a map of filePath → { mtimeMs, size } for all rows that have\n   *  stat data stored. Used by the server to build the statCache passed to\n   *  ConversationScanner.scan() so unchanged files are skipped. */\n  getFileStats(): Map<string, { mtimeMs: number; size: number }> {\n    const rows = this.stmts.allFileStats.all() as Array<{\n      file_path: string;\n      mtime_ms: number;\n      file_size: number;\n    }>;\n    const map = new Map<string, { mtimeMs: number; size: number }>();\n    for (const r of rows) {\n      map.set(r.file_path, { mtimeMs: r.mtime_ms, size: r.file_size });\n    }\n    return map;\n  }\n\n  getMetaById(id: string): ConversationListItem | null {\n    const row = this.stmts.getFullById.get(id) as MetaRow | undefined;\n    if (!row) return null;\n    return {\n      id: row.id,\n      filePath: row.file_path,\n      projectId: row.project_id,\n      projectPath: row.project_path,\n      projectName: row.project_name,\n      title: row.title,\n      model: row.model,\n      account: row.account,\n      branch: row.branch,\n      messageCount: row.message_count,\n      lastActivity: row.last_activity\n        ? new Date(row.last_activity).toISOString()\n        : new Date(0).toISOString(),\n      firstMessage: row.first_message,\n      lastMessage: row.last_message,\n      preview: row.preview,\n      source: row.source,\n      provider: row.provider ?? CLAUDE_CODE_PROVIDER,\n    };\n  }\n\n  setConversationProjectId(conversationId: string, projectId: string): void {\n    this.stmts.setConversationProjectId.run(projectId, conversationId);\n  }\n\n  markAsStreamer(id: string): void {\n    this.stmts.markAsStreamer.run(id);\n  }\n\n  getLatestConversation(): { id: string; lastActivity: string | null } | null {\n    const row = this.stmts.getLatestConversation.get() as\n      | { id: string; last_activity: number | null }\n      | undefined;\n    if (!row) return null;\n    return {\n      id: row.id,\n      lastActivity: row.last_activity ? new Date(row.last_activity).toISOString() : null,\n    };\n  }\n\n  hasOrphanProjectId(): boolean {\n    return this.stmts.hasOrphanProjectId.get() !== undefined;\n  }\n\n  listConversationsForProjectBackfill(): Array<{\n    id: string;\n    projectPath: string | null;\n    projectId: string | null;\n    lastActivity: string | null;\n  }> {\n    const rows = this.stmts.listConversationsForProjectBackfill.all() as Array<{\n      id: string;\n      project_path: string | null;\n      project_id: string | null;\n      last_activity: number | null;\n    }>;\n    return rows.map((r) => ({\n      id: r.id,\n      projectPath: r.project_path,\n      projectId: r.project_id,\n      lastActivity: r.last_activity ? new Date(r.last_activity).toISOString() : null,\n    }));\n  }\n\n  getConversationTail(id: string): CachedTail | null {\n    const row = this.stmts.getTail.get(id) as TailRow | undefined;\n    if (!row) return null;\n    return {\n      conversationId: id,\n      messages: JSON.parse(row.messages_json) as CachedTailMessage[],\n      tailSize: row.tail_size,\n    };\n  }\n\n  hasConversation(id: string): boolean {\n    return !!this.stmts.getById.get(id);\n  }\n\n  upsertSessionName(sessionId: string, name: string): void {\n    this.stmts.upsertSessionName.run(sessionId, name, ++this.nameSeq);\n  }\n\n  getSessionName(sessionId: string): string | null {\n    const row = this.stmts.getSessionName.get(sessionId) as { name: string } | undefined;\n    return row?.name ?? null;\n  }\n\n  listSessionNames(): Record<string, string> {\n    const rows = this.stmts.listSessionNames.all() as { session_id: string; name: string }[];\n    return Object.fromEntries(rows.map((r) => [r.session_id, r.name]));\n  }\n\n  invalidate(id?: string): void {\n    if (id) {\n      this.stmts.deleteTailById.run(id);\n      this.stmts.deleteById.run(id);\n      if (this.fileIndexLoaded) {\n        for (const [fp, cid] of this.fileIndex) {\n          if (cid === id) {\n            this.fileIndex.delete(fp);\n            break;\n          }\n        }\n      }\n    } else {\n      this.stmts.deleteTailAll.run();\n      this.stmts.deleteAll.run();\n      this.fileIndex.clear();\n    }\n  }\n\n  /**\n   * Drop the cached row for a file. Two callers with opposite intent:\n   *  - a directory-watch \"change\" event (the file was appended to) — pass\n   *    `skipIfTailed: true`. A cached tail means the row is being actively\n   *    maintained from the file's real content by the live-tail\n   *    (updateFromLines) or warm-up path, fresher than any scanner-derived\n   *    view. Both watchers fire on the same append with no ordering guarantee;\n   *    without this guard the invalidate can land after the tail write and wipe\n   *    the just-cached row, flickering the conversation out of\n   *    /api/conversations on nearly every message (CRITICAL #2). The debounced\n   *    rescan still re-derives metadata, so skipping the eager drop loses\n   *    nothing.\n   *  - a genuine unlink (the file is gone) — leave `skipIfTailed` false so the\n   *    row is always removed, otherwise a deleted session ghosts in the cache.\n   */\n  invalidateByFilePath(filePath: string, opts?: { skipIfTailed?: boolean }): string | null {\n    const row = this.stmts.getIdByFilePath.get(filePath) as { id: string } | undefined;\n    if (!row) return null;\n    if (opts?.skipIfTailed && this.stmts.hasTail.get(row.id)) return null;\n    this.invalidate(row.id);\n    return row.id;\n  }\n\n  /**\n   * Drop rows whose `file_path` no longer exists on disk AND which have no\n   * cached tail to fall back to. Rows with a tail are left alone so\n   * `handleGetConversation` can still serve the cached tail even when the\n   * JSONL has been deleted.\n   */\n  pruneGhostFiles(exists: (filePath: string) => boolean = existsSync): string[] {\n    const rows = this.stmts.allFilePaths.all() as { id: string; file_path: string }[];\n    const ghosts: string[] = [];\n    const prune = this.db.transaction((ids: string[]) => {\n      for (const id of ids) {\n        this.stmts.deleteTailById.run(id);\n        this.stmts.deleteById.run(id);\n      }\n    });\n    for (const row of rows) {\n      if (exists(row.file_path)) continue;\n      if (this.stmts.hasTail.get(row.id)) continue;\n      ghosts.push(row.id);\n    }\n    if (ghosts.length > 0) {\n      prune(ghosts);\n      if (this.fileIndexLoaded) {\n        for (const id of ghosts) {\n          for (const [fp, cid] of this.fileIndex) {\n            if (cid === id) {\n              this.fileIndex.delete(fp);\n              break;\n            }\n          }\n        }\n      }\n    }\n    return ghosts;\n  }\n}\n","import type Database from \"better-sqlite3\";\nimport { readdirSync, readFileSync } from \"fs\";\nimport { dirname, join } from \"path\";\nimport { fileURLToPath } from \"url\";\n\nfunction getMigrationsDir(): string {\n  if (typeof import.meta !== \"undefined\" && import.meta.url) {\n    return dirname(fileURLToPath(import.meta.url));\n  }\n  return __dirname;\n}\n\nconst SCHEMA_MIGRATIONS_SQL = `\nCREATE TABLE IF NOT EXISTS schema_migrations (\n  id TEXT PRIMARY KEY,\n  applied_at TEXT NOT NULL\n);\n`;\n\nexport interface SqliteMigrationRunResult {\n  applied: string[];\n  skipped: string[];\n}\n\nexport function runSqliteMigrations(\n  db: Database.Database,\n  migrationsDir?: string,\n): SqliteMigrationRunResult {\n  db.exec(SCHEMA_MIGRATIONS_SQL);\n\n  const dir = migrationsDir ?? join(getMigrationsDir(), \"migrations\");\n  const files = readdirSync(dir)\n    .filter((f) => f.endsWith(\".sql\"))\n    .sort();\n\n  const appliedRows = db.prepare(\"SELECT id FROM schema_migrations\").all() as Array<{ id: string }>;\n  const appliedSet = new Set(appliedRows.map((r) => r.id));\n\n  const recordApplied = db.prepare(\"INSERT INTO schema_migrations (id, applied_at) VALUES (?, ?)\");\n\n  const applied: string[] = [];\n  const skipped: string[] = [];\n\n  for (const file of files) {\n    if (appliedSet.has(file)) {\n      skipped.push(file);\n      continue;\n    }\n    const sql = readFileSync(join(dir, file), \"utf-8\");\n    const tx = db.transaction(() => {\n      db.exec(sql);\n      recordApplied.run(file, new Date().toISOString());\n    });\n    tx();\n    applied.push(file);\n  }\n\n  return { applied, skipped };\n}\n","export const CLAUDE_CODE_PROVIDER = \"claude-code\" as const;\nexport const CODEX_CLI_PROVIDER = \"codex-cli\" as const;\nexport type ProviderName = typeof CLAUDE_CODE_PROVIDER | typeof CODEX_CLI_PROVIDER;\n\n// Codex conversations are read-only — the streamer cannot resume them — so a\n// codex provider forces resumable=false regardless of on-disk availability.\n// claude-code defers to the availability check (project path present, etc.).\nexport function isProviderResumable(\n  provider: string | null | undefined,\n  availabilityResumable: boolean,\n): boolean {\n  if (provider === CODEX_CLI_PROVIDER) return false;\n  return availabilityResumable;\n}\n","import { closeSync, openSync, readSync, statSync } from \"fs\";\n\n// Default agent entrypoints. Override via THREADBASE_AGENT_ENTRYPOINTS\n// (comma-separated). Interactive Claude Code emits entrypoint=\"cli\" and is\n// never in this set.\n//   - sdk-cli      → Claude Agent SDK, claude-mem, hook-spawned automation\n//   - claude-vscode → VS Code extension when invoked headlessly (memory\n//                     summarizers, etc.). Real interactive VS Code sessions\n//                     also use this value, so toggling via env var lets users\n//                     keep them visible if they want.\nexport const DEFAULT_AGENT_ENTRYPOINTS: ReadonlySet<string> = new Set([\"sdk-cli\", \"claude-vscode\"]);\n\n// Chunked scan: read 64 KB at a time with early-exit. We look for the first\n// `\"entrypoint\":` occurrence in the file:\n//   - matches an agent marker → return true\n//   - matches some other entrypoint value (e.g. \"cli\") → return false\n//   - never appears → return false\n// The entrypoint is fixed per-conversation, so the first occurrence is\n// authoritative. This keeps both agent and human files fast (typical first\n// hit is within the first chunk), while still tolerating long housekeeping\n// prefixes (observed agent markers as deep as 2.3 MB in 4.5 MB observer files).\nconst CHUNK_BYTES = 64 * 1024;\nconst ENTRYPOINT_PROBE = `\"entrypoint\":`;\n// Overlap consecutive chunks so a marker that straddles the boundary is still\n// found. The longest entrypoint we look for is ~24 chars; 64 bytes overlap is\n// plenty.\nconst CHUNK_OVERLAP = 64;\n\n// Per-file decision cache, keyed by `${filePath}::${sortedEntrypointsKey}` so\n// changing the set invalidates entries. Filled lazily; cleared on restart.\nconst fileDecisionCache = new Map<string, boolean>();\n\nfunction markersFor(entrypoints: ReadonlySet<string>): string[] {\n  return [...entrypoints].map((e) => `\"entrypoint\":\"${e}\"`);\n}\n\nfunction cacheKey(filePath: string, entrypoints: ReadonlySet<string>): string {\n  return `${filePath}::${[...entrypoints].sort().join(\",\")}`;\n}\n\nexport function isAgentLine(\n  line: { entrypoint?: string },\n  entrypoints: ReadonlySet<string> = DEFAULT_AGENT_ENTRYPOINTS,\n): boolean {\n  return line.entrypoint !== undefined && entrypoints.has(line.entrypoint);\n}\n\nexport function isAgentFile(\n  filePath: string,\n  entrypoints: ReadonlySet<string> = DEFAULT_AGENT_ENTRYPOINTS,\n): boolean {\n  if (entrypoints.size === 0) return false;\n  const key = cacheKey(filePath, entrypoints);\n  const cached = fileDecisionCache.get(key);\n  if (cached !== undefined) return cached;\n\n  let fd: number;\n  try {\n    fd = openSync(filePath, \"r\");\n  } catch {\n    return false;\n  }\n\n  try {\n    const fileSize = statSync(filePath).size;\n    if (fileSize === 0) {\n      fileDecisionCache.set(key, false);\n      return false;\n    }\n\n    const markers = markersFor(entrypoints);\n    const buf = Buffer.allocUnsafe(CHUNK_BYTES);\n    let offset = 0;\n    let carry = \"\";\n\n    while (offset < fileSize) {\n      const toRead = Math.min(CHUNK_BYTES, fileSize - offset);\n      const got = readSync(fd, buf, 0, toRead, offset);\n      if (got <= 0) break;\n      const chunk = carry + buf.toString(\"utf8\", 0, got);\n\n      // Agent match wins.\n      for (const marker of markers) {\n        if (chunk.includes(marker)) {\n          fileDecisionCache.set(key, true);\n          return true;\n        }\n      }\n\n      // If we see ANY entrypoint field, it's per-conversation and stable —\n      // since none of the agent markers matched, this is a non-agent file.\n      // Stops 11 MB human JSONLs from being read in full.\n      if (chunk.includes(ENTRYPOINT_PROBE)) {\n        fileDecisionCache.set(key, false);\n        return false;\n      }\n\n      carry = chunk.slice(-CHUNK_OVERLAP);\n      offset += got;\n    }\n\n    fileDecisionCache.set(key, false);\n    return false;\n  } catch {\n    return false;\n  } finally {\n    closeSync(fd);\n  }\n}\n\n// Comma-separated parser. Empty string → empty set (agents shown in practice\n// even when includeAgents=false, since no entrypoint qualifies).\nexport function parseAgentEntrypointsEnv(raw: string | undefined): ReadonlySet<string> {\n  if (raw === undefined) return DEFAULT_AGENT_ENTRYPOINTS;\n  const parts = raw\n    .split(\",\")\n    .map((s) => s.trim())\n    .filter((s) => s.length > 0);\n  return new Set(parts);\n}\n\nexport function clearAgentFileCacheForTests(): void {\n  fileDecisionCache.clear();\n}\n","export interface DbConfig {\n  connectionString: string;\n  max: number;\n  ssl?: string;\n  statementTimeout?: number;\n  instanceId: string;\n}\n\nexport function isDbEnabled(): boolean {\n  const url = process.env.THREADBASE_DATABASE_URL;\n  return typeof url === \"string\" && url.length > 0;\n}\n\nexport function getInstanceId(): string {\n  return process.env.THREADBASE_INSTANCE_ID || require(\"os\").hostname();\n}\n\nexport function getDbConfig(): DbConfig | null {\n  if (!isDbEnabled()) return null;\n\n  const connectionString = process.env.THREADBASE_DATABASE_URL ?? \"\";\n  const poolMax = Number.parseInt(process.env.THREADBASE_DATABASE_POOL_MAX ?? \"\", 10);\n  const stmtTimeout = Number.parseInt(\n    process.env.THREADBASE_DATABASE_STATEMENT_TIMEOUT_MS ?? \"\",\n    10,\n  );\n  const ssl = process.env.THREADBASE_DATABASE_SSL || undefined;\n\n  return {\n    connectionString,\n    max: Number.isNaN(poolMax) ? 10 : poolMax,\n    ssl,\n    statementTimeout: Number.isNaN(stmtTimeout) ? undefined : stmtTimeout,\n    instanceId: getInstanceId(),\n  };\n}\n","import { readdirSync, readFileSync } from \"fs\";\nimport { dirname, join } from \"path\";\nimport type pg from \"pg\";\nimport { fileURLToPath } from \"url\";\n\nfunction getMigrationsDir(): string {\n  // ESM: import.meta.url is available\n  if (import.meta.url) {\n    return dirname(fileURLToPath(import.meta.url));\n  }\n  // CJS: __dirname is available (injected by tsup)\n  return __dirname;\n}\n\nexport async function runMigrations(pool: pg.Pool, migrationsDir?: string): Promise<void> {\n  await pool.query(`\n    CREATE TABLE IF NOT EXISTS _migrations (\n      id SERIAL PRIMARY KEY,\n      name TEXT NOT NULL UNIQUE,\n      applied_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n    )\n  `);\n\n  const { rows: applied } = await pool.query<{ name: string }>(\n    \"SELECT name FROM _migrations ORDER BY name\",\n  );\n  const appliedSet = new Set(applied.map((r) => r.name));\n\n  const dir = migrationsDir ?? join(getMigrationsDir(), \"pg-migrations\");\n  const files = readdirSync(dir)\n    .filter((f) => f.endsWith(\".sql\"))\n    .sort();\n\n  for (const file of files) {\n    if (appliedSet.has(file)) continue;\n\n    const sql = readFileSync(join(dir, file), \"utf-8\");\n    await pool.query(sql);\n    await pool.query(\"INSERT INTO _migrations (name) VALUES ($1)\", [file]);\n  }\n}\n","import type { Pool as PoolType } from \"pg\";\nimport type { DbConfig } from \"./config\";\n\nexport function maskConnectionString(url: string): string {\n  try {\n    const parsed = new URL(url);\n    // Check if password field is present (including empty password like \"user:@host\")\n    const hasPasswordField =\n      parsed.username.length > 0 && url.includes(`${parsed.username}:`) && url.includes(\"@\");\n    if (hasPasswordField) {\n      parsed.password = \"***\";\n    }\n    return parsed.toString();\n  } catch {\n    return \"***masked***\";\n  }\n}\n\nexport async function createPool(config: DbConfig): Promise<PoolType> {\n  const pg = await import(\"pg\");\n  const { Pool } = pg.default ?? pg;\n\n  const poolConfig: ConstructorParameters<typeof Pool>[0] = {\n    connectionString: config.connectionString,\n    max: config.max,\n  };\n\n  if (config.ssl === \"require\") {\n    poolConfig.ssl = { rejectUnauthorized: false };\n  } else if (config.ssl === \"disable\") {\n    poolConfig.ssl = false;\n  }\n\n  if (config.statementTimeout) {\n    poolConfig.statement_timeout = config.statementTimeout;\n  }\n\n  return new Pool(poolConfig);\n}\n","import type Database from \"better-sqlite3\";\n\nexport type CacheMetadataKey =\n  | \"last_conversation_id\"\n  | \"last_conversation_created_at\"\n  | \"projects_last_indexed_at\"\n  | \"conversations_last_indexed_at\"\n  | \"conversations_dirty\";\n\nexport class CacheMetadataRepository {\n  private get: Database.Statement;\n  private upsert: Database.Statement;\n  private del: Database.Statement;\n\n  constructor(db: Database.Database) {\n    this.get = db.prepare(\"SELECT value FROM cache_metadata WHERE key = ?\");\n    this.upsert = db.prepare(`\n      INSERT INTO cache_metadata (key, value, updated_at)\n      VALUES (?, ?, ?)\n      ON CONFLICT(key) DO UPDATE SET\n        value      = excluded.value,\n        updated_at = excluded.updated_at\n    `);\n    this.del = db.prepare(\"DELETE FROM cache_metadata WHERE key = ?\");\n  }\n\n  getCacheMetadata(key: CacheMetadataKey): string | null {\n    const row = this.get.get(key) as { value: string } | undefined;\n    return row?.value ?? null;\n  }\n\n  setCacheMetadata(key: CacheMetadataKey, value: string): void {\n    this.upsert.run(key, value, new Date().toISOString());\n  }\n\n  deleteCacheMetadata(key: CacheMetadataKey): void {\n    this.del.run(key);\n  }\n}\n","import type { ConversationCache } from \"../../conversation-cache\";\n\n/**\n * Thin repository wrapper around ConversationCache for the project-id flow.\n * The cache is the source of truth for conversation rows; this just exposes\n * a stable, repo-style API for services that don't want to know about the\n * cache class directly.\n */\nexport class ConversationsRepository {\n  constructor(private cache: ConversationCache) {}\n\n  updateConversationProjectId(args: { conversationId: string; projectId: string }): void {\n    this.cache.setConversationProjectId(args.conversationId, args.projectId);\n  }\n\n  listConversationsForProjectBackfill() {\n    return this.cache.listConversationsForProjectBackfill();\n  }\n\n  getLatestConversation() {\n    return this.cache.getLatestConversation();\n  }\n\n  hasOrphanRows(): boolean {\n    return this.cache.hasOrphanProjectId();\n  }\n}\n","import type Database from \"better-sqlite3\";\nimport { randomUUID } from \"crypto\";\nimport type { Project } from \"../../schemas/project.schema\";\nimport { canonicalizeProjectPath } from \"../../utils/canonicalizeProjectPath\";\n\ninterface ProjectRow {\n  id: string;\n  path: string;\n  name: string | null;\n  last_conversation_id: string | null;\n  last_conversation_created_at: string | null;\n  last_indexed_at: string | null;\n  latest_message_at: string | null;\n  latest_message_id: string | null;\n  message_count: number;\n  created_at: string;\n  updated_at: string;\n}\n\nfunction rowToProject(row: ProjectRow): Project {\n  return {\n    id: row.id,\n    path: row.path,\n    name: row.name,\n    lastConversationId: row.last_conversation_id,\n    lastConversationCreatedAt: row.last_conversation_created_at,\n    lastIndexedAt: row.last_indexed_at,\n    latestMessageAt: row.latest_message_at,\n    latestMessageId: row.latest_message_id,\n    messageCount: row.message_count,\n    createdAt: row.created_at,\n    updatedAt: row.updated_at,\n  };\n}\n\nexport interface UpsertProjectInput {\n  lastConversationId?: string | null;\n  lastConversationCreatedAt?: string | null;\n  latestMessageAt?: string | null;\n  latestMessageId?: string | null;\n  name?: string | null;\n}\n\nexport class ProjectsRepository {\n  private getByPath: Database.Statement;\n  private getById: Database.Statement;\n  private listAll: Database.Statement;\n  private insert: Database.Statement;\n  private update: Database.Statement;\n\n  constructor(db: Database.Database) {\n    this.getByPath = db.prepare(\"SELECT * FROM projects WHERE path = ?\");\n    this.getById = db.prepare(\"SELECT * FROM projects WHERE id = ?\");\n    this.listAll = db.prepare(\"SELECT * FROM projects ORDER BY updated_at DESC\");\n    this.insert = db.prepare(`\n      INSERT INTO projects (\n        id, path, name,\n        last_conversation_id, last_conversation_created_at, last_indexed_at,\n        latest_message_at, latest_message_id, message_count,\n        created_at, updated_at\n      ) VALUES (\n        @id, @path, @name,\n        @last_conversation_id, @last_conversation_created_at, @last_indexed_at,\n        @latest_message_at, @latest_message_id, @message_count,\n        @created_at, @updated_at\n      )\n    `);\n    this.update = db.prepare(`\n      UPDATE projects SET\n        name                         = COALESCE(@name, name),\n        last_conversation_id         = COALESCE(@last_conversation_id, last_conversation_id),\n        last_conversation_created_at = COALESCE(@last_conversation_created_at, last_conversation_created_at),\n        last_indexed_at              = COALESCE(@last_indexed_at, last_indexed_at),\n        latest_message_at            = COALESCE(@latest_message_at, latest_message_at),\n        latest_message_id            = COALESCE(@latest_message_id, latest_message_id),\n        updated_at                   = @updated_at\n      WHERE id = @id\n    `);\n  }\n\n  getProjectByPath(rawPath: string): Project | null {\n    const path = canonicalizeProjectPath(rawPath);\n    const row = this.getByPath.get(path) as ProjectRow | undefined;\n    return row ? rowToProject(row) : null;\n  }\n\n  getProjectById(id: string): Project | null {\n    const row = this.getById.get(id) as ProjectRow | undefined;\n    return row ? rowToProject(row) : null;\n  }\n\n  listProjects(): Project[] {\n    return (this.listAll.all() as ProjectRow[]).map(rowToProject);\n  }\n\n  /**\n   * Insert a project at the given canonical path, or update its metadata\n   * if one already exists. Returns the persisted Project row.\n   *\n   * Idempotent: passing the same path twice returns the same project id.\n   */\n  upsertProjectByPath(rawPath: string, input: UpsertProjectInput = {}): Project {\n    const path = canonicalizeProjectPath(rawPath);\n    const now = new Date().toISOString();\n\n    const existing = this.getByPath.get(path) as ProjectRow | undefined;\n    if (existing) {\n      this.update.run({\n        id: existing.id,\n        name: input.name ?? null,\n        last_conversation_id: input.lastConversationId ?? null,\n        last_conversation_created_at: input.lastConversationCreatedAt ?? null,\n        last_indexed_at: now,\n        latest_message_at: input.latestMessageAt ?? null,\n        latest_message_id: input.latestMessageId ?? null,\n        updated_at: now,\n      });\n      return rowToProject(this.getById.get(existing.id) as ProjectRow);\n    }\n\n    const id = randomUUID();\n    this.insert.run({\n      id,\n      path,\n      name: input.name ?? deriveNameFromPath(path),\n      last_conversation_id: input.lastConversationId ?? null,\n      last_conversation_created_at: input.lastConversationCreatedAt ?? null,\n      last_indexed_at: now,\n      latest_message_at: input.latestMessageAt ?? null,\n      latest_message_id: input.latestMessageId ?? null,\n      message_count: 0,\n      created_at: now,\n      updated_at: now,\n    });\n    return rowToProject(this.getById.get(id) as ProjectRow);\n  }\n}\n\nfunction deriveNameFromPath(path: string): string | null {\n  const parts = path.split(/[\\\\/]/).filter(Boolean);\n  return parts.length > 0 ? parts[parts.length - 1] : null;\n}\n","/**\n * Canonicalize a project path so the same project always dedupes to the\n * same key, regardless of trailing slashes or surrounding whitespace.\n *\n * Rules:\n *   - Trim surrounding whitespace\n *   - Remove trailing forward or back slashes (one or more)\n *\n * Do NOT lowercase: project paths can be case-sensitive on Linux/macOS\n * and lowercasing them would silently merge two distinct real projects.\n */\nexport function canonicalizeProjectPath(projectPath: string): string {\n  return projectPath.trim().replace(/[\\\\/]+$/, \"\");\n}\n","import type { SessionStore } from \"../../session-store\";\n\n/**\n * Sessions live in-memory in SessionStore (Postgres-backed persistence\n * was dropped per the SQLite-only direction). This repository wraps the\n * store with a stable, project-id-aware API for the new services.\n */\nexport class SessionsRepository {\n  constructor(private store: SessionStore) {}\n\n  updateSessionProjectId(args: { sessionId: string; projectId: string }): void {\n    this.store.updateManaged(args.sessionId, { projectId: args.projectId });\n  }\n\n  listManagedSessions() {\n    return this.store.listManaged();\n  }\n}\n","import type pg from \"pg\";\n\nexport interface UploadRecord {\n  id: string;\n  sessionId: string;\n  filePath: string;\n  originalName: string;\n  mimeType: string;\n  sizeBytes: number;\n}\n\nexport async function recordUpload(\n  pool: pg.Pool | null,\n  instanceId: string | null,\n  row: UploadRecord,\n): Promise<void> {\n  if (!pool) return;\n  await pool.query(\n    `INSERT INTO session_uploads\n       (id, session_id, instance_id, file_path, original_name, mime_type, size_bytes)\n     VALUES ($1, $2, $3, $4, $5, $6, $7)`,\n    [\n      row.id,\n      row.sessionId,\n      instanceId,\n      row.filePath,\n      row.originalName,\n      row.mimeType,\n      row.sizeBytes,\n    ],\n  );\n}\n","import { readdirSync, statSync } from \"fs\";\nimport type { ServerResponse } from \"http\";\nimport { homedir } from \"os\";\nimport { join } from \"path\";\n\nfunction decodeProjectPath(dirName: string): string {\n  // Claude encodes project paths by replacing '/' with '-', starting from root.\n  // e.g. '-Users-foo-Desktop-dev-myproject' → '/Users/foo/Desktop/dev/myproject'\n  return dirName.replace(/-/g, \"/\");\n}\n\nexport function handleListProjects(url: URL, res: ServerResponse): void {\n  const limit = Math.max(1, parseInt(url.searchParams.get(\"limit\") ?? \"50\", 10) || 50);\n  const offset = Math.max(0, parseInt(url.searchParams.get(\"offset\") ?? \"0\", 10) || 0);\n\n  const projectsDir = join(homedir(), \".claude\", \"projects\");\n\n  let entries: Array<{ name: string; path: string; dirName: string; mtime: number }>;\n  try {\n    entries = readdirSync(projectsDir)\n      .map((dirName) => {\n        const fullPath = join(projectsDir, dirName);\n        let mtime = 0;\n        try {\n          mtime = statSync(fullPath).mtimeMs;\n        } catch {\n          // ignore stat errors — directory may have been removed\n        }\n        const path = decodeProjectPath(dirName);\n        const name = path.split(\"/\").filter(Boolean).pop() ?? dirName;\n        return { name, path, dirName, mtime };\n      })\n      .sort((a, b) => b.mtime - a.mtime);\n  } catch {\n    res.writeHead(200, { \"Content-Type\": \"application/json\" });\n    res.end(JSON.stringify({ projects: [], total: 0 }));\n    return;\n  }\n\n  const total = entries.length;\n  const page = entries\n    .slice(offset, offset + limit)\n    .map(({ name, path, dirName }) => ({ name, path, dirName }));\n\n  res.writeHead(200, { \"Content-Type\": \"application/json\" });\n  res.end(JSON.stringify({ projects: page, total }));\n}\n","import { randomBytes } from \"crypto\";\n\nexport interface PairTokenRecord {\n  token: string;\n  expiresAt: number;\n  used: boolean;\n}\n\nexport interface MintResult {\n  token: string;\n  expiresAt: number;\n  expiresInSeconds: number;\n}\n\nexport interface ConsumeOk {\n  ok: true;\n}\n\nexport interface ConsumeErr {\n  ok: false;\n  reason: \"unknown\" | \"expired\" | \"used\";\n}\n\nexport type ConsumeResult = ConsumeOk | ConsumeErr;\n\nconst DEFAULT_TTL_SECONDS = 180;\nconst SWEEP_INTERVAL_MS = 60_000;\n\nexport class PairTokenStore {\n  private current: PairTokenRecord | null = null;\n  private readonly ttlMs: number;\n  private sweepTimer: ReturnType<typeof setInterval> | null = null;\n\n  constructor(opts: { ttlSeconds?: number; autoSweep?: boolean } = {}) {\n    this.ttlMs = (opts.ttlSeconds ?? DEFAULT_TTL_SECONDS) * 1000;\n    if (opts.autoSweep !== false) {\n      this.sweepTimer = setInterval(() => this.sweep(), SWEEP_INTERVAL_MS);\n      this.sweepTimer.unref?.();\n    }\n  }\n\n  mint(): MintResult {\n    const token = `pt_${randomBytes(16).toString(\"hex\")}`;\n    const expiresAt = Date.now() + this.ttlMs;\n    this.current = { token, expiresAt, used: false };\n    return {\n      token,\n      expiresAt,\n      expiresInSeconds: Math.floor(this.ttlMs / 1000),\n    };\n  }\n\n  consume(token: string): ConsumeResult {\n    const record = this.current;\n    if (!record || record.token !== token) return { ok: false, reason: \"unknown\" };\n    if (Date.now() > record.expiresAt) {\n      this.current = null;\n      return { ok: false, reason: \"expired\" };\n    }\n    if (record.used) return { ok: false, reason: \"used\" };\n    record.used = true;\n    return { ok: true };\n  }\n\n  peek(): PairTokenRecord | null {\n    return this.current;\n  }\n\n  clear(): void {\n    this.current = null;\n  }\n\n  sweep(): void {\n    if (this.current && Date.now() > this.current.expiresAt) {\n      this.current = null;\n    }\n  }\n\n  dispose(): void {\n    if (this.sweepTimer) clearInterval(this.sweepTimer);\n    this.sweepTimer = null;\n    this.current = null;\n  }\n}\n","import { execFile } from \"child_process\";\nimport { platform } from \"os\";\nimport { basename, dirname } from \"path\";\nimport { isWindows } from \"./platform\";\nimport type { DiscoveredProcess } from \"./types\";\n\nexport async function discoverClaudeProcesses(): Promise<DiscoveredProcess[]> {\n  if (platform() === \"win32\") return discoverWindows();\n  return discoverUnix();\n}\n\nasync function discoverUnix(): Promise<DiscoveredProcess[]> {\n  const pids = await getPidsUnix();\n\n  const results = await Promise.all(\n    pids.map(async (pid) => {\n      try {\n        const [cwd, args, startedAt] = await Promise.all([\n          getProcessCwdUnix(pid),\n          getProcessArgsUnix(pid),\n          getProcessStartTimeUnix(pid),\n        ]);\n        const conversationId = extractResumeId(args);\n\n        return {\n          pid,\n          projectPath: cwd,\n          projectName: basename(cwd),\n          branch: await readGitBranch(cwd),\n          conversationId,\n          startedAt,\n        } satisfies DiscoveredProcess;\n      } catch {\n        return null;\n      }\n    }),\n  );\n\n  return results.filter((r): r is DiscoveredProcess => r !== null);\n}\n\nasync function discoverWindows(): Promise<DiscoveredProcess[]> {\n  const pids = await getPidsWindows();\n\n  const results = await Promise.all(\n    pids.map(async (pid) => {\n      try {\n        const info = await getProcessInfoWindows(pid);\n        if (!info) return null;\n\n        return {\n          pid,\n          projectPath: info.cwd,\n          projectName: basename(info.cwd),\n          branch: await readGitBranch(info.cwd),\n          conversationId: extractResumeId(info.args),\n          startedAt: info.startedAt,\n        } satisfies DiscoveredProcess;\n      } catch {\n        return null;\n      }\n    }),\n  );\n\n  return results.filter((r): r is DiscoveredProcess => r !== null);\n}\n\n// ─── Unix Helpers ──────────────────────────────────────────────────\n\nfunction run(\n  cmd: string,\n  args: string[],\n  opts: { cwd?: string; timeout?: number } = {},\n): Promise<string> {\n  return new Promise((resolve, reject) => {\n    execFile(\n      cmd,\n      args,\n      { windowsHide: isWindows, encoding: \"utf-8\", timeout: opts.timeout ?? 5000, cwd: opts.cwd },\n      (err, stdout) => {\n        if (err) reject(err);\n        else resolve(stdout as string);\n      },\n    );\n  });\n}\n\nasync function getPidsUnix(): Promise<number[]> {\n  try {\n    const output = await run(\"pgrep\", [\"-x\", \"claude\"]);\n    return output\n      .trim()\n      .split(\"\\n\")\n      .filter(Boolean)\n      .map((s) => Number.parseInt(s, 10));\n  } catch {\n    return [];\n  }\n}\n\nasync function getProcessCwdUnix(pid: number): Promise<string> {\n  const output = await run(\"lsof\", [\"-p\", String(pid), \"-a\", \"-d\", \"cwd\", \"-Fn\"]);\n  const match = output.match(/n(.+)/);\n  return match?.[1] ?? \"\";\n}\n\nasync function getProcessArgsUnix(pid: number): Promise<string> {\n  return (await run(\"ps\", [\"-p\", String(pid), \"-o\", \"args=\"])).trim();\n}\n\nasync function getProcessStartTimeUnix(pid: number): Promise<Date> {\n  const raw = (await run(\"ps\", [\"-p\", String(pid), \"-o\", \"lstart=\"])).trim();\n  const d = new Date(raw);\n  return Number.isNaN(d.getTime()) ? new Date() : d;\n}\n\n// ─── Windows Helpers ───────────────────────────────────────────────\n\nasync function getPidsWindows(): Promise<number[]> {\n  try {\n    const output = await run(\"tasklist\", [\"/FI\", \"IMAGENAME eq claude.exe\", \"/FO\", \"CSV\", \"/NH\"]);\n    return output\n      .trim()\n      .split(\"\\n\")\n      .filter(Boolean)\n      .map((line) => {\n        const parts = line.split(\",\");\n        return Number.parseInt(parts[1]?.replace(/\"/g, \"\") ?? \"0\", 10);\n      })\n      .filter((pid) => pid > 0);\n  } catch {\n    return [];\n  }\n}\n\nasync function getProcessInfoWindows(\n  pid: number,\n): Promise<{ cwd: string; args: string; startedAt: Date } | null> {\n  try {\n    const output = await run(\"wmic\", [\n      \"process\",\n      \"where\",\n      `ProcessId=${pid}`,\n      \"get\",\n      \"CommandLine,CreationDate,ExecutablePath\",\n      \"/FORMAT:CSV\",\n    ]);\n    // wmic uses CRLF; split on \\r?\\n so the blank separator line becomes \"\" and is filtered out.\n    const lines = output\n      .trim()\n      .split(/\\r?\\n/)\n      .filter((l) => l.trim().length > 0);\n    if (lines.length < 2) return null;\n\n    const parts = lines[1].split(\",\");\n    const args = parts[1] ?? \"\";\n    const creationDate = parts[2] ?? \"\";\n\n    // WMIC CreationDate format: 20260418153000.000000+000\n    const year = creationDate.slice(0, 4);\n    const month = creationDate.slice(4, 6);\n    const day = creationDate.slice(6, 8);\n    const hour = creationDate.slice(8, 10);\n    const min = creationDate.slice(10, 12);\n    const sec = creationDate.slice(12, 14);\n    const startedAt = new Date(`${year}-${month}-${day}T${hour}:${min}:${sec}`);\n    if (Number.isNaN(startedAt.getTime())) return null;\n\n    // CWD is not directly available via wmic; use the executable path's parent directory as fallback\n    const exePath = parts[3] ?? \"\";\n    const cwd = exePath ? dirname(exePath) : \"\";\n\n    return { cwd, args, startedAt };\n  } catch {\n    return null;\n  }\n}\n\n// ─── Shared Helpers ────────────────────────────────────────────────\n\nfunction extractResumeId(args: string): string | null {\n  const match = args.match(/--resume\\s+(\\S+)/);\n  return match?.[1] ?? null;\n}\n\nasync function readGitBranch(dir: string): Promise<string> {\n  try {\n    return (\n      await run(\"git\", [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"], { cwd: dir, timeout: 3000 })\n    ).trim();\n  } catch {\n    return \"\";\n  }\n}\n","import { execFileSync } from \"child_process\";\nimport { existsSync } from \"fs\";\nimport { homedir, platform } from \"os\";\nimport { join } from \"path\";\n\nexport const isWindows = platform() === \"win32\";\n\n// ─── Claude executable resolution ─────────────────────────────────────────────\n// On Windows, Task Scheduler strips PATH to bare system directories, so\n// `claude` alone will not resolve. We try where.exe first, then fall back to\n// well-known install locations before giving up and returning the bare name.\n//\n// On macOS, launchd inherits PATH=/usr/bin:/bin:/usr/sbin:/sbin by default,\n// which excludes both Homebrew prefixes. Without an explicit fallback,\n// node-pty's execvp(\"claude\", …) fails with ENOENT and every session\n// dies in milliseconds — see docs/troubleshooting.md. The plist's\n// EnvironmentVariables block is the primary fix; this is defense in depth.\n\nlet _claudeExe: string | undefined;\n\nexport function resolveClaudeExe(): string {\n  if (_claudeExe !== undefined) return _claudeExe;\n\n  if (isWindows) {\n    try {\n      const found = execFileSync(\"where.exe\", [\"claude\"], {\n        encoding: \"utf-8\",\n        windowsHide: true,\n        timeout: 3000,\n      })\n        .trim()\n        .split(\"\\n\")[0]\n        .trim();\n      if (found) {\n        _claudeExe = found;\n        return _claudeExe;\n      }\n    } catch {}\n\n    const candidates = [\n      join(homedir(), \".local\", \"bin\", \"claude.exe\"),\n      join(\n        process.env.LOCALAPPDATA ?? join(homedir(), \"AppData\", \"Local\"),\n        \"Microsoft\",\n        \"WindowsApps\",\n        \"claude.exe\",\n      ),\n    ];\n    for (const p of candidates) {\n      if (existsSync(p)) {\n        _claudeExe = p;\n        return _claudeExe;\n      }\n    }\n  } else {\n    try {\n      const found = execFileSync(\"/usr/bin/which\", [\"claude\"], {\n        encoding: \"utf-8\",\n        timeout: 3000,\n      })\n        .trim()\n        .split(\"\\n\")[0]\n        .trim();\n      if (found && existsSync(found)) {\n        _claudeExe = found;\n        return _claudeExe;\n      }\n    } catch {}\n\n    const candidates = [\n      \"/opt/homebrew/bin/claude\",\n      \"/usr/local/bin/claude\",\n      join(homedir(), \".local\", \"bin\", \"claude\"),\n    ];\n    for (const p of candidates) {\n      if (existsSync(p)) {\n        _claudeExe = p;\n        return _claudeExe;\n      }\n    }\n  }\n\n  _claudeExe = \"claude\";\n  return _claudeExe;\n}\n\n// ─── execHidden ────────────────────────────────────────────────────────────────\n// Thin wrapper around execFileSync that adds windowsHide: true on Windows so\n// spawned child processes (where.exe, tasklist, wmic, pgrep, git …) don't\n// flash a console window.\n\ntype SyncOptions = Parameters<typeof execFileSync>[2];\n\nexport function execHidden(\n  file: string,\n  args: string[],\n  opts?: SyncOptions & { encoding: \"utf-8\" },\n): string {\n  return execFileSync(file, args, {\n    windowsHide: isWindows,\n    ...opts,\n  }) as string;\n}\n","import { Terminal } from \"@xterm/headless\";\nimport { randomUUID } from \"crypto\";\nimport { existsSync } from \"fs\";\nimport { basename } from \"path\";\nimport { getLogger, type Logger } from \"./logger\";\nimport { resolveClaudeExe } from \"./platform\";\nimport { hasPermissionOsc, scrapePermissionGate } from \"./services/questions/detectPermissionGate\";\nimport {\n  detectQuestionFromScreen,\n  questionContentKey,\n} from \"./services/questions/detectQuestionFromScreen\";\nimport { detectShellPrompt } from \"./services/questions/detectShellPrompt\";\nimport type {\n  ManagedSession,\n  PTYManagerOptions,\n  StartFreshSessionOptions,\n  StartSessionOptions,\n} from \"./types\";\n\nconst OUTPUT_BUFFER_MAX = 65536;\n\n// PTY geometry. The headless render terminal (session.screen) MUST match these\n// so Claude's absolute cursor moves (ESC[<row>;<col>H) resolve to the same\n// screen coordinates the real TUI is painting against.\nconst PTY_COLS = 120;\nconst PTY_ROWS = 40;\n// Scrollback depth for the render terminal. Replay reads up to maxLines (200)\n// from the rendered buffer, so keep enough history above the viewport.\nconst SCREEN_SCROLLBACK = 1000;\n\n// Markers that indicate Claude has reached an interactive prompt and is ready\n// for user input. The TUI has at least two startup variants:\n//   - \"Tips\" banner: renders a box with corner ╭ characters\n//   - Connector/MCP-status splash: no box at all; shows ❯ as the prompt arrow\n// We treat either marker in a chunk as \"ready\". False-positives are harmless —\n// the worst case is flushing queued input slightly early, which Claude buffers.\nconst CLAUDE_PROMPT_MARKERS = [\"╭\", \"❯\"] as const;\n\n// If a fresh session has produced any output but neither prompt marker has\n// fired within this window, flush queued input anyway. Defense against future\n// TUI changes that drop both markers from the boot screen.\nconst PROMPT_MARKER_FALLBACK_MS = 10_000;\n\n// Build the two byte sequences for a paste-then-submit. We deliberately split\n// the paste body and the trailing \\r into two separate PTY writes (see\n// writeSubmit() below) so Claude's TUI gets one event-loop tick to process the\n// paste (clear input buffer, render `Pasting…`) before Enter arrives.\n//\n// Why bracketed paste at all: Claude's TUI enables bracketed paste mode\n// (\\x1b[?2004h) at startup. Content between \\x1b[200~ and \\x1b[201~ is\n// committed as a single insertion without triggering autocomplete or key\n// bindings. Without this wrap an input like \"@<path>\" opens the mention\n// picker and the trailing \\r gets consumed as \"accept completion\" rather\n// than \"submit\" — see docs/postmortems/2026-05-20-pty-bracketed-paste-fix.md.\n//\n// Why split paste and \\r: on 2026-05-27 a follow-up stuck session\n// (39118d3e) showed the bracketed-paste wrap was being written but the\n// trailing \\r still didn't submit — Claude's TUI was mid-render of a\n// startup status banner (\"Update available\", \"192 skill descriptions\n// dropped\", etc.) when the bytes arrived, and the whole chunk landed in\n// the wrong handler context. Splitting the write lets the TUI ingest the\n// paste in one tick (the data event runs after current render finishes)\n// before the next tick delivers the Enter.\nfunction buildPasteBytes(input: string): string {\n  return `\\x1b[200~${input}\\x1b[201~`;\n}\n\nconst SUBMIT_BYTES = \"\\r\";\n\n// Delay between the paste write and the submit \\r. We need to yield the event\n// loop at least once so Claude's TUI processes the paste before Enter lands;\n// a small real-time delay is more robust against the TUI batching renders\n// across multiple data events. Kept tiny so user-perceived latency is nil.\nconst SUBMIT_DELAY_MS = 16;\n\nfunction digestBytes(s: string): string {\n  // Replace control chars with their hex form so logs are grep-able.\n  // Building the regex via RegExp() sidesteps a Biome lint rule that flags\n  // literal control characters in regex literals.\n  const escaped = s\n    .replace(new RegExp(String.fromCharCode(0x1b), \"g\"), \"\\\\x1b\")\n    .replace(/\\r/g, \"\\\\r\")\n    .replace(/\\n/g, \"\\\\n\")\n    .replace(/\\t/g, \"\\\\t\");\n  if (escaped.length <= 200) return escaped;\n  return `${escaped.slice(0, 100)}…[${escaped.length - 200}B omitted]…${escaped.slice(-100)}`;\n}\n\n// node-pty is a native addon — import dynamically to allow graceful failure\nlet pty: typeof import(\"node-pty\") | null = null;\n\nasync function loadPty(): Promise<typeof import(\"node-pty\")> {\n  if (pty) return pty;\n  try {\n    pty = await import(\"node-pty\");\n    return pty;\n  } catch (err) {\n    throw new Error(\n      \"node-pty is required for PTY management but failed to load. \" +\n        \"Ensure it is installed: npm install node-pty\\n\" +\n        `Original error: ${err}`,\n    );\n  }\n}\n\ninterface InternalSession extends ManagedSession {\n  process: any; // node-pty IPty\n  outputBuffer: Buffer;\n  // Headless terminal that renders the raw PTY stream into a real screen grid.\n  // getOutputLines() reads its rendered buffer so replay reflects true screen\n  // order rather than raw byte order (which Claude's absolute-cursor repaints\n  // scramble — see getOutputLines for the desync this fixes).\n  screen: Terminal;\n}\n\nfunction createScreen(): Terminal {\n  return new Terminal({\n    cols: PTY_COLS,\n    rows: PTY_ROWS,\n    scrollback: SCREEN_SCROLLBACK,\n    allowProposedApi: true,\n  });\n}\n\n// Build the environment for a spawned `claude` process. The Anthropic API key\n// is injected only here — never exported into the streamer's global process\n// env — so it does not leak into unrelated child processes. CLAUDE_API_KEY\n// (the Fly secret) is mapped to ANTHROPIC_MODEL's sibling, ANTHROPIC_API_KEY,\n// which the CLI reads. If CLAUDE_API_KEY is unset, nothing is added and the CLI\n// falls back to its own auth (e.g. an interactive login).\nfunction buildSpawnEnv(): Record<string, string> {\n  const env = { ...process.env } as Record<string, string>;\n  if (env.CLAUDE_API_KEY) {\n    env.ANTHROPIC_API_KEY = env.CLAUDE_API_KEY;\n  }\n  return env;\n}\n\nexport class PTYManager {\n  private sessions = new Map<string, InternalSession>();\n  private onOutput: PTYManagerOptions[\"onOutput\"];\n  private onStatusChange: PTYManagerOptions[\"onStatusChange\"];\n  private onReady: PTYManagerOptions[\"onReady\"];\n  private onPermissionChange: PTYManagerOptions[\"onPermissionChange\"];\n  private onLiveQuestion: PTYManagerOptions[\"onLiveQuestion\"];\n  private onLiveQuestionGone: PTYManagerOptions[\"onLiveQuestionGone\"];\n  // Per-session permission-gate state. True between an OSC 777 (gate open) and\n  // the next prompt-ready without a fresh 777 (gate closed). Prevents\n  // re-broadcasting open/close on every chunk.\n  private permissionOpen = new Set<string>();\n  // Content key of the last AskUserQuestion broadcast from the rendered screen,\n  // per session — de-dupes the same menu firing on consecutive repaints.\n  private lastScreenQuestionKey = new Map<string, string>();\n  // Content key of the last unstructured shell prompt (detectShellPrompt)\n  // broadcast per session — present between open and resolve so we can clear it\n  // on a prompt-ready/marker return and de-dupe consecutive repaints. Modelled\n  // on permissionOpen but keyed by content (a shell prompt has no OSC trigger).\n  private shellPromptOpen = new Map<string, string>();\n  // Tracks sessions (both fresh and resume) whose PTY has spawned but Claude\n  // hasn't yet reached an interactive prompt — i.e. onReady hasn't fired.\n  private pendingReady = new Set<string>();\n  // Inputs received via sendInput() while the session was still in pendingReady.\n  // Flushed in arrival order once Claude reaches its first prompt. Without this,\n  // input written into the raw PTY mid-boot is consumed by Claude's startup TUI\n  // (welcome banner / first-run modals on fresh, JSONL restore on resume) and\n  // silently lost — the \"dot bug\".\n  private queuedInputs = new Map<string, string[]>();\n  private log: Logger;\n  // Timestamp of first PTY chunk per session; drives the prompt-marker fallback\n  // when neither ╭ nor ❯ shows up within PROMPT_MARKER_FALLBACK_MS.\n  private firstChunkAt = new Map<string, number>();\n  // Per-session chunk counter and last-chunk timestamp. Diagnostic-only,\n  // feeds the [pty.chunk] log lines so we can trace whether Claude responded\n  // to a given input or fell silent. Reset on dispose().\n  private chunkIndex = new Map<string, number>();\n  private lastChunkAt = new Map<string, number>();\n\n  constructor(options: PTYManagerOptions = {}) {\n    this.onOutput = options.onOutput;\n    this.onStatusChange = options.onStatusChange;\n    this.onReady = options.onReady;\n    this.onPermissionChange = options.onPermissionChange;\n    this.onLiveQuestion = options.onLiveQuestion;\n    this.onLiveQuestionGone = options.onLiveQuestionGone;\n    this.log = options.logger ?? getLogger(\"pty\");\n  }\n\n  // Resume an existing Claude conversation. sessionId is the JSONL UUID.\n  //\n  // We use `--permission-mode acceptEdits` rather than `--dangerously-skip-permissions`.\n  // Both suppress file-edit prompts, but in an interactive (TUI) launch the\n  // skip-permissions flag renders a blocking \"Bypass Permissions mode\" warning\n  // menu on every boot that no known ~/.claude.json flag suppressed (as of\n  // Claude CLI v2.1.x) — the session never reaches a usable prompt, so the\n  // mobile app shows an empty/stuck screen. `acceptEdits` auto-approves file edits\n  // without that warning gate, while still prompting for shell commands.\n  // (The other first-run gates — onboarding/theme, workspace trust,\n  // custom-API-key — are cleared by the seeded ~/.claude.json in\n  // docker/entrypoint.sh.) startFresh() uses the same flag for the same reason.\n  async start(sessionId: string, options: StartSessionOptions): Promise<ManagedSession> {\n    const nodePty = await loadPty();\n    const projectName = options.projectName ?? basename(options.projectPath);\n\n    const proc = nodePty.spawn(\n      resolveClaudeExe(),\n      [\n        \"--permission-mode\",\n        \"acceptEdits\",\n        \"--settings\",\n        '{\"spinnerTipsEnabled\":false}',\n        \"--resume\",\n        sessionId,\n      ],\n      {\n        name: \"xterm-256color\",\n        cols: 120,\n        rows: 40,\n        cwd: options.projectPath,\n        env: buildSpawnEnv(),\n      },\n    );\n\n    const session: InternalSession = {\n      id: sessionId,\n      projectPath: options.projectPath,\n      projectName,\n      branch: options.branch ?? \"\",\n      status: \"running\",\n      startedAt: new Date(),\n      completedAt: null,\n      promptCount: 0,\n      lastOutput: \"\",\n      process: proc,\n      outputBuffer: Buffer.alloc(0),\n      screen: createScreen(),\n    };\n\n    this.sessions.set(sessionId, session);\n    // Resume re-uses the same boot path as a fresh launch: --resume replays the\n    // JSONL into Claude's TUI, which can take several seconds before the prompt\n    // is reachable. Until then, raw pty.write() bytes land in the boot UI and\n    // are swallowed (the \"dot bug\" — first message vanishes, second message\n    // appears to trigger both). Same pendingReady + flush gating as startFresh.\n    this.pendingReady.add(sessionId);\n\n    proc.onData((data: string) => {\n      this.handleOutput(sessionId, data);\n    });\n\n    proc.onExit(({ exitCode }: { exitCode: number }) => {\n      this.pendingReady.delete(sessionId);\n      this.handleExit(sessionId, exitCode);\n    });\n\n    return toPublicSession(session);\n  }\n\n  // Start a brand-new Claude session. A stable UUID is generated here and passed\n  // to Claude via --session-id so the JSONL filename matches from the start.\n  // onReady fires once Claude reaches its first prompt (waiting_input).\n  async startFresh(options: StartFreshSessionOptions): Promise<ManagedSession> {\n    const nodePty = await loadPty();\n    const sessionId = randomUUID();\n    const projectName = options.projectName ?? basename(options.projectPath);\n\n    // `--permission-mode acceptEdits` for the same reason as start() above — do not\n    // swap back to --dangerously-skip-permissions (TUI warning gate). Guarded by\n    // __tests__/pty-ready-detection.test.ts.\n    const args = [\n      \"--permission-mode\",\n      \"acceptEdits\",\n      \"--settings\",\n      '{\"spinnerTipsEnabled\":false}',\n      \"--session-id\",\n      sessionId,\n    ];\n    if (options.systemPrompt) {\n      args.push(\"--system-prompt\", options.systemPrompt);\n    }\n\n    const proc = nodePty.spawn(resolveClaudeExe(), args, {\n      name: \"xterm-256color\",\n      cols: 120,\n      rows: 40,\n      cwd: options.projectPath,\n      env: buildSpawnEnv(),\n    });\n\n    const session: InternalSession = {\n      id: sessionId,\n      projectPath: options.projectPath,\n      projectName,\n      branch: \"\",\n      status: \"running\",\n      startedAt: new Date(),\n      completedAt: null,\n      promptCount: 0,\n      lastOutput: \"\",\n      process: proc,\n      outputBuffer: Buffer.alloc(0),\n      screen: createScreen(),\n    };\n\n    this.sessions.set(sessionId, session);\n    this.pendingReady.add(sessionId);\n\n    proc.onData((data: string) => {\n      this.handleOutput(sessionId, data);\n    });\n\n    proc.onExit(({ exitCode }: { exitCode: number }) => {\n      this.pendingReady.delete(sessionId);\n      this.handleExit(sessionId, exitCode);\n    });\n\n    return toPublicSession(session);\n  }\n\n  // Write raw key bytes directly to the PTY without bracketed-paste wrapping.\n  // Use for control sequences (arrow keys, Enter) that must not be quoted.\n  sendKeys(sessionId: string, keys: string): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    if (session.status === \"idle\") {\n      throw new Error(`Session is idle (no active PTY): ${sessionId}`);\n    }\n    if (session.status === \"waiting_input\") {\n      session.status = \"running\";\n      this.onStatusChange?.(toPublicSession(session));\n    }\n    this.log.info(\n      `[pty.keys.write] ${sessionId.slice(0, 8)} bytes=${keys.length} digest=${digestBytes(keys)}`,\n      { event: \"pty.keys_write\", sessionId, byteLen: keys.length },\n    );\n    session.process.write(keys);\n    session.lastActivityAt = new Date();\n  }\n\n  sendInput(sessionId: string, input: string): number {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    if (session.status === \"idle\") {\n      throw new Error(`Session is idle (no active PTY): ${sessionId}`);\n    }\n    // Claude is still booting (TUI not yet at first prompt). Writing into the\n    // raw PTY now would let the startup UI swallow the keystrokes. Queue and\n    // flush in flushQueuedInputs() once the prompt marker fires.\n    if (this.pendingReady.has(sessionId)) {\n      const queue = this.queuedInputs.get(sessionId) ?? [];\n      queue.push(input);\n      this.queuedInputs.set(sessionId, queue);\n      session.lastActivityAt = new Date();\n      session.promptCount++;\n      // Surface that input is being held because Claude hasn't yet emitted a\n      // prompt marker. If you see this without a corresponding pty.ready\n      // follow-up, the marker detection has regressed.\n      this.log.warn(\n        `[pty.input.queued] ${sessionId.slice(0, 8)} promptCount=${session.promptCount} queueLen=${queue.length}`,\n        {\n          event: \"pty.input_queued\",\n          sessionId,\n          promptCount: session.promptCount,\n          queueLen: queue.length,\n          inputLen: input.length,\n        },\n      );\n      return session.promptCount;\n    }\n    if (session.status === \"waiting_input\") {\n      session.status = \"running\";\n      this.onStatusChange?.(toPublicSession(session));\n    }\n    this.writeSubmit(sessionId, session, input, \"direct\", session.promptCount + 1);\n    session.lastActivityAt = new Date();\n    session.promptCount++;\n    return session.promptCount;\n  }\n\n  // Two-step paste-then-submit. Writes the bracketed-paste body, yields the\n  // event loop for SUBMIT_DELAY_MS, then writes \\r. See buildPasteBytes() for\n  // why the split matters.\n  private writeSubmit(\n    sessionId: string,\n    session: InternalSession,\n    input: string,\n    path: \"direct\" | \"flush\",\n    promptCount: number,\n  ): void {\n    const pasteBytes = buildPasteBytes(input);\n    this.log.info(\n      `[pty.input.write] ${sessionId.slice(0, 8)} promptCount=${promptCount} bytes=${pasteBytes.length} digest=${digestBytes(pasteBytes)}`,\n      {\n        event: \"pty.input_write\",\n        sessionId,\n        promptCount,\n        byteLen: pasteBytes.length,\n        digest: digestBytes(pasteBytes),\n        path,\n        phase: \"paste\",\n      },\n    );\n    session.process.write(pasteBytes);\n    setTimeout(() => {\n      const current = this.sessions.get(sessionId);\n      if (!current || current !== session) return;\n      this.log.info(\n        `[pty.input.submit] ${sessionId.slice(0, 8)} promptCount=${promptCount} digest=\\\\r`,\n        {\n          event: \"pty.input_write\",\n          sessionId,\n          promptCount,\n          byteLen: SUBMIT_BYTES.length,\n          digest: \"\\\\r\",\n          path,\n          phase: \"submit\",\n        },\n      );\n      current.process.write(SUBMIT_BYTES);\n    }, SUBMIT_DELAY_MS);\n  }\n\n  // Drain any inputs that were sent while the session was still pendingReady,\n  // writing them in arrival order now that Claude is at its prompt.\n  private flushQueuedInputs(sessionId: string): void {\n    const queue = this.queuedInputs.get(sessionId);\n    if (!queue || queue.length === 0) return;\n    this.queuedInputs.delete(sessionId);\n    const session = this.sessions.get(sessionId);\n    if (!session) return;\n    this.log.info(`[pty.flush] ${sessionId.slice(0, 8)} flushing ${queue.length} queued input(s)`, {\n      event: \"pty.flush_queued\",\n      sessionId,\n      queueLen: queue.length,\n    });\n    // Chain queued inputs serially: each writeSubmit() defers its \\r by\n    // SUBMIT_DELAY_MS, and we further stagger subsequent inputs by 2x the\n    // delay so paste/submit pairs don't interleave on the wire. Two queued\n    // inputs is rare in practice (user tapped Send twice during the brief\n    // boot window), but ordering must still produce two distinct submits.\n    queue.forEach((input, i) => {\n      const writeAt = i * SUBMIT_DELAY_MS * 2;\n      if (writeAt === 0) {\n        this.writeSubmit(sessionId, session, input, \"flush\", session.promptCount);\n      } else {\n        setTimeout(() => {\n          const current = this.sessions.get(sessionId);\n          if (!current || current !== session) return;\n          this.writeSubmit(sessionId, session, input, \"flush\", session.promptCount);\n        }, writeAt);\n      }\n    });\n  }\n\n  cancel(sessionId: string): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    session.process.kill(\"SIGINT\");\n  }\n\n  killPid(pid: number): void {\n    try {\n      process.kill(pid, \"SIGTERM\");\n    } catch {\n      // Process may already be gone\n    }\n  }\n\n  // Kill the PTY and mark the session idle. Called by the WS grace timer.\n  putOnHold(sessionId: string): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) return;\n    this.pendingReady.delete(sessionId);\n    this.queuedInputs.delete(sessionId);\n    this.firstChunkAt.delete(sessionId);\n    this.permissionOpen.delete(sessionId);\n    this.lastScreenQuestionKey.delete(sessionId);\n    this.shellPromptOpen.delete(sessionId);\n    try {\n      session.process.kill(\"SIGINT\");\n    } catch {\n      // already dead\n    }\n    session.status = \"idle\";\n    session.completedAt = new Date();\n    session.screen.dispose();\n    this.sessions.delete(sessionId);\n    this.onStatusChange?.(toPublicSession(session));\n  }\n\n  getOutput(sessionId: string): string {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    return session.outputBuffer.toString(\"utf-8\");\n  }\n\n  // Render the last `maxLines` rows of the session's screen in true on-screen\n  // order. Reads the headless terminal (fed raw PTY bytes in handleOutput) so\n  // Claude's absolute-cursor repaints resolve to where they actually paint —\n  // unlike the old raw-byte slice, which scrambled order after a TUI repaint\n  // and made replayed conversations appear out of order on resume.\n  //\n  // Async because xterm parses writes on a deferred tick; we flush pending\n  // writes (empty write + callback) before reading so the buffer is current.\n  async getOutputLines(sessionId: string, maxLines: number): Promise<string[]> {\n    const session = this.sessions.get(sessionId);\n    if (!session) throw new Error(`Session not found: ${sessionId}`);\n    await new Promise<void>((resolve) => session.screen.write(\"\", () => resolve()));\n\n    const buf = session.screen.buffer.active;\n    const lines: string[] = [];\n    // buf.length spans scrollback + viewport; iterate the whole thing top-down\n    // so the rendered output preserves screen order, then keep the last N.\n    for (let y = 0; y < buf.length; y++) {\n      lines.push(buf.getLine(y)?.translateToString(true) ?? \"\");\n    }\n    // Drop trailing blank rows (the unused bottom of the viewport) before\n    // trimming to maxLines, so replay isn't padded with empty lines.\n    while (lines.length > 0 && lines[lines.length - 1] === \"\") {\n      lines.pop();\n    }\n    return lines.slice(-maxLines);\n  }\n\n  getSession(sessionId: string): ManagedSession | null {\n    const session = this.sessions.get(sessionId);\n    return session ? toPublicSession(session) : null;\n  }\n\n  hasSession(sessionId: string): boolean {\n    return this.sessions.has(sessionId);\n  }\n\n  listSessions(): ManagedSession[] {\n    return Array.from(this.sessions.values()).map(toPublicSession);\n  }\n\n  dispose(): void {\n    for (const session of this.sessions.values()) {\n      try {\n        session.process.kill();\n      } catch {\n        // Process may already be dead\n      }\n      session.screen.dispose();\n    }\n    this.sessions.clear();\n    this.firstChunkAt.clear();\n    this.chunkIndex.clear();\n    this.lastChunkAt.clear();\n    this.permissionOpen.clear();\n    this.lastScreenQuestionKey.clear();\n    this.shellPromptOpen.clear();\n  }\n\n  private handleOutput(sessionId: string, data: string): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) return;\n\n    const chunk = Buffer.from(data, \"utf-8\");\n    const now = Date.now();\n    if (!this.firstChunkAt.has(sessionId)) {\n      this.firstChunkAt.set(sessionId, now);\n    }\n\n    // Per-chunk diagnostic log. Keep until the @<path> submit bug is solved.\n    const idx = (this.chunkIndex.get(sessionId) ?? 0) + 1;\n    this.chunkIndex.set(sessionId, idx);\n    const last = this.lastChunkAt.get(sessionId);\n    this.lastChunkAt.set(sessionId, now);\n    const gapMs = last == null ? 0 : now - last;\n    this.log.info(\n      `[pty.chunk] ${sessionId.slice(0, 8)} #${idx} +${chunk.length}B gap=${gapMs}ms status=${session.status} digest=${digestBytes(data)}`,\n      {\n        event: \"pty.chunk\",\n        sessionId,\n        chunkIndex: idx,\n        chunkBytes: chunk.length,\n        gapMs,\n        status: session.status,\n        pendingReady: this.pendingReady.has(sessionId),\n        digest: digestBytes(data),\n      },\n    );\n\n    session.outputBuffer = Buffer.concat([session.outputBuffer, chunk]);\n\n    if (session.outputBuffer.length > OUTPUT_BUFFER_MAX) {\n      session.outputBuffer = session.outputBuffer.subarray(\n        session.outputBuffer.length - OUTPUT_BUFFER_MAX,\n      );\n    }\n\n    // Render into the headless screen so getOutputLines() can reproduce true\n    // on-screen order. write() is async (parsed on a later tick) but we never\n    // read the screen synchronously after a single chunk — replay only happens\n    // on subscribe, long after these writes have drained.\n    session.screen.write(data);\n\n    const stripped = stripAnsi(data);\n    session.lastOutput = stripped;\n    const matchedMarker = CLAUDE_PROMPT_MARKERS.find((m) => stripped.includes(m));\n\n    if (session.status === \"running\" && matchedMarker) {\n      this.markReady(sessionId, session, `marker:${matchedMarker}`);\n    } else if (\n      session.status === \"running\" &&\n      this.pendingReady.has(sessionId) &&\n      now - (this.firstChunkAt.get(sessionId) ?? now) >= PROMPT_MARKER_FALLBACK_MS\n    ) {\n      // Fallback: PTY has produced output for >=10s but neither marker fired.\n      // Treat the session as ready so queued input doesn't sit forever.\n      this.markReady(sessionId, session, \"fallback:timeout\");\n    }\n\n    this.onOutput?.(sessionId, data);\n\n    // Live interactive-prompt detection from the PTY stream — fires the moment\n    // a prompt is on screen, independent of (and ahead of) the JSONL flush.\n    // Trigger-gated so we don't scrape the rendered buffer on every chunk:\n    //   - OSC 777 (raw byte signal) → permission gate opened.\n    //   - \"Enter to select\" footer (AskUserQuestion menu) → structured question.\n    //   - prompt-ready marker without a fresh 777 → gate may have closed.\n    this.detectLivePrompts(sessionId, data, stripped).catch((err) => {\n      this.log.warn(\"[pty.prompt_detect] failed\", {\n        event: \"pty.prompt_detect_failed\",\n        sessionId,\n        err,\n      });\n    });\n  }\n\n  // Detect permission gates (OSC 777 + scraped options) and AskUserQuestion\n  // menus from the rendered screen, firing the additive callbacks. Async because\n  // reading the rendered buffer needs the xterm write queue flushed. Pure\n  // detection lives in services/questions/*; this only orchestrates triggers,\n  // per-session debounce, and the callbacks.\n  private async detectLivePrompts(\n    sessionId: string,\n    rawData: string,\n    stripped: string,\n  ): Promise<void> {\n    const session = this.sessions.get(sessionId);\n    if (!session) return;\n\n    const oscPermission = hasPermissionOsc(rawData);\n    // Footer test on the CURRENT chunk — a cheap trigger only. The authoritative\n    // test runs on the full rendered screen below (askFooterOnScreen), because\n    // the OSC-777 notify and the \"Enter to select\" footer often arrive in\n    // SEPARATE chunks: the OSC lands first (no footer yet), so a chunk-only test\n    // misclassifies an AskUserQuestion menu as a permission gate.\n    const hasAskFooter = /Enter to select/i.test(stripped);\n    const hasPromptMarker = CLAUDE_PROMPT_MARKERS.some((m) => stripped.includes(m));\n    // Cheap raw-chunk hint that an UNSTRUCTURED shell prompt may be on screen:\n    // a y/N hint, a \"press enter\"/\"continue?\" tail, or a numbered menu row. Just\n    // a trigger gate (mirrors hasAskFooter) — the real conservative matching is\n    // in detectShellPrompt against the rendered tail. ponytail: substring gate.\n    const hasShellPromptHint =\n      /[[(]\\s*y\\s*\\/\\s*n\\s*[\\])]|press\\s+(enter|return|any key)|\\bcontinue\\b\\s*\\?|^\\s*(?:❯|>)?\\s*\\d+[.)]\\s+\\S/im.test(\n        stripped,\n      );\n\n    // Nothing to do unless a trigger fired or a prompt we already broadcast is\n    // open (so we can detect its close on the next prompt-ready).\n    if (\n      !oscPermission &&\n      !hasAskFooter &&\n      !hasShellPromptHint &&\n      !this.permissionOpen.has(sessionId) &&\n      !this.shellPromptOpen.has(sessionId) &&\n      !this.lastScreenQuestionKey.has(sessionId)\n    ) {\n      return;\n    }\n\n    const lines = await this.getOutputLines(sessionId, 60);\n\n    // Authoritative footer test on the FULL rendered screen (not just the\n    // trigger chunk). The \"Enter to select · Tab/Arrow keys to navigate\" footer\n    // is unique to an AskUserQuestion menu; a permission gate uses \"Tab to amend\n    // · ctrl+e to explain\". When this is on screen the prompt IS an\n    // AskUserQuestion — even if an OSC-777 notify also fired — so it must take\n    // priority over the permission path (Claude emits OSC 777 for BOTH).\n    const askFooterOnScreen = lines.some((l) => /Enter to select/i.test(l));\n\n    // Diagnostic: dump the rendered window + detector verdicts when a trigger\n    // fires — the on-device source of truth for prompt detection (e.g. the\n    // multi-question carousel work). At debug level so it's silent under normal\n    // --verbose; enable with LOG_LEVEL=debug.\n    if (oscPermission || hasAskFooter || askFooterOnScreen) {\n      this.log.debug?.(`[pty.prompt_detect] ${sessionId.slice(0, 8)} trigger`, {\n        event: \"pty.prompt_detect\",\n        sessionId,\n        oscPermission,\n        hasAskFooter,\n        askFooterOnScreen,\n        permGate: oscPermission && !askFooterOnScreen ? scrapePermissionGate(lines) : undefined,\n        askQuestion: askFooterOnScreen ? detectQuestionFromScreen(lines) : undefined,\n        renderedTail: lines.slice(-25),\n      });\n    }\n\n    // ── Permission gate ──────────────────────────────────────────────\n    // Skip entirely when the screen is an AskUserQuestion menu — its OSC-777\n    // notify would otherwise be misread as a permission gate.\n    if (oscPermission && !askFooterOnScreen) {\n      const gate = scrapePermissionGate(lines);\n      this.permissionOpen.add(sessionId);\n      // Broadcast even if options aren't painted yet (gate: empty options) so\n      // the client can show \"Claude needs permission\" immediately; a later\n      // repaint with the footer/options re-broadcasts the populated gate.\n      this.onPermissionChange?.(sessionId, gate ?? { options: [] });\n    } else if (this.permissionOpen.has(sessionId) && !askFooterOnScreen) {\n      // Gate was open. If options are still on screen, refresh (cursor moved);\n      // if the prompt is ready again and the options are gone, the gate closed.\n      const gate = scrapePermissionGate(lines);\n      if (gate) {\n        this.onPermissionChange?.(sessionId, gate);\n      } else if (hasPromptMarker) {\n        this.permissionOpen.delete(sessionId);\n        this.onPermissionChange?.(sessionId, null);\n      }\n    }\n\n    // ── AskUserQuestion menu (rendered, ahead of JSONL) ──────────────\n    // The multi-question TUI's final \"Ready to submit your answers?\" screen is\n    // detected and broadcast as a normal card (Submit answers / Cancel) so the\n    // user can tap to confirm — the carousel doesn't reliably auto-submit.\n    // (Roadmap: robust carousel auto-submit.)\n    if (askFooterOnScreen) {\n      const detected = detectQuestionFromScreen(lines);\n      if (detected) {\n        const key = questionContentKey(detected.questions);\n        if (this.lastScreenQuestionKey.get(sessionId) !== key) {\n          this.lastScreenQuestionKey.set(sessionId, key);\n          this.onLiveQuestion?.(sessionId, detected.questions);\n        }\n      }\n    } else if (this.lastScreenQuestionKey.has(sessionId) && hasPromptMarker) {\n      // The menu was open but its footer is gone and Claude's prompt marker is\n      // back — the question was answered (or dismissed). Clear the screen key\n      // and tell the server so the pending question is cancelled; without this\n      // the answered menu lingers and a later repaint can re-broadcast it.\n      this.lastScreenQuestionKey.delete(sessionId);\n      this.onLiveQuestionGone?.(sessionId);\n    }\n\n    // ── Unstructured shell prompt (read -p \"[y/N]\", CLI picker, … ) ───\n    // Last fallback: only when this isn't already a structured permission gate\n    // or AskUserQuestion menu. Reuses the `permission` transport so mobile\n    // renders a QuestionCard with zero new event handling; each option carries\n    // its literal answerKeys (y\\r / n\\r / N\\r) so the client stays dumb.\n    if (!oscPermission && !askFooterOnScreen && !this.permissionOpen.has(sessionId)) {\n      const shell = detectShellPrompt(lines);\n      if (shell) {\n        const key = `${shell.prompt}\u0000${shell.options.map((o) => o.label).join(\"\u0000\")}`;\n        if (this.shellPromptOpen.get(sessionId) !== key) {\n          this.shellPromptOpen.set(sessionId, key);\n          this.onPermissionChange?.(sessionId, {\n            prompt: shell.prompt,\n            options: shell.options,\n          });\n        }\n      } else if (this.shellPromptOpen.has(sessionId) && hasPromptMarker) {\n        // Prompt is gone and Claude's marker is back (input was answered) —\n        // close the card.\n        this.shellPromptOpen.delete(sessionId);\n        this.onPermissionChange?.(sessionId, null);\n      }\n    }\n  }\n\n  // Transition a session from \"running\" to \"waiting_input\", clear pendingReady,\n  // and flush any queued input. Idempotent: callers can invoke at any chunk.\n  private markReady(sessionId: string, session: InternalSession, reason: string): void {\n    session.lastActivityAt = new Date();\n    session.status = \"waiting_input\";\n    // Log retained on purpose: `reason=fallback:timeout` would be the only\n    // signal that Claude's TUI introduced a new boot variant our markers miss.\n    const elapsedMs = Date.now() - (this.firstChunkAt.get(sessionId) ?? Date.now());\n    this.log.info(`[pty.ready] ${sessionId.slice(0, 8)} ${reason} (elapsed=${elapsedMs}ms)`, {\n      event: \"pty.ready\",\n      sessionId,\n      reason,\n      elapsedMs,\n    });\n    this.onStatusChange?.(toPublicSession(session));\n    if (this.pendingReady.has(sessionId)) {\n      this.pendingReady.delete(sessionId);\n      this.flushQueuedInputs(sessionId);\n      this.onReady?.(toPublicSession(session));\n    }\n  }\n\n  private handleExit(sessionId: string, exitCode: number): void {\n    const session = this.sessions.get(sessionId);\n    if (!session) return;\n\n    session.completedAt = new Date();\n    session.status = \"idle\";\n\n    // Instant exit with no output — diagnose the most likely cause.\n    const elapsedMs = session.completedAt.getTime() - session.startedAt.getTime();\n    if (exitCode !== 0 && elapsedMs < 2000 && session.lastOutput === \"\") {\n      if (!existsSync(session.projectPath)) {\n        session.failureReason = `Project directory not found: ${session.projectPath}`;\n      } else {\n        session.failureReason =\n          `Process exited immediately (code ${exitCode}). ` +\n          `Check that the Claude binary is installed and accessible.`;\n      }\n    }\n\n    this.onStatusChange?.(toPublicSession(session));\n    session.screen.dispose();\n    this.sessions.delete(sessionId);\n    this.queuedInputs.delete(sessionId);\n    this.firstChunkAt.delete(sessionId);\n    this.permissionOpen.delete(sessionId);\n    this.lastScreenQuestionKey.delete(sessionId);\n    this.shellPromptOpen.delete(sessionId);\n  }\n}\n\nfunction toPublicSession(s: InternalSession): ManagedSession {\n  return {\n    id: s.id,\n    projectPath: s.projectPath,\n    projectName: s.projectName,\n    branch: s.branch,\n    status: s.status,\n    startedAt: s.startedAt,\n    completedAt: s.completedAt,\n    promptCount: s.promptCount,\n    lastOutput: s.lastOutput,\n    ...(s.failureReason != null && { failureReason: s.failureReason }),\n    ...(s.lastActivityAt != null && { lastActivityAt: s.lastActivityAt }),\n    ...(s.filePath != null && { filePath: s.filePath }),\n  };\n}\n\n// Strip ANSI escape sequences for clean text preview\nfunction stripAnsi(str: string): string {\n  // biome-ignore lint/suspicious/noControlCharactersInRegex: intentional ANSI stripping\n  return str.replace(/\\x1b\\[[0-9;]*[a-zA-Z]/g, \"\").replace(/\\x1b\\][^\\x07]*\\x07/g, \"\");\n}\n","// Permission-gate detection. Two independent signals:\n//\n//   1. OSC 777 escape — the deterministic TRIGGER. The PTY emits\n//      `\\x1b]777;notify;Claude Code;Claude needs your permission\\x07`\n//      (often tmux-wrapped: `\\x1bPtmux;\\x1b\\x1b]777;notify;…\\x1b\\`) the instant\n//      a gate opens. Confirmed in live logs (pty.chunk #53/#193). This tells us\n//      a gate is open; it carries no option text.\n//\n//   2. Rendered option scrape — the gate's numbered options are painted into the\n//      screen grid via absolute-cursor moves, so they live in the rendered\n//      headless buffer (getOutputLines), not the raw byte stream. We read the\n//      ACTUAL leading numbers and the `❯` cursor — the numbers are NOT a stable\n//      1-based index (a gate can show \"2. Yes / 3. No\"), which is exactly the\n//      \"2 didn't take\" bug this avoids.\n\nexport interface PermissionOption {\n  /** The real leading number shown on screen (NOT a 1-based array index). */\n  index: number;\n  label: string;\n  /**\n   * Literal keystroke bytes that answer this option, when the number alone\n   * isn't the answer (e.g. a y/N shell prompt answers \"y\\r\"/\"n\\r\", not \"1\\r\").\n   * Additive: OSC-777 gates omit it and the client answers via `index`; the\n   * unstructured shell-prompt path (detectShellPrompt) populates it.\n   */\n  answerKeys?: string;\n}\n\nexport interface PermissionGate {\n  /** Prompt text above the options, e.g. \"Claude needs your permission to use Bash\". */\n  prompt?: string;\n  options: PermissionOption[];\n  /** Index value (the on-screen number) of the `❯`-highlighted option, if any. */\n  cursor?: number;\n}\n\n// OSC 777 with the notify command from Claude Code. We match the stable core\n// (`]777;notify;Claude Code`) rather than the whole tmux-passthrough wrapper so\n// detection survives both the wrapped and unwrapped forms.\n// biome-ignore lint/suspicious/noControlCharactersInRegex: matching the literal OSC 777 escape\nconst OSC_777_RE = /\\x1b\\]777;notify;Claude Code;[^\\x07\\x1b]*/;\n\n/** True if a raw PTY chunk contains the Claude Code OSC 777 permission notify. */\nexport function hasPermissionOsc(rawData: string): boolean {\n  return OSC_777_RE.test(rawData);\n}\n\n// A rendered option row: optional `❯` cursor, then \"N. label\". Leading spaces\n// from the box/indent are tolerated (the box gutter is stripped first). We\n// capture N and the label separately.\nconst OPTION_RE = /^\\s*(❯)?\\s*(\\d+)\\.\\s+(.+?)\\s*$/;\n\n// Chrome lines that are never the prompt: footers, box-drawing, prompt arrows.\nconst FOOTER_RE = /Enter to select|Esc to cancel|↑|↓|to navigate|to cancel/i;\nconst BOX_ONLY_RE = /^[\\s│─┌┐└┘├┤┬┴┼╭╮╰╯╱╲=_-]+$/;\nconst PROMPT_ARROW_RE = /^[\\s]*[❯›>]\\s*$/;\n\n// Strip leading and trailing box-drawing gutters (\"│ … │\") so a boxed gate\n// frame parses the same as an unboxed one.\nfunction stripGutter(line: string): string {\n  return line.replace(/^\\s*[│|]\\s?/, \"\").replace(/\\s*[│|]\\s*$/, \"\");\n}\n\n/**\n * Scrape the permission gate's options + prompt from rendered screen lines.\n * Returns null when no numbered options are present (not a gate, or not painted\n * yet). Pure — no I/O.\n */\nexport function scrapePermissionGate(lines: string[]): PermissionGate | null {\n  const options: PermissionOption[] = [];\n  let cursor: number | undefined;\n  let firstOptionLine = -1;\n\n  for (let i = 0; i < lines.length; i++) {\n    const m = OPTION_RE.exec(stripGutter(lines[i]));\n    if (!m) continue;\n    const index = Number.parseInt(m[2], 10);\n    if (!Number.isFinite(index)) continue;\n    if (firstOptionLine === -1) firstOptionLine = i;\n    if (m[1]) cursor = index; // `❯` marks the highlighted option\n    options.push({ index, label: m[3] });\n  }\n\n  if (options.length === 0) return null;\n\n  // Prompt = nearest non-empty, non-chrome line above the first option row.\n  let prompt: string | undefined;\n  for (let i = firstOptionLine - 1; i >= 0; i--) {\n    const t = stripGutter(lines[i]).trim();\n    if (t.length === 0) continue;\n    if (BOX_ONLY_RE.test(lines[i].trim()) || FOOTER_RE.test(t) || PROMPT_ARROW_RE.test(t)) continue;\n    prompt = t || undefined;\n    break;\n  }\n\n  return { ...(prompt ? { prompt } : {}), options, ...(cursor !== undefined ? { cursor } : {}) };\n}\n","import type { AskOption, AskQuestion } from \"../../types\";\n\n// Detect a structured AskUserQuestion menu from the RENDERED screen lines\n// (getOutputLines), not JSONL. The JSONL path (detectAskUserQuestion) is\n// structurally late — the question is painted in the TUI before the tool_use\n// block flushes to disk, and a backgrounded sub-agent may write to a different\n// JSONL than the watched session. Scraping the rendered screen fires the moment\n// the menu is on screen.\n//\n// The on-screen AskUserQuestion menu looks like:\n//\n//     Which area are you focused on?\n//     ❯ 1. macOS / Chrome\n//       2. iOS / Safari\n//       …\n//       6. Chat about this\n//     Enter to select · Tab/Arrow keys to navigate · Esc to cancel\n//\n// Differences from the JSONL form: no header/description/preview (the screen\n// only shows labels), and the leading number is the on-screen index. We map it\n// to the AskQuestion shape (header/description default to \"\") so the existing\n// `question` WS event and QuestionCard render path are reused unchanged.\n\n// The footer that terminates an AskUserQuestion menu — its presence is the\n// positive signal that this block IS a structured picker (vs a permission gate,\n// which uses a different footer and y/n phrasing).\nconst ASK_FOOTER_RE = /Enter to select/i;\nconst ESC_FOOTER_RE = /Esc to cancel|to navigate/i;\n\n// An option row: optional `❯` cursor + \"N. label\". Tolerates the box indent.\nconst OPTION_RE = /^\\s*(?:❯)?\\s*(\\d+)\\.\\s+(.+?)\\s*$/;\n\n// A question header ends with \"?\" (AskUserQuestion questions are interrogative).\nconst QUESTION_RE = /\\?\\s*$/;\n\nconst BOX_ONLY_RE = /^[\\s│─┌┐└┘├┤┬┴┼╭╮╰╯╱╲=_-]+$/;\n\n// Reject permission-gate option labels so a gate (caught separately via OSC 777)\n// never doubles as a structured question.\nconst PERMISSION_LABEL_RE = /^(Yes|No)\\b/i;\n\n// The final confirmation screen of a multi-question AskUserQuestion TUI:\n//   Ready to submit your answers?\n//   ❯ 1. Submit answers\n//     2. Cancel\n//   Enter to select · …\n// The user already answered each question via cards, so this internal step is\n// auto-confirmed by the PTY layer and must never render as its own card.\nconst SUBMIT_QUESTION_RE = /ready to submit your answers\\?/i;\nconst SUBMIT_OPTION_RE = /^submit answers?$/i;\n\n// Strip leading AND trailing box-drawing gutters (\"│ … │\") so a menu drawn\n// inside a box parses the same as an unboxed one (the trailing gutter matters\n// for the \"?\"-suffix question test).\nfunction stripBoxGutter(line: string): string {\n  return line.replace(/^\\s*[│|]\\s?/, \"\").replace(/\\s*[│|]\\s*$/, \"\");\n}\n\n/**\n * Detect an AskUserQuestion menu in rendered screen lines. Returns the question\n * set (single-question; the TUI shows one picker at a time) or null.\n * Pure — no I/O.\n */\nexport function detectQuestionFromScreen(lines: string[]): { questions: AskQuestion[] } | null {\n  // Find the footer that closes the menu; scan upward from it.\n  let footerIdx = -1;\n  for (let i = lines.length - 1; i >= 0; i--) {\n    if (ASK_FOOTER_RE.test(lines[i])) {\n      footerIdx = i;\n      break;\n    }\n  }\n  if (footerIdx === -1) return null;\n\n  // Collect option rows above the footer. Real menus interleave each \"N. label\"\n  // row with wrapped DESCRIPTION lines and may insert a box border between\n  // options, so a non-option line is NOT a hard stop — it's skipped as long as\n  // we haven't reached the question line yet. We stop at: the question line (ends\n  // with \"?\"), a blank gap once options have started, or the top of the window.\n  const options: AskOption[] = [];\n  let firstOptionIdx = -1;\n  for (let i = footerIdx - 1; i >= 0; i--) {\n    const line = lines[i];\n    const inner = stripBoxGutter(line);\n    const trimmed = inner.trim();\n    if (trimmed.length === 0) {\n      if (options.length === 0) continue; // gap between footer and options\n      break; // blank line above the option block ends it\n    }\n    if (BOX_ONLY_RE.test(line.trim())) continue; // box border between/around options\n    if (ESC_FOOTER_RE.test(line) && options.length === 0) continue;\n    // The question line terminates the option block (it's the row right above\n    // the first option, after any descriptions). Stop before consuming it.\n    if (options.length > 0 && QUESTION_RE.test(trimmed) && !OPTION_RE.test(inner)) break;\n    const m = OPTION_RE.exec(inner);\n    if (m) {\n      const label = m[2].trim();\n      if (PERMISSION_LABEL_RE.test(label)) return null; // it's a permission gate\n      options.unshift({ label, description: \"\" });\n      firstOptionIdx = i;\n    }\n    // else: a wrapped description / continuation line for the option below it —\n    // skip it and keep scanning upward for more options.\n  }\n\n  if (options.length < 2 || firstOptionIdx === -1) return null;\n\n  // Question = nearest non-empty, non-box line above the first option row that\n  // ends with \"?\".\n  let question: string | undefined;\n  for (let i = firstOptionIdx - 1; i >= 0; i--) {\n    const raw = stripBoxGutter(lines[i]);\n    const trimmed = raw.trim();\n    if (trimmed.length === 0) continue;\n    if (BOX_ONLY_RE.test(lines[i].trim())) continue;\n    if (QUESTION_RE.test(trimmed)) {\n      question = trimmed;\n    }\n    break;\n  }\n\n  if (!question) return null;\n\n  // The multi-question \"Ready to submit your answers?\" confirmation IS surfaced\n  // as a real card (Submit answers / Cancel) so the user can tap to confirm —\n  // the multi-question carousel doesn't reliably auto-submit. (Roadmap: robust\n  // auto-submit.) So we no longer reject it here.\n\n  return {\n    questions: [{ question, header: \"\", multiSelect: false, options }],\n  };\n}\n\n/**\n * True when the rendered screen is the AskUserQuestion \"Ready to submit your\n * answers?\" confirmation (a question line + a \"Submit answers\" option under the\n * Ask footer). Pure — no I/O. Retained as a classifier (e.g. for analytics);\n * the submit screen now renders as a normal card.\n */\nexport function isSubmitConfirmationScreen(lines: string[]): boolean {\n  let hasFooter = false;\n  let hasSubmitQuestion = false;\n  let hasSubmitOption = false;\n  for (const line of lines) {\n    const inner = stripBoxGutter(line).trim();\n    if (ASK_FOOTER_RE.test(line)) hasFooter = true;\n    if (SUBMIT_QUESTION_RE.test(inner)) hasSubmitQuestion = true;\n    const m = OPTION_RE.exec(inner);\n    if (m && SUBMIT_OPTION_RE.test(m[2].trim())) hasSubmitOption = true;\n  }\n  return hasFooter && hasSubmitQuestion && hasSubmitOption;\n}\n\n/**\n * Stable content key for de-duping a screen-scraped question against the JSONL\n * detection of the same question (they share no toolUseId). Keyed on the\n * question text + option labels.\n */\nexport function questionContentKey(questions: AskQuestion[]): string {\n  return questions\n    .map((q) => `${q.question} ${q.options.map((o) => o.label).join(\",\")}`)\n    .join(\"::\");\n}\n","// Detect UNSTRUCTURED blocking prompts in the rendered tail — the ones that are\n// neither an AskUserQuestion menu (detectQuestionFromScreen) nor an OSC-777\n// permission gate (scrapePermissionGate): a shell `read -p \"… [y/N]\"`, a CLI\n// picker's `(y/n)`, a numbered menu printed by a plain script, etc.\n//\n// Scraped into the SAME structured shape the permission gate emits, so mobile\n// renders it as an ordinary QuestionCard with tappable options. Each option\n// carries the LITERAL keystroke that answers it (`answerKeys`) so the client\n// stays dumb — it just sends those bytes. This is the ONE net-new detector;\n// everything downstream (event shape, mobile rendering, answer-by-keystroke) is\n// reused.\n//\n// Philosophy mirrors the existing detectors: conservative but false-positive\n// tolerant. A spurious card is recoverable (the user ignores it or taps and the\n// keys are harmless); a MISSED prompt strands a blocked PTY. We only fire on a\n// tight set of patterns anchored to the LAST non-blank rendered line.\n\nconst ENTER = \"\\r\";\n\nexport interface ShellPromptOption {\n  /** Positional fallback number (1-based). Authoritative answer is `answerKeys`. */\n  index: number;\n  label: string;\n  /** The exact bytes to send to answer this option, e.g. \"y\\r\" or \"2\\r\". */\n  answerKeys: string;\n}\n\nexport interface ShellPrompt {\n  prompt: string;\n  options: ShellPromptOption[];\n}\n\n// A y/N family prompt: the last line ends in a bracketed/parenthesised yes-no\n// hint. Capture which letter is the default (upper-case) only to keep the label\n// order natural — both options are always offered.\n//   \"Continue? [y/N]\"  \"Overwrite (y/n)?\"  \"Proceed [Y/n] \"\nconst YN_RE = /[[(]\\s*y\\s*\\/\\s*n\\s*[\\])]/i;\n\n// A bare confirmation with no explicit options — Enter is the only sensible\n// answer. \"Press enter to continue\", \"Press any key…\", a trailing \"Continue?\".\nconst PRESS_ENTER_RE = /press\\s+(enter|return|any key)/i;\nconst CONTINUE_RE = /\\bcontinue\\b\\s*\\??\\s*$/i;\n\n// A numbered menu row: optional cursor, \"N. label\" or \"N) label\". Same grammar\n// scrapePermissionGate uses, but here the menu is a plain script's output with\n// no OSC-777 and no Claude box.\nconst NUMBERED_RE = /^\\s*(?:❯|>)?\\s*(\\d+)[.)]\\s+(.+?)\\s*$/;\n\n// Lines that are never a prompt: Claude's own box-drawing / menu chrome. If any\n// of these appear in the tail we defer to the structured detectors and bail —\n// this detector is strictly the fallback for plain shell output.\nconst CLAUDE_CHROME_RE = /Enter to select|Esc to cancel|╭|╰|│.*│/;\nconst BOX_ONLY_RE = /^[\\s│─┌┐└┘├┤┬┴┼╭╮╰╯╱╲=_-]+$/;\n\nfunction lastNonBlank(lines: string[]): { text: string; idx: number } | null {\n  for (let i = lines.length - 1; i >= 0; i--) {\n    const t = lines[i].trim();\n    if (t.length > 0) return { text: t, idx: i };\n  }\n  return null;\n}\n\n/**\n * Scrape an unstructured shell prompt from rendered screen lines. Returns null\n * when the tail isn't a recognised prompt (prose, Claude's own UI, empty).\n * Pure — no I/O.\n */\nexport function detectShellPrompt(lines: string[]): ShellPrompt | null {\n  // Defer to the structured detectors if Claude's TUI is on screen. Those paths\n  // own AskUserQuestion / permission gates; this is plain-shell only.\n  if (lines.some((l) => CLAUDE_CHROME_RE.test(l))) return null;\n\n  const last = lastNonBlank(lines);\n  if (!last) return null;\n\n  // ── y/N family ───────────────────────────────────────────────────\n  if (YN_RE.test(last.text)) {\n    return {\n      prompt: last.text,\n      options: [\n        { index: 1, label: \"Yes\", answerKeys: `y${ENTER}` },\n        { index: 2, label: \"No\", answerKeys: `n${ENTER}` },\n      ],\n    };\n  }\n\n  // ── numbered menu ────────────────────────────────────────────────\n  // Only when the LAST line is itself a numbered row (the menu just finished\n  // printing and is waiting) — collect the contiguous numbered block ending it.\n  if (NUMBERED_RE.test(last.text)) {\n    const options: ShellPromptOption[] = [];\n    for (let i = 0; i <= last.idx; i++) {\n      const m = NUMBERED_RE.exec(lines[i]);\n      if (!m) continue;\n      const num = Number.parseInt(m[1], 10);\n      if (!Number.isFinite(num)) continue;\n      options.push({ index: num, label: m[2].trim(), answerKeys: `${num}${ENTER}` });\n    }\n    if (options.length >= 2) {\n      // Prompt = nearest non-chrome line above the first numbered row.\n      const firstRow = lines.findIndex((l) => NUMBERED_RE.test(l));\n      let prompt = \"\";\n      for (let i = firstRow - 1; i >= 0; i--) {\n        const t = lines[i].trim();\n        if (t.length === 0 || BOX_ONLY_RE.test(t)) continue;\n        prompt = t;\n        break;\n      }\n      return { prompt: prompt || \"Select an option\", options };\n    }\n  }\n\n  // ── bare confirmation (Enter only) ───────────────────────────────\n  if (PRESS_ENTER_RE.test(last.text) || CONTINUE_RE.test(last.text)) {\n    return {\n      prompt: last.text,\n      options: [{ index: 1, label: \"Continue\", answerKeys: ENTER }],\n    };\n  }\n\n  return null;\n}\n","import nacl from \"tweetnacl\";\nimport naclUtil from \"tweetnacl-util\";\n\nexport interface SealedPayload {\n  ciphertext: string;\n  nonce: string;\n  ephemeralPublicKey: string;\n}\n\n/**\n * Encrypts a plaintext to a recipient's X25519 public key using NaCl box with\n * an ephemeral sender keypair. The phone holds the recipient private key in\n * its own memory and decrypts with nacl.box.open(ciphertext, nonce, ephemeralPublicKey, recipientPrivateKey).\n *\n * The wire format is custom (not libsodium crypto_box_seal) but cryptographically equivalent.\n */\nexport function seal(plaintext: string, recipientPublicKeyBase64: string): SealedPayload {\n  const recipientPk = naclUtil.decodeBase64(recipientPublicKeyBase64);\n  if (recipientPk.length !== nacl.box.publicKeyLength) {\n    throw new Error(\n      `clientPublicKey must be ${nacl.box.publicKeyLength} bytes (got ${recipientPk.length})`,\n    );\n  }\n  const ephemeral = nacl.box.keyPair();\n  const nonce = nacl.randomBytes(nacl.box.nonceLength);\n  const message = naclUtil.decodeUTF8(plaintext);\n  const cipher = nacl.box(message, nonce, recipientPk, ephemeral.secretKey);\n  return {\n    ciphertext: naclUtil.encodeBase64(cipher),\n    nonce: naclUtil.encodeBase64(nonce),\n    ephemeralPublicKey: naclUtil.encodeBase64(ephemeral.publicKey),\n  };\n}\n","/*! chokidar - MIT License (c) 2012 Paul Miller (paulmillr.com) */\nimport { EventEmitter } from 'node:events';\nimport { stat as statcb, Stats } from 'node:fs';\nimport { readdir, stat } from 'node:fs/promises';\nimport * as sp from 'node:path';\nimport { readdirp, ReaddirpStream } from 'readdirp';\nimport { EMPTY_FN, EVENTS as EV, isIBMi, isWindows, NodeFsHandler, STR_CLOSE, STR_END, } from './handler.js';\nconst SLASH = '/';\nconst SLASH_SLASH = '//';\nconst ONE_DOT = '.';\nconst TWO_DOTS = '..';\nconst STRING_TYPE = 'string';\nconst BACK_SLASH_RE = /\\\\/g;\nconst DOUBLE_SLASH_RE = /\\/\\//g;\nconst DOT_RE = /\\..*\\.(sw[px])$|~$|\\.subl.*\\.tmp/;\nconst REPLACER_RE = /^\\.[/\\\\]/;\nfunction arrify(item) {\n    return Array.isArray(item) ? item : [item];\n}\nconst isMatcherObject = (matcher) => typeof matcher === 'object' && matcher !== null && !(matcher instanceof RegExp);\nfunction createPattern(matcher) {\n    if (typeof matcher === 'function')\n        return matcher;\n    if (typeof matcher === 'string')\n        return (string) => matcher === string;\n    if (matcher instanceof RegExp)\n        return (string) => matcher.test(string);\n    if (typeof matcher === 'object' && matcher !== null) {\n        return (string) => {\n            if (matcher.path === string)\n                return true;\n            if (matcher.recursive) {\n                const relative = sp.relative(matcher.path, string);\n                if (!relative) {\n                    return false;\n                }\n                return !relative.startsWith('..') && !sp.isAbsolute(relative);\n            }\n            return false;\n        };\n    }\n    return () => false;\n}\nfunction normalizePath(path) {\n    if (typeof path !== 'string')\n        throw new Error('string expected');\n    path = sp.normalize(path);\n    path = path.replace(/\\\\/g, '/');\n    let prepend = false;\n    if (path.startsWith('//'))\n        prepend = true;\n    path = path.replace(DOUBLE_SLASH_RE, '/');\n    if (prepend)\n        path = '/' + path;\n    return path;\n}\nfunction matchPatterns(patterns, testString, stats) {\n    const path = normalizePath(testString);\n    for (let index = 0; index < patterns.length; index++) {\n        const pattern = patterns[index];\n        if (pattern(path, stats)) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction anymatch(matchers, testString) {\n    if (matchers == null) {\n        throw new TypeError('anymatch: specify first argument');\n    }\n    // Early cache for matchers.\n    const matchersArray = arrify(matchers);\n    const patterns = matchersArray.map((matcher) => createPattern(matcher));\n    if (testString == null) {\n        return (testString, stats) => {\n            return matchPatterns(patterns, testString, stats);\n        };\n    }\n    return matchPatterns(patterns, testString);\n}\nconst unifyPaths = (paths_) => {\n    const paths = arrify(paths_).flat();\n    if (!paths.every((p) => typeof p === STRING_TYPE)) {\n        throw new TypeError(`Non-string provided as watch path: ${paths}`);\n    }\n    return paths.map(normalizePathToUnix);\n};\n// If SLASH_SLASH occurs at the beginning of path, it is not replaced\n//     because \"//StoragePC/DrivePool/Movies\" is a valid network path\nconst toUnix = (string) => {\n    let str = string.replace(BACK_SLASH_RE, SLASH);\n    let prepend = false;\n    if (str.startsWith(SLASH_SLASH)) {\n        prepend = true;\n    }\n    str = str.replace(DOUBLE_SLASH_RE, SLASH);\n    if (prepend) {\n        str = SLASH + str;\n    }\n    return str;\n};\n// Our version of upath.normalize\n// TODO: this is not equal to path-normalize module - investigate why\nconst normalizePathToUnix = (path) => toUnix(sp.normalize(toUnix(path)));\n// TODO: refactor\nconst normalizeIgnored = (cwd = '') => (path) => {\n    if (typeof path === 'string') {\n        return normalizePathToUnix(sp.isAbsolute(path) ? path : sp.join(cwd, path));\n    }\n    else {\n        return path;\n    }\n};\nconst getAbsolutePath = (path, cwd) => {\n    if (sp.isAbsolute(path)) {\n        return path;\n    }\n    return sp.join(cwd, path);\n};\nconst EMPTY_SET = Object.freeze(new Set());\n/**\n * Directory entry.\n */\nclass DirEntry {\n    path;\n    _removeWatcher;\n    items;\n    constructor(dir, removeWatcher) {\n        this.path = dir;\n        this._removeWatcher = removeWatcher;\n        this.items = new Set();\n    }\n    add(item) {\n        const { items } = this;\n        if (!items)\n            return;\n        if (item !== ONE_DOT && item !== TWO_DOTS)\n            items.add(item);\n    }\n    async remove(item) {\n        const { items } = this;\n        if (!items)\n            return;\n        items.delete(item);\n        if (items.size > 0)\n            return;\n        const dir = this.path;\n        try {\n            await readdir(dir);\n        }\n        catch (err) {\n            if (this._removeWatcher) {\n                this._removeWatcher(sp.dirname(dir), sp.basename(dir));\n            }\n        }\n    }\n    has(item) {\n        const { items } = this;\n        if (!items)\n            return;\n        return items.has(item);\n    }\n    getChildren() {\n        const { items } = this;\n        if (!items)\n            return [];\n        return [...items.values()];\n    }\n    dispose() {\n        this.items.clear();\n        this.path = '';\n        this._removeWatcher = EMPTY_FN;\n        this.items = EMPTY_SET;\n        Object.freeze(this);\n    }\n}\nconst STAT_METHOD_F = 'stat';\nconst STAT_METHOD_L = 'lstat';\nexport class WatchHelper {\n    fsw;\n    path;\n    watchPath;\n    fullWatchPath;\n    dirParts;\n    followSymlinks;\n    statMethod;\n    constructor(path, follow, fsw) {\n        this.fsw = fsw;\n        const watchPath = path;\n        this.path = path = path.replace(REPLACER_RE, '');\n        this.watchPath = watchPath;\n        this.fullWatchPath = sp.resolve(watchPath);\n        this.dirParts = [];\n        this.dirParts.forEach((parts) => {\n            if (parts.length > 1)\n                parts.pop();\n        });\n        this.followSymlinks = follow;\n        this.statMethod = follow ? STAT_METHOD_F : STAT_METHOD_L;\n    }\n    entryPath(entry) {\n        return sp.join(this.watchPath, sp.relative(this.watchPath, entry.fullPath));\n    }\n    filterPath(entry) {\n        const { stats } = entry;\n        if (stats && stats.isSymbolicLink())\n            return this.filterDir(entry);\n        const resolvedPath = this.entryPath(entry);\n        // TODO: what if stats is undefined? remove !\n        return this.fsw._isntIgnored(resolvedPath, stats) && this.fsw._hasReadPermissions(stats);\n    }\n    filterDir(entry) {\n        return this.fsw._isntIgnored(this.entryPath(entry), entry.stats);\n    }\n}\n/**\n * Watches files & directories for changes. Emitted events:\n * `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error`\n *\n *     new FSWatcher()\n *       .add(directories)\n *       .on('add', path => log('File', path, 'was added'))\n */\nexport class FSWatcher extends EventEmitter {\n    closed;\n    options;\n    _closers;\n    _ignoredPaths;\n    _throttled;\n    _streams;\n    _symlinkPaths;\n    _watched;\n    _pendingWrites;\n    _pendingUnlinks;\n    _readyCount;\n    _emitReady;\n    _closePromise;\n    _userIgnored;\n    _readyEmitted;\n    _emitRaw;\n    _boundRemove;\n    _nodeFsHandler;\n    // Not indenting methods for history sake; for now.\n    constructor(_opts = {}) {\n        super();\n        this.closed = false;\n        this._closers = new Map();\n        this._ignoredPaths = new Set();\n        this._throttled = new Map();\n        this._streams = new Set();\n        this._symlinkPaths = new Map();\n        this._watched = new Map();\n        this._pendingWrites = new Map();\n        this._pendingUnlinks = new Map();\n        this._readyCount = 0;\n        this._readyEmitted = false;\n        const awf = _opts.awaitWriteFinish;\n        const DEF_AWF = { stabilityThreshold: 2000, pollInterval: 100 };\n        const opts = {\n            // Defaults\n            persistent: true,\n            ignoreInitial: false,\n            ignorePermissionErrors: false,\n            interval: 100,\n            binaryInterval: 300,\n            followSymlinks: true,\n            usePolling: false,\n            // useAsync: false,\n            atomic: true, // NOTE: overwritten later (depends on usePolling)\n            ..._opts,\n            // Change format\n            ignored: _opts.ignored ? arrify(_opts.ignored) : arrify([]),\n            awaitWriteFinish: awf === true ? DEF_AWF : typeof awf === 'object' ? { ...DEF_AWF, ...awf } : false,\n        };\n        // Always default to polling on IBM i because fs.watch() is not available on IBM i.\n        if (isIBMi)\n            opts.usePolling = true;\n        // Editor atomic write normalization enabled by default with fs.watch\n        if (opts.atomic === undefined)\n            opts.atomic = !opts.usePolling;\n        // opts.atomic = typeof _opts.atomic === 'number' ? _opts.atomic : 100;\n        // Global override. Useful for developers, who need to force polling for all\n        // instances of chokidar, regardless of usage / dependency depth\n        const envPoll = process.env.CHOKIDAR_USEPOLLING;\n        if (envPoll !== undefined) {\n            const envLower = envPoll.toLowerCase();\n            if (envLower === 'false' || envLower === '0')\n                opts.usePolling = false;\n            else if (envLower === 'true' || envLower === '1')\n                opts.usePolling = true;\n            else\n                opts.usePolling = !!envLower;\n        }\n        const envInterval = process.env.CHOKIDAR_INTERVAL;\n        if (envInterval)\n            opts.interval = Number.parseInt(envInterval, 10);\n        // This is done to emit ready only once, but each 'add' will increase that?\n        let readyCalls = 0;\n        this._emitReady = () => {\n            readyCalls++;\n            if (readyCalls >= this._readyCount) {\n                this._emitReady = EMPTY_FN;\n                this._readyEmitted = true;\n                // use process.nextTick to allow time for listener to be bound\n                process.nextTick(() => this.emit(EV.READY));\n            }\n        };\n        this._emitRaw = (...args) => this.emit(EV.RAW, ...args);\n        this._boundRemove = this._remove.bind(this);\n        this.options = opts;\n        this._nodeFsHandler = new NodeFsHandler(this);\n        // You’re frozen when your heart’s not open.\n        Object.freeze(opts);\n    }\n    _addIgnoredPath(matcher) {\n        if (isMatcherObject(matcher)) {\n            // return early if we already have a deeply equal matcher object\n            for (const ignored of this._ignoredPaths) {\n                if (isMatcherObject(ignored) &&\n                    ignored.path === matcher.path &&\n                    ignored.recursive === matcher.recursive) {\n                    return;\n                }\n            }\n        }\n        this._ignoredPaths.add(matcher);\n    }\n    _removeIgnoredPath(matcher) {\n        this._ignoredPaths.delete(matcher);\n        // now find any matcher objects with the matcher as path\n        if (typeof matcher === 'string') {\n            for (const ignored of this._ignoredPaths) {\n                // TODO (43081j): make this more efficient.\n                // probably just make a `this._ignoredDirectories` or some\n                // such thing.\n                if (isMatcherObject(ignored) && ignored.path === matcher) {\n                    this._ignoredPaths.delete(ignored);\n                }\n            }\n        }\n    }\n    // Public methods\n    /**\n     * Adds paths to be watched on an existing FSWatcher instance.\n     * @param paths_ file or file list. Other arguments are unused\n     */\n    add(paths_, _origAdd, _internal) {\n        const { cwd } = this.options;\n        this.closed = false;\n        this._closePromise = undefined;\n        let paths = unifyPaths(paths_);\n        if (cwd) {\n            paths = paths.map((path) => {\n                const absPath = getAbsolutePath(path, cwd);\n                // Check `path` instead of `absPath` because the cwd portion can't be a glob\n                return absPath;\n            });\n        }\n        paths.forEach((path) => {\n            this._removeIgnoredPath(path);\n        });\n        this._userIgnored = undefined;\n        if (!this._readyCount)\n            this._readyCount = 0;\n        this._readyCount += paths.length;\n        Promise.all(paths.map(async (path) => {\n            const res = await this._nodeFsHandler._addToNodeFs(path, !_internal, undefined, 0, _origAdd);\n            if (res)\n                this._emitReady();\n            return res;\n        })).then((results) => {\n            if (this.closed)\n                return;\n            results.forEach((item) => {\n                if (item)\n                    this.add(sp.dirname(item), sp.basename(_origAdd || item));\n            });\n        });\n        return this;\n    }\n    /**\n     * Close watchers or start ignoring events from specified paths.\n     */\n    unwatch(paths_) {\n        if (this.closed)\n            return this;\n        const paths = unifyPaths(paths_);\n        const { cwd } = this.options;\n        paths.forEach((path) => {\n            // convert to absolute path unless relative path already matches\n            if (!sp.isAbsolute(path) && !this._closers.has(path)) {\n                if (cwd)\n                    path = sp.join(cwd, path);\n                path = sp.resolve(path);\n            }\n            this._closePath(path);\n            this._addIgnoredPath(path);\n            if (this._watched.has(path)) {\n                this._addIgnoredPath({\n                    path,\n                    recursive: true,\n                });\n            }\n            // reset the cached userIgnored anymatch fn\n            // to make ignoredPaths changes effective\n            this._userIgnored = undefined;\n        });\n        return this;\n    }\n    /**\n     * Close watchers and remove all listeners from watched paths.\n     */\n    close() {\n        if (this._closePromise) {\n            return this._closePromise;\n        }\n        this.closed = true;\n        // Memory management.\n        this.removeAllListeners();\n        const closers = [];\n        this._closers.forEach((closerList) => closerList.forEach((closer) => {\n            const promise = closer();\n            if (promise instanceof Promise)\n                closers.push(promise);\n        }));\n        this._streams.forEach((stream) => stream.destroy());\n        this._userIgnored = undefined;\n        this._readyCount = 0;\n        this._readyEmitted = false;\n        this._watched.forEach((dirent) => dirent.dispose());\n        this._closers.clear();\n        this._watched.clear();\n        this._streams.clear();\n        this._symlinkPaths.clear();\n        this._throttled.clear();\n        this._closePromise = closers.length\n            ? Promise.all(closers).then(() => undefined)\n            : Promise.resolve();\n        return this._closePromise;\n    }\n    /**\n     * Expose list of watched paths\n     * @returns for chaining\n     */\n    getWatched() {\n        const watchList = {};\n        this._watched.forEach((entry, dir) => {\n            const key = this.options.cwd ? sp.relative(this.options.cwd, dir) : dir;\n            const index = key || ONE_DOT;\n            watchList[index] = entry.getChildren().sort();\n        });\n        return watchList;\n    }\n    emitWithAll(event, args) {\n        this.emit(event, ...args);\n        if (event !== EV.ERROR)\n            this.emit(EV.ALL, event, ...args);\n    }\n    // Common helpers\n    // --------------\n    /**\n     * Normalize and emit events.\n     * Calling _emit DOES NOT MEAN emit() would be called!\n     * @param event Type of event\n     * @param path File or directory path\n     * @param stats arguments to be passed with event\n     * @returns the error if defined, otherwise the value of the FSWatcher instance's `closed` flag\n     */\n    async _emit(event, path, stats) {\n        if (this.closed)\n            return;\n        const opts = this.options;\n        if (isWindows)\n            path = sp.normalize(path);\n        if (opts.cwd)\n            path = sp.relative(opts.cwd, path);\n        const args = [path];\n        if (stats != null)\n            args.push(stats);\n        const awf = opts.awaitWriteFinish;\n        let pw;\n        if (awf && (pw = this._pendingWrites.get(path))) {\n            pw.lastChange = new Date();\n            return this;\n        }\n        if (opts.atomic) {\n            if (event === EV.UNLINK) {\n                this._pendingUnlinks.set(path, [event, ...args]);\n                setTimeout(() => {\n                    this._pendingUnlinks.forEach((entry, path) => {\n                        this.emit(...entry);\n                        this.emit(EV.ALL, ...entry);\n                        this._pendingUnlinks.delete(path);\n                    });\n                }, typeof opts.atomic === 'number' ? opts.atomic : 100);\n                return this;\n            }\n            if (event === EV.ADD && this._pendingUnlinks.has(path)) {\n                event = EV.CHANGE;\n                this._pendingUnlinks.delete(path);\n            }\n        }\n        if (awf && (event === EV.ADD || event === EV.CHANGE) && this._readyEmitted) {\n            const awfEmit = (err, stats) => {\n                if (err) {\n                    event = EV.ERROR;\n                    args[0] = err;\n                    this.emitWithAll(event, args);\n                }\n                else if (stats) {\n                    // if stats doesn't exist the file must have been deleted\n                    if (args.length > 1) {\n                        args[1] = stats;\n                    }\n                    else {\n                        args.push(stats);\n                    }\n                    this.emitWithAll(event, args);\n                }\n            };\n            this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit);\n            return this;\n        }\n        if (event === EV.CHANGE) {\n            const isThrottled = !this._throttle(EV.CHANGE, path, 50);\n            if (isThrottled)\n                return this;\n        }\n        if (opts.alwaysStat &&\n            stats === undefined &&\n            (event === EV.ADD || event === EV.ADD_DIR || event === EV.CHANGE)) {\n            const fullPath = opts.cwd ? sp.join(opts.cwd, path) : path;\n            let stats;\n            try {\n                stats = await stat(fullPath);\n            }\n            catch (err) {\n                // do nothing\n            }\n            // Suppress event when fs_stat fails, to avoid sending undefined 'stat'\n            if (!stats || this.closed)\n                return;\n            args.push(stats);\n        }\n        this.emitWithAll(event, args);\n        return this;\n    }\n    /**\n     * Common handler for errors\n     * @returns The error if defined, otherwise the value of the FSWatcher instance's `closed` flag\n     */\n    _handleError(error) {\n        const code = error && error.code;\n        if (error &&\n            code !== 'ENOENT' &&\n            code !== 'ENOTDIR' &&\n            (!this.options.ignorePermissionErrors || (code !== 'EPERM' && code !== 'EACCES'))) {\n            this.emit(EV.ERROR, error);\n        }\n        return error || this.closed;\n    }\n    /**\n     * Helper utility for throttling\n     * @param actionType type being throttled\n     * @param path being acted upon\n     * @param timeout duration of time to suppress duplicate actions\n     * @returns tracking object or false if action should be suppressed\n     */\n    _throttle(actionType, path, timeout) {\n        if (!this._throttled.has(actionType)) {\n            this._throttled.set(actionType, new Map());\n        }\n        const action = this._throttled.get(actionType);\n        if (!action)\n            throw new Error('invalid throttle');\n        const actionPath = action.get(path);\n        if (actionPath) {\n            actionPath.count++;\n            return false;\n        }\n        // eslint-disable-next-line prefer-const\n        let timeoutObject;\n        const clear = () => {\n            const item = action.get(path);\n            const count = item ? item.count : 0;\n            action.delete(path);\n            clearTimeout(timeoutObject);\n            if (item)\n                clearTimeout(item.timeoutObject);\n            return count;\n        };\n        timeoutObject = setTimeout(clear, timeout);\n        const thr = { timeoutObject, clear, count: 0 };\n        action.set(path, thr);\n        return thr;\n    }\n    _incrReadyCount() {\n        return this._readyCount++;\n    }\n    /**\n     * Awaits write operation to finish.\n     * Polls a newly created file for size variations. When files size does not change for 'threshold' milliseconds calls callback.\n     * @param path being acted upon\n     * @param threshold Time in milliseconds a file size must be fixed before acknowledging write OP is finished\n     * @param event\n     * @param awfEmit Callback to be called when ready for event to be emitted.\n     */\n    _awaitWriteFinish(path, threshold, event, awfEmit) {\n        const awf = this.options.awaitWriteFinish;\n        if (typeof awf !== 'object')\n            return;\n        const pollInterval = awf.pollInterval;\n        let timeoutHandler;\n        let fullPath = path;\n        if (this.options.cwd && !sp.isAbsolute(path)) {\n            fullPath = sp.join(this.options.cwd, path);\n        }\n        const now = new Date();\n        const writes = this._pendingWrites;\n        function awaitWriteFinishFn(prevStat) {\n            statcb(fullPath, (err, curStat) => {\n                if (err || !writes.has(path)) {\n                    if (err && err.code !== 'ENOENT')\n                        awfEmit(err);\n                    return;\n                }\n                const now = Number(new Date());\n                if (prevStat && curStat.size !== prevStat.size) {\n                    writes.get(path).lastChange = now;\n                }\n                const pw = writes.get(path);\n                const df = now - pw.lastChange;\n                if (df >= threshold) {\n                    writes.delete(path);\n                    awfEmit(undefined, curStat);\n                }\n                else {\n                    timeoutHandler = setTimeout(awaitWriteFinishFn, pollInterval, curStat);\n                }\n            });\n        }\n        if (!writes.has(path)) {\n            writes.set(path, {\n                lastChange: now,\n                cancelWait: () => {\n                    writes.delete(path);\n                    clearTimeout(timeoutHandler);\n                    return event;\n                },\n            });\n            timeoutHandler = setTimeout(awaitWriteFinishFn, pollInterval);\n        }\n    }\n    /**\n     * Determines whether user has asked to ignore this path.\n     */\n    _isIgnored(path, stats) {\n        if (this.options.atomic && DOT_RE.test(path))\n            return true;\n        if (!this._userIgnored) {\n            const { cwd } = this.options;\n            const ign = this.options.ignored;\n            const ignored = (ign || []).map(normalizeIgnored(cwd));\n            const ignoredPaths = [...this._ignoredPaths];\n            const list = [...ignoredPaths.map(normalizeIgnored(cwd)), ...ignored];\n            this._userIgnored = anymatch(list, undefined);\n        }\n        return this._userIgnored(path, stats);\n    }\n    _isntIgnored(path, stat) {\n        return !this._isIgnored(path, stat);\n    }\n    /**\n     * Provides a set of common helpers and properties relating to symlink handling.\n     * @param path file or directory pattern being watched\n     */\n    _getWatchHelpers(path) {\n        return new WatchHelper(path, this.options.followSymlinks, this);\n    }\n    // Directory helpers\n    // -----------------\n    /**\n     * Provides directory tracking objects\n     * @param directory path of the directory\n     */\n    _getWatchedDir(directory) {\n        const dir = sp.resolve(directory);\n        if (!this._watched.has(dir))\n            this._watched.set(dir, new DirEntry(dir, this._boundRemove));\n        return this._watched.get(dir);\n    }\n    // File helpers\n    // ------------\n    /**\n     * Check for read permissions: https://stackoverflow.com/a/11781404/1358405\n     */\n    _hasReadPermissions(stats) {\n        if (this.options.ignorePermissionErrors)\n            return true;\n        return Boolean(Number(stats.mode) & 0o400);\n    }\n    /**\n     * Handles emitting unlink events for\n     * files and directories, and via recursion, for\n     * files and directories within directories that are unlinked\n     * @param directory within which the following item is located\n     * @param item      base path of item/directory\n     */\n    _remove(directory, item, isDirectory) {\n        // if what is being deleted is a directory, get that directory's paths\n        // for recursive deleting and cleaning of watched object\n        // if it is not a directory, nestedDirectoryChildren will be empty array\n        const path = sp.join(directory, item);\n        const fullPath = sp.resolve(path);\n        isDirectory =\n            isDirectory != null ? isDirectory : this._watched.has(path) || this._watched.has(fullPath);\n        // prevent duplicate handling in case of arriving here nearly simultaneously\n        // via multiple paths (such as _handleFile and _handleDir)\n        if (!this._throttle('remove', path, 100))\n            return;\n        // if the only watched file is removed, watch for its return\n        if (!isDirectory && this._watched.size === 1) {\n            this.add(directory, item, true);\n        }\n        // This will create a new entry in the watched object in either case\n        // so we got to do the directory check beforehand\n        const wp = this._getWatchedDir(path);\n        const nestedDirectoryChildren = wp.getChildren();\n        // Recursively remove children directories / files.\n        nestedDirectoryChildren.forEach((nested) => this._remove(path, nested));\n        // Check if item was on the watched list and remove it\n        const parent = this._getWatchedDir(directory);\n        const wasTracked = parent.has(item);\n        parent.remove(item);\n        // Fixes issue #1042 -> Relative paths were detected and added as symlinks\n        // (https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L612),\n        // but never removed from the map in case the path was deleted.\n        // This leads to an incorrect state if the path was recreated:\n        // https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L553\n        if (this._symlinkPaths.has(fullPath)) {\n            this._symlinkPaths.delete(fullPath);\n        }\n        // If we wait for this file to be fully written, cancel the wait.\n        let relPath = path;\n        if (this.options.cwd)\n            relPath = sp.relative(this.options.cwd, path);\n        if (this.options.awaitWriteFinish && this._pendingWrites.has(relPath)) {\n            const event = this._pendingWrites.get(relPath).cancelWait();\n            if (event === EV.ADD)\n                return;\n        }\n        // The Entry will either be a directory that just got removed\n        // or a bogus entry to a file, in either case we have to remove it\n        this._watched.delete(path);\n        this._watched.delete(fullPath);\n        const eventName = isDirectory ? EV.UNLINK_DIR : EV.UNLINK;\n        if (wasTracked && !this._isIgnored(path))\n            this._emit(eventName, path);\n        // Avoid conflicts if we later create another file with the same name\n        this._closePath(path);\n    }\n    /**\n     * Closes all watchers for a path\n     */\n    _closePath(path) {\n        this._closeFile(path);\n        const dir = sp.dirname(path);\n        this._getWatchedDir(dir).remove(sp.basename(path));\n    }\n    /**\n     * Closes only file-specific watchers\n     */\n    _closeFile(path) {\n        const closers = this._closers.get(path);\n        if (!closers)\n            return;\n        closers.forEach((closer) => closer());\n        this._closers.delete(path);\n    }\n    _addPathCloser(path, closer) {\n        if (!closer)\n            return;\n        let list = this._closers.get(path);\n        if (!list) {\n            list = [];\n            this._closers.set(path, list);\n        }\n        list.push(closer);\n    }\n    _readdirp(root, opts) {\n        if (this.closed)\n            return;\n        const options = { type: EV.ALL, alwaysStat: true, lstat: true, ...opts, depth: 0 };\n        let stream = readdirp(root, options);\n        this._streams.add(stream);\n        stream.once(STR_CLOSE, () => {\n            stream = undefined;\n        });\n        stream.once(STR_END, () => {\n            if (stream) {\n                this._streams.delete(stream);\n                stream = undefined;\n            }\n        });\n        return stream;\n    }\n}\n/**\n * Instantiates watcher with paths to be tracked.\n * @param paths file / directory paths\n * @param options opts, such as `atomic`, `awaitWriteFinish`, `ignored`, and others\n * @returns an instance of FSWatcher for chaining.\n * @example\n * const watcher = watch('.').on('all', (event, path) => { console.log(event, path); });\n * watch('.', { atomic: true, awaitWriteFinish: true, ignored: (f, stats) => stats?.isFile() && !f.endsWith('.js') })\n */\nexport function watch(paths, options = {}) {\n    const watcher = new FSWatcher(options);\n    watcher.add(paths);\n    return watcher;\n}\nexport default { watch: watch, FSWatcher: FSWatcher };\n","import { lstat, readdir, realpath, stat } from 'node:fs/promises';\nimport { join as pjoin, relative as prelative, resolve as presolve, sep as psep } from 'node:path';\nimport { Readable } from 'node:stream';\nexport const EntryTypes = {\n    FILE_TYPE: 'files',\n    DIR_TYPE: 'directories',\n    FILE_DIR_TYPE: 'files_directories',\n    EVERYTHING_TYPE: 'all',\n};\nconst defaultOptions = {\n    root: '.',\n    fileFilter: (_entryInfo) => true,\n    directoryFilter: (_entryInfo) => true,\n    type: EntryTypes.FILE_TYPE,\n    lstat: false,\n    depth: 2147483648,\n    alwaysStat: false,\n    highWaterMark: 4096,\n};\nObject.freeze(defaultOptions);\nconst RECURSIVE_ERROR_CODE = 'READDIRP_RECURSIVE_ERROR';\nconst NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP', RECURSIVE_ERROR_CODE]);\nconst ALL_TYPES = [\n    EntryTypes.DIR_TYPE,\n    EntryTypes.EVERYTHING_TYPE,\n    EntryTypes.FILE_DIR_TYPE,\n    EntryTypes.FILE_TYPE,\n];\nconst DIR_TYPES = new Set([\n    EntryTypes.DIR_TYPE,\n    EntryTypes.EVERYTHING_TYPE,\n    EntryTypes.FILE_DIR_TYPE,\n]);\nconst FILE_TYPES = new Set([\n    EntryTypes.EVERYTHING_TYPE,\n    EntryTypes.FILE_DIR_TYPE,\n    EntryTypes.FILE_TYPE,\n]);\nconst isNormalFlowError = (error) => NORMAL_FLOW_ERRORS.has(error.code);\nconst wantBigintFsStats = process.platform === 'win32';\nconst emptyFn = (_entryInfo) => true;\nconst normalizeFilter = (filter) => {\n    if (filter === undefined)\n        return emptyFn;\n    if (typeof filter === 'function')\n        return filter;\n    if (typeof filter === 'string') {\n        const fl = filter.trim();\n        return (entry) => entry.basename === fl;\n    }\n    if (Array.isArray(filter)) {\n        const trItems = filter.map((item) => item.trim());\n        return (entry) => trItems.some((f) => entry.basename === f);\n    }\n    return emptyFn;\n};\n/** Readable readdir stream, emitting new files as they're being listed. */\nexport class ReaddirpStream extends Readable {\n    parents;\n    reading;\n    parent;\n    _stat;\n    _maxDepth;\n    _wantsDir;\n    _wantsFile;\n    _wantsEverything;\n    _root;\n    _isDirent;\n    _statsProp;\n    _rdOptions;\n    _fileFilter;\n    _directoryFilter;\n    constructor(options = {}) {\n        super({\n            objectMode: true,\n            autoDestroy: true,\n            highWaterMark: options.highWaterMark,\n        });\n        const opts = { ...defaultOptions, ...options };\n        const { root, type } = opts;\n        this._fileFilter = normalizeFilter(opts.fileFilter);\n        this._directoryFilter = normalizeFilter(opts.directoryFilter);\n        const statMethod = opts.lstat ? lstat : stat;\n        // Use bigint stats if it's windows and stat() supports options (node 10+).\n        if (wantBigintFsStats) {\n            this._stat = (path) => statMethod(path, { bigint: true });\n        }\n        else {\n            this._stat = statMethod;\n        }\n        this._maxDepth =\n            opts.depth != null && Number.isSafeInteger(opts.depth) ? opts.depth : defaultOptions.depth;\n        this._wantsDir = type ? DIR_TYPES.has(type) : false;\n        this._wantsFile = type ? FILE_TYPES.has(type) : false;\n        this._wantsEverything = type === EntryTypes.EVERYTHING_TYPE;\n        this._root = presolve(root);\n        this._isDirent = !opts.alwaysStat;\n        this._statsProp = this._isDirent ? 'dirent' : 'stats';\n        this._rdOptions = { encoding: 'utf8', withFileTypes: this._isDirent };\n        // Launch stream with one parent, the root dir.\n        this.parents = [this._exploreDir(root, 1)];\n        this.reading = false;\n        this.parent = undefined;\n    }\n    async _read(batch) {\n        if (this.reading)\n            return;\n        this.reading = true;\n        try {\n            while (!this.destroyed && batch > 0) {\n                const par = this.parent;\n                const fil = par && par.files;\n                if (fil && fil.length > 0) {\n                    const { path, depth } = par;\n                    const slice = fil.splice(0, batch).map((dirent) => this._formatEntry(dirent, path));\n                    const awaited = await Promise.all(slice);\n                    for (const entry of awaited) {\n                        if (!entry)\n                            continue;\n                        if (this.destroyed)\n                            return;\n                        const entryType = await this._getEntryType(entry);\n                        if (entryType === 'directory' && this._directoryFilter(entry)) {\n                            if (depth <= this._maxDepth) {\n                                this.parents.push(this._exploreDir(entry.fullPath, depth + 1));\n                            }\n                            if (this._wantsDir) {\n                                this.push(entry);\n                                batch--;\n                            }\n                        }\n                        else if ((entryType === 'file' || this._includeAsFile(entry)) &&\n                            this._fileFilter(entry)) {\n                            if (this._wantsFile) {\n                                this.push(entry);\n                                batch--;\n                            }\n                        }\n                    }\n                }\n                else {\n                    const parent = this.parents.pop();\n                    if (!parent) {\n                        this.push(null);\n                        break;\n                    }\n                    this.parent = await parent;\n                    if (this.destroyed)\n                        return;\n                }\n            }\n        }\n        catch (error) {\n            this.destroy(error);\n        }\n        finally {\n            this.reading = false;\n        }\n    }\n    async _exploreDir(path, depth) {\n        let files;\n        try {\n            files = await readdir(path, this._rdOptions);\n        }\n        catch (error) {\n            this._onError(error);\n        }\n        return { files, depth, path };\n    }\n    async _formatEntry(dirent, path) {\n        let entry;\n        const basename = this._isDirent ? dirent.name : dirent;\n        try {\n            const fullPath = presolve(pjoin(path, basename));\n            entry = { path: prelative(this._root, fullPath), fullPath, basename };\n            entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath);\n        }\n        catch (err) {\n            this._onError(err);\n            return;\n        }\n        return entry;\n    }\n    _onError(err) {\n        if (isNormalFlowError(err) && !this.destroyed) {\n            this.emit('warn', err);\n        }\n        else {\n            this.destroy(err);\n        }\n    }\n    async _getEntryType(entry) {\n        // entry may be undefined, because a warning or an error were emitted\n        // and the statsProp is undefined\n        if (!entry && this._statsProp in entry) {\n            return '';\n        }\n        const stats = entry[this._statsProp];\n        if (stats.isFile())\n            return 'file';\n        if (stats.isDirectory())\n            return 'directory';\n        if (stats && stats.isSymbolicLink()) {\n            const full = entry.fullPath;\n            try {\n                const entryRealPath = await realpath(full);\n                const entryRealPathStats = await lstat(entryRealPath);\n                if (entryRealPathStats.isFile()) {\n                    return 'file';\n                }\n                if (entryRealPathStats.isDirectory()) {\n                    const len = entryRealPath.length;\n                    if (full.startsWith(entryRealPath) && full.substr(len, 1) === psep) {\n                        const recursiveError = new Error(`Circular symlink detected: \"${full}\" points to \"${entryRealPath}\"`);\n                        // @ts-ignore\n                        recursiveError.code = RECURSIVE_ERROR_CODE;\n                        return this._onError(recursiveError);\n                    }\n                    return 'directory';\n                }\n            }\n            catch (error) {\n                this._onError(error);\n                return '';\n            }\n        }\n    }\n    _includeAsFile(entry) {\n        const stats = entry && entry[this._statsProp];\n        return stats && this._wantsEverything && !stats.isDirectory();\n    }\n}\n/**\n * Streaming version: Reads all files and directories in given root recursively.\n * Consumes ~constant small amount of RAM.\n * @param root Root directory\n * @param options Options to specify root (start directory), filters and recursion depth\n */\nexport function readdirp(root, options = {}) {\n    // @ts-ignore\n    let type = options.entryType || options.type;\n    if (type === 'both')\n        type = EntryTypes.FILE_DIR_TYPE; // backwards-compatibility\n    if (type)\n        options.type = type;\n    if (!root) {\n        throw new Error('readdirp: root argument is required. Usage: readdirp(root, options)');\n    }\n    else if (typeof root !== 'string') {\n        throw new TypeError('readdirp: root argument must be a string. Usage: readdirp(root, options)');\n    }\n    else if (type && !ALL_TYPES.includes(type)) {\n        throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(', ')}`);\n    }\n    options.root = root;\n    return new ReaddirpStream(options);\n}\n/**\n * Promise version: Reads all files and directories in given root recursively.\n * Compared to streaming version, will consume a lot of RAM e.g. when 1 million files are listed.\n * @returns array of paths and their entry infos\n */\nexport function readdirpPromise(root, options = {}) {\n    return new Promise((resolve, reject) => {\n        const files = [];\n        readdirp(root, options)\n            .on('data', (entry) => files.push(entry))\n            .on('end', () => resolve(files))\n            .on('error', (error) => reject(error));\n    });\n}\nexport default readdirp;\n","import { watch as fs_watch, unwatchFile, watchFile } from 'node:fs';\nimport { realpath as fsrealpath, lstat, open, stat } from 'node:fs/promises';\nimport { type as osType } from 'node:os';\nimport * as sp from 'node:path';\nexport const STR_DATA = 'data';\nexport const STR_END = 'end';\nexport const STR_CLOSE = 'close';\nexport const EMPTY_FN = () => { };\nexport const IDENTITY_FN = (val) => val;\nconst pl = process.platform;\nexport const isWindows = pl === 'win32';\nexport const isMacos = pl === 'darwin';\nexport const isLinux = pl === 'linux';\nexport const isFreeBSD = pl === 'freebsd';\nexport const isIBMi = osType() === 'OS400';\nexport const EVENTS = {\n    ALL: 'all',\n    READY: 'ready',\n    ADD: 'add',\n    CHANGE: 'change',\n    ADD_DIR: 'addDir',\n    UNLINK: 'unlink',\n    UNLINK_DIR: 'unlinkDir',\n    RAW: 'raw',\n    ERROR: 'error',\n};\nconst EV = EVENTS;\nconst THROTTLE_MODE_WATCH = 'watch';\nconst statMethods = { lstat, stat };\nconst KEY_LISTENERS = 'listeners';\nconst KEY_ERR = 'errHandlers';\nconst KEY_RAW = 'rawEmitters';\nconst HANDLER_KEYS = [KEY_LISTENERS, KEY_ERR, KEY_RAW];\n// prettier-ignore\nconst binaryExtensions = new Set([\n    '3dm', '3ds', '3g2', '3gp', '7z', 'a', 'aac', 'adp', 'afdesign', 'afphoto', 'afpub', 'ai',\n    'aif', 'aiff', 'alz', 'ape', 'apk', 'appimage', 'ar', 'arj', 'asf', 'au', 'avi',\n    'bak', 'baml', 'bh', 'bin', 'bk', 'bmp', 'btif', 'bz2', 'bzip2',\n    'cab', 'caf', 'cgm', 'class', 'cmx', 'cpio', 'cr2', 'cur', 'dat', 'dcm', 'deb', 'dex', 'djvu',\n    'dll', 'dmg', 'dng', 'doc', 'docm', 'docx', 'dot', 'dotm', 'dra', 'DS_Store', 'dsk', 'dts',\n    'dtshd', 'dvb', 'dwg', 'dxf',\n    'ecelp4800', 'ecelp7470', 'ecelp9600', 'egg', 'eol', 'eot', 'epub', 'exe',\n    'f4v', 'fbs', 'fh', 'fla', 'flac', 'flatpak', 'fli', 'flv', 'fpx', 'fst', 'fvt',\n    'g3', 'gh', 'gif', 'graffle', 'gz', 'gzip',\n    'h261', 'h263', 'h264', 'icns', 'ico', 'ief', 'img', 'ipa', 'iso',\n    'jar', 'jpeg', 'jpg', 'jpgv', 'jpm', 'jxr', 'key', 'ktx',\n    'lha', 'lib', 'lvp', 'lz', 'lzh', 'lzma', 'lzo',\n    'm3u', 'm4a', 'm4v', 'mar', 'mdi', 'mht', 'mid', 'midi', 'mj2', 'mka', 'mkv', 'mmr', 'mng',\n    'mobi', 'mov', 'movie', 'mp3',\n    'mp4', 'mp4a', 'mpeg', 'mpg', 'mpga', 'mxu',\n    'nef', 'npx', 'numbers', 'nupkg',\n    'o', 'odp', 'ods', 'odt', 'oga', 'ogg', 'ogv', 'otf', 'ott',\n    'pages', 'pbm', 'pcx', 'pdb', 'pdf', 'pea', 'pgm', 'pic', 'png', 'pnm', 'pot', 'potm',\n    'potx', 'ppa', 'ppam',\n    'ppm', 'pps', 'ppsm', 'ppsx', 'ppt', 'pptm', 'pptx', 'psd', 'pya', 'pyc', 'pyo', 'pyv',\n    'qt',\n    'rar', 'ras', 'raw', 'resources', 'rgb', 'rip', 'rlc', 'rmf', 'rmvb', 'rpm', 'rtf', 'rz',\n    's3m', 's7z', 'scpt', 'sgi', 'shar', 'snap', 'sil', 'sketch', 'slk', 'smv', 'snk', 'so',\n    'stl', 'suo', 'sub', 'swf',\n    'tar', 'tbz', 'tbz2', 'tga', 'tgz', 'thmx', 'tif', 'tiff', 'tlz', 'ttc', 'ttf', 'txz',\n    'udf', 'uvh', 'uvi', 'uvm', 'uvp', 'uvs', 'uvu',\n    'viv', 'vob',\n    'war', 'wav', 'wax', 'wbmp', 'wdp', 'weba', 'webm', 'webp', 'whl', 'wim', 'wm', 'wma',\n    'wmv', 'wmx', 'woff', 'woff2', 'wrm', 'wvx',\n    'xbm', 'xif', 'xla', 'xlam', 'xls', 'xlsb', 'xlsm', 'xlsx', 'xlt', 'xltm', 'xltx', 'xm',\n    'xmind', 'xpi', 'xpm', 'xwd', 'xz',\n    'z', 'zip', 'zipx',\n]);\nconst isBinaryPath = (filePath) => binaryExtensions.has(sp.extname(filePath).slice(1).toLowerCase());\n// TODO: emit errors properly. Example: EMFILE on Macos.\nconst foreach = (val, fn) => {\n    if (val instanceof Set) {\n        val.forEach(fn);\n    }\n    else {\n        fn(val);\n    }\n};\nconst addAndConvert = (main, prop, item) => {\n    let container = main[prop];\n    if (!(container instanceof Set)) {\n        main[prop] = container = new Set([container]);\n    }\n    container.add(item);\n};\nconst clearItem = (cont) => (key) => {\n    const set = cont[key];\n    if (set instanceof Set) {\n        set.clear();\n    }\n    else {\n        delete cont[key];\n    }\n};\nconst delFromSet = (main, prop, item) => {\n    const container = main[prop];\n    if (container instanceof Set) {\n        container.delete(item);\n    }\n    else if (container === item) {\n        delete main[prop];\n    }\n};\nconst isEmptySet = (val) => (val instanceof Set ? val.size === 0 : !val);\nconst FsWatchInstances = new Map();\n/**\n * Instantiates the fs_watch interface\n * @param path to be watched\n * @param options to be passed to fs_watch\n * @param listener main event handler\n * @param errHandler emits info about errors\n * @param emitRaw emits raw event data\n * @returns {NativeFsWatcher}\n */\nfunction createFsWatchInstance(path, options, listener, errHandler, emitRaw) {\n    const handleEvent = (rawEvent, evPath) => {\n        listener(path);\n        emitRaw(rawEvent, evPath, { watchedPath: path });\n        // emit based on events occurring for files from a directory's watcher in\n        // case the file's watcher misses it (and rely on throttling to de-dupe)\n        if (evPath && path !== evPath) {\n            fsWatchBroadcast(sp.resolve(path, evPath), KEY_LISTENERS, sp.join(path, evPath));\n        }\n    };\n    try {\n        return fs_watch(path, {\n            persistent: options.persistent,\n        }, handleEvent);\n    }\n    catch (error) {\n        errHandler(error);\n        return undefined;\n    }\n}\n/**\n * Helper for passing fs_watch event data to a collection of listeners\n * @param fullPath absolute path bound to fs_watch instance\n */\nconst fsWatchBroadcast = (fullPath, listenerType, val1, val2, val3) => {\n    const cont = FsWatchInstances.get(fullPath);\n    if (!cont)\n        return;\n    foreach(cont[listenerType], (listener) => {\n        listener(val1, val2, val3);\n    });\n};\n/**\n * Instantiates the fs_watch interface or binds listeners\n * to an existing one covering the same file system entry\n * @param path\n * @param fullPath absolute path\n * @param options to be passed to fs_watch\n * @param handlers container for event listener functions\n */\nconst setFsWatchListener = (path, fullPath, options, handlers) => {\n    const { listener, errHandler, rawEmitter } = handlers;\n    let cont = FsWatchInstances.get(fullPath);\n    let watcher;\n    if (!options.persistent) {\n        watcher = createFsWatchInstance(path, options, listener, errHandler, rawEmitter);\n        if (!watcher)\n            return;\n        return watcher.close.bind(watcher);\n    }\n    if (cont) {\n        addAndConvert(cont, KEY_LISTENERS, listener);\n        addAndConvert(cont, KEY_ERR, errHandler);\n        addAndConvert(cont, KEY_RAW, rawEmitter);\n    }\n    else {\n        watcher = createFsWatchInstance(path, options, fsWatchBroadcast.bind(null, fullPath, KEY_LISTENERS), errHandler, // no need to use broadcast here\n        fsWatchBroadcast.bind(null, fullPath, KEY_RAW));\n        if (!watcher)\n            return;\n        watcher.on(EV.ERROR, async (error) => {\n            const broadcastErr = fsWatchBroadcast.bind(null, fullPath, KEY_ERR);\n            if (cont)\n                cont.watcherUnusable = true; // documented since Node 10.4.1\n            // Workaround for https://github.com/joyent/node/issues/4337\n            if (isWindows && error.code === 'EPERM') {\n                try {\n                    const fd = await open(path, 'r');\n                    await fd.close();\n                    broadcastErr(error);\n                }\n                catch (err) {\n                    // do nothing\n                }\n            }\n            else {\n                broadcastErr(error);\n            }\n        });\n        cont = {\n            listeners: listener,\n            errHandlers: errHandler,\n            rawEmitters: rawEmitter,\n            watcher,\n        };\n        FsWatchInstances.set(fullPath, cont);\n    }\n    // const index = cont.listeners.indexOf(listener);\n    // removes this instance's listeners and closes the underlying fs_watch\n    // instance if there are no more listeners left\n    return () => {\n        delFromSet(cont, KEY_LISTENERS, listener);\n        delFromSet(cont, KEY_ERR, errHandler);\n        delFromSet(cont, KEY_RAW, rawEmitter);\n        if (isEmptySet(cont.listeners)) {\n            // Check to protect against issue gh-730.\n            // if (cont.watcherUnusable) {\n            cont.watcher.close();\n            // }\n            FsWatchInstances.delete(fullPath);\n            HANDLER_KEYS.forEach(clearItem(cont));\n            // @ts-ignore\n            cont.watcher = undefined;\n            Object.freeze(cont);\n        }\n    };\n};\n// fs_watchFile helpers\n// object to hold per-process fs_watchFile instances\n// (may be shared across chokidar FSWatcher instances)\nconst FsWatchFileInstances = new Map();\n/**\n * Instantiates the fs_watchFile interface or binds listeners\n * to an existing one covering the same file system entry\n * @param path to be watched\n * @param fullPath absolute path\n * @param options options to be passed to fs_watchFile\n * @param handlers container for event listener functions\n * @returns closer\n */\nconst setFsWatchFileListener = (path, fullPath, options, handlers) => {\n    const { listener, rawEmitter } = handlers;\n    let cont = FsWatchFileInstances.get(fullPath);\n    // let listeners = new Set();\n    // let rawEmitters = new Set();\n    const copts = cont && cont.options;\n    if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) {\n        // \"Upgrade\" the watcher to persistence or a quicker interval.\n        // This creates some unlikely edge case issues if the user mixes\n        // settings in a very weird way, but solving for those cases\n        // doesn't seem worthwhile for the added complexity.\n        // listeners = cont.listeners;\n        // rawEmitters = cont.rawEmitters;\n        unwatchFile(fullPath);\n        cont = undefined;\n    }\n    if (cont) {\n        addAndConvert(cont, KEY_LISTENERS, listener);\n        addAndConvert(cont, KEY_RAW, rawEmitter);\n    }\n    else {\n        // TODO\n        // listeners.add(listener);\n        // rawEmitters.add(rawEmitter);\n        cont = {\n            listeners: listener,\n            rawEmitters: rawEmitter,\n            options,\n            watcher: watchFile(fullPath, options, (curr, prev) => {\n                foreach(cont.rawEmitters, (rawEmitter) => {\n                    rawEmitter(EV.CHANGE, fullPath, { curr, prev });\n                });\n                const currmtime = curr.mtimeMs;\n                if (curr.size !== prev.size || currmtime > prev.mtimeMs || currmtime === 0) {\n                    foreach(cont.listeners, (listener) => listener(path, curr));\n                }\n            }),\n        };\n        FsWatchFileInstances.set(fullPath, cont);\n    }\n    // const index = cont.listeners.indexOf(listener);\n    // Removes this instance's listeners and closes the underlying fs_watchFile\n    // instance if there are no more listeners left.\n    return () => {\n        delFromSet(cont, KEY_LISTENERS, listener);\n        delFromSet(cont, KEY_RAW, rawEmitter);\n        if (isEmptySet(cont.listeners)) {\n            FsWatchFileInstances.delete(fullPath);\n            unwatchFile(fullPath);\n            cont.options = cont.watcher = undefined;\n            Object.freeze(cont);\n        }\n    };\n};\n/**\n * @mixin\n */\nexport class NodeFsHandler {\n    fsw;\n    _boundHandleError;\n    constructor(fsW) {\n        this.fsw = fsW;\n        this._boundHandleError = (error) => fsW._handleError(error);\n    }\n    /**\n     * Watch file for changes with fs_watchFile or fs_watch.\n     * @param path to file or dir\n     * @param listener on fs change\n     * @returns closer for the watcher instance\n     */\n    _watchWithNodeFs(path, listener) {\n        const opts = this.fsw.options;\n        const directory = sp.dirname(path);\n        const basename = sp.basename(path);\n        const parent = this.fsw._getWatchedDir(directory);\n        parent.add(basename);\n        const absolutePath = sp.resolve(path);\n        const options = {\n            persistent: opts.persistent,\n        };\n        if (!listener)\n            listener = EMPTY_FN;\n        let closer;\n        if (opts.usePolling) {\n            const enableBin = opts.interval !== opts.binaryInterval;\n            options.interval = enableBin && isBinaryPath(basename) ? opts.binaryInterval : opts.interval;\n            closer = setFsWatchFileListener(path, absolutePath, options, {\n                listener,\n                rawEmitter: this.fsw._emitRaw,\n            });\n        }\n        else {\n            closer = setFsWatchListener(path, absolutePath, options, {\n                listener,\n                errHandler: this._boundHandleError,\n                rawEmitter: this.fsw._emitRaw,\n            });\n        }\n        return closer;\n    }\n    /**\n     * Watch a file and emit add event if warranted.\n     * @returns closer for the watcher instance\n     */\n    _handleFile(file, stats, initialAdd) {\n        if (this.fsw.closed) {\n            return;\n        }\n        const dirname = sp.dirname(file);\n        const basename = sp.basename(file);\n        const parent = this.fsw._getWatchedDir(dirname);\n        // stats is always present\n        let prevStats = stats;\n        // if the file is already being watched, do nothing\n        if (parent.has(basename))\n            return;\n        const listener = async (path, newStats) => {\n            if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5))\n                return;\n            if (!newStats || newStats.mtimeMs === 0) {\n                try {\n                    const newStats = await stat(file);\n                    if (this.fsw.closed)\n                        return;\n                    // Check that change event was not fired because of changed only accessTime.\n                    const at = newStats.atimeMs;\n                    const mt = newStats.mtimeMs;\n                    if (!at || at <= mt || mt !== prevStats.mtimeMs) {\n                        this.fsw._emit(EV.CHANGE, file, newStats);\n                    }\n                    if ((isMacos || isLinux || isFreeBSD) && prevStats.ino !== newStats.ino) {\n                        this.fsw._closeFile(path);\n                        prevStats = newStats;\n                        const closer = this._watchWithNodeFs(file, listener);\n                        if (closer)\n                            this.fsw._addPathCloser(path, closer);\n                    }\n                    else {\n                        prevStats = newStats;\n                    }\n                }\n                catch (error) {\n                    // Fix issues where mtime is null but file is still present\n                    this.fsw._remove(dirname, basename);\n                }\n                // add is about to be emitted if file not already tracked in parent\n            }\n            else if (parent.has(basename)) {\n                // Check that change event was not fired because of changed only accessTime.\n                const at = newStats.atimeMs;\n                const mt = newStats.mtimeMs;\n                if (!at || at <= mt || mt !== prevStats.mtimeMs) {\n                    this.fsw._emit(EV.CHANGE, file, newStats);\n                }\n                prevStats = newStats;\n            }\n        };\n        // kick off the watcher\n        const closer = this._watchWithNodeFs(file, listener);\n        // emit an add event if we're supposed to\n        if (!(initialAdd && this.fsw.options.ignoreInitial) && this.fsw._isntIgnored(file)) {\n            if (!this.fsw._throttle(EV.ADD, file, 0))\n                return;\n            this.fsw._emit(EV.ADD, file, stats);\n        }\n        return closer;\n    }\n    /**\n     * Handle symlinks encountered while reading a dir.\n     * @param entry returned by readdirp\n     * @param directory path of dir being read\n     * @param path of this item\n     * @param item basename of this item\n     * @returns true if no more processing is needed for this entry.\n     */\n    async _handleSymlink(entry, directory, path, item) {\n        if (this.fsw.closed) {\n            return;\n        }\n        const full = entry.fullPath;\n        const dir = this.fsw._getWatchedDir(directory);\n        if (!this.fsw.options.followSymlinks) {\n            // watch symlink directly (don't follow) and detect changes\n            this.fsw._incrReadyCount();\n            let linkPath;\n            try {\n                linkPath = await fsrealpath(path);\n            }\n            catch (e) {\n                this.fsw._emitReady();\n                return true;\n            }\n            if (this.fsw.closed)\n                return;\n            if (dir.has(item)) {\n                if (this.fsw._symlinkPaths.get(full) !== linkPath) {\n                    this.fsw._symlinkPaths.set(full, linkPath);\n                    this.fsw._emit(EV.CHANGE, path, entry.stats);\n                }\n            }\n            else {\n                dir.add(item);\n                this.fsw._symlinkPaths.set(full, linkPath);\n                this.fsw._emit(EV.ADD, path, entry.stats);\n            }\n            this.fsw._emitReady();\n            return true;\n        }\n        // don't follow the same symlink more than once\n        if (this.fsw._symlinkPaths.has(full)) {\n            return true;\n        }\n        this.fsw._symlinkPaths.set(full, true);\n    }\n    _handleRead(directory, initialAdd, wh, target, dir, depth, throttler) {\n        // Normalize the directory name on Windows\n        directory = sp.join(directory, '');\n        const throttleKey = target ? `${directory}:${target}` : directory;\n        throttler = this.fsw._throttle('readdir', throttleKey, 1000);\n        if (!throttler)\n            return;\n        const previous = this.fsw._getWatchedDir(wh.path);\n        const current = new Set();\n        let stream = this.fsw._readdirp(directory, {\n            fileFilter: (entry) => wh.filterPath(entry),\n            directoryFilter: (entry) => wh.filterDir(entry),\n        });\n        if (!stream)\n            return;\n        stream\n            .on(STR_DATA, async (entry) => {\n            if (this.fsw.closed) {\n                stream = undefined;\n                return;\n            }\n            const item = entry.path;\n            let path = sp.join(directory, item);\n            current.add(item);\n            if (entry.stats.isSymbolicLink() &&\n                (await this._handleSymlink(entry, directory, path, item))) {\n                return;\n            }\n            if (this.fsw.closed) {\n                stream = undefined;\n                return;\n            }\n            // Files that present in current directory snapshot\n            // but absent in previous are added to watch list and\n            // emit `add` event.\n            if (item === target || (!target && !previous.has(item))) {\n                this.fsw._incrReadyCount();\n                // ensure relativeness of path is preserved in case of watcher reuse\n                path = sp.join(dir, sp.relative(dir, path));\n                this._addToNodeFs(path, initialAdd, wh, depth + 1);\n            }\n        })\n            .on(EV.ERROR, this._boundHandleError);\n        return new Promise((resolve, reject) => {\n            if (!stream)\n                return reject();\n            stream.once(STR_END, () => {\n                if (this.fsw.closed) {\n                    stream = undefined;\n                    return;\n                }\n                const wasThrottled = throttler ? throttler.clear() : false;\n                resolve(undefined);\n                // Files that absent in current directory snapshot\n                // but present in previous emit `remove` event\n                // and are removed from @watched[directory].\n                previous\n                    .getChildren()\n                    .filter((item) => {\n                    return item !== directory && !current.has(item);\n                })\n                    .forEach((item) => {\n                    this.fsw._remove(directory, item);\n                });\n                stream = undefined;\n                // one more time for any missed in case changes came in extremely quickly\n                if (wasThrottled)\n                    this._handleRead(directory, false, wh, target, dir, depth, throttler);\n            });\n        });\n    }\n    /**\n     * Read directory to add / remove files from `@watched` list and re-read it on change.\n     * @param dir fs path\n     * @param stats\n     * @param initialAdd\n     * @param depth relative to user-supplied path\n     * @param target child path targeted for watch\n     * @param wh Common watch helpers for this path\n     * @param realpath\n     * @returns closer for the watcher instance.\n     */\n    async _handleDir(dir, stats, initialAdd, depth, target, wh, realpath) {\n        const parentDir = this.fsw._getWatchedDir(sp.dirname(dir));\n        const tracked = parentDir.has(sp.basename(dir));\n        if (!(initialAdd && this.fsw.options.ignoreInitial) && !target && !tracked) {\n            this.fsw._emit(EV.ADD_DIR, dir, stats);\n        }\n        // ensure dir is tracked (harmless if redundant)\n        parentDir.add(sp.basename(dir));\n        this.fsw._getWatchedDir(dir);\n        let throttler;\n        let closer;\n        const oDepth = this.fsw.options.depth;\n        if ((oDepth == null || depth <= oDepth) && !this.fsw._symlinkPaths.has(realpath)) {\n            if (!target) {\n                await this._handleRead(dir, initialAdd, wh, target, dir, depth, throttler);\n                if (this.fsw.closed)\n                    return;\n            }\n            closer = this._watchWithNodeFs(dir, (dirPath, stats) => {\n                // if current directory is removed, do nothing\n                if (stats && stats.mtimeMs === 0)\n                    return;\n                this._handleRead(dirPath, false, wh, target, dir, depth, throttler);\n            });\n        }\n        return closer;\n    }\n    /**\n     * Handle added file, directory, or glob pattern.\n     * Delegates call to _handleFile / _handleDir after checks.\n     * @param path to file or ir\n     * @param initialAdd was the file added at watch instantiation?\n     * @param priorWh depth relative to user-supplied path\n     * @param depth Child path actually targeted for watch\n     * @param target Child path actually targeted for watch\n     */\n    async _addToNodeFs(path, initialAdd, priorWh, depth, target) {\n        const ready = this.fsw._emitReady;\n        if (this.fsw._isIgnored(path) || this.fsw.closed) {\n            ready();\n            return false;\n        }\n        const wh = this.fsw._getWatchHelpers(path);\n        if (priorWh) {\n            wh.filterPath = (entry) => priorWh.filterPath(entry);\n            wh.filterDir = (entry) => priorWh.filterDir(entry);\n        }\n        // evaluate what is at the path we're being asked to watch\n        try {\n            const stats = await statMethods[wh.statMethod](wh.watchPath);\n            if (this.fsw.closed)\n                return;\n            if (this.fsw._isIgnored(wh.watchPath, stats)) {\n                ready();\n                return false;\n            }\n            const follow = this.fsw.options.followSymlinks;\n            let closer;\n            if (stats.isDirectory()) {\n                const absPath = sp.resolve(path);\n                const targetPath = follow ? await fsrealpath(path) : path;\n                if (this.fsw.closed)\n                    return;\n                closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath);\n                if (this.fsw.closed)\n                    return;\n                // preserve this symlink's target path\n                if (absPath !== targetPath && targetPath !== undefined) {\n                    this.fsw._symlinkPaths.set(absPath, targetPath);\n                }\n            }\n            else if (stats.isSymbolicLink()) {\n                const targetPath = follow ? await fsrealpath(path) : path;\n                if (this.fsw.closed)\n                    return;\n                const parent = sp.dirname(wh.watchPath);\n                this.fsw._getWatchedDir(parent).add(wh.watchPath);\n                this.fsw._emit(EV.ADD, wh.watchPath, stats);\n                closer = await this._handleDir(parent, stats, initialAdd, depth, path, wh, targetPath);\n                if (this.fsw.closed)\n                    return;\n                // preserve this symlink's target path\n                if (targetPath !== undefined) {\n                    this.fsw._symlinkPaths.set(sp.resolve(path), targetPath);\n                }\n            }\n            else {\n                closer = this._handleFile(wh.watchPath, stats, initialAdd);\n            }\n            ready();\n            if (closer)\n                this.fsw._addPathCloser(path, closer);\n            return false;\n        }\n        catch (error) {\n            if (this.fsw._handleError(error)) {\n                ready();\n                return path;\n            }\n        }\n    }\n}\n","import chokidar, { type FSWatcher } from \"chokidar\";\nimport { statSync } from \"fs\";\nimport { open, stat } from \"fs/promises\";\n\nexport interface ConversationWatcherEvents {\n  /** Fires once per new newline-terminated line appended to a watched file. */\n  onNewLine?: (filePath: string, line: string) => void;\n  /**\n   * Fires once per chokidar read with ALL new lines from that read, batched.\n   * When set, it REPLACES the per-line onNewLine dispatch for that file —\n   * callers pick one. Lets a burst of appended lines collapse into a single\n   * downstream cache write + WebSocket broadcast.\n   */\n  onNewLines?: (filePath: string, lines: string[]) => void;\n  /** Fires when chokidar reports an add/change/unlink at the directory level. */\n  onConversationChanged?: (filePath: string) => void | Promise<void>;\n  /** Fires when a tailed file is deleted (per-file watcher unlink event). */\n  onFileDeleted?: (filePath: string) => void;\n  /** Reported errors per file. */\n  onError?: (filePath: string, error: Error) => void;\n}\n\ninterface WatchedFile {\n  watcher: FSWatcher;\n  offset: number;\n  // Async-read re-entrancy guard: `reading` is set while a readNewLines is in\n  // flight; `pending` records that a change arrived during that read so the\n  // in-flight loop re-runs once more after it finishes.\n  reading: boolean;\n  pending: boolean;\n}\n\n/**\n * Chokidar-backed replacement for src/file-watcher.ts.\n *\n *   - watch(filePath)      → tail a single JSONL file, emitting onNewLine\n *                            for each appended line.\n *   - watchDirectory(dir)  → mark cache dirty on add/change/unlink events\n *                            for any file inside the directory.\n *\n * Per the refactor plan, file watching is an OPTIMIZATION; correctness\n * still relies on refresh=1 / the latest HDD conversation id check.\n */\nexport class ConversationWatcher {\n  private files = new Map<string, WatchedFile>();\n  private directories = new Map<string, FSWatcher>();\n  private onNewLine: ConversationWatcherEvents[\"onNewLine\"];\n  private onNewLines: ConversationWatcherEvents[\"onNewLines\"];\n  private onConversationChanged: ConversationWatcherEvents[\"onConversationChanged\"];\n  private onFileDeleted: ConversationWatcherEvents[\"onFileDeleted\"];\n  private onError: ConversationWatcherEvents[\"onError\"];\n\n  constructor(events: ConversationWatcherEvents = {}) {\n    this.onNewLine = events.onNewLine;\n    this.onNewLines = events.onNewLines;\n    this.onConversationChanged = events.onConversationChanged;\n    this.onFileDeleted = events.onFileDeleted;\n    this.onError = events.onError;\n  }\n\n  watch(filePath: string): void {\n    if (this.files.has(filePath)) return;\n\n    let offset: number;\n    try {\n      offset = statSync(filePath).size;\n    } catch {\n      offset = 0;\n    }\n\n    const watcher = chokidar.watch(filePath, {\n      ignoreInitial: true,\n      awaitWriteFinish: { stabilityThreshold: 50, pollInterval: 25 },\n    });\n\n    watcher.on(\"change\", () => {\n      void this.readNewLines(filePath);\n    });\n    watcher.on(\"add\", () => {\n      void this.readNewLines(filePath);\n    });\n    watcher.on(\"unlink\", () => this.onFileDeleted?.(filePath));\n    watcher.on(\"error\", (err) => {\n      const error = err instanceof Error ? err : new Error(String(err));\n      this.onError?.(filePath, error);\n    });\n\n    this.files.set(filePath, { watcher, offset, reading: false, pending: false });\n  }\n\n  unwatch(filePath: string): void {\n    const entry = this.files.get(filePath);\n    if (!entry) return;\n    void entry.watcher.close();\n    this.files.delete(filePath);\n  }\n\n  /**\n   * Watch a directory of conversation JSONL files. Fires\n   * onConversationChanged for any add/change/unlink event so the caller\n   * can mark the cache dirty without scanning everything immediately.\n   */\n  watchDirectory(directory: string): void {\n    if (this.directories.has(directory)) return;\n    const watcher = chokidar.watch(directory, {\n      ignoreInitial: true,\n      awaitWriteFinish: { stabilityThreshold: 500, pollInterval: 100 },\n    });\n    const fire = (filePath: string) => {\n      void Promise.resolve(this.onConversationChanged?.(filePath)).catch(() => {\n        // best-effort\n      });\n    };\n    watcher.on(\"add\", fire);\n    watcher.on(\"change\", fire);\n    watcher.on(\"unlink\", fire);\n    watcher.on(\"error\", (err) => {\n      const error = err instanceof Error ? err : new Error(String(err));\n      this.onError?.(directory, error);\n    });\n    this.directories.set(directory, watcher);\n  }\n\n  unwatchDirectory(directory: string): void {\n    const watcher = this.directories.get(directory);\n    if (!watcher) return;\n    void watcher.close();\n    this.directories.delete(directory);\n  }\n\n  dispose(): void {\n    for (const [path] of this.files) this.unwatch(path);\n    for (const [dir] of this.directories) this.unwatchDirectory(dir);\n  }\n\n  private async readNewLines(filePath: string): Promise<void> {\n    const entry = this.files.get(filePath);\n    if (!entry) return;\n\n    // Coalesce: if a read is already running, flag that another change arrived;\n    // the in-flight loop will pick up the freshly-appended bytes before exiting.\n    if (entry.reading) {\n      entry.pending = true;\n      return;\n    }\n    entry.reading = true;\n\n    try {\n      // Loop so bytes appended during a read (or while dispatching) are caught\n      // without re-entering — preserves offset correctness under async I/O.\n      for (;;) {\n        const st = await stat(filePath);\n        // size <= offset also covers truncation/rotation, exactly as before.\n        if (st.size <= entry.offset) break;\n\n        const readFrom = entry.offset;\n        const bytesToRead = st.size - readFrom;\n        const buf = Buffer.alloc(bytesToRead);\n        const fh = await open(filePath, \"r\");\n        try {\n          await fh.read(buf, 0, bytesToRead, readFrom);\n        } finally {\n          await fh.close();\n        }\n        // Advance by exactly what we read (NOT a re-stat'd size): the file may\n        // have grown again mid-read; the next loop iteration's stat catches it.\n        // This reproduces the old `offset = stat.size` semantics, including the\n        // drop of a trailing partial line (no \\n yet) via filter(Boolean).\n        entry.offset = readFrom + bytesToRead;\n\n        // The watcher may have been closed while we awaited; don't emit then.\n        if (!this.files.has(filePath)) return;\n\n        const lines = buf.toString(\"utf-8\").split(\"\\n\").filter(Boolean);\n        if (this.onNewLines) {\n          this.onNewLines(filePath, lines);\n        } else {\n          for (const line of lines) this.onNewLine?.(filePath, line);\n        }\n\n        if (entry.pending) {\n          entry.pending = false;\n          continue;\n        }\n        break;\n      }\n    } catch (err) {\n      this.onError?.(filePath, err instanceof Error ? err : new Error(String(err)));\n    } finally {\n      entry.reading = false;\n      // If a change arrived while this read was in flight but the loop exited\n      // before consuming it (e.g. an error broke out of the loop), the pending\n      // bytes would otherwise sit unread until the next write. Re-arm once so\n      // they're picked up — guarded by files.has so a disposed watcher stays put.\n      if (entry.pending && this.files.has(filePath)) {\n        entry.pending = false;\n        void this.readNewLines(filePath);\n      }\n    }\n  }\n}\n","import { existsSync } from \"fs\";\nimport type { ConversationCache } from \"../../conversation-cache\";\nimport { isAgentFile } from \"./isAgentConversation\";\n\nexport interface PruneAgentConversationsResult {\n  scanned: number;\n  pruned: number;\n  missing: number;\n}\n\n// Walks conversation_meta once at startup and deletes any row whose JSONL has\n// the sdk-cli marker. Idempotent. Safe to call on every boot — the second run\n// will simply find nothing to delete.\nexport function pruneAgentConversations(cache: ConversationCache): PruneAgentConversationsResult {\n  const db = cache.getDatabase();\n  const rows = db.prepare(\"SELECT id, file_path FROM conversation_meta\").all() as Array<{\n    id: string;\n    file_path: string;\n  }>;\n\n  let pruned = 0;\n  let missing = 0;\n  for (const row of rows) {\n    if (!existsSync(row.file_path)) {\n      missing += 1;\n      continue;\n    }\n    if (isAgentFile(row.file_path, cache.getAgentEntrypoints())) {\n      cache.deleteByFilePath(row.file_path);\n      pruned += 1;\n    }\n  }\n\n  return { scanned: rows.length, pruned, missing };\n}\n","/**\n * Resolve a user-visible title for a ProjectChat row.\n *\n * Mobile (ConversationListItem.tsx) renders `title?.trim() || pathSuffix ||\n * ''`, so when title and projectPath are both blank the row appears empty.\n * This helper produces a non-empty title for every input by falling back\n * through title → slug-ish projectName → path suffix → short id.\n */\nexport function deriveProjectChatTitle(input: {\n  title: string | null | undefined;\n  projectName: string | null | undefined;\n  projectPath: string | null | undefined;\n  id: string;\n}): string {\n  const trimmed = input.title?.trim();\n  if (trimmed) return trimmed;\n  const name = input.projectName?.trim();\n  if (name) return name;\n  const pathSuffix = input.projectPath\n    ? input.projectPath.split(/[/\\\\]/).filter(Boolean).slice(-2).join(\"/\")\n    : \"\";\n  if (pathSuffix) return pathSuffix;\n  return `Untitled · ${input.id.slice(0, 8)}`;\n}\n","import type { AskOption, AskQuestion } from \"../../types\";\n\ntype ContentBlock = {\n  type: string;\n  name?: string;\n  id?: string;\n  input?: unknown;\n  [key: string]: unknown;\n};\n\ninterface JsonlLineShape {\n  content?: ContentBlock[] | string;\n  message?: { content?: ContentBlock[] | string };\n}\n\nfunction normalizeContent(raw: ContentBlock[] | string | null | undefined): ContentBlock[] {\n  if (Array.isArray(raw)) return raw;\n  if (typeof raw === \"string\") return [{ type: \"text\", text: raw }];\n  return [];\n}\n\nfunction coerceOptions(raw: unknown): AskOption[] | null {\n  if (!Array.isArray(raw)) return null;\n  const out: AskOption[] = [];\n  for (const o of raw) {\n    if (o && typeof o === \"object\" && typeof (o as AskOption).label === \"string\") {\n      const opt = o as { label: string; description?: unknown; preview?: unknown };\n      out.push({\n        label: opt.label,\n        description: typeof opt.description === \"string\" ? opt.description : \"\",\n        ...(typeof opt.preview === \"string\" ? { preview: opt.preview } : {}),\n      });\n    }\n  }\n  return out.length > 0 ? out : null;\n}\n\nfunction coerceQuestions(raw: unknown): AskQuestion[] | null {\n  if (!Array.isArray(raw)) return null;\n  const out: AskQuestion[] = [];\n  for (const q of raw) {\n    if (!q || typeof q !== \"object\") continue;\n    const qq = q as {\n      question?: unknown;\n      header?: unknown;\n      multiSelect?: unknown;\n      options?: unknown;\n    };\n    const options = coerceOptions(qq.options);\n    if (typeof qq.question !== \"string\" || !options) continue;\n    out.push({\n      question: qq.question,\n      header: typeof qq.header === \"string\" ? qq.header : \"\",\n      multiSelect: qq.multiSelect === true,\n      options,\n    });\n  }\n  return out.length > 0 ? out : null;\n}\n\nexport function detectAskUserQuestion(\n  rawLine: string,\n): { toolUseId: string; questions: AskQuestion[] } | null {\n  let parsed: JsonlLineShape;\n  try {\n    parsed = JSON.parse(rawLine) as JsonlLineShape;\n  } catch {\n    return null;\n  }\n  const blocks = normalizeContent(parsed.message?.content ?? parsed.content);\n  for (const b of blocks) {\n    if (b.type === \"tool_use\" && b.name === \"AskUserQuestion\" && typeof b.id === \"string\") {\n      const input = b.input as { questions?: unknown } | undefined;\n      const questions = coerceQuestions(input?.questions);\n      if (questions) return { toolUseId: b.id, questions };\n    }\n  }\n  return null;\n}\n","import type { AskQuestion, WSMessage } from \"../../types\";\nimport { detectAskUserQuestion } from \"./detectAskUserQuestion\";\n\nexport interface PendingQuestion {\n  toolUseId: string;\n  questions: AskQuestion[];\n}\n\n// Pure decision: given the new lines for a session, returns the question messages\n// to broadcast and the pending-question records to store. No I/O.\nexport function questionsFromLines(\n  sessionId: string,\n  lines: string[],\n): {\n  messages: Extract<WSMessage, { type: \"question\" }>[];\n  pending: PendingQuestion[];\n} {\n  const messages: Extract<WSMessage, { type: \"question\" }>[] = [];\n  const pending: PendingQuestion[] = [];\n  for (const line of lines) {\n    const detected = detectAskUserQuestion(line);\n    if (detected) {\n      messages.push({\n        type: \"question\",\n        sessionId,\n        toolUseId: detected.toolUseId,\n        questions: detected.questions,\n      });\n      pending.push(detected);\n    }\n  }\n  return { messages, pending };\n}\n\n// Pure decision: should the JSONL-flush path (re-)broadcast this question?\n//\n// The live-screen detector may have already broadcast the same question under a\n// synthetic `screen:…` toolUseId. When that JSONL line lands with the REAL\n// toolUseId we must re-broadcast — even though the content is identical — so the\n// client swaps the stale screen id for the real one. Otherwise the client\n// answers with the screen id and resolveAnswer rejects it as tool_use_mismatch.\n//\n// - Not shown before (different/absent content key) → broadcast (new card).\n// - Shown before AND the toolUseId changed → broadcast (re-sync the id).\n// - Shown before AND same toolUseId → suppress (true duplicate).\nexport function shouldBroadcastQuestion(args: {\n  newContentKey: string;\n  lastContentKey: string | undefined;\n  newToolUseId: string;\n  priorToolUseId: string | undefined;\n}): boolean {\n  const alreadyShown = args.lastContentKey === args.newContentKey;\n  if (!alreadyShown) return true;\n  return args.priorToolUseId !== args.newToolUseId;\n}\n","import type { AskQuestion } from \"../../types\";\n\nconst DOWN = \"\\x1b[B\";\nconst ENTER = \"\\r\";\n\nexport class UnknownOptionError extends Error {\n  constructor(\n    public readonly question: string,\n    public readonly value: string,\n  ) {\n    super(`No option labelled \"${value}\" for question \"${question}\"`);\n    this.name = \"UnknownOptionError\";\n  }\n}\n\n// v1: single-select only. Cursor starts at index 0; N downs + Enter selects index N.\n// Multi-question calls replay each question's block in the order Claude presents them.\nexport function answersToKeystrokes(\n  questions: AskQuestion[],\n  answers: Record<string, string | string[]>,\n): string {\n  let out = \"\";\n  for (const q of questions) {\n    const raw = answers[q.question];\n    if (raw === undefined) {\n      throw new Error(`Missing answer for question \"${q.question}\"`);\n    }\n    const label = Array.isArray(raw) ? raw[0] : raw; // v1 ignores extra (multiSelect is v2)\n    const target = q.options.findIndex((o) => o.label === label);\n    if (target < 0) throw new UnknownOptionError(q.question, label);\n    out += DOWN.repeat(target) + ENTER;\n  }\n  return out;\n}\n","import type { AskQuestion } from \"../../types\";\nimport { answersToKeystrokes, UnknownOptionError } from \"./answersToKeystrokes\";\n\nexport type AnswerResolution =\n  | { ok: true; keys: string }\n  | { ok: false; reason: \"no_pending_question\" | \"tool_use_mismatch\" | \"unknown_option\" };\n\nexport function resolveAnswer(\n  pending: { toolUseId: string; questions: AskQuestion[] } | undefined,\n  body: { toolUseId?: unknown; answers?: unknown },\n): AnswerResolution {\n  if (!pending) return { ok: false, reason: \"no_pending_question\" };\n  if (typeof body.toolUseId !== \"string\" || body.toolUseId !== pending.toolUseId) {\n    return { ok: false, reason: \"tool_use_mismatch\" };\n  }\n  const answers = (body.answers ?? {}) as Record<string, string | string[]>;\n  try {\n    return { ok: true, keys: answersToKeystrokes(pending.questions, answers) };\n  } catch (e) {\n    if (e instanceof UnknownOptionError) return { ok: false, reason: \"unknown_option\" };\n    throw e;\n  }\n}\n","// src/agent/dedupe.ts\n//\n// Bounded LRU for per-session progress-event dedupe. Implementation uses the\n// fact that Map iterates in insertion order — re-inserting a key moves it to\n// the end, which is exactly LRU semantics with no extra bookkeeping.\n//\n// Spec §7.1: this is the milestone-B dedupe. The map lives on the session\n// record and dies with the session. Postgres-backed durability is option D,\n// deferred — see tb-multi-agent docs/plans/postgres-dedupe.md.\n\nexport interface ProgressDedupeLRU {\n  hasSeen(eventId: string): boolean;\n  readonly size: number;\n}\n\nexport function createProgressDedupeLRU(capacity: number): ProgressDedupeLRU {\n  if (!Number.isFinite(capacity) || capacity < 1) {\n    throw new Error(`dedupe LRU capacity must be >= 1, got ${capacity}`);\n  }\n  const map = new Map<string, true>();\n\n  return {\n    hasSeen(eventId: string): boolean {\n      if (map.has(eventId)) {\n        // Refresh recency: remove + reinsert moves to most-recent position.\n        map.delete(eventId);\n        map.set(eventId, true);\n        return true;\n      }\n      map.set(eventId, true);\n      if (map.size > capacity) {\n        // Evict the oldest entry (the first key in insertion order).\n        const oldest = map.keys().next().value;\n        if (oldest !== undefined) map.delete(oldest);\n      }\n      return false;\n    },\n    get size(): number {\n      return map.size;\n    },\n  };\n}\n","import { createProgressDedupeLRU } from \"./agent/dedupe\";\nimport type {\n  DiscoveredProcess,\n  ManagedSession,\n  SessionCursor,\n  SessionListPage,\n  SessionListQuery,\n  SessionResponse,\n  SessionSortKey,\n  SortOrder,\n} from \"./types\";\n\nexport class SessionStore {\n  private managed = new Map<string, ManagedSession>();\n  private discovered = new Map<number, DiscoveredProcess>();\n\n  addManaged(session: ManagedSession): void {\n    this.managed.set(session.id, session);\n  }\n\n  /**\n   * Multi-agent mode only. Attach a dedupe LRU to a session record. Idempotent —\n   * calling twice keeps the existing LRU (and its contents).\n   */\n  initAgentSession(sessionId: string, dedupeCapacity: number): void {\n    const session = this.managed.get(sessionId);\n    if (!session) return;\n    if (session.progressDedupeIds) return;\n    session.progressDedupeIds = createProgressDedupeLRU(dedupeCapacity);\n  }\n\n  updateManaged(sessionId: string, updates: Partial<ManagedSession>): ManagedSession | null {\n    const session = this.managed.get(sessionId);\n    if (!session) return null;\n    Object.assign(session, updates);\n    return session;\n  }\n\n  removeManaged(sessionId: string): boolean {\n    return this.managed.delete(sessionId);\n  }\n\n  getManaged(sessionId: string): ManagedSession | null {\n    return this.managed.get(sessionId) ?? null;\n  }\n\n  setDiscovered(processes: DiscoveredProcess[]): void {\n    this.discovered.clear();\n    for (const proc of processes) {\n      this.discovered.set(proc.pid, proc);\n    }\n  }\n\n  listManaged(): ManagedSession[] {\n    return Array.from(this.managed.values());\n  }\n\n  // Build the session list: live PTY sessions (managed) merged with externally\n  // discovered Claude processes. Managed sessions keyed by JSONL UUID take\n  // priority — discovered processes with the same UUID are skipped.\n  list(ptyAttachedIds: Set<string>): SessionResponse[] {\n    const results: SessionResponse[] = [];\n    const seenIds = new Set<string>();\n\n    for (const s of this.managed.values()) {\n      results.push(managedToResponse(s, ptyAttachedIds.has(s.id)));\n      seenIds.add(s.id);\n    }\n\n    for (const d of this.discovered.values()) {\n      if (!d.conversationId) continue;\n      if (seenIds.has(d.conversationId)) continue;\n      results.push(discoveredToResponse(d, d.conversationId));\n      seenIds.add(d.conversationId);\n    }\n\n    return results;\n  }\n\n  get(sessionId: string, ptyAttachedIds: Set<string>): SessionResponse | null {\n    const managed = this.managed.get(sessionId);\n    if (managed) return managedToResponse(managed, ptyAttachedIds.has(sessionId));\n\n    for (const d of this.discovered.values()) {\n      if (d.conversationId === sessionId) return discoveredToResponse(d, sessionId);\n    }\n\n    return null;\n  }\n\n  // Paginated, sorted, filtered view over the same merged data list() exposes.\n  // The discovery cache can mutate the underlying set between requests, so the\n  // cursor encodes both the chosen sort key value and the session id as a\n  // tiebreaker. New sessions appearing mid-scan are picked up on the next\n  // refetch — see plan for caveats.\n  paginate(ptyAttachedIds: Set<string>, query: SessionListQuery): SessionListPage {\n    const all = this.list(ptyAttachedIds);\n\n    const filtered = query.status?.length\n      ? all.filter((s) => query.status?.includes(s.status))\n      : all;\n\n    const sorted = [...filtered].sort(makeComparator(query.sortBy, query.order));\n\n    const total = sorted.length;\n\n    const startIdx = query.cursor\n      ? findCursorBoundary(sorted, decodeCursor(query.cursor), query.sortBy, query.order)\n      : 0;\n    const page = sorted.slice(startIdx, startIdx + query.limit);\n    const last = page[page.length - 1];\n    const nextCursor =\n      last && startIdx + page.length < sorted.length\n        ? encodeCursor({ k: getSortValue(last, query.sortBy) ?? \"\", id: last.id })\n        : null;\n\n    return { sessions: page, nextCursor, total };\n  }\n}\n\n// Cursor encoding is opaque to clients: base64url(JSON({ k, id })).\nexport function encodeCursor(c: SessionCursor): string {\n  return Buffer.from(JSON.stringify(c), \"utf8\").toString(\"base64url\");\n}\n\nexport function decodeCursor(s: string): SessionCursor {\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(Buffer.from(s, \"base64url\").toString(\"utf8\"));\n  } catch {\n    throw new Error(\"INVALID_CURSOR\");\n  }\n  if (\n    !parsed ||\n    typeof parsed !== \"object\" ||\n    typeof (parsed as SessionCursor).id !== \"string\" ||\n    ![\"string\", \"number\"].includes(typeof (parsed as SessionCursor).k)\n  ) {\n    throw new Error(\"INVALID_CURSOR\");\n  }\n  return parsed as SessionCursor;\n}\n\nfunction getSortValue(s: SessionResponse, key: SessionSortKey): string | number | undefined {\n  switch (key) {\n    case \"startedAt\":\n      return s.startedAt;\n    case \"lastActivityAt\":\n      return s.lastActivityAt ?? s.startedAt;\n    case \"projectName\":\n      return s.projectName;\n    case \"status\":\n      return s.status;\n  }\n}\n\nfunction compareValues(a: string | number | undefined, b: string | number | undefined): number {\n  // Undefined sorts last regardless of order; callers normalise via getSortValue\n  // so this branch only fires for genuinely missing values.\n  if (a === undefined && b === undefined) return 0;\n  if (a === undefined) return 1;\n  if (b === undefined) return -1;\n  if (typeof a === \"number\" && typeof b === \"number\") return a - b;\n  return String(a).localeCompare(String(b));\n}\n\nfunction makeComparator(key: SessionSortKey, order: SortOrder) {\n  const dir = order === \"asc\" ? 1 : -1;\n  return (a: SessionResponse, b: SessionResponse): number => {\n    const cmp = compareValues(getSortValue(a, key), getSortValue(b, key)) * dir;\n    if (cmp !== 0) return cmp;\n    // Tiebreaker on id is always ascending so the total order is stable\n    // regardless of `order`.\n    return a.id.localeCompare(b.id);\n  };\n}\n\n// Returns the index of the first element strictly *after* the cursor under the\n// chosen ordering. Linear scan is fine: total session counts are in the\n// hundreds, not millions.\nfunction findCursorBoundary(\n  sorted: SessionResponse[],\n  cursor: SessionCursor,\n  key: SessionSortKey,\n  order: SortOrder,\n): number {\n  const dir = order === \"asc\" ? 1 : -1;\n  for (let i = 0; i < sorted.length; i++) {\n    const item = sorted[i];\n    const cmp = compareValues(getSortValue(item, key), cursor.k) * dir;\n    if (cmp > 0) return i;\n    if (cmp === 0 && item.id.localeCompare(cursor.id) > 0) return i;\n  }\n  return sorted.length;\n}\n\nfunction managedToResponse(s: ManagedSession, ptyAttached: boolean): SessionResponse {\n  return {\n    id: s.id,\n    conversationId: s.id,\n    status: s.status,\n    projectPath: s.projectPath,\n    projectName: s.projectName,\n    branch: s.branch,\n    lastOutput: s.lastOutput,\n    elapsedMs: (s.completedAt ?? new Date()).getTime() - s.startedAt.getTime(),\n    promptCount: s.promptCount,\n    startedAt: s.startedAt.toISOString(),\n    completedAt: s.completedAt?.toISOString() ?? null,\n    ptyAttached,\n    ...(s.projectId != null && { projectId: s.projectId }),\n    ...(s.sessionName != null && { sessionName: s.sessionName }),\n    ...(s.model != null && { model: s.model }),\n    ...(s.account != null && { account: s.account }),\n    ...(s.messageCount != null && { messageCount: s.messageCount }),\n    ...(s.preview != null && { preview: s.preview }),\n    ...(s.firstMessageText != null && { firstMessageText: s.firstMessageText }),\n    ...(s.firstMessageAt != null && { firstMessageAt: s.firstMessageAt.toISOString() }),\n    ...(s.lastMessageText != null && { lastMessageText: s.lastMessageText }),\n    ...(s.lastMessageAt != null && { lastMessageAt: s.lastMessageAt.toISOString() }),\n    ...(s.lastActivityAt != null && { lastActivityAt: s.lastActivityAt.toISOString() }),\n    ...(s.filePath != null && { filePath: s.filePath }),\n    ...(s.failureReason != null && { failureReason: s.failureReason }),\n    ...(s.resumedFromConversationId != null && {\n      resumedFromConversationId: s.resumedFromConversationId,\n    }),\n  };\n}\n\nfunction discoveredToResponse(d: DiscoveredProcess, conversationId: string): SessionResponse {\n  return {\n    id: conversationId,\n    conversationId,\n    status: \"idle\",\n    projectPath: d.projectPath,\n    projectName: d.projectName,\n    branch: d.branch,\n    lastOutput: \"\",\n    elapsedMs: Date.now() - d.startedAt.getTime(),\n    promptCount: 0,\n    startedAt: d.startedAt.toISOString(),\n    completedAt: null,\n    ptyAttached: false,\n    pid: d.pid,\n  };\n}\n","import { randomBytes } from \"crypto\";\nimport { mkdir, writeFile } from \"fs/promises\";\nimport heicConvert from \"heic-convert\";\nimport { join } from \"path\";\n\nconst UPLOAD_DIR_NAME = \".threadbase-uploads\";\nconst MAX_BYTES = 25 * 1024 * 1024; // 25MB\n\nconst HEIC_MIMES = new Set([\"image/heic\", \"image/heif\"]);\n\nconst MIME_TO_EXT: Record<string, string> = {\n  \"image/jpeg\": \".jpg\",\n  \"image/png\": \".png\",\n  \"image/gif\": \".gif\",\n  \"image/webp\": \".webp\",\n  \"image/heic\": \".jpg\",\n  \"image/heif\": \".jpg\",\n  \"application/pdf\": \".pdf\",\n  \"application/msword\": \".doc\",\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": \".docx\",\n  \"text/plain\": \".txt\",\n  \"text/javascript\": \".js\",\n  \"application/typescript\": \".ts\",\n  \"application/json\": \".json\",\n  \"text/csv\": \".csv\",\n};\n\nexport interface SaveUploadInput {\n  sessionId: string;\n  projectPath: string;\n  originalName: string;\n  mimeType: string;\n  dataBase64: string;\n}\n\nexport interface SavedUpload {\n  id: string;\n  filePath: string;\n  originalName: string;\n  mimeType: string;\n  sizeBytes: number;\n}\n\nexport async function saveUploadFile(input: SaveUploadInput): Promise<SavedUpload> {\n  let buffer = Buffer.from(input.dataBase64, \"base64\");\n  if (buffer.length === 0) throw new Error(\"Empty file\");\n  if (buffer.length > MAX_BYTES) throw new Error(`File exceeds ${MAX_BYTES} bytes`);\n\n  let { mimeType } = input;\n  let originalName = input.originalName;\n\n  if (HEIC_MIMES.has(mimeType)) {\n    buffer = Buffer.from(await heicConvert({ buffer, format: \"JPEG\", quality: 0.85 }));\n    mimeType = \"image/jpeg\";\n    originalName = originalName.replace(/\\.(heic|heif)$/i, \".jpg\");\n  }\n\n  const id = `up_${randomBytes(8).toString(\"hex\")}`;\n  const safeName = sanitizeFilename(originalName) || `file${MIME_TO_EXT[mimeType] ?? \"\"}`;\n  const dir = join(input.projectPath, UPLOAD_DIR_NAME, input.sessionId);\n  await mkdir(dir, { recursive: true });\n\n  const filePath = join(dir, `${Date.now()}-${id}-${safeName}`);\n  await writeFile(filePath, buffer);\n\n  return {\n    id,\n    filePath,\n    originalName: safeName,\n    mimeType,\n    sizeBytes: buffer.length,\n  };\n}\n\nfunction sanitizeFilename(name: string): string {\n  // Take only the basename (block path traversal)\n  const base = name.split(/[\\\\/]/).pop() ?? \"\";\n  // Strip leading dots; keep all printable Unicode (charCode >= 32, != 127)\n  const cleaned = base\n    .replace(/^\\.+/, \"\")\n    .split(\"\")\n    .filter((c) => c.charCodeAt(0) >= 32 && c.charCodeAt(0) !== 127)\n    .join(\"\");\n  return cleaned;\n}\n","import { createHash } from \"node:crypto\";\n\n/**\n * Inputs that uniquely identify a conversation's current state for the\n * purpose of a conditional fetch. These all live on the parsed `Conversation`\n * and must be read AFTER `findConversationByUuid`'s staleness refresh — never\n * from a pre-refresh snapshot — so the validator reflects the same state the\n * response body would.\n */\nexport interface ConversationEtagInput {\n  filePath: string;\n  messageCount: number;\n  timestamp: string;\n}\n\n/**\n * Derive a stable, opaque ETag for a conversation. The client never parses it;\n * it only echoes the value back via `If-None-Match`. Wrapping the inputs in a\n * hash keeps the formula changeable without the client caring.\n */\nexport function computeConversationEtag({\n  filePath,\n  messageCount,\n  timestamp,\n}: ConversationEtagInput): string {\n  const digest = createHash(\"sha1\")\n    .update(`${filePath}:${messageCount}:${timestamp}`)\n    .digest(\"hex\")\n    .slice(0, 16);\n  return `\"${digest}\"`;\n}\n","/**\n * Trailing-edge debounce: collapses calls that arrive within `waitMs` of each\n * other into a single invocation, scheduled `waitMs` after the most recent\n * call. The last call's arguments win.\n *\n * The returned function carries two extra methods:\n *   - cancel(): drop any pending invocation (use on shutdown so a timer\n *     doesn't keep the process alive).\n *   - flush():  run any pending invocation immediately (useful in tests).\n */\nexport function debounce<A extends unknown[]>(\n  fn: (...args: A) => void,\n  waitMs: number,\n): ((...args: A) => void) & { flush: () => void; cancel: () => void } {\n  let timer: ReturnType<typeof setTimeout> | null = null;\n  let lastArgs: A | null = null;\n\n  const run = () => {\n    timer = null;\n    if (lastArgs) {\n      const args = lastArgs;\n      lastArgs = null;\n      fn(...args);\n    }\n  };\n\n  const debounced = (...args: A): void => {\n    lastArgs = args;\n    if (timer) clearTimeout(timer);\n    timer = setTimeout(run, waitMs);\n  };\n\n  debounced.cancel = (): void => {\n    if (timer) clearTimeout(timer);\n    timer = null;\n    lastArgs = null;\n  };\n\n  debounced.flush = (): void => {\n    if (timer) {\n      clearTimeout(timer);\n      run();\n    }\n  };\n\n  return debounced;\n}\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n *   return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n *   return constructFrom(\n *     date, // Use constructor from the given date\n *     date.getTime() // Use the date value to create a new date\n *   );\n * }\n */\nexport function constructFrom(date, value) {\n  if (typeof date === \"function\") return date(value);\n\n  if (date && typeof date === \"object\" && constructFromSymbol in date)\n    return date[constructFromSymbol](value);\n\n  if (date instanceof Date) return new date.constructor(value);\n\n  return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n  // [TODO] Get rid of `toDate` or `constructFrom`?\n  return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n  return (\n    value instanceof Date ||\n    (typeof value === \"object\" &&\n      Object.prototype.toString.call(value) === \"[object Date]\")\n  );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { isDate } from \"./isDate.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertible into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n  return !((!isDate(date) && typeof date !== \"number\") || isNaN(+toDate(date)));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","import {\n  millisecondsInHour,\n  millisecondsInMinute,\n} from \"./constants.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link parseISO} function options.\n */\n\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n * @param options - An object with options\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport function parseISO(argument, options) {\n  const invalidDate = () => constructFrom(options?.in, NaN);\n\n  const additionalDigits = options?.additionalDigits ?? 2;\n  const dateStrings = splitDateString(argument);\n\n  let date;\n  if (dateStrings.date) {\n    const parseYearResult = parseYear(dateStrings.date, additionalDigits);\n    date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n  }\n\n  if (!date || isNaN(+date)) return invalidDate();\n\n  const timestamp = +date;\n  let time = 0;\n  let offset;\n\n  if (dateStrings.time) {\n    time = parseTime(dateStrings.time);\n    if (isNaN(time)) return invalidDate();\n  }\n\n  if (dateStrings.timezone) {\n    offset = parseTimezone(dateStrings.timezone);\n    if (isNaN(offset)) return invalidDate();\n  } else {\n    const tmpDate = new Date(timestamp + time);\n    const result = toDate(0, options?.in);\n    result.setFullYear(\n      tmpDate.getUTCFullYear(),\n      tmpDate.getUTCMonth(),\n      tmpDate.getUTCDate(),\n    );\n    result.setHours(\n      tmpDate.getUTCHours(),\n      tmpDate.getUTCMinutes(),\n      tmpDate.getUTCSeconds(),\n      tmpDate.getUTCMilliseconds(),\n    );\n    return result;\n  }\n\n  return toDate(timestamp + time + offset, options?.in);\n}\n\nconst patterns = {\n  dateTimeDelimiter: /[T ]/,\n  timeZoneDelimiter: /[Z ]/i,\n  timezone: /([Z+-].*)$/,\n};\n\nconst dateRegex =\n  /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nconst timeRegex =\n  /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nconst timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\n\nfunction splitDateString(dateString) {\n  const dateStrings = {};\n  const array = dateString.split(patterns.dateTimeDelimiter);\n  let timeString;\n\n  // The regex match should only return at maximum two array elements.\n  // [date], [time], or [date, time].\n  if (array.length > 2) {\n    return dateStrings;\n  }\n\n  if (/:/.test(array[0])) {\n    timeString = array[0];\n  } else {\n    dateStrings.date = array[0];\n    timeString = array[1];\n    if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n      dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n      timeString = dateString.substr(\n        dateStrings.date.length,\n        dateString.length,\n      );\n    }\n  }\n\n  if (timeString) {\n    const token = patterns.timezone.exec(timeString);\n    if (token) {\n      dateStrings.time = timeString.replace(token[1], \"\");\n      dateStrings.timezone = token[1];\n    } else {\n      dateStrings.time = timeString;\n    }\n  }\n\n  return dateStrings;\n}\n\nfunction parseYear(dateString, additionalDigits) {\n  const regex = new RegExp(\n    \"^(?:(\\\\d{4}|[+-]\\\\d{\" +\n      (4 + additionalDigits) +\n      \"})|(\\\\d{2}|[+-]\\\\d{\" +\n      (2 + additionalDigits) +\n      \"})$)\",\n  );\n\n  const captures = dateString.match(regex);\n  // Invalid ISO-formatted year\n  if (!captures) return { year: NaN, restDateString: \"\" };\n\n  const year = captures[1] ? parseInt(captures[1]) : null;\n  const century = captures[2] ? parseInt(captures[2]) : null;\n\n  // either year or century is null, not both\n  return {\n    year: century === null ? year : century * 100,\n    restDateString: dateString.slice((captures[1] || captures[2]).length),\n  };\n}\n\nfunction parseDate(dateString, year) {\n  // Invalid ISO-formatted year\n  if (year === null) return new Date(NaN);\n\n  const captures = dateString.match(dateRegex);\n  // Invalid ISO-formatted string\n  if (!captures) return new Date(NaN);\n\n  const isWeekDate = !!captures[4];\n  const dayOfYear = parseDateUnit(captures[1]);\n  const month = parseDateUnit(captures[2]) - 1;\n  const day = parseDateUnit(captures[3]);\n  const week = parseDateUnit(captures[4]);\n  const dayOfWeek = parseDateUnit(captures[5]) - 1;\n\n  if (isWeekDate) {\n    if (!validateWeekDate(year, week, dayOfWeek)) {\n      return new Date(NaN);\n    }\n    return dayOfISOWeekYear(year, week, dayOfWeek);\n  } else {\n    const date = new Date(0);\n    if (\n      !validateDate(year, month, day) ||\n      !validateDayOfYearDate(year, dayOfYear)\n    ) {\n      return new Date(NaN);\n    }\n    date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n    return date;\n  }\n}\n\nfunction parseDateUnit(value) {\n  return value ? parseInt(value) : 1;\n}\n\nfunction parseTime(timeString) {\n  const captures = timeString.match(timeRegex);\n  if (!captures) return NaN; // Invalid ISO-formatted time\n\n  const hours = parseTimeUnit(captures[1]);\n  const minutes = parseTimeUnit(captures[2]);\n  const seconds = parseTimeUnit(captures[3]);\n\n  if (!validateTime(hours, minutes, seconds)) {\n    return NaN;\n  }\n\n  return (\n    hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000\n  );\n}\n\nfunction parseTimeUnit(value) {\n  return (value && parseFloat(value.replace(\",\", \".\"))) || 0;\n}\n\nfunction parseTimezone(timezoneString) {\n  if (timezoneString === \"Z\") return 0;\n\n  const captures = timezoneString.match(timezoneRegex);\n  if (!captures) return 0;\n\n  const sign = captures[1] === \"+\" ? -1 : 1;\n  const hours = parseInt(captures[2]);\n  const minutes = (captures[3] && parseInt(captures[3])) || 0;\n\n  if (!validateTimezone(hours, minutes)) {\n    return NaN;\n  }\n\n  return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n  const date = new Date(0);\n  date.setUTCFullYear(isoWeekYear, 0, 4);\n  const fourthOfJanuaryDay = date.getUTCDay() || 7;\n  const diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n  date.setUTCDate(date.getUTCDate() + diff);\n  return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nconst daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nfunction isLeapYearIndex(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n\nfunction validateDate(year, month, date) {\n  return (\n    month >= 0 &&\n    month <= 11 &&\n    date >= 1 &&\n    date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28))\n  );\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n  return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\n\nfunction validateWeekDate(_year, week, day) {\n  return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\n\nfunction validateTime(hours, minutes, seconds) {\n  if (hours === 24) {\n    return minutes === 0 && seconds === 0;\n  }\n\n  return (\n    seconds >= 0 &&\n    seconds < 60 &&\n    minutes >= 0 &&\n    minutes < 60 &&\n    hours >= 0 &&\n    hours < 25\n  );\n}\n\nfunction validateTimezone(_hours, minutes) {\n  return minutes >= 0 && minutes <= 59;\n}\n\n// Fallback for modularized imports:\nexport default parseISO;\n","import { compareDesc, isValid, parseISO } from \"date-fns\";\n\n/**\n * Parse an ISO timestamp string. Returns null for null/undefined input or\n * an unparseable value rather than throwing — callers can fall back.\n */\nexport function parseIsoDateOrNull(value?: string | null): Date | null {\n  if (!value) return null;\n  const parsed = parseISO(value);\n  return isValid(parsed) ? parsed : null;\n}\n\n/**\n * Compare two ISO timestamp strings descending. Null/undefined values sort\n * last regardless of order. Used for ProjectChat list ordering and latest\n * conversation selection.\n */\nexport function compareIsoDesc(a?: string | null, b?: string | null): number {\n  const dateA = parseIsoDateOrNull(a);\n  const dateB = parseIsoDateOrNull(b);\n\n  if (!dateA && !dateB) return 0;\n  if (!dateA) return 1;\n  if (!dateB) return -1;\n\n  return compareDesc(dateA, dateB);\n}\n","import { parseIsoDateOrNull } from \"./dates\";\n\n// The on-disk mtime can run slightly ahead of the last message's own timestamp\n// (filesystem flush latency, non-message trailer lines like pr-link/mode that\n// the scanner ignores for `timestamp` but still bump mtime). Require the file\n// to be at least this much newer than the snapshot before forcing a re-scan, so\n// a single read doesn't churn the whole scanner index on every detail fetch.\nconst STALENESS_TOLERANCE_MS = 1000;\n\n/**\n * Decide whether a scanned conversation snapshot is stale relative to the\n * JSONL on disk. The scanner memoizes both its metadata index and parsed\n * conversations for the server's lifetime, so a conversation that grows after\n * the initial scan keeps serving the startup snapshot from\n * `/api/conversations/{id}`. We compare the file's mtime against the\n * snapshot's last-activity timestamp to detect that drift.\n *\n * Returns true when the file is meaningfully newer than the snapshot (a\n * re-scan is warranted). Returns false when the snapshot is current, when the\n * snapshot timestamp is unparseable (nothing to compare against — leave it),\n * or when mtime is null (stat failed — don't churn the index on a transient\n * read error).\n */\nexport function isScannedSnapshotStale(\n  snapshotTimestamp: string | null | undefined,\n  fileMtimeMs: number | null,\n): boolean {\n  if (fileMtimeMs == null) return false;\n  const snapshotDate = parseIsoDateOrNull(snapshotTimestamp);\n  if (!snapshotDate) return false;\n  return fileMtimeMs - snapshotDate.getTime() > STALENESS_TOLERANCE_MS;\n}\n","/**\n * The scanner fires onProgress once per file, so a large scan would otherwise\n * broadcast thousands of scan_progress WebSocket frames. This throttle collapses\n * them to at most one per whole-percent step, plus a guaranteed final frame when\n * the scan completes (scanned === total). Caps frames at ~101 regardless of the\n * file count, while always delivering the terminal 100% update.\n *\n * Returns a predicate: call it with each (scanned, total) tick; it returns true\n * when that tick should be broadcast. Stateful — create one per scan.\n */\nexport function createScanProgressThrottle(): (scanned: number, total: number) => boolean {\n  let lastPercent = -1;\n  return (scanned: number, total: number): boolean => {\n    // total === 0 (empty scan): emit once so clients see a terminal tick.\n    if (total <= 0) {\n      if (lastPercent === 100) return false;\n      lastPercent = 100;\n      return true;\n    }\n    const isFinal = scanned >= total;\n    const percent = Math.floor((scanned / total) * 100);\n    if (isFinal) {\n      // Always let the final tick through, even if its percent already fired.\n      lastPercent = 100;\n      return true;\n    }\n    if (percent === lastPercent) return false;\n    lastPercent = percent;\n    return true;\n  };\n}\n","import type { WebSocket } from \"ws\";\nimport type { WSMessage } from \"./types\";\n\nconst PING_INTERVAL_MS = 30_000;\n// How long to wait for a pong before treating the socket as dead.\n// Must be less than PING_INTERVAL_MS.\nconst PONG_TIMEOUT_MS = 10_000;\n\nexport class WSHub {\n  private clients = new Set<WebSocket>();\n  private pingTimer: ReturnType<typeof setInterval> | null = null;\n  // Per-socket pong-timeout handle; set when ping is sent, cleared on pong/close.\n  private pongTimers = new Map<WebSocket, ReturnType<typeof setTimeout>>();\n\n  addClient(ws: WebSocket): void {\n    this.clients.add(ws);\n\n    ws.on(\"pong\", () => {\n      const t = this.pongTimers.get(ws);\n      if (t) {\n        clearTimeout(t);\n        this.pongTimers.delete(ws);\n      }\n    });\n\n    ws.on(\"close\", () => {\n      const t = this.pongTimers.get(ws);\n      if (t) {\n        clearTimeout(t);\n        this.pongTimers.delete(ws);\n      }\n      this.clients.delete(ws);\n    });\n\n    ws.on(\"error\", () => {\n      const t = this.pongTimers.get(ws);\n      if (t) {\n        clearTimeout(t);\n        this.pongTimers.delete(ws);\n      }\n      this.clients.delete(ws);\n    });\n\n    if (!this.pingTimer && this.clients.size > 0) {\n      this.startPing();\n    }\n  }\n\n  broadcast(message: WSMessage): void {\n    const data = JSON.stringify(message);\n    const dead: WebSocket[] = [];\n\n    for (const client of this.clients) {\n      try {\n        if (client.readyState === client.OPEN) {\n          client.send(data);\n        } else {\n          dead.push(client);\n        }\n      } catch {\n        dead.push(client);\n      }\n    }\n\n    for (const client of dead) {\n      this.clients.delete(client);\n    }\n  }\n\n  unicast(ws: WebSocket, message: WSMessage): void {\n    try {\n      if (ws.readyState === ws.OPEN) {\n        ws.send(JSON.stringify(message));\n      }\n    } catch {\n      this.clients.delete(ws);\n    }\n  }\n\n  get connectionCount(): number {\n    return this.clients.size;\n  }\n\n  dispose(): void {\n    if (this.pingTimer) {\n      clearInterval(this.pingTimer);\n      this.pingTimer = null;\n    }\n    for (const [, t] of this.pongTimers) {\n      clearTimeout(t);\n    }\n    this.pongTimers.clear();\n    for (const client of this.clients) {\n      try {\n        // terminate() (not close()) so the underlying TCP socket dies\n        // immediately. A graceful close() only sends a close frame and waits\n        // for the peer's reply — a slow/backgrounded client would keep the\n        // connection (and thus the HTTP listener's port) alive until the peer\n        // ACKs, which is what stalled shutdown and caused EADDRINUSE on the\n        // next deploy.\n        client.terminate();\n      } catch {\n        // Already closed\n      }\n    }\n    this.clients.clear();\n  }\n\n  private startPing(): void {\n    this.pingTimer = setInterval(() => {\n      if (this.clients.size === 0 && this.pingTimer) {\n        clearInterval(this.pingTimer);\n        this.pingTimer = null;\n        return;\n      }\n      for (const client of this.clients) {\n        if (client.readyState !== client.OPEN) continue;\n        // WS protocol ping — client must reply with a pong frame. If no pong\n        // arrives within PONG_TIMEOUT_MS the socket is considered dead and\n        // terminated. This is what detects iOS silently killing the TCP\n        // connection without delivering a close frame to the JS layer.\n        client.ping();\n        const t = setTimeout(() => {\n          this.pongTimers.delete(client);\n          client.terminate();\n        }, PONG_TIMEOUT_MS);\n        this.pongTimers.set(client, t);\n      }\n    }, PING_INTERVAL_MS);\n  }\n}\n","import semver from \"semver\";\nimport type { UpdateConfig } from \"../schemas/updateConfig.schema\";\nimport { fetchLatestRelease, fetchReleaseByTag, type ReleaseInfo } from \"./github-releases\";\n\nexport interface CheckResult {\n  current: string;\n  latest: string | null;\n  diff: semver.ReleaseType | null;\n  wouldInstall: boolean;\n  reason: string;\n}\n\nexport interface CheckOptions {\n  currentVersion: string;\n  config: UpdateConfig;\n  pinnedVersion?: string;\n  allowMajor?: boolean;\n}\n\n/**\n * Strips tsup's build-metadata suffix (\"+abc1234-dirty\") from a version\n * string before passing it to semver. semver tolerates build metadata in\n * a few APIs but coerce gives us a clean baseline.\n */\nfunction normalizeVersion(raw: string): string {\n  const stripped = raw.split(\"+\")[0];\n  const coerced = semver.coerce(stripped);\n  if (!coerced) throw new Error(`Cannot parse version: ${raw}`);\n  return coerced.version;\n}\n\nexport async function checkForUpdate(opts: CheckOptions): Promise<CheckResult> {\n  const current = normalizeVersion(opts.currentVersion);\n\n  const target: ReleaseInfo | null = opts.pinnedVersion\n    ? await fetchReleaseByTag(opts.config.github_repo, opts.pinnedVersion)\n    : await fetchLatestRelease(opts.config.github_repo, opts.config.channel);\n\n  if (!target) {\n    return {\n      current,\n      latest: null,\n      diff: null,\n      wouldInstall: false,\n      reason: opts.pinnedVersion\n        ? `No release found for tag ${opts.pinnedVersion}`\n        : `No ${opts.config.channel} release found for ${opts.config.github_repo}`,\n    };\n  }\n\n  const latest = normalizeVersion(target.version);\n\n  if (semver.eq(current, latest)) {\n    return { current, latest, diff: null, wouldInstall: false, reason: \"Already up to date\" };\n  }\n\n  if (semver.lt(latest, current)) {\n    return {\n      current,\n      latest,\n      diff: null,\n      wouldInstall: false,\n      reason: `Current version ${current} is newer than ${opts.config.channel} (${latest})`,\n    };\n  }\n\n  const diff = semver.diff(current, latest);\n  if (!diff) {\n    return { current, latest, diff: null, wouldInstall: false, reason: \"No semver diff\" };\n  }\n\n  if (diff === \"major\" && !opts.allowMajor) {\n    return {\n      current,\n      latest,\n      diff,\n      wouldInstall: false,\n      reason: `Major bump (${current} → ${latest}). Re-run with --allow-major to install.`,\n    };\n  }\n\n  const allowList = opts.config.allow;\n  const allowed =\n    diff === \"patch\"\n      ? allowList.includes(\"patch\")\n      : diff === \"minor\"\n        ? allowList.includes(\"minor\")\n        : diff === \"major\"\n          ? allowList.includes(\"major\") || Boolean(opts.allowMajor)\n          : false;\n\n  if (!allowed) {\n    return {\n      current,\n      latest,\n      diff,\n      wouldInstall: false,\n      reason: `Diff '${diff}' not in allow list [${allowList.join(\", \")}]`,\n    };\n  }\n\n  return {\n    current,\n    latest,\n    diff,\n    wouldInstall: true,\n    reason: `Would install ${current} → ${latest} (${diff})`,\n  };\n}\n","export interface ReleaseAsset {\n  name: string;\n  browserDownloadUrl: string;\n  size: number;\n}\n\nexport interface ReleaseInfo {\n  version: string;\n  tagName: string;\n  prerelease: boolean;\n  htmlUrl: string;\n  publishedAt: string | null;\n  assets: ReleaseAsset[];\n}\n\ninterface GitHubReleaseAsset {\n  name: string;\n  browser_download_url: string;\n  size: number;\n}\n\ninterface GitHubRelease {\n  tag_name: string;\n  name: string | null;\n  prerelease: boolean;\n  draft: boolean;\n  html_url: string;\n  published_at: string | null;\n  assets: GitHubReleaseAsset[];\n}\n\nconst GITHUB_API = \"https://api.github.com\";\n\nfunction stripV(tag: string): string {\n  return tag.startsWith(\"v\") ? tag.slice(1) : tag;\n}\n\nfunction toReleaseInfo(r: GitHubRelease): ReleaseInfo {\n  return {\n    version: stripV(r.tag_name),\n    tagName: r.tag_name,\n    prerelease: r.prerelease,\n    htmlUrl: r.html_url,\n    publishedAt: r.published_at,\n    assets: (r.assets ?? []).map((a) => ({\n      name: a.name,\n      browserDownloadUrl: a.browser_download_url,\n      size: a.size,\n    })),\n  };\n}\n\nasync function ghFetch(path: string): Promise<unknown> {\n  const res = await fetch(`${GITHUB_API}${path}`, {\n    headers: {\n      Accept: \"application/vnd.github+json\",\n      \"X-GitHub-Api-Version\": \"2022-11-28\",\n    },\n  });\n  if (!res.ok) {\n    throw new Error(`GitHub API ${path} returned ${res.status} ${res.statusText}`);\n  }\n  return res.json();\n}\n\n/**\n * Fetches the newest release on the given channel. \"stable\" excludes\n * prereleases and drafts; \"next\" returns the newest prerelease (also\n * excluding drafts). Returns null if no release matches the channel.\n */\nexport async function fetchLatestRelease(\n  repo: string,\n  channel: \"stable\" | \"next\",\n): Promise<ReleaseInfo | null> {\n  if (channel === \"stable\") {\n    try {\n      const data = (await ghFetch(`/repos/${repo}/releases/latest`)) as GitHubRelease;\n      return toReleaseInfo(data);\n    } catch (err) {\n      if (err instanceof Error && err.message.includes(\"404\")) return null;\n      throw err;\n    }\n  }\n\n  const all = (await ghFetch(`/repos/${repo}/releases?per_page=30`)) as GitHubRelease[];\n  const prereleases = all.filter((r) => r.prerelease && !r.draft);\n  if (prereleases.length === 0) return null;\n  return toReleaseInfo(prereleases[0]);\n}\n\nexport async function fetchReleaseByTag(repo: string, tag: string): Promise<ReleaseInfo | null> {\n  const tagToTry = tag.startsWith(\"v\") ? tag : `v${tag}`;\n  try {\n    const data = (await ghFetch(`/repos/${repo}/releases/tags/${tagToTry}`)) as GitHubRelease;\n    return toReleaseInfo(data);\n  } catch (err) {\n    if (err instanceof Error && err.message.includes(\"404\")) {\n      try {\n        const data = (await ghFetch(`/repos/${repo}/releases/tags/${tag}`)) as GitHubRelease;\n        return toReleaseInfo(data);\n      } catch {\n        return null;\n      }\n    }\n    throw err;\n  }\n}\n","import { mkdirSync } from \"node:fs\";\nimport type { UpdateConfig } from \"../schemas/updateConfig.schema\";\nimport { countActiveSessions } from \"./active-sessions\";\nimport { isBrewInstall } from \"./brew-detect\";\nimport { checkForUpdate } from \"./check-update\";\nimport { downloadAndVerify, fetchManifest } from \"./download\";\nimport { fetchLatestRelease, fetchReleaseByTag } from \"./github-releases\";\nimport { pickArtifact } from \"./manifest\";\nimport { DOWNLOAD_DIR, downloadPath, releaseDir } from \"./paths\";\nimport { restartService, stopService } from \"./restart\";\nimport { stampVersionTxt } from \"./stamp-version\";\nimport { ensureReleasesDir, pruneOldReleases, swapCurrent } from \"./swap\";\nimport { unpackTarball } from \"./unpack\";\nimport { appendUpdateLog } from \"./update-log\";\n\nexport interface InstallOptions {\n  currentVersion: string;\n  config: UpdateConfig;\n  pinnedVersion?: string;\n  allowMajor?: boolean;\n  force?: boolean;\n  dryRun?: boolean;\n  /** Used to talk to the running streamer for the active-session defer check. */\n  runningServer?: { port: number; apiKey: string };\n}\n\nexport type InstallResult =\n  | { kind: \"no-op\"; reason: string; current: string; latest: string | null }\n  | { kind: \"unsupported-install\"; reason: string; current: string }\n  | {\n      kind: \"deferred\";\n      reason: string;\n      activeSessions: number;\n      latest: string;\n    }\n  | {\n      kind: \"dry-run\";\n      latest: string;\n      tarballUrl: string;\n    }\n  | {\n      kind: \"installed\";\n      previous: string;\n      installed: string;\n      pruned: string[];\n      restart: { method: string };\n    };\n\nexport async function runInstall(opts: InstallOptions): Promise<InstallResult> {\n  // A Homebrew install runs from the Cellar (libexec/), which this updater's\n  // file-swap never touches — downloading would orphan the new release without\n  // applying it. Refuse early and point at the supported path.\n  if (isBrewInstall()) {\n    const result = {\n      kind: \"unsupported-install\" as const,\n      reason: \"Installed via Homebrew — run `brew upgrade tb-streamer` to update.\",\n      current: opts.currentVersion,\n    };\n    appendUpdateLog(`[no-op] ${result.reason}`);\n    return result;\n  }\n\n  const check = await checkForUpdate({\n    currentVersion: opts.currentVersion,\n    config: opts.config,\n    pinnedVersion: opts.pinnedVersion,\n    allowMajor: opts.allowMajor,\n  });\n\n  appendUpdateLog(\n    `[check] current=${check.current} latest=${check.latest ?? \"none\"} status=${check.reason}`,\n  );\n\n  if (!check.wouldInstall) {\n    return { kind: \"no-op\", reason: check.reason, current: check.current, latest: check.latest };\n  }\n\n  const target = opts.pinnedVersion\n    ? await fetchReleaseByTag(opts.config.github_repo, opts.pinnedVersion)\n    : await fetchLatestRelease(opts.config.github_repo, opts.config.channel);\n\n  if (!target) {\n    return {\n      kind: \"no-op\",\n      reason: \"Release vanished between check and install\",\n      current: check.current,\n      latest: check.latest,\n    };\n  }\n\n  const targetVersion = check.latest;\n  if (!targetVersion) {\n    return {\n      kind: \"no-op\",\n      reason: \"checkForUpdate returned no latest version\",\n      current: check.current,\n      latest: null,\n    };\n  }\n\n  const manifest = await fetchManifest(target.assets);\n  const artifact = pickArtifact(manifest);\n\n  if (opts.dryRun) {\n    const asset = target.assets.find((a) => a.name === artifact.filename);\n    const tarballUrl = asset?.browserDownloadUrl ?? \"(missing)\";\n    appendUpdateLog(\n      `[dry-run] would install ${check.current} → ${targetVersion} from ${tarballUrl}`,\n    );\n    return { kind: \"dry-run\", latest: targetVersion, tarballUrl };\n  }\n\n  if (opts.config.defer_if_active_sessions && !opts.force && opts.runningServer) {\n    const active = await countActiveSessions(opts.runningServer);\n    if (active.kind === \"count\" && active.count > 0) {\n      const reason = `${active.count} active session(s); use --force to interrupt`;\n      appendUpdateLog(`[deferred] ${check.current} → ${targetVersion}: ${reason}`);\n      return { kind: \"deferred\", reason, activeSessions: active.count, latest: targetVersion };\n    }\n    if (active.kind === \"error\") {\n      // Streamer is reachable but its state is unknown — defer rather than\n      // risk killing live sessions we couldn't see.\n      const reason = `cannot determine active sessions (${active.reason}); use --force to override`;\n      appendUpdateLog(`[deferred] ${check.current} → ${targetVersion}: ${reason}`);\n      return { kind: \"deferred\", reason, activeSessions: -1, latest: targetVersion };\n    }\n    // active.kind === \"unreachable\" → streamer is down, nothing to interrupt.\n  }\n\n  ensureReleasesDir();\n  mkdirSync(DOWNLOAD_DIR, { recursive: true });\n\n  const tarballPath = downloadPath(targetVersion, artifact.filename);\n  await downloadAndVerify({ manifest, assets: target.assets, targetPath: tarballPath });\n\n  const destDir = releaseDir(targetVersion);\n  await unpackTarball({ tarballPath, destDir });\n  stampVersionTxt(destDir, targetVersion);\n\n  // On Windows the streamer process holds open handles inside\n  // ~/.threadbase/current/, which makes the directory replace inside\n  // swapCurrent fail with EBUSY. Stop the service first; restartService\n  // below will bring it back on the new version. macOS/Linux swap via\n  // atomic symlink rename and don't need this — stopService is a no-op\n  // there.\n  if (process.platform === \"win32\") {\n    await stopService().catch(() => {\n      /* best effort — swap may still succeed if the streamer wasn't running */\n    });\n  }\n\n  swapCurrent(targetVersion);\n\n  const pruned = pruneOldReleases(targetVersion);\n\n  let restartMethod = \"skipped\";\n  try {\n    const r = await restartService();\n    restartMethod = r.method;\n  } catch (err) {\n    // Restart failure is recoverable — log via return value rather than throw.\n    // The new release is on disk and `current` is repointed; next service\n    // start picks it up.\n    restartMethod = `failed: ${err instanceof Error ? err.message : String(err)}`;\n  }\n\n  const installed = {\n    kind: \"installed\" as const,\n    previous: check.current,\n    installed: targetVersion,\n    pruned,\n    restart: { method: restartMethod },\n  };\n  appendUpdateLog(\n    `[installed] ${installed.previous} → ${installed.installed} restart=${installed.restart.method}${pruned.length > 0 ? ` pruned=${pruned.length}` : \"\"}`,\n  );\n  return installed;\n}\n","export type ActiveSessionsResult =\n  | { kind: \"count\"; count: number }\n  | { kind: \"unreachable\"; reason: string }\n  | { kind: \"error\"; status?: number; reason: string };\n\n/**\n * Asks the running streamer how many sessions are mid-conversation.\n *\n * Three outcomes, intentionally distinguished so the caller can decide what\n * to do with each:\n *   - \"count\":       the streamer answered; trust the number.\n *   - \"unreachable\": connection refused, DNS failure, timeout. The streamer\n *                    is almost certainly not running, so there is no active\n *                    work to interrupt. Caller should proceed with update.\n *   - \"error\":       the streamer responded, but with a non-2xx status or\n *                    malformed body. State is unknown — caller should defer\n *                    rather than risk killing live sessions.\n */\nexport async function countActiveSessions(opts: {\n  port: number;\n  apiKey: string;\n  timeoutMs?: number;\n}): Promise<ActiveSessionsResult> {\n  const url = `http://127.0.0.1:${opts.port}/api/sessions?status=running,waiting_input&limit=1`;\n  const controller = new AbortController();\n  const timer = setTimeout(() => controller.abort(), opts.timeoutMs ?? 2000);\n\n  let res: Response;\n  try {\n    res = await fetch(url, {\n      headers: { Authorization: `Bearer ${opts.apiKey}` },\n      signal: controller.signal,\n    });\n  } catch (err) {\n    return { kind: \"unreachable\", reason: err instanceof Error ? err.message : String(err) };\n  } finally {\n    clearTimeout(timer);\n  }\n\n  if (!res.ok) {\n    return {\n      kind: \"error\",\n      status: res.status,\n      reason: `streamer returned ${res.status} ${res.statusText}`,\n    };\n  }\n\n  let body: unknown;\n  try {\n    body = await res.json();\n  } catch (err) {\n    return {\n      kind: \"error\",\n      status: res.status,\n      reason: `malformed JSON from streamer: ${err instanceof Error ? err.message : String(err)}`,\n    };\n  }\n\n  const parsed = body as { total?: unknown; sessions?: unknown };\n  if (typeof parsed.total === \"number\") return { kind: \"count\", count: parsed.total };\n  if (Array.isArray(parsed.sessions)) return { kind: \"count\", count: parsed.sessions.length };\n\n  return {\n    kind: \"error\",\n    status: res.status,\n    reason: \"streamer response missing both 'total' and 'sessions'\",\n  };\n}\n","// Detects whether the running CLI was installed by Homebrew. The built-in\n// auto-updater swaps files under ~/.threadbase/, but a brew install runs from\n// the Cellar (libexec/) — a location the updater never touches — so the swap\n// can't take effect. runInstall() uses this to refuse and point the user at\n// `brew upgrade` instead of silently downloading an update that won't apply.\n//\n// Every Homebrew prefix (Apple Silicon /opt/homebrew, Intel /usr/local,\n// linuxbrew /home/linuxbrew/.linuxbrew) installs formulae under `<prefix>/\n// Cellar/<formula>/<version>/…`, so a `/Cellar/` path segment is the reliable,\n// prefix-independent signal.\nexport function isBrewInstall(scriptPath: string = process.argv[1] ?? \"\"): boolean {\n  if (!scriptPath) return false;\n  return scriptPath.includes(\"/Cellar/\");\n}\n","import { createHash } from \"node:crypto\";\nimport { createWriteStream, mkdirSync, rmSync, statSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { pipeline } from \"node:stream/promises\";\nimport type { ReleaseAsset } from \"./github-releases\";\nimport { pickArtifact, type ReleaseManifest, ReleaseManifestSchema } from \"./manifest\";\n\nconst MANIFEST_FILENAME = \"manifest.json\";\n\n/**\n * Locates manifest.json among a release's assets, downloads it, and validates\n * its schema. Throws if missing or malformed.\n */\nexport async function fetchManifest(assets: ReleaseAsset[]): Promise<ReleaseManifest> {\n  const asset = assets.find((a) => a.name === MANIFEST_FILENAME);\n  if (!asset) {\n    throw new Error(\n      `Release has no ${MANIFEST_FILENAME} asset. Available: ${assets.map((a) => a.name).join(\", \") || \"(none)\"}`,\n    );\n  }\n  const res = await fetch(asset.browserDownloadUrl, {\n    headers: { Accept: \"application/json\" },\n  });\n  if (!res.ok) {\n    throw new Error(`Failed to download manifest: ${res.status} ${res.statusText}`);\n  }\n  const raw = (await res.json()) as unknown;\n  return ReleaseManifestSchema.parse(raw);\n}\n\n/**\n * Streams a release tarball to `targetPath` and verifies its sha256 against\n * the manifest. On hash mismatch, the partial file is deleted and an error\n * is thrown.\n */\nexport async function downloadAndVerify(opts: {\n  manifest: ReleaseManifest;\n  assets: ReleaseAsset[];\n  targetPath: string;\n}): Promise<{ path: string; bytes: number }> {\n  const { manifest, assets, targetPath } = opts;\n  const artifact = pickArtifact(manifest);\n\n  const asset = assets.find((a) => a.name === artifact.filename);\n  if (!asset) {\n    throw new Error(\n      `Manifest references ${artifact.filename} but it is not attached to the release`,\n    );\n  }\n\n  // Use dirname() rather than a \"/\"-only regex: on Windows targetPath is\n  // backslash-separated, so a forward-slash strip is a no-op and mkdirSync\n  // would create the target file itself as a directory.\n  mkdirSync(dirname(targetPath), { recursive: true });\n\n  const res = await fetch(asset.browserDownloadUrl);\n  if (!res.ok || !res.body) {\n    throw new Error(`Failed to download ${artifact.filename}: ${res.status} ${res.statusText}`);\n  }\n\n  const hash = createHash(\"sha256\");\n  const out = createWriteStream(targetPath);\n  let bytes = 0;\n\n  const measured = new TransformStream<Uint8Array, Uint8Array>({\n    transform(chunk, controller) {\n      hash.update(chunk);\n      bytes += chunk.byteLength;\n      controller.enqueue(chunk);\n    },\n  });\n\n  try {\n    await pipeline(res.body.pipeThrough(measured), out);\n  } catch (err) {\n    rmSync(targetPath, { force: true });\n    throw err;\n  }\n\n  const actual = hash.digest(\"hex\");\n  if (actual !== artifact.sha256) {\n    rmSync(targetPath, { force: true });\n    throw new Error(\n      `sha256 mismatch for ${artifact.filename}: expected ${artifact.sha256}, got ${actual}`,\n    );\n  }\n\n  const stat = statSync(targetPath);\n  if (stat.size !== artifact.size) {\n    rmSync(targetPath, { force: true });\n    throw new Error(\n      `size mismatch for ${artifact.filename}: expected ${artifact.size}, got ${stat.size}`,\n    );\n  }\n\n  return { path: targetPath, bytes };\n}\n","import { z } from \"zod\";\n\nexport const ReleaseManifestSchema = z\n  .object({\n    version: z.string(),\n    schemaVersion: z.number().int().positive(),\n    generatedAt: z.string().optional(),\n    artifacts: z.record(\n      z.string(),\n      z.object({\n        filename: z.string(),\n        sha256: z.string().regex(/^[a-f0-9]{64}$/),\n        size: z.number().int().nonnegative(),\n      }),\n    ),\n  })\n  .strict();\n\nexport type ReleaseManifest = z.infer<typeof ReleaseManifestSchema>;\n\nexport function platformKey(): string {\n  return `${process.platform}-${process.arch}`;\n}\n\nexport function pickArtifact(manifest: ReleaseManifest): ReleaseManifest[\"artifacts\"][string] {\n  const key = platformKey();\n  const artifact = manifest.artifacts[key];\n  if (!artifact) {\n    const available = Object.keys(manifest.artifacts).join(\", \") || \"(none)\";\n    throw new Error(\n      `No artifact for ${key} in release ${manifest.version}. Available: ${available}`,\n    );\n  }\n  return artifact;\n}\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport const THREADBASE_ROOT = join(homedir(), \".threadbase\");\nexport const RELEASES_DIR = join(THREADBASE_ROOT, \"releases\");\nexport const CURRENT_SYMLINK = join(THREADBASE_ROOT, \"current\");\nexport const DOWNLOAD_DIR = join(THREADBASE_ROOT, \"releases\", \".tmp\");\n\nexport function releaseDir(version: string): string {\n  return join(RELEASES_DIR, version);\n}\n\nexport function downloadPath(version: string, filename: string): string {\n  return join(DOWNLOAD_DIR, `${version}-${filename}`);\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execFileP = promisify(execFile);\n\nexport interface RestartResult {\n  method: \"launchctl\" | \"systemctl\" | \"schtasks\" | \"none\";\n  stdout: string;\n  stderr: string;\n}\n\nexport interface StopResult {\n  method: \"schtasks-end\" | \"noop\" | \"none\";\n  stdout: string;\n  stderr: string;\n}\n\nexport interface RestartOptions {\n  /** Override for tests; defaults to platform-appropriate label. */\n  serviceLabel?: string;\n}\n\n// launchd label Homebrew registers for `brew services start tb-streamer`.\n// Distinct from the deploy.sh label below, so a brew install must be detected\n// at runtime rather than assumed.\nconst BREW_LAUNCHD_LABEL = \"homebrew.mxcl.tb-streamer\";\nconst DEPLOY_LAUNCHD_LABEL = \"com.ronen.threadbase\";\n\n// Defaults match what scripts/deploy-linux.sh and scripts/deploy.ps1 actually\n// create. Env-var overrides honor the same names the deploy scripts read, so a\n// user with a customized label only configures it once. macOS is resolved\n// separately (resolveDarwinLabel) because it probes for the brew service.\nfunction resolveDefaultLabel(): string | undefined {\n  if (process.platform === \"linux\") {\n    return process.env.THREADBASE_SYSTEMD_UNIT ?? \"threadbase.service\";\n  }\n  if (process.platform === \"win32\") {\n    return process.env.THREADBASE_TASK_NAME ?? \"Threadbase\";\n  }\n  return undefined;\n}\n\n// Reports whether a launchd label is loaded for the current GUI domain. Used to\n// tell a Homebrew-managed service apart from a deploy.sh one — `launchctl print`\n// exits non-zero when the target isn't loaded.\nasync function isLaunchdLabelLoaded(uid: number, label: string): Promise<boolean> {\n  try {\n    await execFileP(\"launchctl\", [\"print\", `gui/${uid}/${label}`]);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n// macOS label resolution: explicit option → LAUNCHD_LABEL env → detected brew\n// label → deploy.sh default. The brew probe runs only when neither the option\n// nor the env var pins a label, so a configured install never pays for it.\nasync function resolveDarwinLabel(uid: number, explicit?: string): Promise<string> {\n  if (explicit) return explicit;\n  if (process.env.LAUNCHD_LABEL) return process.env.LAUNCHD_LABEL;\n  if (await isLaunchdLabelLoaded(uid, BREW_LAUNCHD_LABEL)) return BREW_LAUNCHD_LABEL;\n  return DEPLOY_LAUNCHD_LABEL;\n}\n\n/**\n * Restarts the platform service that hosts the streamer. On macOS the label is\n * resolved at runtime (brew service detected, else the deploy.sh default);\n * Linux/Windows use the platform-default label. Returns the method used and the\n * command output for logging.\n *\n * Caller (the CLI) is responsible for catching errors — a failed restart\n * after a successful swap leaves the streamer on the new version but stopped\n * until the next boot, which is recoverable.\n */\nexport async function restartService(opts: RestartOptions = {}): Promise<RestartResult> {\n  if (process.platform === \"darwin\") {\n    const uid = process.getuid?.() ?? 0;\n    const label = await resolveDarwinLabel(uid, opts.serviceLabel);\n    const { stdout, stderr } = await execFileP(\"launchctl\", [\n      \"kickstart\",\n      \"-k\",\n      `gui/${uid}/${label}`,\n    ]);\n    return { method: \"launchctl\", stdout, stderr };\n  }\n\n  const label = opts.serviceLabel ?? resolveDefaultLabel();\n  if (!label) {\n    return { method: \"none\", stdout: \"\", stderr: `Unsupported platform: ${process.platform}` };\n  }\n\n  if (process.platform === \"linux\") {\n    const { stdout, stderr } = await execFileP(\"systemctl\", [\"--user\", \"restart\", label]);\n    return { method: \"systemctl\", stdout, stderr };\n  }\n\n  if (process.platform === \"win32\") {\n    const { stdout, stderr } = await execFileP(\"schtasks.exe\", [\"/End\", \"/TN\", label]).catch(\n      (err) => ({ stdout: \"\", stderr: String(err) }),\n    );\n    const startResult = await execFileP(\"schtasks.exe\", [\"/Run\", \"/TN\", label]);\n    return {\n      method: \"schtasks\",\n      stdout: `${stdout}\\n${startResult.stdout}`,\n      stderr: `${stderr}\\n${startResult.stderr}`,\n    };\n  }\n\n  return { method: \"none\", stdout: \"\", stderr: `Unsupported platform: ${process.platform}` };\n}\n\n/**\n * Stops the platform service without restarting it. Only meaningful on\n * Windows, where the streamer process holds open handles into\n * `~/.threadbase/current/dist/cli.cjs`; replacing that directory while the\n * process is live fails with EBUSY. macOS/Linux swap via atomic symlink\n * rename and do not need a pre-swap stop — `stopService` is a no-op there.\n */\nexport async function stopService(opts: RestartOptions = {}): Promise<StopResult> {\n  if (process.platform !== \"win32\") {\n    return { method: \"noop\", stdout: \"\", stderr: \"\" };\n  }\n  const label = opts.serviceLabel ?? resolveDefaultLabel();\n  if (!label) {\n    return { method: \"none\", stdout: \"\", stderr: \"No service label resolved\" };\n  }\n  const { stdout, stderr } = await execFileP(\"schtasks.exe\", [\"/End\", \"/TN\", label]).catch(\n    (err) => ({ stdout: \"\", stderr: String(err) }),\n  );\n  return { method: \"schtasks-end\", stdout, stderr };\n}\n","import { mkdirSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\n// Stamps the runtime version next to the unpacked dist/cli.cjs so\n// getVersion() reports the freshly installed version (not whatever\n// package.json shipped inside the tarball, which is frozen at the previous\n// release because semantic-release bumps the version after the build matrix\n// has packed the tarballs).\n//\n// Kept in its own module so __tests__/install.test.ts can mock the side\n// effect via vi.mock rather than wrestling with stubbing fs.writeFileSync.\nexport function stampVersionTxt(destDir: string, version: string): void {\n  const distDir = join(destDir, \"dist\");\n  // mkdirSync handles the (defensive) case where the tarball didn't include\n  // a dist/ tree — shouldn't happen in practice, but cheaper than crashing.\n  mkdirSync(distDir, { recursive: true });\n  writeFileSync(join(distDir, \"version.txt\"), `${version}+update\\n`);\n}\n","import {\n  copyFileSync,\n  cpSync,\n  existsSync,\n  lstatSync,\n  mkdirSync,\n  readdirSync,\n  renameSync,\n  rmSync,\n  symlinkSync,\n  unlinkSync,\n} from \"node:fs\";\nimport { join } from \"node:path\";\nimport semver from \"semver\";\nimport { CURRENT_SYMLINK, RELEASES_DIR, releaseDir, THREADBASE_ROOT } from \"./paths\";\n\nconst KEEP_LAST_N = 2;\n\n/**\n * Repoints ~/.threadbase/current at the new release directory.\n *\n * macOS/Linux: atomic symlink swap via rename(2).\n * Windows: no reliable symlinks without admin — copy the release dir into\n * `current/` as a plain folder. This mirrors what the existing Windows\n * deploy script does today.\n */\nexport function swapCurrent(version: string): void {\n  const target = releaseDir(version);\n  if (!existsSync(target)) {\n    throw new Error(`Cannot swap to ${version}: ${target} does not exist`);\n  }\n\n  if (process.platform === \"win32\") {\n    // Treat CURRENT_SYMLINK as a directory we replace wholesale.\n    const tmp = `${CURRENT_SYMLINK}.new`;\n    rmSync(tmp, { recursive: true, force: true });\n    cpSync(target, tmp, { recursive: true });\n    if (existsSync(CURRENT_SYMLINK)) {\n      rmSync(CURRENT_SYMLINK, { recursive: true, force: true });\n    }\n    renameSync(tmp, CURRENT_SYMLINK);\n    // Keep cli.js in sync so launch.cmd always points to the same entry\n    // point regardless of whether the update came from the deploy script\n    // (which writes cli.js directly) or the auto-updater (which writes\n    // current/ and must mirror it here).\n    copyFileSync(join(CURRENT_SYMLINK, \"dist\", \"cli.cjs\"), join(THREADBASE_ROOT, \"cli.js\"));\n    return;\n  }\n\n  const tmpLink = `${CURRENT_SYMLINK}.new`;\n  if (existsSync(tmpLink) || lstatSafeIsSymlink(tmpLink)) {\n    unlinkSync(tmpLink);\n  }\n  symlinkSync(target, tmpLink);\n  renameSync(tmpLink, CURRENT_SYMLINK);\n\n  // Keep cli.js in sync so the launchd/systemd entry point always resolves\n  // to the new release, regardless of whether the update came from the deploy\n  // script (which writes cli.js directly) or the auto-updater (which only\n  // swaps current/ and must mirror it here).\n  const cliJs = join(THREADBASE_ROOT, \"cli.js\");\n  const tmpCliJs = `${cliJs}.new`;\n  if (existsSync(tmpCliJs) || lstatSafeIsSymlink(tmpCliJs)) unlinkSync(tmpCliJs);\n  symlinkSync(join(target, \"dist\", \"cli.cjs\"), tmpCliJs);\n  renameSync(tmpCliJs, cliJs);\n}\n\nfunction lstatSafeIsSymlink(path: string): boolean {\n  try {\n    return lstatSync(path).isSymbolicLink();\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Removes release directories beyond the most recent N (by semver), keeping\n * the currently-active one even if it would otherwise be pruned.\n */\nexport function pruneOldReleases(activeVersion: string, keep: number = KEEP_LAST_N): string[] {\n  if (!existsSync(RELEASES_DIR)) return [];\n\n  const entries = readdirSync(RELEASES_DIR, { withFileTypes: true })\n    .filter((e) => e.isDirectory() && !e.name.startsWith(\".\"))\n    .map((e) => e.name)\n    .filter((name) => semver.valid(name) !== null);\n\n  const sorted = entries.sort((a, b) => semver.rcompare(a, b));\n  const toKeep = new Set<string>(sorted.slice(0, keep));\n  toKeep.add(activeVersion);\n\n  const removed: string[] = [];\n  for (const name of sorted) {\n    if (toKeep.has(name)) continue;\n    rmSync(releaseDir(name), { recursive: true, force: true });\n    removed.push(name);\n  }\n  return removed;\n}\n\nexport function ensureReleasesDir(): void {\n  mkdirSync(RELEASES_DIR, { recursive: true });\n}\n","import { mkdirSync, rmSync } from \"node:fs\";\nimport { extract as tarExtract } from \"tar\";\n\n/**\n * Extracts a tarball into `destDir`. Wipes `destDir` first to ensure a clean\n * install — callers must ensure the streamer process is not reading from it.\n */\nexport async function unpackTarball(opts: { tarballPath: string; destDir: string }): Promise<void> {\n  const { tarballPath, destDir } = opts;\n  rmSync(destDir, { recursive: true, force: true });\n  mkdirSync(destDir, { recursive: true });\n  await tarExtract({ file: tarballPath, cwd: destDir });\n}\n","import EE from 'events'\nimport fs from 'fs'\nimport { Minipass } from 'minipass'\n\nconst writev = fs.writev\n\nconst _autoClose = Symbol('_autoClose')\nconst _close = Symbol('_close')\nconst _ended = Symbol('_ended')\nconst _fd = Symbol('_fd')\nconst _finished = Symbol('_finished')\nconst _flags = Symbol('_flags')\nconst _flush = Symbol('_flush')\nconst _handleChunk = Symbol('_handleChunk')\nconst _makeBuf = Symbol('_makeBuf')\nconst _mode = Symbol('_mode')\nconst _needDrain = Symbol('_needDrain')\nconst _onerror = Symbol('_onerror')\nconst _onopen = Symbol('_onopen')\nconst _onread = Symbol('_onread')\nconst _onwrite = Symbol('_onwrite')\nconst _open = Symbol('_open')\nconst _path = Symbol('_path')\nconst _pos = Symbol('_pos')\nconst _queue = Symbol('_queue')\nconst _read = Symbol('_read')\nconst _readSize = Symbol('_readSize')\nconst _reading = Symbol('_reading')\nconst _remain = Symbol('_remain')\nconst _size = Symbol('_size')\nconst _write = Symbol('_write')\nconst _writing = Symbol('_writing')\nconst _defaultFlag = Symbol('_defaultFlag')\nconst _errored = Symbol('_errored')\n\nexport type ReadStreamOptions =\n  Minipass.Options<Minipass.ContiguousData> & {\n    fd?: number\n    readSize?: number\n    size?: number\n    autoClose?: boolean\n  }\n\nexport type ReadStreamEvents = Minipass.Events<Minipass.ContiguousData> & {\n  open: [fd: number]\n}\n\nexport class ReadStream extends Minipass<\n  Minipass.ContiguousData,\n  Buffer,\n  ReadStreamEvents\n> {\n  [_errored]: boolean = false;\n  [_fd]?: number;\n  [_path]: string;\n  [_readSize]: number;\n  [_reading]: boolean = false;\n  [_size]: number;\n  [_remain]: number;\n  [_autoClose]: boolean\n\n  constructor(path: string, opt: ReadStreamOptions) {\n    opt = opt || {}\n    super(opt)\n\n    this.readable = true\n    this.writable = false\n\n    if (typeof path !== 'string') {\n      throw new TypeError('path must be a string')\n    }\n\n    this[_errored] = false\n    this[_fd] = typeof opt.fd === 'number' ? opt.fd : undefined\n    this[_path] = path\n    this[_readSize] = opt.readSize || 16 * 1024 * 1024\n    this[_reading] = false\n    this[_size] = typeof opt.size === 'number' ? opt.size : Infinity\n    this[_remain] = this[_size]\n    this[_autoClose] =\n      typeof opt.autoClose === 'boolean' ? opt.autoClose : true\n\n    if (typeof this[_fd] === 'number') {\n      this[_read]()\n    } else {\n      this[_open]()\n    }\n  }\n\n  get fd() {\n    return this[_fd]\n  }\n\n  get path() {\n    return this[_path]\n  }\n\n  //@ts-ignore\n  write() {\n    throw new TypeError('this is a readable stream')\n  }\n\n  //@ts-ignore\n  end() {\n    throw new TypeError('this is a readable stream')\n  }\n\n  [_open]() {\n    fs.open(this[_path], 'r', (er, fd) => this[_onopen](er, fd))\n  }\n\n  [_onopen](er?: NodeJS.ErrnoException | null, fd?: number) {\n    if (er) {\n      this[_onerror](er)\n    } else {\n      this[_fd] = fd\n      this.emit('open', fd as number)\n      this[_read]()\n    }\n  }\n\n  [_makeBuf]() {\n    return Buffer.allocUnsafe(Math.min(this[_readSize], this[_remain]))\n  }\n\n  [_read]() {\n    if (!this[_reading]) {\n      this[_reading] = true\n      const buf = this[_makeBuf]()\n      /* c8 ignore start */\n      if (buf.length === 0) {\n        return process.nextTick(() => this[_onread](null, 0, buf))\n      }\n      /* c8 ignore stop */\n      fs.read(this[_fd] as number, buf, 0, buf.length, null, (er, br, b) =>\n        this[_onread](er, br, b),\n      )\n    }\n  }\n\n  [_onread](er?: NodeJS.ErrnoException | null, br?: number, buf?: Buffer) {\n    this[_reading] = false\n    if (er) {\n      this[_onerror](er)\n    } else if (this[_handleChunk](br as number, buf as Buffer)) {\n      this[_read]()\n    }\n  }\n\n  [_close]() {\n    if (this[_autoClose] && typeof this[_fd] === 'number') {\n      const fd = this[_fd]\n      this[_fd] = undefined\n      fs.close(fd, er =>\n        er ? this.emit('error', er) : this.emit('close'),\n      )\n    }\n  }\n\n  [_onerror](er: NodeJS.ErrnoException) {\n    this[_reading] = true\n    this[_close]()\n    this.emit('error', er)\n  }\n\n  [_handleChunk](br: number, buf: Buffer) {\n    let ret = false\n    // no effect if infinite\n    this[_remain] -= br\n    if (br > 0) {\n      ret = super.write(br < buf.length ? buf.subarray(0, br) : buf)\n    }\n\n    if (br === 0 || this[_remain] <= 0) {\n      ret = false\n      this[_close]()\n      super.end()\n    }\n\n    return ret\n  }\n\n  emit<Event extends keyof ReadStreamEvents>(\n    ev: Event,\n    ...args: ReadStreamEvents[Event]\n  ): boolean {\n    switch (ev) {\n      case 'prefinish':\n      case 'finish':\n        return false\n\n      case 'drain':\n        if (typeof this[_fd] === 'number') {\n          this[_read]()\n        }\n        return false\n\n      case 'error':\n        if (this[_errored]) {\n          return false\n        }\n        this[_errored] = true\n        return super.emit(ev, ...args)\n\n      default:\n        return super.emit(ev, ...args)\n    }\n  }\n}\n\nexport class ReadStreamSync extends ReadStream {\n  [_open]() {\n    let threw = true\n    try {\n      this[_onopen](null, fs.openSync(this[_path], 'r'))\n      threw = false\n    } finally {\n      if (threw) {\n        this[_close]()\n      }\n    }\n  }\n\n  [_read]() {\n    let threw = true\n    try {\n      if (!this[_reading]) {\n        this[_reading] = true\n        do {\n          const buf = this[_makeBuf]()\n          /* c8 ignore start */\n          const br =\n            buf.length === 0\n              ? 0\n              : fs.readSync(this[_fd] as number, buf, 0, buf.length, null)\n          /* c8 ignore stop */\n          if (!this[_handleChunk](br, buf)) {\n            break\n          }\n        } while (true)\n        this[_reading] = false\n      }\n      threw = false\n    } finally {\n      if (threw) {\n        this[_close]()\n      }\n    }\n  }\n\n  [_close]() {\n    if (this[_autoClose] && typeof this[_fd] === 'number') {\n      const fd = this[_fd]\n      this[_fd] = undefined\n      fs.closeSync(fd)\n      this.emit('close')\n    }\n  }\n}\n\nexport type WriteStreamOptions = {\n  fd?: number\n  autoClose?: boolean\n  mode?: number\n  captureRejections?: boolean\n  start?: number\n  flags?: string\n}\n\nexport class WriteStream extends EE {\n  readable: false = false\n  writable: boolean = true;\n  [_errored]: boolean = false;\n  [_writing]: boolean = false;\n  [_ended]: boolean = false;\n  [_queue]: Buffer[] = [];\n  [_needDrain]: boolean = false;\n  [_path]: string;\n  [_mode]: number;\n  [_autoClose]: boolean;\n  [_fd]?: number;\n  [_defaultFlag]: boolean;\n  [_flags]: string;\n  [_finished]: boolean = false;\n  [_pos]?: number\n\n  constructor(path: string, opt: WriteStreamOptions) {\n    opt = opt || {}\n    super(opt)\n    this[_path] = path\n    this[_fd] = typeof opt.fd === 'number' ? opt.fd : undefined\n    this[_mode] = opt.mode === undefined ? 0o666 : opt.mode\n    this[_pos] = typeof opt.start === 'number' ? opt.start : undefined\n    this[_autoClose] =\n      typeof opt.autoClose === 'boolean' ? opt.autoClose : true\n\n    // truncating makes no sense when writing into the middle\n    const defaultFlag = this[_pos] !== undefined ? 'r+' : 'w'\n    this[_defaultFlag] = opt.flags === undefined\n    this[_flags] = opt.flags === undefined ? defaultFlag : opt.flags\n\n    if (this[_fd] === undefined) {\n      this[_open]()\n    }\n  }\n\n  emit(ev: string, ...args: any[]) {\n    if (ev === 'error') {\n      if (this[_errored]) {\n        return false\n      }\n      this[_errored] = true\n    }\n    return super.emit(ev, ...args)\n  }\n\n  get fd() {\n    return this[_fd]\n  }\n\n  get path() {\n    return this[_path]\n  }\n\n  [_onerror](er: NodeJS.ErrnoException) {\n    this[_close]()\n    this[_writing] = true\n    this.emit('error', er)\n  }\n\n  [_open]() {\n    fs.open(this[_path], this[_flags], this[_mode], (er, fd) =>\n      this[_onopen](er, fd),\n    )\n  }\n\n  [_onopen](er?: null | NodeJS.ErrnoException, fd?: number) {\n    if (\n      this[_defaultFlag] &&\n      this[_flags] === 'r+' &&\n      er &&\n      er.code === 'ENOENT'\n    ) {\n      this[_flags] = 'w'\n      this[_open]()\n    } else if (er) {\n      this[_onerror](er)\n    } else {\n      this[_fd] = fd\n      this.emit('open', fd)\n      if (!this[_writing]) {\n        this[_flush]()\n      }\n    }\n  }\n\n  end(buf: string, enc?: BufferEncoding): this\n  end(buf?: Buffer, enc?: undefined): this\n  end(buf?: Buffer | string, enc?: BufferEncoding): this {\n    if (buf) {\n      //@ts-ignore\n      this.write(buf, enc)\n    }\n\n    this[_ended] = true\n\n    // synthetic after-write logic, where drain/finish live\n    if (\n      !this[_writing] &&\n      !this[_queue].length &&\n      typeof this[_fd] === 'number'\n    ) {\n      this[_onwrite](null, 0)\n    }\n    return this\n  }\n\n  write(buf: string, enc?: BufferEncoding): boolean\n  write(buf: Buffer, enc?: undefined): boolean\n  write(buf: Buffer | string, enc?: BufferEncoding): boolean {\n    if (typeof buf === 'string') {\n      buf = Buffer.from(buf, enc)\n    }\n\n    if (this[_ended]) {\n      this.emit('error', new Error('write() after end()'))\n      return false\n    }\n\n    if (this[_fd] === undefined || this[_writing] || this[_queue].length) {\n      this[_queue].push(buf)\n      this[_needDrain] = true\n      return false\n    }\n\n    this[_writing] = true\n    this[_write](buf)\n    return true\n  }\n\n  [_write](buf: Buffer) {\n    fs.write(\n      this[_fd] as number,\n      buf,\n      0,\n      buf.length,\n      this[_pos],\n      (er, bw) => this[_onwrite](er, bw),\n    )\n  }\n\n  [_onwrite](er?: null | NodeJS.ErrnoException, bw?: number) {\n    if (er) {\n      this[_onerror](er)\n    } else {\n      if (this[_pos] !== undefined && typeof bw === 'number') {\n        this[_pos] += bw\n      }\n      if (this[_queue].length) {\n        this[_flush]()\n      } else {\n        this[_writing] = false\n\n        if (this[_ended] && !this[_finished]) {\n          this[_finished] = true\n          this[_close]()\n          this.emit('finish')\n        } else if (this[_needDrain]) {\n          this[_needDrain] = false\n          this.emit('drain')\n        }\n      }\n    }\n  }\n\n  [_flush]() {\n    if (this[_queue].length === 0) {\n      if (this[_ended]) {\n        this[_onwrite](null, 0)\n      }\n    } else if (this[_queue].length === 1) {\n      this[_write](this[_queue].pop() as Buffer)\n    } else {\n      const iovec = this[_queue]\n      this[_queue] = []\n      writev(this[_fd] as number, iovec, this[_pos] as number, (er, bw) =>\n        this[_onwrite](er, bw),\n      )\n    }\n  }\n\n  [_close]() {\n    if (this[_autoClose] && typeof this[_fd] === 'number') {\n      const fd = this[_fd]\n      this[_fd] = undefined\n      fs.close(fd, er =>\n        er ? this.emit('error', er) : this.emit('close'),\n      )\n    }\n  }\n}\n\nexport class WriteStreamSync extends WriteStream {\n  [_open](): void {\n    let fd\n    // only wrap in a try{} block if we know we'll retry, to avoid\n    // the rethrow obscuring the error's source frame in most cases.\n    if (this[_defaultFlag] && this[_flags] === 'r+') {\n      try {\n        fd = fs.openSync(this[_path], this[_flags], this[_mode])\n      } catch (er) {\n        if ((er as NodeJS.ErrnoException)?.code === 'ENOENT') {\n          this[_flags] = 'w'\n          return this[_open]()\n        } else {\n          throw er\n        }\n      }\n    } else {\n      fd = fs.openSync(this[_path], this[_flags], this[_mode])\n    }\n\n    this[_onopen](null, fd)\n  }\n\n  [_close]() {\n    if (this[_autoClose] && typeof this[_fd] === 'number') {\n      const fd = this[_fd]\n      this[_fd] = undefined\n      fs.closeSync(fd)\n      this.emit('close')\n    }\n  }\n\n  [_write](buf: Buffer) {\n    // throw the original, but try to close if it fails\n    let threw = true\n    try {\n      this[_onwrite](\n        null,\n        fs.writeSync(this[_fd] as number, buf, 0, buf.length, this[_pos]),\n      )\n      threw = false\n    } finally {\n      if (threw) {\n        try {\n          this[_close]()\n        } catch {\n          // ok error\n        }\n      }\n    }\n  }\n}\n","const proc =\n  typeof process === 'object' && process\n    ? process\n    : {\n        stdout: null,\n        stderr: null,\n      }\nimport { EventEmitter } from 'node:events'\nimport Stream from 'node:stream'\nimport { StringDecoder } from 'node:string_decoder'\n\n/**\n * Same as StringDecoder, but exposing the `lastNeed` flag on the type\n */\ntype SD = StringDecoder & { lastNeed: boolean }\n\nexport type { SD, Pipe, PipeProxyErrors }\n\n/**\n * Return true if the argument is a Minipass stream, Node stream, or something\n * else that Minipass can interact with.\n */\nexport const isStream = (\n  s: any\n): s is Minipass.Readable | Minipass.Writable =>\n  !!s &&\n  typeof s === 'object' &&\n  (s instanceof Minipass ||\n    s instanceof Stream ||\n    isReadable(s) ||\n    isWritable(s))\n\n/**\n * Return true if the argument is a valid {@link Minipass.Readable}\n */\nexport const isReadable = (s: any): s is Minipass.Readable =>\n  !!s &&\n  typeof s === 'object' &&\n  s instanceof EventEmitter &&\n  typeof (s as Minipass.Readable).pipe === 'function' &&\n  // node core Writable streams have a pipe() method, but it throws\n  (s as Minipass.Readable).pipe !== Stream.Writable.prototype.pipe\n\n/**\n * Return true if the argument is a valid {@link Minipass.Writable}\n */\nexport const isWritable = (s: any): s is Minipass.Readable =>\n  !!s &&\n  typeof s === 'object' &&\n  s instanceof EventEmitter &&\n  typeof (s as Minipass.Writable).write === 'function' &&\n  typeof (s as Minipass.Writable).end === 'function'\n\nconst EOF = Symbol('EOF')\nconst MAYBE_EMIT_END = Symbol('maybeEmitEnd')\nconst EMITTED_END = Symbol('emittedEnd')\nconst EMITTING_END = Symbol('emittingEnd')\nconst EMITTED_ERROR = Symbol('emittedError')\nconst CLOSED = Symbol('closed')\nconst READ = Symbol('read')\nconst FLUSH = Symbol('flush')\nconst FLUSHCHUNK = Symbol('flushChunk')\nconst ENCODING = Symbol('encoding')\nconst DECODER = Symbol('decoder')\nconst FLOWING = Symbol('flowing')\nconst PAUSED = Symbol('paused')\nconst RESUME = Symbol('resume')\nconst BUFFER = Symbol('buffer')\nconst PIPES = Symbol('pipes')\nconst BUFFERLENGTH = Symbol('bufferLength')\nconst BUFFERPUSH = Symbol('bufferPush')\nconst BUFFERSHIFT = Symbol('bufferShift')\nconst OBJECTMODE = Symbol('objectMode')\n// internal event when stream is destroyed\nconst DESTROYED = Symbol('destroyed')\n// internal event when stream has an error\nconst ERROR = Symbol('error')\nconst EMITDATA = Symbol('emitData')\nconst EMITEND = Symbol('emitEnd')\nconst EMITEND2 = Symbol('emitEnd2')\nconst ASYNC = Symbol('async')\nconst ABORT = Symbol('abort')\nconst ABORTED = Symbol('aborted')\nconst SIGNAL = Symbol('signal')\nconst DATALISTENERS = Symbol('dataListeners')\nconst DISCARDED = Symbol('discarded')\n\nconst defer = (fn: (...a: any[]) => any) => Promise.resolve().then(fn)\nconst nodefer = (fn: (...a: any[]) => any) => fn()\n\n// events that mean 'the stream is over'\n// these are treated specially, and re-emitted\n// if they are listened for after emitting.\ntype EndishEvent = 'end' | 'finish' | 'prefinish'\nconst isEndish = (ev: any): ev is EndishEvent =>\n  ev === 'end' || ev === 'finish' || ev === 'prefinish'\n\nconst isArrayBufferLike = (b: any): b is ArrayBufferLike =>\n  b instanceof ArrayBuffer ||\n  (!!b &&\n    typeof b === 'object' &&\n    b.constructor &&\n    b.constructor.name === 'ArrayBuffer' &&\n    b.byteLength >= 0)\n\nconst isArrayBufferView = (b: any): b is ArrayBufferView =>\n  !Buffer.isBuffer(b) && ArrayBuffer.isView(b)\n\n/**\n * Options that may be passed to stream.pipe()\n */\nexport interface PipeOptions {\n  /**\n   * end the destination stream when the source stream ends\n   */\n  end?: boolean\n  /**\n   * proxy errors from the source stream to the destination stream\n   */\n  proxyErrors?: boolean\n}\n\n/**\n * Internal class representing a pipe to a destination stream.\n *\n * @internal\n */\nclass Pipe<T extends unknown> {\n  src: Minipass<T>\n  dest: Minipass<any, T>\n  opts: PipeOptions\n  ondrain: () => any\n  constructor(\n    src: Minipass<T>,\n    dest: Minipass.Writable,\n    opts: PipeOptions\n  ) {\n    this.src = src\n    this.dest = dest as Minipass<any, T>\n    this.opts = opts\n    this.ondrain = () => src[RESUME]()\n    this.dest.on('drain', this.ondrain)\n  }\n  unpipe() {\n    this.dest.removeListener('drain', this.ondrain)\n  }\n  // only here for the prototype\n  /* c8 ignore start */\n  proxyErrors(_er: any) {}\n  /* c8 ignore stop */\n  end() {\n    this.unpipe()\n    if (this.opts.end) this.dest.end()\n  }\n}\n\n/**\n * Internal class representing a pipe to a destination stream where\n * errors are proxied.\n *\n * @internal\n */\nclass PipeProxyErrors<T> extends Pipe<T> {\n  unpipe() {\n    this.src.removeListener('error', this.proxyErrors)\n    super.unpipe()\n  }\n  constructor(\n    src: Minipass<T>,\n    dest: Minipass.Writable,\n    opts: PipeOptions\n  ) {\n    super(src, dest, opts)\n    this.proxyErrors = (er: Error) => this.dest.emit('error', er)\n    src.on('error', this.proxyErrors)\n  }\n}\n\nexport namespace Minipass {\n  /**\n   * Encoding used to create a stream that outputs strings rather than\n   * Buffer objects.\n   */\n  export type Encoding = BufferEncoding | 'buffer' | null\n\n  /**\n   * Any stream that Minipass can pipe into\n   */\n  export type Writable =\n    | Minipass<any, any, any>\n    | NodeJS.WriteStream\n    | (NodeJS.WriteStream & { fd: number })\n    | (EventEmitter & {\n        end(): any\n        write(chunk: any, ...args: any[]): any\n      })\n\n  /**\n   * Any stream that can be read from\n   */\n  export type Readable =\n    | Minipass<any, any, any>\n    | NodeJS.ReadStream\n    | (NodeJS.ReadStream & { fd: number })\n    | (EventEmitter & {\n        pause(): any\n        resume(): any\n        pipe(...destArgs: any[]): any\n      })\n\n  /**\n   * Utility type that can be iterated sync or async\n   */\n  export type DualIterable<T> = Iterable<T> & AsyncIterable<T>\n\n  type EventArguments = Record<string | symbol, unknown[]>\n\n  /**\n   * The listing of events that a Minipass class can emit.\n   * Extend this when extending the Minipass class, and pass as\n   * the third template argument.  The key is the name of the event,\n   * and the value is the argument list.\n   *\n   * Any undeclared events will still be allowed, but the handler will get\n   * arguments as `unknown[]`.\n   */\n  export interface Events<RType extends any = Buffer>\n    extends EventArguments {\n    readable: []\n    data: [chunk: RType]\n    error: [er: unknown]\n    abort: [reason: unknown]\n    drain: []\n    resume: []\n    end: []\n    finish: []\n    prefinish: []\n    close: []\n    [DESTROYED]: [er?: unknown]\n    [ERROR]: [er: unknown]\n  }\n\n  /**\n   * String or buffer-like data that can be joined and sliced\n   */\n  export type ContiguousData =\n    | Buffer\n    | ArrayBufferLike\n    | ArrayBufferView\n    | string\n  export type BufferOrString = Buffer | string\n\n  /**\n   * Options passed to the Minipass constructor.\n   */\n  export type SharedOptions = {\n    /**\n     * Defer all data emission and other events until the end of the\n     * current tick, similar to Node core streams\n     */\n    async?: boolean\n    /**\n     * A signal which will abort the stream\n     */\n    signal?: AbortSignal\n    /**\n     * Output string encoding. Set to `null` or `'buffer'` (or omit) to\n     * emit Buffer objects rather than strings.\n     *\n     * Conflicts with `objectMode`\n     */\n    encoding?: BufferEncoding | null | 'buffer'\n    /**\n     * Output data exactly as it was written, supporting non-buffer/string\n     * data (such as arbitrary objects, falsey values, etc.)\n     *\n     * Conflicts with `encoding`\n     */\n    objectMode?: boolean\n  }\n\n  /**\n   * Options for a string encoded output\n   */\n  export type EncodingOptions = SharedOptions & {\n    encoding: BufferEncoding\n    objectMode?: false\n  }\n\n  /**\n   * Options for contiguous data buffer output\n   */\n  export type BufferOptions = SharedOptions & {\n    encoding?: null | 'buffer'\n    objectMode?: false\n  }\n\n  /**\n   * Options for objectMode arbitrary output\n   */\n  export type ObjectModeOptions = SharedOptions & {\n    objectMode: true\n    encoding?: null\n  }\n\n  /**\n   * Utility type to determine allowed options based on read type\n   */\n  export type Options<T> =\n    | ObjectModeOptions\n    | (T extends string\n        ? EncodingOptions\n        : T extends Buffer\n        ? BufferOptions\n        : SharedOptions)\n}\n\nconst isObjectModeOptions = (\n  o: Minipass.SharedOptions\n): o is Minipass.ObjectModeOptions => !!o.objectMode\n\nconst isEncodingOptions = (\n  o: Minipass.SharedOptions\n): o is Minipass.EncodingOptions =>\n  !o.objectMode && !!o.encoding && o.encoding !== 'buffer'\n\n/**\n * Main export, the Minipass class\n *\n * `RType` is the type of data emitted, defaults to Buffer\n *\n * `WType` is the type of data to be written, if RType is buffer or string,\n * then any {@link Minipass.ContiguousData} is allowed.\n *\n * `Events` is the set of event handler signatures that this object\n * will emit, see {@link Minipass.Events}\n */\nexport class Minipass<\n    RType extends unknown = Buffer,\n    WType extends unknown = RType extends Minipass.BufferOrString\n      ? Minipass.ContiguousData\n      : RType,\n    Events extends Minipass.Events<RType> = Minipass.Events<RType>\n  >\n  extends EventEmitter\n  implements Minipass.DualIterable<RType>\n{\n  [FLOWING]: boolean = false;\n  [PAUSED]: boolean = false;\n  [PIPES]: Pipe<RType>[] = [];\n  [BUFFER]: RType[] = [];\n  [OBJECTMODE]: boolean;\n  [ENCODING]: BufferEncoding | null;\n  [ASYNC]: boolean;\n  [DECODER]: SD | null;\n  [EOF]: boolean = false;\n  [EMITTED_END]: boolean = false;\n  [EMITTING_END]: boolean = false;\n  [CLOSED]: boolean = false;\n  [EMITTED_ERROR]: unknown = null;\n  [BUFFERLENGTH]: number = 0;\n  [DESTROYED]: boolean = false;\n  [SIGNAL]?: AbortSignal;\n  [ABORTED]: boolean = false;\n  [DATALISTENERS]: number = 0;\n  [DISCARDED]: boolean = false\n\n  /**\n   * true if the stream can be written\n   */\n  writable: boolean = true\n  /**\n   * true if the stream can be read\n   */\n  readable: boolean = true\n\n  /**\n   * If `RType` is Buffer, then options do not need to be provided.\n   * Otherwise, an options object must be provided to specify either\n   * {@link Minipass.SharedOptions.objectMode} or\n   * {@link Minipass.SharedOptions.encoding}, as appropriate.\n   */\n  constructor(\n    ...args:\n      | [Minipass.ObjectModeOptions]\n      | (RType extends Buffer\n          ? [] | [Minipass.Options<RType>]\n          : [Minipass.Options<RType>])\n  ) {\n    const options: Minipass.Options<RType> = (args[0] ||\n      {}) as Minipass.Options<RType>\n    super()\n    if (options.objectMode && typeof options.encoding === 'string') {\n      throw new TypeError(\n        'Encoding and objectMode may not be used together'\n      )\n    }\n    if (isObjectModeOptions(options)) {\n      this[OBJECTMODE] = true\n      this[ENCODING] = null\n    } else if (isEncodingOptions(options)) {\n      this[ENCODING] = options.encoding\n      this[OBJECTMODE] = false\n    } else {\n      this[OBJECTMODE] = false\n      this[ENCODING] = null\n    }\n    this[ASYNC] = !!options.async\n    this[DECODER] = this[ENCODING]\n      ? (new StringDecoder(this[ENCODING]) as SD)\n      : null\n\n    //@ts-ignore - private option for debugging and testing\n    if (options && options.debugExposeBuffer === true) {\n      Object.defineProperty(this, 'buffer', { get: () => this[BUFFER] })\n    }\n    //@ts-ignore - private option for debugging and testing\n    if (options && options.debugExposePipes === true) {\n      Object.defineProperty(this, 'pipes', { get: () => this[PIPES] })\n    }\n\n    const { signal } = options\n    if (signal) {\n      this[SIGNAL] = signal\n      if (signal.aborted) {\n        this[ABORT]()\n      } else {\n        signal.addEventListener('abort', () => this[ABORT]())\n      }\n    }\n  }\n\n  /**\n   * The amount of data stored in the buffer waiting to be read.\n   *\n   * For Buffer strings, this will be the total byte length.\n   * For string encoding streams, this will be the string character length,\n   * according to JavaScript's `string.length` logic.\n   * For objectMode streams, this is a count of the items waiting to be\n   * emitted.\n   */\n  get bufferLength() {\n    return this[BUFFERLENGTH]\n  }\n\n  /**\n   * The `BufferEncoding` currently in use, or `null`\n   */\n  get encoding() {\n    return this[ENCODING]\n  }\n\n  /**\n   * @deprecated - This is a read only property\n   */\n  set encoding(_enc) {\n    throw new Error('Encoding must be set at instantiation time')\n  }\n\n  /**\n   * @deprecated - Encoding may only be set at instantiation time\n   */\n  setEncoding(_enc: Minipass.Encoding) {\n    throw new Error('Encoding must be set at instantiation time')\n  }\n\n  /**\n   * True if this is an objectMode stream\n   */\n  get objectMode() {\n    return this[OBJECTMODE]\n  }\n\n  /**\n   * @deprecated - This is a read-only property\n   */\n  set objectMode(_om) {\n    throw new Error('objectMode must be set at instantiation time')\n  }\n\n  /**\n   * true if this is an async stream\n   */\n  get ['async'](): boolean {\n    return this[ASYNC]\n  }\n  /**\n   * Set to true to make this stream async.\n   *\n   * Once set, it cannot be unset, as this would potentially cause incorrect\n   * behavior.  Ie, a sync stream can be made async, but an async stream\n   * cannot be safely made sync.\n   */\n  set ['async'](a: boolean) {\n    this[ASYNC] = this[ASYNC] || !!a\n  }\n\n  // drop everything and get out of the flow completely\n  [ABORT]() {\n    this[ABORTED] = true\n    this.emit('abort', this[SIGNAL]?.reason)\n    this.destroy(this[SIGNAL]?.reason)\n  }\n\n  /**\n   * True if the stream has been aborted.\n   */\n  get aborted() {\n    return this[ABORTED]\n  }\n  /**\n   * No-op setter. Stream aborted status is set via the AbortSignal provided\n   * in the constructor options.\n   */\n  set aborted(_) {}\n\n  /**\n   * Write data into the stream\n   *\n   * If the chunk written is a string, and encoding is not specified, then\n   * `utf8` will be assumed. If the stream encoding matches the encoding of\n   * a written string, and the state of the string decoder allows it, then\n   * the string will be passed through to either the output or the internal\n   * buffer without any processing. Otherwise, it will be turned into a\n   * Buffer object for processing into the desired encoding.\n   *\n   * If provided, `cb` function is called immediately before return for\n   * sync streams, or on next tick for async streams, because for this\n   * base class, a chunk is considered \"processed\" once it is accepted\n   * and either emitted or buffered. That is, the callback does not indicate\n   * that the chunk has been eventually emitted, though of course child\n   * classes can override this function to do whatever processing is required\n   * and call `super.write(...)` only once processing is completed.\n   */\n  write(chunk: WType, cb?: () => void): boolean\n  write(\n    chunk: WType,\n    encoding?: Minipass.Encoding,\n    cb?: () => void\n  ): boolean\n  write(\n    chunk: WType,\n    encoding?: Minipass.Encoding | (() => void),\n    cb?: () => void\n  ): boolean {\n    if (this[ABORTED]) return false\n    if (this[EOF]) throw new Error('write after end')\n\n    if (this[DESTROYED]) {\n      this.emit(\n        'error',\n        Object.assign(\n          new Error('Cannot call write after a stream was destroyed'),\n          { code: 'ERR_STREAM_DESTROYED' }\n        )\n      )\n      return true\n    }\n\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = 'utf8'\n    }\n\n    if (!encoding) encoding = 'utf8'\n\n    const fn = this[ASYNC] ? defer : nodefer\n\n    // convert array buffers and typed array views into buffers\n    // at some point in the future, we may want to do the opposite!\n    // leave strings and buffers as-is\n    // anything is only allowed if in object mode, so throw\n    if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {\n      if (isArrayBufferView(chunk)) {\n        //@ts-ignore - sinful unsafe type changing\n        chunk = Buffer.from(\n          chunk.buffer,\n          chunk.byteOffset,\n          chunk.byteLength\n        )\n      } else if (isArrayBufferLike(chunk)) {\n        //@ts-ignore - sinful unsafe type changing\n        chunk = Buffer.from(chunk)\n      } else if (typeof chunk !== 'string') {\n        throw new Error(\n          'Non-contiguous data written to non-objectMode stream'\n        )\n      }\n    }\n\n    // handle object mode up front, since it's simpler\n    // this yields better performance, fewer checks later.\n    if (this[OBJECTMODE]) {\n      // maybe impossible?\n      /* c8 ignore start */\n      if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n      /* c8 ignore stop */\n\n      if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n      else this[BUFFERPUSH](chunk as unknown as RType)\n\n      if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n      if (cb) fn(cb)\n\n      return this[FLOWING]\n    }\n\n    // at this point the chunk is a buffer or string\n    // don't buffer it up or send it to the decoder\n    if (!(chunk as Minipass.BufferOrString).length) {\n      if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n      if (cb) fn(cb)\n      return this[FLOWING]\n    }\n\n    // fast-path writing strings of same encoding to a stream with\n    // an empty buffer, skipping the buffer/decoder dance\n    if (\n      typeof chunk === 'string' &&\n      // unless it is a string already ready for us to use\n      !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)\n    ) {\n      //@ts-ignore - sinful unsafe type change\n      chunk = Buffer.from(chunk, encoding)\n    }\n\n    if (Buffer.isBuffer(chunk) && this[ENCODING]) {\n      //@ts-ignore - sinful unsafe type change\n      chunk = this[DECODER].write(chunk)\n    }\n\n    // Note: flushing CAN potentially switch us into not-flowing mode\n    if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n\n    if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n    else this[BUFFERPUSH](chunk as unknown as RType)\n\n    if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n    if (cb) fn(cb)\n\n    return this[FLOWING]\n  }\n\n  /**\n   * Low-level explicit read method.\n   *\n   * In objectMode, the argument is ignored, and one item is returned if\n   * available.\n   *\n   * `n` is the number of bytes (or in the case of encoding streams,\n   * characters) to consume. If `n` is not provided, then the entire buffer\n   * is returned, or `null` is returned if no data is available.\n   *\n   * If `n` is greater that the amount of data in the internal buffer,\n   * then `null` is returned.\n   */\n  read(n?: number | null): RType | null {\n    if (this[DESTROYED]) return null\n    this[DISCARDED] = false\n\n    if (\n      this[BUFFERLENGTH] === 0 ||\n      n === 0 ||\n      (n && n > this[BUFFERLENGTH])\n    ) {\n      this[MAYBE_EMIT_END]()\n      return null\n    }\n\n    if (this[OBJECTMODE]) n = null\n\n    if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {\n      // not object mode, so if we have an encoding, then RType is string\n      // otherwise, must be Buffer\n      this[BUFFER] = [\n        (this[ENCODING]\n          ? this[BUFFER].join('')\n          : Buffer.concat(\n              this[BUFFER] as Buffer[],\n              this[BUFFERLENGTH]\n            )) as RType,\n      ]\n    }\n\n    const ret = this[READ](n || null, this[BUFFER][0] as RType)\n    this[MAYBE_EMIT_END]()\n    return ret\n  }\n\n  [READ](n: number | null, chunk: RType) {\n    if (this[OBJECTMODE]) this[BUFFERSHIFT]()\n    else {\n      const c = chunk as Minipass.BufferOrString\n      if (n === c.length || n === null) this[BUFFERSHIFT]()\n      else if (typeof c === 'string') {\n        this[BUFFER][0] = c.slice(n) as RType\n        chunk = c.slice(0, n) as RType\n        this[BUFFERLENGTH] -= n\n      } else {\n        this[BUFFER][0] = c.subarray(n) as RType\n        chunk = c.subarray(0, n) as RType\n        this[BUFFERLENGTH] -= n\n      }\n    }\n\n    this.emit('data', chunk)\n\n    if (!this[BUFFER].length && !this[EOF]) this.emit('drain')\n\n    return chunk\n  }\n\n  /**\n   * End the stream, optionally providing a final write.\n   *\n   * See {@link Minipass#write} for argument descriptions\n   */\n  end(cb?: () => void): this\n  end(chunk: WType, cb?: () => void): this\n  end(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): this\n  end(\n    chunk?: WType | (() => void),\n    encoding?: Minipass.Encoding | (() => void),\n    cb?: () => void\n  ): this {\n    if (typeof chunk === 'function') {\n      cb = chunk as () => void\n      chunk = undefined\n    }\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = 'utf8'\n    }\n    if (chunk !== undefined) this.write(chunk, encoding)\n    if (cb) this.once('end', cb)\n    this[EOF] = true\n    this.writable = false\n\n    // if we haven't written anything, then go ahead and emit,\n    // even if we're not reading.\n    // we'll re-emit if a new 'end' listener is added anyway.\n    // This makes MP more suitable to write-only use cases.\n    if (this[FLOWING] || !this[PAUSED]) this[MAYBE_EMIT_END]()\n    return this\n  }\n\n  // don't let the internal resume be overwritten\n  [RESUME]() {\n    if (this[DESTROYED]) return\n\n    if (!this[DATALISTENERS] && !this[PIPES].length) {\n      this[DISCARDED] = true\n    }\n    this[PAUSED] = false\n    this[FLOWING] = true\n    this.emit('resume')\n    if (this[BUFFER].length) this[FLUSH]()\n    else if (this[EOF]) this[MAYBE_EMIT_END]()\n    else this.emit('drain')\n  }\n\n  /**\n   * Resume the stream if it is currently in a paused state\n   *\n   * If called when there are no pipe destinations or `data` event listeners,\n   * this will place the stream in a \"discarded\" state, where all data will\n   * be thrown away. The discarded state is removed if a pipe destination or\n   * data handler is added, if pause() is called, or if any synchronous or\n   * asynchronous iteration is started.\n   */\n  resume() {\n    return this[RESUME]()\n  }\n\n  /**\n   * Pause the stream\n   */\n  pause() {\n    this[FLOWING] = false\n    this[PAUSED] = true\n    this[DISCARDED] = false\n  }\n\n  /**\n   * true if the stream has been forcibly destroyed\n   */\n  get destroyed() {\n    return this[DESTROYED]\n  }\n\n  /**\n   * true if the stream is currently in a flowing state, meaning that\n   * any writes will be immediately emitted.\n   */\n  get flowing() {\n    return this[FLOWING]\n  }\n\n  /**\n   * true if the stream is currently in a paused state\n   */\n  get paused() {\n    return this[PAUSED]\n  }\n\n  [BUFFERPUSH](chunk: RType) {\n    if (this[OBJECTMODE]) this[BUFFERLENGTH] += 1\n    else this[BUFFERLENGTH] += (chunk as Minipass.BufferOrString).length\n    this[BUFFER].push(chunk)\n  }\n\n  [BUFFERSHIFT](): RType {\n    if (this[OBJECTMODE]) this[BUFFERLENGTH] -= 1\n    else\n      this[BUFFERLENGTH] -= (\n        this[BUFFER][0] as Minipass.BufferOrString\n      ).length\n    return this[BUFFER].shift() as RType\n  }\n\n  [FLUSH](noDrain: boolean = false) {\n    do {} while (\n      this[FLUSHCHUNK](this[BUFFERSHIFT]()) &&\n      this[BUFFER].length\n    )\n\n    if (!noDrain && !this[BUFFER].length && !this[EOF]) this.emit('drain')\n  }\n\n  [FLUSHCHUNK](chunk: RType) {\n    this.emit('data', chunk)\n    return this[FLOWING]\n  }\n\n  /**\n   * Pipe all data emitted by this stream into the destination provided.\n   *\n   * Triggers the flow of data.\n   */\n  pipe<W extends Minipass.Writable>(dest: W, opts?: PipeOptions): W {\n    if (this[DESTROYED]) return dest\n    this[DISCARDED] = false\n\n    const ended = this[EMITTED_END]\n    opts = opts || {}\n    if (dest === proc.stdout || dest === proc.stderr) opts.end = false\n    else opts.end = opts.end !== false\n    opts.proxyErrors = !!opts.proxyErrors\n\n    // piping an ended stream ends immediately\n    if (ended) {\n      if (opts.end) dest.end()\n    } else {\n      // \"as\" here just ignores the WType, which pipes don't care about,\n      // since they're only consuming from us, and writing to the dest\n      this[PIPES].push(\n        !opts.proxyErrors\n          ? new Pipe<RType>(this as Minipass<RType>, dest, opts)\n          : new PipeProxyErrors<RType>(this as Minipass<RType>, dest, opts)\n      )\n      if (this[ASYNC]) defer(() => this[RESUME]())\n      else this[RESUME]()\n    }\n\n    return dest\n  }\n\n  /**\n   * Fully unhook a piped destination stream.\n   *\n   * If the destination stream was the only consumer of this stream (ie,\n   * there are no other piped destinations or `'data'` event listeners)\n   * then the flow of data will stop until there is another consumer or\n   * {@link Minipass#resume} is explicitly called.\n   */\n  unpipe<W extends Minipass.Writable>(dest: W) {\n    const p = this[PIPES].find(p => p.dest === dest)\n    if (p) {\n      if (this[PIPES].length === 1) {\n        if (this[FLOWING] && this[DATALISTENERS] === 0) {\n          this[FLOWING] = false\n        }\n        this[PIPES] = []\n      } else this[PIPES].splice(this[PIPES].indexOf(p), 1)\n      p.unpipe()\n    }\n  }\n\n  /**\n   * Alias for {@link Minipass#on}\n   */\n  addListener<Event extends keyof Events>(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ): this {\n    return this.on(ev, handler)\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.on`, with the following\n   * behavior differences to prevent data loss and unnecessary hangs:\n   *\n   * - Adding a 'data' event handler will trigger the flow of data\n   *\n   * - Adding a 'readable' event handler when there is data waiting to be read\n   *   will cause 'readable' to be emitted immediately.\n   *\n   * - Adding an 'endish' event handler ('end', 'finish', etc.) which has\n   *   already passed will cause the event to be emitted immediately and all\n   *   handlers removed.\n   *\n   * - Adding an 'error' event handler after an error has been emitted will\n   *   cause the event to be re-emitted immediately with the error previously\n   *   raised.\n   */\n  on<Event extends keyof Events>(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ): this {\n    const ret = super.on(\n      ev as string | symbol,\n      handler as (...a: any[]) => any\n    )\n    if (ev === 'data') {\n      this[DISCARDED] = false\n      this[DATALISTENERS]++\n      if (!this[PIPES].length && !this[FLOWING]) {\n        this[RESUME]()\n      }\n    } else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) {\n      super.emit('readable')\n    } else if (isEndish(ev) && this[EMITTED_END]) {\n      super.emit(ev)\n      this.removeAllListeners(ev)\n    } else if (ev === 'error' && this[EMITTED_ERROR]) {\n      const h = handler as (...a: Events['error']) => any\n      if (this[ASYNC]) defer(() => h.call(this, this[EMITTED_ERROR]))\n      else h.call(this, this[EMITTED_ERROR])\n    }\n    return ret\n  }\n\n  /**\n   * Alias for {@link Minipass#off}\n   */\n  removeListener<Event extends keyof Events>(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ) {\n    return this.off(ev, handler)\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.off`\n   *\n   * If a 'data' event handler is removed, and it was the last consumer\n   * (ie, there are no pipe destinations or other 'data' event listeners),\n   * then the flow of data will stop until there is another consumer or\n   * {@link Minipass#resume} is explicitly called.\n   */\n  off<Event extends keyof Events>(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ) {\n    const ret = super.off(\n      ev as string | symbol,\n      handler as (...a: any[]) => any\n    )\n    // if we previously had listeners, and now we don't, and we don't\n    // have any pipes, then stop the flow, unless it's been explicitly\n    // put in a discarded flowing state via stream.resume().\n    if (ev === 'data') {\n      this[DATALISTENERS] = this.listeners('data').length\n      if (\n        this[DATALISTENERS] === 0 &&\n        !this[DISCARDED] &&\n        !this[PIPES].length\n      ) {\n        this[FLOWING] = false\n      }\n    }\n    return ret\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.removeAllListeners`\n   *\n   * If all 'data' event handlers are removed, and they were the last consumer\n   * (ie, there are no pipe destinations), then the flow of data will stop\n   * until there is another consumer or {@link Minipass#resume} is explicitly\n   * called.\n   */\n  removeAllListeners<Event extends keyof Events>(ev?: Event) {\n    const ret = super.removeAllListeners(ev as string | symbol | undefined)\n    if (ev === 'data' || ev === undefined) {\n      this[DATALISTENERS] = 0\n      if (!this[DISCARDED] && !this[PIPES].length) {\n        this[FLOWING] = false\n      }\n    }\n    return ret\n  }\n\n  /**\n   * true if the 'end' event has been emitted\n   */\n  get emittedEnd() {\n    return this[EMITTED_END]\n  }\n\n  [MAYBE_EMIT_END]() {\n    if (\n      !this[EMITTING_END] &&\n      !this[EMITTED_END] &&\n      !this[DESTROYED] &&\n      this[BUFFER].length === 0 &&\n      this[EOF]\n    ) {\n      this[EMITTING_END] = true\n      this.emit('end')\n      this.emit('prefinish')\n      this.emit('finish')\n      if (this[CLOSED]) this.emit('close')\n      this[EMITTING_END] = false\n    }\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.emit`, with the following\n   * behavior differences to prevent data loss and unnecessary hangs:\n   *\n   * If the stream has been destroyed, and the event is something other\n   * than 'close' or 'error', then `false` is returned and no handlers\n   * are called.\n   *\n   * If the event is 'end', and has already been emitted, then the event\n   * is ignored. If the stream is in a paused or non-flowing state, then\n   * the event will be deferred until data flow resumes. If the stream is\n   * async, then handlers will be called on the next tick rather than\n   * immediately.\n   *\n   * If the event is 'close', and 'end' has not yet been emitted, then\n   * the event will be deferred until after 'end' is emitted.\n   *\n   * If the event is 'error', and an AbortSignal was provided for the stream,\n   * and there are no listeners, then the event is ignored, matching the\n   * behavior of node core streams in the presense of an AbortSignal.\n   *\n   * If the event is 'finish' or 'prefinish', then all listeners will be\n   * removed after emitting the event, to prevent double-firing.\n   */\n  emit<Event extends keyof Events>(\n    ev: Event,\n    ...args: Events[Event]\n  ): boolean {\n    const data = args[0]\n    // error and close are only events allowed after calling destroy()\n    if (\n      ev !== 'error' &&\n      ev !== 'close' &&\n      ev !== DESTROYED &&\n      this[DESTROYED]\n    ) {\n      return false\n    } else if (ev === 'data') {\n      return !this[OBJECTMODE] && !data\n        ? false\n        : this[ASYNC]\n        ? (defer(() => this[EMITDATA](data as RType)), true)\n        : this[EMITDATA](data as RType)\n    } else if (ev === 'end') {\n      return this[EMITEND]()\n    } else if (ev === 'close') {\n      this[CLOSED] = true\n      // don't emit close before 'end' and 'finish'\n      if (!this[EMITTED_END] && !this[DESTROYED]) return false\n      const ret = super.emit('close')\n      this.removeAllListeners('close')\n      return ret\n    } else if (ev === 'error') {\n      this[EMITTED_ERROR] = data\n      super.emit(ERROR, data)\n      const ret =\n        !this[SIGNAL] || this.listeners('error').length\n          ? super.emit('error', data)\n          : false\n      this[MAYBE_EMIT_END]()\n      return ret\n    } else if (ev === 'resume') {\n      const ret = super.emit('resume')\n      this[MAYBE_EMIT_END]()\n      return ret\n    } else if (ev === 'finish' || ev === 'prefinish') {\n      const ret = super.emit(ev)\n      this.removeAllListeners(ev)\n      return ret\n    }\n\n    // Some other unknown event\n    const ret = super.emit(ev as string, ...args)\n    this[MAYBE_EMIT_END]()\n    return ret\n  }\n\n  [EMITDATA](data: RType) {\n    for (const p of this[PIPES]) {\n      if (p.dest.write(data as RType) === false) this.pause()\n    }\n    const ret = this[DISCARDED] ? false : super.emit('data', data)\n    this[MAYBE_EMIT_END]()\n    return ret\n  }\n\n  [EMITEND]() {\n    if (this[EMITTED_END]) return false\n\n    this[EMITTED_END] = true\n    this.readable = false\n    return this[ASYNC]\n      ? (defer(() => this[EMITEND2]()), true)\n      : this[EMITEND2]()\n  }\n\n  [EMITEND2]() {\n    if (this[DECODER]) {\n      const data = this[DECODER].end()\n      if (data) {\n        for (const p of this[PIPES]) {\n          p.dest.write(data as RType)\n        }\n        if (!this[DISCARDED]) super.emit('data', data)\n      }\n    }\n\n    for (const p of this[PIPES]) {\n      p.end()\n    }\n    const ret = super.emit('end')\n    this.removeAllListeners('end')\n    return ret\n  }\n\n  /**\n   * Return a Promise that resolves to an array of all emitted data once\n   * the stream ends.\n   */\n  async collect(): Promise<RType[] & { dataLength: number }> {\n    const buf: RType[] & { dataLength: number } = Object.assign([], {\n      dataLength: 0,\n    })\n    if (!this[OBJECTMODE]) buf.dataLength = 0\n    // set the promise first, in case an error is raised\n    // by triggering the flow here.\n    const p = this.promise()\n    this.on('data', c => {\n      buf.push(c)\n      if (!this[OBJECTMODE])\n        buf.dataLength += (c as Minipass.BufferOrString).length\n    })\n    await p\n    return buf\n  }\n\n  /**\n   * Return a Promise that resolves to the concatenation of all emitted data\n   * once the stream ends.\n   *\n   * Not allowed on objectMode streams.\n   */\n  async concat(): Promise<RType> {\n    if (this[OBJECTMODE]) {\n      throw new Error('cannot concat in objectMode')\n    }\n    const buf = await this.collect()\n    return (\n      this[ENCODING]\n        ? buf.join('')\n        : Buffer.concat(buf as Buffer[], buf.dataLength)\n    ) as RType\n  }\n\n  /**\n   * Return a void Promise that resolves once the stream ends.\n   */\n  async promise(): Promise<void> {\n    return new Promise<void>((resolve, reject) => {\n      this.on(DESTROYED, () => reject(new Error('stream destroyed')))\n      this.on('error', er => reject(er))\n      this.on('end', () => resolve())\n    })\n  }\n\n  /**\n   * Asynchronous `for await of` iteration.\n   *\n   * This will continue emitting all chunks until the stream terminates.\n   */\n  [Symbol.asyncIterator](): AsyncGenerator<RType, void, void> {\n    // set this up front, in case the consumer doesn't call next()\n    // right away.\n    this[DISCARDED] = false\n    let stopped = false\n    const stop = async (): Promise<IteratorReturnResult<void>> => {\n      this.pause()\n      stopped = true\n      return { value: undefined, done: true }\n    }\n    const next = (): Promise<IteratorResult<RType, void>> => {\n      if (stopped) return stop()\n      const res = this.read()\n      if (res !== null) return Promise.resolve({ done: false, value: res })\n\n      if (this[EOF]) return stop()\n\n      let resolve!: (res: IteratorResult<RType>) => void\n      let reject!: (er: unknown) => void\n      const onerr = (er: unknown) => {\n        this.off('data', ondata)\n        this.off('end', onend)\n        this.off(DESTROYED, ondestroy)\n        stop()\n        reject(er)\n      }\n      const ondata = (value: RType) => {\n        this.off('error', onerr)\n        this.off('end', onend)\n        this.off(DESTROYED, ondestroy)\n        this.pause()\n        resolve({ value, done: !!this[EOF] })\n      }\n      const onend = () => {\n        this.off('error', onerr)\n        this.off('data', ondata)\n        this.off(DESTROYED, ondestroy)\n        stop()\n        resolve({ done: true, value: undefined })\n      }\n      const ondestroy = () => onerr(new Error('stream destroyed'))\n      return new Promise<IteratorResult<RType>>((res, rej) => {\n        reject = rej\n        resolve = res\n        this.once(DESTROYED, ondestroy)\n        this.once('error', onerr)\n        this.once('end', onend)\n        this.once('data', ondata)\n      })\n    }\n\n    return {\n      next,\n      throw: stop,\n      return: stop,\n      [Symbol.asyncIterator]() {\n        return this\n      },\n      [Symbol.asyncDispose]: async () => {},\n    }\n  }\n\n  /**\n   * Synchronous `for of` iteration.\n   *\n   * The iteration will terminate when the internal buffer runs out, even\n   * if the stream has not yet terminated.\n   */\n  [Symbol.iterator](): Generator<RType, void, void> {\n    // set this up front, in case the consumer doesn't call next()\n    // right away.\n    this[DISCARDED] = false\n    let stopped = false\n    const stop = (): IteratorReturnResult<void> => {\n      this.pause()\n      this.off(ERROR, stop)\n      this.off(DESTROYED, stop)\n      this.off('end', stop)\n      stopped = true\n      return { done: true, value: undefined }\n    }\n\n    const next = (): IteratorResult<RType, void> => {\n      if (stopped) return stop()\n      const value = this.read()\n      return value === null ? stop() : { done: false, value }\n    }\n\n    this.once('end', stop)\n    this.once(ERROR, stop)\n    this.once(DESTROYED, stop)\n\n    return {\n      next,\n      throw: stop,\n      return: stop,\n      [Symbol.iterator]() {\n        return this\n      },\n      [Symbol.dispose]: () => {},\n    }\n  }\n\n  /**\n   * Destroy a stream, preventing it from being used for any further purpose.\n   *\n   * If the stream has a `close()` method, then it will be called on\n   * destruction.\n   *\n   * After destruction, any attempt to write data, read data, or emit most\n   * events will be ignored.\n   *\n   * If an error argument is provided, then it will be emitted in an\n   * 'error' event.\n   */\n  destroy(er?: unknown) {\n    if (this[DESTROYED]) {\n      if (er) this.emit('error', er)\n      else this.emit(DESTROYED)\n      return this\n    }\n\n    this[DESTROYED] = true\n    this[DISCARDED] = true\n\n    // throw away all buffered data, it's never coming out\n    this[BUFFER].length = 0\n    this[BUFFERLENGTH] = 0\n\n    const wc = this as Minipass<RType, WType, Events> & {\n      close?: () => void\n    }\n    if (typeof wc.close === 'function' && !this[CLOSED]) wc.close()\n\n    if (er) this.emit('error', er)\n    // if no error to emit, still reject pending promises\n    else this.emit(DESTROYED)\n\n    return this\n  }\n\n  /**\n   * Alias for {@link isStream}\n   *\n   * Former export location, maintained for backwards compatibility.\n   *\n   * @deprecated\n   */\n  static get isStream() {\n    return isStream\n  }\n}\n","import { WriteStream, WriteStreamSync } from '@isaacs/fs-minipass'\nimport type { Minipass } from 'minipass'\nimport path from 'node:path'\nimport { list } from './list.js'\nimport { makeCommand } from './make-command.js'\nimport type {\n  TarOptions,\n  TarOptionsFile,\n  TarOptionsSync,\n  TarOptionsSyncFile,\n} from './options.js'\nimport { Pack, PackSync } from './pack.js'\n\nconst createFileSync = (opt: TarOptionsSyncFile, files: string[]) => {\n  const p = new PackSync(opt)\n  const stream = new WriteStreamSync(opt.file, {\n    mode: opt.mode || 0o666,\n  })\n  p.pipe(stream as unknown as Minipass.Writable)\n  addFilesSync(p, files)\n}\n\nconst createFile = (opt: TarOptionsFile, files: string[]) => {\n  const p = new Pack(opt)\n  const stream = new WriteStream(opt.file, {\n    mode: opt.mode || 0o666,\n  })\n  p.pipe(stream as unknown as Minipass.Writable)\n\n  const promise = new Promise<void>((res, rej) => {\n    stream.on('error', rej)\n    stream.on('close', res)\n    p.on('error', rej)\n  })\n\n  addFilesAsync(p, files).catch(er => p.emit('error', er))\n\n  return promise\n}\n\nconst addFilesSync = (p: PackSync, files: string[]) => {\n  files.forEach(file => {\n    if (file.charAt(0) === '@') {\n      list({\n        file: path.resolve(p.cwd, file.slice(1)),\n        sync: true,\n        noResume: true,\n        onReadEntry: entry => p.add(entry),\n      })\n    } else {\n      p.add(file)\n    }\n  })\n  p.end()\n}\n\nconst addFilesAsync = async (p: Pack, files: string[]): Promise<void> => {\n  for (const file of files) {\n    if (file.charAt(0) === '@') {\n      await list({\n        file: path.resolve(String(p.cwd), file.slice(1)),\n        noResume: true,\n        onReadEntry: entry => {\n          p.add(entry)\n        },\n      })\n    } else {\n      p.add(file)\n    }\n  }\n  p.end()\n}\n\nconst createSync = (opt: TarOptionsSync, files: string[]) => {\n  const p = new PackSync(opt)\n  addFilesSync(p, files)\n  return p\n}\n\nconst createAsync = (opt: TarOptions, files: string[]) => {\n  const p = new Pack(opt)\n  addFilesAsync(p, files).catch(er => p.emit('error', er))\n  return p\n}\n\nexport const create = makeCommand(\n  createFileSync,\n  createFile,\n  createSync,\n  createAsync,\n  (_opt, files) => {\n    if (!files?.length) {\n      throw new TypeError('no paths specified to add to archive')\n    }\n  },\n)\n","// tar -t\nimport * as fsm from '@isaacs/fs-minipass'\nimport fs from 'node:fs'\nimport { dirname, parse } from 'path'\nimport { makeCommand } from './make-command.js'\nimport type {\n  TarOptions,\n  TarOptionsFile,\n  TarOptionsSyncFile,\n} from './options.js'\nimport { Parser } from './parse.js'\nimport { stripTrailingSlashes } from './strip-trailing-slashes.js'\n\nconst onReadEntryFunction = (opt: TarOptions) => {\n  const onReadEntry = opt.onReadEntry\n  opt.onReadEntry =\n    onReadEntry ?\n      e => {\n        onReadEntry(e)\n        e.resume()\n      }\n    : e => e.resume()\n}\n\n// construct a filter that limits the file entries listed\n// include child entries if a dir is included\nexport const filesFilter = (opt: TarOptions, files: string[]) => {\n  const map = new Map<string, boolean>(\n    files.map(f => [stripTrailingSlashes(f), true]),\n  )\n  const filter = opt.filter\n\n  const mapHas = (file: string, r: string = ''): boolean => {\n    const root = r || parse(file).root || '.'\n    let ret: boolean\n    if (file === root) ret = false\n    else {\n      const m = map.get(file)\n      ret = m !== undefined ? m : mapHas(dirname(file), root)\n    }\n\n    map.set(file, ret)\n    return ret\n  }\n\n  opt.filter =\n    filter ?\n      (file, entry) =>\n        filter(file, entry) && mapHas(stripTrailingSlashes(file))\n    : file => mapHas(stripTrailingSlashes(file))\n}\n\nconst listFileSync = (opt: TarOptionsSyncFile) => {\n  const p = new Parser(opt)\n  const file = opt.file\n  let fd: number | undefined\n  try {\n    fd = fs.openSync(file, 'r')\n    const stat: fs.Stats = fs.fstatSync(fd)\n    const readSize: number = opt.maxReadSize || 16 * 1024 * 1024\n    if (stat.size < readSize) {\n      const buf = Buffer.allocUnsafe(stat.size)\n      const read = fs.readSync(fd, buf, 0, stat.size, 0)\n      p.end(read === buf.byteLength ? buf : buf.subarray(0, read))\n    } else {\n      let pos = 0\n      const buf = Buffer.allocUnsafe(readSize)\n      while (pos < stat.size) {\n        const bytesRead = fs.readSync(fd, buf, 0, readSize, pos)\n        if (bytesRead === 0) break\n        pos += bytesRead\n        p.write(buf.subarray(0, bytesRead))\n      }\n      p.end()\n    }\n  } finally {\n    if (typeof fd === 'number') {\n      try {\n        fs.closeSync(fd)\n        /* c8 ignore next */\n      } catch {}\n    }\n  }\n}\n\nconst listFile = (\n  opt: TarOptionsFile,\n  _files: string[],\n): Promise<void> => {\n  const parse = new Parser(opt)\n  const readSize = opt.maxReadSize || 16 * 1024 * 1024\n\n  const file = opt.file\n  const p = new Promise<void>((resolve, reject) => {\n    parse.on('error', reject)\n    parse.on('end', resolve)\n\n    fs.stat(file, (er, stat) => {\n      if (er) {\n        reject(er)\n      } else {\n        const stream = new fsm.ReadStream(file, {\n          readSize: readSize,\n          size: stat.size,\n        })\n        stream.on('error', reject)\n        stream.pipe(parse)\n      }\n    })\n  })\n  return p\n}\n\nexport const list = makeCommand(\n  listFileSync,\n  listFile,\n  opt => new Parser(opt) as Parser & { sync: true },\n  opt => new Parser(opt),\n  (opt, files) => {\n    if (files?.length) filesFilter(opt, files)\n    if (!opt.noResume) onReadEntryFunction(opt)\n  },\n)\n","// turn tar(1) style args like `C` into the more verbose things like `cwd`\n\nimport { type GzipOptions, type ZlibOptions } from 'minizlib'\nimport { type Stats } from 'node:fs'\nimport { type ReadEntry } from './read-entry.js'\nimport { type WarnData } from './warn-method.js'\nimport type { WriteEntry } from './write-entry.js'\n\nconst argmap = new Map<keyof TarOptionsWithAliases, keyof TarOptions>([\n  ['C', 'cwd'],\n  ['f', 'file'],\n  ['z', 'gzip'],\n  ['P', 'preservePaths'],\n  ['U', 'unlink'],\n  ['strip-components', 'strip'],\n  ['stripComponents', 'strip'],\n  ['keep-newer', 'newer'],\n  ['keepNewer', 'newer'],\n  ['keep-newer-files', 'newer'],\n  ['keepNewerFiles', 'newer'],\n  ['k', 'keep'],\n  ['keep-existing', 'keep'],\n  ['keepExisting', 'keep'],\n  ['m', 'noMtime'],\n  ['no-mtime', 'noMtime'],\n  ['p', 'preserveOwner'],\n  ['L', 'follow'],\n  ['h', 'follow'],\n  ['onentry', 'onReadEntry'],\n])\n\n/**\n * The options that can be provided to tar commands.\n *\n * Note that some of these are only relevant for certain commands, since\n * they are specific to reading or writing.\n *\n * Aliases are provided in the {@link TarOptionsWithAliases} type.\n */\nexport interface TarOptions {\n  //////////////////////////\n  // shared options\n\n  /**\n   * Perform all I/O operations synchronously. If the stream is ended\n   * immediately, then it will be processed entirely synchronously.\n   */\n  sync?: boolean\n\n  /**\n   * The tar file to be read and/or written. When this is set, a stream\n   * is not returned. Asynchronous commands will return a promise indicating\n   * when the operation is completed, and synchronous commands will return\n   * immediately.\n   */\n  file?: string\n\n  /**\n   * Treat warnings as crash-worthy errors. Defaults false.\n   */\n  strict?: boolean\n\n  /**\n   * The effective current working directory for this tar command\n   */\n  cwd?: string\n\n  /**\n   * When creating a tar archive, this can be used to compress it as well.\n   * Set to `true` to use the default gzip options, or customize them as\n   * needed.\n   *\n   * When reading, if this is unset, then the compression status will be\n   * inferred from the archive data. This is generally best, unless you are\n   * sure of the compression settings in use to create the archive, and want to\n   * fail if the archive doesn't match expectations.\n   */\n  gzip?: boolean | GzipOptions\n\n  /**\n   * When creating archives, preserve absolute and `..` paths in the archive,\n   * rather than sanitizing them under the cwd.\n   *\n   * When extracting, allow absolute paths, paths containing `..`, and\n   * extracting through symbolic links. By default, the root `/` is stripped\n   * from absolute paths (eg, turning `/x/y/z` into `x/y/z`), paths containing\n   * `..` are not extracted, and any file whose location would be modified by a\n   * symbolic link is not extracted.\n   *\n   * **WARNING** This is almost always unsafe, and must NEVER be used on\n   * archives from untrusted sources, such as user input, and every entry must\n   * be validated to ensure it is safe to write. Even if the input is not\n   * malicious, mistakes can cause a lot of damage!\n   */\n  preservePaths?: boolean\n\n  /**\n   * When extracting, do not set the `mtime` value for extracted entries to\n   * match the `mtime` in the archive.\n   *\n   * When creating archives, do not store the `mtime` value in the entry. Note\n   * that this prevents properly using other mtime-based features (such as\n   * `tar.update` or the `newer` option) with the resulting archive.\n   */\n  noMtime?: boolean\n\n  /**\n   * Set to `true` or an object with settings for `zlib.BrotliCompress()` to\n   * create a brotli-compressed archive\n   *\n   * When extracting, this will cause the archive to be treated as a\n   * brotli-compressed file if set to `true` or a ZlibOptions object.\n   *\n   * If set `false`, then brotli options will not be used.\n   *\n   * If this, the `gzip`, and `zstd` options are left `undefined`, then tar\n   * will attempt to infer the brotli compression status, but can only do so\n   * based on the filename. If the filename ends in `.tbr` or `.tar.br`, and\n   * the first 512 bytes are not a valid tar header, then brotli decompression\n   * will be attempted.\n   */\n  brotli?: boolean | ZlibOptions\n\n  /**\n   * Set to `true` or an object with settings for `zstd.compress()` to\n   * create a zstd-compressed archive\n   *\n   * When extracting, this will cause the archive to be treated as a\n   * zstd-compressed file if set to `true` or a ZlibOptions object.\n   *\n   * If set `false`, then zstd options will not be used.\n   *\n   * If this, the `gzip`, and `brotli` options are left `undefined`, then tar\n   * will attempt to infer the zstd compression status, but can only do so\n   * based on the filename. If the filename ends in `.tzst` or `.tar.zst`, and\n   * the first 512 bytes are not a valid tar header, then zstd decompression\n   * will be attempted.\n   */\n  zstd?: boolean | ZlibOptions\n\n  /**\n   * A function that is called with `(path, stat)` when creating an archive, or\n   * `(path, entry)` when extracting. Return true to process the file/entry, or\n   * false to exclude it.\n   */\n  filter?: (path: string, entry: Stats | ReadEntry) => boolean\n\n  /**\n   * A function that gets called for any warning encountered.\n   *\n   * Note: if `strict` is set, then the warning will throw, and this method\n   * will not be called.\n   */\n  onwarn?: (code: string, message: string, data: WarnData) => unknown\n\n  /**\n   * The maximum allowed ratio of decompressed bytes to compressed bytes when\n   * reading gzip, brotli, or zstd-compressed archives.\n   *\n   * This defaults to `1000` and aborts extraction or parsing when exceeded.\n   * Set to `Infinity` to disable the limit.\n   */\n  maxDecompressionRatio?: number\n\n  //////////////////////////\n  // extraction options\n\n  /**\n   * When extracting, unlink files before creating them. Without this option,\n   * tar overwrites existing files, which preserves existing hardlinks. With\n   * this option, existing hardlinks will be broken, as will any symlink that\n   * would affect the location of an extracted file.\n   */\n  unlink?: boolean\n\n  /**\n   * When extracting, strip the specified number of path portions from the\n   * entry path. For example, with `{strip: 2}`, the entry `a/b/c/d` would be\n   * extracted to `{cwd}/c/d`.\n   *\n   * Any entry whose entire path is stripped will be excluded.\n   */\n  strip?: number\n\n  /**\n   * When extracting, keep the existing file on disk if it's newer than the\n   * file in the archive.\n   */\n  newer?: boolean\n\n  /**\n   * When extracting, do not overwrite existing files at all.\n   */\n  keep?: boolean\n\n  /**\n   * When extracting, set the `uid` and `gid` of extracted entries to the `uid`\n   * and `gid` fields in the archive. Defaults to true when run as root, and\n   * false otherwise.\n   *\n   * If false, then files and directories will be set with the owner and group\n   * of the user running the process. This is similar to `-p` in `tar(1)`, but\n   * ACLs and other system-specific data is never unpacked in this\n   * implementation, and modes are set by default already.\n   */\n  preserveOwner?: boolean\n\n  /**\n   * The maximum depth of subfolders to extract into. This defaults to 1024.\n   * Anything deeper than the limit will raise a warning and skip the entry.\n   * Set to `Infinity` to remove the limitation.\n   */\n  maxDepth?: number\n\n  /**\n   * When extracting, force all created files and directories, and all\n   * implicitly created directories, to be owned by the specified user id,\n   * regardless of the `uid` field in the archive.\n   *\n   * Cannot be used along with `preserveOwner`. Requires also setting the `gid`\n   * option.\n   */\n  uid?: number\n\n  /**\n   * When extracting, force all created files and directories, and all\n   * implicitly created directories, to be owned by the specified group id,\n   * regardless of the `gid` field in the archive.\n   *\n   * Cannot be used along with `preserveOwner`. Requires also setting the `uid`\n   * option.\n   */\n  gid?: number\n\n  /**\n   * When extracting, provide a function that takes an `entry` object, and\n   * returns a stream, or any falsey value. If a stream is provided, then that\n   * stream's data will be written instead of the contents of the archive\n   * entry. If a falsey value is provided, then the entry is written to disk as\n   * normal.\n   *\n   * To exclude items from extraction, use the `filter` option.\n   *\n   * Note that using an asynchronous stream type with the `transform` option\n   * will cause undefined behavior in synchronous extractions.\n   * [MiniPass](http://npm.im/minipass)-based streams are designed for this use\n   * case.\n   */\n  transform?: (entry: ReadEntry) => ReadEntry\n\n  /**\n   * Call `chmod()` to ensure that extracted files match the entry's mode\n   * field. Without this field set, all mode fields in archive entries are a\n   * best effort attempt only.\n   *\n   * Setting this necessitates a call to the deprecated `process.umask()`\n   * method to determine the default umask value, unless a `processUmask`\n   * config is provided as well.\n   *\n   * If not set, tar will attempt to create file system entries with whatever\n   * mode is provided, and let the implicit process `umask` apply normally, but\n   * if a file already exists to be written to, then its existing mode will not\n   * be modified.\n   *\n   * When setting `chmod: true`, it is highly recommend to set the\n   * {@link TarOptions#processUmask} option as well, to avoid the call to the\n   * deprecated (and thread-unsafe) `process.umask()` method.\n   */\n  chmod?: boolean\n\n  /**\n   * When setting the {@link TarOptions#chmod} option to `true`, you may\n   * provide a value here to avoid having to call the deprecated and\n   * thread-unsafe `process.umask()` method.\n   *\n   * This has no effect with `chmod` is not set to true, as mode values are not\n   * set explicitly anyway. If `chmod` is set to `true`, and a value is not\n   * provided here, then `process.umask()` must be called, which will result in\n   * deprecation warnings.\n   *\n   * The most common values for this are `0o22` (resulting in directories\n   * created with mode `0o755` and files with `0o644` by default) and `0o2`\n   * (resulting in directores created with mode `0o775` and files `0o664`, so\n   * they are group-writable).\n   */\n  processUmask?: number\n\n  //////////////////////////\n  // archive creation options\n\n  /**\n   * When parsing/listing archives, `entry` streams are by default resumed\n   * (set into \"flowing\" mode) immediately after the call to `onReadEntry()`.\n   * Set `noResume: true` to suppress this behavior.\n   *\n   * Note that when this is set, the stream will never complete until the\n   * data is consumed somehow.\n   *\n   * Set automatically in extract operations, since the entry is piped to\n   * a file system entry right away. Only relevant when parsing.\n   */\n  noResume?: boolean\n\n  /**\n   * When creating, updating, or replacing within archives, this method will\n   * be called with each WriteEntry that is created.\n   */\n  onWriteEntry?: (entry: WriteEntry) => unknown\n\n  /**\n   * When extracting or listing archives, this method will be called with\n   * each entry that is not excluded by a `filter`.\n   *\n   * Important when listing archives synchronously from a file, because there\n   * is otherwise no way to interact with the data!\n   */\n  onReadEntry?: (entry: ReadEntry) => unknown\n\n  /**\n   * Pack the targets of symbolic links rather than the link itself.\n   */\n  follow?: boolean\n\n  /**\n   * When creating archives, omit any metadata that is system-specific:\n   * `ctime`, `atime`, `uid`, `gid`, `uname`, `gname`, `dev`, `ino`, and\n   * `nlink`. Note that `mtime` is still included, because this is necessary\n   * for other time-based operations such as `tar.update`. Additionally, `mode`\n   * is set to a \"reasonable default\" for mose unix systems, based on an\n   * effective `umask` of `0o22`.\n   *\n   * This also defaults the `portable` option in the gzip configs when creating\n   * a compressed archive, in order to produce deterministic archives that are\n   * not operating-system specific.\n   */\n  portable?: boolean\n\n  /**\n   * When creating archives, do not recursively archive the contents of\n   * directories. By default, archiving a directory archives all of its\n   * contents as well.\n   */\n  noDirRecurse?: boolean\n\n  /**\n   * Suppress Pax extended headers when creating archives. Note that this means\n   * long paths and linkpaths will be truncated, and large or negative numeric\n   * values may be interpreted incorrectly.\n   */\n  noPax?: boolean\n\n  /**\n   * Set to a `Date` object to force a specific `mtime` value for everything\n   * written to an archive.\n   *\n   * This is useful when creating archives that are intended to be\n   * deterministic based on their contents, irrespective of the file's last\n   * modification time.\n   *\n   * Overridden by `noMtime`.\n   */\n  mtime?: Date\n\n  /**\n   * A path portion to prefix onto the entries added to an archive.\n   */\n  prefix?: string\n\n  /**\n   * The mode to set on any created file archive, defaults to 0o666\n   * masked by the process umask, often resulting in 0o644.\n   *\n   * This does *not* affect the mode fields of individual entries, or the\n   * mode status of extracted entries on the filesystem.\n   */\n  mode?: number\n\n  //////////////////////////\n  // internal options\n\n  /**\n   * A cache of mtime values, to avoid having to stat the same file repeatedly.\n   *\n   * @internal\n   */\n  mtimeCache?: Map<string, Date>\n\n  /**\n   * maximum buffer size for `fs.read()` operations.\n   *\n   * @internal\n   */\n  maxReadSize?: number\n\n  /**\n   * Filter modes of entries being unpacked, like `process.umask()`\n   *\n   * @internal\n   */\n  umask?: number\n\n  /**\n   * Default mode for directories. Used for all implicitly created directories,\n   * and any directories in the archive that do not have a mode field.\n   *\n   * @internal\n   */\n  dmode?: number\n\n  /**\n   * default mode for files\n   *\n   * @internal\n   */\n  fmode?: number\n\n  /**\n   * Map that tracks which directories already exist, for extraction\n   *\n   * @internal\n   */\n  dirCache?: Map<string, boolean>\n  /**\n   * maximum supported size of meta entries. Defaults to 1MB\n   *\n   * @internal\n   */\n  maxMetaEntrySize?: number\n\n  /**\n   * A Map object containing the device and inode value for any file whose\n   * `nlink` value is greater than 1, to identify hard links when creating\n   * archives.\n   *\n   * @internal\n   */\n  linkCache?: Map<LinkCacheKey, string>\n\n  /**\n   * A map object containing the results of `fs.readdir()` calls.\n   *\n   * @internal\n   */\n  readdirCache?: Map<string, string[]>\n\n  /**\n   * A cache of all `lstat` results, for use in creating archives.\n   *\n   * @internal\n   */\n  statCache?: Map<string, Stats>\n\n  /**\n   * Number of concurrent jobs to run when creating archives.\n   *\n   * Defaults to 4.\n   *\n   * @internal\n   */\n  jobs?: number\n\n  /**\n   * Automatically set to true on Windows systems.\n   *\n   * When extracting, causes behavior where filenames containing `<|>?:`\n   * characters are converted to windows-compatible escape sequences in the\n   * created filesystem entries.\n   *\n   * When packing, causes behavior where paths replace `\\` with `/`, and\n   * filenames containing the windows-compatible escaped forms of `<|>?:` are\n   * converted to actual `<|>?:` characters in the archive.\n   *\n   * @internal\n   */\n  win32?: boolean\n\n  /**\n   * For `WriteEntry` objects, the absolute path to the entry on the\n   * filesystem. By default, this is `resolve(cwd, entry.path)`, but it can be\n   * overridden explicitly.\n   *\n   * @internal\n   */\n  absolute?: string\n\n  /**\n   * Used with Parser stream interface, to attach and take over when the\n   * stream is completely parsed. If this is set, then the prefinish,\n   * finish, and end events will not fire, and are the responsibility of\n   * the ondone method to emit properly.\n   *\n   * @internal\n   */\n  ondone?: () => void\n\n  /**\n   * Mostly for testing, but potentially useful in some cases.\n   * Forcibly trigger a chown on every entry, no matter what.\n   */\n  forceChown?: boolean\n\n  /**\n   * ambiguous deprecated name for {@link onReadEntry}\n   *\n   * @deprecated\n   */\n  onentry?: (entry: ReadEntry) => unknown\n}\n\nexport type TarOptionsSync = TarOptions & { sync: true }\nexport type TarOptionsAsync = TarOptions & { sync?: false }\nexport type TarOptionsFile = TarOptions & { file: string }\nexport type TarOptionsNoFile = TarOptions & { file?: undefined }\nexport type TarOptionsSyncFile = TarOptionsSync & TarOptionsFile\nexport type TarOptionsAsyncFile = TarOptionsAsync & TarOptionsFile\nexport type TarOptionsSyncNoFile = TarOptionsSync & TarOptionsNoFile\nexport type TarOptionsAsyncNoFile = TarOptionsAsync & TarOptionsNoFile\n\nexport type LinkCacheKey = `${number}:${number}`\n\nexport interface TarOptionsWithAliases extends TarOptions {\n  /**\n   * The effective current working directory for this tar command\n   */\n  C?: TarOptions['cwd']\n  /**\n   * The tar file to be read and/or written. When this is set, a stream\n   * is not returned. Asynchronous commands will return a promise indicating\n   * when the operation is completed, and synchronous commands will return\n   * immediately.\n   */\n  f?: TarOptions['file']\n  /**\n   * When creating a tar archive, this can be used to compress it as well.\n   * Set to `true` to use the default gzip options, or customize them as\n   * needed.\n   *\n   * When reading, if this is unset, then the compression status will be\n   * inferred from the archive data. This is generally best, unless you are\n   * sure of the compression settings in use to create the archive, and want to\n   * fail if the archive doesn't match expectations.\n   */\n  z?: TarOptions['gzip']\n  /**\n   * When creating archives, preserve absolute and `..` paths in the archive,\n   * rather than sanitizing them under the cwd.\n   *\n   * When extracting, allow absolute paths, paths containing `..`, and\n   * extracting through symbolic links. By default, the root `/` is stripped\n   * from absolute paths (eg, turning `/x/y/z` into `x/y/z`), paths containing\n   * `..` are not extracted, and any file whose location would be modified by a\n   * symbolic link is not extracted.\n   *\n   * **WARNING** This is almost always unsafe, and must NEVER be used on\n   * archives from untrusted sources, such as user input, and every entry must\n   * be validated to ensure it is safe to write. Even if the input is not\n   * malicious, mistakes can cause a lot of damage!\n   */\n  P?: TarOptions['preservePaths']\n  /**\n   * When extracting, unlink files before creating them. Without this option,\n   * tar overwrites existing files, which preserves existing hardlinks. With\n   * this option, existing hardlinks will be broken, as will any symlink that\n   * would affect the location of an extracted file.\n   */\n  U?: TarOptions['unlink']\n  /**\n   * When extracting, strip the specified number of path portions from the\n   * entry path. For example, with `{strip: 2}`, the entry `a/b/c/d` would be\n   * extracted to `{cwd}/c/d`.\n   */\n  'strip-components'?: TarOptions['strip']\n  /**\n   * When extracting, strip the specified number of path portions from the\n   * entry path. For example, with `{strip: 2}`, the entry `a/b/c/d` would be\n   * extracted to `{cwd}/c/d`.\n   */\n  stripComponents?: TarOptions['strip']\n  /**\n   * When extracting, keep the existing file on disk if it's newer than the\n   * file in the archive.\n   */\n  'keep-newer'?: TarOptions['newer']\n  /**\n   * When extracting, keep the existing file on disk if it's newer than the\n   * file in the archive.\n   */\n  keepNewer?: TarOptions['newer']\n  /**\n   * When extracting, keep the existing file on disk if it's newer than the\n   * file in the archive.\n   */\n  'keep-newer-files'?: TarOptions['newer']\n  /**\n   * When extracting, keep the existing file on disk if it's newer than the\n   * file in the archive.\n   */\n  keepNewerFiles?: TarOptions['newer']\n  /**\n   * When extracting, do not overwrite existing files at all.\n   */\n  k?: TarOptions['keep']\n  /**\n   * When extracting, do not overwrite existing files at all.\n   */\n  'keep-existing'?: TarOptions['keep']\n  /**\n   * When extracting, do not overwrite existing files at all.\n   */\n  keepExisting?: TarOptions['keep']\n  /**\n   * When extracting, do not set the `mtime` value for extracted entries to\n   * match the `mtime` in the archive.\n   *\n   * When creating archives, do not store the `mtime` value in the entry. Note\n   * that this prevents properly using other mtime-based features (such as\n   * `tar.update` or the `newer` option) with the resulting archive.\n   */\n  m?: TarOptions['noMtime']\n  /**\n   * When extracting, do not set the `mtime` value for extracted entries to\n   * match the `mtime` in the archive.\n   *\n   * When creating archives, do not store the `mtime` value in the entry. Note\n   * that this prevents properly using other mtime-based features (such as\n   * `tar.update` or the `newer` option) with the resulting archive.\n   */\n  'no-mtime'?: TarOptions['noMtime']\n  /**\n   * When extracting, set the `uid` and `gid` of extracted entries to the `uid`\n   * and `gid` fields in the archive. Defaults to true when run as root, and\n   * false otherwise.\n   *\n   * If false, then files and directories will be set with the owner and group\n   * of the user running the process. This is similar to `-p` in `tar(1)`, but\n   * ACLs and other system-specific data is never unpacked in this\n   * implementation, and modes are set by default already.\n   */\n  p?: TarOptions['preserveOwner']\n  /**\n   * Pack the targets of symbolic links rather than the link itself.\n   */\n  L?: TarOptions['follow']\n  /**\n   * Pack the targets of symbolic links rather than the link itself.\n   */\n  h?: TarOptions['follow']\n\n  /**\n   * Deprecated option. Set explicitly false to set `chmod: true`. Ignored\n   * if {@link TarOptions#chmod} is set to any boolean value.\n   *\n   * @deprecated\n   */\n  noChmod?: boolean\n}\n\nexport type TarOptionsWithAliasesSync = TarOptionsWithAliases & {\n  sync: true\n}\nexport type TarOptionsWithAliasesAsync = TarOptionsWithAliases & {\n  sync?: false\n}\nexport type TarOptionsWithAliasesFile =\n  | (TarOptionsWithAliases & {\n      file: string\n    })\n  | (TarOptionsWithAliases & { f: string })\nexport type TarOptionsWithAliasesSyncFile = TarOptionsWithAliasesSync &\n  TarOptionsWithAliasesFile\nexport type TarOptionsWithAliasesAsyncFile = TarOptionsWithAliasesAsync &\n  TarOptionsWithAliasesFile\n\nexport type TarOptionsWithAliasesNoFile = TarOptionsWithAliases & {\n  f?: undefined\n  file?: undefined\n}\n\nexport type TarOptionsWithAliasesSyncNoFile = TarOptionsWithAliasesSync &\n  TarOptionsWithAliasesNoFile\nexport type TarOptionsWithAliasesAsyncNoFile = TarOptionsWithAliasesAsync &\n  TarOptionsWithAliasesNoFile\n\nexport const isSyncFile = <O extends TarOptions>(\n  o: O,\n): o is O & TarOptionsSyncFile => !!o.sync && !!o.file\nexport const isAsyncFile = <O extends TarOptions>(\n  o: O,\n): o is O & TarOptionsAsyncFile => !o.sync && !!o.file\nexport const isSyncNoFile = <O extends TarOptions>(\n  o: O,\n): o is O & TarOptionsSyncNoFile => !!o.sync && !o.file\nexport const isAsyncNoFile = <O extends TarOptions>(\n  o: O,\n): o is O & TarOptionsAsyncNoFile => !o.sync && !o.file\nexport const isSync = <O extends TarOptions>(\n  o: O,\n): o is O & TarOptionsSync => !!o.sync\nexport const isAsync = <O extends TarOptions>(\n  o: O,\n): o is O & TarOptionsAsync => !o.sync\nexport const isFile = <O extends TarOptions>(\n  o: O,\n): o is O & TarOptionsFile => !!o.file\nexport const isNoFile = <O extends TarOptions>(\n  o: O,\n): o is O & TarOptionsNoFile => !o.file\n\nconst dealiasKey = (k: keyof TarOptionsWithAliases): keyof TarOptions => {\n  const d = argmap.get(k)\n  if (d) return d\n  return k as keyof TarOptions\n}\n\nexport const dealias = (opt: TarOptionsWithAliases = {}): TarOptions => {\n  if (!opt) return {}\n  const result: Record<string, unknown> = {}\n  for (const [key, v] of Object.entries(opt) as [\n    keyof TarOptionsWithAliases,\n    unknown,\n  ][]) {\n    // TS doesn't know that aliases are going to always be the same type\n    const k = dealiasKey(key)\n    result[k] = v\n  }\n  // affordance for deprecated noChmod -> chmod\n  if (result.chmod === undefined && result.noChmod === false) {\n    result.chmod = true\n  }\n  delete result.noChmod\n  return result as TarOptions\n}\n","import type {\n  TarOptions,\n  TarOptionsAsyncFile,\n  TarOptionsAsyncNoFile,\n  TarOptionsSyncFile,\n  TarOptionsSyncNoFile,\n  TarOptionsWithAliases,\n  TarOptionsWithAliasesAsync,\n  TarOptionsWithAliasesAsyncFile,\n  TarOptionsWithAliasesAsyncNoFile,\n  TarOptionsWithAliasesFile,\n  TarOptionsWithAliasesNoFile,\n  TarOptionsWithAliasesSync,\n  TarOptionsWithAliasesSyncFile,\n  TarOptionsWithAliasesSyncNoFile,\n} from './options.js'\nimport {\n  dealias,\n  isAsyncFile,\n  isAsyncNoFile,\n  isSyncFile,\n  isSyncNoFile,\n} from './options.js'\n\nexport type CB = (er?: Error) => unknown\n\nexport type TarCommand<AsyncClass, SyncClass extends { sync: true }> = {\n  // async and no file specified\n  (): AsyncClass\n  (opt: TarOptionsWithAliasesAsyncNoFile): AsyncClass\n  (entries: string[]): AsyncClass\n  (opt: TarOptionsWithAliasesAsyncNoFile, entries: string[]): AsyncClass\n} & {\n  // sync and no file\n  (opt: TarOptionsWithAliasesSyncNoFile): SyncClass\n  (opt: TarOptionsWithAliasesSyncNoFile, entries: string[]): SyncClass\n} & {\n  // async and file\n  (opt: TarOptionsWithAliasesAsyncFile): Promise<void>\n  (opt: TarOptionsWithAliasesAsyncFile, entries: string[]): Promise<void>\n  (opt: TarOptionsWithAliasesAsyncFile, cb: CB): Promise<void>\n  (\n    opt: TarOptionsWithAliasesAsyncFile,\n    entries: string[],\n    cb: CB,\n  ): Promise<void>\n} & {\n  // sync and file\n  (opt: TarOptionsWithAliasesSyncFile): void\n  (opt: TarOptionsWithAliasesSyncFile, entries: string[]): void\n} & {\n  // sync, maybe file\n  (opt: TarOptionsWithAliasesSync): typeof opt extends (\n    TarOptionsWithAliasesFile\n  ) ?\n    void\n  : typeof opt extends TarOptionsWithAliasesNoFile ? SyncClass\n  : void | SyncClass\n  (\n    opt: TarOptionsWithAliasesSync,\n    entries: string[],\n  ): typeof opt extends TarOptionsWithAliasesFile ? void\n  : typeof opt extends TarOptionsWithAliasesNoFile ? SyncClass\n  : void | SyncClass\n} & {\n  // async, maybe file\n  (opt: TarOptionsWithAliasesAsync): typeof opt extends (\n    TarOptionsWithAliasesFile\n  ) ?\n    Promise<void>\n  : typeof opt extends TarOptionsWithAliasesNoFile ? AsyncClass\n  : Promise<void> | AsyncClass\n  (\n    opt: TarOptionsWithAliasesAsync,\n    entries: string[],\n  ): typeof opt extends TarOptionsWithAliasesFile ? Promise<void>\n  : typeof opt extends TarOptionsWithAliasesNoFile ? AsyncClass\n  : Promise<void> | AsyncClass\n  (opt: TarOptionsWithAliasesAsync, cb: CB): Promise<void>\n  (\n    opt: TarOptionsWithAliasesAsync,\n    entries: string[],\n    cb: CB,\n  ): typeof opt extends TarOptionsWithAliasesFile ? Promise<void>\n  : typeof opt extends TarOptionsWithAliasesNoFile ? never\n  : Promise<void>\n} & {\n  // maybe sync, file\n  (opt: TarOptionsWithAliasesFile): Promise<void> | void\n  (\n    opt: TarOptionsWithAliasesFile,\n    entries: string[],\n  ): typeof opt extends TarOptionsWithAliasesSync ? void\n  : typeof opt extends TarOptionsWithAliasesAsync ? Promise<void>\n  : Promise<void> | void\n  (opt: TarOptionsWithAliasesFile, cb: CB): Promise<void>\n  (\n    opt: TarOptionsWithAliasesFile,\n    entries: string[],\n    cb: CB,\n  ): typeof opt extends TarOptionsWithAliasesSync ? never\n  : typeof opt extends TarOptionsWithAliasesAsync ? Promise<void>\n  : Promise<void>\n} & {\n  // maybe sync, no file\n  (opt: TarOptionsWithAliasesNoFile): typeof opt extends (\n    TarOptionsWithAliasesSync\n  ) ?\n    SyncClass\n  : typeof opt extends TarOptionsWithAliasesAsync ? AsyncClass\n  : SyncClass | AsyncClass\n  (\n    opt: TarOptionsWithAliasesNoFile,\n    entries: string[],\n  ): typeof opt extends TarOptionsWithAliasesSync ? SyncClass\n  : typeof opt extends TarOptionsWithAliasesAsync ? AsyncClass\n  : SyncClass | AsyncClass\n} & {\n  // maybe sync, maybe file\n  (opt: TarOptionsWithAliases): typeof opt extends (\n    TarOptionsWithAliasesFile\n  ) ?\n    typeof opt extends TarOptionsWithAliasesSync ? void\n    : typeof opt extends TarOptionsWithAliasesAsync ? Promise<void>\n    : void | Promise<void>\n  : typeof opt extends TarOptionsWithAliasesNoFile ?\n    typeof opt extends TarOptionsWithAliasesSync ? SyncClass\n    : typeof opt extends TarOptionsWithAliasesAsync ? AsyncClass\n    : SyncClass | AsyncClass\n  : typeof opt extends TarOptionsWithAliasesSync ? SyncClass | void\n  : typeof opt extends TarOptionsWithAliasesAsync ?\n    AsyncClass | Promise<void>\n  : SyncClass | void | AsyncClass | Promise<void>\n} & {\n  // extras\n  syncFile: (opt: TarOptionsSyncFile, entries: string[]) => void\n  asyncFile: (\n    opt: TarOptionsAsyncFile,\n    entries: string[],\n    cb?: CB,\n  ) => Promise<void>\n  syncNoFile: (opt: TarOptionsSyncNoFile, entries: string[]) => SyncClass\n  asyncNoFile: (\n    opt: TarOptionsAsyncNoFile,\n    entries: string[],\n  ) => AsyncClass\n  validate?: (opt: TarOptions, entries?: string[]) => void\n}\n\nexport const makeCommand = <AsyncClass, SyncClass extends { sync: true }>(\n  syncFile: (opt: TarOptionsSyncFile, entries: string[]) => void,\n  asyncFile: (\n    opt: TarOptionsAsyncFile,\n    entries: string[],\n    cb?: CB,\n  ) => Promise<void>,\n  syncNoFile: (opt: TarOptionsSyncNoFile, entries: string[]) => SyncClass,\n  asyncNoFile: (\n    opt: TarOptionsAsyncNoFile,\n    entries: string[],\n  ) => AsyncClass,\n  validate?: (opt: TarOptions, entries?: string[]) => void,\n): TarCommand<AsyncClass, SyncClass> => {\n  return Object.assign(\n    (\n      opt_: TarOptionsWithAliases | string[] = [],\n      entries?: string[] | CB,\n      cb?: CB,\n    ) => {\n      if (Array.isArray(opt_)) {\n        entries = opt_\n        opt_ = {}\n      }\n\n      if (typeof entries === 'function') {\n        cb = entries\n        entries = undefined\n      }\n\n      entries = !entries ? [] : Array.from(entries)\n\n      const opt = dealias(opt_)\n\n      validate?.(opt, entries)\n\n      if (isSyncFile(opt)) {\n        if (typeof cb === 'function') {\n          throw new TypeError(\n            'callback not supported for sync tar functions',\n          )\n        }\n        return syncFile(opt, entries)\n      } else if (isAsyncFile(opt)) {\n        const p = asyncFile(opt, entries)\n        return cb ? p.then(() => cb(), cb) : p\n      } else if (isSyncNoFile(opt)) {\n        if (typeof cb === 'function') {\n          throw new TypeError(\n            'callback not supported for sync tar functions',\n          )\n        }\n        return syncNoFile(opt, entries)\n      } else if (isAsyncNoFile(opt)) {\n        if (typeof cb === 'function') {\n          throw new TypeError('callback only supported with file option')\n        }\n        return asyncNoFile(opt, entries)\n        /* c8 ignore start */\n      }\n      throw new Error('impossible options??')\n\n      /* c8 ignore stop */\n    },\n    {\n      syncFile,\n      asyncFile,\n      syncNoFile,\n      asyncNoFile,\n      validate,\n    },\n  ) as TarCommand<AsyncClass, SyncClass>\n}\n","// this[BUFFER] is the remainder of a chunk if we're waiting for\n// the full 512 bytes of a header to come in.  We will Buffer.concat()\n// it to the next write(), which is a mem copy, but a small one.\n//\n// this[QUEUE] is a list of entries that haven't been emitted\n// yet this can only get filled up if the user keeps write()ing after\n// a write() returns false, or does a write() with more than one entry\n//\n// We don't buffer chunks, we always parse them and either create an\n// entry, or push it into the active entry.  The ReadEntry class knows\n// to throw data away if .ignore=true\n//\n// Shift entry off the buffer when it emits 'end', and emit 'entry' for\n// the next one in the list.\n//\n// At any time, we're pushing body chunks into the entry at WRITEENTRY,\n// and waiting for 'end' on the entry at READENTRY\n//\n// ignored entries get .resume() called on them straight away\n\nimport { EventEmitter as EE } from 'events'\nimport { BrotliDecompress, Unzip, ZstdDecompress } from 'minizlib'\nimport { Header } from './header.js'\nimport type { TarOptions } from './options.js'\nimport { Pax } from './pax.js'\nimport { ReadEntry } from './read-entry.js'\nimport { warnMethod, type WarnData, type Warner } from './warn-method.js'\n\nconst maxMetaEntrySize = 1024 * 1024\nconst gzipHeader = Buffer.from([0x1f, 0x8b])\nconst zstdHeader = Buffer.from([0x28, 0xb5, 0x2f, 0xfd])\nconst ZIP_HEADER_LEN = Math.max(gzipHeader.length, zstdHeader.length)\n\nconst STATE = Symbol('state')\nconst WRITEENTRY = Symbol('writeEntry')\nconst READENTRY = Symbol('readEntry')\nconst NEXTENTRY = Symbol('nextEntry')\nconst PROCESSENTRY = Symbol('processEntry')\nconst EX = Symbol('extendedHeader')\nconst GEX = Symbol('globalExtendedHeader')\nconst META = Symbol('meta')\nconst EMITMETA = Symbol('emitMeta')\nconst BUFFER = Symbol('buffer')\nconst QUEUE = Symbol('queue')\nconst ENDED = Symbol('ended')\nconst EMITTEDEND = Symbol('emittedEnd')\nconst EMIT = Symbol('emit')\nconst UNZIP = Symbol('unzip')\nconst CONSUMECHUNK = Symbol('consumeChunk')\nconst CONSUMECHUNKSUB = Symbol('consumeChunkSub')\nconst CONSUMEBODY = Symbol('consumeBody')\nconst CONSUMEMETA = Symbol('consumeMeta')\nconst CONSUMEHEADER = Symbol('consumeHeader')\nconst CONSUMING = Symbol('consuming')\nconst BUFFERCONCAT = Symbol('bufferConcat')\nconst MAYBEEND = Symbol('maybeEnd')\nconst WRITING = Symbol('writing')\nconst ABORTED = Symbol('aborted')\nconst DONE = Symbol('onDone')\nconst SAW_VALID_ENTRY = Symbol('sawValidEntry')\nconst SAW_NULL_BLOCK = Symbol('sawNullBlock')\nconst SAW_EOF = Symbol('sawEOF')\nconst CLOSESTREAM = Symbol('closeStream')\nconst MAX_DECOMPRESSION_RATIO = 1000\nconst COMPRESSEDBYTESREAD = Symbol('compressedBytesRead')\nconst DECOMPRESSEDBYTESREAD = Symbol('decompressedBytesRead')\nconst CHECKDECOMPRESSIONRATIO = Symbol('checkDecompressionRatio')\n\nconst noop = () => true\n\nexport type State = 'begin' | 'header' | 'ignore' | 'meta' | 'body'\n\nexport class Parser extends EE implements Warner {\n  file: string\n  strict: boolean\n  maxMetaEntrySize: number\n  filter: Exclude<TarOptions['filter'], undefined>\n  brotli?: TarOptions['brotli']\n  zstd?: TarOptions['zstd']\n  maxDecompressionRatio: number\n\n  writable: true = true\n  readable: false = false;\n\n  [QUEUE]: (ReadEntry | [string | symbol, unknown, unknown])[] = [];\n  [BUFFER]?: Buffer;\n  [READENTRY]?: ReadEntry;\n  [WRITEENTRY]?: ReadEntry;\n  [STATE]: State = 'begin';\n  [META]: string = '';\n  [EX]?: Pax;\n  [GEX]?: Pax;\n  [ENDED]: boolean = false;\n  [UNZIP]?: false | Unzip | BrotliDecompress | ZstdDecompress;\n  [ABORTED]: boolean = false;\n  [SAW_VALID_ENTRY]?: boolean;\n  [SAW_NULL_BLOCK]: boolean = false;\n  [SAW_EOF]: boolean = false;\n  [WRITING]: boolean = false;\n  [CONSUMING]: boolean = false;\n  [EMITTEDEND]: boolean = false;\n  [COMPRESSEDBYTESREAD]: number = 0;\n  [DECOMPRESSEDBYTESREAD]: number = 0\n\n  constructor(opt: TarOptions = {}) {\n    super()\n\n    this.file = opt.file || ''\n\n    // these BADARCHIVE errors can't be detected early. listen on DONE.\n    this.on(DONE, () => {\n      if (this[STATE] === 'begin' || this[SAW_VALID_ENTRY] === false) {\n        // either less than 1 block of data, or all entries were invalid.\n        // Either way, probably not even a tarball.\n        this.warn('TAR_BAD_ARCHIVE', 'Unrecognized archive format')\n      }\n    })\n\n    if (opt.ondone) {\n      this.on(DONE, opt.ondone)\n    } else {\n      this.on(DONE, () => {\n        this.emit('prefinish')\n        this.emit('finish')\n        this.emit('end')\n      })\n    }\n\n    this.strict = !!opt.strict\n    this.maxDecompressionRatio =\n      typeof opt.maxDecompressionRatio === 'number' ?\n        opt.maxDecompressionRatio\n      : MAX_DECOMPRESSION_RATIO\n    this.maxMetaEntrySize = opt.maxMetaEntrySize || maxMetaEntrySize\n    this.filter = typeof opt.filter === 'function' ? opt.filter : noop\n    // Unlike gzip, brotli doesn't have any magic bytes to identify it\n    // Users need to explicitly tell us they're extracting a brotli file\n    // Or we infer from the file extension\n    const isTBR =\n      opt.file &&\n      (opt.file.endsWith('.tar.br') || opt.file.endsWith('.tbr'))\n    // if it's a tbr file it MIGHT be brotli, but we don't know until\n    // we look at it and verify it's not a valid tar file.\n    this.brotli =\n      !(opt.gzip || opt.zstd) && opt.brotli !== undefined ? opt.brotli\n      : isTBR ? undefined\n      : false\n\n    // zstd has magic bytes to identify it, but we also support explicit options\n    // and file extension detection\n    const isTZST =\n      opt.file &&\n      (opt.file.endsWith('.tar.zst') || opt.file.endsWith('.tzst'))\n    this.zstd =\n      !(opt.gzip || opt.brotli) && opt.zstd !== undefined ? opt.zstd\n      : isTZST ? true\n      : undefined\n\n    // have to set this so that streams are ok piping into it\n    this.on('end', () => this[CLOSESTREAM]())\n\n    if (typeof opt.onwarn === 'function') {\n      this.on('warn', opt.onwarn)\n    }\n    if (typeof opt.onReadEntry === 'function') {\n      this.on('entry', opt.onReadEntry)\n    }\n  }\n\n  warn(code: string, message: string | Error, data: WarnData = {}): void {\n    warnMethod(this, code, message, data)\n  }\n\n  [CONSUMEHEADER](chunk: Buffer, position: number) {\n    if (this[SAW_VALID_ENTRY] === undefined) {\n      this[SAW_VALID_ENTRY] = false\n    }\n    let header\n    try {\n      header = new Header(chunk, position, this[EX], this[GEX])\n    } catch (er) {\n      return this.warn('TAR_ENTRY_INVALID', er as Error)\n    }\n\n    if (header.nullBlock) {\n      if (this[SAW_NULL_BLOCK]) {\n        this[SAW_EOF] = true\n        // ending an archive with no entries.  pointless, but legal.\n        if (this[STATE] === 'begin') {\n          this[STATE] = 'header'\n        }\n        this[EMIT]('eof')\n      } else {\n        this[SAW_NULL_BLOCK] = true\n        this[EMIT]('nullBlock')\n      }\n    } else {\n      this[SAW_NULL_BLOCK] = false\n      if (!header.cksumValid) {\n        this.warn('TAR_ENTRY_INVALID', 'checksum failure', { header })\n      } else if (!header.path) {\n        this.warn('TAR_ENTRY_INVALID', 'path is required', { header })\n      } else {\n        const type = header.type\n        if (/^(Symbolic)?Link$/.test(type) && !header.linkpath) {\n          this.warn('TAR_ENTRY_INVALID', 'linkpath required', {\n            header,\n          })\n        } else if (\n          !/^(Symbolic)?Link$/.test(type) &&\n          !/^(Global)?ExtendedHeader$/.test(type) &&\n          header.linkpath\n        ) {\n          this.warn('TAR_ENTRY_INVALID', 'linkpath forbidden', {\n            header,\n          })\n        } else {\n          const entry = (this[WRITEENTRY] = new ReadEntry(\n            header,\n            this[EX],\n            this[GEX],\n          ))\n\n          // we do this for meta & ignored entries as well, because they\n          // are still valid tar, or else we wouldn't know to ignore them\n          if (!this[SAW_VALID_ENTRY]) {\n            if (entry.remain) {\n              // this might be the one!\n              const onend = () => {\n                if (!entry.invalid) {\n                  this[SAW_VALID_ENTRY] = true\n                }\n              }\n              entry.on('end', onend)\n            } else {\n              this[SAW_VALID_ENTRY] = true\n            }\n          }\n\n          if (entry.meta) {\n            if (entry.size > this.maxMetaEntrySize) {\n              entry.ignore = true\n              this[EMIT]('ignoredEntry', entry)\n              this[STATE] = 'ignore'\n              entry.resume()\n            } else if (entry.size > 0) {\n              this[META] = ''\n              entry.on('data', c => (this[META] += c))\n              this[STATE] = 'meta'\n            }\n          } else {\n            this[EX] = undefined\n            entry.ignore = entry.ignore || !this.filter(entry.path, entry)\n\n            if (entry.ignore) {\n              // probably valid, just not something we care about\n              this[EMIT]('ignoredEntry', entry)\n              this[STATE] = entry.remain ? 'ignore' : 'header'\n              entry.resume()\n            } else {\n              if (entry.remain) {\n                this[STATE] = 'body'\n              } else {\n                this[STATE] = 'header'\n                entry.end()\n              }\n\n              if (!this[READENTRY]) {\n                this[QUEUE].push(entry)\n                this[NEXTENTRY]()\n              } else {\n                this[QUEUE].push(entry)\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n\n  [CLOSESTREAM]() {\n    queueMicrotask(() => this.emit('close'))\n  }\n\n  [PROCESSENTRY](entry?: ReadEntry | [string | symbol, unknown, unknown]) {\n    let go = true\n\n    if (!entry) {\n      this[READENTRY] = undefined\n      go = false\n    } else if (Array.isArray(entry)) {\n      const [ev, ...args]: [string | symbol, unknown, unknown] = entry\n      this.emit(ev, ...args)\n    } else {\n      this[READENTRY] = entry\n      this.emit('entry', entry)\n      if (!entry.emittedEnd) {\n        entry.on('end', () => this[NEXTENTRY]())\n        go = false\n      }\n    }\n\n    return go\n  }\n\n  [NEXTENTRY]() {\n    do {} while (this[PROCESSENTRY](this[QUEUE].shift()))\n\n    if (this[QUEUE].length === 0) {\n      // At this point, there's nothing in the queue, but we may have an\n      // entry which is being consumed (readEntry).\n      // If we don't, then we definitely can handle more data.\n      // If we do, and either it's flowing, or it has never had any data\n      // written to it, then it needs more.\n      // The only other possibility is that it has returned false from a\n      // write() call, so we wait for the next drain to continue.\n      const re = this[READENTRY]\n      const drainNow = !re || re.flowing || re.size === re.remain\n      if (drainNow) {\n        if (!this[WRITING]) {\n          this.emit('drain')\n        }\n      } else {\n        re.once('drain', () => this.emit('drain'))\n      }\n    }\n  }\n\n  [CONSUMEBODY](chunk: Buffer, position: number) {\n    // write up to but no  more than writeEntry.blockRemain\n    const entry = this[WRITEENTRY]\n    /* c8 ignore start */\n    if (!entry) {\n      throw new Error('attempt to consume body without entry??')\n    }\n    const br = entry.blockRemain ?? 0\n    /* c8 ignore stop */\n    const c =\n      br >= chunk.length && position === 0 ?\n        chunk\n      : chunk.subarray(position, position + br)\n\n    entry.write(c)\n\n    if (!entry.blockRemain) {\n      this[STATE] = 'header'\n      this[WRITEENTRY] = undefined\n      entry.end()\n    }\n\n    return c.length\n  }\n\n  [CONSUMEMETA](chunk: Buffer, position: number) {\n    const entry = this[WRITEENTRY]\n    const ret = this[CONSUMEBODY](chunk, position)\n\n    // if we finished, then the entry is reset\n    if (!this[WRITEENTRY] && entry) {\n      this[EMITMETA](entry)\n    }\n\n    return ret\n  }\n\n  [EMIT](ev: string | symbol, data?: unknown, extra?: unknown) {\n    if (this[QUEUE].length === 0 && !this[READENTRY]) {\n      this.emit(ev, data, extra)\n    } else {\n      this[QUEUE].push([ev, data, extra])\n    }\n  }\n\n  [EMITMETA](entry: ReadEntry) {\n    this[EMIT]('meta', this[META])\n    switch (entry.type) {\n      case 'ExtendedHeader':\n      case 'OldExtendedHeader':\n        this[EX] = Pax.parse(this[META], this[EX], false)\n        break\n\n      case 'GlobalExtendedHeader':\n        this[GEX] = Pax.parse(this[META], this[GEX], true)\n        break\n\n      case 'NextFileHasLongPath':\n      case 'OldGnuLongPath': {\n        const ex: Pax = this[EX] ?? Object.create(null)\n        this[EX] = ex\n        ex.path = this[META].replace(/\\0.*/, '')\n        break\n      }\n\n      case 'NextFileHasLongLinkpath': {\n        const ex: Pax = this[EX] || Object.create(null)\n        this[EX] = ex\n        ex.linkpath = this[META].replace(/\\0.*/, '')\n        break\n      }\n\n      /* c8 ignore start */\n      default:\n        throw new Error('unknown meta: ' + entry.type)\n      /* c8 ignore stop */\n    }\n  }\n\n  abort(error: Error) {\n    if (this[ABORTED]) {\n      return\n    }\n    this[ABORTED] = true\n    this.emit('abort', error)\n    // always throws, even in non-strict mode\n    this.warn('TAR_ABORT', error, { recoverable: false })\n  }\n\n  [CHECKDECOMPRESSIONRATIO](chunk: Buffer) {\n    this[DECOMPRESSEDBYTESREAD] += chunk.length\n    const ratio = this[DECOMPRESSEDBYTESREAD] / this[COMPRESSEDBYTESREAD]\n    if (ratio > this.maxDecompressionRatio) {\n      this.abort(\n        new Error(\n          `max decompression ratio exceeded: ${ratio.toFixed(2)} > ${\n            this.maxDecompressionRatio\n          }`,\n        ),\n      )\n      return false\n    }\n    return true\n  }\n\n  write(\n    buffer: Uint8Array | string,\n    cb?: (err?: Error | null) => void,\n  ): boolean\n  write(\n    str: string,\n    encoding?: BufferEncoding,\n    cb?: (err?: Error | null) => void,\n  ): boolean\n  write(\n    chunk: Buffer | string,\n    encoding?: BufferEncoding | (() => unknown),\n    cb?: () => unknown,\n  ): boolean {\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = undefined\n    }\n    if (typeof chunk === 'string') {\n      chunk = Buffer.from(\n        chunk,\n        /* c8 ignore next */\n        typeof encoding === 'string' ? encoding : 'utf8',\n      )\n    }\n    if (this[ABORTED]) {\n      /* c8 ignore next */\n      cb?.()\n      return false\n    }\n\n    // first write, might be gzipped, zstd, or brotli compressed\n    const needSniff =\n      this[UNZIP] === undefined ||\n      (this.brotli === undefined && this[UNZIP] === false)\n    if (needSniff && chunk) {\n      if (this[BUFFER]) {\n        chunk = Buffer.concat([this[BUFFER], chunk])\n        this[BUFFER] = undefined\n      }\n      if (chunk.length < ZIP_HEADER_LEN) {\n        this[BUFFER] = chunk\n        /* c8 ignore next */\n        cb?.()\n        return true\n      }\n\n      // look for gzip header\n      for (\n        let i = 0;\n        this[UNZIP] === undefined && i < gzipHeader.length;\n        i++\n      ) {\n        if (chunk[i] !== gzipHeader[i]) {\n          this[UNZIP] = false\n        }\n      }\n\n      // look for zstd header if gzip header not found\n      let isZstd = false\n      if (this[UNZIP] === false && this.zstd !== false) {\n        isZstd = true\n        for (let i = 0; i < zstdHeader.length; i++) {\n          if (chunk[i] !== zstdHeader[i]) {\n            isZstd = false\n            break\n          }\n        }\n      }\n\n      const maybeBrotli = this.brotli === undefined && !isZstd\n      if (this[UNZIP] === false && maybeBrotli) {\n        // read the first header to see if it's a valid tar file. If so,\n        // we can safely assume that it's not actually brotli, despite the\n        // .tbr or .tar.br file extension.\n        // if we ended before getting a full chunk, yes, def brotli\n        if (chunk.length < 512) {\n          if (this[ENDED]) {\n            this.brotli = true\n          } else {\n            this[BUFFER] = chunk\n            /* c8 ignore next */\n            cb?.()\n            return true\n          }\n        } else {\n          // if it's tar, it's pretty reliably not brotli, chances of\n          // that happening are astronomical.\n          try {\n            new Header(chunk.subarray(0, 512))\n            this.brotli = false\n          } catch (_) {\n            this.brotli = true\n          }\n        }\n      }\n\n      if (\n        this[UNZIP] === undefined ||\n        (this[UNZIP] === false && (this.brotli || isZstd))\n      ) {\n        const ended = this[ENDED]\n        this[ENDED] = false\n        this[UNZIP] =\n          this[UNZIP] === undefined ? new Unzip({})\n          : isZstd ? new ZstdDecompress({})\n          : new BrotliDecompress({})\n        this[UNZIP].on('data', chunk => {\n          if (this[CHECKDECOMPRESSIONRATIO](chunk)) {\n            this[CONSUMECHUNK](chunk)\n          }\n        })\n        this[UNZIP].on('error', er => {\n          if (!this[ABORTED]) {\n            this.abort(er as Error)\n          }\n        })\n        this[UNZIP].on('end', () => {\n          this[ENDED] = true\n          this[CONSUMECHUNK]()\n        })\n        this[WRITING] = true\n        this[COMPRESSEDBYTESREAD] += chunk.length\n        const ret = !!this[UNZIP][ended ? 'end' : 'write'](chunk)\n        this[WRITING] = false\n        cb?.()\n        return ret\n      }\n    }\n\n    this[WRITING] = true\n    if (this[UNZIP]) {\n      this[COMPRESSEDBYTESREAD] += chunk.length\n      this[UNZIP].write(chunk)\n    } else {\n      this[CONSUMECHUNK](chunk)\n    }\n    this[WRITING] = false\n\n    // return false if there's a queue, or if the current entry isn't flowing\n    const ret =\n      this[QUEUE].length > 0 ? false\n      : this[READENTRY] ? this[READENTRY].flowing\n      : true\n\n    // if we have no queue, then that means a clogged READENTRY\n    if (!ret && this[QUEUE].length === 0) {\n      this[READENTRY]?.once('drain', () => this.emit('drain'))\n    }\n\n    /* c8 ignore next */\n    cb?.()\n    return ret\n  }\n\n  [BUFFERCONCAT](c: Buffer) {\n    if (c && !this[ABORTED]) {\n      this[BUFFER] = this[BUFFER] ? Buffer.concat([this[BUFFER], c]) : c\n    }\n  }\n\n  [MAYBEEND]() {\n    if (\n      this[ENDED] &&\n      !this[EMITTEDEND] &&\n      !this[ABORTED] &&\n      !this[CONSUMING]\n    ) {\n      this[EMITTEDEND] = true\n      const entry = this[WRITEENTRY]\n      if (entry?.blockRemain) {\n        // truncated, likely a damaged file\n        const have = this[BUFFER] ? this[BUFFER].length : 0\n        this.warn(\n          'TAR_BAD_ARCHIVE',\n          `Truncated input (needed ${entry.blockRemain} more bytes, only ${have} available)`,\n          { entry },\n        )\n        if (this[BUFFER]) {\n          entry.write(this[BUFFER])\n        }\n        entry.end()\n      }\n      this[EMIT](DONE)\n    }\n  }\n\n  [CONSUMECHUNK](chunk?: Buffer) {\n    if (this[CONSUMING] && chunk) {\n      this[BUFFERCONCAT](chunk)\n    } else if (!chunk && !this[BUFFER]) {\n      this[MAYBEEND]()\n    } else if (chunk) {\n      this[CONSUMING] = true\n      if (this[BUFFER]) {\n        this[BUFFERCONCAT](chunk)\n        const c = this[BUFFER]\n        this[BUFFER] = undefined\n        this[CONSUMECHUNKSUB](c)\n      } else {\n        this[CONSUMECHUNKSUB](chunk)\n      }\n\n      while (\n        this[BUFFER] &&\n        (this[BUFFER] as Buffer)?.length >= 512 &&\n        !this[ABORTED] &&\n        !this[SAW_EOF]\n      ) {\n        const c = this[BUFFER]\n        this[BUFFER] = undefined\n        this[CONSUMECHUNKSUB](c)\n      }\n      this[CONSUMING] = false\n    }\n\n    if (!this[BUFFER] || this[ENDED]) {\n      this[MAYBEEND]()\n    }\n  }\n\n  [CONSUMECHUNKSUB](chunk: Buffer) {\n    // we know that we are in CONSUMING mode, so anything written goes into\n    // the buffer.  Advance the position and put any remainder in the buffer.\n    let position = 0\n    const length = chunk.length\n    while (position + 512 <= length && !this[ABORTED] && !this[SAW_EOF]) {\n      switch (this[STATE]) {\n        case 'begin':\n        case 'header':\n          this[CONSUMEHEADER](chunk, position)\n          position += 512\n          break\n\n        case 'ignore':\n        case 'body':\n          position += this[CONSUMEBODY](chunk, position)\n          break\n\n        case 'meta':\n          position += this[CONSUMEMETA](chunk, position)\n          break\n\n        /* c8 ignore start */\n        default:\n          throw new Error('invalid state: ' + this[STATE])\n        /* c8 ignore stop */\n      }\n    }\n\n    if (position < length) {\n      this[BUFFER] =\n        this[BUFFER] ?\n          Buffer.concat([chunk.subarray(position), this[BUFFER]])\n        : chunk.subarray(position)\n    }\n  }\n\n  end(cb?: () => void): this\n  end(data: string | Buffer, cb?: () => void): this\n  end(str: string, encoding?: BufferEncoding, cb?: () => void): this\n  end(\n    chunk?: string | Buffer | (() => void),\n    encoding?: BufferEncoding | (() => void),\n    cb?: () => void,\n  ) {\n    if (typeof chunk === 'function') {\n      cb = chunk\n      encoding = undefined\n      chunk = undefined\n    }\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = undefined\n    }\n    if (typeof chunk === 'string') {\n      chunk = Buffer.from(chunk, encoding)\n    }\n    if (cb) this.once('finish', cb)\n    if (!this[ABORTED]) {\n      if (this[UNZIP]) {\n        /* c8 ignore start */\n        if (chunk) {\n          this[COMPRESSEDBYTESREAD] += chunk.length\n          this[UNZIP].write(chunk)\n        }\n        /* c8 ignore stop */\n        this[UNZIP].end()\n      } else {\n        this[ENDED] = true\n        if (this.brotli === undefined || this.zstd === undefined)\n          chunk = chunk || Buffer.alloc(0)\n        if (chunk) this.write(chunk)\n        this[MAYBEEND]()\n      }\n    }\n    return this\n  }\n}\n","import assert from 'assert'\nimport { Buffer } from 'buffer'\nimport { Minipass } from 'minipass'\nimport * as realZlib from 'zlib'\nimport { constants } from './constants.js'\nexport { constants } from './constants.js'\n\nconst OriginalBufferConcat = Buffer.concat\nconst desc = Object.getOwnPropertyDescriptor(Buffer, 'concat')\nconst noop = (args: Buffer[]) => args as unknown as Buffer\nconst passthroughBufferConcat =\n  desc?.writable === true || desc?.set !== undefined\n    ? (makeNoOp: boolean) => {\n        Buffer.concat = makeNoOp ? noop : OriginalBufferConcat\n      }\n    : (_: boolean) => {}\n\nconst _superWrite = Symbol('_superWrite')\n\nexport class ZlibError extends Error {\n  code?: string\n  errno?: number\n  constructor(err: NodeJS.ErrnoException | Error, origin?: Function) {\n    super('zlib: ' + err.message, { cause: err })\n    this.code = (err as NodeJS.ErrnoException).code\n    this.errno = (err as NodeJS.ErrnoException).errno\n    /* c8 ignore next */\n    if (!this.code) this.code = 'ZLIB_ERROR'\n\n    this.message = 'zlib: ' + err.message\n    Error.captureStackTrace(this, origin ?? this.constructor)\n  }\n\n  get name() {\n    return 'ZlibError'\n  }\n}\n\n// the Zlib class they all inherit from\n// This thing manages the queue of requests, and returns\n// true or false if there is anything in the queue when\n// you call the .write() method.\nconst _flushFlag = Symbol('flushFlag')\n\nexport type ChunkWithFlushFlag = Minipass.ContiguousData & {\n  [_flushFlag]?: number\n}\n\nexport type ZlibBaseOptions = Minipass.Options<Minipass.ContiguousData> & {\n  flush?: number\n  finishFlush?: number\n  fullFlushFlag?: number\n}\n\nexport type ZlibHandle =\n  | realZlib.Gzip\n  | realZlib.Gunzip\n  | realZlib.Deflate\n  | realZlib.Inflate\n  | realZlib.DeflateRaw\n  | realZlib.InflateRaw\n  | realZlib.BrotliCompress\n  | realZlib.BrotliDecompress\n  | realZlib.ZstdCompress\n  | realZlib.ZstdDecompress\nexport type ZlibMode =\n  | 'Gzip'\n  | 'Gunzip'\n  | 'Deflate'\n  | 'Inflate'\n  | 'DeflateRaw'\n  | 'InflateRaw'\n  | 'Unzip'\nexport type BrotliMode = 'BrotliCompress' | 'BrotliDecompress'\nexport type ZstdMode = 'ZstdCompress' | 'ZstdDecompress'\n\nabstract class ZlibBase extends Minipass<Buffer, ChunkWithFlushFlag> {\n  #sawError: boolean = false\n  #ended: boolean = false\n  #flushFlag: number\n  #finishFlushFlag: number\n  #fullFlushFlag: number\n  #handle?: ZlibHandle\n  #onError: (err: ZlibError) => any\n\n  get sawError() {\n    return this.#sawError\n  }\n  get handle() {\n    return this.#handle\n  }\n  /* c8 ignore start */\n  get flushFlag() {\n    return this.#flushFlag\n  }\n  /* c8 ignore stop */\n\n  constructor(opts: ZlibBaseOptions, mode: ZlibMode | BrotliMode | ZstdMode) {\n    if (!opts || typeof opts !== 'object')\n      throw new TypeError('invalid options for ZlibBase constructor')\n\n    //@ts-ignore\n    super(opts)\n\n    /* c8 ignore start */\n    this.#flushFlag = opts.flush ?? 0\n    this.#finishFlushFlag = opts.finishFlush ?? 0\n    this.#fullFlushFlag = opts.fullFlushFlag ?? 0\n    /* c8 ignore stop */\n\n    //@ts-ignore\n    if (typeof realZlib[mode] !== 'function') {\n      throw new TypeError('Compression method not supported: ' + mode)\n    }\n\n    // this will throw if any options are invalid for the class selected\n    try {\n      // @types/node doesn't know that it exports the classes, but they're there\n      //@ts-ignore\n      this.#handle = new realZlib[mode](opts)\n    } catch (er) {\n      // make sure that all errors get decorated properly\n      throw new ZlibError(er as NodeJS.ErrnoException, this.constructor)\n    }\n\n    this.#onError = err => {\n      // no sense raising multiple errors, since we abort on the first one.\n      if (this.#sawError) return\n\n      this.#sawError = true\n\n      // there is no way to cleanly recover.\n      // continuing only obscures problems.\n      this.close()\n      this.emit('error', err)\n    }\n\n    this.#handle?.on('error', er => this.#onError(new ZlibError(er)))\n    this.once('end', () => this.close)\n  }\n\n  close() {\n    if (this.#handle) {\n      this.#handle.close()\n      this.#handle = undefined\n      this.emit('close')\n    }\n  }\n\n  reset() {\n    if (!this.#sawError) {\n      assert(this.#handle, 'zlib binding closed')\n      //@ts-ignore\n      return this.#handle.reset?.()\n    }\n  }\n\n  flush(flushFlag?: number) {\n    if (this.ended) return\n\n    if (typeof flushFlag !== 'number') flushFlag = this.#fullFlushFlag\n\n    this.write(Object.assign(Buffer.alloc(0), { [_flushFlag]: flushFlag }))\n  }\n\n  end(cb?: () => void): this\n  end(chunk: ChunkWithFlushFlag, cb?: () => void): this\n  end(\n    chunk: ChunkWithFlushFlag,\n    encoding?: Minipass.Encoding,\n    cb?: () => void,\n  ): this\n  end(\n    chunk?: ChunkWithFlushFlag | (() => void),\n    encoding?: Minipass.Encoding | (() => void),\n    cb?: () => void,\n  ) {\n    /* c8 ignore start */\n    if (typeof chunk === 'function') {\n      cb = chunk\n      encoding = undefined\n      chunk = undefined\n    }\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = undefined\n    }\n    /* c8 ignore stop */\n    if (chunk) {\n      if (encoding) this.write(chunk, encoding)\n      else this.write(chunk)\n    }\n    this.flush(this.#finishFlushFlag)\n    this.#ended = true\n    return super.end(cb)\n  }\n\n  get ended() {\n    return this.#ended\n  }\n\n  // overridden in the gzip classes to do portable writes\n  [_superWrite](data: Buffer & { [_flushFlag]?: number }) {\n    return super.write(data)\n  }\n\n  write(chunk: ChunkWithFlushFlag, cb?: () => void): boolean\n  write(\n    chunk: ChunkWithFlushFlag,\n    encoding?: Minipass.Encoding,\n    cb?: () => void,\n  ): boolean\n  write(\n    chunk: ChunkWithFlushFlag,\n    encoding?: Minipass.Encoding | (() => void),\n    cb?: () => void,\n  ) {\n    // process the chunk using the sync process\n    // then super.write() all the outputted chunks\n    if (typeof encoding === 'function')\n      (cb = encoding), (encoding = 'utf8')\n\n    if (typeof chunk === 'string')\n      chunk = Buffer.from(chunk as string, encoding as BufferEncoding)\n\n    if (this.#sawError) return\n    assert(this.#handle, 'zlib binding closed')\n\n    // _processChunk tries to .close() the native handle after it's done, so we\n    // intercept that by temporarily making it a no-op.\n    // diving into the node:zlib internals a bit here\n    const nativeHandle = (this.#handle as unknown as { _handle: any })\n      ._handle\n    const originalNativeClose = nativeHandle.close\n    nativeHandle.close = () => {}\n    const originalClose = this.#handle.close\n    this.#handle.close = () => {}\n    // It also calls `Buffer.concat()` at the end, which may be convenient\n    // for some, but which we are not interested in as it slows us down.\n    passthroughBufferConcat(true)\n    let result: undefined | Buffer | Buffer[] = undefined\n    try {\n      const flushFlag =\n        typeof chunk[_flushFlag] === 'number'\n          ? chunk[_flushFlag]\n          : this.#flushFlag\n      result = (\n        this.#handle as unknown as {\n          _processChunk: (chunk: Buffer, flushFlag: number) => Buffer[]\n        }\n      )._processChunk(chunk as Buffer, flushFlag)\n      // if we don't throw, reset it back how it was\n      passthroughBufferConcat(false)\n    } catch (err) {\n      // or if we do, put Buffer.concat() back before we emit error\n      // Error events call into user code, which may call Buffer.concat()\n      passthroughBufferConcat(false)\n      this.#onError(new ZlibError(err as NodeJS.ErrnoException, this.write))\n    } finally {\n      if (this.#handle) {\n        // Core zlib resets `_handle` to null after attempting to close the\n        // native handle. Our no-op handler prevented actual closure, but we\n        // need to restore the `._handle` property.\n        ;(this.#handle as unknown as { _handle: any })._handle =\n          nativeHandle\n        nativeHandle.close = originalNativeClose\n        this.#handle.close = originalClose\n        // `_processChunk()` adds an 'error' listener. If we don't remove it\n        // after each call, these handlers start piling up.\n        this.#handle.removeAllListeners('error')\n        // make sure OUR error listener is still attached tho\n      }\n    }\n\n    if (this.#handle)\n      this.#handle.on('error', er => this.#onError(new ZlibError(er, this.write)))\n\n    let writeReturn\n    if (result) {\n      if (Array.isArray(result) && result.length > 0) {\n        const r = result[0]\n        // The first buffer is always `handle._outBuffer`, which would be\n        // re-used for later invocations; so, we always have to copy that one.\n        writeReturn = this[_superWrite](Buffer.from(r as Buffer))\n        for (let i = 1; i < result.length; i++) {\n          writeReturn = this[_superWrite](result[i] as Buffer)\n        }\n      } else {\n        // either a single Buffer or an empty array\n        writeReturn = this[_superWrite](Buffer.from(result as Buffer | []))\n      }\n    }\n\n    if (cb) cb()\n    return writeReturn\n  }\n}\n\nexport type ZlibOptions = ZlibBaseOptions & {\n  level?: number\n  strategy?: number\n}\n\nexport class Zlib extends ZlibBase {\n  #level?: number\n  #strategy?: number\n\n  constructor(opts: ZlibOptions, mode: ZlibMode) {\n    opts = opts || {}\n\n    opts.flush = opts.flush || constants.Z_NO_FLUSH\n    opts.finishFlush = opts.finishFlush || constants.Z_FINISH\n    opts.fullFlushFlag = constants.Z_FULL_FLUSH\n    super(opts, mode)\n\n    this.#level = opts.level\n    this.#strategy = opts.strategy\n  }\n\n  params(level: number, strategy: number) {\n    if (this.sawError) return\n\n    if (!this.handle)\n      throw new Error('cannot switch params when binding is closed')\n\n    // no way to test this without also not supporting params at all\n    /* c8 ignore start */\n    if (!(this.handle as { params?: any }).params)\n      throw new Error('not supported in this implementation')\n    /* c8 ignore stop */\n\n    if (this.#level !== level || this.#strategy !== strategy) {\n      this.flush(constants.Z_SYNC_FLUSH)\n      assert(this.handle, 'zlib binding closed')\n      // .params() calls .flush(), but the latter is always async in the\n      // core zlib. We override .flush() temporarily to intercept that and\n      // flush synchronously.\n      const origFlush = this.handle.flush\n      this.handle.flush = (\n        flushFlag?: (() => void) | number,\n        cb?: () => void,\n      ) => {\n        /* c8 ignore start */\n        if (typeof flushFlag === 'function') {\n          cb = flushFlag\n          flushFlag = this.flushFlag\n        }\n        /* c8 ignore stop */\n        this.flush(flushFlag)\n        cb?.()\n      }\n      try {\n        ;(\n          this.handle as unknown as {\n            params: (level?: number, strategy?: number) => void\n          }\n        ).params(level, strategy)\n      } finally {\n        this.handle.flush = origFlush\n      }\n      /* c8 ignore start */\n      if (this.handle) {\n        this.#level = level\n        this.#strategy = strategy\n      }\n      /* c8 ignore stop */\n    }\n  }\n}\n\n// minimal 2-byte header\nexport class Deflate extends Zlib {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'Deflate')\n  }\n}\n\nexport class Inflate extends Zlib {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'Inflate')\n  }\n}\n\n// gzip - bigger header, same deflate compression\nexport type GzipOptions = ZlibOptions & { portable?: boolean }\nexport class Gzip extends Zlib {\n  #portable: boolean\n  constructor(opts: GzipOptions) {\n    super(opts, 'Gzip')\n    this.#portable = opts && !!opts.portable\n  }\n\n  [_superWrite](data: Buffer & { [_flushFlag]?: number }) {\n    if (!this.#portable) return super[_superWrite](data)\n\n    // we'll always get the header emitted in one first chunk\n    // overwrite the OS indicator byte with 0xFF\n    this.#portable = false\n    data[9] = 255\n    return super[_superWrite](data)\n  }\n}\n\nexport class Gunzip extends Zlib {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'Gunzip')\n  }\n}\n\n// raw - no header\nexport class DeflateRaw extends Zlib {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'DeflateRaw')\n  }\n}\n\nexport class InflateRaw extends Zlib {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'InflateRaw')\n  }\n}\n\n// auto-detect header.\nexport class Unzip extends Zlib {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'Unzip')\n  }\n}\n\nclass Brotli extends ZlibBase {\n  constructor(opts: ZlibOptions, mode: BrotliMode) {\n    opts = opts || {}\n\n    opts.flush = opts.flush || constants.BROTLI_OPERATION_PROCESS\n    opts.finishFlush =\n      opts.finishFlush || constants.BROTLI_OPERATION_FINISH\n    opts.fullFlushFlag = constants.BROTLI_OPERATION_FLUSH\n    super(opts, mode)\n  }\n}\n\nexport class BrotliCompress extends Brotli {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'BrotliCompress')\n  }\n}\n\nexport class BrotliDecompress extends Brotli {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'BrotliDecompress')\n  }\n}\n\nclass Zstd extends ZlibBase {\n  constructor(opts: ZlibOptions, mode: ZstdMode) {\n    opts = opts || {}\n\n    opts.flush = opts.flush || constants.ZSTD_e_continue\n    opts.finishFlush = opts.finishFlush || constants.ZSTD_e_end\n    opts.fullFlushFlag = constants.ZSTD_e_flush\n    super(opts, mode)\n  }\n}\n\nexport class ZstdCompress extends Zstd {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'ZstdCompress')\n  }\n}\n\nexport class ZstdDecompress extends Zstd {\n  constructor(opts: ZlibOptions) {\n    super(opts, 'ZstdDecompress')\n  }\n}\n","// Update with any zlib constants that are added or changed in the future.\n// Node v6 didn't export this, so we just hard code the version and rely\n// on all the other hard-coded values from zlib v4736.  When node v6\n// support drops, we can just export the realZlibConstants object.\nimport realZlib from 'zlib'\n/* c8 ignore start */\nconst realZlibConstants = realZlib.constants || { ZLIB_VERNUM: 4736 }\n/* c8 ignore stop */\n\nexport const constants = Object.freeze(\n  Object.assign(\n    Object.create(null),\n    {\n      Z_NO_FLUSH: 0,\n      Z_PARTIAL_FLUSH: 1,\n      Z_SYNC_FLUSH: 2,\n      Z_FULL_FLUSH: 3,\n      Z_FINISH: 4,\n      Z_BLOCK: 5,\n      Z_OK: 0,\n      Z_STREAM_END: 1,\n      Z_NEED_DICT: 2,\n      Z_ERRNO: -1,\n      Z_STREAM_ERROR: -2,\n      Z_DATA_ERROR: -3,\n      Z_MEM_ERROR: -4,\n      Z_BUF_ERROR: -5,\n      Z_VERSION_ERROR: -6,\n      Z_NO_COMPRESSION: 0,\n      Z_BEST_SPEED: 1,\n      Z_BEST_COMPRESSION: 9,\n      Z_DEFAULT_COMPRESSION: -1,\n      Z_FILTERED: 1,\n      Z_HUFFMAN_ONLY: 2,\n      Z_RLE: 3,\n      Z_FIXED: 4,\n      Z_DEFAULT_STRATEGY: 0,\n      DEFLATE: 1,\n      INFLATE: 2,\n      GZIP: 3,\n      GUNZIP: 4,\n      DEFLATERAW: 5,\n      INFLATERAW: 6,\n      UNZIP: 7,\n      BROTLI_DECODE: 8,\n      BROTLI_ENCODE: 9,\n      Z_MIN_WINDOWBITS: 8,\n      Z_MAX_WINDOWBITS: 15,\n      Z_DEFAULT_WINDOWBITS: 15,\n      Z_MIN_CHUNK: 64,\n      Z_MAX_CHUNK: Infinity,\n      Z_DEFAULT_CHUNK: 16384,\n      Z_MIN_MEMLEVEL: 1,\n      Z_MAX_MEMLEVEL: 9,\n      Z_DEFAULT_MEMLEVEL: 8,\n      Z_MIN_LEVEL: -1,\n      Z_MAX_LEVEL: 9,\n      Z_DEFAULT_LEVEL: -1,\n      BROTLI_OPERATION_PROCESS: 0,\n      BROTLI_OPERATION_FLUSH: 1,\n      BROTLI_OPERATION_FINISH: 2,\n      BROTLI_OPERATION_EMIT_METADATA: 3,\n      BROTLI_MODE_GENERIC: 0,\n      BROTLI_MODE_TEXT: 1,\n      BROTLI_MODE_FONT: 2,\n      BROTLI_DEFAULT_MODE: 0,\n      BROTLI_MIN_QUALITY: 0,\n      BROTLI_MAX_QUALITY: 11,\n      BROTLI_DEFAULT_QUALITY: 11,\n      BROTLI_MIN_WINDOW_BITS: 10,\n      BROTLI_MAX_WINDOW_BITS: 24,\n      BROTLI_LARGE_MAX_WINDOW_BITS: 30,\n      BROTLI_DEFAULT_WINDOW: 22,\n      BROTLI_MIN_INPUT_BLOCK_BITS: 16,\n      BROTLI_MAX_INPUT_BLOCK_BITS: 24,\n      BROTLI_PARAM_MODE: 0,\n      BROTLI_PARAM_QUALITY: 1,\n      BROTLI_PARAM_LGWIN: 2,\n      BROTLI_PARAM_LGBLOCK: 3,\n      BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4,\n      BROTLI_PARAM_SIZE_HINT: 5,\n      BROTLI_PARAM_LARGE_WINDOW: 6,\n      BROTLI_PARAM_NPOSTFIX: 7,\n      BROTLI_PARAM_NDIRECT: 8,\n      BROTLI_DECODER_RESULT_ERROR: 0,\n      BROTLI_DECODER_RESULT_SUCCESS: 1,\n      BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2,\n      BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3,\n      BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0,\n      BROTLI_DECODER_PARAM_LARGE_WINDOW: 1,\n      BROTLI_DECODER_NO_ERROR: 0,\n      BROTLI_DECODER_SUCCESS: 1,\n      BROTLI_DECODER_NEEDS_MORE_INPUT: 2,\n      BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3,\n      BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1,\n      BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2,\n      BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3,\n      BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4,\n      BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5,\n      BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6,\n      BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7,\n      BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8,\n      BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9,\n      BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10,\n      BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11,\n      BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12,\n      BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13,\n      BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14,\n      BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15,\n      BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16,\n      BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19,\n      BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20,\n      BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21,\n      BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22,\n      BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25,\n      BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26,\n      BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27,\n      BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30,\n      BROTLI_DECODER_ERROR_UNREACHABLE: -31,\n    },\n    realZlibConstants,\n  ),\n)\n","// parse a 512-byte header block to a data object, or vice-versa\n// encode returns `true` if a pax extended header is needed, because\n// the data could not be faithfully encoded in a simple header.\n// (Also, check header.needPax to see if it needs a pax header.)\n\nimport { posix as pathModule } from 'node:path'\nimport * as large from './large-numbers.js'\nimport type { EntryTypeCode, EntryTypeName } from './types.js'\nimport * as types from './types.js'\n\nconst notNegative = (n?: number): number | undefined =>\n  n === undefined || n < 0 ? undefined : n\n\nexport type HeaderData = {\n  path?: string\n  mode?: number\n  uid?: number\n  gid?: number\n  size?: number\n  cksum?: number\n  type?: EntryTypeName | 'Unsupported'\n  linkpath?: string\n  uname?: string\n  gname?: string\n  devmaj?: number\n  devmin?: number\n  atime?: Date\n  ctime?: Date\n  mtime?: Date\n\n  // fields that are common in extended PAX headers, but not in the\n  // \"standard\" tar header block\n  charset?: string\n  comment?: string\n  dev?: number\n  ino?: number\n  nlink?: number\n}\n\nexport class Header implements HeaderData {\n  cksumValid: boolean = false\n  needPax: boolean = false\n  nullBlock: boolean = false\n\n  block?: Buffer\n  path?: string\n  mode?: number\n  uid?: number\n  gid?: number\n  size?: number\n  cksum?: number\n  #type: EntryTypeCode | 'Unsupported' = 'Unsupported'\n  linkpath?: string\n  uname?: string\n  gname?: string\n  devmaj: number = 0\n  devmin: number = 0\n  atime?: Date\n  ctime?: Date\n  mtime?: Date\n\n  charset?: string\n  comment?: string\n\n  constructor(\n    data?: Buffer | HeaderData,\n    off: number = 0,\n    ex?: HeaderData,\n    gex?: HeaderData,\n  ) {\n    if (Buffer.isBuffer(data)) {\n      this.decode(data, off || 0, ex, gex)\n    } else if (data) {\n      this.#slurp(data)\n    }\n  }\n\n  decode(buf: Buffer, off: number, ex?: HeaderData, gex?: HeaderData) {\n    if (!off) {\n      off = 0\n    }\n\n    if (!buf || !(buf.length >= off + 512)) {\n      throw new Error('need 512 bytes for header')\n    }\n\n    // Decode the typeflag (independent of any pending PAX/GNU extended header)\n    // up front so we can tell whether THIS block is itself an intermediary\n    // extension header (PAX `x`/`g`, GNU long-name `L`, GNU long-link `K`).\n    // Per POSIX pax, a PAX extended header describes the *next file entry*, not\n    // the extension headers that may sit between it and that file. Applying the\n    // pending PAX overrides (notably `size`) to an intervening `L`/`K`/`x`/`g`\n    // header desynchronizes the stream relative to other tar implementations\n    // and enables tar interpretation-conflict / file-smuggling attacks.\n    const t = decString(buf, off + 156, 1)\n    const isNormalFS = types.normalFsTypes.has(t as EntryTypeCode)\n    const exForFields = isNormalFS ? ex : undefined\n    const gexForFields = isNormalFS ? gex : undefined\n\n    this.path = exForFields?.path ?? decString(buf, off, 100)\n    this.mode =\n      exForFields?.mode ??\n      gexForFields?.mode ??\n      decNumber(buf, off + 100, 8)\n    this.uid =\n      exForFields?.uid ?? gexForFields?.uid ?? decNumber(buf, off + 108, 8)\n    this.gid =\n      exForFields?.gid ?? gexForFields?.gid ?? decNumber(buf, off + 116, 8)\n\n    this.size = notNegative(\n      exForFields?.size ??\n        gexForFields?.size ??\n        decNumber(buf, off + 124, 12),\n    )\n    this.mtime =\n      exForFields?.mtime ??\n      gexForFields?.mtime ??\n      decDate(buf, off + 136, 12)\n    this.cksum = decNumber(buf, off + 148, 12)\n\n    // if we have extended or global extended headers, apply them now\n    // See https://github.com/npm/node-tar/pull/187\n    // Apply global before local, so it overrides. Never slurp the pending\n    // extended-header fields onto an intermediary extension header.\n    if (gexForFields) this.#slurp(gexForFields, true)\n    if (exForFields) this.#slurp(exForFields)\n\n    // old tar versions marked dirs as a file with a trailing /\n    if (types.isCode(t)) {\n      this.#type = t || '0'\n    }\n    if (this.#type === '0' && this.path.slice(-1) === '/') {\n      this.#type = '5'\n    }\n\n    // tar implementations sometimes incorrectly put the stat(dir).size\n    // as the size in the tarball, even though Directory entries are\n    // not able to have any body at all.  In the very rare chance that\n    // it actually DOES have a body, we weren't going to do anything with\n    // it anyway, and it'll just be a warning about an invalid header.\n    if (this.#type === '5') {\n      this.size = 0\n    }\n\n    this.linkpath = decString(buf, off + 157, 100)\n    if (\n      buf.subarray(off + 257, off + 265).toString() === 'ustar\\u000000'\n    ) {\n      /* c8 ignore start */\n      this.uname =\n        exForFields?.uname ??\n        gexForFields?.uname ??\n        decString(buf, off + 265, 32)\n      this.gname =\n        exForFields?.gname ??\n        gexForFields?.gname ??\n        decString(buf, off + 297, 32)\n      this.devmaj =\n        exForFields?.devmaj ??\n        gexForFields?.devmaj ??\n        decNumber(buf, off + 329, 8) ??\n        0\n      this.devmin =\n        exForFields?.devmin ??\n        gexForFields?.devmin ??\n        decNumber(buf, off + 337, 8) ??\n        0\n      /* c8 ignore stop */\n      if (buf[off + 475] !== 0) {\n        // definitely a prefix, definitely >130 chars.\n        const prefix = decString(buf, off + 345, 155)\n        this.path = prefix + '/' + this.path\n      } else {\n        const prefix = decString(buf, off + 345, 130)\n        if (prefix) {\n          this.path = prefix + '/' + this.path\n        }\n        /* c8 ignore start */\n        this.atime = ex?.atime ?? gex?.atime ?? decDate(buf, off + 476, 12)\n        this.ctime = ex?.ctime ?? gex?.ctime ?? decDate(buf, off + 488, 12)\n        /* c8 ignore stop */\n      }\n    }\n\n    let sum = 8 * 0x20\n    for (let i = off; i < off + 148; i++) {\n      sum += buf[i] as number\n    }\n\n    for (let i = off + 156; i < off + 512; i++) {\n      sum += buf[i] as number\n    }\n\n    this.cksumValid = sum === this.cksum\n    if (this.cksum === undefined && sum === 8 * 0x20) {\n      this.nullBlock = true\n    }\n  }\n\n  #slurp(ex: HeaderData, gex: boolean = false) {\n    Object.assign(\n      this,\n      Object.fromEntries(\n        Object.entries(ex).filter(([k, v]) => {\n          // we slurp in everything except for the path attribute in\n          // a global extended header, because that's weird. Also, any\n          // null/undefined values are ignored.\n          return !(\n            v === null ||\n            v === undefined ||\n            (k === 'size' && Number(v) < 0) ||\n            (k === 'path' && gex) ||\n            (k === 'linkpath' && gex) ||\n            k === 'global'\n          )\n        }),\n      ),\n    )\n  }\n\n  encode(buf?: Buffer, off: number = 0) {\n    if (!buf) {\n      buf = this.block = Buffer.alloc(512)\n    }\n\n    if (this.#type === 'Unsupported') {\n      this.#type = '0'\n    }\n\n    if (!(buf.length >= off + 512)) {\n      throw new Error('need 512 bytes for header')\n    }\n\n    const prefixSize = this.ctime || this.atime ? 130 : 155\n    const split = splitPrefix(this.path || '', prefixSize)\n    const path = split[0]\n    const prefix = split[1]\n    this.needPax = !!split[2]\n\n    this.needPax = encString(buf, off, 100, path) || this.needPax\n    this.needPax = encNumber(buf, off + 100, 8, this.mode) || this.needPax\n    this.needPax = encNumber(buf, off + 108, 8, this.uid) || this.needPax\n    this.needPax = encNumber(buf, off + 116, 8, this.gid) || this.needPax\n    this.needPax = encNumber(buf, off + 124, 12, this.size) || this.needPax\n    this.needPax = encDate(buf, off + 136, 12, this.mtime) || this.needPax\n    buf[off + 156] = Number(this.#type.codePointAt(0))\n    this.needPax =\n      encString(buf, off + 157, 100, this.linkpath) || this.needPax\n    buf.write('ustar\\u000000', off + 257, 8)\n    this.needPax =\n      encString(buf, off + 265, 32, this.uname) || this.needPax\n    this.needPax =\n      encString(buf, off + 297, 32, this.gname) || this.needPax\n    this.needPax =\n      encNumber(buf, off + 329, 8, this.devmaj) || this.needPax\n    this.needPax =\n      encNumber(buf, off + 337, 8, this.devmin) || this.needPax\n    this.needPax =\n      encString(buf, off + 345, prefixSize, prefix) || this.needPax\n    if (buf[off + 475] !== 0) {\n      this.needPax = encString(buf, off + 345, 155, prefix) || this.needPax\n    } else {\n      this.needPax = encString(buf, off + 345, 130, prefix) || this.needPax\n      this.needPax =\n        encDate(buf, off + 476, 12, this.atime) || this.needPax\n      this.needPax =\n        encDate(buf, off + 488, 12, this.ctime) || this.needPax\n    }\n\n    let sum = 8 * 0x20\n    for (let i = off; i < off + 148; i++) {\n      sum += buf[i] as number\n    }\n\n    for (let i = off + 156; i < off + 512; i++) {\n      sum += buf[i] as number\n    }\n\n    this.cksum = sum\n    encNumber(buf, off + 148, 8, this.cksum)\n    this.cksumValid = true\n\n    return this.needPax\n  }\n\n  get type(): EntryTypeName {\n    return (\n      this.#type === 'Unsupported' ?\n        this.#type\n      : types.name.get(this.#type)) as EntryTypeName\n  }\n\n  get typeKey(): EntryTypeCode | 'Unsupported' {\n    return this.#type\n  }\n\n  set type(type: EntryTypeCode | EntryTypeName | 'Unsupported') {\n    const c = String(types.code.get(type as EntryTypeName))\n    if (types.isCode(c) || c === 'Unsupported') {\n      this.#type = c\n    } else if (types.isCode(type)) {\n      this.#type = type\n    } else {\n      throw new TypeError('invalid entry type: ' + type)\n    }\n  }\n}\n\nconst splitPrefix = (\n  p: string,\n  prefixSize: number,\n): [string, string, boolean] => {\n  const pathSize = 100\n  let pp = p\n  let prefix = ''\n  let ret: undefined | [string, string, boolean] = undefined\n  const root = pathModule.parse(p).root || '.'\n\n  if (Buffer.byteLength(pp) < pathSize) {\n    ret = [pp, prefix, false]\n  } else {\n    // first set prefix to the dir, and path to the base\n    prefix = pathModule.dirname(pp)\n    pp = pathModule.basename(pp)\n\n    do {\n      if (\n        Buffer.byteLength(pp) <= pathSize &&\n        Buffer.byteLength(prefix) <= prefixSize\n      ) {\n        // both fit!\n        ret = [pp, prefix, false]\n      } else if (\n        Buffer.byteLength(pp) > pathSize &&\n        Buffer.byteLength(prefix) <= prefixSize\n      ) {\n        // prefix fits in prefix, but path doesn't fit in path\n        ret = [pp.slice(0, pathSize - 1), prefix, true]\n      } else {\n        // make path take a bit from prefix\n        pp = pathModule.join(pathModule.basename(prefix), pp)\n        prefix = pathModule.dirname(prefix)\n      }\n    } while (prefix !== root && ret === undefined)\n\n    // at this point, found no resolution, just truncate\n    if (!ret) {\n      ret = [p.slice(0, pathSize - 1), '', true]\n    }\n  }\n  return ret\n}\n\nconst decString = (buf: Buffer, off: number, size: number) =>\n  buf\n    .subarray(off, off + size)\n    .toString('utf8')\n    .replace(/\\0.*/, '')\n\nconst decDate = (buf: Buffer, off: number, size: number) =>\n  numToDate(decNumber(buf, off, size))\n\nconst numToDate = (num?: number) =>\n  num === undefined ? undefined : new Date(num * 1000)\n\nconst decNumber = (buf: Buffer, off: number, size: number) =>\n  Number(buf[off]) & 0x80 ?\n    large.parse(buf.subarray(off, off + size))\n  : decSmallNumber(buf, off, size)\n\nconst nanUndef = (value: number) => (isNaN(value) ? undefined : value)\n\nconst decSmallNumber = (buf: Buffer, off: number, size: number) =>\n  nanUndef(\n    parseInt(\n      buf\n        .subarray(off, off + size)\n        .toString('utf8')\n        .replace(/\\0.*$/, '')\n        .trim(),\n      8,\n    ),\n  )\n\n// the maximum encodable as a null-terminated octal, by field size\nconst MAXNUM = {\n  12: 0o77777777777,\n  8: 0o7777777,\n}\n\nconst encNumber = (\n  buf: Buffer,\n  off: number,\n  size: 12 | 8,\n  num?: number,\n) =>\n  num === undefined ? false\n  : num > MAXNUM[size] || num < 0 ?\n    (large.encode(num, buf.subarray(off, off + size)), true)\n  : (encSmallNumber(buf, off, size, num), false)\n\nconst encSmallNumber = (\n  buf: Buffer,\n  off: number,\n  size: number,\n  num: number,\n) => buf.write(octalString(num, size), off, size, 'ascii')\n\nconst octalString = (num: number, size: number) =>\n  padOctal(Math.floor(num).toString(8), size)\n\nconst padOctal = (str: string, size: number) =>\n  (str.length === size - 1 ?\n    str\n  : new Array(size - str.length - 1).join('0') + str + ' ') + '\\0'\n\nconst encDate = (buf: Buffer, off: number, size: 8 | 12, date?: Date) =>\n  date === undefined ? false : (\n    encNumber(buf, off, size, date.getTime() / 1000)\n  )\n\n// enough to fill the longest string we've got\nconst NULLS = new Array(156).join('\\0')\n// pad with nulls, return true if it's longer or non-ascii\nconst encString = (\n  buf: Buffer,\n  off: number,\n  size: number,\n  str?: string,\n) =>\n  str === undefined ? false : (\n    (buf.write(str + NULLS, off, size, 'utf8'),\n    str.length !== Buffer.byteLength(str) || str.length > size)\n  )\n","// Tar can encode large and negative numbers using a leading byte of\n// 0xff for negative, and 0x80 for positive.\n\nexport const encode = (num: number, buf: Buffer) => {\n  if (!Number.isSafeInteger(num)) {\n    // The number is so large that javascript cannot represent it with integer\n    // precision.\n    throw Error(\n      'cannot encode number outside of javascript safe integer range',\n    )\n  } else if (num < 0) {\n    encodeNegative(num, buf)\n  } else {\n    encodePositive(num, buf)\n  }\n  return buf\n}\n\nconst encodePositive = (num: number, buf: Buffer) => {\n  buf[0] = 0x80\n\n  for (var i = buf.length; i > 1; i--) {\n    buf[i - 1] = num & 0xff\n    num = Math.floor(num / 0x100)\n  }\n}\n\nconst encodeNegative = (num: number, buf: Buffer) => {\n  buf[0] = 0xff\n  var flipped = false\n  num = num * -1\n  for (var i = buf.length; i > 1; i--) {\n    var byte = num & 0xff\n    num = Math.floor(num / 0x100)\n    if (flipped) {\n      buf[i - 1] = onesComp(byte)\n    } else if (byte === 0) {\n      buf[i - 1] = 0\n    } else {\n      flipped = true\n      buf[i - 1] = twosComp(byte)\n    }\n  }\n}\n\nexport const parse = (buf: Buffer) => {\n  const pre = buf[0]\n  const value =\n    pre === 0x80 ? pos(buf.subarray(1, buf.length))\n    : pre === 0xff ? twos(buf)\n    : null\n  if (value === null) {\n    throw Error('invalid base256 encoding')\n  }\n\n  if (!Number.isSafeInteger(value)) {\n    // The number is so large that javascript cannot represent it with integer\n    // precision.\n    throw Error('parsed number outside of javascript safe integer range')\n  }\n\n  return value\n}\n\nconst twos = (buf: Buffer) => {\n  var len = buf.length\n  var sum = 0\n  var flipped = false\n  for (var i = len - 1; i > -1; i--) {\n    var byte = Number(buf[i])\n    var f\n    if (flipped) {\n      f = onesComp(byte)\n    } else if (byte === 0) {\n      f = byte\n    } else {\n      flipped = true\n      f = twosComp(byte)\n    }\n    if (f !== 0) {\n      sum -= f * Math.pow(256, len - i - 1)\n    }\n  }\n  return sum\n}\n\nconst pos = (buf: Buffer) => {\n  var len = buf.length\n  var sum = 0\n  for (var i = len - 1; i > -1; i--) {\n    var byte = Number(buf[i])\n    if (byte !== 0) {\n      sum += byte * Math.pow(256, len - i - 1)\n    }\n  }\n  return sum\n}\n\nconst onesComp = (byte: number) => (0xff ^ byte) & 0xff\n\nconst twosComp = (byte: number) => ((0xff ^ byte) + 1) & 0xff\n","export const isCode = (c: string): c is EntryTypeCode =>\n  name.has(c as EntryTypeCode)\n\nexport const isName = (c: string): c is EntryTypeName =>\n  code.has(c as EntryTypeName)\n\nexport type EntryTypeCode =\n  | '0'\n  | ''\n  | '1'\n  | '2'\n  | '3'\n  | '4'\n  | '5'\n  | '6'\n  | '7'\n  | 'g'\n  | 'x'\n  | 'A'\n  | 'D'\n  | 'I'\n  | 'K'\n  | 'L'\n  | 'M'\n  | 'N'\n  | 'S'\n  | 'V'\n  | 'X'\n\nexport type EntryTypeName =\n  | 'File'\n  | 'OldFile'\n  | 'Link'\n  | 'SymbolicLink'\n  | 'CharacterDevice'\n  | 'BlockDevice'\n  | 'Directory'\n  | 'FIFO'\n  | 'ContiguousFile'\n  | 'GlobalExtendedHeader'\n  | 'ExtendedHeader'\n  | 'SolarisACL'\n  | 'GNUDumpDir'\n  | 'Inode'\n  | 'NextFileHasLongLinkpath'\n  | 'NextFileHasLongPath'\n  | 'ContinuationFile'\n  | 'OldGnuLongPath'\n  | 'SparseFile'\n  | 'TapeVolumeHeader'\n  | 'OldExtendedHeader'\n  | 'Unsupported'\n\n/**\n * types that are a normal file system entry, not metadata.\n *\n * These can be the subject of extended/globalExtended headers, long path\n * names, long linkpath names, etc.\n *\n * Any other types are meta, and cannot be targetted by extended PAX headers.\n */\nexport const normalFsTypes = new Set<EntryTypeCode>([\n  '0',\n  '',\n  '1',\n  '2',\n  '3',\n  '4',\n  '5',\n  '6',\n  '7',\n  'D',\n])\n\n// map types from key to human-friendly name\nexport const name = new Map<EntryTypeCode, EntryTypeName>([\n  ['0', 'File'],\n  // same as File\n  ['', 'OldFile'],\n  ['1', 'Link'],\n  ['2', 'SymbolicLink'],\n  // Devices and FIFOs aren't fully supported\n  // they are parsed, but skipped when unpacking\n  ['3', 'CharacterDevice'],\n  ['4', 'BlockDevice'],\n  ['5', 'Directory'],\n  ['6', 'FIFO'],\n  // same as File\n  ['7', 'ContiguousFile'],\n  // pax headers\n  ['g', 'GlobalExtendedHeader'],\n  ['x', 'ExtendedHeader'],\n  // vendor-specific stuff\n  // skip\n  ['A', 'SolarisACL'],\n  // like 5, but with data, which should be skipped\n  ['D', 'GNUDumpDir'],\n  // metadata only, skip\n  ['I', 'Inode'],\n  // data = link path of next file\n  ['K', 'NextFileHasLongLinkpath'],\n  // data = path of next file\n  ['L', 'NextFileHasLongPath'],\n  // skip\n  ['M', 'ContinuationFile'],\n  // like L\n  ['N', 'OldGnuLongPath'],\n  // skip\n  ['S', 'SparseFile'],\n  // skip\n  ['V', 'TapeVolumeHeader'],\n  // like x\n  ['X', 'OldExtendedHeader'],\n])\n\n// map the other direction\nexport const code = new Map<EntryTypeName, EntryTypeCode>(\n  Array.from(name).map(kv => [kv[1], kv[0]]),\n)\n","import { basename } from 'node:path'\nimport type { HeaderData } from './header.js'\nimport { Header } from './header.js'\n\nexport class Pax implements HeaderData {\n  atime?: Date\n  mtime?: Date\n  ctime?: Date\n\n  charset?: string\n  comment?: string\n\n  gid?: number\n  uid?: number\n\n  gname?: string\n  uname?: string\n  linkpath?: string\n  dev?: number\n  ino?: number\n  nlink?: number\n  path?: string\n  size?: number\n  mode?: number\n\n  global: boolean\n\n  constructor(obj: HeaderData, global: boolean = false) {\n    this.atime = obj.atime\n    this.charset = obj.charset\n    this.comment = obj.comment\n    this.ctime = obj.ctime\n    this.dev = obj.dev\n    this.gid = obj.gid\n    this.global = global\n    this.gname = obj.gname\n    this.ino = obj.ino\n    this.linkpath = obj.linkpath\n    this.mtime = obj.mtime\n    this.nlink = obj.nlink\n    this.path = obj.path\n    this.size = obj.size\n    this.uid = obj.uid\n    this.uname = obj.uname\n  }\n\n  encode() {\n    const body = this.encodeBody()\n    if (body === '') {\n      return Buffer.allocUnsafe(0)\n    }\n\n    const bodyLen = Buffer.byteLength(body)\n    // round up to 512 bytes\n    // add 512 for header\n    const bufLen = 512 * Math.ceil(1 + bodyLen / 512)\n    const buf = Buffer.allocUnsafe(bufLen)\n\n    // 0-fill the header section, it might not hit every field\n    for (let i = 0; i < 512; i++) {\n      buf[i] = 0\n    }\n\n    new Header({\n      // XXX split the path\n      // then the path should be PaxHeader + basename, but less than 99,\n      // prepend with the dirname\n      /* c8 ignore start */\n      path: ('PaxHeader/' + basename(this.path ?? '')).slice(0, 99),\n      /* c8 ignore stop */\n      mode: this.mode || 0o644,\n      uid: this.uid,\n      gid: this.gid,\n      size: bodyLen,\n      mtime: this.mtime,\n      type: this.global ? 'GlobalExtendedHeader' : 'ExtendedHeader',\n      linkpath: '',\n      uname: this.uname || '',\n      gname: this.gname || '',\n      devmaj: 0,\n      devmin: 0,\n      atime: this.atime,\n      ctime: this.ctime,\n    }).encode(buf)\n\n    buf.write(body, 512, bodyLen, 'utf8')\n\n    // null pad after the body\n    for (let i = bodyLen + 512; i < buf.length; i++) {\n      buf[i] = 0\n    }\n\n    return buf\n  }\n\n  encodeBody() {\n    return (\n      this.encodeField('path') +\n      this.encodeField('ctime') +\n      this.encodeField('atime') +\n      this.encodeField('dev') +\n      this.encodeField('ino') +\n      this.encodeField('nlink') +\n      this.encodeField('charset') +\n      this.encodeField('comment') +\n      this.encodeField('gid') +\n      this.encodeField('gname') +\n      this.encodeField('linkpath') +\n      this.encodeField('mtime') +\n      this.encodeField('size') +\n      this.encodeField('uid') +\n      this.encodeField('uname')\n    )\n  }\n\n  encodeField(field: keyof Pax): string {\n    if (this[field] === undefined) {\n      return ''\n    }\n    const r = this[field]\n    const v = r instanceof Date ? r.getTime() / 1000 : r\n    const s =\n      ' ' +\n      (field === 'dev' || field === 'ino' || field === 'nlink' ?\n        'SCHILY.'\n      : '') +\n      field +\n      '=' +\n      v +\n      '\\n'\n    const byteLen = Buffer.byteLength(s)\n    // the digits includes the length of the digits in ascii base-10\n    // so if it's 9 characters, then adding 1 for the 9 makes it 10\n    // which makes it 11 chars.\n    let digits = Math.floor(Math.log(byteLen) / Math.log(10)) + 1\n    if (byteLen + digits >= Math.pow(10, digits)) {\n      digits += 1\n    }\n    const len = digits + byteLen\n    return len + s\n  }\n\n  static parse(str: string, ex?: HeaderData, g: boolean = false) {\n    return new Pax(merge(parseKV(str), ex), g)\n  }\n}\n\nconst merge = (a: HeaderData, b?: HeaderData) =>\n  b ? Object.assign({}, b, a) : a\n\nconst parseKV = (str: string) =>\n  str\n    .replace(/\\n$/, '')\n    .split('\\n')\n    .reduce(parseKVLine, Object.create(null))\n\nconst parseKVLine = (\n  set: Record<string, string | number | Date>,\n  line: string,\n) => {\n  const n = parseInt(line, 10)\n\n  // XXX Values with \\n in them will fail this.\n  // Refactor to not be a naive line-by-line parse.\n  if (n !== Buffer.byteLength(line) + 1) {\n    return set\n  }\n\n  line = line.slice((n + ' ').length)\n  const kv = line.split('=')\n  const r = kv.shift()\n\n  if (!r) {\n    return set\n  }\n\n  const k = r.replace(/^SCHILY\\.(dev|ino|nlink)/, '$1')\n\n  const v = kv.join('=').replace(/\\0.*/, '')\n  switch (k) {\n    case 'path':\n    case 'linkpath':\n    case 'type':\n    case 'charset':\n    case 'comment':\n    case 'gname':\n    case 'uname':\n      set[k] = v\n      break\n    case 'ctime':\n    case 'atime':\n    case 'mtime':\n      set[k] = new Date(Number(v) * 1000)\n      break\n    case 'size':\n      const s = +v\n      if (s >= 0) set[k] = s\n      break\n    case 'gid':\n    case 'uid':\n    case 'dev':\n    case 'ino':\n    case 'nlink':\n    case 'mode':\n      set[k] = +v\n      break\n  }\n  return set\n}\n","// on windows, either \\ or / are valid directory separators.\n// on unix, \\ is a valid character in filenames.\n// so, on windows, and only on windows, we replace all \\ chars with /,\n// so that we can use / as our one and only directory separator char.\n\nconst platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform\n\nexport const normalizeWindowsPath: (p: unknown) => string =\n  platform !== 'win32' ?\n    (p: unknown) => String(p)\n  : (p: unknown) => String(p).replaceAll(/\\\\/g, '/')\n","import { Minipass } from 'minipass'\nimport type { Header } from './header.js'\nimport { normalizeWindowsPath } from './normalize-windows-path.js'\nimport type { Pax } from './pax.js'\nimport type { EntryTypeName } from './types.js'\n\nexport class ReadEntry extends Minipass<Buffer, Buffer> {\n  extended?: Pax\n  globalExtended?: Pax\n  header: Header\n  startBlockSize: number\n  blockRemain: number\n  remain: number\n  type: EntryTypeName\n  meta: boolean = false\n  ignore: boolean = false\n  path: string\n  mode?: number\n  uid?: number\n  gid?: number\n  uname?: string\n  gname?: string\n  size: number = 0\n  mtime?: Date\n  atime?: Date\n  ctime?: Date\n  linkpath?: string\n\n  dev?: number\n  ino?: number\n  nlink?: number\n  invalid: boolean = false\n  absolute?: string\n  unsupported: boolean = false\n\n  constructor(header: Header, ex?: Pax, gex?: Pax) {\n    super({})\n    // read entries always start life paused.  this is to avoid the\n    // situation where Minipass's auto-ending empty streams results\n    // in an entry ending before we're ready for it.\n    this.pause()\n    this.extended = ex\n    this.globalExtended = gex\n    this.header = header\n    /* c8 ignore start */\n    this.remain = header.size ?? 0\n    /* c8 ignore stop */\n    this.startBlockSize = 512 * Math.ceil(this.remain / 512)\n    this.blockRemain = this.startBlockSize\n    this.type = header.type\n    switch (this.type) {\n      case 'File':\n      case 'OldFile':\n      case 'Link':\n      case 'SymbolicLink':\n      case 'CharacterDevice':\n      case 'BlockDevice':\n      case 'Directory':\n      case 'FIFO':\n      case 'ContiguousFile':\n      case 'GNUDumpDir':\n        break\n\n      case 'NextFileHasLongLinkpath':\n      case 'NextFileHasLongPath':\n      case 'OldGnuLongPath':\n      case 'GlobalExtendedHeader':\n      case 'ExtendedHeader':\n      case 'OldExtendedHeader':\n        this.meta = true\n        break\n\n      // NOTE: gnutar and bsdtar treat unrecognized types as 'File'\n      // it may be worth doing the same, but with a warning.\n      default:\n        this.ignore = true\n    }\n\n    /* c8 ignore start */\n    if (!header.path) {\n      throw new Error('no path provided for tar.ReadEntry')\n    }\n    /* c8 ignore stop */\n\n    this.path = normalizeWindowsPath(header.path) as string\n    this.mode = header.mode\n    if (this.mode) {\n      this.mode = this.mode & 0o7777\n    }\n    this.uid = header.uid\n    this.gid = header.gid\n    this.uname = header.uname\n    this.gname = header.gname\n    this.size = this.remain\n    this.mtime = header.mtime\n    this.atime = header.atime\n    this.ctime = header.ctime\n    /* c8 ignore start */\n    this.linkpath =\n      header.linkpath ? normalizeWindowsPath(header.linkpath) : undefined\n    /* c8 ignore stop */\n    this.uname = header.uname\n    this.gname = header.gname\n\n    if (ex) {\n      this.#slurp(ex)\n    }\n    if (gex) {\n      this.#slurp(gex, true)\n    }\n  }\n\n  write(data: Buffer) {\n    const writeLen = data.length\n    if (writeLen > this.blockRemain) {\n      throw new Error('writing more to entry than is appropriate')\n    }\n\n    const r = this.remain\n    const br = this.blockRemain\n    this.remain = Math.max(0, r - writeLen)\n    this.blockRemain = Math.max(0, br - writeLen)\n    if (this.ignore) {\n      return true\n    }\n\n    if (r >= writeLen) {\n      return super.write(data)\n    }\n\n    // r < writeLen\n    return super.write(data.subarray(0, r))\n  }\n\n  #slurp(ex: Pax, gex: boolean = false) {\n    if (ex.path) ex.path = normalizeWindowsPath(ex.path)\n    if (ex.linkpath) ex.linkpath = normalizeWindowsPath(ex.linkpath)\n    Object.assign(\n      this,\n      Object.fromEntries(\n        Object.entries(ex).filter(([k, v]) => {\n          // we slurp in everything except for the path attribute in\n          // a global extended header, because that's weird. Also, any\n          // null/undefined values are ignored.\n          return !(v === null || v === undefined || (k === 'path' && gex))\n        }),\n      ),\n    )\n  }\n}\n","import { type Minipass } from 'minipass'\n\n/** has a warn method */\nexport type Warner = {\n  warn(code: string, message: string | Error, data: unknown): void\n  file?: string\n  cwd?: string\n  strict?: boolean\n\n  emit(event: 'warn', code: string, message: string, data?: WarnData): void\n  emit(event: 'error', error: TarError): void\n}\n\nexport type WarnEvent<T = Buffer> = Minipass.Events<T> & {\n  warn: [code: string, message: string, data: WarnData]\n}\n\nexport type WarnData = {\n  file?: string\n  cwd?: string\n  code?: string\n  tarCode?: string\n  recoverable?: boolean\n  [k: string]: unknown\n}\n\nexport type TarError = Error & WarnData\n\nexport const warnMethod = (\n  self: Warner,\n  code: string,\n  message: string | Error,\n  data: WarnData = {},\n) => {\n  if (self.file) {\n    data.file = self.file\n  }\n  if (self.cwd) {\n    data.cwd = self.cwd\n  }\n  data.code =\n    (message instanceof Error &&\n      (message as NodeJS.ErrnoException).code) ||\n    code\n  data.tarCode = code\n  if (!self.strict && data.recoverable !== false) {\n    if (message instanceof Error) {\n      data = Object.assign(message, data)\n      message = message.message\n    }\n    self.emit('warn', code, message, data)\n  } else if (message instanceof Error) {\n    self.emit('error', Object.assign(message, data))\n  } else {\n    self.emit(\n      'error',\n      Object.assign(new Error(`${code}: ${message}`), data),\n    )\n  }\n}\n","// warning: extremely hot code path.\n// This has been meticulously optimized for use\n// within npm install on large package trees.\n// Do not edit without careful benchmarking.\nexport const stripTrailingSlashes = (str: string) => {\n  let i = str.length - 1\n  let slashesStart = -1\n  while (i > -1 && str.charAt(i) === '/') {\n    slashesStart = i\n    i--\n  }\n  return slashesStart === -1 ? str : str.slice(0, slashesStart)\n}\n","// A readable tar stream creator\n// Technically, this is a transform stream that you write paths into,\n// and tar format comes out of.\n// The `add()` method is like `write()` but returns this,\n// and end() return `this` as well, so you can\n// do `new Pack(opt).add('files').add('dir').end().pipe(output)\n// You could also do something like:\n// streamOfPaths().pipe(new Pack()).pipe(new fs.WriteStream('out.tar'))\n\nimport fs, { type Stats } from 'fs'\nimport {\n  WriteEntry,\n  WriteEntrySync,\n  WriteEntryTar,\n} from './write-entry.js'\n\nexport class PackJob {\n  path: string\n  absolute: string\n  entry?: WriteEntry | WriteEntryTar\n  stat?: Stats\n  readdir?: string[]\n  pending: boolean = false\n  pendingLink: boolean = false\n  ignore: boolean = false\n  piped: boolean = false\n  constructor(path: string, absolute: string) {\n    this.path = path || './'\n    this.absolute = absolute\n  }\n}\n\nimport { Minipass } from 'minipass'\nimport * as zlib from 'minizlib'\nimport { Yallist } from 'yallist'\nimport type { ReadEntry } from './read-entry.js'\nimport type { WarnEvent } from './warn-method.js'\nimport { warnMethod, type WarnData, type Warner } from './warn-method.js'\n\nconst EOF = Buffer.alloc(1024)\nconst ONSTAT = Symbol('onStat')\nconst ENDED = Symbol('ended')\nconst QUEUE = Symbol('queue')\nconst PENDINGLINKS = Symbol('pendingLinks')\nconst CURRENT = Symbol('current')\nconst PROCESS = Symbol('process')\nconst PROCESSING = Symbol('processing')\nconst PROCESSJOB = Symbol('processJob')\nconst JOBS = Symbol('jobs')\nconst JOBDONE = Symbol('jobDone')\nconst ADDFSENTRY = Symbol('addFSEntry')\nconst ADDTARENTRY = Symbol('addTarEntry')\nconst STAT = Symbol('stat')\nconst READDIR = Symbol('readdir')\nconst ONREADDIR = Symbol('onreaddir')\nconst PIPE = Symbol('pipe')\nconst ENTRY = Symbol('entry')\nconst ENTRYOPT = Symbol('entryOpt')\nconst WRITEENTRYCLASS = Symbol('writeEntryClass')\nconst WRITE = Symbol('write')\nconst ONDRAIN = Symbol('ondrain')\n\nimport path from 'path'\nimport { normalizeWindowsPath } from './normalize-windows-path.js'\nimport type { LinkCacheKey, TarOptions } from './options.js'\n\nexport class Pack\n  extends Minipass<Buffer, ReadEntry | string, WarnEvent<Buffer>>\n  implements Warner\n{\n  sync: boolean = false\n  opt: TarOptions\n  cwd: string\n  maxReadSize?: number\n  preservePaths: boolean\n  strict: boolean\n  noPax: boolean\n  prefix: string\n  linkCache: Exclude<TarOptions['linkCache'], undefined>\n  statCache: Exclude<TarOptions['statCache'], undefined>\n  file: string\n  portable: boolean\n  zip?: zlib.BrotliCompress | zlib.Gzip | zlib.ZstdCompress\n  readdirCache: Exclude<TarOptions['readdirCache'], undefined>\n  noDirRecurse: boolean\n  follow: boolean\n  noMtime: boolean\n  mtime?: Date\n  filter: Exclude<TarOptions['filter'], undefined>\n  jobs: number;\n\n  [WRITEENTRYCLASS]: typeof WriteEntry | typeof WriteEntrySync\n  onWriteEntry?: (entry: WriteEntry) => void;\n  // Note: we actually DO need a linked list here, because we\n  // shift() to update the head of the list where we start, but still\n  // while that happens, need to know what the next item in the queue\n  // will be. Since we do multiple jobs in parallel, it's not as simple\n  // as just an Array.shift(), since that would lose the information about\n  // the next job in the list. We could add a .next field on the PackJob\n  // class, but then we'd have to be tracking the tail of the queue the\n  // whole time, and Yallist just does that for us anyway.\n  [QUEUE]: Yallist<PackJob>;\n  [PENDINGLINKS] = new Map<LinkCacheKey, PackJob[]>();\n  [JOBS]: number = 0;\n  [PROCESSING]: boolean = false;\n  [ENDED]: boolean = false\n\n  constructor(opt: TarOptions = {}) {\n    super()\n    this.opt = opt\n    this.file = opt.file || ''\n    this.cwd = opt.cwd || process.cwd()\n    this.maxReadSize = opt.maxReadSize\n    this.preservePaths = !!opt.preservePaths\n    this.strict = !!opt.strict\n    this.noPax = !!opt.noPax\n    this.prefix = normalizeWindowsPath(opt.prefix || '')\n    this.linkCache = opt.linkCache || new Map()\n    this.statCache = opt.statCache || new Map()\n    this.readdirCache = opt.readdirCache || new Map()\n    this.onWriteEntry = opt.onWriteEntry\n\n    this[WRITEENTRYCLASS] = WriteEntry\n    if (typeof opt.onwarn === 'function') {\n      this.on('warn', opt.onwarn)\n    }\n\n    this.portable = !!opt.portable\n\n    if (opt.gzip || opt.brotli || opt.zstd) {\n      if (\n        (opt.gzip ? 1 : 0) + (opt.brotli ? 1 : 0) + (opt.zstd ? 1 : 0) >\n        1\n      ) {\n        throw new TypeError('gzip, brotli, zstd are mutually exclusive')\n      }\n      if (opt.gzip) {\n        if (typeof opt.gzip !== 'object') {\n          opt.gzip = {}\n        }\n        if (this.portable) {\n          opt.gzip.portable = true\n        }\n        this.zip = new zlib.Gzip(opt.gzip)\n      }\n      if (opt.brotli) {\n        if (typeof opt.brotli !== 'object') {\n          opt.brotli = {}\n        }\n        this.zip = new zlib.BrotliCompress(opt.brotli)\n      }\n      if (opt.zstd) {\n        if (typeof opt.zstd !== 'object') {\n          opt.zstd = {}\n        }\n        this.zip = new zlib.ZstdCompress(opt.zstd)\n      }\n      /* c8 ignore next */\n      if (!this.zip) throw new Error('impossible')\n      const zip = this.zip\n      zip.on('data', chunk => super.write(chunk as unknown as string))\n      zip.on('end', () => super.end())\n      zip.on('drain', () => this[ONDRAIN]())\n      this.on('resume', () => zip.resume())\n    } else {\n      this.on('drain', this[ONDRAIN])\n    }\n\n    this.noDirRecurse = !!opt.noDirRecurse\n    this.follow = !!opt.follow\n    this.noMtime = !!opt.noMtime\n    if (opt.mtime) this.mtime = opt.mtime\n\n    this.filter =\n      typeof opt.filter === 'function' ? opt.filter : () => true\n\n    this[QUEUE] = new Yallist<PackJob>()\n    this[JOBS] = 0\n    this.jobs = Number(opt.jobs) || 4\n    this[PROCESSING] = false\n    this[ENDED] = false\n  }\n\n  [WRITE](chunk: Buffer) {\n    return super.write(chunk as unknown as string)\n  }\n\n  add(path: string | ReadEntry) {\n    this.write(path)\n    return this\n  }\n\n  end(cb?: () => void): this\n  end(path: string | ReadEntry, cb?: () => void): this\n  end(\n    path: string | ReadEntry,\n    encoding?: Minipass.Encoding,\n    cb?: () => void,\n  ): this\n  end(\n    path?: string | ReadEntry | (() => void),\n    encoding?: Minipass.Encoding | (() => void),\n    cb?: () => void,\n  ) {\n    /* c8 ignore start */\n    if (typeof path === 'function') {\n      cb = path\n      path = undefined\n    }\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = undefined\n    }\n    /* c8 ignore stop */\n    if (path) {\n      this.add(path)\n    }\n    this[ENDED] = true\n    this[PROCESS]()\n    /* c8 ignore next */\n    if (cb) cb()\n    return this\n  }\n\n  write(path: string | ReadEntry) {\n    if (this[ENDED]) {\n      throw new Error('write after end')\n    }\n\n    if (typeof path === 'string') {\n      this[ADDFSENTRY](path)\n    } else {\n      this[ADDTARENTRY](path)\n    }\n    return this.flowing\n  }\n\n  [ADDTARENTRY](p: ReadEntry) {\n    const absolute = normalizeWindowsPath(path.resolve(this.cwd, p.path))\n    // in this case, we don't have to wait for the stat\n    if (!this.filter(p.path, p)) {\n      p.resume()\n    } else {\n      const job = new PackJob(p.path, absolute)\n      job.entry = new WriteEntryTar(p, this[ENTRYOPT](job))\n      job.entry.on('end', () => this[JOBDONE](job))\n      this[JOBS] += 1\n      this[QUEUE].push(job)\n    }\n\n    this[PROCESS]()\n  }\n\n  [ADDFSENTRY](p: string) {\n    const absolute = normalizeWindowsPath(path.resolve(this.cwd, p))\n    this[QUEUE].push(new PackJob(p, absolute))\n    this[PROCESS]()\n  }\n\n  [STAT](job: PackJob) {\n    job.pending = true\n    this[JOBS] += 1\n    const stat = this.follow ? 'stat' : 'lstat'\n    fs[stat](job.absolute, (er, stat) => {\n      job.pending = false\n      this[JOBS] -= 1\n      if (er) {\n        this.emit('error', er)\n      } else {\n        this[ONSTAT](job, stat)\n      }\n    })\n  }\n\n  [ONSTAT](job: PackJob, stat: Stats) {\n    this.statCache.set(job.absolute, stat)\n    job.stat = stat\n\n    // now we have the stat, we can filter it.\n    if (!this.filter(job.path, stat)) {\n      job.ignore = true\n    } else if (\n      stat.isFile() &&\n      stat.nlink > 1 &&\n      !this.linkCache.get(`${stat.dev}:${stat.ino}`) &&\n      !this.sync\n    ) {\n      // if it's not filtered, and it's a new File entry, and next anyway\n      // process right away in case any pending Link entries are about\n      // to try to link to it.\n      if (job === this[CURRENT]) {\n        this[PROCESSJOB](job)\n      } else {\n        // if it's NOT the current entry, it needs to be deferred,\n        // so that the link target can be built first.\n        const key: LinkCacheKey = `${stat.dev}:${stat.ino}`\n        const pending = this[PENDINGLINKS].get(key)\n        if (pending) pending.push(job)\n        else this[PENDINGLINKS].set(key, [job])\n        job.pendingLink = true\n        job.pending = true\n      }\n    }\n\n    this[PROCESS]()\n  }\n\n  [READDIR](job: PackJob) {\n    job.pending = true\n    this[JOBS] += 1\n    fs.readdir(job.absolute, (er, entries) => {\n      job.pending = false\n      this[JOBS] -= 1\n      if (er) {\n        return this.emit('error', er)\n      }\n      this[ONREADDIR](job, entries)\n    })\n  }\n\n  [ONREADDIR](job: PackJob, entries: string[]) {\n    this.readdirCache.set(job.absolute, entries)\n    job.readdir = entries\n    this[PROCESS]()\n  }\n\n  [PROCESS]() {\n    if (this[PROCESSING]) {\n      return\n    }\n\n    this[PROCESSING] = true\n    for (\n      let w = this[QUEUE].head;\n      !!w && this[JOBS] < this.jobs;\n      w = w.next\n    ) {\n      this[PROCESSJOB](w.value)\n      if (w.value.ignore) {\n        const p = w.next\n        this[QUEUE].removeNode(w)\n        w.next = p\n      }\n    }\n\n    this[PROCESSING] = false\n\n    if (this[ENDED] && this[QUEUE].length === 0 && this[JOBS] === 0) {\n      if (this.zip) {\n        this.zip.end(EOF)\n      } else {\n        super.write(EOF as unknown as string)\n        super.end()\n      }\n    }\n  }\n\n  get [CURRENT]() {\n    return this[QUEUE] && this[QUEUE].head && this[QUEUE].head.value\n  }\n\n  [JOBDONE](job: PackJob) {\n    this[QUEUE].shift()\n    this[JOBS] -= 1\n    const { stat } = job\n    if (stat && stat.isFile() && stat.nlink > 1) {\n      // might be a file with pending links\n      const key: LinkCacheKey = `${stat.dev}:${stat.ino}`\n      const pending = this[PENDINGLINKS].get(key)\n      if (pending) {\n        this[PENDINGLINKS].delete(key)\n        for (const job of pending) {\n          job.pending = false\n          this[PROCESSJOB](job)\n        }\n      }\n    }\n    this[PROCESS]()\n  }\n\n  [PROCESSJOB](job: PackJob) {\n    if (job.pending && job.pendingLink && job === this[CURRENT]) {\n      // At least one of the links to this file are not being included\n      // in the tarball, so we need to just proceed.\n      job.pending = false\n      job.pendingLink = false\n    }\n    if (job.pending) {\n      return\n    }\n\n    if (job.entry) {\n      if (job === this[CURRENT] && !job.piped) {\n        this[PIPE](job)\n      }\n      return\n    }\n\n    if (!job.stat) {\n      const sc = this.statCache.get(job.absolute)\n      if (sc) {\n        this[ONSTAT](job, sc)\n      } else {\n        this[STAT](job)\n      }\n    }\n    if (!job.stat) {\n      return\n    }\n\n    // filtered out!\n    if (job.ignore) {\n      return\n    }\n\n    if (!this.noDirRecurse && job.stat.isDirectory() && !job.readdir) {\n      const rc = this.readdirCache.get(job.absolute)\n      if (rc) {\n        this[ONREADDIR](job, rc)\n      } else {\n        this[READDIR](job)\n      }\n      if (!job.readdir) {\n        return\n      }\n    }\n\n    // we know it doesn't have an entry, because that got checked above\n    job.entry = this[ENTRY](job)\n    if (!job.entry) {\n      job.ignore = true\n      return\n    }\n\n    if (job === this[CURRENT] && !job.piped) {\n      this[PIPE](job)\n    }\n  }\n\n  [ENTRYOPT](job: PackJob): TarOptions {\n    return {\n      onwarn: (code, msg, data) => this.warn(code, msg, data),\n      noPax: this.noPax,\n      cwd: this.cwd,\n      absolute: job.absolute,\n      preservePaths: this.preservePaths,\n      maxReadSize: this.maxReadSize,\n      strict: this.strict,\n      portable: this.portable,\n      linkCache: this.linkCache,\n      statCache: this.statCache,\n      noMtime: this.noMtime,\n      mtime: this.mtime,\n      prefix: this.prefix,\n      onWriteEntry: this.onWriteEntry,\n    }\n  }\n\n  [ENTRY](job: PackJob) {\n    this[JOBS] += 1\n    try {\n      const e = new this[WRITEENTRYCLASS](job.path, this[ENTRYOPT](job))\n      return e\n        .on('end', () => this[JOBDONE](job))\n        .on('error', er => this.emit('error', er))\n    } catch (er) {\n      this.emit('error', er)\n    }\n  }\n\n  [ONDRAIN]() {\n    if (this[CURRENT] && this[CURRENT].entry) {\n      this[CURRENT].entry.resume()\n    }\n  }\n\n  // like .pipe() but using super, because our write() is special\n  [PIPE](job: PackJob) {\n    job.piped = true\n\n    if (job.readdir) {\n      job.readdir.forEach(entry => {\n        const p = job.path\n        const base = p === './' ? '' : p.replace(/\\/*$/, '/')\n        this[ADDFSENTRY](base + entry)\n      })\n    }\n\n    const source = job.entry\n    const zip = this.zip\n    /* c8 ignore start */\n    if (!source) throw new Error('cannot pipe without source')\n    /* c8 ignore stop */\n\n    if (zip) {\n      source.on('data', chunk => {\n        if (!zip.write(chunk)) {\n          source.pause()\n        }\n      })\n    } else {\n      source.on('data', chunk => {\n        if (!super.write(chunk as unknown as string)) {\n          source.pause()\n        }\n      })\n    }\n  }\n\n  pause() {\n    if (this.zip) {\n      this.zip.pause()\n    }\n    return super.pause()\n  }\n  warn(code: string, message: string | Error, data: WarnData = {}): void {\n    warnMethod(this, code, message, data)\n  }\n}\n\nexport class PackSync extends Pack {\n  sync: true = true\n  constructor(opt: TarOptions) {\n    super(opt)\n    this[WRITEENTRYCLASS] = WriteEntrySync\n  }\n\n  // pause/resume are no-ops in sync streams.\n  pause() {}\n  resume() {}\n\n  [STAT](job: PackJob) {\n    const stat = this.follow ? 'statSync' : 'lstatSync'\n    this[ONSTAT](job, fs[stat](job.absolute))\n  }\n\n  [READDIR](job: PackJob) {\n    this[ONREADDIR](job, fs.readdirSync(job.absolute))\n  }\n\n  // gotta get it all in this tick\n  [PIPE](job: PackJob) {\n    const source = job.entry\n    const zip = this.zip\n\n    if (job.readdir) {\n      job.readdir.forEach(entry => {\n        const p = job.path\n        const base = p === './' ? '' : p.replace(/\\/*$/, '/')\n        this[ADDFSENTRY](base + entry)\n      })\n    }\n\n    /* c8 ignore start */\n    if (!source) throw new Error('Cannot pipe without source')\n    /* c8 ignore stop */\n\n    if (zip) {\n      source.on('data', chunk => {\n        zip.write(chunk)\n      })\n    } else {\n      source.on('data', chunk => {\n        super[WRITE](chunk)\n      })\n    }\n  }\n}\n","import fs, { type Stats } from 'fs'\nimport { Minipass } from 'minipass'\nimport path from 'path'\nimport { Header } from './header.js'\nimport { modeFix } from './mode-fix.js'\nimport { normalizeWindowsPath } from './normalize-windows-path.js'\nimport type {\n  LinkCacheKey,\n  TarOptions,\n  TarOptionsWithAliases,\n} from './options.js'\nimport { dealias } from './options.js'\nimport { Pax } from './pax.js'\nimport type { ReadEntry } from './read-entry.js'\nimport { stripAbsolutePath } from './strip-absolute-path.js'\nimport { stripTrailingSlashes } from './strip-trailing-slashes.js'\nimport type { EntryTypeName } from './types.js'\nimport type { WarnData, Warner, WarnEvent } from './warn-method.js'\nimport { warnMethod } from './warn-method.js'\nimport * as winchars from './winchars.js'\n\nconst prefixPath = (path: string, prefix?: string) => {\n  if (!prefix) {\n    return normalizeWindowsPath(path)\n  }\n  path = normalizeWindowsPath(path).replace(/^\\.(\\/|$)/, '')\n  return stripTrailingSlashes(prefix) + '/' + path\n}\n\nconst maxReadSize = 16 * 1024 * 1024\n\nconst PROCESS = Symbol('process')\nconst FILE = Symbol('file')\nconst DIRECTORY = Symbol('directory')\nconst SYMLINK = Symbol('symlink')\nconst HARDLINK = Symbol('hardlink')\nconst HEADER = Symbol('header')\nconst READ = Symbol('read')\nconst LSTAT = Symbol('lstat')\nconst ONLSTAT = Symbol('onlstat')\nconst ONREAD = Symbol('onread')\nconst ONREADLINK = Symbol('onreadlink')\nconst OPENFILE = Symbol('openfile')\nconst ONOPENFILE = Symbol('onopenfile')\nconst CLOSE = Symbol('close')\nconst MODE = Symbol('mode')\nconst AWAITDRAIN = Symbol('awaitDrain')\nconst ONDRAIN = Symbol('ondrain')\nconst PREFIX = Symbol('prefix')\n\nexport class WriteEntry\n  extends Minipass<Buffer, Minipass.ContiguousData, WarnEvent>\n  implements Warner\n{\n  path: string\n  portable: boolean\n  myuid: number = (process.getuid && process.getuid()) || 0\n  // until node has builtin pwnam functions, this'll have to do\n  myuser: string = process.env.USER || ''\n  maxReadSize: number\n  linkCache: Exclude<TarOptions['linkCache'], undefined>\n  statCache: Exclude<TarOptions['statCache'], undefined>\n  preservePaths: boolean\n  cwd: string\n  strict: boolean\n  mtime?: Date\n  noPax: boolean\n  noMtime: boolean\n  prefix?: string\n  fd?: number\n\n  blockLen: number = 0\n  blockRemain: number = 0\n  buf?: Buffer\n  pos: number = 0\n  remain: number = 0\n  length: number = 0\n  offset: number = 0\n\n  win32: boolean\n  absolute: string\n\n  header?: Header\n  type?: EntryTypeName | 'Unsupported'\n  linkpath?: string\n  stat?: Stats\n  onWriteEntry?: (entry: WriteEntry) => unknown\n\n  #hadError: boolean = false\n\n  constructor(p: string, opt_: TarOptionsWithAliases = {}) {\n    const opt = dealias(opt_)\n    super()\n    this.path = normalizeWindowsPath(p)\n    // suppress atime, ctime, uid, gid, uname, gname\n    this.portable = !!opt.portable\n    this.maxReadSize = opt.maxReadSize || maxReadSize\n    this.linkCache = opt.linkCache || new Map()\n    this.statCache = opt.statCache || new Map()\n    this.preservePaths = !!opt.preservePaths\n    this.cwd = normalizeWindowsPath(opt.cwd || process.cwd())\n    this.strict = !!opt.strict\n    this.noPax = !!opt.noPax\n    this.noMtime = !!opt.noMtime\n    this.mtime = opt.mtime\n    this.prefix = opt.prefix ? normalizeWindowsPath(opt.prefix) : undefined\n    this.onWriteEntry = opt.onWriteEntry\n\n    if (typeof opt.onwarn === 'function') {\n      this.on('warn', opt.onwarn)\n    }\n\n    let pathWarn: string | boolean = false\n    if (!this.preservePaths) {\n      const [root, stripped] = stripAbsolutePath(this.path)\n      if (root && typeof stripped === 'string') {\n        this.path = stripped\n        pathWarn = root\n      }\n    }\n\n    this.win32 = !!opt.win32 || process.platform === 'win32'\n    if (this.win32) {\n      // force the \\ to / normalization, since we might not *actually*\n      // be on windows, but want \\ to be considered a path separator.\n      this.path = winchars.decode(this.path.replaceAll(/\\\\/g, '/'))\n      p = p.replaceAll(/\\\\/g, '/')\n    }\n\n    this.absolute = normalizeWindowsPath(\n      opt.absolute || path.resolve(this.cwd, p),\n    )\n\n    if (this.path === '') {\n      this.path = './'\n    }\n\n    if (pathWarn) {\n      this.warn(\n        'TAR_ENTRY_INFO',\n        `stripping ${pathWarn} from absolute path`,\n        {\n          entry: this,\n          path: pathWarn + this.path,\n        },\n      )\n    }\n\n    const cs = this.statCache.get(this.absolute)\n    if (cs) {\n      this[ONLSTAT](cs)\n    } else {\n      this[LSTAT]()\n    }\n  }\n\n  warn(code: string, message: string | Error, data: WarnData = {}) {\n    return warnMethod(this, code, message, data)\n  }\n\n  emit(ev: keyof WarnEvent, ...data: unknown[]) {\n    if (ev === 'error') {\n      this.#hadError = true\n    }\n    return super.emit(ev, ...data)\n  }\n\n  [LSTAT]() {\n    fs.lstat(this.absolute, (er, stat) => {\n      if (er) {\n        return this.emit('error', er)\n      }\n      this[ONLSTAT](stat)\n    })\n  }\n\n  [ONLSTAT](stat: Stats) {\n    this.statCache.set(this.absolute, stat)\n    this.stat = stat\n    if (!stat.isFile()) {\n      stat.size = 0\n    }\n    this.type = getType(stat)\n    this.emit('stat', stat)\n    this[PROCESS]()\n  }\n\n  [PROCESS]() {\n    switch (this.type) {\n      case 'File':\n        return this[FILE]()\n      case 'Directory':\n        return this[DIRECTORY]()\n      case 'SymbolicLink':\n        return this[SYMLINK]()\n      // unsupported types are ignored.\n      default:\n        return this.end()\n    }\n  }\n\n  [MODE](mode: number) {\n    return modeFix(mode, this.type === 'Directory', this.portable)\n  }\n\n  [PREFIX](path: string) {\n    return prefixPath(path, this.prefix)\n  }\n\n  [HEADER]() {\n    /* c8 ignore start */\n    if (!this.stat) {\n      throw new Error('cannot write header before stat')\n    }\n    /* c8 ignore stop */\n\n    if (this.type === 'Directory' && this.portable) {\n      this.noMtime = true\n    }\n\n    this.onWriteEntry?.(this)\n    this.header = new Header({\n      path: this[PREFIX](this.path),\n      // only apply the prefix to hard links.\n      linkpath:\n        this.type === 'Link' && this.linkpath !== undefined ?\n          this[PREFIX](this.linkpath)\n        : this.linkpath,\n      // only the permissions and setuid/setgid/sticky bitflags\n      // not the higher-order bits that specify file type\n      mode: this[MODE](this.stat.mode),\n      uid: this.portable ? undefined : this.stat.uid,\n      gid: this.portable ? undefined : this.stat.gid,\n      size: this.stat.size,\n      mtime: this.noMtime ? undefined : this.mtime || this.stat.mtime,\n      /* c8 ignore next */\n      type: this.type === 'Unsupported' ? undefined : this.type,\n      uname:\n        this.portable ? undefined\n        : this.stat.uid === this.myuid ? this.myuser\n        : '',\n      atime: this.portable ? undefined : this.stat.atime,\n      ctime: this.portable ? undefined : this.stat.ctime,\n    })\n\n    if (this.header.encode() && !this.noPax) {\n      super.write(\n        new Pax({\n          atime: this.portable ? undefined : this.header.atime,\n          ctime: this.portable ? undefined : this.header.ctime,\n          gid: this.portable ? undefined : this.header.gid,\n          mtime:\n            this.noMtime ? undefined : this.mtime || this.header.mtime,\n          path: this[PREFIX](this.path),\n          linkpath:\n            this.type === 'Link' && this.linkpath !== undefined ?\n              this[PREFIX](this.linkpath)\n            : this.linkpath,\n          size: this.header.size,\n          uid: this.portable ? undefined : this.header.uid,\n          uname: this.portable ? undefined : this.header.uname,\n          dev: this.portable ? undefined : this.stat.dev,\n          ino: this.portable ? undefined : this.stat.ino,\n          nlink: this.portable ? undefined : this.stat.nlink,\n        }).encode(),\n      )\n    }\n    const block = this.header?.block\n    /* c8 ignore start */\n    if (!block) {\n      throw new Error('failed to encode header')\n    }\n    /* c8 ignore stop */\n    super.write(block)\n  }\n\n  [DIRECTORY]() {\n    /* c8 ignore start */\n    if (!this.stat) {\n      throw new Error('cannot create directory entry without stat')\n    }\n    /* c8 ignore stop */\n    if (this.path.slice(-1) !== '/') {\n      this.path += '/'\n    }\n    this.stat.size = 0\n    this[HEADER]()\n    this.end()\n  }\n\n  [SYMLINK]() {\n    fs.readlink(this.absolute, (er, linkpath) => {\n      if (er) {\n        return this.emit('error', er)\n      }\n      this[ONREADLINK](linkpath)\n    })\n  }\n\n  [ONREADLINK](linkpath: string) {\n    this.linkpath = normalizeWindowsPath(linkpath)\n    this[HEADER]()\n    this.end()\n  }\n\n  [HARDLINK](linkpath: string) {\n    /* c8 ignore start */\n    if (!this.stat) {\n      throw new Error('cannot create link entry without stat')\n    }\n    /* c8 ignore stop */\n    this.type = 'Link'\n    this.linkpath = normalizeWindowsPath(path.relative(this.cwd, linkpath))\n    this.stat.size = 0\n    this[HEADER]()\n    this.end()\n  }\n\n  [FILE]() {\n    /* c8 ignore start */\n    if (!this.stat) {\n      throw new Error('cannot create file entry without stat')\n    }\n    /* c8 ignore stop */\n    if (this.stat.nlink > 1) {\n      const linkKey = `${this.stat.dev}:${this.stat.ino}` as LinkCacheKey\n      const linkpath = this.linkCache.get(linkKey)\n      if (linkpath?.indexOf(this.cwd) === 0) {\n        return this[HARDLINK](linkpath)\n      }\n      this.linkCache.set(linkKey, this.absolute)\n    }\n\n    this[HEADER]()\n    if (this.stat.size === 0) {\n      return this.end()\n    }\n\n    this[OPENFILE]()\n  }\n\n  [OPENFILE]() {\n    fs.open(this.absolute, 'r', (er, fd) => {\n      if (er) {\n        return this.emit('error', er)\n      }\n      this[ONOPENFILE](fd)\n    })\n  }\n\n  [ONOPENFILE](fd: number) {\n    this.fd = fd\n    if (this.#hadError) {\n      return this[CLOSE]()\n    }\n    /* c8 ignore start */\n    if (!this.stat) {\n      throw new Error('should stat before calling onopenfile')\n    }\n    /* c8 ignore start */\n\n    this.blockLen = 512 * Math.ceil(this.stat.size / 512)\n    this.blockRemain = this.blockLen\n    const bufLen = Math.min(this.blockLen, this.maxReadSize)\n    this.buf = Buffer.allocUnsafe(bufLen)\n    this.offset = 0\n    this.pos = 0\n    this.remain = this.stat.size\n    this.length = this.buf.length\n    this[READ]()\n  }\n\n  [READ]() {\n    const { fd, buf, offset, length, pos } = this\n    if (fd === undefined || buf === undefined) {\n      throw new Error('cannot read file without first opening')\n    }\n    fs.read(fd, buf, offset, length, pos, (er, bytesRead) => {\n      if (er) {\n        // ignoring the error from close(2) is a bad practice, but at\n        // this point we already have an error, don't need another one\n        return this[CLOSE](() => this.emit('error', er))\n      }\n      this[ONREAD](bytesRead)\n    })\n  }\n\n  /* c8 ignore start */\n  [CLOSE](\n    cb: (er?: null | Error | NodeJS.ErrnoException) => unknown = () => {},\n  ) {\n    /* c8 ignore stop */\n    if (this.fd !== undefined) fs.close(this.fd, cb)\n  }\n\n  [ONREAD](bytesRead: number) {\n    if (bytesRead <= 0 && this.remain > 0) {\n      const er = Object.assign(new Error('encountered unexpected EOF'), {\n        path: this.absolute,\n        syscall: 'read',\n        code: 'EOF',\n      })\n      return this[CLOSE](() => this.emit('error', er))\n    }\n\n    if (bytesRead > this.remain) {\n      const er = Object.assign(\n        new Error('did not encounter expected EOF'),\n        {\n          path: this.absolute,\n          syscall: 'read',\n          code: 'EOF',\n        },\n      )\n      return this[CLOSE](() => this.emit('error', er))\n    }\n\n    /* c8 ignore start */\n    if (!this.buf) {\n      throw new Error('should have created buffer prior to reading')\n    }\n    /* c8 ignore stop */\n\n    // null out the rest of the buffer, if we could fit the block padding\n    // at the end of this loop, we've incremented bytesRead and this.remain\n    // to be incremented up to the blockRemain level, as if we had expected\n    // to get a null-padded file, and read it until the end.  then we will\n    // decrement both remain and blockRemain by bytesRead, and know that we\n    // reached the expected EOF, without any null buffer to append.\n    if (bytesRead === this.remain) {\n      for (\n        let i = bytesRead;\n        i < this.length && bytesRead < this.blockRemain;\n        i++\n      ) {\n        this.buf[i + this.offset] = 0\n        bytesRead++\n        this.remain++\n      }\n    }\n\n    const chunk =\n      this.offset === 0 && bytesRead === this.buf.length ?\n        this.buf\n      : this.buf.subarray(this.offset, this.offset + bytesRead)\n\n    const flushed = this.write(chunk)\n    if (!flushed) {\n      this[AWAITDRAIN](() => this[ONDRAIN]())\n    } else {\n      this[ONDRAIN]()\n    }\n  }\n\n  [AWAITDRAIN](cb: () => unknown) {\n    this.once('drain', cb)\n  }\n\n  write(buffer: Buffer | string, cb?: () => void): boolean\n  write(\n    str: Buffer | string,\n    encoding?: BufferEncoding | null,\n    cb?: () => void,\n  ): boolean\n  write(\n    chunk: Buffer | string,\n    encoding?: BufferEncoding | (() => unknown) | null,\n    cb?: () => unknown,\n  ): boolean {\n    /* c8 ignore start - just junk to comply with NodeJS.WritableStream */\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = undefined\n    }\n    if (typeof chunk === 'string') {\n      chunk = Buffer.from(\n        chunk,\n        typeof encoding === 'string' ? encoding : 'utf8',\n      )\n    }\n    /* c8 ignore stop */\n\n    if (this.blockRemain < chunk.length) {\n      const er = Object.assign(\n        new Error('writing more data than expected'),\n        {\n          path: this.absolute,\n        },\n      )\n      return this.emit('error', er)\n    }\n    this.remain -= chunk.length\n    this.blockRemain -= chunk.length\n    this.pos += chunk.length\n    this.offset += chunk.length\n    return super.write(chunk, null, cb)\n  }\n\n  [ONDRAIN]() {\n    if (!this.remain) {\n      if (this.blockRemain) {\n        super.write(Buffer.alloc(this.blockRemain))\n      }\n      return this[CLOSE](er => (er ? this.emit('error', er) : this.end()))\n    }\n\n    /* c8 ignore start */\n    if (!this.buf) {\n      throw new Error('buffer lost somehow in ONDRAIN')\n    }\n    /* c8 ignore stop */\n\n    if (this.offset >= this.length) {\n      // if we only have a smaller bit left to read, alloc a smaller buffer\n      // otherwise, keep it the same length it was before.\n      this.buf = Buffer.allocUnsafe(\n        Math.min(this.blockRemain, this.buf.length),\n      )\n      this.offset = 0\n    }\n    this.length = this.buf.length - this.offset\n    this[READ]()\n  }\n}\n\nexport class WriteEntrySync extends WriteEntry implements Warner {\n  sync: true = true;\n\n  [LSTAT]() {\n    this[ONLSTAT](fs.lstatSync(this.absolute))\n  }\n\n  [SYMLINK]() {\n    this[ONREADLINK](fs.readlinkSync(this.absolute))\n  }\n\n  [OPENFILE]() {\n    this[ONOPENFILE](fs.openSync(this.absolute, 'r'))\n  }\n\n  [READ]() {\n    let threw = true\n    try {\n      const { fd, buf, offset, length, pos } = this\n      /* c8 ignore start */\n      if (fd === undefined || buf === undefined) {\n        throw new Error('fd and buf must be set in READ method')\n      }\n      /* c8 ignore stop */\n      const bytesRead = fs.readSync(fd, buf, offset, length, pos)\n      this[ONREAD](bytesRead)\n      threw = false\n    } finally {\n      // ignoring the error from close(2) is a bad practice, but at\n      // this point we already have an error, don't need another one\n      if (threw) {\n        try {\n          this[CLOSE](() => {})\n        } catch {}\n      }\n    }\n  }\n\n  [AWAITDRAIN](cb: () => unknown) {\n    cb()\n  }\n\n  /* c8 ignore start */\n  [CLOSE](\n    cb: (er?: null | Error | NodeJS.ErrnoException) => unknown = () => {},\n  ) {\n    /* c8 ignore stop */\n    if (this.fd !== undefined) fs.closeSync(this.fd)\n    cb()\n  }\n}\n\nexport class WriteEntryTar\n  extends Minipass<Buffer, Buffer | string, WarnEvent>\n  implements Warner\n{\n  blockLen: number = 0\n  blockRemain: number = 0\n  buf: number = 0\n  pos: number = 0\n  remain: number = 0\n  length: number = 0\n  preservePaths: boolean\n  portable: boolean\n  strict: boolean\n  noPax: boolean\n  noMtime: boolean\n  readEntry: ReadEntry\n  type: EntryTypeName\n  prefix?: string\n  path: string\n  mode?: number\n  uid?: number\n  gid?: number\n  uname?: string\n  gname?: string\n  header?: Header\n  mtime?: Date\n  atime?: Date\n  ctime?: Date\n  linkpath?: string\n  size: number\n  onWriteEntry?: (entry: WriteEntry) => unknown\n\n  warn(code: string, message: string | Error, data: WarnData = {}) {\n    return warnMethod(this, code, message, data)\n  }\n\n  constructor(readEntry: ReadEntry, opt_: TarOptionsWithAliases = {}) {\n    const opt = dealias(opt_)\n    super()\n    this.preservePaths = !!opt.preservePaths\n    this.portable = !!opt.portable\n    this.strict = !!opt.strict\n    this.noPax = !!opt.noPax\n    this.noMtime = !!opt.noMtime\n    this.onWriteEntry = opt.onWriteEntry\n\n    this.readEntry = readEntry\n    const { type } = readEntry\n    /* c8 ignore start */\n    if (type === 'Unsupported') {\n      throw new Error('writing entry that should be ignored')\n    }\n    /* c8 ignore stop */\n    this.type = type\n    if (this.type === 'Directory' && this.portable) {\n      this.noMtime = true\n    }\n\n    this.prefix = opt.prefix\n\n    this.path = normalizeWindowsPath(readEntry.path)\n    this.mode =\n      readEntry.mode !== undefined ? this[MODE](readEntry.mode) : undefined\n    this.uid = this.portable ? undefined : readEntry.uid\n    this.gid = this.portable ? undefined : readEntry.gid\n    this.uname = this.portable ? undefined : readEntry.uname\n    this.gname = this.portable ? undefined : readEntry.gname\n    this.size = readEntry.size\n    this.mtime = this.noMtime ? undefined : opt.mtime || readEntry.mtime\n    this.atime = this.portable ? undefined : readEntry.atime\n    this.ctime = this.portable ? undefined : readEntry.ctime\n    this.linkpath =\n      readEntry.linkpath !== undefined ?\n        normalizeWindowsPath(readEntry.linkpath)\n      : undefined\n\n    if (typeof opt.onwarn === 'function') {\n      this.on('warn', opt.onwarn)\n    }\n\n    let pathWarn: false | string = false\n    if (!this.preservePaths) {\n      const [root, stripped] = stripAbsolutePath(this.path)\n      if (root && typeof stripped === 'string') {\n        this.path = stripped\n        pathWarn = root\n      }\n    }\n\n    this.remain = readEntry.size\n    this.blockRemain = readEntry.startBlockSize\n\n    this.onWriteEntry?.(this as unknown as WriteEntry)\n    this.header = new Header({\n      path: this[PREFIX](this.path),\n      linkpath:\n        this.type === 'Link' && this.linkpath !== undefined ?\n          this[PREFIX](this.linkpath)\n        : this.linkpath,\n      // only the permissions and setuid/setgid/sticky bitflags\n      // not the higher-order bits that specify file type\n      mode: this.mode,\n      uid: this.portable ? undefined : this.uid,\n      gid: this.portable ? undefined : this.gid,\n      size: this.size,\n      mtime: this.noMtime ? undefined : this.mtime,\n      type: this.type,\n      uname: this.portable ? undefined : this.uname,\n      atime: this.portable ? undefined : this.atime,\n      ctime: this.portable ? undefined : this.ctime,\n    })\n\n    if (pathWarn) {\n      this.warn(\n        'TAR_ENTRY_INFO',\n        `stripping ${pathWarn} from absolute path`,\n        {\n          entry: this,\n          path: pathWarn + this.path,\n        },\n      )\n    }\n\n    if (this.header.encode() && !this.noPax) {\n      super.write(\n        new Pax({\n          atime: this.portable ? undefined : this.atime,\n          ctime: this.portable ? undefined : this.ctime,\n          gid: this.portable ? undefined : this.gid,\n          mtime: this.noMtime ? undefined : this.mtime,\n          path: this[PREFIX](this.path),\n          linkpath:\n            this.type === 'Link' && this.linkpath !== undefined ?\n              this[PREFIX](this.linkpath)\n            : this.linkpath,\n          size: this.size,\n          uid: this.portable ? undefined : this.uid,\n          uname: this.portable ? undefined : this.uname,\n          dev: this.portable ? undefined : this.readEntry.dev,\n          ino: this.portable ? undefined : this.readEntry.ino,\n          nlink: this.portable ? undefined : this.readEntry.nlink,\n        }).encode(),\n      )\n    }\n\n    const b = this.header?.block\n    /* c8 ignore start */\n    if (!b) throw new Error('failed to encode header')\n    /* c8 ignore stop */\n    super.write(b)\n    readEntry.pipe(this)\n  }\n\n  [PREFIX](path: string) {\n    return prefixPath(path, this.prefix)\n  }\n\n  [MODE](mode: number) {\n    return modeFix(mode, this.type === 'Directory', this.portable)\n  }\n\n  write(buffer: Buffer | string, cb?: () => void): boolean\n  write(\n    str: Buffer | string,\n    encoding?: BufferEncoding | null,\n    cb?: () => void,\n  ): boolean\n  write(\n    chunk: Buffer | string,\n    encoding?: BufferEncoding | (() => unknown) | null,\n    cb?: () => unknown,\n  ): boolean {\n    /* c8 ignore start - just junk to comply with NodeJS.WritableStream */\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = undefined\n    }\n    if (typeof chunk === 'string') {\n      chunk = Buffer.from(\n        chunk,\n        typeof encoding === 'string' ? encoding : 'utf8',\n      )\n    }\n    /* c8 ignore stop */\n    const writeLen = chunk.length\n    if (writeLen > this.blockRemain) {\n      throw new Error('writing more to entry than is appropriate')\n    }\n    this.blockRemain -= writeLen\n    return super.write(chunk, cb)\n  }\n\n  end(cb?: () => void): this\n  end(chunk: Buffer | string, cb?: () => void): this\n  end(\n    chunk: Buffer | string,\n    encoding?: BufferEncoding,\n    cb?: () => void,\n  ): this\n  end(\n    chunk?: Buffer | string | (() => void),\n    encoding?: BufferEncoding | (() => void),\n    cb?: () => void,\n  ): this {\n    if (this.blockRemain) {\n      super.write(Buffer.alloc(this.blockRemain))\n    }\n    /* c8 ignore start - just junk to comply with NodeJS.WritableStream */\n    if (typeof chunk === 'function') {\n      cb = chunk\n      encoding = undefined\n      chunk = undefined\n    }\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = undefined\n    }\n    if (typeof chunk === 'string') {\n      chunk = Buffer.from(chunk, encoding ?? 'utf8')\n    }\n    if (cb) this.once('finish', cb)\n    if (chunk) super.end(chunk, cb)\n    else super.end(cb)\n    /* c8 ignore stop */\n    return this\n  }\n}\n\nconst getType = (stat: Stats): EntryTypeName | 'Unsupported' =>\n  stat.isFile() ? 'File'\n  : stat.isDirectory() ? 'Directory'\n  : stat.isSymbolicLink() ? 'SymbolicLink'\n  : 'Unsupported'\n","export const modeFix = (\n  mode: number,\n  isDir: boolean,\n  portable: boolean,\n) => {\n  mode &= 0o7777\n\n  // in portable mode, use the minimum reasonable umask\n  // if this system creates files with 0o664 by default\n  // (as some linux distros do), then we'll write the\n  // archive with 0o644 instead.  Also, don't ever create\n  // a file that is not readable/writable by the owner.\n  if (portable) {\n    mode = (mode | 0o600) & ~0o22\n  }\n\n  // if dirs are readable, then they should be listable\n  if (isDir) {\n    if (mode & 0o400) {\n      mode |= 0o100\n    }\n    if (mode & 0o40) {\n      mode |= 0o10\n    }\n    if (mode & 0o4) {\n      mode |= 0o1\n    }\n  }\n  return mode\n}\n","// unix absolute paths are also absolute on win32, so we use this for both\nimport { win32 } from 'node:path'\nconst { isAbsolute, parse } = win32\n\n// returns [root, stripped]\n// Note that windows will think that //x/y/z/a has a \"root\" of //x/y, and in\n// those cases, we want to sanitize it to x/y/z/a, not z/a, so we strip /\n// explicitly if it's the first character.\n// drive-specific relative paths on Windows get their root stripped off even\n// though they are not absolute, so `c:../foo` becomes ['c:', '../foo']\nexport const stripAbsolutePath = (path: string): [string, string] => {\n  let r = ''\n\n  let parsed = parse(path)\n  while (isAbsolute(path) || parsed.root) {\n    // windows will think that //x/y/z has a \"root\" of //x/y/\n    // but strip the //?/C:/ off of //?/C:/path\n    const root =\n      path.charAt(0) === '/' && path.slice(0, 4) !== '//?/' ?\n        '/'\n      : parsed.root\n    path = path.slice(root.length)\n    r += root\n    parsed = parse(path)\n  }\n  return [r, path]\n}\n","// When writing files on Windows, translate the characters to their\n// 0xf000 higher-encoded versions.\n\nconst raw = ['|', '<', '>', '?', ':']\n\nconst win = raw.map(char =>\n  String.fromCodePoint(0xf000 + Number(char.codePointAt(0))),\n)\n\nconst toWin = new Map(raw.map((char, i) => [char, win[i]]))\nconst toRaw = new Map(win.map((char, i) => [char, raw[i]]))\n\nexport const encode = (s: string) =>\n  raw.reduce((s, c) => s.split(c).join(toWin.get(c)), s)\nexport const decode = (s: string) =>\n  win.reduce((s, c) => s.split(c).join(toRaw.get(c)), s)\n","export class Yallist<T = unknown> {\n  tail?: Node<T>\n  head?: Node<T>\n  length: number = 0\n\n  static create<T = unknown>(list: Iterable<T> = []) {\n    return new Yallist(list)\n  }\n\n  constructor(list: Iterable<T> = []) {\n    for (const item of list) {\n      this.push(item)\n    }\n  }\n\n  *[Symbol.iterator]() {\n    for (let walker = this.head; walker; walker = walker.next) {\n      yield walker.value\n    }\n  }\n\n  removeNode(node: Node<T>) {\n    if (node.list !== this) {\n      throw new Error(\n        'removing node which does not belong to this list',\n      )\n    }\n\n    const next = node.next\n    const prev = node.prev\n\n    if (next) {\n      next.prev = prev\n    }\n\n    if (prev) {\n      prev.next = next\n    }\n\n    if (node === this.head) {\n      this.head = next\n    }\n    if (node === this.tail) {\n      this.tail = prev\n    }\n\n    this.length--\n    node.next = undefined\n    node.prev = undefined\n    node.list = undefined\n\n    return next\n  }\n\n  unshiftNode(node: Node<T>) {\n    if (node === this.head) {\n      return\n    }\n\n    if (node.list) {\n      node.list.removeNode(node)\n    }\n\n    const head = this.head\n    node.list = this\n    node.next = head\n    if (head) {\n      head.prev = node\n    }\n\n    this.head = node\n    if (!this.tail) {\n      this.tail = node\n    }\n    this.length++\n  }\n\n  pushNode(node: Node<T>) {\n    if (node === this.tail) {\n      return\n    }\n\n    if (node.list) {\n      node.list.removeNode(node)\n    }\n\n    const tail = this.tail\n    node.list = this\n    node.prev = tail\n    if (tail) {\n      tail.next = node\n    }\n\n    this.tail = node\n    if (!this.head) {\n      this.head = node\n    }\n    this.length++\n  }\n\n  push(...args: T[]) {\n    for (let i = 0, l = args.length; i < l; i++) {\n      push(this, args[i])\n    }\n    return this.length\n  }\n\n  unshift(...args: T[]) {\n    for (var i = 0, l = args.length; i < l; i++) {\n      unshift(this, args[i])\n    }\n    return this.length\n  }\n\n  pop() {\n    if (!this.tail) {\n      return undefined\n    }\n\n    const res = this.tail.value\n    const t = this.tail\n    this.tail = this.tail.prev\n    if (this.tail) {\n      this.tail.next = undefined\n    } else {\n      this.head = undefined\n    }\n    t.list = undefined\n    this.length--\n    return res\n  }\n\n  shift() {\n    if (!this.head) {\n      return undefined\n    }\n\n    const res = this.head.value\n    const h = this.head\n    this.head = this.head.next\n    if (this.head) {\n      this.head.prev = undefined\n    } else {\n      this.tail = undefined\n    }\n    h.list = undefined\n    this.length--\n    return res\n  }\n\n  forEach(\n    fn: (value: T, i: number, list: Yallist<T>) => any,\n    thisp?: any,\n  ) {\n    thisp = thisp || this\n    for (let walker = this.head, i = 0; !!walker; i++) {\n      fn.call(thisp, walker.value, i, this)\n      walker = walker.next\n    }\n  }\n\n  forEachReverse(\n    fn: (value: T, i: number, list: Yallist<T>) => any,\n    thisp?: any,\n  ) {\n    thisp = thisp || this\n    for (let walker = this.tail, i = this.length - 1; !!walker; i--) {\n      fn.call(thisp, walker.value, i, this)\n      walker = walker.prev\n    }\n  }\n\n  get(n: number) {\n    let i = 0\n    let walker = this.head\n    for (; !!walker && i < n; i++) {\n      walker = walker.next\n    }\n    if (i === n && !!walker) {\n      return walker.value\n    }\n  }\n\n  getReverse(n: number) {\n    let i = 0\n    let walker = this.tail\n    for (; !!walker && i < n; i++) {\n      // abort out of the list early if we hit a cycle\n      walker = walker.prev\n    }\n    if (i === n && !!walker) {\n      return walker.value\n    }\n  }\n\n  map<R = any>(\n    fn: (value: T, list: Yallist<T>) => R,\n    thisp?: any,\n  ): Yallist<R> {\n    thisp = thisp || this\n    const res = new Yallist<R>()\n    for (let walker = this.head; !!walker; ) {\n      res.push(fn.call(thisp, walker.value, this))\n      walker = walker.next\n    }\n    return res\n  }\n\n  mapReverse<R = any>(\n    fn: (value: T, list: Yallist<T>) => R,\n    thisp?: any,\n  ): Yallist<R> {\n    thisp = thisp || this\n    var res = new Yallist<R>()\n    for (let walker = this.tail; !!walker; ) {\n      res.push(fn.call(thisp, walker.value, this))\n      walker = walker.prev\n    }\n    return res\n  }\n\n  reduce(fn: (left: T, right: T, i: number) => T): T\n  reduce<R = any>(\n    fn: (acc: R, next: T, i: number) => R,\n    initial: R,\n  ): R\n  reduce<R = any>(\n    fn: (acc: R, next: T, i: number) => R,\n    initial?: R,\n  ): R {\n    let acc: R | T\n    let walker = this.head\n    if (arguments.length > 1) {\n      acc = initial as R\n    } else if (this.head) {\n      walker = this.head.next\n      acc = this.head.value\n    } else {\n      throw new TypeError(\n        'Reduce of empty list with no initial value',\n      )\n    }\n\n    for (var i = 0; !!walker; i++) {\n      acc = fn(acc as R, walker.value, i)\n      walker = walker.next\n    }\n\n    return acc as R\n  }\n\n  reduceReverse(fn: (left: T, right: T, i: number) => T): T\n  reduceReverse<R = any>(\n    fn: (acc: R, next: T, i: number) => R,\n    initial: R,\n  ): R\n  reduceReverse<R = any>(\n    fn: (acc: R, next: T, i: number) => R,\n    initial?: R,\n  ): R {\n    let acc: R | T\n    let walker = this.tail\n    if (arguments.length > 1) {\n      acc = initial as R\n    } else if (this.tail) {\n      walker = this.tail.prev\n      acc = this.tail.value\n    } else {\n      throw new TypeError(\n        'Reduce of empty list with no initial value',\n      )\n    }\n\n    for (let i = this.length - 1; !!walker; i--) {\n      acc = fn(acc as R, walker.value, i)\n      walker = walker.prev\n    }\n\n    return acc as R\n  }\n\n  toArray() {\n    const arr = new Array(this.length)\n    for (let i = 0, walker = this.head; !!walker; i++) {\n      arr[i] = walker.value\n      walker = walker.next\n    }\n    return arr\n  }\n\n  toArrayReverse() {\n    const arr = new Array(this.length)\n    for (let i = 0, walker = this.tail; !!walker; i++) {\n      arr[i] = walker.value\n      walker = walker.prev\n    }\n    return arr\n  }\n\n  slice(from: number = 0, to: number = this.length) {\n    if (to < 0) {\n      to += this.length\n    }\n    if (from < 0) {\n      from += this.length\n    }\n    const ret = new Yallist()\n    if (to < from || to < 0) {\n      return ret\n    }\n    if (from < 0) {\n      from = 0\n    }\n    if (to > this.length) {\n      to = this.length\n    }\n    let walker = this.head\n    let i = 0\n    for (i = 0; !!walker && i < from; i++) {\n      walker = walker.next\n    }\n    for (; !!walker && i < to; i++, walker = walker.next) {\n      ret.push(walker.value)\n    }\n    return ret\n  }\n\n  sliceReverse(from: number = 0, to: number = this.length) {\n    if (to < 0) {\n      to += this.length\n    }\n    if (from < 0) {\n      from += this.length\n    }\n    const ret = new Yallist()\n    if (to < from || to < 0) {\n      return ret\n    }\n    if (from < 0) {\n      from = 0\n    }\n    if (to > this.length) {\n      to = this.length\n    }\n    let i = this.length\n    let walker = this.tail\n    for (; !!walker && i > to; i--) {\n      walker = walker.prev\n    }\n    for (; !!walker && i > from; i--, walker = walker.prev) {\n      ret.push(walker.value)\n    }\n    return ret\n  }\n\n  splice(start: number, deleteCount: number = 0, ...nodes: T[]) {\n    if (start > this.length) {\n      start = this.length - 1\n    }\n    if (start < 0) {\n      start = this.length + start\n    }\n\n    let walker = this.head\n\n    for (let i = 0; !!walker && i < start; i++) {\n      walker = walker.next\n    }\n\n    const ret: T[] = []\n    for (let i = 0; !!walker && i < deleteCount; i++) {\n      ret.push(walker.value)\n      walker = this.removeNode(walker)\n    }\n    if (!walker) {\n      walker = this.tail\n    } else if (walker !== this.tail) {\n      walker = walker.prev\n    }\n\n    for (const v of nodes) {\n      walker = insertAfter<T>(this, walker, v)\n    }\n\n    return ret\n  }\n\n  reverse() {\n    const head = this.head\n    const tail = this.tail\n    for (let walker = head; !!walker; walker = walker.prev) {\n      const p = walker.prev\n      walker.prev = walker.next\n      walker.next = p\n    }\n    this.head = tail\n    this.tail = head\n    return this\n  }\n}\n\n// insertAfter undefined means \"make the node the new head of list\"\nfunction insertAfter<T>(\n  self: Yallist<T>,\n  node: Node<T> | undefined,\n  value: T,\n) {\n  const prev = node\n  const next = node ? node.next : self.head\n  const inserted = new Node<T>(value, prev, next, self)\n\n  if (inserted.next === undefined) {\n    self.tail = inserted\n  }\n  if (inserted.prev === undefined) {\n    self.head = inserted\n  }\n\n  self.length++\n\n  return inserted\n}\n\nfunction push<T>(self: Yallist<T>, item: T) {\n  self.tail = new Node<T>(item, self.tail, undefined, self)\n  if (!self.head) {\n    self.head = self.tail\n  }\n  self.length++\n}\n\nfunction unshift<T>(self: Yallist<T>, item: T) {\n  self.head = new Node<T>(item, undefined, self.head, self)\n  if (!self.tail) {\n    self.tail = self.head\n  }\n  self.length++\n}\n\nexport class Node<T = unknown> {\n  list?: Yallist<T>\n  next?: Node<T>\n  prev?: Node<T>\n  value: T\n\n  constructor(\n    value: T,\n    prev?: Node<T> | undefined,\n    next?: Node<T> | undefined,\n    list?: Yallist<T> | undefined,\n  ) {\n    this.list = list\n    this.value = value\n\n    if (prev) {\n      prev.next = this\n      this.prev = prev\n    } else {\n      this.prev = undefined\n    }\n\n    if (next) {\n      next.prev = this\n      this.next = next\n    } else {\n      this.next = undefined\n    }\n  }\n}\n","// tar -x\nimport * as fsm from '@isaacs/fs-minipass'\nimport fs from 'node:fs'\nimport { filesFilter } from './list.js'\nimport { makeCommand } from './make-command.js'\nimport type { TarOptionsFile, TarOptionsSyncFile } from './options.js'\nimport { Unpack, UnpackSync } from './unpack.js'\n\nconst extractFileSync = (opt: TarOptionsSyncFile) => {\n  const u = new UnpackSync(opt)\n  const file = opt.file\n  const stat = fs.statSync(file)\n  // This trades a zero-byte read() syscall for a stat\n  // However, it will usually result in less memory allocation\n  const readSize = opt.maxReadSize || 16 * 1024 * 1024\n  const stream = new fsm.ReadStreamSync(file, {\n    readSize: readSize,\n    size: stat.size,\n  })\n  stream.pipe(u)\n}\n\nconst extractFile = (opt: TarOptionsFile, _?: string[]) => {\n  const u = new Unpack(opt)\n  const readSize = opt.maxReadSize || 16 * 1024 * 1024\n\n  const file = opt.file\n  const p = new Promise<void>((resolve, reject) => {\n    u.on('error', reject)\n    u.on('close', resolve)\n\n    // This trades a zero-byte read() syscall for a stat\n    // However, it will usually result in less memory allocation\n    fs.stat(file, (er, stat) => {\n      if (er) {\n        reject(er)\n      } else {\n        const stream = new fsm.ReadStream(file, {\n          readSize: readSize,\n          size: stat.size,\n        })\n        stream.on('error', reject)\n        stream.pipe(u)\n      }\n    })\n  })\n  return p\n}\n\nexport const extract = makeCommand<Unpack, UnpackSync>(\n  extractFileSync,\n  extractFile,\n  opt => new UnpackSync(opt),\n  opt => new Unpack(opt),\n  (opt, files) => {\n    if (files?.length) filesFilter(opt, files)\n  },\n)\n","// the PEND/UNPEND stuff tracks whether we're ready to emit end/close yet.\n// but the path reservations are required to avoid race conditions where\n// parallelized unpack ops may mess with one another, due to dependencies\n// (like a Link depending on its target) or destructive operations (like\n// clobbering an fs object to create one of a different type.)\n\nimport * as fsm from '@isaacs/fs-minipass'\nimport assert from 'node:assert'\nimport { randomBytes } from 'node:crypto'\nimport fs, { type Stats } from 'node:fs'\nimport path from 'node:path'\nimport { getWriteFlag } from './get-write-flag.js'\nimport type { MkdirError } from './mkdir.js'\nimport { mkdir, mkdirSync } from './mkdir.js'\nimport { normalizeWindowsPath } from './normalize-windows-path.js'\nimport { Parser } from './parse.js'\nimport { stripAbsolutePath } from './strip-absolute-path.js'\nimport * as wc from './winchars.js'\n\nimport type { TarOptions } from './options.js'\nimport { PathReservations } from './path-reservations.js'\nimport type { ReadEntry } from './read-entry.js'\nimport type { WarnData } from './warn-method.js'\nimport { SymlinkError } from './symlink-error.js'\nimport { umask } from './process-umask.js'\n\nconst ONENTRY = Symbol('onEntry')\nconst CHECKFS = Symbol('checkFs')\nconst CHECKFS2 = Symbol('checkFs2')\nconst ISREUSABLE = Symbol('isReusable')\nconst MAKEFS = Symbol('makeFs')\nconst FILE = Symbol('file')\nconst DIRECTORY = Symbol('directory')\nconst LINK = Symbol('link')\nconst SYMLINK = Symbol('symlink')\nconst HARDLINK = Symbol('hardlink')\nconst ENSURE_NO_SYMLINK = Symbol('ensureNoSymlink')\nconst UNSUPPORTED = Symbol('unsupported')\nconst CHECKPATH = Symbol('checkPath')\nconst STRIPABSOLUTEPATH = Symbol('stripAbsolutePath')\nconst MKDIR = Symbol('mkdir')\nconst ONERROR = Symbol('onError')\nconst PENDING = Symbol('pending')\nconst PEND = Symbol('pend')\nconst UNPEND = Symbol('unpend')\nconst ENDED = Symbol('ended')\nconst MAYBECLOSE = Symbol('maybeClose')\nconst SKIP = Symbol('skip')\nconst DOCHOWN = Symbol('doChown')\nconst UID = Symbol('uid')\nconst GID = Symbol('gid')\nconst CHECKED_CWD = Symbol('checkedCwd')\nconst platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform\nconst isWindows = platform === 'win32'\nconst DEFAULT_MAX_DEPTH = 1024\n\n// Unlinks on Windows are not atomic.\n//\n// This means that if you have a file entry, followed by another\n// file entry with an identical name, and you cannot re-use the file\n// (because it's a hardlink, or because unlink:true is set, or it's\n// Windows, which does not have useful nlink values), then the unlink\n// will be committed to the disk AFTER the new file has been written\n// over the old one, deleting the new file.\n//\n// To work around this, on Windows systems, we rename the file and then\n// delete the renamed file.  It's a sloppy kludge, but frankly, I do not\n// know of a better way to do this, given windows' non-atomic unlink\n// semantics.\n//\n// See: https://github.com/npm/node-tar/issues/183\n/* c8 ignore start */\nconst unlinkFile = (path: string, cb: (er?: Error | null) => void) => {\n  if (!isWindows) {\n    return fs.unlink(path, cb)\n  }\n\n  const name = path + '.DELETE.' + randomBytes(16).toString('hex')\n  fs.rename(path, name, er => {\n    if (er) {\n      return cb(er)\n    }\n    fs.unlink(name, cb)\n  })\n}\n/* c8 ignore stop */\n\n/* c8 ignore start */\nconst unlinkFileSync = (path: string) => {\n  if (!isWindows) {\n    return fs.unlinkSync(path)\n  }\n\n  const name = path + '.DELETE.' + randomBytes(16).toString('hex')\n  fs.renameSync(path, name)\n  fs.unlinkSync(name)\n}\n/* c8 ignore stop */\n\n// this.gid, entry.gid, this.processUid\nconst uint32 = (\n  a: number | undefined,\n  b: number | undefined,\n  c: number | undefined,\n) =>\n  a !== undefined && a === a >>> 0 ? a\n  : b !== undefined && b === b >>> 0 ? b\n  : c\n\nexport class Unpack extends Parser {\n  [ENDED]: boolean = false;\n  [CHECKED_CWD]: boolean = false;\n  [PENDING]: number = 0\n\n  reservations: PathReservations = new PathReservations()\n  transform?: TarOptions['transform']\n  writable: true = true\n  readable: false = false\n  uid?: number\n  gid?: number\n  setOwner: boolean\n  preserveOwner: boolean\n  processGid?: number\n  processUid?: number\n  maxDepth: number\n  forceChown: boolean\n  win32: boolean\n  newer: boolean\n  keep: boolean\n  noMtime: boolean\n  preservePaths: boolean\n  unlink: boolean\n  cwd: string\n  strip: number\n  processUmask: number\n  umask: number\n  dmode: number\n  fmode: number\n  chmod: boolean\n\n  constructor(opt: TarOptions = {}) {\n    opt.ondone = () => {\n      this[ENDED] = true\n      this[MAYBECLOSE]()\n    }\n\n    super(opt)\n\n    this.transform = opt.transform\n\n    this.chmod = !!opt.chmod\n\n    if (typeof opt.uid === 'number' || typeof opt.gid === 'number') {\n      // need both or neither\n      if (typeof opt.uid !== 'number' || typeof opt.gid !== 'number') {\n        throw new TypeError('cannot set owner without number uid and gid')\n      }\n      if (opt.preserveOwner) {\n        throw new TypeError(\n          'cannot preserve owner in archive and also set owner explicitly',\n        )\n      }\n      this.uid = opt.uid\n      this.gid = opt.gid\n      this.setOwner = true\n    } else {\n      this.uid = undefined\n      this.gid = undefined\n      this.setOwner = false\n    }\n\n    // default true for root\n    this.preserveOwner =\n      opt.preserveOwner === undefined && typeof opt.uid !== 'number' ?\n        !!(process.getuid?.() === 0)\n      : !!opt.preserveOwner\n\n    this.processUid =\n      (this.preserveOwner || this.setOwner) && process.getuid ?\n        process.getuid()\n      : undefined\n    this.processGid =\n      (this.preserveOwner || this.setOwner) && process.getgid ?\n        process.getgid()\n      : undefined\n\n    // prevent excessively deep nesting of subfolders\n    // set to `Infinity` to remove this restriction\n    this.maxDepth =\n      typeof opt.maxDepth === 'number' ? opt.maxDepth : DEFAULT_MAX_DEPTH\n\n    // mostly just for testing, but useful in some cases.\n    // Forcibly trigger a chown on every entry, no matter what\n    this.forceChown = opt.forceChown === true\n\n    // turn ><?| in filenames into 0xf000-higher encoded forms\n    this.win32 = !!opt.win32 || isWindows\n\n    // do not unpack over files that are newer than what's in the archive\n    this.newer = !!opt.newer\n\n    // do not unpack over ANY files\n    this.keep = !!opt.keep\n\n    // do not set mtime/atime of extracted entries\n    this.noMtime = !!opt.noMtime\n\n    // allow .., absolute path entries, and unpacking through symlinks\n    // without this, warn and skip .., relativize absolutes, and error\n    // on symlinks in extraction path\n    this.preservePaths = !!opt.preservePaths\n\n    // unlink files and links before writing. This breaks existing hard\n    // links, and removes symlink directories rather than erroring\n    this.unlink = !!opt.unlink\n\n    this.cwd = normalizeWindowsPath(path.resolve(opt.cwd || process.cwd()))\n    this.strip = Number(opt.strip) || 0\n    // if we're not chmodding, then we don't need the process umask\n    this.processUmask =\n      !this.chmod ? 0\n      : typeof opt.processUmask === 'number' ? opt.processUmask\n      : umask()\n    this.umask =\n      typeof opt.umask === 'number' ? opt.umask : this.processUmask\n\n    // default mode for dirs created as parents\n    this.dmode = opt.dmode || 0o0777 & ~this.umask\n    this.fmode = opt.fmode || 0o0666 & ~this.umask\n\n    this.on('entry', entry => this[ONENTRY](entry))\n  }\n\n  // a bad or damaged archive is a warning for Parser, but an error\n  // when extracting.  Mark those errors as unrecoverable, because\n  // the Unpack contract cannot be met.\n  warn(code: string, msg: string | Error, data: WarnData = {}) {\n    if (code === 'TAR_BAD_ARCHIVE' || code === 'TAR_ABORT') {\n      data.recoverable = false\n    }\n    return super.warn(code, msg, data)\n  }\n\n  [MAYBECLOSE]() {\n    if (this[ENDED] && this[PENDING] === 0) {\n      this.emit('prefinish')\n      this.emit('finish')\n      this.emit('end')\n    }\n  }\n\n  // return false if we need to skip this file\n  // return true if the field was successfully sanitized\n  [STRIPABSOLUTEPATH](\n    entry: ReadEntry,\n    field: 'path' | 'linkpath',\n  ): boolean {\n    const p = entry[field]\n    const { type } = entry\n    if (!p || this.preservePaths) return true\n\n    // strip off the root\n    const [root, stripped] = stripAbsolutePath(p)\n    const parts = stripped.replaceAll(/\\\\/g, '/').split('/')\n\n    if (\n      parts.includes('..') ||\n      /* c8 ignore next */\n      (isWindows && /^[a-z]:\\.\\.$/i.test(parts[0] ?? ''))\n    ) {\n      // For linkpath, check if the resolved path escapes cwd rather than\n      // just rejecting any path with '..' - relative symlinks like\n      // '../sibling/file' are valid if they resolve within the cwd.\n      // For paths, they just simply may not ever use .. at all.\n      if (field === 'path' || type === 'Link') {\n        this.warn('TAR_ENTRY_ERROR', `${field} contains '..'`, {\n          entry,\n          [field]: p,\n        })\n        // not ok!\n        return false\n      }\n      // Resolve linkpath relative to the entry's directory.\n      // `path.posix` is safe to use because we're operating on\n      // tar paths, not a filesystem.\n      const entryDir = path.posix.dirname(entry.path)\n      const resolved = path.posix.normalize(\n        path.posix.join(entryDir, parts.join('/')),\n      )\n      // If the resolved path escapes (starts with ..), reject it\n      if (resolved.startsWith('../') || resolved === '..') {\n        this.warn(\n          'TAR_ENTRY_ERROR',\n          `${field} escapes extraction directory`,\n          {\n            entry,\n            [field]: p,\n          },\n        )\n        return false\n      }\n    }\n\n    if (root) {\n      // ok, but triggers warning about stripping root\n      entry[field] = String(stripped)\n      this.warn(\n        'TAR_ENTRY_INFO',\n        `stripping ${root} from absolute ${field}`,\n        {\n          entry,\n          [field]: p,\n        },\n      )\n    }\n    return true\n  }\n\n  // no IO, just string checking for absolute indicators\n  [CHECKPATH](entry: ReadEntry) {\n    const p = normalizeWindowsPath(entry.path)\n    const parts = p.split('/')\n\n    if (this.strip) {\n      if (parts.length < this.strip) {\n        return false\n      }\n      if (entry.type === 'Link') {\n        const linkparts = normalizeWindowsPath(\n          String(entry.linkpath),\n        ).split('/')\n        if (linkparts.length >= this.strip) {\n          entry.linkpath = linkparts.slice(this.strip).join('/')\n        } else {\n          return false\n        }\n      }\n      parts.splice(0, this.strip)\n      entry.path = parts.join('/')\n    }\n\n    if (isFinite(this.maxDepth) && parts.length > this.maxDepth) {\n      this.warn('TAR_ENTRY_ERROR', 'path excessively deep', {\n        entry,\n        path: p,\n        depth: parts.length,\n        maxDepth: this.maxDepth,\n      })\n      return false\n    }\n\n    if (\n      !this[STRIPABSOLUTEPATH](entry, 'path') ||\n      !this[STRIPABSOLUTEPATH](entry, 'linkpath')\n    ) {\n      return false\n    }\n\n    entry.absolute =\n      path.isAbsolute(entry.path) ?\n        normalizeWindowsPath(path.resolve(entry.path))\n      : normalizeWindowsPath(path.resolve(this.cwd, entry.path))\n\n    // if we somehow ended up with a path that escapes the cwd, and we are\n    // not in preservePaths mode, then something is fishy!  This should have\n    // been prevented above, so ignore this for coverage.\n    /* c8 ignore start - defense in depth */\n    if (\n      !this.preservePaths &&\n      typeof entry.absolute === 'string' &&\n      entry.absolute.indexOf(this.cwd + '/') !== 0 &&\n      entry.absolute !== this.cwd\n    ) {\n      this.warn('TAR_ENTRY_ERROR', 'path escaped extraction target', {\n        entry,\n        path: normalizeWindowsPath(entry.path),\n        resolvedPath: entry.absolute,\n        cwd: this.cwd,\n      })\n      return false\n    }\n    /* c8 ignore stop */\n\n    // an archive can set properties on the extraction directory, but it\n    // may not replace the cwd with a different kind of thing entirely.\n    if (\n      entry.absolute === this.cwd &&\n      entry.type !== 'Directory' &&\n      entry.type !== 'GNUDumpDir'\n    ) {\n      return false\n    }\n\n    // only encode : chars that aren't drive letter indicators\n    if (this.win32) {\n      const { root: aRoot } = path.win32.parse(String(entry.absolute))\n      entry.absolute =\n        aRoot + wc.encode(String(entry.absolute).slice(aRoot.length))\n      const { root: pRoot } = path.win32.parse(entry.path)\n      entry.path = pRoot + wc.encode(entry.path.slice(pRoot.length))\n    }\n\n    return true\n  }\n\n  [ONENTRY](entry: ReadEntry) {\n    if (!this[CHECKPATH](entry)) {\n      return entry.resume()\n    }\n\n    assert.equal(typeof entry.absolute, 'string')\n\n    switch (entry.type) {\n      case 'Directory':\n      case 'GNUDumpDir':\n        if (entry.mode) {\n          entry.mode = entry.mode | 0o700\n        }\n\n      // eslint-disable-next-line no-fallthrough\n      case 'File':\n      case 'OldFile':\n      case 'ContiguousFile':\n      case 'Link':\n      case 'SymbolicLink':\n        return this[CHECKFS](entry)\n\n      case 'CharacterDevice':\n      case 'BlockDevice':\n      case 'FIFO':\n      default:\n        return this[UNSUPPORTED](entry)\n    }\n  }\n\n  [ONERROR](er: Error, entry: ReadEntry) {\n    // Cwd has to exist, or else nothing works. That's serious.\n    // Other errors are warnings, which raise the error in strict\n    // mode, but otherwise continue on.\n    if (er.name === 'CwdError') {\n      this.emit('error', er)\n    } else {\n      this.warn('TAR_ENTRY_ERROR', er, { entry })\n      this[UNPEND]()\n      entry.resume()\n    }\n  }\n\n  [MKDIR](\n    dir: string,\n    mode: number,\n    cb: (er?: null | MkdirError, made?: string) => void,\n  ) {\n    void mkdir(\n      normalizeWindowsPath(dir),\n      {\n        uid: this.uid,\n        gid: this.gid,\n        processUid: this.processUid,\n        processGid: this.processGid,\n        umask: this.processUmask,\n        preserve: this.preservePaths,\n        unlink: this.unlink,\n        cwd: this.cwd,\n        mode: mode,\n      },\n      cb,\n    )\n  }\n\n  [DOCHOWN](entry: ReadEntry) {\n    // in preserve owner mode, chown if the entry doesn't match process\n    // in set owner mode, chown if setting doesn't match process\n    return (\n      this.forceChown ||\n      (this.preserveOwner &&\n        ((typeof entry.uid === 'number' &&\n          entry.uid !== this.processUid) ||\n          (typeof entry.gid === 'number' &&\n            entry.gid !== this.processGid))) ||\n      (typeof this.uid === 'number' && this.uid !== this.processUid) ||\n      (typeof this.gid === 'number' && this.gid !== this.processGid)\n    )\n  }\n\n  [UID](entry: ReadEntry) {\n    return uint32(this.uid, entry.uid, this.processUid)\n  }\n\n  [GID](entry: ReadEntry) {\n    return uint32(this.gid, entry.gid, this.processGid)\n  }\n\n  [FILE](entry: ReadEntry, fullyDone: () => void) {\n    const mode =\n      typeof entry.mode === 'number' ? entry.mode & 0o7777 : this.fmode\n    const stream = new fsm.WriteStream(String(entry.absolute), {\n      // slight lie, but it can be numeric flags\n      flags: getWriteFlag(entry.size) as string,\n      mode: mode,\n      autoClose: false,\n    })\n    stream.on('error', (er: Error) => {\n      if (stream.fd) {\n        fs.close(stream.fd, () => {})\n      }\n\n      // flush all the data out so that we aren't left hanging\n      // if the error wasn't actually fatal.  otherwise the parse\n      // is blocked, and we never proceed.\n      stream.write = () => true\n      this[ONERROR](er, entry)\n      fullyDone()\n    })\n\n    let actions = 1\n    const done = (er?: null | Error) => {\n      if (er) {\n        /* c8 ignore start - we should always have a fd by now */\n        if (stream.fd) {\n          fs.close(stream.fd, () => {})\n        }\n        /* c8 ignore stop */\n\n        this[ONERROR](er, entry)\n        fullyDone()\n        return\n      }\n\n      if (--actions === 0) {\n        if (stream.fd !== undefined) {\n          fs.close(stream.fd, er => {\n            if (er) {\n              this[ONERROR](er, entry)\n            } else {\n              this[UNPEND]()\n            }\n            fullyDone()\n          })\n        }\n      }\n    }\n\n    stream.on('finish', () => {\n      // if futimes fails, try utimes\n      // if utimes fails, fail with the original error\n      // same for fchown/chown\n      const abs = String(entry.absolute)\n      const fd = stream.fd\n\n      if (typeof fd === 'number' && entry.mtime && !this.noMtime) {\n        actions++\n        const atime = entry.atime || new Date()\n        const mtime = entry.mtime\n        fs.futimes(fd, atime, mtime, er =>\n          er ?\n            fs.utimes(abs, atime, mtime, er2 => done(er2 && er))\n          : done(),\n        )\n      }\n\n      if (typeof fd === 'number' && this[DOCHOWN](entry)) {\n        actions++\n        const uid = this[UID](entry)\n        const gid = this[GID](entry)\n        if (typeof uid === 'number' && typeof gid === 'number') {\n          fs.fchown(fd, uid, gid, er =>\n            er ? fs.chown(abs, uid, gid, er2 => done(er2 && er)) : done(),\n          )\n        }\n      }\n\n      done()\n    })\n\n    const tx = this.transform ? this.transform(entry) || entry : entry\n    if (tx !== entry) {\n      tx.on('error', er => {\n        this[ONERROR](er as Error, entry)\n        fullyDone()\n      })\n      entry.pipe(tx)\n    }\n    tx.pipe(stream)\n  }\n\n  [DIRECTORY](entry: ReadEntry, fullyDone: () => void) {\n    const mode =\n      typeof entry.mode === 'number' ? entry.mode & 0o7777 : this.dmode\n    this[MKDIR](String(entry.absolute), mode, er => {\n      if (er) {\n        this[ONERROR](er, entry)\n        fullyDone()\n        return\n      }\n\n      let actions = 1\n      const done = () => {\n        if (--actions === 0) {\n          fullyDone()\n          this[UNPEND]()\n          entry.resume()\n        }\n      }\n\n      if (entry.mtime && !this.noMtime) {\n        actions++\n        fs.utimes(\n          String(entry.absolute),\n          entry.atime || new Date(),\n          entry.mtime,\n          done,\n        )\n      }\n\n      if (this[DOCHOWN](entry)) {\n        actions++\n        fs.chown(\n          String(entry.absolute),\n          Number(this[UID](entry)),\n          Number(this[GID](entry)),\n          done,\n        )\n      }\n\n      done()\n    })\n  }\n\n  [UNSUPPORTED](entry: ReadEntry) {\n    entry.unsupported = true\n    this.warn(\n      'TAR_ENTRY_UNSUPPORTED',\n      `unsupported entry type: ${entry.type}`,\n      { entry },\n    )\n    entry.resume()\n  }\n\n  [SYMLINK](entry: ReadEntry, done: () => void) {\n    const parts = normalizeWindowsPath(\n      path.relative(\n        this.cwd,\n        path.resolve(\n          path.dirname(String(entry.absolute)),\n          String(entry.linkpath),\n        ),\n      ),\n    ).split('/')\n    this[ENSURE_NO_SYMLINK](\n      entry,\n      this.cwd,\n      parts,\n      () => this[LINK](entry, String(entry.linkpath), 'symlink', done),\n      er => {\n        this[ONERROR](er, entry)\n        done()\n      },\n    )\n  }\n\n  [HARDLINK](entry: ReadEntry, done: () => void) {\n    const linkpath = normalizeWindowsPath(\n      path.resolve(this.cwd, String(entry.linkpath)),\n    )\n    const parts = normalizeWindowsPath(String(entry.linkpath)).split('/')\n    this[ENSURE_NO_SYMLINK](\n      entry,\n      this.cwd,\n      parts,\n      () => this[LINK](entry, linkpath, 'link', done),\n      er => {\n        this[ONERROR](er, entry)\n        done()\n      },\n    )\n  }\n\n  [ENSURE_NO_SYMLINK](\n    entry: ReadEntry,\n    cwd: string,\n    parts: string[],\n    done: () => void,\n    onError: (er: SymlinkError) => void,\n  ) {\n    const p = parts.shift()\n    if (this.preservePaths || p === undefined) return done()\n    const t = path.resolve(cwd, p)\n    fs.lstat(t, (er, st) => {\n      if (er) return done()\n      if (st?.isSymbolicLink()) {\n        return onError(\n          new SymlinkError(t, path.resolve(t, parts.join('/'))),\n        )\n      }\n      this[ENSURE_NO_SYMLINK](entry, t, parts, done, onError)\n    })\n  }\n\n  [PEND]() {\n    this[PENDING]++\n  }\n\n  [UNPEND]() {\n    this[PENDING]--\n    this[MAYBECLOSE]()\n  }\n\n  [SKIP](entry: ReadEntry) {\n    this[UNPEND]()\n    entry.resume()\n  }\n\n  // Check if we can reuse an existing filesystem entry safely and\n  // overwrite it, rather than unlinking and recreating\n  // Windows doesn't report a useful nlink, so we just never reuse entries\n  [ISREUSABLE](entry: ReadEntry, st: Stats) {\n    return (\n      entry.type === 'File' &&\n      !this.unlink &&\n      st.isFile() &&\n      st.nlink <= 1 &&\n      !isWindows\n    )\n  }\n\n  // check if a thing is there, and if so, try to clobber it\n  [CHECKFS](entry: ReadEntry) {\n    this[PEND]()\n    const paths = [entry.path]\n    if (entry.linkpath) {\n      paths.push(entry.linkpath)\n    }\n    this.reservations.reserve(paths, done => this[CHECKFS2](entry, done))\n  }\n\n  [CHECKFS2](entry: ReadEntry, fullyDone: (er?: Error) => void) {\n    const done = (er?: Error) => {\n      fullyDone(er)\n    }\n\n    const checkCwd = () => {\n      this[MKDIR](this.cwd, this.dmode, er => {\n        if (er) {\n          this[ONERROR](er, entry)\n          done()\n          return\n        }\n        this[CHECKED_CWD] = true\n        start()\n      })\n    }\n\n    const start = () => {\n      if (entry.absolute !== this.cwd) {\n        const parent = normalizeWindowsPath(\n          path.dirname(String(entry.absolute)),\n        )\n        if (parent !== this.cwd) {\n          return this[MKDIR](parent, this.dmode, er => {\n            if (er) {\n              this[ONERROR](er, entry)\n              done()\n              return\n            }\n            afterMakeParent()\n          })\n        }\n      }\n      afterMakeParent()\n    }\n\n    const afterMakeParent = () => {\n      fs.lstat(String(entry.absolute), (lstatEr, st) => {\n        if (\n          st &&\n          (this.keep ||\n            /* c8 ignore next */\n            (this.newer && st.mtime > (entry.mtime ?? st.mtime)))\n        ) {\n          this[SKIP](entry)\n          done()\n          return\n        }\n        if (lstatEr || this[ISREUSABLE](entry, st)) {\n          return this[MAKEFS](null, entry, done)\n        }\n\n        if (st.isDirectory()) {\n          if (entry.type === 'Directory') {\n            const needChmod =\n              this.chmod && entry.mode && (st.mode & 0o7777) !== entry.mode\n            const afterChmod = (er?: Error | null | undefined) =>\n              this[MAKEFS](er ?? null, entry, done)\n            if (!needChmod) {\n              return afterChmod()\n            }\n            return fs.chmod(\n              String(entry.absolute),\n              Number(entry.mode),\n              afterChmod,\n            )\n          }\n          // Not a dir entry, have to remove it.\n          // NB: the only way to end up with an entry that is the cwd\n          // itself, in such a way that == does not detect, is a\n          // tricky windows absolute path with UNC or 8.3 parts (and\n          // preservePaths:true, or else it will have been stripped).\n          // In that case, the user has opted out of path protections\n          // explicitly, so if they blow away the cwd, c'est la vie.\n          if (entry.absolute !== this.cwd) {\n            return fs.rmdir(String(entry.absolute), (er?: null | Error) =>\n              this[MAKEFS](er ?? null, entry, done),\n            )\n          }\n        }\n\n        // not a dir, and not reusable\n        // don't remove if the cwd, we want that error\n        if (entry.absolute === this.cwd) {\n          return this[MAKEFS](null, entry, done)\n        }\n\n        unlinkFile(String(entry.absolute), er =>\n          this[MAKEFS](er ?? null, entry, done),\n        )\n      })\n    }\n\n    if (this[CHECKED_CWD]) {\n      start()\n    } else {\n      checkCwd()\n    }\n  }\n\n  [MAKEFS](\n    er: null | undefined | Error,\n    entry: ReadEntry,\n    done: () => void,\n  ) {\n    if (er) {\n      this[ONERROR](er, entry)\n      done()\n      return\n    }\n\n    switch (entry.type) {\n      case 'File':\n      case 'OldFile':\n      case 'ContiguousFile':\n        return this[FILE](entry, done)\n\n      case 'Link':\n        return this[HARDLINK](entry, done)\n\n      case 'SymbolicLink':\n        return this[SYMLINK](entry, done)\n\n      case 'Directory':\n      case 'GNUDumpDir':\n        return this[DIRECTORY](entry, done)\n    }\n  }\n\n  [LINK](\n    entry: ReadEntry,\n    linkpath: string,\n    link: 'link' | 'symlink',\n    done: () => void,\n  ) {\n    fs[link](linkpath, String(entry.absolute), er => {\n      if (er) {\n        this[ONERROR](er, entry)\n      } else {\n        this[UNPEND]()\n        entry.resume()\n      }\n      done()\n    })\n  }\n}\n\nconst callSync = <T>(\n  fn: () => T,\n): [null, T] | [NodeJS.ErrnoException, null] => {\n  try {\n    return [null, fn()]\n  } catch (er) {\n    return [er as NodeJS.ErrnoException, null]\n  }\n}\n\nexport class UnpackSync extends Unpack {\n  sync: true = true;\n\n  [MAKEFS](er: null | Error | undefined, entry: ReadEntry) {\n    return super[MAKEFS](er, entry, () => {})\n  }\n\n  [CHECKFS](entry: ReadEntry) {\n    if (!this[CHECKED_CWD]) {\n      const er = this[MKDIR](this.cwd, this.dmode)\n      if (er) {\n        return this[ONERROR](er as Error, entry)\n      }\n      this[CHECKED_CWD] = true\n    }\n\n    // don't bother to make the parent if the current entry is the cwd,\n    // we've already checked it.\n    if (entry.absolute !== this.cwd) {\n      const parent = normalizeWindowsPath(\n        path.dirname(String(entry.absolute)),\n      )\n      if (parent !== this.cwd) {\n        const mkParent = this[MKDIR](parent, this.dmode)\n        if (mkParent) {\n          return this[ONERROR](mkParent as Error, entry)\n        }\n      }\n    }\n\n    const [lstatEr, st] = callSync(() =>\n      fs.lstatSync(String(entry.absolute)),\n    )\n    if (\n      st &&\n      (this.keep ||\n        /* c8 ignore next */\n        (this.newer && st.mtime > (entry.mtime ?? st.mtime)))\n    ) {\n      return this[SKIP](entry)\n    }\n\n    if (lstatEr || this[ISREUSABLE](entry, st)) {\n      return this[MAKEFS](null, entry)\n    }\n\n    if (st.isDirectory()) {\n      if (entry.type === 'Directory') {\n        const needChmod =\n          this.chmod && entry.mode && (st.mode & 0o7777) !== entry.mode\n        const [er] =\n          needChmod ?\n            callSync(() => {\n              fs.chmodSync(String(entry.absolute), Number(entry.mode))\n            })\n          : []\n        return this[MAKEFS](er, entry)\n      }\n      // not a dir entry, have to remove it\n      const [er] = callSync(() => fs.rmdirSync(String(entry.absolute)))\n      this[MAKEFS](er, entry)\n    }\n\n    // not a dir, and not reusable.\n    // don't remove if it's the cwd, since we want that error.\n    const [er] =\n      entry.absolute === this.cwd ?\n        []\n      : callSync(() => unlinkFileSync(String(entry.absolute)))\n    this[MAKEFS](er, entry)\n  }\n\n  [FILE](entry: ReadEntry, done: () => void) {\n    const mode =\n      typeof entry.mode === 'number' ? entry.mode & 0o7777 : this.fmode\n\n    const oner = (er?: null | Error | undefined) => {\n      let closeError\n      try {\n        fs.closeSync(fd)\n      } catch (e) {\n        closeError = e\n      }\n      if (er || closeError) {\n        this[ONERROR]((er as Error) || closeError, entry)\n      }\n      done()\n    }\n\n    let fd: number\n    try {\n      fd = fs.openSync(\n        String(entry.absolute),\n        getWriteFlag(entry.size),\n        mode,\n      )\n      /* c8 ignore start - This is only a problem if the file was successfully\n       * statted, BUT failed to open. Testing this is annoying, and we\n       * already have ample testint for other uses of oner() methods.\n       */\n    } catch (er) {\n      return oner(er as Error)\n    }\n    /* c8 ignore stop */\n    const tx = this.transform ? this.transform(entry) || entry : entry\n    if (tx !== entry) {\n      tx.on('error', er => this[ONERROR](er as Error, entry))\n      entry.pipe(tx)\n    }\n\n    tx.on('data', (chunk: Buffer) => {\n      try {\n        fs.writeSync(fd, chunk, 0, chunk.length)\n      } catch (er) {\n        oner(er as Error)\n      }\n    })\n\n    tx.on('end', () => {\n      let er = null\n      // try both, falling futimes back to utimes\n      // if either fails, handle the first error\n      if (entry.mtime && !this.noMtime) {\n        const atime = entry.atime || new Date()\n        const mtime = entry.mtime\n        try {\n          fs.futimesSync(fd, atime, mtime)\n        } catch (futimeser) {\n          try {\n            fs.utimesSync(String(entry.absolute), atime, mtime)\n          } catch {\n            er = futimeser\n          }\n        }\n      }\n\n      if (this[DOCHOWN](entry)) {\n        const uid = this[UID](entry)\n        const gid = this[GID](entry)\n\n        try {\n          fs.fchownSync(fd, Number(uid), Number(gid))\n        } catch (fchowner) {\n          try {\n            fs.chownSync(String(entry.absolute), Number(uid), Number(gid))\n          } catch {\n            er = er || fchowner\n          }\n        }\n      }\n\n      oner(er as Error)\n    })\n  }\n\n  [DIRECTORY](entry: ReadEntry, done: () => void) {\n    const mode =\n      typeof entry.mode === 'number' ? entry.mode & 0o7777 : this.dmode\n    const er = this[MKDIR](String(entry.absolute), mode)\n    if (er) {\n      this[ONERROR](er as Error, entry)\n      done()\n      return\n    }\n    if (entry.mtime && !this.noMtime) {\n      try {\n        fs.utimesSync(\n          String(entry.absolute),\n          entry.atime || new Date(),\n          entry.mtime,\n        )\n        /* c8 ignore next */\n      } catch {}\n    }\n    if (this[DOCHOWN](entry)) {\n      try {\n        fs.chownSync(\n          String(entry.absolute),\n          Number(this[UID](entry)),\n          Number(this[GID](entry)),\n        )\n      } catch {}\n    }\n    done()\n    entry.resume()\n  }\n\n  [MKDIR](dir: string, mode: number) {\n    try {\n      return mkdirSync(normalizeWindowsPath(dir), {\n        uid: this.uid,\n        gid: this.gid,\n        processUid: this.processUid,\n        processGid: this.processGid,\n        umask: this.processUmask,\n        preserve: this.preservePaths,\n        unlink: this.unlink,\n        cwd: this.cwd,\n        mode: mode,\n      })\n    } catch (er) {\n      return er\n    }\n  }\n\n  [ENSURE_NO_SYMLINK](\n    _entry: ReadEntry,\n    cwd: string,\n    parts: string[],\n    done: () => void,\n    onError: (er: SymlinkError) => void,\n  ) {\n    if (this.preservePaths || parts.length === 0) return done()\n    let t = cwd\n    for (const p of parts) {\n      t = path.resolve(t, p)\n      const [er, st] = callSync(() => fs.lstatSync(t))\n      if (er) return done()\n      if (st.isSymbolicLink()) {\n        return onError(\n          new SymlinkError(t, path.resolve(cwd, parts.join('/'))),\n        )\n      }\n    }\n    done()\n  }\n\n  [LINK](\n    entry: ReadEntry,\n    linkpath: string,\n    link: 'link' | 'symlink',\n    done: () => void,\n  ) {\n    const linkSync: `${typeof link}Sync` = `${link}Sync`\n    try {\n      fs[linkSync](linkpath, String(entry.absolute))\n      done()\n      entry.resume()\n    } catch (er) {\n      return this[ONERROR](er as Error, entry)\n    }\n  }\n}\n","// Get the appropriate flag to use for creating files\n// We use fmap on Windows platforms for files less than\n// 512kb.  This is a fairly low limit, but avoids making\n// things slower in some cases.  Since most of what this\n// library is used for is extracting tarballs of many\n// relatively small files in npm packages and the like,\n// it can be a big boost on Windows platforms.\n\nimport fs from 'fs'\n\nconst platform = process.env.__FAKE_PLATFORM__ || process.platform\nconst isWindows = platform === 'win32'\n\n/* c8 ignore start */\nconst { O_CREAT, O_NOFOLLOW, O_TRUNC, O_WRONLY } = fs.constants\nconst UV_FS_O_FILEMAP =\n  Number(process.env.__FAKE_FS_O_FILENAME__) ||\n  fs.constants.UV_FS_O_FILEMAP ||\n  0\n/* c8 ignore stop */\n\nconst fMapEnabled = isWindows && !!UV_FS_O_FILEMAP\nconst fMapLimit = 512 * 1024\nconst fMapFlag = UV_FS_O_FILEMAP | O_TRUNC | O_CREAT | O_WRONLY\nconst noFollowFlag =\n  !isWindows && typeof O_NOFOLLOW === 'number' ?\n    O_NOFOLLOW | O_TRUNC | O_CREAT | O_WRONLY\n  : null\nexport const getWriteFlag =\n  noFollowFlag !== null ? () => noFollowFlag\n  : !fMapEnabled ? () => 'w'\n  : (size: number) => (size < fMapLimit ? fMapFlag : 'w')\n","import fs, { type Dirent } from 'node:fs'\nimport path from 'node:path'\n\nconst lchownSync = (path: string, uid: number, gid: number) => {\n  try {\n    return fs.lchownSync(path, uid, gid)\n  } catch (er) {\n    if ((er as NodeJS.ErrnoException)?.code !== 'ENOENT') throw er\n  }\n}\n\nconst chown = (\n  cpath: string,\n  uid: number,\n  gid: number,\n  cb: (er?: unknown) => any,\n) => {\n  fs.lchown(cpath, uid, gid, er => {\n    // Skip ENOENT error\n    cb(er && (er as NodeJS.ErrnoException)?.code !== 'ENOENT' ? er : null)\n  })\n}\n\nconst chownrKid = (\n  p: string,\n  child: Dirent,\n  uid: number,\n  gid: number,\n  cb: (er?: unknown) => any,\n) => {\n  if (child.isDirectory()) {\n    chownr(path.resolve(p, child.name), uid, gid, (er: unknown) => {\n      if (er) return cb(er)\n      const cpath = path.resolve(p, child.name)\n      chown(cpath, uid, gid, cb)\n    })\n  } else {\n    const cpath = path.resolve(p, child.name)\n    chown(cpath, uid, gid, cb)\n  }\n}\n\nexport const chownr = (\n  p: string,\n  uid: number,\n  gid: number,\n  cb: (er?: unknown) => any,\n) => {\n  fs.readdir(p, { withFileTypes: true }, (er, children) => {\n    // any error other than ENOTDIR or ENOTSUP means it's not readable,\n    // or doesn't exist.  give up.\n    if (er) {\n      if (er.code === 'ENOENT') return cb()\n      else if (er.code !== 'ENOTDIR' && er.code !== 'ENOTSUP')\n        return cb(er)\n    }\n    if (er || !children.length) return chown(p, uid, gid, cb)\n\n    let len = children.length\n    let errState: null | NodeJS.ErrnoException = null\n    const then = (er?: unknown) => {\n      /* c8 ignore start */\n      if (errState) return\n      /* c8 ignore stop */\n      if (er) return cb((errState = er as NodeJS.ErrnoException))\n      if (--len === 0) return chown(p, uid, gid, cb)\n    }\n\n    for (const child of children) {\n      chownrKid(p, child, uid, gid, then)\n    }\n  })\n}\n\nconst chownrKidSync = (\n  p: string,\n  child: Dirent,\n  uid: number,\n  gid: number,\n) => {\n  if (child.isDirectory())\n    chownrSync(path.resolve(p, child.name), uid, gid)\n\n  lchownSync(path.resolve(p, child.name), uid, gid)\n}\n\nexport const chownrSync = (p: string, uid: number, gid: number) => {\n  let children: Dirent[]\n  try {\n    children = fs.readdirSync(p, { withFileTypes: true })\n  } catch (er) {\n    const e = er as NodeJS.ErrnoException\n    if (e?.code === 'ENOENT') return\n    else if (e?.code === 'ENOTDIR' || e?.code === 'ENOTSUP')\n      return lchownSync(p, uid, gid)\n    else throw e\n  }\n\n  for (const child of children) {\n    chownrKidSync(p, child, uid, gid)\n  }\n\n  return lchownSync(p, uid, gid)\n}\n","import { chownr, chownrSync } from 'chownr'\nimport fs from 'node:fs'\nimport fsp from 'node:fs/promises'\nimport path from 'node:path'\nimport { CwdError } from './cwd-error.js'\nimport { normalizeWindowsPath } from './normalize-windows-path.js'\nimport { SymlinkError } from './symlink-error.js'\n\nexport type MkdirOptions = {\n  uid?: number\n  gid?: number\n  processUid?: number\n  processGid?: number\n  umask?: number\n  preserve: boolean\n  unlink: boolean\n  cwd: string\n  mode: number\n}\n\nexport type MkdirError = NodeJS.ErrnoException | CwdError | SymlinkError\n\nconst checkCwd = (\n  dir: string,\n  cb: (er?: null | MkdirError) => unknown,\n) => {\n  fs.stat(dir, (er, st) => {\n    if (er || !st.isDirectory()) {\n      er = new CwdError(\n        dir,\n        (er as NodeJS.ErrnoException)?.code || 'ENOTDIR',\n      )\n    }\n    cb(er)\n  })\n}\n\n/**\n * Wrapper around fs/promises.mkdir for tar's needs.\n *\n * The main purpose is to avoid creating directories if we know that\n * they already exist (and track which ones exist for this purpose),\n * and prevent entries from being extracted into symlinked folders,\n * if `preservePaths` is not set.\n */\nexport const mkdir = (\n  dir: string,\n  opt: MkdirOptions,\n  cb: (er?: null | MkdirError, made?: string) => void,\n) => {\n  dir = normalizeWindowsPath(dir)\n\n  // if there's any overlap between mask and mode,\n  // then we'll need an explicit chmod\n  /* c8 ignore next */\n  const umask = opt.umask ?? 0o22\n  const mode = opt.mode | 0o0700\n  const needChmod = (mode & umask) !== 0\n\n  const uid = opt.uid\n  const gid = opt.gid\n  const doChown =\n    typeof uid === 'number' &&\n    typeof gid === 'number' &&\n    (uid !== opt.processUid || gid !== opt.processGid)\n\n  const preserve = opt.preserve\n  const unlink = opt.unlink\n  const cwd = normalizeWindowsPath(opt.cwd)\n\n  const done = (er?: null | MkdirError, created?: string) => {\n    if (er) {\n      cb(er)\n    } else {\n      if (created && doChown) {\n        chownr(created, uid, gid, er => done(er as NodeJS.ErrnoException))\n      } else if (needChmod) {\n        fs.chmod(dir, mode, cb)\n      } else {\n        cb()\n      }\n    }\n  }\n\n  if (dir === cwd) {\n    return checkCwd(dir, done)\n  }\n\n  if (preserve) {\n    return fsp.mkdir(dir, { mode, recursive: true }).then(\n      made => done(null, made ?? undefined), // oh, ts\n      done,\n    )\n  }\n\n  const sub = normalizeWindowsPath(path.relative(cwd, dir))\n  const parts = sub.split('/')\n  mkdir_(cwd, parts, mode, unlink, cwd, undefined, done)\n}\n\nconst mkdir_ = (\n  base: string,\n  parts: string[],\n  mode: number,\n  unlink: boolean,\n  cwd: string,\n  created: string | undefined,\n  cb: (er?: null | MkdirError, made?: string) => void,\n): void => {\n  if (parts.length === 0) {\n    return cb(null, created)\n  }\n  const p = parts.shift()\n  const part = normalizeWindowsPath(path.resolve(base + '/' + p))\n  fs.mkdir(\n    part,\n    mode,\n    onmkdir(part, parts, mode, unlink, cwd, created, cb),\n  )\n}\n\nconst onmkdir =\n  (\n    part: string,\n    parts: string[],\n    mode: number,\n    unlink: boolean,\n    cwd: string,\n    created: string | undefined,\n    cb: (er?: null | MkdirError, made?: string) => void,\n  ) =>\n  (er?: null | NodeJS.ErrnoException) => {\n    if (er) {\n      fs.lstat(part, (statEr, st) => {\n        if (statEr) {\n          statEr.path = statEr.path && normalizeWindowsPath(statEr.path)\n          cb(statEr)\n        } else if (st.isDirectory()) {\n          mkdir_(part, parts, mode, unlink, cwd, created, cb)\n        } else if (unlink) {\n          fs.unlink(part, er => {\n            if (er) {\n              return cb(er)\n            }\n            fs.mkdir(\n              part,\n              mode,\n              onmkdir(part, parts, mode, unlink, cwd, created, cb),\n            )\n          })\n        } else if (st.isSymbolicLink()) {\n          return cb(new SymlinkError(part, part + '/' + parts.join('/')))\n        } else {\n          cb(er)\n        }\n      })\n    } else {\n      created = created || part\n      mkdir_(part, parts, mode, unlink, cwd, created, cb)\n    }\n  }\n\nconst checkCwdSync = (dir: string) => {\n  let ok = false\n  let code\n  try {\n    ok = fs.statSync(dir).isDirectory()\n  } catch (er) {\n    code = (er as NodeJS.ErrnoException)?.code\n  } finally {\n    if (!ok) {\n      throw new CwdError(dir, code ?? 'ENOTDIR')\n    }\n  }\n}\n\nexport const mkdirSync = (dir: string, opt: MkdirOptions) => {\n  dir = normalizeWindowsPath(dir)\n  // if there's any overlap between mask and mode,\n  // then we'll need an explicit chmod\n  /* c8 ignore next */\n  const umask = opt.umask ?? 0o22\n  const mode = opt.mode | 0o700\n  const needChmod = (mode & umask) !== 0\n\n  const uid = opt.uid\n  const gid = opt.gid\n  const doChown =\n    typeof uid === 'number' &&\n    typeof gid === 'number' &&\n    (uid !== opt.processUid || gid !== opt.processGid)\n\n  const preserve = opt.preserve\n  const unlink = opt.unlink\n  const cwd = normalizeWindowsPath(opt.cwd)\n\n  const done = (created?: string | undefined) => {\n    if (created && doChown) {\n      chownrSync(created, uid, gid)\n    }\n    if (needChmod) {\n      fs.chmodSync(dir, mode)\n    }\n  }\n\n  if (dir === cwd) {\n    checkCwdSync(cwd)\n    return done()\n  }\n\n  if (preserve) {\n    return done(fs.mkdirSync(dir, { mode, recursive: true }) ?? undefined)\n  }\n\n  const sub = normalizeWindowsPath(path.relative(cwd, dir))\n  const parts = sub.split('/')\n  let created\n  for (\n    let p = parts.shift(), part = cwd;\n    p && (part += '/' + p);\n    p = parts.shift()\n  ) {\n    part = normalizeWindowsPath(path.resolve(part))\n\n    try {\n      fs.mkdirSync(part, mode)\n      created = created || part\n    } catch {\n      const st = fs.lstatSync(part)\n      if (st.isDirectory()) {\n        continue\n      } else if (unlink) {\n        fs.unlinkSync(part)\n        fs.mkdirSync(part, mode)\n        created = created || part\n        continue\n      } else if (st.isSymbolicLink()) {\n        return new SymlinkError(part, part + '/' + parts.join('/'))\n      }\n    }\n  }\n\n  return done(created)\n}\n","export class CwdError extends Error {\n  path: string\n  code: string\n  syscall = 'chdir' as const\n\n  constructor(path: string, code: string) {\n    super(`${code}: Cannot cd into '${path}'`)\n    this.path = path\n    this.code = code\n  }\n\n  get name() {\n    return 'CwdError'\n  }\n}\n","export class SymlinkError extends Error {\n  path: string\n  symlink: string\n  syscall = 'symlink' as const\n  code = 'TAR_SYMLINK_ERROR' as const\n  constructor(symlink: string, path: string) {\n    super('TAR_SYMLINK_ERROR: Cannot extract through symbolic link')\n    this.symlink = symlink\n    this.path = path\n  }\n  get name() {\n    return 'SymlinkError'\n  }\n}\n","// A path exclusive reservation system\n// reserve([list, of, paths], fn)\n// When the fn is first in line for all its paths, it\n// is called with a cb that clears the reservation.\n//\n// Used by async unpack to avoid clobbering paths in use,\n// while still allowing maximal safe parallelization.\n\nimport { join } from 'node:path'\nimport { normalizeUnicode } from './normalize-unicode.js'\nimport { stripTrailingSlashes } from './strip-trailing-slashes.js'\n\nconst platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform\nconst isWindows = platform === 'win32'\n\nexport type Reservation = {\n  paths: string[]\n  dirs: Set<string>\n}\n\nexport type Handler = (clear: () => void) => void\n\n// return a set of parent dirs for a given path\n// '/a/b/c/d' -> ['/', '/a', '/a/b', '/a/b/c', '/a/b/c/d']\nconst getDirs = (path: string) => {\n  const dirs = path\n    .split('/')\n    .slice(0, -1)\n    .reduce((set: string[], path) => {\n      const s = set.at(-1)\n      if (s !== undefined) {\n        path = join(s, path)\n      }\n      set.push(path || '/')\n      return set\n    }, [])\n  return dirs\n}\n\nexport class PathReservations {\n  // path => [function or Set]\n  // A Set object means a directory reservation\n  // A fn is a direct reservation on that path\n  #queues = new Map<string, (Handler | Set<Handler>)[]>()\n\n  // fn => {paths:[path,...], dirs:[path, ...]}\n  #reservations = new Map<Handler, Reservation>()\n\n  // functions currently running\n  #running = new Set<Handler>()\n\n  reserve(paths: string[], fn: Handler) {\n    paths =\n      isWindows ?\n        ['win32 parallelization disabled']\n      : paths.map(p => {\n          // don't need normPath, because we skip this entirely for windows\n          return stripTrailingSlashes(join(normalizeUnicode(p)))\n        })\n\n    const dirs = new Set<string>(\n      paths.map(path => getDirs(path)).reduce((a, b) => a.concat(b)),\n    )\n    this.#reservations.set(fn, { dirs, paths })\n    for (const p of paths) {\n      const q = this.#queues.get(p)\n      if (!q) {\n        this.#queues.set(p, [fn])\n      } else {\n        q.push(fn)\n      }\n    }\n    for (const dir of dirs) {\n      const q = this.#queues.get(dir)\n      if (!q) {\n        this.#queues.set(dir, [new Set([fn])])\n      } else {\n        const l = q.at(-1)\n        if (l instanceof Set) {\n          l.add(fn)\n        } else {\n          q.push(new Set([fn]))\n        }\n      }\n    }\n    return this.#run(fn)\n  }\n\n  // return the queues for each path the function cares about\n  // fn => {paths, dirs}\n  #getQueues(fn: Handler): {\n    paths: Handler[][]\n    dirs: (Handler | Set<Handler>)[][]\n  } {\n    const res = this.#reservations.get(fn)\n    /* c8 ignore start */\n    if (!res) {\n      throw new Error('function does not have any path reservations')\n    }\n    /* c8 ignore stop */\n    return {\n      paths: res.paths.map((path: string) =>\n        this.#queues.get(path),\n      ) as Handler[][],\n      dirs: [...res.dirs].map(path => this.#queues.get(path)) as (\n        | Handler\n        | Set<Handler>\n      )[][],\n    }\n  }\n\n  // check if fn is first in line for all its paths, and is\n  // included in the first set for all its dir queues\n  check(fn: Handler) {\n    const { paths, dirs } = this.#getQueues(fn)\n    return (\n      paths.every(q => q && q[0] === fn) &&\n      dirs.every(q => q && q[0] instanceof Set && q[0].has(fn))\n    )\n  }\n\n  // run the function if it's first in line and not already running\n  #run(fn: Handler) {\n    if (this.#running.has(fn) || !this.check(fn)) {\n      return false\n    }\n    this.#running.add(fn)\n    fn(() => this.#clear(fn))\n    return true\n  }\n\n  #clear(fn: Handler) {\n    if (!this.#running.has(fn)) {\n      return false\n    }\n    const res = this.#reservations.get(fn)\n    /* c8 ignore start */\n    if (!res) {\n      throw new Error('invalid reservation')\n    }\n    /* c8 ignore stop */\n    const { paths, dirs } = res\n\n    const next = new Set<Handler>()\n    for (const path of paths) {\n      const q = this.#queues.get(path)\n      /* c8 ignore start */\n      if (!q || q?.[0] !== fn) {\n        continue\n      }\n      /* c8 ignore stop */\n      const q0 = q[1]\n      if (!q0) {\n        this.#queues.delete(path)\n        continue\n      }\n      q.shift()\n      if (typeof q0 === 'function') {\n        next.add(q0)\n      } else {\n        for (const f of q0) {\n          next.add(f)\n        }\n      }\n    }\n\n    for (const dir of dirs) {\n      const q = this.#queues.get(dir)\n      const q0 = q?.[0]\n      /* c8 ignore next - type safety only */\n      if (!q || !(q0 instanceof Set)) continue\n      if (q0.size === 1 && q.length === 1) {\n        this.#queues.delete(dir)\n        continue\n      } else if (q0.size === 1) {\n        q.shift()\n        // next one must be a function,\n        // or else the Set would've been reused\n        const n = q[0]\n        if (typeof n === 'function') {\n          next.add(n)\n        }\n      } else {\n        q0.delete(fn)\n      }\n    }\n\n    this.#running.delete(fn)\n    next.forEach(fn => this.#run(fn))\n    return true\n  }\n}\n","// warning: extremely hot code path.\n// This has been meticulously optimized for use\n// within npm install on large package trees.\n// Do not edit without careful benchmarking.\nconst normalizeCache: Record<string, string> = Object.create(null)\n\n// Limit the size of this. Very low-sophistication LRU cache\nconst MAX = 10000\nconst cache = new Set<string>()\nexport const normalizeUnicode = (s: string): string => {\n  if (!cache.has(s)) {\n    // shake out identical accents and ligatures\n    normalizeCache[s] = s\n      .normalize('NFD')\n      .toLocaleLowerCase('en')\n      .toLocaleUpperCase('en')\n  } else {\n    cache.delete(s)\n  }\n  cache.add(s)\n\n  const ret = normalizeCache[s] as string\n\n  let i = cache.size - MAX\n  // only prune when we're 10% over the max\n  if (i > MAX / 10) {\n    for (const s of cache) {\n      cache.delete(s)\n      delete normalizeCache[s]\n      if (--i <= 0) break\n    }\n  }\n\n  return ret\n}\n","// separate file so I stop getting nagged in vim about deprecated API.\nexport const umask = () => process.umask()\n","// tar -r\nimport { WriteStream, WriteStreamSync } from '@isaacs/fs-minipass'\nimport type { Minipass } from 'minipass'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { Header } from './header.js'\nimport { list } from './list.js'\nimport { makeCommand } from './make-command.js'\nimport type { TarOptionsFile, TarOptionsSyncFile } from './options.js'\nimport { isFile } from './options.js'\nimport { Pack, PackSync } from './pack.js'\n\n// starting at the head of the file, read a Header\n// If the checksum is invalid, that's our position to start writing\n// If it is, jump forward by the specified size (round up to 512)\n// and try again.\n// Write the new Pack stream starting there.\n\nconst replaceSync = (opt: TarOptionsSyncFile, files: string[]) => {\n  const p = new PackSync(opt)\n\n  let threw = true\n  let fd\n  let position\n\n  try {\n    try {\n      fd = fs.openSync(opt.file, 'r+')\n    } catch (er) {\n      if ((er as NodeJS.ErrnoException)?.code === 'ENOENT') {\n        fd = fs.openSync(opt.file, 'w+')\n      } else {\n        throw er\n      }\n    }\n\n    const st = fs.fstatSync(fd)\n    const headBuf = Buffer.alloc(512)\n\n    POSITION: for (position = 0; position < st.size; position += 512) {\n      for (let bufPos = 0, bytes = 0; bufPos < 512; bufPos += bytes) {\n        bytes = fs.readSync(\n          fd,\n          headBuf,\n          bufPos,\n          headBuf.length - bufPos,\n          position + bufPos,\n        )\n\n        if (position === 0 && headBuf[0] === 0x1f && headBuf[1] === 0x8b) {\n          throw new Error('cannot append to compressed archives')\n        }\n\n        if (!bytes) {\n          break POSITION\n        }\n      }\n\n      const h = new Header(headBuf)\n      if (!h.cksumValid) {\n        break\n      }\n      const entryBlockSize = 512 * Math.ceil((h.size || 0) / 512)\n      if (position + entryBlockSize + 512 > st.size) {\n        break\n      }\n      // the 512 for the header we just parsed will be added as well\n      // also jump ahead all the blocks for the body\n      position += entryBlockSize\n      if (opt.mtimeCache && h.mtime) {\n        opt.mtimeCache.set(String(h.path), h.mtime)\n      }\n    }\n    threw = false\n\n    streamSync(opt, p, position, fd, files)\n  } finally {\n    if (threw) {\n      try {\n        fs.closeSync(fd as number)\n      } catch {}\n    }\n  }\n}\n\nconst streamSync = (\n  opt: TarOptionsSyncFile,\n  p: Pack,\n  position: number,\n  fd: number,\n  files: string[],\n) => {\n  const stream = new WriteStreamSync(opt.file, {\n    fd: fd,\n    start: position,\n  })\n  p.pipe(stream as unknown as Minipass.Writable)\n  addFilesSync(p, files)\n}\n\nconst replaceAsync = (\n  opt: TarOptionsFile,\n  files: string[],\n): Promise<void> => {\n  files = Array.from(files)\n  const p = new Pack(opt)\n\n  const getPos = (\n    fd: number,\n    size: number,\n    cb_: (er?: null | Error, pos?: number) => void,\n  ) => {\n    const cb = (er?: Error | null, pos?: number) => {\n      if (er) {\n        fs.close(fd, _ => cb_(er))\n      } else {\n        cb_(null, pos)\n      }\n    }\n\n    let position = 0\n    if (size === 0) {\n      return cb(null, 0)\n    }\n\n    let bufPos = 0\n    const headBuf = Buffer.alloc(512)\n    const onread = (er?: null | Error, bytes?: number): void => {\n      if (er || bytes === undefined) {\n        return cb(er)\n      }\n      bufPos += bytes\n      if (bufPos < 512 && bytes) {\n        return fs.read(\n          fd,\n          headBuf,\n          bufPos,\n          headBuf.length - bufPos,\n          position + bufPos,\n          onread,\n        )\n      }\n\n      if (position === 0 && headBuf[0] === 0x1f && headBuf[1] === 0x8b) {\n        return cb(new Error('cannot append to compressed archives'))\n      }\n\n      // truncated header\n      if (bufPos < 512) {\n        return cb(null, position)\n      }\n\n      const h = new Header(headBuf)\n      if (!h.cksumValid) {\n        return cb(null, position)\n      }\n\n      /* c8 ignore next */\n      const entryBlockSize = 512 * Math.ceil((h.size ?? 0) / 512)\n      if (position + entryBlockSize + 512 > size) {\n        return cb(null, position)\n      }\n\n      position += entryBlockSize + 512\n      if (position >= size) {\n        return cb(null, position)\n      }\n\n      if (opt.mtimeCache && h.mtime) {\n        opt.mtimeCache.set(String(h.path), h.mtime)\n      }\n      bufPos = 0\n      fs.read(fd, headBuf, 0, 512, position, onread)\n    }\n    fs.read(fd, headBuf, 0, 512, position, onread)\n  }\n\n  const promise = new Promise<void>((resolve, reject) => {\n    p.on('error', reject)\n    let flag = 'r+'\n    const onopen = (er?: NodeJS.ErrnoException | null, fd?: number) => {\n      if (er && er.code === 'ENOENT' && flag === 'r+') {\n        flag = 'w+'\n        return fs.open(opt.file, flag, onopen)\n      }\n\n      if (er || !fd) {\n        return reject(er)\n      }\n\n      fs.fstat(fd, (er, st) => {\n        if (er) {\n          return fs.close(fd, () => reject(er))\n        }\n\n        getPos(fd, st.size, (er, position) => {\n          if (er) {\n            return reject(er)\n          }\n          const stream = new WriteStream(opt.file, {\n            fd: fd,\n            start: position,\n          })\n          p.pipe(stream as unknown as Minipass.Writable)\n          stream.on('error', reject)\n          stream.on('close', resolve)\n          addFilesAsync(p, files)\n        })\n      })\n    }\n    fs.open(opt.file, flag, onopen)\n  })\n\n  return promise\n}\n\nconst addFilesSync = (p: Pack, files: string[]) => {\n  files.forEach(file => {\n    if (file.charAt(0) === '@') {\n      list({\n        file: path.resolve(p.cwd, file.slice(1)),\n        sync: true,\n        noResume: true,\n        onReadEntry: entry => p.add(entry),\n      })\n    } else {\n      p.add(file)\n    }\n  })\n  p.end()\n}\n\nconst addFilesAsync = async (p: Pack, files: string[]): Promise<void> => {\n  for (const file of files) {\n    if (file.charAt(0) === '@') {\n      await list({\n        file: path.resolve(String(p.cwd), file.slice(1)),\n        noResume: true,\n        onReadEntry: entry => p.add(entry),\n      })\n    } else {\n      p.add(file)\n    }\n  }\n  p.end()\n}\n\nexport const replace = makeCommand(\n  replaceSync,\n  replaceAsync,\n  /* c8 ignore start */\n  (): never => {\n    throw new TypeError('file is required')\n  },\n  (): never => {\n    throw new TypeError('file is required')\n  },\n  /* c8 ignore stop */\n  (opt, entries) => {\n    if (!isFile(opt)) {\n      throw new TypeError('file is required')\n    }\n\n    if (\n      opt.gzip ||\n      opt.brotli ||\n      opt.zstd ||\n      opt.file.endsWith('.br') ||\n      opt.file.endsWith('.tbr')\n    ) {\n      throw new TypeError('cannot append to compressed archives')\n    }\n\n    if (!entries?.length) {\n      throw new TypeError('no paths specified to add/replace')\n    }\n  },\n)\n","// tar -u\n\nimport { makeCommand } from './make-command.js'\nimport { type TarOptionsWithAliases } from './options.js'\n\nimport { replace as r } from './replace.js'\n\n// just call tar.r with the filter and mtimeCache\nexport const update = makeCommand(\n  r.syncFile,\n  r.asyncFile,\n  r.syncNoFile,\n  r.asyncNoFile,\n  (opt, entries = []) => {\n    r.validate?.(opt, entries)\n    mtimeFilter(opt)\n  },\n)\n\nconst mtimeFilter = (opt: TarOptionsWithAliases) => {\n  const filter = opt.filter\n\n  if (!opt.mtimeCache) {\n    opt.mtimeCache = new Map()\n  }\n\n  opt.filter =\n    filter ?\n      (path, stat) =>\n        filter(path, stat) &&\n        !(\n          /* c8 ignore start */\n          (\n            (opt.mtimeCache?.get(path) ?? stat.mtime ?? 0) >\n            (stat.mtime ?? 0)\n          )\n          /* c8 ignore stop */\n        )\n    : (path, stat) =>\n        !(\n          /* c8 ignore start */\n          (\n            (opt.mtimeCache?.get(path) ?? stat.mtime ?? 0) >\n            (stat.mtime ?? 0)\n          )\n          /* c8 ignore stop */\n        )\n}\n","import { appendFileSync, mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { THREADBASE_ROOT } from \"./paths\";\n\nconst LOG_PATH = join(THREADBASE_ROOT, \"update.log\");\n\nexport function appendUpdateLog(line: string): void {\n  try {\n    mkdirSync(THREADBASE_ROOT, { recursive: true });\n    appendFileSync(LOG_PATH, `${new Date().toISOString()} ${line}\\n`, \"utf8\");\n  } catch {\n    // Non-fatal — never let a logging failure break the update flow.\n  }\n}\n","import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport type { Command } from \"commander\";\nimport { Command as CommanderCommand } from \"commander\";\nimport { TASK_NAME } from \"../src/lifecycle/constants\";\nimport { darwinPlistPath } from \"../src/lifecycle/launchd\";\nimport { clearMarker, readMarker } from \"../src/lifecycle/marker\";\nimport { getSupervisor } from \"../src/lifecycle/platform\";\nimport { isPidAlive } from \"../src/lifecycle/process-liveness\";\nimport { getLogger } from \"../src/logger\";\n\nconst log = getLogger(\"prod\");\n\nexport type CommandResult = { ok: boolean; message: string };\n\nexport function clearSupervisorLogs(): void {\n  let paths: { stdout: string; stderr: string };\n  try {\n    paths = getSupervisor().getLogPaths();\n  } catch {\n    return;\n  }\n  for (const file of [paths.stdout, paths.stderr]) {\n    try {\n      // eslint-disable-next-line @typescript-eslint/no-require-imports\n      const fs = require(\"node:fs\") as typeof import(\"node:fs\");\n      fs.writeFileSync(file, \"\");\n    } catch {\n      // Best effort: keep start/restart working even if logs cannot be cleared.\n    }\n  }\n}\n\nexport async function runProdStart(): Promise<CommandResult> {\n  const sup = getSupervisor();\n  clearMarker();\n  // `prod stop` fully unloads the agent (launchctl bootout / Task Scheduler\n  // disable), so `start` must be able to re-load it — not just kickstart an\n  // already-loaded one. When the agent isn't loaded, bootstrap it from its\n  // on-disk definition (mirrors `prod restart`); when it is loaded but merely\n  // suspended via a marker, a kickstart is enough.\n  if (sup.isAgentLoaded()) {\n    sup.kickstartAgent();\n  } else {\n    const specPath = process.platform === \"darwin\" ? darwinPlistPath() : \"\";\n    try {\n      sup.bootstrapAgent(specPath);\n    } catch {\n      // Agent was never installed (no plist / unregistered task) — bootstrap\n      // can't conjure a service definition. Point the user at the installer.\n      const message =\n        process.platform === \"darwin\"\n          ? \"launchd agent com.ronen.threadbase is not loaded and could not be bootstrapped. Run 'scripts/deploy.sh setup' to install it.\"\n          : `task '${TASK_NAME}' is not registered. Run 'scripts\\\\deploy.ps1 setup' to install it.`;\n      return { ok: false, message };\n    }\n  }\n  const restoredMsg =\n    process.platform === \"darwin\"\n      ? \"prod streamer restored — launchd is starting it now.\"\n      : \"prod streamer restored — Task Scheduler is starting it now.\";\n  return { ok: true, message: restoredMsg };\n}\n\nexport async function runProdStop(): Promise<CommandResult> {\n  getSupervisor().bootoutAgent();\n  const what =\n    process.platform === \"darwin\" ? \"launchd agent unloaded\" : \"Task Scheduler task disabled\";\n  return {\n    ok: true,\n    message: `prod streamer stopped (${what}). It will not auto-restart until 'tb-streamer prod start' or system reboot.`,\n  };\n}\n\nexport type ProdStatus = {\n  agentLoaded: boolean;\n  agentPid: number | null;\n  marker: ReturnType<typeof readMarker>;\n};\n\nexport async function runProdStatus(): Promise<ProdStatus> {\n  const sup = getSupervisor();\n  return {\n    agentLoaded: sup.isAgentLoaded(),\n    agentPid: sup.getAgentPid(),\n    marker: readMarker(),\n  };\n}\n\nexport type DoctorReport = { findings: string[]; repairs: string[] };\n\nexport async function runProdDoctor(opts: { fix: boolean }): Promise<DoctorReport> {\n  const findings: string[] = [];\n  const repairs: string[] = [];\n\n  const marker = readMarker();\n  if (marker && !marker.userHeld && !isPidAlive(marker.devPid)) {\n    findings.push(`stale marker (dev pid ${marker.devPid} dead)`);\n    if (opts.fix) {\n      clearMarker();\n      repairs.push(`cleared stale marker (dev pid ${marker.devPid} was dead)`);\n    }\n  }\n\n  if (!getSupervisor().isAgentLoaded()) {\n    findings.push(\"launchd agent is not loaded — prod is fully down\");\n  }\n\n  return { findings, repairs };\n}\n\nexport type LogsOptions = {\n  lines: number;\n  follow: boolean;\n  errorsOnly: boolean;\n  clear?: boolean;\n};\nexport type SpawnTailArgs = { files: string[]; lines: number; follow: boolean };\nexport type SpawnTailResult = { ok: boolean; message?: string };\nexport type SpawnTail = (args: SpawnTailArgs) => Promise<SpawnTailResult>;\n\n/**\n * Default tail implementation — spawns `tail` (-F follows files across rotation;\n * macOS BSD tail and GNU tail both support -F and -n). Streams to the parent's\n * stdout/stderr and resolves when the child exits.\n */\nconst defaultSpawnTail: SpawnTail = ({ files, lines, follow }) => {\n  const existing = files.filter((f) => existsSync(f));\n  if (existing.length === 0) {\n    return Promise.resolve({\n      ok: false,\n      message: `no log files found at: ${files.join(\", \")}. The streamer may not have started yet, or the deploy uses a different log layout.`,\n    });\n  }\n  const args = [\"-n\", String(lines)];\n  if (follow) args.push(\"-F\");\n  args.push(...existing);\n  return new Promise<SpawnTailResult>((resolve) => {\n    const child = spawn(\"tail\", args, { stdio: [\"ignore\", \"inherit\", \"inherit\"] });\n    child.on(\"error\", (err) => resolve({ ok: false, message: `tail failed: ${err.message}` }));\n    child.on(\"exit\", (code) => resolve({ ok: code === 0 }));\n  });\n};\n\nexport async function runProdLogs(\n  opts: LogsOptions,\n  deps: { spawnTail?: SpawnTail; truncate?: (file: string) => void } = {},\n): Promise<CommandResult> {\n  const spawnTail = deps.spawnTail ?? defaultSpawnTail;\n  let paths: { stdout: string; stderr: string };\n  try {\n    paths = getSupervisor().getLogPaths();\n  } catch (err) {\n    return { ok: false, message: err instanceof Error ? err.message : String(err) };\n  }\n  if (opts.clear) {\n    // Truncate in place (don't unlink): the running streamer holds open file\n    // descriptors via launchd's StandardOut/ErrorPath. Removing the inode\n    // would leave the daemon writing to a ghost file. `: > file` semantics.\n    const truncate =\n      deps.truncate ??\n      ((file: string) => {\n        // eslint-disable-next-line @typescript-eslint/no-require-imports\n        const fs = require(\"node:fs\") as typeof import(\"node:fs\");\n        fs.writeFileSync(file, \"\");\n      });\n    for (const f of [paths.stdout, paths.stderr]) {\n      try {\n        truncate(f);\n      } catch (err) {\n        return {\n          ok: false,\n          message: `failed to truncate ${f}: ${err instanceof Error ? err.message : String(err)}`,\n        };\n      }\n    }\n    return { ok: true, message: `cleared:\\n  ${paths.stdout}\\n  ${paths.stderr}` };\n  }\n  const files = opts.errorsOnly ? [paths.stderr] : [paths.stdout, paths.stderr];\n  const result = await spawnTail({ files, lines: opts.lines, follow: opts.follow });\n  if (!result.ok) {\n    return { ok: false, message: result.message ?? \"tail exited with non-zero status\" };\n  }\n  return { ok: true, message: \"\" };\n}\n\nexport function registerProdCommands(program: Command): void {\n  const prod = new CommanderCommand(\"prod\").description(\n    \"Manage the launchd-supervised prod streamer\",\n  );\n\n  prod\n    .command(\"start\")\n    .description(\"Restore prod after a user-held suspension\")\n    .option(\"--clear-logs\", \"Clear existing stdout + stderr logs\", false)\n    .action(async (opts) => {\n      if (opts.clearLogs === true) clearSupervisorLogs();\n      const r = await runProdStart();\n      log.info(r.message, undefined, \"console\");\n      if (!r.ok) process.exitCode = 1;\n    });\n\n  prod\n    .command(\"stop\")\n    .description(\"Unload the launchd agent (prod will not auto-restart)\")\n    .action(async () => {\n      const r = await runProdStop();\n      log.info(r.message, undefined, \"console\");\n    });\n\n  prod\n    .command(\"status\")\n    .description(\"Report whether prod is supervised, suspended, or down\")\n    .action(async () => {\n      const s = await runProdStatus();\n      const parts = [\n        `agent: ${s.agentLoaded ? \"loaded\" : \"NOT loaded\"}`,\n        `pid: ${s.agentPid ?? \"(none)\"}`,\n        s.marker\n          ? `marker: ${s.marker.userHeld ? \"userHeld (intentional stop)\" : \"dev-suspended\"}, ` +\n            `devPid=${s.marker.devPid}, port=${s.marker.port}, repo=${s.marker.repoToplevel}`\n          : \"marker: none\",\n      ];\n      log.info(parts.join(\"\\n  \"), undefined, \"console\");\n    });\n\n  prod\n    .command(\"restart\")\n    .description(\"Stop + restart the supervised streamer (re-reads service definition)\")\n    .option(\"--clear-logs\", \"Clear existing stdout + stderr logs\", false)\n    .action(async (opts) => {\n      const sup = getSupervisor();\n      // Resolve the plist path while the service is still loaded — the label\n      // probe can't detect a brew service after bootout.\n      const specPath = process.platform === \"darwin\" ? darwinPlistPath() : \"\";\n      if (opts.clearLogs === true) clearSupervisorLogs();\n      sup.bootoutAgent();\n      sup.bootstrapAgent(specPath);\n      const what =\n        process.platform === \"darwin\"\n          ? `agent restarted from ${specPath}`\n          : `task '${TASK_NAME}' restarted`;\n      log.info(what, undefined, \"console\");\n    });\n\n  prod\n    .command(\"doctor\")\n    .description(\"Detect & repair stale markers, missing agent, plist drift\")\n    .option(\"--fix\", \"Apply repairs (default is dry-run)\", false)\n    .action(async (opts) => {\n      const r = await runProdDoctor({ fix: opts.fix === true });\n      log.info(`findings: ${r.findings.length === 0 ? \"(none)\" : \"\"}`, undefined, \"console\");\n      for (const f of r.findings) log.info(`  - ${f}`, undefined, \"console\");\n      if (r.repairs.length) {\n        log.info(`repairs:`, undefined, \"console\");\n        for (const fix of r.repairs) log.info(`  - ${fix}`, undefined, \"console\");\n      } else if (!opts.fix && r.findings.length > 0) {\n        log.info(`(re-run with --fix to apply repairs)`, undefined, \"console\");\n      }\n    });\n\n  prod\n    .command(\"logs\")\n    .description(\"Tail the supervised streamer's stdout + stderr log files\")\n    .option(\"-n, --lines <count>\", \"Seed with the last N lines (default 50)\", \"50\")\n    .option(\"--no-follow\", \"Print last N lines and exit (do not follow)\")\n    .option(\"--errors-only\", \"Tail only stderr\", false)\n    .option(\"--clear\", \"Truncate stdout + stderr logs in place, then exit\", false)\n    .action(async (opts) => {\n      const lines = Number.parseInt(opts.lines, 10);\n      const r = await runProdLogs({\n        lines: Number.isFinite(lines) && lines > 0 ? lines : 50,\n        follow: opts.follow !== false,\n        errorsOnly: opts.errorsOnly === true,\n        clear: opts.clear === true,\n      });\n      if (r.message) log.info(r.message, undefined, \"console\");\n      if (!r.ok) process.exitCode = 1;\n    });\n\n  program.addCommand(prod);\n}\n","/**\n * POSIX trick: kill(pid, 0) sends no signal but throws ESRCH if no such PID,\n * EPERM if the PID exists but is owned by another user. Either way the\n * process exists; ESRCH alone means dead.\n */\nexport function isPidAlive(pid: number): boolean {\n  if (!Number.isInteger(pid) || pid < 1) return false;\n  try {\n    process.kill(pid, 0);\n    return true;\n  } catch (err) {\n    const code = (err as NodeJS.ErrnoException).code;\n    return code === \"EPERM\"; // exists, just not ours\n  }\n}\n"],"mappings":"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AAAA,gBAAG;AAAA;AAAA,gBAE9B;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAG;AAAA;AAAA,gBAE9B;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAG;AAAA;AAAA,gBAE7C;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAG;AAAA;AAAA,gBAEZ;AAAA,gBAAG;AAAA,gBAAG;AAAA,gBAAI;AAAA,gBAAG;AAAA;AAAA,gBAEb;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAChE;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAChE;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA;AAAA,gBAEZ;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAChE;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAChE;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA;AAAA,gBAEZ;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAChE;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAChE;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA;AAAA,gBAEZ;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAChE;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAChE;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA;AAAA,gBAEZ;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAChE;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAAG;AAAA,gBAAI;AAAA,gBAAI;AAAA,gBAAK;AAAA,gBAAK;AAAA,gBAAI;AAAA,gBAChE;AAAA,gBAAI;AAAA,gBAAG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AK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAC1B,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACtF,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AA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,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAC7C,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,IAAA,GAAS,CAAC,MAAQ,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I;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,QAAAA,KAAI,EAAE,EAAE;AACR,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAIO;AACX,eAAOP,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,QAAAA,KAAI,EAAE,EAAE;AACR,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAIO;AACX,eAAOP,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,QAAAA,KAAI,EAAE,EAAE;AACR,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAIO;AACX,eAAOP,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,QAAAA,KAAI,EAAE,EAAE;AACR,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAIO;AACX,eAAOP,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AACX,eAAOA,KAAI;AA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AAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAI;AACpE,UAAI,0BAA0B;AAAA,QAC5B;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,MACN;AAED,UAAI,6BAA6B,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AACnE,UAAI,4BAA4B,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,EAAE;AAC1D,UAAI,6BAA6B,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAI;AACtE,UAAI,4BAA4B;AAAA,QAC9B;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;A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","names":["exports","module","fs","path","os","crypto","parse","match","error","relative","config","exports","module","exports","module","re","exports","module","exports","module","exports","module","exports","module","j","x","exports","module","exports","module","j","exports","module","exports","module","j","exports","module","exports","module","x","cs","y","j","v","z","s","t","require_main","exports","module","qrcode","row","error","b","match","raw","url","file","exports","exports","path","ci","pt","exports","tn","version","isValid","error","exports","sa","error","exports","k","exports","v","res","exports","res","exports","Node","anchors","exports","Node","exports","match","t","map","node","exports","Node","path","v","k","it","exports","exports","j","i","end","exports","json","qs","literal","ss","t","exports","match","t","exports","ws","cs","exports","exports","merge","map","it","value","exports","log","merge","map","exports","k","v","_","exports","stringify","comment","str","exports","k","it","map","_","exports","map","exports","it","_","exports","seq","exports","string","exports","exports","exports","exports","exports","int","exports","map","_null","string","int","require_schema","exports","map","exports","s","exports","cn","pairs","it","exports","_","map","omap","require_bool","exports","require_float","exports","f","require_int","exports","n","int","exports","_","set","map","exports","res","p","match","date","require_schema","exports","map","_null","string","int","merge","set","exports","map","_null","string","int","merge","set","tags","exports","map","string","b","merge","exports","cs","exports","version","path","v","k","json","res","s","exports","prettifyError","error","ci","exports","exports","st","it","exports","exports","search","b","exports","map","sep","exports","bs","exports","sep","exports","sep","st","map","ce","ee","exports","t","kt","exports","value","end","sep","error","ts","m","exports","re","match","sep","raw","exports","error","kt","tag","ts","cs","exports","st","exports","error","re","exports","re","exports","it","error","exports","he","st","oa","exports","st","sep","exports","path","ci","exports","exports","dt","cs","sp","s","i","ch","exports","exports","it","st","error","sep","map","start","fs","exports","log","lineCounter","parse","exports","initializer","_","k","_a","_","v","k","array","set","object","path","b","Class","x","_a","config","t","base64","base64url","hex","F","error","issue","path","_a","b","time","timeRegex","version","_a","inst","result","x","F","base64","k","t","r","b","f","_a","checks","_","checkResult","canary","result","v","url","isDate","isObject","allowsEval","patterns","p","results","map","left","right","rr","keyResult","valueResult","output","x","F","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","t","issue","v","be","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","number","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","error","issue","_a","meta","p","f","Class","_emoji","_undefined","_null","types","v","issue","codec","process","_a","meta","id","schema","io","registry","ctx","_","process","json","patterns","v","file","m","x","b","process","_","core_exports","_emoji","_null","_undefined","process","init_core","checks_exports","init_checks","init_core","date","datetime","duration","time","init_core","init_schemas","initializer","init_errors","init_core","issue","issues","parse","parseAsync","safeParse","safeParseAsync","encode","decode","encodeAsync","decodeAsync","safeEncode","safeDecode","safeEncodeAsync","safeDecodeAsync","init_parse","init_core","init_errors","schemas_exports","_default","base64","base64url","bigint","boolean","_catch","cidrv4","cidrv6","cuid","cuid2","date","describe","e164","email","emoji","_enum","guid","hex","hostname","ipv4","ipv6","ksuid","mac","meta","nanoid","_null","nullish","number","string","ulid","_undefined","uuid","_void","xid","v","_emoji","k","codec","init_schemas","init_core","init_checks","init_parse","parse","safeParse","parseAsync","safeParseAsync","encode","decode","encodeAsync","decodeAsync","safeEncode","safeDecode","safeEncodeAsync","safeDecodeAsync","def","check","json","datetime","time","duration","types","issue","output","map","init_core","ZodFirstPartyTypeKind","path","zodSchema","v","t","objectSchema","s","version","init_checks","init_schemas","schemas_exports","checks_exports","bigint","boolean","date","number","string","init_core","init_schemas","_default","base64","base64url","bigint","boolean","_catch","cidrv4","cidrv6","core_exports","cuid","cuid2","date","decode","decodeAsync","describe","e164","email","emoji","encode","encodeAsync","_enum","guid","hex","hostname","ipv4","ipv6","ksuid","mac","meta","nanoid","_null","nullish","number","parse","parseAsync","safeDecode","safeDecodeAsync","safeEncode","safeEncodeAsync","safeParse","safeParseAsync","string","ulid","_undefined","uuid","_void","xid","init_core","init_schemas","init_checks","init_errors","init_parse","import_node_os","import_node_path","exports","module","exports","module","exports","module","err","exports","module","err","exports","module","path","exports","module","exports","module","exports","module","_","exports","module","path","cloned","exports","module","exports","module","ns","k","path","exports","module","date","exports","module","f","ss","exports","module","ms","exports","module","fs","EventEmitter","path","assert","file","mkdir","err","n","releasedBufObj","error","exports","module","registry","exports","module","exports","module","check","exports","module","exports","module","version","EventEmitter","Worker","join","assert","FinalizationRegistry","WeakRef","registry","error","exports","module","existsSync","join","isAbsolute","sep","fileURLToPath","path","onExit","pipeline","t","fixTarget","exports","module","v","asString","time","stringify","defaultOptions","_","log","exports","module","exports","module","k","exports","module","exports","module","EventEmitter","version","bindings","k","ks","bi","log","t","s","exports","module","array","number","value","bigint","join","tmp","key","res","stringify","exports","module","emit","clone","streamLevels","s","b","exports","module","os","time","version","hostname","defaultOptions","number","normalize","pino","serializers","m","f","pino","require_constants","exports","module","exports","module","exports","module","exports","module","PerMessageDeflate","data","exports","module","exports","module","PerMessageDeflate","Receiver","error","exports","module","PerMessageDeflate","Sender","merge","_","exports","module","Event","CloseEvent","ErrorEvent","MessageEvent","error","exports","module","parse","extension","k","v","exports","module","EventEmitter","randomBytes","createHash","Readable","URL","PerMessageDeflate","Receiver","Sender","addEventListener","parse","WebSocket","key","exports","module","WebSocket","createWebSocketStream","ws","error","err","open","exports","module","parse","protocol","exports","module","EventEmitter","createHash","extension","PerMessageDeflate","subprotocol","WebSocket","WebSocketServer","version","ws","map","exports","encode","decode","TextDecoder","TextEncoder","s","exports","assertNever","record","error","x","exports","exports","k","v","x","encode","decode","exports","v","k","isObject","exports","exports","_a","exports","exports","_a","exports","exports","exports","exports","exports","exports","exports","service","exports","exports","exports","exports","exports","exports","exports","module","global","p","log2","or","xor","b","le","hi","lo","_default","exports","_a","error","require_dist","exports","module","s","m","w","y","ms","parse","error","match","exports","ts","date","exports","exports","map","k","v","p","json","exports","x","base","exports","exports","exports","time","ts","exports","SdkComponent","exports","logger","exports","exports","exports","_","exports","version","_a","v","exports","exports","exports","_a","exports","exports","_a","exports","s","error","Status","exports","LogVerbosity","Propagate","require_package","exports","module","exports","_a","getLogger","logger","log","exports","error","v","error","exports","resolve","exports","exports","fs","exports","path","splitPath","exports","exports","_a","resolve","error","exports","_a","_e","config","exports","os","_a","config","hostname","record","ConnectivityState","exports","PickResultType","exports","_a","exports","_a","exports","config","x","_a","error","exports","exports","exports","__extends","d","b","TypeError","String","extendStatics","__","this","constructor","prototype","Object","create","__generator","thisArg","body","_","label","sent","t","trys","ops","f","y","g","next","verb","throw","return","Symbol","iterator","n","v","step","op","call","done","value","pop","length","push","e","throwIteratorAccessError","RangeError","TreeNode","TreeNodeEnableIndex","ContainerIterator","Base","Container","TreeContainer","TreeIterator","OrderedMapIterator","OrderedMap","setPrototypeOf","__proto__","Array","p","hasOwnProperty","key","color","_left","undefined","_right","_parent","_key","_value","_color","_pre","preNode","isRootOrHeader","pre","_next","nextNode","_rotateLeft","PP","V","R","_rotateRight","F","K","_super","_this","apply","arguments","_subTreeSize","parent","_recount","iteratorType","equals","iter","_node","_length","defineProperty","get","enumerable","configurable","size","empty","cmp","enableIndex","x","_root","_cmp","_TreeNodeClass","_header","_lowerBound","curNode","resNode","cmpResult","_upperBound","_reverseLowerBound","_reverseUpperBound","_eraseNodeSelfBalance","parentNode","brother","_eraseNode","clear","swapNode","_inOrderTraversal","param","pos","callback","nodeList","index","stack","_insertNodeSelfBalance","grandParent","uncle","GP","_set","hint","minNode","compareToMin","maxNode","compareToMax","iterNode","iterCmpRes","preCmpRes","parent_1","_getTreeNodeByKey","updateKeyByIterator","node","nextKey","preKey","eraseElementByPos","eraseElementByKey","eraseElementByIterator","hasNoRight","isNormal","getHeight","traversal","Math","max","header","root","isAccessible","container","self","Proxy","target","prop","set","newValue","copy","forEach","el","setElement","begin","end","rBegin","rEnd","front","back","lowerBound","upperBound","reverseLowerBound","reverseUpperBound","map","getElementByPos","find","getElementByKey","union","other","i","_a","exports","exports","error","_a","_size","exports","error","_a","metadata","exports","_a","metadata","_e","_b","_c","path","getCall","error","_a","Client","metadata","exports","exports","partial","path","exports","module","array","string","object","Symbol","exports","module","resolve","params","offset","exports","base64","string","p","encode","i","j","t","b","decode","exports","module","EventEmitter","emit","require_float","exports","module","le","lo","hi","exports","string","t","t2","exports","module","pool","size","exports","module","lo","hi","hash","exports","isObject","Buffer","hash","merge","i","exports","module","base64","create","lo","hi","exports","module","exports","module","create_array","create","buffer","exports","module","require_service","exports","module","self","err","exports","exports","module","exports","exports","module","exports","module","fs","exports","module","fetch","fs","exports","path","isAbsolute","normalize","resolve","exports","patterns","require_fs","exports","module","fs","exports","module","json","array","ns","object","define","path","exports","module","types","json","resolve","exports","module","json","resolve","require_service","exports","module","json","object","method","exports","module","encode","decode","object","exports","module","types","field","exports","module","j","exports","exports","object","exports","module","json","object","types","exports","module","parse","json","self","filename","process","resolved","i","fetch","source","object","j","exports","module","object","array","b","path","dst","value","require_types","exports","types","s","exports","module","types","json","extend","resolve","exports","module","json","self","exports","module","path","resolve","defaults","opt","exports","module","json","exports","module","types","exports","module","exports","module","unescape","re","match","optional","exports","module","parse","types","tn","token","extend","value","require_common","exports","module","json","file","exports","module","exports","module","exports","module","require_descriptor","exports","module","patterns","j","ks","set","ns","file","match","to","k","exports","module","exports","module","require_type","exports","module","fs","path","exports","exports","IdempotencyLevel","json","exports","date","_a","_e","exports","CompressionAlgorithms","exports","exports","resolve","error","_a","exports","exports","exports","exports","splitPath","hostname","_a","error","metadata","exports","_a","error","exports","exports","_a","exports","_a","hostname","exports","hostname","_a","resolve","ReadState","exports","os","_a","error","exports","error","_a","duration","success","resolve","errorHandler","_e","_b","exports","exports","_a","global","splitPath","hostname","_a","error","code","details","exports","_a","config","exports","exports","_a","error","exports","exports","_a","_e","error","exports","exports","error","_a","path","exports","_a","exports","duration","match","exports","_a","error","exports","_a","match","resolve","error","custom","_e","success","resolve","error","port","path","_b","_c","duration","_a","exports","exports","exports","j","_a","fs","config","exports","exports","exports","path","exports","path","_a","exports","exports","_a","b","b","j","exports","exports","b","_a","exports","logger","exports","decode","encode","k","v","map","error","exports","exports","path","isValid","module","error","exports","hostname","match","scheme","port","exports","match","exports","exports","exports","exports","next","status","require_package","exports","module","exports","exports","module","require_longbits","exports","module","lo","hi","hash","require_minimal","exports","isObject","Buffer","hash","merge","i","require_writer","exports","module","base64","create","require_writer_buffer","exports","module","require_reader","exports","module","create_array","create","buffer","require_reader_buffer","exports","module","require_service","exports","module","self","err","require_rpc","exports","require_roots","exports","module","require_index_minimal","exports","require_patterns","exports","patterns","require_namespace","exports","module","json","array","ns","object","define","path","require_mapfield","exports","module","types","json","resolve","require_method","exports","module","json","resolve","require_service","exports","module","json","object","require_message","exports","module","encode","decode","object","require_decoder","exports","module","types","field","require_verifier","exports","module","j","require_converter","exports","require_wrappers","exports","object","require_type","exports","module","json","object","types","require_root","exports","module","parse","json","self","filename","process","resolved","i","fetch","source","object","j","require_util","exports","module","object","array","b","path","dst","value","require_types","exports","types","s","require_field","exports","module","types","json","extend","resolve","require_oneof","exports","module","json","self","require_object","exports","module","path","resolve","defaults","opt","require_enum","exports","module","json","require_encoder","exports","module","types","require_index_light","exports","module","exports","module","exports","exports","module","require_root","exports","module","exports","module","exports","_a","_e","exports","Connection","k","v","resolve","exports","exports","payload","_","v","k","exports","raw","err","exports","exports","g","v","exports","exports","exports","exports","exports","uuid","require_parse","exports","parse","uuid","v","require_stringify","exports","uuid","exports","exports","exports","uuid","exports","exports","version","hash","exports","exports","exports","exports","exports","exports","exports","uuid","exports","exports","version","uuid","exports","exports","_a","_e","options","describe","raw","exports","exports","_a","exports","x","x","raw","exports","exports","exports","x","f","exports","exports","exports","resolve","exports","links","raw","exports","set","exports","_a","x","Client","exports","exports","exports","exports","error","require_fs","exports","require_path","exports","os","path","exports","module","match","exports","module","open","check","exports","module","exports","node","require_stringify","exports","module","exports","module","exports","module","cacheKey","b","max","intersection","string","integer","exports","module","isObject","transform","b","v","exports","module","exports","module","p","q","require_constants","exports","module","require_parse","exports","module","parse","open","index","exports","module","parse","require_constants","exports","module","path","require_utils","exports","path","match","exports","module","require_parse","exports","module","v","j","b","match","branch","parse","opts","value","literal","open","m","esc","rest","t","source","exports","module","path","parse","isObject","state","match","patterns","p","require_picomatch","exports","module","exports","module","v","patterns","omit","match","p","exports","path","DOUBLE_SLASH_RE","patterns","basename","b","pattern","relative","isAbsolute","exports","module","pipe","require_stream","exports","merge","error","require_string","exports","require_utils","exports","array","fs","path","string","exports","patterns","exports","path","lstat","stat","error","exports","path","lstat","stat","error","require_fs","exports","fs","exports","fs","exports","stat","path","statSync","exports","module","promise","exports","module","queueMicrotask","require_constants","exports","require_fs","exports","require_utils","exports","fs","require_common","exports","b","require_async","exports","readdir","path","error","require_sync","exports","readdir","error","require_fs","exports","fs","require_settings","exports","path","fs","require_out","exports","path","exports","module","exports","module","errorHandler","self","error","context","p","resolve","require_common","exports","error","b","require_reader","exports","require_async","exports","error","require_async","exports","error","require_stream","exports","error","require_sync","exports","error","require_sync","exports","require_settings","exports","path","require_out","exports","require_reader","exports","path","error","require_stream","exports","patterns","error","resolve","require_async","exports","resolve","error","patterns","exports","exports","patterns","match","exports","patterns","exports","patterns","require_error","exports","error","require_entry","exports","exports","path","require_async","exports","require_stream","exports","error","require_sync","exports","patterns","error","require_sync","exports","require_settings","exports","fs","os","require_out","exports","module","FastGlob","patterns","posix","escapePath","convertPathToPattern","win32","exports","transform","exports","module","array","transform","exports","module","parseDate","ms","date","exports","module","extend","exports","module","extend","raw","parse","exports","module","k","exports","module","array","parseDate","string","p","exports","module","t","exports","module","bits","parseDate","value","elementType","parse","array","i","exports","module","exports","exports","module","require_utils","exports","module","defaults","isDate","date","config","escapeIdentifier","escapeLiteral","require_utils","exports","module","randomBytes","string","hash","b","exports","module","exports","module","crypto","_","error","b","exports","module","types","TypeOverrides","exports","module","parse","config","hostname","fs","v","exports","module","defaults","parse","config","exports","module","types","Result","match","v","exports","module","EventEmitter","Result","Query","config","exports","DatabaseError","string","exports","password","parse","query","types","config","string","describe","exports","exports","exports","exports","parse","resolve","exports","require_stream","exports","module","getStream","getSecureStream","require_connection","exports","module","EventEmitter","parse","Connection","config","self","error","stream","exports","module","transform","error","self","exports","module","path","file","x","require_lib","exports","module","path","fs","file","stat","st","require_client","exports","module","EventEmitter","TypeOverrides","Query","defaults","Connection","crypto","Client","config","self","error","resolve","exports","module","EventEmitter","promisify","Promise","resolve","pool","Pool","Client","f","client","response","err","require_query","exports","module","EventEmitter","config","resolve","self","require_client","exports","module","TypeOverrides","EventEmitter","Client","config","self","err","resolve","error","require_native","exports","module","require_lib","exports","module","Client","defaults","Connection","Result","Pool","TypeOverrides","DatabaseError","escapeIdentifier","escapeLiteral","clientConstructor","esm_exports","esm_default","init_esm","pg","i","s","r","CircularList","Disposable","_maxLength","super","onDeleteEmitter","this","_register","Emitter","onDelete","event","onInsertEmitter","onInsert","onTrimEmitter","onTrim","_array","Array","_startIndex","_length","maxLength","newMaxLength","newArray","Math","min","length","_getCyclicIndex","newLength","index","value","fire","recycle","Error","isFull","pop","start","deleteCount","items","amount","countToTrim","count","offset","set","get","expandListBy","t","n","e","clone","val","depth","clonedObject","isArray","key","u","f","_","p","g","v","hasWriteSyncWarnHappened","CoreTerminal","onScroll","_onScrollApi","_onScroll","ev","position","cols","_bufferService","rows","buffers","options","optionsService","_windowsWrappingHeuristics","MutableDisposable","_onBinary","onBinary","_onData","onData","_onLineFeed","onLineFeed","_onResize","onResize","_onWriteParsed","onWriteParsed","_instantiationService","InstantiationService","OptionsService","setService","IOptionsService","createInstance","BufferService","IBufferService","_logService","LogService","ILogService","coreService","CoreService","ICoreService","coreMouseService","CoreMouseService","ICoreMouseService","unicodeService","UnicodeService","IUnicodeService","_charsetService","CharsetService","ICharsetService","_oscLinkService","OscLinkService","IOscLinkService","_inputHandler","InputHandler","Event","forward","onRequestScrollToBottom","scrollToBottom","onUserInput","_writeBuffer","handleUserInput","onMultipleOptionChange","_handleWindowsPtyOptionChange","buffer","ydisp","markRangeDirty","scrollTop","scrollBottom","WriteBuffer","data","promiseResult","parse","callback","write","maxSubsequentCalls","logLevel","LogLevelEnum","WARN","warn","writeSync","wasUserInput","triggerDataEvent","x","y","isNaN","max","MINIMUM_COLS","MINIMUM_ROWS","resize","eraseAttr","isWrapped","scroll","disp","suppressScrollEvent","scrollLines","pageCount","scrollToTop","disableSmoothScroll","ybase","line","scrollAmount","id","registerEscHandler","registerDcsHandler","registerCsiHandler","ident","registerOscHandler","_setup","reset","windowsPty","rawOptions","buildNumber","backend","windowsMode","_enableWindowsWrappingHeuristics","clear","disposables","push","updateWindowsModeWrappedState","bind","final","toDisposable","d","dispose","b","o","a","k","m","GLEVEL","MAX_PARSEBUFFER_LENGTH","paramToWindowOption","opts","setWinLines","restoreWin","minimizeWin","setWinPosition","setWinSizePixels","raiseWin","lowerWin","refreshWin","setWinSizeChars","maximizeWin","fullscreenWin","getWinState","getWinPosition","getWinSizePixels","getScreenSizePixels","getCellSizePixels","getWinSizeChars","getScreenSizeChars","getIconTitle","getWinTitle","pushTitle","popTitle","WindowsOptionsReportType","$temp","getAttrData","_curAttrData","_coreService","_optionsService","_coreMouseService","_unicodeService","_parser","EscapeSequenceParser","_parseBuffer","Uint32Array","_stringDecoder","StringToUtf32","_utf8Decoder","Utf8ToUtf32","_windowTitle","_iconName","_windowTitleStack","_iconNameStack","DEFAULT_ATTR_DATA","_eraseAttrDataInternal","_onRequestBell","onRequestBell","_onRequestRefreshRows","onRequestRefreshRows","_onRequestReset","onRequestReset","_onRequestSendFocus","onRequestSendFocus","_onRequestSyncScrollBar","onRequestSyncScrollBar","_onRequestWindowsOptionsReport","onRequestWindowsOptionsReport","_onA11yChar","onA11yChar","_onA11yTab","onA11yTab","_onCursorMove","onCursorMove","_onTitleChange","onTitleChange","_onColor","onColor","_parseStack","paused","cursorStartX","cursorStartY","decodedLength","_specialColors","_dirtyRowTracker","DirtyRowTracker","_activeBuffer","onBufferActivate","activeBuffer","setCsiHandlerFallback","params","debug","identifier","identToString","toArray","setEscHandlerFallback","setExecuteHandlerFallback","code","setOscHandlerFallback","action","setDcsHandlerFallback","payload","setPrintHandler","end","print","insertChars","intermediates","scrollLeft","cursorUp","scrollRight","cursorDown","cursorForward","cursorBackward","cursorNextLine","cursorPrecedingLine","cursorCharAbsolute","cursorPosition","cursorForwardTab","eraseInDisplay","prefix","eraseInLine","insertLines","deleteLines","deleteChars","scrollUp","scrollDown","eraseChars","cursorBackwardTab","charPosAbsolute","hPositionRelative","repeatPrecedingCharacter","sendDeviceAttributesPrimary","sendDeviceAttributesSecondary","linePosAbsolute","vPositionRelative","hVPosition","tabClear","setMode","setModePrivate","resetMode","resetModePrivate","charAttributes","deviceStatus","deviceStatusPrivate","softReset","setCursorStyle","setScrollRegion","saveCursor","windowOptions","restoreCursor","insertColumns","deleteColumns","selectProtected","requestMode","setExecuteHandler","C0","BEL","bell","LF","lineFeed","VT","FF","CR","carriageReturn","BS","backspace","HT","tab","SO","shiftOut","SI","shiftIn","C1","IND","NEL","nextLine","HTS","tabSet","OscHandler","setTitle","setIconName","setOrReportIndexedColor","setHyperlink","setOrReportFgColor","setOrReportBgColor","setOrReportCursorColor","restoreIndexedColor","restoreFgColor","restoreBgColor","restoreCursorColor","reverseIndex","keypadApplicationMode","keypadNumericMode","fullReset","setgLevel","selectDefaultCharset","flag","CHARSETS","selectCharset","screenAlignmentPattern","setErrorHandler","state","error","DcsHandler","requestStatusString","Promise","race","res","rej","setTimeout","catch","err","console","_getCurrentLinkId","extended","urlId","result","wasPaused","_logSlowResolvingAsync","DEBUG","prototype","map","call","String","fromCharCode","join","TRACE","trace","split","charCodeAt","clearRange","len","decode","substring","subarray","_preserveStack","viewportEnd","viewportStart","chWidth","charset","screenReaderMode","wraparoundMode","decPrivateModes","wraparound","insertMode","modes","curAttr","bufferRow","lines","markDirty","getWidth","setCellFromCodepoint","precedingJoinState","pos","ch","currentInfo","charProperties","extractWidth","shouldJoin","extractShouldJoin","oldWidth","stringFromCodePoint","addLineToLink","oldRow","oldCol","_eraseAttrData","BufferLine","copyCellsFrom","addCodepointToCell","delta","insertCells","getNullCell","NULL_CELL_CODE","NULL_CELL_WIDTH","hasContent","convertEol","reverseWraparound","_restrictCursor","hasWidth","originalX","nextStop","maxCol","origin","_setCursor","diffToTop","_moveCursor","diffToBottom","param","tabs","prevStop","bg","clearWrap","respectProtect","replaceCells","fill","clearMarkers","j","_eraseInBufferLine","_resetBufferLine","scrollOnEraseInDisplay","currentLine","getTrimmedLength","scrollBackSize","trimStart","row","scrollBottomRowsOffset","scrollBottomAbsolute","splice","getBlankLine","deleteCells","joinState","text","getString","idata","itext","codePointAt","tlength","copyWithin","_is","ESC","term","termName","indexOf","applicationCursorKeys","setgCharset","DEFAULT_CHARSET","cursorBlink","applicationKeypad","activeProtocol","sendFocus","activeEncoding","isCursorHidden","activateAltBuffer","isCursorInitialized","undefined","bracketedPasteMode","synchronizedOutput","activateNormalBuffer","ansi","dm","mouseProtocol","mouseEncoding","cs","active","alt","b2v","color","mode","c1","c2","c3","AttributeData","fromColorRGB","attr","accu","cSpace","advance","hasSubParams","subparams","getSubParams","fg","_updateAttrColor","underlineColor","style","underlineStyle","updateExtended","_processSGR0","l","_processUnderline","_extractColor","savedX","savedY","savedCurAttrData","savedCharset","cursorStyle","isBlinking","top","bottom","second","GET_WIN_SIZE_PIXELS","GET_CELL_SIZE_PIXELS","shift","_savedCharset","slots","idx","spec","exec","parseInt","isValidColorIndex","type","parseColor","slice","trim","uri","_createHyperlink","_finishHyperlink","parsedParams","idParamIndex","findIndex","startsWith","registerLink","_setOrReportSpecialColor","collectAndFlag","scrollRegionHeight","shiftElements","level","cell","CellData","content","yOffset","markAllDirty","isProtected","y1","y2","A","isSafari","majorVersion","userAgent","match","isNode","process","navigator","platform","isFirefox","includes","isLegacyEdge","test","isMac","isIpad","isIphone","isWindows","isLinux","isChromeOS","TaskQueue","_tasks","_i","task","_start","flush","_idleCallback","_cancelCallback","_requestCallback","_process","deadline","taskDuration","longestTask","lastDeadlineRemaining","timeRemaining","deadlineRemaining","performance","now","abs","round","PriorityTaskQueue","_createDeadline","clearTimeout","duration","IdleTaskQueue","window","requestIdleCallback","cancelIdleCallback","constructor","_queue","enqueue","bufferService","lastChar","CHAR_DATA_CODE_INDEX","WHITESPACE_CELL_CODE","ExtendedAttrs","newObj","isInverse","isBold","isUnderline","hasExtendedAttrs","isBlink","isInvisible","isItalic","isDim","isStrikethrough","isOverline","getFgColorMode","getBgColorMode","isFgRGB","isBgRGB","isFgPalette","isBgPalette","isFgDefault","isBgDefault","isAttributeDefault","getFgColor","getBgColor","isEmpty","getUnderlineColor","getUnderlineColorMode","isUnderlineColorRGB","isUnderlineColorPalette","isUnderlineColorDefault","getUnderlineStyle","getUnderlineVariantOffset","underlineVariantOffset","ext","_urlId","_ext","MAX_BUFFER_SIZE","_hasScrollback","markers","_nullCell","fromCharData","NULL_CELL_CHAR","_whitespaceCell","WHITESPACE_CELL_CHAR","WHITESPACE_CELL_WIDTH","_isClearing","_memoryCleanupQueue","_memoryCleanupPosition","_cols","_rows","_getCorrectBufferLength","setupTabStops","hasScrollback","isCursorInViewport","relativeY","correctBufferLength","scrollback","fillAttr","newCols","newRows","nullCell","dirtyMemoryLines","addToY","amountToTrim","_isReflowEnabled","_reflow","_batchedMemoryCleanup","normalRun","counted","cleanupMemory","_reflowLarger","_reflowSmaller","reflowCursorLine","toRemove","reflowLargerGetLinesToRemove","newLayoutResult","reflowLargerCreateNewLayout","reflowLargerApplyNewLayout","layout","_reflowLargerAdjustViewport","countRemoved","viewportAdjustments","toInsert","countToInsert","wrappedLines","unshift","absoluteY","lastLineLength","destLineLengths","reflowSmallerGetNewLineLengths","linesToAdd","trimmedLines","newLines","newLine","destLineIndex","destCol","srcLineIndex","srcCol","cellsToCopy","wrappedLinesIndex","getWrappedLineTrimmedLength","setCell","insertEvents","originalLines","originalLinesLength","originalLineIndex","nextToInsertIndex","nextToInsert","countInsertedSoFar","nextI","insertCountEmitted","lineIndex","trimRight","startCol","endCol","translateToString","first","last","tabStopWidth","clearAllMarkers","marker","Marker","register","onDispose","_removeMarker","Object","freeze","$startIndex","fillCellData","_combined","_extendedAttrs","_data","cp","CHAR_DATA_ATTR_INDEX","CHAR_DATA_CHAR_INDEX","CHAR_DATA_WIDTH_INDEX","combinedData","codePoint","width","attrs","loadCell","byteLength","uint32Cells","keys","extKeys","el","getNoBgTrimmedLength","src","applyInReverse","srcData","srcCombinedKeys","outColumns","chars","endsInNull","followingLineStartsWithWide","oldCols","bufferAbsoluteY","srcTrimmedTineLength","srcRemainingCells","destRemainingCells","countToRemove","nextToRemoveIndex","nextToRemoveStart","countRemovedSoFar","newLayout","newLayoutLines","newLineLengths","cellsNeeded","reduce","c","srcLine","cellsAvailable","oldTrimmedLength","endsWithWide","lineLength","BufferSet","_onBufferActivate","onSpecificOptionChange","_normal","Buffer","fillViewportRows","_alt","inactiveBuffer","normal","obj","setFromCharData","isCombined","getChars","getCode","combined","getAsCharData","DEFAULT_COLOR","DEFAULT_ATTR","DEFAULT_EXT","_id","isDisposed","_disposables","_nextId","_onDispose","disposable","C","C1_ESCAPED","NUL","SOH","STX","ETX","EOT","ENQ","ACK","DLE","DC1","DC2","DC3","DC4","NAK","SYN","ETB","CAN","EM","SUB","FS","GS","RS","US","SP","DEL","PAD","HOP","BPH","NBH","SSA","ESA","HTJ","VTS","PLD","PLU","RI","SS2","SS3","DCS","PU1","PU2","STS","CCH","MW","SPA","EPA","SOS","SGCI","SCI","CSI","ST","OSC","PM","APC","codepoint","_interim","input","target","size","startPos","interim","Uint8Array","byte1","byte2","byte3","byte4","discardInterim","tmp","missing","fourStop","BMP_COMBINING","HIGH_COMBINING","table","version","num","ucs","mid","preceding","wcwidth","createPropertyValue","_action","_callbacks","_pendingData","_bufferOffset","_isSyncWriting","_syncCalls","_didUserInput","chunk","cb","_innerWrite","lastTime","startTime","continuation","queueMicrotask","resolve","then","low","toLowerCase","RGB_REX","base","HASH_REX","adv","bits","pad","toString","s2","PAYLOAD_LIMIT","EMPTY_HANDLERS","_handlers","create","_active","_ident","_handlerFb","_stack","loopPosition","fallThrough","handler","handlerList","handlerIndex","unhook","hook","put","utf32ToString","success","handlerResult","EMPTY_PARAMS","Params","addParam","_handler","_params","_hitLimit","ret","TransitionTable","next","codes","NON_ASCII_PRINTABLE","VT500_TRANSITION_TABLE","blueprint","apply","unused","PRINTABLES","EXECUTABLES","states","setDefault","addMany","add","_transitions","handlers","handlerPos","transition","chunkPos","initialState","currentState","_collect","_printHandlerFb","_executeHandlerFb","_csiHandlerFb","_escHandlerFb","_errorHandlerFb","_printHandler","_executeHandlers","_csiHandlers","_escHandlers","_oscParser","OscParser","_dcsParser","DcsParser","_errorHandler","finalRange","intermediate","finalCode","reverse","clearPrintHandler","_identifier","registerHandler","clearHandler","setHandlerFallback","clearErrorHandler","collect","abort","addSubParam","addDigit","handlersEsc","jj","_state","_put","MAX_VALUE","values","maxSubParamsLength","Int32Array","_subParams","_subParamsLength","_subParamsIdx","Uint16Array","_rejectDigits","_rejectSubDigits","_digitIsSub","newParams","getSubParamsAll","store","cur","_addons","instance","terminal","loadedAddon","_wrappedAddonDispose","activate","_buffer","cursorY","cursorX","viewportY","baseY","BufferLineApiView","_line","startColumn","endColumn","BufferNamespaceApi","_core","_onBufferChange","onBufferChange","BufferApiView","_alternate","alternate","init","provider","versions","activeVersion","isUserScrolling","colsChanged","rowsChanged","_cachedBlankLine","getFg","getBg","topRow","bottomRow","willBufferBeTrimmed","copyFrom","oldYdisp","glevel","_charsets","DEFAULT_PROTOCOLS","NONE","events","restrict","X10","button","ctrl","VT200","DRAG","ANY","eventCode","isSGR","S","DEFAULT_ENCODINGS","DEFAULT","col","SGR","SGR_PIXELS","_protocols","_encodings","_activeProtocol","_activeEncoding","_lastEvent","_wheelPartialScroll","_onProtocolChange","onProtocolChange","name","addProtocol","addEncoding","protocol","encoding","areMouseEventsActive","cellHeight","dpr","deltaY","shiftKey","targetWheelEventPixels","_applyScrollModifier","deltaMode","WheelEvent","DOM_DELTA_PIXEL","floor","DOM_DELTA_PAGE","altKey","ctrlKey","fastScrollSensitivity","scrollSensitivity","_equalEvents","report","triggerBinaryEvent","down","up","drag","move","wheel","e1","e2","pixels","DEFAULT_MODES","DEFAULT_DEC_PRIVATE_MODES","_onUserInput","_onRequestScrollToBottom","disableStdin","scrollOnUserInput","ServiceCollection","entries","_entries","Map","service","has","_services","IInstantiationService","ctor","args","serviceDependencies","getServiceDependencies","sort","serviceArgs","dependency","firstServiceArgPos","logger","traceLogger","_target","descriptor","fn","JSON","stringify","optionsKeyToLogLevel","info","INFO","ERROR","off","OFF","_logLevel","_updateLogLevel","optionalParams","message","_evalLazyOptionalParams","_log","log","DEFAULT_OPTIONS","cursorWidth","cursorInactiveStyle","customGlyphs","drawBoldTextInBrightColors","documentOverride","fastScrollModifier","fontFamily","fontSize","fontWeight","fontWeightBold","ignoreBracketedPasteMode","lineHeight","letterSpacing","linkHandler","smoothScrollDuration","macOptionIsMeta","macOptionClickForcesSelection","minimumContrastRatio","allowProposedApi","allowTransparency","theme","rescaleOverlappingGlyphs","rightClickSelectsWord","wordSeparator","altClickMovesCursor","cancelEvents","overviewRuler","FONT_WEIGHT_OPTIONS","_onOptionChange","onOptionChange","defaultOptions","newValue","_sanitizeAndValidateOption","_setupOptions","listener","eventKey","getter","propName","setter","desc","defineProperty","_entriesWithId","_dataByLinkId","addMarker","entry","_removeMarkerFromLink","castData","_getEntryIdKey","linkId","every","linkData","delete","DI_DEPENDENCIES","serviceRegistry","decorator","arguments","DI_TARGET","createDecorator","IDecorationService","_providers","_onChange","onChange","defaultProvider","UnicodeV6","_activeProvider","precedingInfo","Terminal","_onBell","onBell","_onA11yCharEmitter","_onA11yTabEmitter","cursorYOffset","exports","Permutation","CallbackIterable","ArrayQueue","booleanComparator","numberComparator","CompareResult","tail","array","tail2","arr","equals","one","other","itemEquals","removeFastWithoutKeepingOrder","binarySearch","comparator","binarySearch2","quickSelect","nth","compare","TypeError","pivotValue","random","lower","higher","pivots","groupBy","currentGroup","element","groupAdjacentBy","shouldBeGrouped","item","forEachAdjacent","forEachWithNeighbors","sortedDiff","before","after","splices","removed","added","topStep","topAsync","batch","token","reject","isCancellationRequested","errors_1","CancellationError","coalesce","filter","coalesceInPlace","to","from","isFalsyOrEmpty","isNonEmptyArray","distinct","keyFn","seen","Set","uniqueFilter","firstOrDefault","notFoundValue","lastOrDefault","commonPrefixLength","range","arg","indexer","mapper","insert","remove","arrayInsert","insertIndex","insertArr","concat","shuffle","_seed","rand","seed","sin","temp","pushToStart","pushToEnd","pushMany","mapArrayOrNot","asArray","getRandomElement","insertInto","newItems","getActualStartIndex","compareBy","selector","tieBreakComparators","comparators","item1","item2","isNeitherLessOrGreaterThan","neitherLessOrGreaterThan","reverseOrder","arraysFind_1","compareToKey","high","comp","pushSplice","latest","beforeIdx","afterIdx","beforeElement","afterElement","findFirstIdxMonotonousOrArrLen","startIdx","originalLength","newItemsLength","isLessThan","isLessThanOrEqual","isGreaterThan","greaterThan","lessThan","firstIdx","lastIdx","predicate","endIdx","peek","peekLast","dequeue","removeLast","empty","_callback","iterate","mapFn","_indexMap","compareFn","sortIndices","index1","index2","inverse","inverseIndexMap","findLastIdx","fromIndex","findLastIdxMonotonous","endIdxEx","MonotonousArray","findLast","findLastMonotonous","findFirstMonotonous","findFirstIdxMonotonous","findFirstMax","findLastMax","findFirstMin","findMaxIdx","maxIdx","mapFindFirst","mapped","assertInvariants","_findLastMonotonousLastIdx","_prevFindLastPredicate","_a","SetWithKey","groupFn","diffSets","diffMaps","intersection","setA","setB","elem","Symbol","toStringTag","toKey","_map","callbackfn","thisArg","forEach","iterator","BugIndicatingError","ErrorNoTelemetry","ExpectedError","NotSupportedError","NotImplementedError","ReadonlyError","errorHandler","ErrorHandler","setUnexpectedErrorHandler","newUnexpectedErrorHandler","isSigPipeError","cast","syscall","toUpperCase","onUnexpectedError","isCancellationError","onUnexpectedExternalError","transformErrorForSerialization","$isError","stack","stacktrace","noTelemetry","isErrorNoTelemetry","transformErrorFromSerialization","canceled","canceledName","illegalArgument","illegalState","getErrorMessage","listeners","unexpectedErrorHandler","_removeListener","getUnexpectedErrorHandler","emit","isExpected","msg","setPrototypeOf","ValueWithChangeEvent","Relay","EventBufferer","DynamicListEventMultiplexer","EventMultiplexer","MicrotaskEmitter","DebounceEmitter","PauseableEmitter","AsyncEmitter","createEventDeliveryQueue","ListenerRefusalError","ListenerLeakError","EventProfiling","setGlobalLeakWarningThreshold","oldValue","_globalLeakWarningThreshold","functional_1","lifecycle_1","linkedList_1","stopwatch_1","once","thisArgs","didFire","snapshot","emitter","onWillAddFirstListener","onDidRemoveLastListener","debounce","merge","delay","leading","flushOnListenerRemove","leakWarningThreshold","subscription","output","handle","doFire","numDebouncedCalls","_output","onWillRemoveListener","None","defer","each","signal","any","combinedDisposable","initial","accumulate","latch","cache","firstCall","shouldEmit","isT","flushAfterTimeout","onDidAddFirstListener","chain","sythensize","ChainableSynthesis","evaluate","HaltChainable","steps","step","fromNodeEventEmitter","eventName","on","removeListener","fromDOMEventEmitter","addEventListener","removeEventListener","toPromise","fromPromise","promise","finally","runAndSubscribe","EmitterObserver","_observable","_counter","_hasChanged","addObserver","removeObserver","_change","reportChanges","fromObservable","obs","fromObservableLight","observable","didChange","observer","beginUpdate","endUpdate","handlePossibleChange","handleChange","DisposableStore","all","_idPool","listenerCount","invocationCount","elapsedOverall","durations","_stopWatch","StopWatch","stop","elapsed","LeakageMonitor","threshold","padStart","_warnCountdown","_stacks","topStack","topCount","getMostFrequentStack","Stacktrace","UniqueContainer","_size","_options","_leakageMon","onListenerError","_perfMon","_profName","_deliveryQueue","deliveryQueue","_disposed","current","_listeners","_event","tuple","contained","removeMonitor","ceil","check","EventDeliveryQueuePrivate","adjustDeliveryQueue","dq","_deliver","_deliverQueue","hasListeners","promiseJoin","_asyncDeliveryQueue","LinkedList","thenables","waitUntil","isFrozen","allSettled","status","reason","isPaused","_isPaused","_eventQueue","_mergeFn","pause","resume","_delay","_handle","_queuedEvents","onFirstListenerAdd","onLastListenerRemove","createSingleCallFunction","onAddItem","onRemoveItem","getEvent","_store","multiplexer","itemListeners","DisposableMap","addItem","deleteAndDispose","reduceData","reducedResult","listening","inputEvent","inputEventListener","ConstValueWithChangeEvent","_value","_onDidChange","onDidChange","fnDidRunCallback","_this","didCall","Iterable","is","thing","_empty","single","wrap","iterableOrElement","iterable","done","some","find","flatMap","iterables","reducer","initialValue","consume","atMost","Number","POSITIVE_INFINITY","consumed","asyncToArray","async","ImmortalReference","AsyncReferenceCollection","ReferenceCollection","SafeDisposable","RefCountedDisposable","MandatoryMutableDisposable","DisposableTracker","setDisposableTracker","tracker","disposableTracker","trackDisposable","markAsDisposed","markAsSingleton","singleton","isDisposable","disposeIfDisposable","parent","children","child","setParent","disposeOnReturn","arrays_1","collections_1","map_1","iterator_1","livingDisposables","source","isSingleton","getDisposableData","cacheValue","getRootParent","getTrackedDisposables","rootParentCache","maxReported","preComputedLeaks","uncoveredLeakingObjs","leakingObjects","leakingObjsSet","getStackTracePath","leaking","replace","linesToRemove","regexp","stackTraceStarts","SetMap","stackTracePath","stackTraceFormattedLines","prevStarts","continuations","cont","leaks","details","setParentOfDisposable","errors","AggregateError","self","DISABLE_DISPOSED_WARNING","_toDispose","_isDisposed","clearAndLeak","_disposable","acquire","release","unset","isset","references","reference","counter","object","createReferencedObject","destroyReferencedObject","referenceCollection","ref","clearAndDisposeAll","skipDisposeOnOverwrite","Node","Undefined","prev","_first","_last","node","_insert","atTheEnd","newNode","oldLast","oldFirst","didRemove","_remove","anchor","Touch","BidirectionalMap","CounterSet","getOrSet","mapToString","setToString","mapsStrictEqualIgnoreOrder","_m1","_m2","hasPerformanceNow","globalThis","highResolution","_now","Date","_startTime","_stopTime","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","module","__webpack_modules__","CONSTRUCTOR_ONLY_OPTIONS","_addonManager","AddonManager","_publicOptions","_checkReadonlyOptions","_checkProposedApi","parser","ParserApi","unicode","UnicodeApi","mouseTrackingMode","applicationCursorKeysMode","applicationKeypadMode","originMode","reverseWraparoundMode","sendFocusMode","synchronizedOutputMode","columns","_verifyIntegers","registerMarker","scrollPages","scrollToLine","addon","loadAddon","Infinity","exports","module","nacl","D","D2","X","Y","I","x","vn","xi","y","yi","p","k","u","m","b","z","s","sn","mac","g","f","v","q","t","j","A","Z","M","b2","S","K","zi","L","crypto","exports","module","f","s","b","exports","module","xe","ye","Oe","Je","be","f","N","y","De","K","we","Ce","z","A","j","M","t","_","J","D","R","H","m","k","W","Ke","fe","B","b","Te","Fe","w","I","V","s","u","q","G","p","g","O","F","E","$","S","L","x","T","X","C","v","At","jt","tt","et","rt","kt","lt","Bt","_t","at","P","ot","it","Et","nt","st","U","Gt","ve","Z","dt","Y","$t","ut","pt","Ht","ct","qt","ht","mt","Nt","ft","vt","Ft","It","gt","xt","Lt","yt","Ot","Jt","bt","Dt","wt","Ct","St","Pt","Mt","Kt","Tt","Xt","Rt","Vt","Ut","Yt","zt","Wt","Zt","Qt","Ae","je","te","ee","re","ke","le","Be","_e","ae","oe","ie","Ee","ne","se","Ge","de","$e","ue","pe","He","ce","qe","he","me","Ne","Xe","Re","Ve","Ue","Ye","ze","We","Ze","Qe","Ar","jr","tr","er","rr","kr","lr","Br","_r","ar","or","ir","Er","nr","sr","Gr","dr","$r","ur","pr","Hr","cr","qr","hr","mr","Nr","fr","vr","Fr","Ir","gr","xr","Lr","yr","Or","Jr","br","Dr","wr","Cr","Sr","Pr","Mr","Kr","Tr","Xr","Rr","Vr","Ur","Yr","zr","Wr","Zr","Qr","pl","Q","Ie","ge","Me","Pe","exports","module","require_lib","exports","module","array","resolve","exports","module","require_encoder","exports","module","btoa","self","t","j","u","k","nr","bs","z2","fDCTQuant","m","p","quality","x","y","g","b","duration","encode","require_decoder","exports","module","k","j","p","q","n","component","t","rs","s","z","decode","mcu","v","R","qt","v2","i","sample","path","parse","length","array","frame","maxH","maxV","componentId","x","y","Y","Cr","K","C","M","Ye","G","B","exports","module","encode","decode","exports","module","exports","j","x","y","exports","module","exports","module","x","exports","module","require_constants","exports","module","exports","module","j","require_parser","exports","module","exports","y","x","exports","module","y","x","exports","module","exports","module","y","x","exports","module","x","y","exports","module","exports","module","exports","module","assert","self","error","exports","module","exports","exports","module","inflatedData","exports","module","exports","parse","exports","y","x","exports","module","require_lib","exports","module","decode","encode","exports","module","decode","require_constants","exports","module","exports","module","exports","module","re","t","R","exports","module","exports","module","b","exports","module","re","t","version","m","b","match","require_parse","exports","module","parse","version","er","exports","module","parse","version","v","exports","module","parse","version","s","exports","module","version","er","exports","module","parse","v2","exports","module","exports","module","exports","module","exports","module","parse","version","exports","module","b","exports","module","b","exports","module","b","exports","module","b","exports","module","b","exports","module","b","exports","module","gt","b","exports","module","lt","b","exports","module","b","exports","module","b","exports","module","b","exports","module","b","exports","module","gt","lt","b","exports","module","parse","re","t","version","match","build","exports","module","parse","version","exports","module","LRUCache","exports","module","k","cached","hr","re","t","version","er","M","m","p","z","_","pr","to","set","exports","module","re","t","m","version","er","exports","module","version","er","exports","module","exports","module","er","v","exports","module","er","v","exports","module","gt","require_valid","exports","module","er","exports","module","gt","lt","version","exports","module","version","exports","module","version","exports","module","exports","module","set","v","b","version","exports","module","gt","lt","b","require_semver","exports","module","parse","gt","lt","BREW_LAUNCHD_LABEL","import_node_child_process","import_node_path","raw","log","import_node_fs","import_node_path","bootoutAgent","bootstrapAgent","getAgentPid","getLogPaths","isAgentLoaded","kickstartAgent","ps","import_node_child_process","path","log","p","import_node_fs","import_node_path","resolve","isPidAlive","log","m","import_node_process","import_promises","import_node_child_process","resolve","import_node_util","cmd","b","str","b","j","process","config","m","fs","path","childProcess","unknown","v","promise","option","s","error","match","import_node_fs","import_node_path","path","raw","parseYaml","import_node_fs","import_node_path","path","import_os","CloseEvent: typeof globalThis.CloseEvent","CONNECTION_SYMBOL_KEY: unique symbol","WebSocketServer","ws","resolve","url","env: {\n          incoming: IncomingMessage\n          outgoing: undefined\n          [CONNECTION_SYMBOL_KEY]?: symbol\n        }","messagesReceivedInStarting: [data: WebSocket.RawData, isBinary: boolean][]","ctx: WSContext<WebSocket>","data","error","import_fs","import_path","import_pino","b","b","f","g","k","m","b","f","g","b","f","g","k","m","w","q","p","A","B","z","y","H","b","f","g","k","b","f","g","k","m","w","q","p","b","f","b","f","g","k","m","w","q","p","A","B","z","y","H","W","R","b","f","g","k","m","b","b","import_fs","import_promises","import_os","import_path","import_fast_glob","import_readline","import_events","import_crypto","import_fs","import_promises","sysPath","import_node_path","error","f","path","presolve","basename","pjoin","prelative","psep","import_fs","import_promises","import_os","osType","set","path","fs_watch","error","rawEmitter","listener","basename","file","dirname","newStats","at","mt","closer","fsrealpath","resolve","realpath","stats","string","relative","path","DOUBLE_SLASH_RE","patterns","testString","p","promise","stats","error","statcb","now","stat","b","m","s","ms","pino","getLogger","log","meta","b","configDir","join","log","getLogger","log","getLogger","fg","s","v","t","ts","stat","m","createReadStream","createInterface","meta","getShortProjectName","basename","raw","b","match","dirname","join","hash","Database","window","p","f","path","total","beforeIndex","fromIndex","EXCLUDED_SEGMENTS","resolve","w","process","BATCH_SIZE","DEFAULT_CONFIG_PATH","homedir","cached","statSync","previous","resolvedAccount","evict","map","openSync","readSync","closeSync","import_events","import_fs","import_promises","import_os","import_path","import_readline","v","import_promises","import_node_path","file","record","import_crypto","crypto","nanoid","log","nanoid","import_node_fs","import_node_path","v","nanoid","path","match","j","cacheKey","url","path","v","url","path","raw","k","v","v2","object","path","p","m","clone","url","path","path2","b","k","path","m","j","_","path","_","j","map","k","b","p","re","m","path2","path","_","Node","_Node","m","path","p","v","j","k","b","Node","path","Hono","path","p","Hono","url","ALREADY_HANDLED","alreadyHandled","Hono","url","import_node_fs","import_node_path","cached","v","Hono","import_node_child_process","import_os","resolve","raw","b","Hono","s","ua","ALREADY_HANDLED","alreadyHandled","Hono","import_node_crypto","readRawBody","resolve","crypto","t","Hono","ALREADY_HANDLED","alreadyHandled","Hono","url","ALREADY_HANDLED","alreadyHandled","Hono","url","ALREADY_HANDLED","alreadyHandled","Hono","url","Hono","ws","raw","Hono","ua","ms","import_promises","import_path","b","s","import_better_sqlite3","import_fs","import_path","import_fs","import_path","import_url","f","file","CLAUDE_CODE_PROVIDER","CODEX_CLI_PROVIDER","import_fs","cached","raw","s","raw","Database","b","run","m","s","CLAUDE_CODE_PROVIDER","partial","map","url","import_fs","import_path","import_url","import_meta","getMigrationsDir","runMigrations","pool","f","file","url","config","pg","Pool","import_crypto","path","pool","import_fs","import_os","import_path","url","path","b","import_crypto","record","import_child_process","import_os","import_path","import_fs","import_os","import_path","isWindows","p","readGitBranch","resolve","isWindows","stdout","s","match","raw","import_crypto","import_fs","import_path","m","t","OPTION_RE","BOX_ONLY_RE","BOX_ONLY_RE","OPTION_RE","m","raw","q","BOX_ONLY_RE","t","m","s","path","resolve","y","m","naclUtil","nacl","import_node_events","import_node_fs","import_promises","sp","import_promises","import_node_path","import_node_stream","EntryTypes","defaultOptions","RECURSIVE_ERROR_CODE","NORMAL_FLOW_ERRORS","ALL_TYPES","DIR_TYPES","FILE_TYPES","isNormalFlowError","error","wantBigintFsStats","emptyFn","normalizeFilter","f","ReaddirpStream","path","presolve","basename","pjoin","prelative","psep","readdirp","import_node_fs","import_promises","import_node_os","STR_DATA","STR_END","STR_CLOSE","EMPTY_FN","pl","isWindows","isMacos","isLinux","isFreeBSD","isIBMi","osType","EVENTS","EV","THROTTLE_MODE_WATCH","statMethods","KEY_LISTENERS","KEY_ERR","KEY_RAW","HANDLER_KEYS","binaryExtensions","isBinaryPath","foreach","addAndConvert","clearItem","set","delFromSet","isEmptySet","FsWatchInstances","createFsWatchInstance","path","fsWatchBroadcast","fs_watch","error","setFsWatchListener","FsWatchFileInstances","setFsWatchFileListener","rawEmitter","listener","NodeFsHandler","basename","EMPTY_FN","file","dirname","newStats","at","mt","closer","fsrealpath","STR_DATA","resolve","STR_END","realpath","stats","SLASH","SLASH_SLASH","ONE_DOT","TWO_DOTS","STRING_TYPE","BACK_SLASH_RE","DOUBLE_SLASH_RE","DOT_RE","REPLACER_RE","arrify","isMatcherObject","createPattern","string","relative","normalizePath","path","matchPatterns","patterns","anymatch","testString","unifyPaths","p","normalizePathToUnix","toUnix","normalizeIgnored","getAbsolutePath","EMPTY_SET","DirEntry","EMPTY_FN","STAT_METHOD_F","STAT_METHOD_L","WatchHelper","FSWatcher","isIBMi","EVENTS","NodeFsHandler","promise","isWindows","stats","error","statcb","now","stat","readdirp","STR_CLOSE","STR_END","watch","import_fs","import_promises","error","path","st","import_fs","normalizeContent","raw","q","b","ENTER","q","raw","map","s","b","import_crypto","import_promises","import_path","heicConvert","import_node_crypto","run","date","date","date","time","array","ws","t","raw","v","config","p","t","m","meta","TemporalClient","self","url","ws","s","runMigrations","resolve","ALREADY_HANDLED","json","ct","hostname","ts","map","total","adapted","CLAUDE_CODE_PROVIDER","stat","CODEX_CLI_PROVIDER","uuid","filePath","availability","messagesPayload","b","q","resp","cached","body","f","fsWatch","path","raw","semver","import_node_fs","url","import_node_crypto","import_node_fs","import_node_path","import_promises","raw","hash","stat","import_node_os","import_node_path","version","import_node_child_process","import_node_util","label","stdout","import_node_fs","import_node_path","version","import_node_fs","import_node_path","import_semver","version","path","semver","b","import_node_fs","import_events","import_fs","import_node_events","import_node_stream","import_node_path","import_node_fs","import_path","import_node_crypto","import_promises","proc","isStream","s","Minipass","Stream","isReadable","isWritable","EventEmitter","EOF","MAYBE_EMIT_END","EMITTED_END","EMITTING_END","EMITTED_ERROR","CLOSED","READ","FLUSH","FLUSHCHUNK","ENCODING","DECODER","FLOWING","PAUSED","RESUME","BUFFER","PIPES","BUFFERLENGTH","BUFFERPUSH","BUFFERSHIFT","OBJECTMODE","DESTROYED","ERROR","EMITDATA","EMITEND","EMITEND2","ASYNC","ABORT","ABORTED","SIGNAL","DATALISTENERS","DISCARDED","defer","fn","nodefer","isEndish","ev","isArrayBufferLike","b","isArrayBufferView","Pipe","src","dest","opts","_er","PipeProxyErrors","er","isObjectModeOptions","o","isEncodingOptions","args","options","StringDecoder","signal","_enc","_om","a","_","chunk","encoding","cb","n","ret","c","noDrain","ended","p","handler","h","data","buf","resolve","reject","stopped","stop","res","onerr","ondata","onend","ondestroy","value","rej","next","wc","writev","fs","_autoClose","_close","_ended","_fd","_finished","_flags","_flush","_handleChunk","_makeBuf","_mode","_needDrain","_onerror","_onopen","_onread","_onwrite","_open","_path","_pos","_queue","_read","_readSize","_reading","_remain","_size","_write","_writing","_defaultFlag","_errored","ReadStream","path","opt","fd","br","ReadStreamSync","threw","WriteStream","EE","defaultFlag","enc","bw","iovec","WriteStreamSync","argmap","isSyncFile","isAsyncFile","isSyncNoFile","isAsyncNoFile","isFile","dealiasKey","k","d","dealias","result","key","v","makeCommand","syncFile","asyncFile","syncNoFile","asyncNoFile","validate","opt_","entries","realZlibConstants","realZlib","constants","OriginalBufferConcat","Buffer","desc","noop","passthroughBufferConcat","makeNoOp","_superWrite","ZlibError","err","origin","_flushFlag","ZlibBase","#sawError","#ended","#flushFlag","#finishFlushFlag","#fullFlushFlag","#handle","#onError","mode","assert","flushFlag","nativeHandle","originalNativeClose","originalClose","writeReturn","r","i","Zlib","#level","#strategy","level","strategy","origFlush","Gzip","#portable","Unzip","Brotli","BrotliCompress","BrotliDecompress","Zstd","ZstdCompress","ZstdDecompress","encode","num","encodeNegative","encodePositive","flipped","byte","onesComp","twosComp","parse","pre","pos","twos","len","sum","f","types_exports","__export","code","isCode","isName","name","normalFsTypes","kv","notNegative","Header","#type","off","ex","gex","#slurp","t","decString","isNormalFS","exForFields","gexForFields","decNumber","decDate","prefix","prefixSize","split","splitPrefix","encString","encNumber","encDate","type","pp","root","pathModule","size","numToDate","decSmallNumber","nanUndef","MAXNUM","encSmallNumber","octalString","padOctal","str","date","NULLS","Pax","_Pax","obj","global","body","bodyLen","bufLen","basename","field","byteLen","digits","g","merge","parseKV","parseKVLine","set","line","platform","normalizeWindowsPath","ReadEntry","header","writeLen","warnMethod","self","message","maxMetaEntrySize","gzipHeader","zstdHeader","ZIP_HEADER_LEN","STATE","WRITEENTRY","READENTRY","NEXTENTRY","PROCESSENTRY","EX","GEX","META","EMITMETA","QUEUE","ENDED","EMITTEDEND","EMIT","UNZIP","CONSUMECHUNK","CONSUMECHUNKSUB","CONSUMEBODY","CONSUMEMETA","CONSUMEHEADER","CONSUMING","BUFFERCONCAT","MAYBEEND","WRITING","DONE","SAW_VALID_ENTRY","SAW_NULL_BLOCK","SAW_EOF","CLOSESTREAM","MAX_DECOMPRESSION_RATIO","COMPRESSEDBYTESREAD","DECOMPRESSEDBYTESREAD","CHECKDECOMPRESSIONRATIO","Parser","isTBR","isTZST","position","entry","go","re","extra","error","ratio","isZstd","maybeBrotli","have","length","stripTrailingSlashes","slashesStart","onReadEntryFunction","onReadEntry","filesFilter","files","map","filter","mapHas","file","m","dirname","listFileSync","stat","readSize","read","bytesRead","listFile","_files","stream","list","modeFix","isDir","portable","isAbsolute","win32","stripAbsolutePath","parsed","raw","win","char","toWin","toRaw","decode","prefixPath","maxReadSize","PROCESS","FILE","DIRECTORY","SYMLINK","HARDLINK","HEADER","LSTAT","ONLSTAT","ONREAD","ONREADLINK","OPENFILE","ONOPENFILE","CLOSE","MODE","AWAITDRAIN","ONDRAIN","PREFIX","WriteEntry","#hadError","pathWarn","stripped","cs","getType","block","linkpath","linkKey","offset","WriteEntrySync","WriteEntryTar","readEntry","Yallist","_Yallist","item","walker","node","prev","head","tail","l","push","unshift","thisp","initial","acc","arr","from","to","start","deleteCount","nodes","insertAfter","inserted","Node","PackJob","absolute","ONSTAT","PENDINGLINKS","CURRENT","PROCESSING","PROCESSJOB","JOBS","JOBDONE","ADDFSENTRY","ADDTARENTRY","STAT","READDIR","ONREADDIR","PIPE","ENTRY","ENTRYOPT","WRITEENTRYCLASS","WRITE","Pack","zip","job","pending","w","sc","rc","msg","base","source","PackSync","createFileSync","addFilesSync","createFile","promise","addFilesAsync","createSync","createAsync","create","_opt","isWindows","O_CREAT","O_NOFOLLOW","O_TRUNC","O_WRONLY","UV_FS_O_FILEMAP","fMapEnabled","fMapLimit","fMapFlag","noFollowFlag","getWriteFlag","lchownSync","uid","gid","chown","cpath","chownrKid","child","chownr","children","errState","then","chownrKidSync","chownrSync","e","CwdError","SymlinkError","symlink","checkCwd","dir","st","mkdir","umask","needChmod","doChown","preserve","unlink","cwd","done","created","fsp","made","parts","mkdir_","part","onmkdir","statEr","checkCwdSync","ok","mkdirSync","normalizeCache","MAX","cache","normalizeUnicode","getDirs","join","PathReservations","#queues","#reservations","#running","paths","dirs","q","#run","#getQueues","#clear","q0","ONENTRY","CHECKFS","CHECKFS2","ISREUSABLE","MAKEFS","LINK","ENSURE_NO_SYMLINK","UNSUPPORTED","CHECKPATH","STRIPABSOLUTEPATH","MKDIR","ONERROR","PENDING","PEND","UNPEND","MAYBECLOSE","SKIP","DOCHOWN","UID","GID","CHECKED_CWD","DEFAULT_MAX_DEPTH","unlinkFile","randomBytes","unlinkFileSync","uint32","Unpack","entryDir","resolved","linkparts","aRoot","pRoot","fullyDone","actions","abs","atime","mtime","er2","tx","onError","parent","afterMakeParent","lstatEr","afterChmod","link","callSync","UnpackSync","mkParent","oner","closeError","futimeser","fchowner","_entry","linkSync","extractFileSync","u","extractFile","extract","replaceSync","headBuf","POSITION","bufPos","bytes","entryBlockSize","streamSync","replaceAsync","getPos","cb_","onread","flag","onopen","replace","update","mtimeFilter","import_node_fs","import_node_path","check","import_node_child_process","import_node_fs","log","file","fs","f","resolve","program","s","log","program","resolveDevPlan","detectProdActive","isPortInUse","findFreePort","takeoverProd","interactivePrompt","getGitToplevel","v","rmSync","existsSync","join","f","runSetKey","result","url","qrcode"]}